sensitivityBezierFIIncompressible.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 
32 #include "IOmanip.H"
33 
34 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
35 
36 namespace Foam
37 {
38 
39 namespace incompressible
40 {
41 
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 
44 defineTypeNameAndDebug(sensitivityBezierFI, 0);
46 (
47  adjointSensitivity, sensitivityBezierFI, dictionary
48 );
49 
50 
51 // * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * * //
52 
54 {
55  // Laplace solution controls
56  const dictionary dxdbDict = dict_.subOrEmptyDict("dxdbSolver");
57  meshMovementIters_ = dxdbDict.getOrDefault<label>("iters", 1000);
59  dxdbDict.getOrDefault<scalar>("tolerance", 1.e-07);
60 
61  // Read variables related to the adjoint eikonal solver
62  FIBase::read();
63 }
64 
65 
67 (
68  const label iCP,
69  const label idir
70 )
71 {
72  read();
73  tmp<volVectorField> tm(new volVectorField("m", dxdb_));
74  volVectorField& m = tm.ref();
75 
76  // SOLVE FOR DXDB
77  //~~~~~~~~~~~~~~~~
78  // set boundary conditions
79  for (const label patchI : sensitivityPatchIDs_)
80  {
81  // interpolate parameterization info to faces
82  tmp<vectorField> tdxidXjFace = Bezier_.dxdbFace(patchI, iCP, idir);
83  const vectorField& dxidXjFace = tdxidXjFace();
84 
85  m.boundaryFieldRef()[patchI] == dxidXjFace;
86  }
87 
88  // iterate the adjoint to the eikonal equation
89  for (label iter = 0; iter < meshMovementIters_; iter++)
90  {
91  Info<< "Mesh Movement Propagation(direction, CP), ("
92  << idir << ", " << iCP << "), Iteration : "<< iter << endl;
93 
94  fvVectorMatrix mEqn
95  (
97  );
98 
99  // Scalar residual = max(mEqn.solve().initialResidual());
100  scalar residual = mag(mEqn.solve().initialResidual());
101 
102  Info<< "Max dxdb " << gMax(mag(m)()) << endl;
103 
104  mesh_.time().printExecutionTime(Info);
105 
106  // Check convergence
107  if (residual < meshMovementResidualLimit_)
108  {
109  Info<< "\n***Reached dxdb convergence limit, iteration " << iter
110  << "***\n\n";
111  break;
112  }
113  }
114 
115  return tm;
116 }
117 
118 
119 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
120 
121 sensitivityBezierFI::sensitivityBezierFI
122 (
123  const fvMesh& mesh,
124  const dictionary& dict,
125  incompressibleVars& primalVars,
126  incompressibleAdjointVars& adjointVars,
129 )
130 :
131  FIBase
132  (
133  mesh,
134  dict,
135  primalVars,
136  adjointVars,
139  ),
140  //Bezier_(mesh, dict), // AJH Read locally?
141  Bezier_(mesh, mesh.lookupObject<IOdictionary>("optimisationDict")),
142  flowSens_(3*Bezier_.nBezier(), Zero),
143  dSdbSens_(3*Bezier_.nBezier(), Zero),
144  dndbSens_(3*Bezier_.nBezier(), Zero),
145  dxdbDirectSens_(3*Bezier_.nBezier(), Zero),
146  dVdbSens_(3*Bezier_.nBezier(), Zero),
147  distanceSens_(3*Bezier_.nBezier(), Zero),
148  optionsSens_(3*Bezier_.nBezier(), Zero),
149  bcSens_(3*Bezier_.nBezier(), Zero),
150 
151  derivativesFolder_("optimisation"/type() + "Derivatives"),
152 
153  meshMovementIters_(-1),
154  meshMovementResidualLimit_(1.e-7),
155  dxdb_
156  (
158  (
159  mesh,
160  "mTilda",
162  )
163  )
164 {
165  read();
166 
167  derivatives_ = scalarField(3*Bezier_.nBezier(), Zero),
168  // Create folder to store sensitivities
169  mkDir(derivativesFolder_);
170 }
171 
172 
173 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
174 
176 {
177  // Adjoint to the eikonal equation
178  autoPtr<volTensorField> distanceSensPtr(nullptr);
179  if (includeDistance_)
180  {
181  // Solver equation
182  eikonalSolver_->solve();
183 
184  // Allocate memory and compute grad(dxdb) multiplier
185  distanceSensPtr.reset
186  (
187  createZeroFieldPtr<tensor>
188  (
189  mesh_,
190  "distanceSensPtr",
191  dimensionSet(0, 2, -3, 0, 0, 0, 0)
192  )
193  );
194  distanceSensPtr() = eikonalSolver_->getFISensitivityTerm()().T();
195  }
196 
197  const label nBezier = Bezier_.nBezier();
198  const label nDVs = 3*nBezier;
199  for (label iDV = 0; iDV < nDVs; iDV++)
200  {
201  label iCP = iDV%nBezier;
202  label idir = iDV/nBezier;
203  if
204  (
205  (idir == 0 && Bezier_.confineXmovement()[iCP])
206  || (idir == 1 && Bezier_.confineYmovement()[iCP])
207  || (idir == 2 && Bezier_.confineZmovement()[iCP])
208  )
209  {
210  continue;
211  }
212  else
213  {
214  // Flow term
215  // ~~~~~~~~~~~
216  // compute dxdb and its grad
218  const volVectorField& m = tm();
219  volTensorField gradDxDb(fvc::grad(m, "grad(dxdb)"));
220 
221  flowSens_[iDV] =
222  gSum
223  (
225  * mesh_.V()
226  );
227 
228  for (const label patchI : sensitivityPatchIDs_)
229  {
230  // Contribution from objective function
231  // term from delta(n dS)/delta b and
232  // term from delta(n)/delta b
233  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
234  tmp<vectorField> tdSdb =
235  Bezier_.dndbBasedSensitivities(patchI, iCP, idir);
236  const vectorField& dSdb = tdSdb();
237  tmp<vectorField> tdndb =
238  Bezier_.dndbBasedSensitivities(patchI, iCP, idir, false);
239  const vectorField& dndb = tdndb();
240  dSdbSens_[iDV] += gSum(dSfdbMult_()[patchI] & dSdb);
241  dndbSens_[iDV] += gSum(dnfdbMult_()[patchI] & dndb);
242 
243  // Contribution from objective function
244  // term from delta( x ) / delta b
245  // Only for objectives directly including
246  // x, like moments
247  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
248  tmp<vectorField> tdxdbFace =
249  Bezier_.dxdbFace(patchI, iCP, idir);
250  const vectorField& dxdbFace = tdxdbFace();
251  dxdbDirectSens_[iDV] +=
252  gSum(dxdbDirectMult_()[patchI] & dxdbFace);
253 
254  // Contribution from boundary conditions
255  bcSens_[iDV] += gSum(bcDxDbMult_()[patchI] & dxdbFace);
256  }
257 
258  // Contribution from delta (V) / delta b
259  // For objectives defined as volume integrals only
260  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
261  dVdbSens_[iDV] =
262  gSum
263  (
265  * fvc::div(m)().primitiveField()
266  * mesh_.V()
267  );
268 
269  // Distance dependent term
270  //~~~~~~~~~~~~~~~~~~~~~~~~~
271  if (includeDistance_)
272  {
273  distanceSens_[iDV] =
274  gSum
275  (
276  (
277  distanceSensPtr().primitiveField()
278  && gradDxDb.primitiveField()
279  )
280  *mesh_.V()
281  );
282  }
283 
284  // Terms from fvOptions
285  optionsSens_[iDV] +=
287  }
288 
289  // Sum contributions
290  derivatives_ =
291  flowSens_
292  + dSdbSens_
293  + dndbSens_
295  + dVdbSens_
296  + distanceSens_
297  + optionsSens_
298  + bcSens_;
299  }
300 }
301 
302 
304 {
305  flowSens_ = Zero;
306  dSdbSens_ = Zero;
307  dndbSens_ = Zero;
309  dVdbSens_ = Zero;
311  optionsSens_ = Zero;
312  bcSens_ = Zero;
313 
315 }
316 
317 
318 void sensitivityBezierFI::write(const word& baseName)
319 {
320  Info<< "Writing control point sensitivities to file" << endl;
321  if (Pstream::master())
322  {
323  OFstream derivFile
324  (
326  baseName + adjointVars_.solverName() + mesh_.time().timeName()
327  );
328  unsigned int widthDV = max(int(name(flowSens_.size()).size()), int(3));
329  unsigned int width = IOstream::defaultPrecision() + 7;
330  derivFile
331  << setw(widthDV) << "#dv" << " "
332  << setw(width) << "total" << " "
333  << setw(width) << "flow" << " "
334  << setw(width) << "dSdb" << " "
335  << setw(width) << "dndb" << " "
336  << setw(width) << "dxdbDirect" << " "
337  << setw(width) << "dVdb" << " "
338  << setw(width) << "distance" << " "
339  << setw(width) << "options" << " "
340  << setw(width) << "dvdb" << endl;
341  const label nDVs = derivatives_.size();
342  const label nBezier = Bezier_.nBezier();
343  const boolListList& confineMovement = Bezier_.confineMovement();
344  label lastActive(-1);
345 
346  for (label iDV = 0; iDV < nDVs; iDV++)
347  {
348  const label iCP(iDV%nBezier);
349  const label idir(iDV/nBezier);
350  if (!confineMovement[idir][iCP])
351  {
352  if (iDV!=lastActive + 1)
353  {
354  derivFile << "\n";
355  }
356  lastActive = iDV;
357  derivFile
358  << setw(widthDV) << iDV << " "
359  << setw(width) << derivatives_[iDV] << " "
360  << setw(width) << flowSens_[iDV] << " "
361  << setw(width) << dSdbSens_[iDV] << " "
362  << setw(width) << dndbSens_[iDV] << " "
363  << setw(width) << dxdbDirectSens_[iDV] << " "
364  << setw(width) << dVdbSens_[iDV] << " "
365  << setw(width) << distanceSens_[iDV] << " "
366  << setw(width) << optionsSens_[iDV] << " "
367  << setw(width) << bcSens_[iDV] << endl;
368  }
369  }
370  }
371 }
372 
373 
374 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
375 
376 } // End namespace incompressible
377 } // End namespace Foam
378 
379 // ************************************************************************* //
Foam::incompressible::FIBase::optionsDxDbMult_
vectorField optionsDxDbMult_
dx/db multiplier coming from fvOptions
Definition: FIBaseIncompressible.H:72
Foam::incompressible::sensitivityBezierFI::clearSensitivities
virtual void clearSensitivities()
Zero sensitivity fields and their constituents.
Definition: sensitivityBezierFIIncompressible.C:303
Foam::incompressible::adjointSensitivity::derivatives_
scalarField derivatives_
Definition: adjointSensitivityIncompressible.H:84
Foam::IOdictionary
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Definition: IOdictionary.H:54
Foam::autoPtr::reset
void reset(T *p=nullptr) noexcept
Delete managed object and set to new given pointer.
Definition: autoPtrI.H:109
Foam::scalarField
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Definition: primitiveFieldsFwd.H:52
Foam::objectiveManager
class for managing incompressible objective functions.
Definition: objectiveManager.H:54
Foam::variablesSet::solverName
const word & solverName() const
Return solver name.
Definition: variablesSet.C:84
Foam::incompressible::sensitivityBezierFI::optionsSens_
scalarField optionsSens_
Term depending on fvOptions.
Definition: sensitivityBezierFIIncompressible.H:93
Foam::incompressible::sensitivityBezierFI::meshMovementIters_
label meshMovementIters_
Definition: sensitivityBezierFIIncompressible.H:100
Foam::fvc::grad
tmp< GeometricField< typename outerProduct< vector, Type >::type, fvPatchField, volMesh >> grad(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition: fvcGrad.C:54
sensitivityBezierFIIncompressible.H
Foam::incompressible::shapeSensitivities::bcDxDbMult_
autoPtr< boundaryVectorField > bcDxDbMult_
Definition: shapeSensitivitiesIncompressible.H:68
Foam::Bezier::confineXmovement
const boolList & confineXmovement() const
Confine x movement.
Definition: Bezier.C:139
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
Foam::incompressible::FIBase::clearSensitivities
virtual void clearSensitivities()
Zero sensitivity fields and their constituents.
Definition: FIBaseIncompressible.C:172
Foam::incompressible::defineTypeNameAndDebug
defineTypeNameAndDebug(adjointEikonalSolver, 0)
Foam::dimLength
const dimensionSet dimLength(0, 1, 0, 0, 0, 0, 0)
Definition: dimensionSets.H:53
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:59
Foam::Zero
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
Foam::incompressible::sensitivityBezierFI::dVdbSens_
scalarField dVdbSens_
Term depending on delta(V)/delta b.
Definition: sensitivityBezierFIIncompressible.H:87
Foam::GeometricField::primitiveField
const Internal::FieldType & primitiveField() const
Return a const-reference to the internal field.
Definition: GeometricFieldI.H:53
Foam::read
bool read(const char *buf, int32_t &val)
Same as readInt32.
Definition: int32.H:107
Foam::incompressible::FIBase::gradDxDbMult_
volTensorField gradDxDbMult_
grad(dx/db) multiplier
Definition: FIBaseIncompressible.H:66
Foam::Time::timeName
static word timeName(const scalar t, const int precision=precision_)
Definition: Time.C:785
Foam::incompressible::sensitivityBezierFI::dxdbDirectSens_
scalarField dxdbDirectSens_
Definition: sensitivityBezierFIIncompressible.H:84
Foam::incompressible::FIBase::read
void read()
Read options and update solver pointers if necessary.
Definition: FIBaseIncompressible.C:48
Foam::incompressible::sensitivityBezierFI::distanceSens_
scalarField distanceSens_
Term depending on distance differentiation.
Definition: sensitivityBezierFIIncompressible.H:90
Foam::fvc::div
tmp< GeometricField< Type, fvPatchField, volMesh > > div(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition: fvcDiv.C:49
Foam::incompressible::FIBase::divDxDbMult_
scalarField divDxDbMult_
div(dx/db) multiplier
Definition: FIBaseIncompressible.H:69
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:350
Foam::gSum
Type gSum(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:594
Foam::Bezier::confineZmovement
const boolList & confineZmovement() const
Confine z movement.
Definition: Bezier.C:151
Foam::dimensionSet
Dimension set for the base types.
Definition: dimensionSet.H:65
Foam::incompressible::sensitivityBezierFI::assembleSensitivities
virtual void assembleSensitivities()
Assemble sensitivities.
Definition: sensitivityBezierFIIncompressible.C:175
Foam::incompressibleAdjointVars
Class including all adjoint fields for incompressible flows.
Definition: incompressibleAdjointVars.H:52
Foam::fv::optionAdjointList
Definition: fvOptionAdjointList.H:59
Foam::incompressible::sensitivityBezierFI::read
void read()
Definition: sensitivityBezierFIIncompressible.C:53
Foam::incompressible::FIBase::eikonalSolver_
autoPtr< adjointEikonalSolver > eikonalSolver_
Adjoint eikonal equation solver.
Definition: FIBaseIncompressible.H:78
Foam::incompressible::sensitivityBezierFI::dSdbSens_
scalarField dSdbSens_
Term depending on delta(n dS)/delta b.
Definition: sensitivityBezierFIIncompressible.H:77
Foam::Bezier::nBezier
label nBezier() const
Number of Bezier control points.
Definition: Bezier.C:127
Foam::incompressible::sensitivityBezierFI::solveMeshMovementEqn
tmp< volVectorField > solveMeshMovementEqn(const label iCP, const label idir)
Definition: sensitivityBezierFIIncompressible.C:67
Foam::incompressible::shapeSensitivities::dSfdbMult_
autoPtr< boundaryVectorField > dSfdbMult_
Fields related to direct sensitivities.
Definition: shapeSensitivitiesIncompressible.H:65
Foam::incompressible::addToRunTimeSelectionTable
addToRunTimeSelectionTable(adjointSensitivity, sensitivityBezier, dictionary)
Foam::incompressible::sensitivityBezierFI::flowSens_
scalarField flowSens_
Flow related term.
Definition: sensitivityBezierFIIncompressible.H:74
Foam::tmp::ref
T & ref() const
Definition: tmpI.H:258
Foam::sensitivity::mesh_
const fvMesh & mesh_
Definition: sensitivity.H:69
Foam::Field< vector >
Foam::Info
messageStream Info
Information stream (uses stdout - output is on the master only)
Foam::fvm::laplacian
tmp< fvMatrix< Type > > laplacian(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvmLaplacian.C:48
Foam::name
word name(const complex &c)
Return string representation of complex.
Definition: complex.C:76
Foam::incompressible::sensitivityBezierFI::dndbSens_
scalarField dndbSens_
Term depending on delta(n)/delta b.
Definition: sensitivityBezierFIIncompressible.H:80
Foam::T
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
Definition: FieldFieldFunctions.C:58
IOmanip.H
Istream and Ostream manipulators taking arguments.
Foam::max
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Definition: hashSets.C:47
Foam::Bezier::dxdbFace
tmp< tensorField > dxdbFace(const label patchI, const label cpI, bool useChainRule=true) const
dxdb tensor for a Bezier parameterized patch
Definition: Bezier.C:281
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::variablesSet::autoCreateMeshMovementField
static tmp< volVectorField > autoCreateMeshMovementField(const fvMesh &mesh, const word &name, const dimensionSet &dims)
Auto create variable for mesh movement.
Definition: variablesSet.C:173
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:121
Foam::incompressible::shapeSensitivities::dxdbDirectMult_
autoPtr< boundaryVectorField > dxdbDirectMult_
Definition: shapeSensitivitiesIncompressible.H:67
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam::incompressible::adjointSensitivity::adjointVars_
incompressibleAdjointVars & adjointVars_
Definition: adjointSensitivityIncompressible.H:86
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:84
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::setw
Omanip< int > setw(const int i)
Definition: IOmanip.H:199
Foam::dictionary::subOrEmptyDict
dictionary subOrEmptyDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX, const bool mandatory=false) const
Definition: dictionary.C:608
Foam::incompressible::sensitivityBezierFI::meshMovementResidualLimit_
scalar meshMovementResidualLimit_
Definition: sensitivityBezierFIIncompressible.H:101
Foam::OFstream
Output to file stream, using an OSstream.
Definition: OFstream.H:87
Foam::UPstream::master
static bool master(const label communicator=0)
Am I the master process.
Definition: UPstream.H:439
Foam::volVectorField
GeometricField< vector, fvPatchField, volMesh > volVectorField
Definition: volFieldsFwd.H:60
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
Foam::sensitivity::dict_
dictionary dict_
Definition: sensitivity.H:70
Foam::incompressible::FIBase
Base class for Field Integral-based sensitivity derivatives.
Definition: FIBaseIncompressible.H:57
Foam::IOstream::defaultPrecision
static unsigned int defaultPrecision()
Return the default precision.
Definition: IOstream.H:333
Foam::incompressible::FIBase::includeDistance_
bool includeDistance_
Include distance variation in sens computation.
Definition: FIBaseIncompressible.H:75
Foam::GeometricField::boundaryFieldRef
Boundary & boundaryFieldRef(const bool updateAccessTime=true)
Return a reference to the boundary field.
Definition: GeometricField.C:783
Foam::List< List< bool > >
Foam::incompressible::sensitivityBezierFI::bcSens_
scalarField bcSens_
Term depending on the differenation of boundary conditions.
Definition: sensitivityBezierFIIncompressible.H:96
Foam::mag
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
Foam::type
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
Definition: MSwindows.C:590
Foam::constant::electromagnetic::e
const dimensionedScalar e
Elementary charge.
Definition: createFields.H:11
Foam::fvMatrix
A special matrix type and solver, designed for finite volume solutions of scalar equations....
Definition: fvPatchField.H:76
Foam::fvMatrix::solve
SolverPerformance< Type > solve(const dictionary &)
Solve returning the solution statistics.
Definition: fvMatrixSolve.C:301
Foam::fvMesh::time
const Time & time() const
Return the top-level database.
Definition: fvMesh.H:248
Foam::Bezier::confineYmovement
const boolList & confineYmovement() const
Confine y movement.
Definition: Bezier.C:145
Foam::Bezier::confineMovement
const boolListList & confineMovement() const
Info about confining movement in all directions.
Definition: Bezier.C:157
Foam::incompressible::sensitivityBezierFI::write
virtual void write(const word &baseName=word::null)
Write sensitivities to file.
Definition: sensitivityBezierFIIncompressible.C:318
Foam::incompressible::sensitivityBezierFI::Bezier_
Bezier Bezier_
Definition: sensitivityBezierFIIncompressible.H:71
Foam::incompressible::shapeSensitivities::dnfdbMult_
autoPtr< boundaryVectorField > dnfdbMult_
Definition: shapeSensitivitiesIncompressible.H:66
Foam::dictionary::getOrDefault
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
Definition: dictionaryTemplates.C:122
Foam::GeometricField< vector, fvPatchField, volMesh >
fvOptionsAdjoint
fv::IOoptionListAdjoint fvOptionsAdjoint(mesh)
Foam::mkDir
bool mkDir(const fileName &pathName, mode_t mode=0777)
Make a directory and return an error if it could not be created.
Definition: MSwindows.C:507
Foam::gMax
Type gMax(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:592
Foam::incompressibleVars
Base class for solution control classes.
Definition: incompressibleVars.H:54
Foam::incompressible::sensitivityBezierFI::derivativesFolder_
fileName derivativesFolder_
Definition: sensitivityBezierFIIncompressible.H:98
Foam::fvMesh::V
const DimensionedField< scalar, volMesh > & V() const
Return cell volumes.
Definition: fvMeshGeometry.C:179
Foam::Bezier::dndbBasedSensitivities
tmp< tensorField > dndbBasedSensitivities(const label patchI, const label cpI, bool returnDimensionedNormalSens=true) const
Definition: Bezier.C:164