46 void Foam::Lagrangian::diskInjection::readCoeffs(
const dictionary& modelDict)
53 mesh().time().userUnits(),
64 mesh().time().userUnits(),
70 const bool haveDiemeter = modelDict.found(
"diameter");
71 const bool haveInnerDiemeter = modelDict.found(
"innerDiameter");
72 const bool haveOuterDiemeter = modelDict.found(
"outerDiameter");
74 if (haveDiemeter == (haveInnerDiemeter || haveOuterDiemeter))
77 <<
"keywords diameter and innerDiameter/outerDiameter are both "
78 << (haveDiemeter ?
"" :
"un") <<
"defined in "
79 <<
"dictionary " << modelDict.name()
83 if (haveInnerDiemeter != haveOuterDiemeter)
86 <<
"keywords innerDiameter and outerDiameter are not both defined "
87 <<
"in dictionary " << modelDict.name()
94 outerDiameter_ = modelDict.lookup<scalar>(
"diameter",
dimLength);
98 innerDiameter_ = modelDict.lookup<scalar>(
"innerDiameter",
dimLength);
99 outerDiameter_ = modelDict.lookup<scalar>(
"outerDiameter",
dimLength);
132 numberRate_(nullptr),
133 numberDeferred_(stateDict.lookupOrDefault<scalar>(
"numberDeferred", 0)),
134 rndGen_(
"rndGen", stateDict,
name, true),
137 readCoeffs(modelDict);
145 if (!rFracPtr_.valid())
148 <<
"Radius fraction requested outside of the injection"
158 if (!axisPtr_.valid())
161 <<
"Axis requested outside of the injection"
171 if (!radialPtr_.valid())
174 <<
"Axis requested outside of the injection"
192 rndGen_.start(timeIndex_ == db().time().
timeIndex());
193 timeIndex_ = db().time().timeIndex();
197 const scalar number = numberRate_->integral(t0, t1) + numberDeferred_;
198 const label numberInt = floor(number);
199 numberDeferred_ = number - numberInt;
206 const pointField centre(centre_->value(t0 + fraction*(t1 - t0)));
207 axisPtr_.set(
normalised(axis_->value(t0 + fraction*(t1 - t0))).ptr());
213 rFracPtr_.set(rndGen_.scalar01(numberInt).ptr());
218 (1 - rFrac())*
sqr(innerDiameter_/2)
219 + rFrac()*
sqr(outerDiameter_/2)
228 radialPtr_.set((
cos(phi)*radial1 +
sin(phi)*radial2).ptr());
231 const pointField positions(centre + r*radial());
235 labelField celli(number, -1), facei(number), faceTrii(number);
248 checkLocation(locations, positions);
251 filter(
coordinates, celli, facei, faceTrii, fraction);
271 return injectionMesh;
279 readCoeffs(modelDict);
293 writeEntry(os,
"numberDeferred", numberDeferred_);
Macros for easy insertion into run-time selection tables.
static autoPtr< Function1< Type > > New(const word &name, const Function1s::unitConversions &units, const dictionary &dict)
Select from dictionary.
Base class for Lagrangian injections. Minimal wrapper over LagrangianSource. Implements some utility ...
Class containing Lagrangian geometry and topology.
const Time & time() const
Return time.
static const word fractionName
Name of the tracked fraction field.
Base class for Lagrangian models.
virtual bool read(const dictionary &modelDict)
Read dictionary.
const LagrangianMesh & mesh() const
The mesh.
Mesh that relates to a sub-section of a Lagrangian mesh. This is used to construct fields that relate...
virtual void writeState(Ostream &os) const
Write state.
LagrangianSubMesh modify(LagrangianMesh &mesh, const LagrangianSubMesh &) const
Create new elements in the Lagrangian mesh.
diskInjection(const word &name, const LagrangianMesh &mesh, const dictionary &modelDict, const dictionary &stateDict)
Construct from components.
const scalarField & rFrac() const
Access the cached radius fractions. Only valid during injection.
const vectorField & radial() const
Access the cached radial vectors. Only valid during injection.
virtual bool read(const dictionary &modelDict)
Read dictionary.
const vectorField & axis() const
Access the cached axes. Only valid during injection.
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
dimensionedScalar deltaT() const
Return time step.
const unitConversion & userUnits() const
Return the user-time unit conversion.
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
const Type & value() const
Return const reference to value.
const Time & time() const
Return the top-level database.
void clear()
Remove all regIOobject owned by the registry.
bool writeState(const bool write) const
Write state.
A class for handling words, derived from string.
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
addToRunTimeSelectionTable(LagrangianModel, constantCoefficientVirtualMass, dictionary)
defineTypeNameAndDebug(constantCoefficientVirtualMass, 0)
const scalar twoPi(2 *pi)
barycentric coordinates(const polyMesh &mesh, const point &position, const label celli, const label facei, const label faceTrii, const scalar stepFraction)
Return the coordinates given the position and tet topology.
errorManipArg< error, int > exit(error &err, const int errNo=1)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
const dimensionSet dimRate
const dimensionSet dimless
dimensionedScalar sin(const dimensionedScalar &ds)
const dimensionSet dimLength
void writeEntry(Ostream &os, const HashTable< T, Key, Hash > &ht)
dimensionSet normalised(const dimensionSet &)
void sqr(LagrangianPatchField< typename outerProduct< Type, Type >::type > &f, const LagrangianPatchField< Type > &f1)
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
dimensionSet perpendicular(const dimensionSet &)
void sqrt(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)
dimensionedScalar cos(const dimensionedScalar &ds)