diff --git a/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/incompressibleAdjointSolver/incompressibleAdjointSolver.C b/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/incompressibleAdjointSolver/incompressibleAdjointSolver.C index cd6cc6839dd6fc9cf9cce057b55177481e2d6976..fa3770a874f9d61918dede19d94e540c3a078581 100644 --- a/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/incompressibleAdjointSolver/incompressibleAdjointSolver.C +++ b/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/incompressibleAdjointSolver/incompressibleAdjointSolver.C @@ -420,19 +420,21 @@ void Foam::incompressibleAdjointSolver::accumulateBCSensitivityIntegrand fvPatchVectorField& Uab = UaBoundary[patchI]; if (isA<adjointVectorBoundaryCondition>(Uab)) { - const fvPatch& patch = mesh_.boundary()[patchI]; - tmp<vectorField> tnf = patch.nf(); - const scalarField& magSf = patch.magSf(); - - tmp<vectorField> DvDbMult = - nuEffBoundary[patchI]*(Uab.snGrad() + (gradUabf[patchI] & tnf)) - // - (nf*pa.boundaryField()[patchI]) - + adjointTurbulence().adjointMomentumBCSource()[patchI]; - bcDxDbMult()[patchI] += - ( - DvDbMult - & refCast<adjointVectorBoundaryCondition>(Uab).dxdbMult() - )*magSf*dt; + tmp<tensorField> dxdbMult = + refCast<adjointVectorBoundaryCondition>(Uab).dxdbMult(); + if (dxdbMult) + { + const fvPatch& patch = mesh_.boundary()[patchI]; + tmp<vectorField> tnf = patch.nf(); + const scalarField& magSf = patch.magSf(); + + tmp<vectorField> DvDbMult = + nuEffBoundary[patchI] + *(Uab.snGrad() + (gradUabf[patchI] & tnf)) + // - (nf*pa.boundaryField()[patchI]) + + adjointTurbulence().adjointMomentumBCSource()[patchI]; + bcDxDbMult()[patchI] += (DvDbMult & dxdbMult())*magSf*dt; + } } } }