freestreamFvPatchField.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-2015 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
30
31// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
32
33template<class Type>
35(
36 const fvPatch& p,
38)
39:
40 inletOutletFvPatchField<Type>(p, iF),
41 freestreamBCPtr_()
42{}
43
44
45template<class Type>
47(
48 const fvPatch& p,
50 const dictionary& dict
51)
52:
53 inletOutletFvPatchField<Type>(p, iF),
54 freestreamBCPtr_()
55{
56 this->patchType() = dict.getOrDefault<word>("patchType", word::null);
57
58 this->phiName_ = dict.getOrDefault<word>("phi", "phi");
59
60 if (dict.found("freestreamValue"))
61 {
63 Field<Type>("freestreamValue", dict, p.size());
64
65 if (dict.found("value"))
66 {
68 (
69 Field<Type>("value", dict, p.size())
70 );
71 }
72 else
73 {
75 }
76 }
77 else
78 {
79 // Freestream value provided by another patch
80 freestreamBCPtr_ =
81 fvPatchField<Type>::New(p, iF, dict.subDict("freestreamBC"));
82
83 // Force user to supply an initial value
84 // - we do not know if the supplied BC has all dependencies available
86 (
87 Field<Type>("value", dict, p.size())
88 );
89 }
90}
91
92
93template<class Type>
95(
97 const fvPatch& p,
99 const fvPatchFieldMapper& mapper
100)
101:
102 inletOutletFvPatchField<Type>(ptf, p, iF, mapper),
103 freestreamBCPtr_()
104{
105 if (ptf.freestreamBCPtr_)
106 {
107 freestreamBCPtr_ =
108 fvPatchField<Type>::New(ptf.freestreamBCPtr_(), p, iF, mapper);
109 }
110}
111
112
113template<class Type>
115(
117)
118:
119 inletOutletFvPatchField<Type>(ptf),
120 freestreamBCPtr_()
121{
122 if (ptf.freestreamBCPtr_)
123 {
124 freestreamBCPtr_ = ptf.freestreamBCPtr_->clone();
125 }
126}
127
128
129template<class Type>
131(
134)
135:
136 inletOutletFvPatchField<Type>(ptf, iF),
137 freestreamBCPtr_()
138{
139 if (ptf.freestreamBCPtr_)
140 {
141 freestreamBCPtr_ = ptf.freestreamBCPtr_->clone();
142 }
143}
144
145
146// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
147
148template<class Type>
150{
152 if (freestreamBCPtr_)
153 {
154 freestreamBCPtr_->autoMap(m);
155 }
156}
157
158
159template<class Type>
161(
162 const fvPatchField<Type>& ptf,
163 const labelList& addr
164)
165{
167
168 const auto& fsptf = refCast<const freestreamFvPatchField<Type>>(ptf);
169
170 if (fsptf.freestreamBCPtr_)
171 {
172 freestreamBCPtr_->rmap(fsptf.freestreamBCPtr_(), addr);
173 }
174}
175
176
177template<class Type>
179{
180 if (this->updated())
181 {
182 return;
183 }
184
185 if (freestreamBCPtr_)
186 {
187 freestreamBCPtr_->evaluate();
188 freestreamValue() = freestreamBCPtr_();
189 }
190
192}
193
194
195template<class Type>
197{
199 os.writeEntryIfDifferent<word>("phi", "phi", this->phiName_);
200
201 if (freestreamBCPtr_)
202 {
203 os.beginBlock("freestreamBC");
204 freestreamBCPtr_->write(os);
205 os.endBlock();
206 }
207 else
208 {
209 freestreamValue().writeEntry("freestreamValue", os);
210 }
211 this->writeEntry("value", os);
212}
213
214
215// ************************************************************************* //
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Generic templated field type.
Definition: Field.H:82
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
virtual Ostream & endBlock()
Write end block group.
Definition: Ostream.C:105
Ostream & writeEntry(const keyType &key, const T &value)
Write a keyword/value entry.
Definition: Ostream.H:239
virtual Ostream & beginBlock(const keyType &kw)
Write begin block group with the given name.
Definition: Ostream.C:87
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
virtual bool write(const token &tok)=0
Write token to stream or otherwise handle it.
static autoPtr< Time > New()
Construct (dummy) Time - no functionObjects or libraries.
Definition: Time.C:717
void size(const label n)
Older name for setAddressableSize.
Definition: UList.H:114
void autoMap(const fvPatchFieldMapper &)
Map (and resize as needed) from self given a mapping object.
void rmap(const atmBoundaryLayer &, const labelList &)
Reverse map the given fvPatchField onto this fvPatchField.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
const dictionary & subDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a sub-dictionary.
Definition: dictionary.C:460
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
bool found(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Search for an entry (const access) with the given keyword.
Definition: dictionaryI.H:87
This boundary condition provides a free-stream condition. It is a 'mixed' condition derived from the ...
const Field< Type > & freestreamValue() const
virtual void autoMap(const fvPatchFieldMapper &mapper)
Map (and resize as needed) from self given a mapping object.
virtual void rmap(const fvPatchField< Type > &ptf, const labelList &addr)
Reverse map the given fvPatchField onto this fvPatchField.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
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< Type > &)
Definition: fvPatchField.C:408
const word & patchType() const
Optional patch type.
Definition: fvPatchField.H:380
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:71
This boundary condition provides a generic outflow condition, with specified inflow for the case of r...
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
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
OBJstream os(runTime.globalPath()/outputName)
dictionary dict