fixedMeanOutletInletFvPatchField.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) 2018 OpenFOAM Foundation
9  Copyright (C) 2020-2021 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 "volFields.H"
31 #include "surfaceFields.H"
32 
33 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
34 
35 template<class Type>
37 (
38  const fvPatch& p,
40 )
41 :
43  meanValue_()
44 {}
45 
46 
47 template<class Type>
49 (
50  const fvPatch& p,
52  const dictionary& dict
53 )
54 :
55  outletInletFvPatchField<Type>(p, iF),
56  meanValue_(Function1<Type>::New("meanValue", dict, &this->db()))
57 {
58  this->phiName_ = dict.getOrDefault<word>("phi", "phi");
59 
61 
62  this->refValue() = *this;
63  this->refGrad() = Zero;
64  this->valueFraction() = 0.0;
65 }
66 
67 
68 template<class Type>
70 (
72  const fvPatch& p,
74  const fvPatchFieldMapper& mapper
75 )
76 :
77  outletInletFvPatchField<Type>(ptf, p, iF, mapper),
78  meanValue_(ptf.meanValue_.clone())
79 {}
80 
81 
82 template<class Type>
84 (
86 )
87 :
89  meanValue_(ptf.meanValue_.clone())
90 {}
91 
92 
93 template<class Type>
95 (
98 )
99 :
100  outletInletFvPatchField<Type>(ptf, iF),
101  meanValue_(ptf.meanValue_.clone())
102 {}
103 
104 
105 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
106 
107 template<class Type>
109 {
110  if (this->updated())
111  {
112  return;
113  }
114 
115  const scalar t = this->db().time().timeOutputValue();
116  Type meanValue = meanValue_->value(t);
117 
118  Field<Type> newValues(this->patchInternalField());
119 
120  Type meanValuePsi =
121  gSum(this->patch().magSf()*newValues)
122  /gSum(this->patch().magSf());
123 
124  if (mag(meanValue) > SMALL && mag(meanValuePsi) > 0.5*mag(meanValue))
125  {
126  newValues *= mag(meanValue)/mag(meanValuePsi);
127  }
128  else
129  {
130  newValues += (meanValue - meanValuePsi);
131  }
132 
133  this->refValue() = newValues;
134 
136 }
137 
138 
139 template<class Type>
141 {
143  meanValue_->writeData(os);
145 }
146 
147 
148 // ************************************************************************* //
bool readValueEntry(const dictionary &dict, IOobjectOption::readOption readOpt=IOobjectOption::LAZY_READ)
Read the "value" entry into *this.
Definition: fvPatchField.C:32
Foam::surfaceFields.
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
dictionary dict
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
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.
void writeValueEntry(Ostream &os) const
Write *this field as a "value" entry.
Definition: fvPatchField.H:375
virtual void write(Ostream &) const
Write.
Definition: fvPatchField.C:372
virtual Field< Type > & refValue()
Type gSum(const FieldField< Field, Type > &f)
A class for handling words, derived from Foam::string.
Definition: word.H:63
virtual scalarField & valueFraction()
A FieldMapper for finite-volume patch fields.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:56
OBJstream os(runTime.globalPath()/outputName)
fixedMeanOutletInletFvPatchField(const fvPatch &, const DimensionedField< Type, volMesh > &)
Construct from patch and internal field.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Definition: areaFieldsFwd.H:42
const std::string patch
OpenFOAM patch number as a std::string.
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T, or return the given default value. FatalIOError if it is found and the number of...
volScalarField & p
word phiName_
Name of flux field (default: phi)
virtual Field< Type > & refGrad()
This boundary condition provides a generic inflow condition, with specified outflow for the case of r...
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:127
This boundary condition extrapolates field to the patch using the near-cell values and adjusts the di...