diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.C index 6c71f1e66a..bf59c4d3b4 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.C @@ -29,6 +29,7 @@ License #include "objectiveIncompressible.H" #include "incompressiblePrimalSolver.H" +#include "incompressibleAdjointSolver.H" #include "createZeroField.H" #include "addToRunTimeSelectionTable.H" @@ -611,6 +612,116 @@ void objectiveIncompressible::nullify() } +void objectiveIncompressible::allocatedJdTurbulence() +{ + // Figure out the availability of the adjoint turbulence model variables + // through their primal counterparts, since the contructor of the adjoint + // solver has not been completed yet + const incompressiblePrimalSolver& primSolver = + mesh_.lookupObject(primalSolverName_); + const autoPtr& rasVars = + primSolver.getIncoVars().RASModelVariables(); + + if (rasVars().hasTMVar1()) + { + const dimensionSet primalVarDims = rasVars->TMVar1Inst().dimensions(); + const dimensionSet sourceDims = dimArea/pow3(dimTime)/primalVarDims; + dJdTMvar1Ptr_.reset + ( + createZeroFieldPtr + ( + mesh_, + "ATMSource1", + sourceDims + ) + ); + } + if (rasVars().hasTMVar2()) + { + const dimensionSet primalVarDims = rasVars->TMVar2Inst().dimensions(); + const dimensionSet sourceDims = dimArea/pow3(dimTime)/primalVarDims; + dJdTMvar2Ptr_.reset + ( + createZeroFieldPtr + ( + mesh_, + "ATMSource2", + sourceDims + ) + ); + } +} + + +void objectiveIncompressible::checkCellZonesSize +( + const labelList& zoneIDs +) const +{ + label nCells(0); + for (const label zI : zoneIDs) + { + nCells += mesh_.cellZones()[zI].size(); + } + reduce(nCells, sumOp