70 phiName_(ptf.phiName_),
71 rhoName_(ptf.rhoName_),
72 fieldInf_(ptf.fieldInf_),
86 phiName_(
dict.getOrDefault<
word>(
"phi",
"phi")),
87 rhoName_(
dict.getOrDefault<
word>(
"rho",
"rho")),
91 if (
dict.found(
"value"))
107 if (dict.readIfPresent(
"lInf",
lInf_))
114 <<
"unphysical lInf specified (lInf < 0)" <<
nl 127 const advectiveFvPatchField& ptpsf
130 mixedFvPatchField<Type>(ptpsf),
131 phiName_(ptpsf.phiName_),
132 rhoName_(ptpsf.rhoName_),
133 fieldInf_(ptpsf.fieldInf_),
146 phiName_(ptpsf.phiName_),
147 rhoName_(ptpsf.rhoName_),
148 fieldInf_(ptpsf.fieldInf_),
160 this->db().objectRegistry::template lookupObject<surfaceScalarField>
164 this->
patch().template lookupPatchField<surfaceScalarField, scalar>
172 this->
patch().template lookupPatchField<volScalarField, scalar>
177 return phip/(rhop*this->
patch().magSf());
181 return phip/this->
patch().magSf();
194 const fvMesh&
mesh = this->internalField().mesh();
200 scalar deltaT = this->db().time().deltaTValue();
202 const GeometricField<Type, fvPatchField, volMesh>&
field =
203 this->db().objectRegistry::template
204 lookupObject<GeometricField<Type, fvPatchField, volMesh>>
206 this->internalField().name()
216 label patchi = this->
patch().index();
227 ddtScheme == fv::EulerDdtScheme<scalar>::typeName
228 || ddtScheme == fv::CrankNicolsonDdtScheme<scalar>::typeName
233 field.oldTime().boundaryField()[patchi] +
k*fieldInf_
236 this->valueFraction() = (1.0 +
k)/(1.0 +
alpha +
k);
238 else if (ddtScheme == fv::backwardDdtScheme<scalar>::typeName)
242 2.0*
field.oldTime().boundaryField()[patchi]
243 - 0.5*
field.oldTime().oldTime().boundaryField()[patchi]
247 this->valueFraction() = (1.5 +
k)/(1.5 +
alpha +
k);
251 ddtScheme == fv::localEulerDdtScheme<scalar>::typeName
260 w*this->
patch().deltaCoeffs()/rDeltaT.boundaryField()[patchi]
264 const scalarField k(w/(rDeltaT.boundaryField()[patchi]*lInf_));
268 field.oldTime().boundaryField()[patchi] +
k*fieldInf_
271 this->valueFraction() = (1.0 +
k)/(1.0 +
alpha +
k);
277 <<
" on patch " << this->
patch().name()
278 <<
" of field " << this->internalField().name()
279 <<
" in file " << this->internalField().objectPath()
287 ddtScheme == fv::EulerDdtScheme<scalar>::typeName
288 || ddtScheme == fv::CrankNicolsonDdtScheme<scalar>::typeName
291 this->refValue() =
field.oldTime().boundaryField()[patchi];
293 this->valueFraction() = 1.0/(1.0 +
alpha);
295 else if (ddtScheme == fv::backwardDdtScheme<scalar>::typeName)
299 2.0*
field.oldTime().boundaryField()[patchi]
300 - 0.5*
field.oldTime().oldTime().boundaryField()[patchi]
303 this->valueFraction() = 1.5/(1.5 +
alpha);
307 ddtScheme == fv::localEulerDdtScheme<scalar>::typeName
316 w*this->
patch().deltaCoeffs()/rDeltaT.boundaryField()[patchi]
319 this->refValue() =
field.oldTime().boundaryField()[patchi];
321 this->valueFraction() = 1.0/(1.0 +
alpha);
327 <<
"\n on patch " << this->
patch().name()
328 <<
" of field " << this->internalField().name()
329 <<
" in file " << this->internalField().objectPath()
352 this->writeEntry(
"value",
os);
ITstream & ddtScheme(const word &name) const
Get ddt scheme for given name, or default.
errorManipArg< error, int > exit(error &err, const int errNo=1)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
const fvPatch & patch() const noexcept
Return the patch.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
scalar lInf_
Relaxation length-scale.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
constexpr char nl
The newline '\n' character (0x0a)
Type fieldInf_
Field value of the far-field.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
This boundary condition provides a base class for 'mixed' type boundary conditions, i.e. conditions that mix fixed value and patch-normal gradient conditions.
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Ostream & writeEntry(const keyType &key, const T &value)
Write a keyword/value entry.
label k
Boltzmann constant.
virtual void write(Ostream &) const
Write.
Macros for easy insertion into run-time selection tables.
virtual Field< Type > & refValue()
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Generic templated field type.
A class for handling words, derived from Foam::string.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
virtual scalarField & valueFraction()
advectiveFvPatchField(const fvPatch &, const DimensionedField< Type, volMesh > &)
Construct from patch and internal field.
A FieldMapper for finite-volume patch fields.
static const volScalarField & localRDeltaT(const fvMesh &mesh)
Return the reciprocal of the local time-step.
Ostream & writeEntryIfDifferent(const word &key, const T &value1, const T &value2)
Write a keyword/value entry only when the two values differ.
virtual tmp< scalarField > advectionSpeed() const
Calculate and return the advection speed at the boundary.
virtual tmp< Field< Type > > patchInternalField() const
Return internal field next to patch as patch field.
OBJstream os(runTime.globalPath()/outputName)
virtual void write(Ostream &) const
Write.
const dimensionSet dimDensity
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
virtual void operator=(const UList< Type > &)
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const DimensionedField< Type, volMesh > & internalField() const noexcept
Return dimensioned internal field reference.
const std::string patch
OpenFOAM patch number as a std::string.
This boundary condition provides an advective outflow condition, based on solving DDt(W...
virtual const word & name() const
Return name.
A class for managing temporary objects.
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
An abstract base class with a fat-interface to all derived classes covering all possible ways in whic...
virtual Field< Type > & refGrad()
const dimensionSet dimArea(sqr(dimLength))
IOerror FatalIOError
Error stream (stdout output on all processes), with additional 'FOAM FATAL IO ERROR' header text and ...
static constexpr const zero Zero
Global zero (0)
const dimensionSet dimVelocity