62 rhoOutlet_(
dict.getOrDefault<scalar>(
"rhoOutlet", -VGREAT)),
74 dict.readIfPresent(
"rho", rhoName_);
82 <<
"Please supply either 'volumetricFlowRate' or"
83 <<
" 'massFlowRate' (optional: with 'rho')" <<
nl
88 if (!this->readValueEntry(
dict))
98 const flowRateOutletVelocityFvPatchVectorField& ptf,
100 const DimensionedField<vector, volMesh>& iF,
101 const fvPatchFieldMapper& mapper
104 fixedValueFvPatchField<
vector>(ptf,
p, iF, mapper),
106 rhoName_(ptf.rhoName_),
107 rhoOutlet_(ptf.rhoOutlet_),
108 volumetric_(ptf.volumetric_)
120 rhoName_(ptf.rhoName_),
121 rhoOutlet_(ptf.rhoOutlet_),
122 volumetric_(ptf.volumetric_)
134 flowRate_(ptf.flowRate_.clone()),
135 rhoName_(ptf.rhoName_),
136 rhoOutlet_(ptf.rhoOutlet_),
137 volumetric_(ptf.volumetric_)
143template<
class RhoType>
144void Foam::flowRateOutletVelocityFvPatchVectorField::updateValues
149 const scalar t = db().time().timeOutputValue();
163 nUp =
max(nUp, scalar(0));
165 const scalar flowRate = flowRate_->value(t);
166 const scalar estimatedFlowRate =
gSum(
rho*(this->patch().magSf()*nUp));
168 if (estimatedFlowRate > 0.5*flowRate)
170 nUp *= (
mag(flowRate)/
mag(estimatedFlowRate));
174 nUp += ((flowRate - estimatedFlowRate)/
gSum(
rho*
patch().magSf()));
192 if (volumetric_ || rhoName_ ==
"none")
202 =
patch().cfindPatchField<volScalarField>(rhoName_)
213 <<
"Did not find registered density field " << rhoName_
214 <<
" and no constant density 'rhoOutlet' specified"
218 updateValues(rhoOutlet_);
222 fixedValueFvPatchVectorField::updateCoeffs();
229 flowRate_->writeData(
os);
246 flowRateOutletVelocityFvPatchVectorField
Macros for easy insertion into run-time selection tables.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
static autoPtr< Function1< Type > > NewIfPresent(const word &entryName, const dictionary &dict, const word &redirectType, const objectRegistry *obrPtr=nullptr)
An optional selector, with fallback redirection.
A simple container of IOobject preferences. Can also be used for general handling of read/no-read/rea...
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Ostream & writeEntryIfDifferent(const word &key, const T &value1, const T &value2)
Write a keyword/value entry only when the two values differ.
@ buffered
"buffered" : (MPI_Bsend, MPI_Recv)
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
This boundary condition supplies a fixed value constraint, and is the base class for a number of othe...
Velocity outlet boundary condition which corrects the extrapolated velocity to match the specified fl...
virtual void write(Ostream &) const
Write.
virtual tmp< fvPatchField< vector > > clone() const
Return a clone.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
flowRateOutletVelocityFvPatchVectorField(const fvPatch &, const DimensionedField< vector, volMesh > &)
Construct from patch and internal field.
A FieldMapper for finite-volume patch fields.
virtual void write(Ostream &) const
Write.
void writeValueEntry(Ostream &os) const
Write *this field as a "value" entry.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
A class representing the concept of 1 (one) that can be used to avoid manipulating objects known to b...
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
A class for handling words, derived from Foam::string.
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
OBJstream os(runTime.globalPath()/outputName)
#define makePatchTypeField(PatchTypeField, typePatchTypeField)
Define a concrete fvPatchField type and add to run-time tables Example, (fvPatchScalarField,...
const std::string patch
OpenFOAM patch number as a std::string.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Type gSum(const FieldField< Field, Type > &f)
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
Field< vector > vectorField
Specialisation of Field<T> for vector.
IOerror FatalIOError
Error stream (stdout output on all processes), with additional 'FOAM FATAL IO ERROR' header text and ...
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
errorManipArg< error, int > exit(error &err, const int errNo=1)
fvPatchField< vector > fvPatchVectorField
constexpr char nl
The newline '\n' character (0x0a).