Skip to content

BUG: ISQP with the ShermanMorrison preconditioner crashes in the absence of bound constraints

Summary

When using the ISQP updateMethod with the ShermanMorrison preconditioner, the optimisation will crash at the first update of the design variables, if the latter have no bounds.

Steps to reproduce

Run the tutorial under $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/shapeOptimisation/naca0012/laminar/multipleConstraints, after enabling the ShermanMorrison preconditioner in the optimisationDict

updateMethod
{
    method          ISQP;
    preconditioner  ShermanMorrison;
    ....
}

What is the current bug behaviour?

When no bounds are allocated, the tdiag tmp holds a null pointer in the following line of ISQP.C

   432     // Contribution from bound constraints, treated as the seed of the         
   433     // L-BFGS inverse                                                            
   434     tmp<scalarField> tdiag(nullptr);                                             
   435     if (includeBoundConstraints_)                                                
   436     {                                                                            
   437         tdiag.reset(lTilda_()/ls_() + uTilda_()/us_());                          
   438     }  

which causes a FatalError when the tmp is passed by copy to LBFGS::invHessianVectorProduct

Environment information

  • OpenFOAM version : v2312