43 mixedFvPatchVectorField(
p, iF),
46 psiName_(
"thermo:psi"),
52 refValue() = patchInternalField();
66 mixedFvPatchVectorField(
p, iF),
67 TName_(
dict.getOrDefault<
word>(
"T",
"T")),
68 pName_(
dict.getOrDefault<
word>(
"p",
"p")),
69 psiName_(
dict.getOrDefault<
word>(
"psi",
"thermo:psi")),
71 pInf_(
dict.
get<scalar>(
"pInf")),
72 TInf_(
dict.
get<scalar>(
"TInf")),
73 gamma_(
dict.
get<scalar>(
"gamma"))
77 if (
dict.found(
"value"))
96 <<
" unphysical pInf specified (pInf <= 0.0)" 97 <<
"\n on patch " << this->
patch().name()
98 <<
" of field " << this->internalField().name()
99 <<
" in file " << this->internalField().objectPath()
108 const supersonicFreestreamFvPatchVectorField& ptf,
110 const DimensionedField<vector, volMesh>& iF,
111 const fvPatchFieldMapper& mapper
114 mixedFvPatchVectorField(ptf,
p, iF, mapper),
117 psiName_(ptf.psiName_),
131 mixedFvPatchVectorField(sfspvf),
132 TName_(sfspvf.TName_),
133 pName_(sfspvf.pName_),
134 psiName_(sfspvf.psiName_),
138 gamma_(sfspvf.gamma_)
149 mixedFvPatchVectorField(sfspvf, iF),
150 TName_(sfspvf.TName_),
151 pName_(sfspvf.pName_),
152 psiName_(sfspvf.psiName_),
156 gamma_(sfspvf.gamma_)
164 if (!size() || updated())
169 const fvPatchField<scalar>& pT =
172 const fvPatchField<scalar>& pp =
175 const fvPatchField<scalar>& ppsi =
180 scalar
R = 1.0/(ppsi[0]*pT[0]);
182 scalar MachInf =
mag(UInf_)/
sqrt(gamma_*
R*TInf_);
187 <<
"\n on patch " << this->
patch().name()
188 <<
" of field " << this->internalField().name()
189 <<
" in file " << this->internalField().objectPath()
207 tmp<vectorField> nnInfHat = UInfHat ^
patch().nf();
222 sqrt((gamma_ + 1)/(gamma_ - 1))
223 *
atan(
sqrt((gamma_ - 1)/(gamma_ + 1)*(
sqr(MachInf) - 1)))
232 if (pp[facei] >= pInf_)
239 /(gamma_*
sqr(MachInf))*
mag(Ut[facei])*
log(pp[facei]/pInf_);
241 Up[facei] = Ut[facei] + fpp*nHatInf[facei];
244 scalar Mach =
mag(Up[facei])/
sqrt(gamma_/ppsi[facei]);
250 Up[facei] =
U[facei];
251 valueFraction()[facei] = 0;
262 (2/(gamma_ - 1))*(1 + ((gamma_ - 1)/2)*
sqr(MachInf))
263 *
pow(pp[facei]/pInf_, (1 - gamma_)/gamma_)
273 sqrt((gamma_ + 1)/(gamma_ - 1))
274 *
atan(
sqrt((gamma_ - 1)/(gamma_ + 1)*(
sqr(Mach) - 1)))
277 scalar fpp = (nuMachInf - nuMachf)*
mag(Ut[facei]);
279 Up[facei] = Ut[facei] + fpp*nHatInf[facei];
284 <<
"unphysical subsonic inflow has been generated" 285 <<
"\n on patch " << this->
patch().name()
286 <<
" of field " << this->internalField().name()
288 << this->internalField().objectPath()
294 mixedFvPatchVectorField::updateCoeffs();
308 writeEntry(
"value",
os);
319 supersonicFreestreamFvPatchVectorField
List< ReturnType > get(const UPtrList< T > &list, const AccessOp &aop)
List of values generated by applying the access operation to each list item.
fvPatchField< vector > fvPatchVectorField
dimensionedScalar log(const dimensionedScalar &ds)
errorManipArg< error, int > exit(error &err, const int errNo=1)
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
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...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
dimensionedScalar sqrt(const dimensionedScalar &ds)
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
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.
virtual void write(Ostream &) const
Write.
Lookup type of boundary radiation properties.
Macros for easy insertion into run-time selection tables.
#define forAll(list, i)
Loop across all elements in list.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
virtual void write(Ostream &) const
Write.
A class for handling words, derived from Foam::string.
static const word null
An empty word.
Ostream & writeEntryIfDifferent(const word &key, const T &value1, const T &value2)
Write a keyword/value entry only when the two values differ.
OBJstream os(runTime.globalPath()/outputName)
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
This boundary condition provides a supersonic free-stream condition.
#define R(A, B, C, D, E, F, K, M)
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
dimensionedScalar atan(const dimensionedScalar &ds)
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 std::string patch
OpenFOAM patch number as a std::string.
Field< vector > vectorField
Specialisation of Field<T> for vector.
makePatchTypeField(fvPatchScalarField, atmBoundaryLayerInletEpsilonFvPatchScalarField)
supersonicFreestreamFvPatchVectorField(const fvPatch &, const DimensionedField< vector, volMesh > &)
Construct from patch and internal field.
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)