porousBafflePressureFvPatchField.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) 2011-2016 OpenFOAM Foundation
9  Copyright (C) 2020-2022 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 \*---------------------------------------------------------------------------*/
28 
30 #include "surfaceFields.H"
31 #include "turbulenceModel.H"
33 
34 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
35 
37 (
38  const fvPatch& p,
40 )
41 :
42  parent_bctype(p, iF),
43  phiName_("phi"),
44  rhoName_("rho"),
45  D_(),
46  I_(),
47  length_(0),
48  uniformJump_(false)
49 {}
50 
51 
53 (
54  const fvPatch& p,
56  const dictionary& dict,
57  const bool needValue
58 )
59 :
60  parent_bctype(p, iF, dict, false), // needValue = false
61  phiName_(dict.getOrDefault<word>("phi", "phi")),
62  rhoName_(dict.getOrDefault<word>("rho", "rho")),
63  D_(Function1<scalar>::New("D", dict, &db())),
64  I_(Function1<scalar>::New("I", dict, &db())),
65  length_(dict.get<scalar>("length")),
66  uniformJump_(dict.getOrDefault("uniformJump", false))
67 {
68  if (needValue)
69  {
70  if (!this->readValueEntry(dict))
71  {
73  }
74  }
75 }
76 
77 
79 (
80  const this_bctype& ptf,
81  const fvPatch& p,
82  const DimensionedField<scalar, volMesh>& iF,
83  const fvPatchFieldMapper& mapper
84 )
85 :
86  parent_bctype(ptf, p, iF, mapper),
87  phiName_(ptf.phiName_),
88  rhoName_(ptf.rhoName_),
89  D_(ptf.D_.clone()),
90  I_(ptf.I_.clone()),
91  length_(ptf.length_),
92  uniformJump_(ptf.uniformJump_)
93 {}
94 
95 
97 (
98  const this_bctype& ptf,
100 )
101 :
102  parent_bctype(ptf, iF),
103  phiName_(ptf.phiName_),
104  rhoName_(ptf.rhoName_),
105  D_(ptf.D_.clone()),
106  I_(ptf.I_.clone()),
107  length_(ptf.length_),
108  uniformJump_(ptf.uniformJump_)
109 {}
110 
111 
112 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
113 
115 {
116  if (updated())
117  {
118  return;
119  }
120 
121  const auto& phip = patch().lookupPatchField<surfaceScalarField>(phiName_);
122 
123  scalarField Un(phip/patch().magSf());
124 
125  if (phip.internalField().dimensions() == dimMass/dimTime)
126  {
127  Un /= patch().lookupPatchField<volScalarField>(rhoName_);
128  }
129 
130  if (uniformJump_)
131  {
132  Un = gAverage(Un);
133  }
134  scalarField magUn(mag(Un));
135 
136  const turbulenceModel& turbModel = db().lookupObject<turbulenceModel>
137  (
139  (
141  internalField().group()
142  )
143  );
144 
145  const scalar t = db().time().timeOutputValue();
146  const scalar D = D_->value(t);
147  const scalar I = I_->value(t);
148 
149  setJump
150  (
151  -sign(Un)
152  *(
153  D*turbModel.nu(patch().index())
154  + I*0.5*magUn
155  )*magUn*length_
156  );
157 
158  if (internalField().dimensions() == dimPressure)
159  {
160  setJump
161  (
162  jump()*patch().lookupPatchField<volScalarField>(rhoName_)
163  );
164  }
165 
166  this->relax();
167 
168  if (debug)
169  {
170  scalar avePressureJump = gAverage(jump());
171  scalar aveVelocity = gAverage(Un);
172 
173  Info<< patch().boundaryMesh().mesh().name() << ':'
174  << patch().name() << ':'
175  << " Average pressure drop :" << avePressureJump
176  << " Average velocity :" << aveVelocity
177  << endl;
178  }
179 
180  this->parent_bctype::updateCoeffs();
181 }
182 
183 
184 void Foam::porousBafflePressureFvPatchField::write(Ostream& os) const
185 {
186  this->parent_bctype::write(os);
187  os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
188  os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
189  D_->writeData(os);
190  I_->writeData(os);
191  os.writeEntry("length", length_);
192  os.writeEntry("uniformJump", uniformJump_);
193 }
194 
195 
196 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
197 
198 namespace Foam
199 {
201  (
203  porousBafflePressureFvPatchField
204  );
205 }
206 
207 // ************************************************************************* //
bool readValueEntry(const dictionary &dict, IOobjectOption::readOption readOpt=IOobjectOption::LAZY_READ)
Read the "value" entry into *this.
Foam::surfaceFields.
dimensionedScalar sign(const dimensionedScalar &ds)
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
const Type & value() const noexcept
Return const reference to value.
dictionary dict
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
UEqn relax()
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:130
ThermalDiffusivity< CompressibleTurbulenceModel< fluidThermo > > turbulenceModel
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:518
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:70
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tf1, const word &name, const dimensionSet &dimensions, const bool initCopy=false)
Global function forwards to reuseTmpDimensionedField::New.
virtual void evaluate(const Pstream::commsTypes commsType)
Evaluate the patch field.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
Macros for easy insertion into run-time selection tables.
constexpr const char *const group
Group name for atomic constants.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:72
static word groupName(StringType base, const word &group)
Create dot-delimited name.group string.
static const Identity< scalar > I
Definition: Identity.H:100
fvPatchField< scalar > fvPatchScalarField
static const word propertiesName
Default name of the turbulence properties dictionary.
constexpr T & get(FixedList< T, N > &list) noexcept
Definition: FixedList.H:887
A class for handling words, derived from Foam::string.
Definition: word.H:63
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
const dimensionSet dimPressure
int debug
Static debugging option.
Type gAverage(const FieldField< Field, Type > &f, const label comm)
The global arithmetic average of a FieldField.
decomposeUsingBbs false
Use bounding boxes (default) or unique decomposition of triangles (i.e. do not duplicate triangles) ...
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const std::string patch
OpenFOAM patch number as a std::string.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
Definition: dimensionSets.H:51
porousBafflePressureFvPatchField(const fvPatch &, const DimensionedField< scalar, volMesh > &)
Construct from patch and internal field.
messageStream Info
Information stream (stdout output on master, null elsewhere)
const dimensionedScalar & D
const dimensionSet dimMass(1, 0, 0, 0, 0, 0, 0)
Definition: dimensionSets.H:49
volScalarField & p
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
"buffered" : (MPI_Bsend, MPI_Recv)
void write(vtk::formatter &fmt, const Type &val, const label n=1)
Component-wise write of a value (N times)
makePatchTypeField(fvPatchScalarField, atmBoundaryLayerInletEpsilonFvPatchScalarField)
Namespace for OpenFOAM.