RASModelVariables.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 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 Class
29  Foam::incompressible::RASModelVariables
30 
31 Description
32  Abstract base class for objective functions. No point in making this
33  runTime selectable since its childs will have different constructors.
34 
35 SourceFiles
36  RASModelVariables.C
37 
38 \*---------------------------------------------------------------------------*/
39 
40 #ifndef RASModelVariables_H
41 #define RASModelVariables_H
42 
43 #include "solverControl.H"
46 #include "runTimeSelectionTables.H"
47 
48 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 
50 namespace Foam
51 {
52 namespace incompressible
53 {
54 
55 /*---------------------------------------------------------------------------*\
56  Class RASModelVariables Declaration
57 \*---------------------------------------------------------------------------*/
58 
60 {
61 
62 public:
63 
64  // Public typedefs
65 
67 
68 protected:
69 
70  // Protected data
71 
72 
73  const fvMesh& mesh_;
75 
76  // autoPtrs delete the memory on destruction
77  // Can cause memory mishandling issues in this case
78  // Use regular ptrs instead
79  bool hasTMVar1_;
80  bool hasTMVar2_;
81  bool hasNut_;
82  bool hasDist_;
86  autoTmp dPtr_;
87  // Base names of the turbulent fields
91 
92  // conditionally store initial values
93  // For finite differences and optimisation runs
97 
98  // conditionally store mean values
102 
103 
104  // Protected Member functions
105 
106  void allocateInitValues();
107  void allocateMeanFields();
108  autoTmp cloneAutoTmp(const autoTmp& source) const;
110 
111 
112 private:
113 
114  // Private Member Functions
115 
116 
117  //- No copy assignment
118  void operator=(const RASModelVariables&) = delete;
119 
120 
121 public:
122 
123 
124  //- Runtime type information
125  TypeName("RASModelVariables");
126 
127  // Declare run-time constructor selection table
128 
130  (
131  autoPtr,
133  dictionary,
134  (
135  const fvMesh& mesh,
136  const solverControl& SolverControl
137  ),
138  (mesh, SolverControl)
139  );
140 
141 
142  // Constructors
143 
144  //- Construct from components
146  (
147  const fvMesh& mesh,
148  const solverControl& SolverControl
149  );
150 
151  //- Copy constructor
152  // Will allocate new fields (instead of referencing the ones in the
153  // turbulence model), so cannot be used directly to access the fields
154  // of the turbulence model.
155  // Mainly used for checkpointing in unsteady adjoint
157  (
158  const RASModelVariables& rmv
159  );
160 
161  //- Clone
162  // Will allocate new fields (instead of referencing the ones in the
163  // turbulence model), so cannot be used directly to access the fields
164  // of the turbulence model.
165  // Mainly used for checkpointing in unsteady adjoint
167 
168 
169  // Selectors
170 
171  //- Return a reference to the selected turbulence model
173  (
174  const fvMesh& mesh,
175  const solverControl& SolverControl
176  );
177 
178 
179  // Destructor
180 
181  // Destructor does nothing on base since depending on the case new
182  // fields might be allocated
183  // MUST be overloaded in inherited classes
184  virtual ~RASModelVariables() = default;
185 
186 
187  // Member Functions
188 
189 
190  //- Bools to idenify which turbulent fields are present
191  bool hasTMVar1() const;
192  bool hasTMVar2() const;
193  bool hasNut() const;
194  bool hasDist() const;
195 
196  //- Turbulence field names
197  const word& TMVar1BaseName() const;
198  const word& TMVar2BaseName() const;
199  const word& nutBaseName() const;
200 
201  //- Return references to turbulence fields
202  // will return the mean field if it exists, otherwise the
203  // instantaneous one
204  const volScalarField& TMVar1() const;
206  const volScalarField& TMVar2() const;
208  const volScalarField& nutRef() const;
210  const volScalarField& d() const;
211  volScalarField& d();
212 
213  //- return references to instantaneous turbulence fields
214  const volScalarField& TMVar1Inst() const;
216  const volScalarField& TMVar2Inst() const;
218  const volScalarField& nutRefInst() const;
220 
221  //- Return nut Jacobian wrt the TM vars
223  (
225  ) const;
227  (
229  ) const;
230 
231  //- Restore turbulent fields to their initial values
232  void restoreInitValues();
233 
234  //- Reset mean fields to zero
235  void resetMeanFields();
236 
237  //- Compute mean fields on the fly
238  void computeMeanFields();
239 
240  //- Return stress tensor based on the mean flow variables
242  (
244  const volVectorField& U
245  ) const;
246 
247  //- correct bounday conditions of turbulent fields
248  virtual void correctBoundaryConditions
249  (
251  );
252 
253  //- Transfer turbulence fields from an another object
254  // Copies values since the ownership of the original fields is held
255  // by the turbulence model
256  virtual void transfer(RASModelVariables& rmv);
257 };
258 
259 
260 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
261 
262 } // End namespace incompressible
263 } // End namespace Foam
264 
265 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
266 
267 #endif
268 
269 // ************************************************************************* //
Foam::incompressible::RASModelVariables::nutInitPtr_
autoPtr< volScalarField > nutInitPtr_
Definition: RASModelVariables.H:95
Foam::incompressible::RASModelVariables::nutBaseName
const word & nutBaseName() const
Definition: RASModelVariables.C:336
Foam::incompressible::RASModelVariables::~RASModelVariables
virtual ~RASModelVariables()=default
Foam::incompressible::RASModelVariables::autoTmp
autoPtr< tmp< volScalarField > > autoTmp
Definition: RASModelVariables.H:65
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
Foam::incompressible::RASModelVariables::d
const volScalarField & d() const
Definition: RASModelVariables.C:418
Foam::incompressible::RASModelVariables::TMVar2Ptr_
autoTmp TMVar2Ptr_
Definition: RASModelVariables.H:83
Foam::incompressible::RASModelVariables::TMVar1Inst
const volScalarField & TMVar1Inst() const
return references to instantaneous turbulence fields
Definition: RASModelVariables.C:430
Foam::incompressible::RASModelVariables::solverControl_
const solverControl & solverControl_
Definition: RASModelVariables.H:73
turbulence
Info<< "Reading field U\n"<< endl;volVectorField U(IOobject("U", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE), mesh);volScalarField rho(IOobject("rho", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE), thermo.rho());volVectorField rhoU(IOobject("rhoU", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE), rho *U);volScalarField rhoE(IOobject("rhoE", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE), rho *(e+0.5 *magSqr(U)));surfaceScalarField pos(IOobject("pos", runTime.timeName(), mesh), mesh, dimensionedScalar("pos", dimless, 1.0));surfaceScalarField neg(IOobject("neg", runTime.timeName(), mesh), mesh, dimensionedScalar("neg", dimless, -1.0));surfaceScalarField phi("phi", fvc::flux(rhoU));Info<< "Creating turbulence model\n"<< endl;autoPtr< compressible::turbulenceModel > turbulence(compressible::turbulenceModel::New(rho, U, phi, thermo))
Definition: createFields.H:94
Foam::incompressible::RASModelVariables
Abstract base class for objective functions. No point in making this runTime selectable since its chi...
Definition: RASModelVariables.H:58
Foam::incompressible::RASModelVariables::TMVar1InitPtr_
autoPtr< volScalarField > TMVar1InitPtr_
Definition: RASModelVariables.H:93
Foam::tmp< volScalarField >
singlePhaseTransportModel.H
Foam::incompressible::RASModelVariables::TMVar1MeanPtr_
autoPtr< volScalarField > TMVar1MeanPtr_
Definition: RASModelVariables.H:98
Foam::incompressible::RASModelVariables::dPtr_
autoTmp dPtr_
Definition: RASModelVariables.H:85
turbulentTransportModel.H
Foam::incompressible::RASModelVariables::restoreInitValues
void restoreInitValues()
Restore turbulent fields to their initial values.
Definition: RASModelVariables.C:523
Foam::solverControl
Base class for solver control classes.
Definition: solverControl.H:51
Foam::incompressible::RASModelVariables::allocateInitValues
void allocateInitValues()
Definition: RASModelVariables.C:47
Foam::incompressible::RASModelVariables::TMVar2BaseName_
word TMVar2BaseName_
Definition: RASModelVariables.H:88
Foam::singlePhaseTransportModel
A simple single-phase transport model based on viscosityModel.
Definition: singlePhaseTransportModel.H:57
Foam::incompressible::RASModelVariables::correctBoundaryConditions
virtual void correctBoundaryConditions(const incompressible::turbulenceModel &turbulence)
correct bounday conditions of turbulent fields
Definition: RASModelVariables.C:619
Foam::incompressible::RASModelVariables::RASModelVariables
RASModelVariables(const fvMesh &mesh, const solverControl &SolverControl)
Construct from components.
Definition: RASModelVariables.C:194
Foam::incompressible::RASModelVariables::computeMeanFields
void computeMeanFields()
Compute mean fields on the fly.
Definition: RASModelVariables.C:568
Foam::incompressible::RASModelVariables::nutMeanPtr_
autoPtr< volScalarField > nutMeanPtr_
Definition: RASModelVariables.H:100
Foam::incompressible::RASModelVariables::transfer
virtual void transfer(RASModelVariables &rmv)
Transfer turbulence fields from an another object.
Definition: RASModelVariables.C:652
Foam::incompressible::RASModelVariables::nutRefInst
const volScalarField & nutRefInst() const
Definition: RASModelVariables.C:454
Foam::incompressible::RASModelVariables::hasDist
bool hasDist() const
Definition: RASModelVariables.C:318
Foam::incompressible::RASModelVariables::allocateMeanFields
void allocateMeanFields()
Definition: RASModelVariables.C:88
Foam::incompressible::RASModelVariables::resetMeanFields
void resetMeanFields()
Reset mean fields to zero.
Definition: RASModelVariables.C:543
Foam::incompressible::RASModelVariables::hasTMVar2
bool hasTMVar2() const
Definition: RASModelVariables.C:306
Foam::incompressible::RASModelVariables::nutBaseName_
word nutBaseName_
Definition: RASModelVariables.H:89
Foam::incompressible::RASModelVariables::hasTMVar2_
bool hasTMVar2_
Definition: RASModelVariables.H:79
Foam::incompressible::RASModelVariables::mesh_
const fvMesh & mesh_
Definition: RASModelVariables.H:72
Foam::incompressible::RASModelVariables::nutJacobianVar2
virtual tmp< volScalarField > nutJacobianVar2(const singlePhaseTransportModel &laminarTransport) const
Definition: RASModelVariables.C:496
Foam::incompressible::RASModelVariables::New
static autoPtr< RASModelVariables > New(const fvMesh &mesh, const solverControl &SolverControl)
Return a reference to the selected turbulence model.
Definition: RASModelVariables.C:257
Foam::incompressible::RASModelVariables::TMVar2MeanPtr_
autoPtr< volScalarField > TMVar2MeanPtr_
Definition: RASModelVariables.H:99
Foam::incompressible::RASModelVariables::TMVar1BaseName_
word TMVar1BaseName_
Definition: RASModelVariables.H:87
Foam::incompressible::RASModelVariables::TMVar2Inst
const volScalarField & TMVar2Inst() const
Definition: RASModelVariables.C:442
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:121
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::incompressible::RASModelVariables::nutRef
const volScalarField & nutRef() const
Definition: RASModelVariables.C:392
Foam::incompressible::RASModelVariables::hasTMVar1
bool hasTMVar1() const
Bools to idenify which turbulent fields are present.
Definition: RASModelVariables.C:300
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:84
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::incompressible::RASModelVariables::hasDist_
bool hasDist_
Definition: RASModelVariables.H:81
Foam::incompressible::RASModelVariables::devReff
tmp< volSymmTensorField > devReff(const singlePhaseTransportModel &laminarTransport, const volVectorField &U) const
Return stress tensor based on the mean flow variables.
Definition: RASModelVariables.C:595
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
U
U
Definition: pEqn.H:72
Foam::incompressible::RASModelVariables::cloneAutoTmp
autoTmp cloneAutoTmp(const autoTmp &source) const
Definition: RASModelVariables.C:153
Foam::incompressible::RASModelVariables::hasTMVar1_
bool hasTMVar1_
Definition: RASModelVariables.H:78
runTimeSelectionTables.H
Macros to ease declaration of run-time selection tables.
Foam::incompressible::RASModelVariables::TMVar1BaseName
const word & TMVar1BaseName() const
Turbulence field names.
Definition: RASModelVariables.C:324
Foam::incompressible::RASModelVariables::copyAndRename
void copyAndRename(volScalarField &f1, volScalarField &f2)
Definition: RASModelVariables.C:175
Foam::incompressible::RASModelVariables::TMVar1Ptr_
autoTmp TMVar1Ptr_
Definition: RASModelVariables.H:82
Foam::incompressible::RASModelVariables::declareRunTimeSelectionTable
declareRunTimeSelectionTable(autoPtr, RASModelVariables, dictionary,(const fvMesh &mesh, const solverControl &SolverControl),(mesh, SolverControl))
Foam::incompressible::RASModelVariables::TMVar2BaseName
const word & TMVar2BaseName() const
Definition: RASModelVariables.C:330
Foam::incompressible::RASModelVariables::TMVar1
const volScalarField & TMVar1() const
Return references to turbulence fields.
Definition: RASModelVariables.C:342
Foam::IncompressibleTurbulenceModel
Templated abstract base class for single-phase incompressible turbulence models.
Definition: IncompressibleTurbulenceModel.H:55
Foam::incompressible::RASModelVariables::hasNut_
bool hasNut_
Definition: RASModelVariables.H:80
Foam::incompressible::RASModelVariables::nutJacobianVar1
virtual tmp< volScalarField > nutJacobianVar1(const singlePhaseTransportModel &laminarTransport) const
Return nut Jacobian wrt the TM vars.
Definition: RASModelVariables.C:467
Foam::incompressible::RASModelVariables::hasNut
bool hasNut() const
Definition: RASModelVariables.C:312
Foam::incompressible::RASModelVariables::TMVar2InitPtr_
autoPtr< volScalarField > TMVar2InitPtr_
Definition: RASModelVariables.H:94
Foam::incompressible::RASModelVariables::TypeName
TypeName("RASModelVariables")
Runtime type information.
Foam::incompressible::RASModelVariables::TMVar2
const volScalarField & TMVar2() const
Definition: RASModelVariables.C:368
Foam::GeometricField< scalar, fvPatchField, volMesh >
Foam::incompressible::RASModelVariables::nutPtr_
autoTmp nutPtr_
Definition: RASModelVariables.H:84
laminarTransport
singlePhaseTransportModel laminarTransport(U, phi)
Foam::incompressible::RASModelVariables::clone
autoPtr< RASModelVariables > clone() const
Clone.
Definition: RASModelVariables.C:249
solverControl.H