From 8127ec6a05d994a3da232aab45faa9c246feab27 Mon Sep 17 00:00:00 2001 From: Vaggelis Papoutsis Date: Wed, 23 Nov 2022 15:51:15 +0200 Subject: [PATCH] ENH: added some auxiliary functions in objective to help allocate pointers related to contributions to the adjoint turbulence model PDEs, populate them and check the validity of the cellZones provided for cellZone-based objectives --- .../objectiveIncompressible.C | 111 ++++++++++++++++++ .../objectiveIncompressible.H | 22 ++++ 2 files changed, 133 insertions(+) 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