pressureInletVelocityFvPatchVectorField.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 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 
31 #include "volFields.H"
32 #include "surfaceFields.H"
33 
34 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
35 
38 (
39  const fvPatch& p,
41 )
42 :
43  fixedValueFvPatchVectorField(p, iF),
44  phiName_("phi"),
45  rhoName_("rho")
46 {}
47 
48 
51 (
53  const fvPatch& p,
55  const fvPatchFieldMapper& mapper
56 )
57 :
58  fixedValueFvPatchVectorField(ptf, p, iF, mapper),
59  phiName_(ptf.phiName_),
60  rhoName_(ptf.rhoName_)
61 {}
62 
63 
66 (
67  const fvPatch& p,
69  const dictionary& dict
70 )
71 :
72  fixedValueFvPatchVectorField(p, iF, dict),
73  phiName_(dict.getOrDefault<word>("phi", "phi")),
74  rhoName_(dict.getOrDefault<word>("rho", "rho"))
75 {}
76 
77 
80 (
82 )
83 :
84  fixedValueFvPatchVectorField(pivpvf),
85  phiName_(pivpvf.phiName_),
86  rhoName_(pivpvf.rhoName_)
87 {}
88 
89 
92 (
95 )
96 :
97  fixedValueFvPatchVectorField(pivpvf, iF),
98  phiName_(pivpvf.phiName_),
99  rhoName_(pivpvf.rhoName_)
100 {}
101 
102 
103 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
104 
106 {
107  if (updated())
108  {
109  return;
110  }
111 
112  const auto& phip = patch().lookupPatchField<surfaceScalarField>(phiName_);
113 
114  tmp<vectorField> n = patch().nf();
115  const Field<scalar>& magS = patch().magSf();
116 
117  if (phip.internalField().dimensions() == dimVolume/dimTime)
118  {
119  operator==(n*phip/magS);
120  }
121  else if (phip.internalField().dimensions() == dimMass/dimTime)
122  {
123  const auto& rhop = patch().lookupPatchField<volScalarField>(rhoName_);
124 
125  operator==(n*phip/(rhop*magS));
126  }
127  else
128  {
130  << "dimensions of phi are not correct"
131  << "\n on patch " << this->patch().name()
132  << " of field " << this->internalField().name()
133  << " in file " << this->internalField().objectPath()
135  }
136 
137  fixedValueFvPatchVectorField::updateCoeffs();
138 }
139 
140 
142 {
144  os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
145  os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
147 }
148 
149 
150 // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
151 
152 void Foam::pressureInletVelocityFvPatchVectorField::operator=
153 (
154  const fvPatchField<vector>& pvf
155 )
156 {
157  fvPatchField<vector>::operator=(patch().nf()*(patch().nf() & pvf));
158 }
159 
160 
161 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
162 
163 namespace Foam
164 {
166  (
168  pressureInletVelocityFvPatchVectorField
169  );
170 }
171 
172 // ************************************************************************* //
Foam::surfaceFields.
dictionary dict
fvPatchField< vector > fvPatchVectorField
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:125
error FatalError
Error stream (stdout output on all processes), with additional &#39;FOAM FATAL ERROR&#39; header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:598
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:70
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
Macros for easy insertion into run-time selection tables.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:81
const dimensionSet dimVolume(pow3(dimLength))
Definition: dimensionSets.H:58
A class for handling words, derived from Foam::string.
Definition: word.H:63
A FieldMapper for finite-volume patch fields.
Ostream & writeEntryIfDifferent(const word &key, const T &value1, const T &value2)
Write a keyword/value entry only when the two values differ.
Definition: Ostream.H:336
OBJstream os(runTime.globalPath()/outputName)
pressureInletVelocityFvPatchVectorField(const fvPatch &, const DimensionedField< vector, volMesh > &)
Construct from patch and internal field.
virtual void operator=(const UList< Type > &)
Definition: fvPatchField.C:391
This velocity inlet boundary condition is applied to patches where the pressure is specified...
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.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
Definition: dimensionSets.H:51
label n
const dimensionSet dimMass(1, 0, 0, 0, 0, 0, 0)
Definition: dimensionSets.H:49
volScalarField & p
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
makePatchTypeField(fvPatchScalarField, atmBoundaryLayerInletEpsilonFvPatchScalarField)
Namespace for OpenFOAM.