FIBaseIncompressible.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2007-2020 PCOpt/NTUA
9  Copyright (C) 2013-2020 FOSS GP
10  Copyright (C) 2019-2020 OpenCFD Ltd.
11 -------------------------------------------------------------------------------
12 License
13  This file is part of OpenFOAM.
14 
15  OpenFOAM is free software: you can redistribute it and/or modify it
16  under the terms of the GNU General Public License as published by
17  the Free Software Foundation, either version 3 of the License, or
18  (at your option) any later version.
19 
20  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
21  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
22  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23  for more details.
24 
25  You should have received a copy of the GNU General Public License
26  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
27 
28 \*---------------------------------------------------------------------------*/
29 
30 #include "FIBaseIncompressible.H"
32 #include "fvOptions.H"
33 
34 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
35 
36 namespace Foam
37 {
38 
39 namespace incompressible
40 {
41 
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 
45 
46 
47 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
48 
49 void FIBase::read()
50 {
52  dict_.getOrDefault<bool>
53  (
54  "includeDistance",
55  adjointVars_.adjointTurbulence().ref().includeDistance()
56  );
57 
58  // Allocate distance solver if needed
60  {
61  eikonalSolver_.reset
62  (
64  (
65  mesh_,
66  dict_,
69  sensitivityPatchIDs_
70  )
71  );
72  }
73 }
74 
75 
76 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
77 
78 FIBase::FIBase
79 (
80  const fvMesh& mesh,
81  const dictionary& dict,
82  incompressibleVars& primalVars,
83  incompressibleAdjointVars& adjointVars,
85 )
86 :
87  shapeSensitivities
88  (
89  mesh,
90  dict,
91  primalVars,
92  adjointVars,
94  ),
95  gradDxDbMult_
96  (
97  IOobject
98  (
99  "gradDxDbMult",
100  mesh_.time().timeName(),
101  mesh_,
102  IOobject::NO_READ,
103  IOobject::NO_WRITE
104  ),
105  mesh_,
107  ),
108  divDxDbMult_(mesh_.nCells(), Zero),
109  optionsDxDbMult_(mesh_.nCells(), Zero),
110 
111  includeDistance_(false),
112  eikonalSolver_(nullptr)
113 {
114  read();
115 }
116 
117 
118 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
119 
120 bool FIBase::readDict(const dictionary& dict)
121 {
123  {
124  if (eikonalSolver_)
125  {
126  eikonalSolver_().readDict(dict);
127  }
128 
129  return true;
130  }
131 
132  return false;
133 }
134 
135 
136 void FIBase::accumulateIntegrand(const scalar dt)
137 {
138  // Accumulate multiplier of grad(dxdb)
140 
141  // Accumulate multiplier of div(dxdb)
143  for (objective& func : functions)
144  {
145  divDxDbMult_ +=
146  func.weight()*func.divDxDbMultiplier().primitiveField()*dt;
147  }
148 
149  // Terms from fvOptions
151  (
153  );
154 
155  // Accumulate source for the adjoint to the eikonal equation
156  if (includeDistance_)
157  {
158  eikonalSolver_->accumulateIntegrand(dt);
159  }
160 
161  // Accumulate direct sensitivities
163 
164  // Accumulate sensitivities due to boundary conditions
166 
167 }
168 
169 
171 {
173  divDxDbMult_ = Zero;
175 
176  if (includeDistance_)
177  {
178  eikonalSolver_->reset();
179  }
180 
182 }
183 
184 
185 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
186 
187 } // End namespace incompressible
188 } // End namespace Foam
189 
190 // ************************************************************************* //
Foam::sensitivity::dict
const dictionary & dict() const
Definition: sensitivity.C:50
Foam::incompressible::FIBase::optionsDxDbMult_
vectorField optionsDxDbMult_
Definition: FIBaseIncompressible.H:68
Foam::IOobject::NO_WRITE
@ NO_WRITE
Definition: IOobject.H:191
Foam::objectiveManager
class for managing incompressible objective functions.
Definition: objectiveManager.H:50
Foam::IOobject
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition: IOobject.H:165
Foam::variablesSet::solverName
const word & solverName() const
Definition: variablesSet.C:77
fvOptions.H
Foam::incompressible::FIBase::clearSensitivities
virtual void clearSensitivities()
Definition: FIBaseIncompressible.C:163
Foam::incompressible::defineTypeNameAndDebug
defineTypeNameAndDebug(adjointEikonalSolver, 0)
Foam::dimLength
const dimensionSet dimLength(0, 1, 0, 0, 0, 0, 0)
Definition: dimensionSets.H:50
Foam::Zero
static constexpr const zero Zero
Definition: zero.H:131
Foam::fv::options::New
static options & New(const fvMesh &mesh)
Definition: fvOptions.C:96
Foam::read
bool read(const char *buf, int32_t &val)
Definition: int32.H:125
Foam::incompressible::FIBase::gradDxDbMult_
volTensorField gradDxDbMult_
Definition: FIBaseIncompressible.H:62
Foam::incompressible::shapeSensitivities::accumulateBCSensitivityIntegrand
virtual void accumulateBCSensitivityIntegrand(const scalar dt)
Definition: shapeSensitivitiesIncompressible.C:59
Foam::incompressible::FIBase::read
void read()
Definition: FIBaseIncompressible.C:42
Foam::incompressible::FIBase::divDxDbMult_
scalarField divDxDbMult_
Definition: FIBaseIncompressible.H:65
Foam::incompressibleAdjointVars
Class including all adjoint fields for incompressible flows.
Definition: incompressibleAdjointVars.H:46
Foam::incompressible::FIBase::eikonalSolver_
autoPtr< adjointEikonalSolver > eikonalSolver_
Definition: FIBaseIncompressible.H:74
Foam::incompressible::shapeSensitivities
Definition: shapeSensitivitiesIncompressible.H:51
Foam::incompressible::adjointEikonalSolver
Solver of the adjoint to the eikonal PDE.
Definition: adjointEikonalSolverIncompressible.H:142
Foam::dimTime
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
Definition: dimensionSets.H:51
Foam::sensitivity::mesh_
const fvMesh & mesh_
Definition: sensitivity.H:65
Foam::pow3
dimensionedScalar pow3(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:82
Foam::sensitivity::readDict
virtual bool readDict(const dictionary &dict)
Definition: sensitivity.C:56
Foam::T
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
Definition: FieldFieldFunctions.C:51
Foam::incompressible::FIBase::readDict
virtual bool readDict(const dictionary &dict)
Definition: FIBaseIncompressible.C:113
Foam::PtrList
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers....
Definition: List.H:55
Foam::func
void func(FieldField< Field, Type > &f, const FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
FIBaseIncompressible.H
Foam::incompressible::shapeSensitivities::accumulateDirectSensitivityIntegrand
virtual void accumulateDirectSensitivityIntegrand(const scalar dt)
Definition: shapeSensitivitiesIncompressible.C:40
timeName
word timeName
Definition: getTimeIndex.H:3
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:119
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam::dimensioned
Generic dimensioned Type class.
Definition: dimensionedScalarFwd.H:36
Foam::incompressible::adjointSensitivity::adjointVars_
incompressibleAdjointVars & adjointVars_
Definition: adjointSensitivityIncompressible.H:81
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:81
Foam
Definition: atmBoundaryLayer.C:26
Foam::fv::optionList::postProcessSens
void postProcessSens(Field< Type > &sensField, const word &fieldName=word::null, const word &designVariablesName=word::null)
Definition: fvOptionListTemplates.C:391
Foam::incompressible::adjointSensitivity::primalVars_
incompressibleVars & primalVars_
Definition: adjointSensitivityIncompressible.H:80
Foam::incompressibleVars::RASModelVariables
const autoPtr< incompressible::RASModelVariables > & RASModelVariables() const
Definition: incompressibleVars.C:437
Foam::sensitivity::dict_
dictionary dict_
Definition: sensitivity.H:66
Foam::incompressible::FIBase
Base class for Field Integral-based sensitivity derivatives.
Definition: FIBaseIncompressible.H:53
Foam::sqr
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Definition: dimensionedSymmTensor.C:44
Foam::incompressibleAdjointVars::adjointTurbulence
const autoPtr< incompressibleAdjoint::adjointRASModel > & adjointTurbulence() const
Definition: incompressibleAdjointVars.C:63
Foam::incompressible::FIBase::includeDistance_
bool includeDistance_
Definition: FIBaseIncompressible.H:71
Foam::incompressible::FIBase::accumulateIntegrand
virtual void accumulateIntegrand(const scalar dt)
Definition: FIBaseIncompressible.C:129
Foam::VectorSpace< Vector< scalar >, scalar, 3 >::zero
static const Form zero
Definition: VectorSpace.H:111
Foam::incompressible::shapeSensitivities::clearSensitivities
virtual void clearSensitivities()
Definition: shapeSensitivitiesIncompressible.C:151
Foam::dictionary::getOrDefault
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
Definition: dictionaryTemplates.C:141
Foam::IOobject::NO_READ
@ NO_READ
Definition: IOobject.H:184
Foam::objective
Abstract base class for objective functions. No point in making this runTime selectable since its chi...
Definition: objective.H:55
Foam::objectiveManager::getObjectiveFunctions
PtrList< objective > & getObjectiveFunctions()
Definition: objectiveManager.C:289
Foam::dimensionedTensor
dimensioned< tensor > dimensionedTensor
Dimensioned tensor obtained from generic dimensioned type.
Definition: dimensionedTensor.H:48
Foam::incompressible::adjointSensitivity::computeGradDxDbMultiplier
tmp< volTensorField > computeGradDxDbMultiplier()
Definition: adjointSensitivityIncompressible.C:136
Foam::incompressibleVars
Base class for solution control classes.
Definition: incompressibleVars.H:48
Foam::incompressible::adjointSensitivity::objectiveManager_
objectiveManager & objectiveManager_
Definition: adjointSensitivityIncompressible.H:82