objectiveIncompressible.H
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-2019 PCOpt/NTUA
9  Copyright (C) 2013-2019 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 Class
30  Foam::objectiveIncompressible
31 
32 Description
33  Abstract base class for objective functions in incompressible flows
34 
35 SourceFiles
36  objectiveIncompressible.C
37 
38 \*---------------------------------------------------------------------------*/
39 
40 #ifndef objectiveIncompressible_H
41 #define objectiveIncompressible_H
42 
43 #include "objective.H"
44 #include "incompressibleVars.H"
45 
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 
48 namespace Foam
49 {
50 
51 /*---------------------------------------------------------------------------*\
52  Class objectiveIncompressible Declaration
53 \*---------------------------------------------------------------------------*/
54 
56 :
57  public objective
58 {
59 protected:
60 
61  // Protected data
62 
64 
65  // Contribution to field adjoint equations
66  // v,p,T and turbulence model variables
67  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71 
72  //- First turbulence model variable
74 
75  //- Second turbulence model variable
77 
78  // Contribution to adjoint boundary conditions
79  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81 
82  //- Adjoint outlet pressure
84 
85  //- Adjoint outlet velocity
87 
88  //- Adjoint (intlet,wall) velocity
90 
91  //- Adjoint outlet temperature
93 
94  //- Adjoint outlet turbulence model var 1
96 
97  //- Adjoint outlet turbulence model var 2
99 
100 
101 private:
102 
103  // Private Member Functions
104 
105  //- No copy construct
107 
108  //- No copy assignment
109  void operator=(const objectiveIncompressible&) = delete;
110 
111 
112 public:
113 
114  //- Runtime type information
115  TypeName("incompressible");
116 
117 
118  // Declare run-time constructor selection table
119 
121  (
122  autoPtr,
124  dictionary,
125  (
126  const fvMesh& mesh,
127  const dictionary& dict,
128  const word& adjointSolverName,
129  const word& primalSolverName
130  ),
131  (mesh, dict, adjointSolverName, primalSolverName)
132  );
133 
134 
135  // Constructors
136 
137  //- Construct from components
139  (
140  const fvMesh& mesh,
141  const dictionary& dict,
142  const word& adjointSolverName,
143  const word& primalSolverName
144  );
145 
146 
147  // Selectors
148 
149  //- Return a reference to the selected turbulence model
151  (
152  const fvMesh& mesh,
153  const dictionary& dict,
154  const word& adjointSolverName,
155  const word& primalSolverName
156  );
157 
158 
159  //- Destructor
160  virtual ~objectiveIncompressible() = default;
161 
162 
163  // Member Functions
164 
165  //- Return the objective function value
166  virtual scalar J() = 0;
167 
168  //- Normalize all fields allocated by the objective
169  virtual void doNormalization();
170 
171  //- Contribution to field adjoint momentum eqs
172  const volVectorField& dJdv();
173 
174  //- Contribution to field adjoint continuity eq
175  const volScalarField& dJdp();
176 
177  //- Contribution to field adjoint energy eq
178  const volScalarField& dJdT();
179 
180  //- Contribution to field adjoint turbulence model variable 1
181  const volScalarField& dJdTMvar1();
182 
183  //- Contribution to field adjoint turbulence model variable 2
184  const volScalarField& dJdTMvar2();
185 
186  //- Objective partial deriv wrt velocity for a specific patch
187  const fvPatchVectorField& boundarydJdv(const label);
188 
189  //- Objective partial deriv wrt normal velocity for a specific patch
190  const fvPatchScalarField& boundarydJdvn(const label);
191 
192  //- Objective partial deriv wrt tangent velocity for a specific patch
193  const fvPatchVectorField& boundarydJdvt(const label);
194 
195  //- Objective partial deriv wrt pressure (times normal) for a specific
196  //- patch
197  const fvPatchVectorField& boundarydJdp(const label);
198 
199  //- Objective partial deriv wrt temperature for a specific patch
200  const fvPatchScalarField& boundarydJdT(const label);
201 
202  //- Objective partial deriv wrt turbulence model var 1 for a specific
203  //- patch
204  const fvPatchScalarField& boundarydJdTMvar1(const label);
205 
206  //- Objective partial deriv wrt turbulence model var 2 for a specific
207  //- patch
208  const fvPatchScalarField& boundarydJdTMvar2(const label);
209 
210  //- Objective partial deriv wrt velocity for all patches
212 
213  //- Objective partial deriv wrt normal velocity for all patches
215 
216  //- Objective partial deriv wrt tangent velocity for all patches
218 
219  //- Objective partial deriv wrt pressure (times normal) for all patches
221 
222  //- Objective partial deriv wrt temperature for all patches
224 
225  //- Objective partial deriv wrt turbulence model var 1 for all patches
227 
228  //- Objective partial deriv wrt turbulence model var 2 for all patches
230 
231  //- Update objective function derivatives
232  virtual void update();
233 
234  //- Update objective function derivatives
235  virtual void nullify();
236 
237  //- Update vol and boundary fields and derivatives
238  // Do nothing in the base. The relevant ones should be overwritten
239  // in the child objective functions
240  virtual void update_dJdv()
241  {}
242 
243  virtual void update_dJdp()
244  {}
245 
246  virtual void update_dJdT()
247  {}
248 
249  virtual void update_dJdTMvar1()
250  {}
251 
252  virtual void update_dJdTMvar2()
253  {}
254 
255  virtual void update_dJdb()
256  {}
257 
258  virtual void update_divDxDbMultiplier()
259  {}
260 
261  virtual void update_gradDxDbMultiplier()
262  {}
263 
264  virtual void update_boundarydJdv()
265  {}
266 
267  virtual void update_boundarydJdvn()
268  {}
269 
270  virtual void update_boundarydJdvt()
271  {}
272 
273  virtual void update_boundarydJdp()
274  {}
275 
276  virtual void update_boundarydJdT()
277  {}
278 
279  virtual void update_boundarydJdTMvar1()
280  {}
281 
282  virtual void update_boundarydJdTMvar2()
283  {}
284 
285  virtual void update_boundarydJdb()
286  {}
287 
288  virtual void update_dSdbMultiplier()
289  {}
290 
291  virtual void update_dndbMultiplier()
292  {}
293 
294  virtual void update_dxdbMultiplier()
295  {}
296 
297  virtual void update_dxdbDirectMultiplier()
298  {}
299 
300  //- Some objectives need to store some auxiliary values.
301  //- If averaging is enabled, update these mean values here.
302  // By convention, the mean values (eg mean drag) refer to these flow
303  // values computed using the mean fields, rather than averaging the
304  // values themselves
305  virtual void update_meanValues()
306  {}
307 
308  //- Write objective function history
309  virtual bool write(const bool valid = true) const;
310 
311  //- Inline functions for checking whether pointers are set or not
312  inline bool hasdJdv() const;
313  inline bool hasdJdp() const;
314  inline bool hasdJdT() const;
315  inline bool hasdJdTMVar1() const;
316  inline bool hasdJdTMVar2() const;
317  inline bool hasBoundarydJdv() const;
318  inline bool hasBoundarydJdvn() const;
319  inline bool hasBoundarydJdvt() const;
320  inline bool hasBoundarydJdp() const;
321  inline bool hasBoundarydJdT() const;
322  inline bool hasBoundarydJdTMVar1() const;
323  inline bool hasBoundarydJdTMVar2() const;
324 };
325 
326 
327 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
328 
329 } // End namespace Foam
330 
331 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
332 
334 
335 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
336 
337 #endif
338 
339 // ************************************************************************* //
Foam::objectiveIncompressible::bdJdTPtr_
autoPtr< boundaryScalarField > bdJdTPtr_
Adjoint outlet temperature.
Definition: objectiveIncompressible.H:91
Foam::fvPatchField< vector >
Foam::objectiveIncompressible::dJdv
const volVectorField & dJdv()
Contribution to field adjoint momentum eqs.
Definition: objectiveIncompressible.C:192
Foam::objectiveIncompressible::J
virtual scalar J()=0
Return the objective function value.
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::objectiveIncompressible::update_boundarydJdTMvar1
virtual void update_boundarydJdTMvar1()
Definition: objectiveIncompressible.H:278
Foam::objectiveIncompressible::hasBoundarydJdvn
bool hasBoundarydJdvn() const
Definition: objectiveIncompressibleI.H:69
Foam::objectiveIncompressible::hasBoundarydJdp
bool hasBoundarydJdp() const
Definition: objectiveIncompressibleI.H:81
Foam::objectiveIncompressible::vars_
const incompressibleVars & vars_
Definition: objectiveIncompressible.H:62
Foam::objectiveIncompressible::update_boundarydJdb
virtual void update_boundarydJdb()
Definition: objectiveIncompressible.H:284
incompressibleVars.H
Foam::objectiveIncompressible::~objectiveIncompressible
virtual ~objectiveIncompressible()=default
Destructor.
Foam::objectiveIncompressible::update_boundarydJdTMvar2
virtual void update_boundarydJdTMvar2()
Definition: objectiveIncompressible.H:281
Foam::objectiveIncompressible::bdJdTMvar2Ptr_
autoPtr< boundaryScalarField > bdJdTMvar2Ptr_
Adjoint outlet turbulence model var 2.
Definition: objectiveIncompressible.H:97
Foam::objectiveIncompressible::update_dJdp
virtual void update_dJdp()
Definition: objectiveIncompressible.H:242
Foam::objectiveIncompressible::hasdJdp
bool hasdJdp() const
Definition: objectiveIncompressibleI.H:39
Foam::objectiveIncompressible::update_gradDxDbMultiplier
virtual void update_gradDxDbMultiplier()
Definition: objectiveIncompressible.H:260
Foam::objectiveIncompressible::bdJdvnPtr_
autoPtr< boundaryScalarField > bdJdvnPtr_
Adjoint outlet pressure.
Definition: objectiveIncompressible.H:82
Foam::objectiveIncompressible::update_dJdTMvar1
virtual void update_dJdTMvar1()
Definition: objectiveIncompressible.H:248
Foam::objectiveIncompressible::bdJdvPtr_
autoPtr< boundaryVectorField > bdJdvPtr_
Definition: objectiveIncompressible.H:79
Foam::objectiveIncompressible::dJdTMvar1
const volScalarField & dJdTMvar1()
Contribution to field adjoint turbulence model variable 1.
Definition: objectiveIncompressible.C:249
Foam::objectiveIncompressible::update_dJdb
virtual void update_dJdb()
Definition: objectiveIncompressible.H:254
Foam::objectiveIncompressible::write
virtual bool write(const bool valid=true) const
Write objective function history.
Definition: objectiveIncompressible.C:549
Foam::objectiveIncompressible::hasdJdT
bool hasdJdT() const
Definition: objectiveIncompressibleI.H:45
Foam::objectiveIncompressible::bdJdvtPtr_
autoPtr< boundaryVectorField > bdJdvtPtr_
Adjoint outlet velocity.
Definition: objectiveIncompressible.H:85
Foam::objectiveIncompressible::hasBoundarydJdv
bool hasBoundarydJdv() const
Definition: objectiveIncompressibleI.H:63
Foam::objectiveIncompressible::update_dJdv
virtual void update_dJdv()
Update vol and boundary fields and derivatives.
Definition: objectiveIncompressible.H:239
Foam::objectiveIncompressible::update_dxdbMultiplier
virtual void update_dxdbMultiplier()
Definition: objectiveIncompressible.H:293
Foam::objectiveIncompressible::TypeName
TypeName("incompressible")
Runtime type information.
Foam::objectiveIncompressible::update_dSdbMultiplier
virtual void update_dSdbMultiplier()
Definition: objectiveIncompressible.H:287
Foam::objectiveIncompressible::boundarydJdv
const boundaryVectorField & boundarydJdv()
Objective partial deriv wrt velocity for all patches.
Definition: objectiveIncompressible.C:378
Foam::objectiveIncompressible::update_dndbMultiplier
virtual void update_dndbMultiplier()
Definition: objectiveIncompressible.H:290
Foam::objectiveIncompressible::declareRunTimeSelectionTable
declareRunTimeSelectionTable(autoPtr, objectiveIncompressible, dictionary,(const fvMesh &mesh, const dictionary &dict, const word &adjointSolverName, const word &primalSolverName),(mesh, dict, adjointSolverName, primalSolverName))
Foam::objectiveIncompressible::dJdpPtr_
autoPtr< volScalarField > dJdpPtr_
Definition: objectiveIncompressible.H:68
Foam::objectiveIncompressible::update_boundarydJdv
virtual void update_boundarydJdv()
Definition: objectiveIncompressible.H:263
Foam::objectiveIncompressible::update_dJdTMvar2
virtual void update_dJdTMvar2()
Definition: objectiveIncompressible.H:251
Foam::objectiveIncompressible::New
static autoPtr< objectiveIncompressible > New(const fvMesh &mesh, const dictionary &dict, const word &adjointSolverName, const word &primalSolverName)
Return a reference to the selected turbulence model.
Definition: objectiveIncompressible.C:97
Foam::objectiveIncompressible::update_dxdbDirectMultiplier
virtual void update_dxdbDirectMultiplier()
Definition: objectiveIncompressible.H:296
Foam::objectiveIncompressible
Abstract base class for objective functions in incompressible flows.
Definition: objectiveIncompressible.H:54
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::objectiveIncompressible::update_boundarydJdT
virtual void update_boundarydJdT()
Definition: objectiveIncompressible.H:275
Foam::objectiveIncompressible::hasBoundarydJdT
bool hasBoundarydJdT() const
Definition: objectiveIncompressibleI.H:87
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
Foam::objectiveIncompressible::bdJdTMvar1Ptr_
autoPtr< boundaryScalarField > bdJdTMvar1Ptr_
Adjoint outlet turbulence model var 1.
Definition: objectiveIncompressible.H:94
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::objectiveIncompressible::update_boundarydJdp
virtual void update_boundarydJdp()
Definition: objectiveIncompressible.H:272
Foam::objectiveIncompressible::dJdp
const volScalarField & dJdp()
Contribution to field adjoint continuity eq.
Definition: objectiveIncompressible.C:211
Foam::objectiveIncompressible::boundarydJdT
const boundaryScalarField & boundarydJdT()
Objective partial deriv wrt temperature for all patches.
Definition: objectiveIncompressible.C:418
Foam::objectiveIncompressible::dJdTPtr_
autoPtr< volScalarField > dJdTPtr_
Definition: objectiveIncompressible.H:69
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:85
Foam::objectiveIncompressible::update_boundarydJdvn
virtual void update_boundarydJdvn()
Definition: objectiveIncompressible.H:266
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::objectiveIncompressible::dJdTMvar1Ptr_
autoPtr< volScalarField > dJdTMvar1Ptr_
First turbulence model variable.
Definition: objectiveIncompressible.H:72
Foam::objectiveIncompressible::dJdT
const volScalarField & dJdT()
Contribution to field adjoint energy eq.
Definition: objectiveIncompressible.C:230
Foam::objectiveIncompressible::boundarydJdvn
const boundaryScalarField & boundarydJdvn()
Objective partial deriv wrt normal velocity for all patches.
Definition: objectiveIncompressible.C:388
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
Foam::objectiveIncompressible::hasBoundarydJdTMVar2
bool hasBoundarydJdTMVar2() const
Definition: objectiveIncompressibleI.H:99
Foam::GeometricField::Boundary
The boundary fields.
Definition: GeometricField.H:115
Foam::objectiveIncompressible::dJdvPtr_
autoPtr< volVectorField > dJdvPtr_
Definition: objectiveIncompressible.H:67
Foam::objectiveIncompressible::nullify
virtual void nullify()
Update objective function derivatives.
Definition: objectiveIncompressible.C:488
Foam::objectiveIncompressible::update_meanValues
virtual void update_meanValues()
Definition: objectiveIncompressible.H:304
Foam::objectiveIncompressible::hasdJdTMVar2
bool hasdJdTMVar2() const
Definition: objectiveIncompressibleI.H:57
Foam::objectiveIncompressible::boundarydJdTMvar2
const boundaryScalarField & boundarydJdTMvar2()
Objective partial deriv wrt turbulence model var 2 for all patches.
Definition: objectiveIncompressible.C:438
Foam::objectiveIncompressible::update_divDxDbMultiplier
virtual void update_divDxDbMultiplier()
Definition: objectiveIncompressible.H:257
Foam::objectiveIncompressible::dJdTMvar2Ptr_
autoPtr< volScalarField > dJdTMvar2Ptr_
Second turbulence model variable.
Definition: objectiveIncompressible.H:75
Foam::objectiveIncompressible::dJdTMvar2
const volScalarField & dJdTMvar2()
Contribution to field adjoint turbulence model variable 2.
Definition: objectiveIncompressible.C:268
Foam::objectiveIncompressible::boundarydJdp
const boundaryVectorField & boundarydJdp()
Objective partial deriv wrt pressure (times normal) for all patches.
Definition: objectiveIncompressible.C:408
Foam::objectiveIncompressible::hasBoundarydJdTMVar1
bool hasBoundarydJdTMVar1() const
Definition: objectiveIncompressibleI.H:93
Foam::objectiveIncompressible::update_boundarydJdvt
virtual void update_boundarydJdvt()
Definition: objectiveIncompressible.H:269
Foam::objectiveIncompressible::boundarydJdTMvar1
const boundaryScalarField & boundarydJdTMvar1()
Objective partial deriv wrt turbulence model var 1 for all patches.
Definition: objectiveIncompressible.C:428
Foam::objectiveIncompressible::update
virtual void update()
Update objective function derivatives.
Definition: objectiveIncompressible.C:448
Foam::objectiveIncompressible::hasBoundarydJdvt
bool hasBoundarydJdvt() const
Definition: objectiveIncompressibleI.H:75
Foam::objectiveIncompressible::bdJdpPtr_
autoPtr< boundaryVectorField > bdJdpPtr_
Adjoint (intlet,wall) velocity.
Definition: objectiveIncompressible.H:88
Foam::objectiveIncompressible::hasdJdv
bool hasdJdv() const
Inline functions for checking whether pointers are set or not.
Definition: objectiveIncompressibleI.H:33
Foam::GeometricField< vector, fvPatchField, volMesh >
Foam::objectiveIncompressible::boundarydJdvt
const boundaryVectorField & boundarydJdvt()
Objective partial deriv wrt tangent velocity for all patches.
Definition: objectiveIncompressible.C:398
Foam::objective
Abstract base class for objective functions. No point in making this runTime selectable since its chi...
Definition: objective.H:59
objectiveIncompressibleI.H
Foam::objectiveIncompressible::update_dJdT
virtual void update_dJdT()
Definition: objectiveIncompressible.H:245
objective.H
Foam::objectiveIncompressible::hasdJdTMVar1
bool hasdJdTMVar1() const
Definition: objectiveIncompressibleI.H:51
Foam::incompressibleVars
Base class for solution control classes.
Definition: incompressibleVars.H:54
Foam::objectiveIncompressible::doNormalization
virtual void doNormalization()
Normalize all fields allocated by the objective.
Definition: objectiveIncompressible.C:131