fluxCorrectedVelocityFvPatchVectorField.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) 2017-2020 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
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 "fvPatchFieldMapper.H"
32#include "volFields.H"
33#include "surfaceFields.H"
34
35// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
36
37Foam::fluxCorrectedVelocityFvPatchVectorField::
38fluxCorrectedVelocityFvPatchVectorField
39(
40 const fvPatch& p,
42)
43:
44 zeroGradientFvPatchVectorField(p, iF),
45 phiName_("phi"),
46 rhoName_("rho")
47{}
48
49
50Foam::fluxCorrectedVelocityFvPatchVectorField::
51fluxCorrectedVelocityFvPatchVectorField
52(
54 const fvPatch& p,
56 const fvPatchFieldMapper& mapper
57)
58:
59 zeroGradientFvPatchVectorField(ptf, p, iF, mapper),
60 phiName_(ptf.phiName_),
61 rhoName_(ptf.rhoName_)
62{}
63
64
65Foam::fluxCorrectedVelocityFvPatchVectorField::
66fluxCorrectedVelocityFvPatchVectorField
67(
68 const fvPatch& p,
70 const dictionary& dict
71)
72:
73 zeroGradientFvPatchVectorField(p, iF),
74 phiName_(dict.getOrDefault<word>("phi", "phi")),
75 rhoName_(dict.getOrDefault<word>("rho", "rho"))
76{
77 patchType() = dict.getOrDefault<word>("patchType", word::null);
78 fvPatchVectorField::operator=(patchInternalField());
79}
80
81
82Foam::fluxCorrectedVelocityFvPatchVectorField::
83fluxCorrectedVelocityFvPatchVectorField
84(
87)
88:
89 zeroGradientFvPatchVectorField(fcvpvf, iF),
90 phiName_(fcvpvf.phiName_),
91 rhoName_(fcvpvf.rhoName_)
92{}
93
94
95// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
96
98(
100)
101{
102 if (!updated())
103 {
104 updateCoeffs();
105 }
106
107 zeroGradientFvPatchVectorField::evaluate();
108
109 const surfaceScalarField& phi =
110 db().lookupObject<surfaceScalarField>(phiName_);
111
112 const fvsPatchField<scalar>& phip =
113 patch().patchField<surfaceScalarField, scalar>(phi);
114
115 const vectorField n(patch().nf());
116 const Field<scalar>& magS = patch().magSf();
117
119 {
120 operator==(*this - n*(n & *this) + n*phip/magS);
121 }
123 {
124 const fvPatchField<scalar>& rhop =
125 patch().lookupPatchField<volScalarField, scalar>(rhoName_);
126
127 operator==(*this - n*(n & *this) + n*phip/(rhop*magS));
128 }
129 else
130 {
132 << "dimensions of phi are incorrect\n"
133 << " on patch " << this->patch().name()
134 << " of field " << this->internalField().name()
135 << " in file " << this->internalField().objectPath()
136 << exit(FatalError);
137 }
138}
139
140
142{
144 os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
145 os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
146 writeEntry("value", os);
147}
148
149
150// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
151
152namespace Foam
153{
155 (
158 );
159}
160
161// ************************************************************************* //
label n
Macros for easy insertion into run-time selection tables.
surfaceScalarField & phi
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const dimensionSet & dimensions() const
Return dimensions.
void evaluate()
Evaluate boundary conditions.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
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:251
commsTypes
Types of communications.
Definition: UPstream.H:67
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
This boundary condition provides a velocity outlet boundary condition for patches where the pressure ...
virtual bool write()
Write the output fields.
A FieldMapper for finite-volume patch fields.
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:82
virtual void operator=(const UList< vector > &)
Definition: fvPatchField.C:408
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:71
An abstract base class with a fat-interface to all derived classes covering all possible ways in whic...
Definition: fvsPatchField.H:79
A class for handling words, derived from Foam::string.
Definition: word.H:68
static const word null
An empty word.
Definition: word.H:80
volScalarField & p
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:453
OBJstream os(runTime.globalPath()/outputName)
#define makePatchTypeField(PatchTypeField, typePatchTypeField)
Definition: fvPatchField.H:676
Namespace for OpenFOAM.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:82
const dimensionSet dimArea(sqr(dimLength))
Definition: dimensionSets.H:59
const dimensionSet dimVelocity
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
error FatalError
const dimensionSet dimDensity
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:130
dictionary dict
Foam::surfaceFields.