54 objectiveIncompressible::objectiveIncompressible
58 const word& adjointSolverName,
59 const word& primalSolverName
78 dJdTMvar1Ptr_(nullptr),
79 dJdTMvar2Ptr_(nullptr),
87 bdJdTMvar1Ptr_(nullptr),
88 bdJdTMvar2Ptr_(nullptr),
90 bdJdGradUPtr_(nullptr)
103 const word& adjointSolverName,
104 const word& primalSolverName
110 <<
" of type " << modelType <<
endl;
112 auto* ctorPtr = dictionaryConstructorTable(modelType);
119 "objectiveIncompressible",
121 *dictionaryConstructorTablePtr_
125 return autoPtr<objectiveIncompressible>
127 ctorPtr(
mesh,
dict, adjointSolverName, primalSolverName)
142 dJdvPtr_().primitiveFieldRef() *= oneOverNorm;
146 dJdpPtr_().primitiveFieldRef() *= oneOverNorm;
150 dJdTPtr_().primitiveFieldRef() *= oneOverNorm;
210 createZeroFieldPtr<vector>
229 createZeroFieldPtr<scalar>
233 dimensionSet(0, 3, -2, 0, 0, 0, 0)
248 createZeroFieldPtr<scalar>
252 dimensionSet(0, 3, -2, 0, 0, 0, 0)
267 createZeroFieldPtr<scalar>
270 (
"dJdTMvar1_"+
type()),
271 dimensionSet(0, 0, -2, 0, 0, 0, 0)
286 createZeroFieldPtr<scalar>
289 (
"dJdTMvar2_"+
type()),
290 dimensionSet(0, 3, -2, 0, 0, 0, 0)
620 const incompressiblePrimalSolver& primSolver =
622 const autoPtr<incompressible::RASModelVariables>& rasVars =
623 primSolver.getIncoVars().RASModelVariables();
625 if (rasVars().hasTMVar1())
627 const dimensionSet primalVarDims = rasVars->TMVar1Inst().dimensions();
631 createZeroFieldPtr<scalar>
639 if (rasVars().hasTMVar2())
641 const dimensionSet primalVarDims = rasVars->TMVar2Inst().dimensions();
645 createZeroFieldPtr<scalar>
666 reduce(nCells, sumOp<label>());
670 <<
"Provided cellZones include no cells" 678 autoPtr<volScalarField>& dJdTMvarPtr,
680 (incompressibleAdjoint::adjointRASModel::*JacobianFunc)()
const,
693 const incompressibleAdjointSolver& adjSolver =
696 const autoPtr<incompressibleAdjoint::adjointRASModel>& adjointRAS =
697 adjSolver.getAdjointVars().adjointTurbulence();
699 tmp<volScalarField> tnutJacobian = (adjointRAS->*JacobianFunc)();
704 for (
const label zI : zones)
707 for (
const label cellI : zoneI)
710 JacobianMultiplier[cellI]*nutJacobian[cellI];
717 <<
"Skipping the computation of nutJacobian until " 718 <<
"the adjoint solver is complete" word dictName() const
The local dictionary name (final part of scoped name)
virtual void update_meanValues()
Some objectives need to store some auxiliary values. If averaging is enabled, update these mean value...
virtual void update_boundarydJdp()
virtual void doNormalization()
Normalize all fields allocated by the objective.
static autoPtr< objectiveIncompressible > New(const fvMesh &mesh, const dictionary &dict, const word &adjointSolverName, const word &primalSolverName)
Return a reference to the selected turbulence model.
const labelIOList & zoneIDs
const Type & lookupObject(const word &name, const bool recursive=false) const
Lookup and return const reference to the object of the given Type. Fatal if not found or the wrong ty...
const volScalarField & dJdp()
Contribution to field adjoint continuity eq.
virtual void update_boundarydJdnut()
fvPatchField< vector > fvPatchVectorField
volTensorField::Boundary boundaryTensorField
const word adjointSolverName_
const dictionary & dict() const
Return objective dictionary.
autoPtr< volScalarField > dJdpPtr_
errorManipArg< error, int > exit(error &err, const int errNo=1)
autoPtr< volScalarField > dJdTMvar2Ptr_
Second turbulence model variable.
bool hasBoundarydJdT() const
autoPtr< boundaryScalarField > bdJdTMvar2Ptr_
Adjoint outlet turbulence model var 2.
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
const boundaryScalarField & boundarydJdT()
Objective partial deriv wrt temperature for all patches.
virtual void update_dndbMultiplier()
Update d (normal) / db multiplier. Surface-based sensitivity term.
virtual void update()
Update objective function derivatives.
autoPtr< volScalarField > dJdTPtr_
dimensionedSymmTensor sqr(const dimensionedVector &dv)
autoPtr< scalar > normFactor_
Normalization factor.
volVectorField::Boundary boundaryVectorField
void update_dJdTMvar(autoPtr< volScalarField > &dJdTMvarPtr, tmp< volScalarField >(incompressibleAdjoint::adjointRASModel::*JacobianFunc)() const, const volScalarField &JacobianMultiplier, const labelList &zones)
Compute dJdTMVar{1,2}.
bool hasBoundarydJdnut() const
bool hasBoundarydJdTMVar2() const
virtual void doNormalization()
Normalize all fields allocated by the objective.
bool hasBoundarydJdTMVar1() const
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void checkCellZonesSize(const labelList &zoneIDs) const
Check if cellZones provided include at least one cell.
bool hasdJdTMVar2() const
virtual void update_boundarydJdv()
autoPtr< boundaryTensorField > bdJdGradUPtr_
Term multiplying gradU variations.
virtual void update_divDxDbMultiplier()
Update div( dx/db multiplier). Volume-based sensitivity term.
virtual void update_boundarydJdvn()
T get(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T. FatalIOError if not found, or if the number of tokens is incorrect.
fvPatchField< tensor > fvPatchTensorField
GeometricField< vector, fvPatchField, volMesh > volVectorField
virtual void update_dSdbMultiplier()
Update d (normal dS) / db multiplier. Surface-based sensitivity term.
virtual void update_boundarydJdvt()
Macros for easy insertion into run-time selection tables.
const boundaryScalarField & boundarydJdTMvar2()
Objective partial deriv wrt turbulence model var 2 for all patches.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
const volScalarField & dJdT()
Contribution to field adjoint energy eq.
autoPtr< boundaryScalarField > bdJdnutPtr_
Jacobian wrt to nut.
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
virtual bool write(const bool valid=true) const
Write objective function history.
const boundaryScalarField & boundarydJdTMvar1()
Objective partial deriv wrt turbulence model var 1 for all patches.
const boundaryScalarField & boundarydJdvn()
Objective partial deriv wrt normal velocity for all patches.
virtual void update_dJdT()
fvPatchField< scalar > fvPatchScalarField
A class for handling words, derived from Foam::string.
const boundaryTensorField & boundarydJdGradU()
Objective partial deriv wrt gradU.
virtual void nullify()
Update objective function derivatives.
bool hasdJdTMVar1() const
autoPtr< volVectorField > dJdvPtr_
label size() const noexcept
The number of elements in the list.
virtual void update_boundarydJdT()
const volScalarField & dJdTMvar1()
Contribution to field adjoint turbulence model variable 1.
virtual void update_dJdp()
virtual void update_dJdb()
const boundaryVectorField & boundarydJdp()
Objective partial deriv wrt pressure (times normal) for all patches.
const volScalarField & dJdTMvar2()
Contribution to field adjoint turbulence model variable 2.
virtual scalar J()=0
Return the objective function value.
bool hasBoundarydJdvn() const
autoPtr< boundaryVectorField > bdJdvPtr_
virtual bool write(const bool valid=true) const
Write objective function history.
Abstract base class for objective functions. No point in making this runTime selectable since its chi...
bool hasBoundarydJdp() const
const boundaryVectorField & boundarydJdvt()
Objective partial deriv wrt tangent velocity for all patches.
defineRunTimeSelectionTable(reactionRateFlameArea, dictionary)
virtual void update_boundarydJdTMvar1()
autoPtr< boundaryVectorField > bdJdpPtr_
Adjoint (intlet,wall) velocity.
defineTypeNameAndDebug(combustionModel, 0)
bool hasdJdv() const
Inline functions for checking whether pointers are set or not.
const word primalSolverName_
autoPtr< boundaryScalarField > bdJdTPtr_
Adjoint outlet temperature.
void allocatedJdTurbulence()
Allocate fields related to the differentiation of turbulence models, if necessary.
void computeMeanFields()
Compute mean fields on the fly.
addToRunTimeSelectionTable(decompositionMethod, kahipDecomp, dictionary)
const incompressibleVars & vars_
dimensionedScalar pow3(const dimensionedScalar &ds)
virtual void update_boundaryEdgeContribution()
Update boundary edge contributions.
virtual void nullify()
Nullify adjoint contributions.
#define WarningInFunction
Report a warning using Foam::Warning.
const dimensionSet dimLength(0, 1, 0, 0, 0, 0, 0)
const boundaryScalarField & boundarydJdnut()
Objective partial deriv wrt nut for all patches.
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
virtual void update_dJdTMvar2()
scalar weight_
Objective weight.
bool hasBoundarydJdv() const
Mesh data needed to do the Finite Volume discretisation.
virtual void update_dJdv()
Update vol and boundary fields and derivatives.
virtual void update_dxdbMultiplier()
Update d (x) / db multiplier. Surface-based sensitivity term.
virtual void update_dxdbDirectMultiplier()
Update d (x) / db multiplier. Surface and volume-based sensitivity term.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
const cellZoneMesh & cellZones() const noexcept
Return cell zone mesh.
void reduce(const List< UPstream::commsStruct > &comms, T &value, const BinaryOp &bop, const int tag, const label comm)
Reduce inplace (cf. MPI Allreduce) using specified communication schedule.
autoPtr< boundaryVectorField > bdJdvtPtr_
Adjoint outlet velocity.
bool hasBoundarydJdvt() const
messageStream Info
Information stream (stdout output on master, null elsewhere)
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
bool foundObject(const word &name, const bool recursive=false) const
Is the named Type found?
bool hasBoundarydJdGradU() const
autoPtr< boundaryScalarField > bdJdTMvar1Ptr_
Adjoint outlet turbulence model var 1.
Base class for primal incompressible solvers.
List< label > labelList
A List of labels.
autoPtr< boundaryScalarField > bdJdvnPtr_
Adjoint outlet pressure.
virtual void update_boundarydJdGradU()
autoPtr< volScalarField > dJdTMvar1Ptr_
First turbulence model variable.
virtual void update_boundarydJdTMvar2()
virtual void update_boundarydJdb()
Update objective function derivative term.
#define FatalIOErrorInLookup(ios, lookupTag, lookupName, lookupTable)
Report an error message using Foam::FatalIOError.
volScalarField::Boundary boundaryScalarField
Abstract base class for objective functions in incompressible flows.
const boundaryVectorField & boundarydJdv()
Objective partial deriv wrt velocity for all patches.
const volVectorField & dJdv()
Contribution to field adjoint momentum eqs.
virtual void update_dJdTMvar1()
const dimensionSet dimArea(sqr(dimLength))
virtual void update_gradDxDbMultiplier()
Update grad( dx/db multiplier). Volume-based sensitivity term.
IOerror FatalIOError
Error stream (stdout output on all processes), with additional 'FOAM FATAL IO ERROR' header text and ...
static constexpr const zero Zero
Global zero (0)