47 multiphaseMangrovesSource,
63 typeName +
":dragCoeff",
76 const scalar a =
aZone_[i];
82 for (label zonei : zones)
86 for (label celli : cz)
108 typeName +
":inertiaCoeff",
109 mesh_.time().timeName(),
117 auto& inertiaCoeff = tinertiaCoeff.ref();
123 const scalar a = aZone_[i];
124 const scalar
N = NZone_[i];
125 const scalar Cm = CmZone_[i];
129 for (label zonei : zones)
131 const cellZone& cz = mesh_.cellZones()[zonei];
133 for (label celli : cz)
135 inertiaCoeff[celli] = 0.25*(Cm+1)*
pi*a*a*
N;
140 inertiaCoeff.correctBoundaryConditions();
142 return tinertiaCoeff;
148 Foam::fv::multiphaseMangrovesSource::multiphaseMangrovesSource
151 const word& modelType,
211 if (!coeffs_.readIfPresent(
"UNames", fieldNames_))
213 fieldNames_.resize(1);
214 fieldNames_.first() = coeffs_.getOrDefault<
word>(
"U",
"U");
219 const dictionary& regionsDict(coeffs_.subDict(
"regions"));
232 const word zoneName(modelDict.
get<
word>(
"cellZone"));
234 zoneIDs_[i] = mesh_.cellZones().indices(zoneName);
235 if (zoneIDs_[i].empty())
238 <<
"Unable to find cellZone " << zoneName <<
nl 239 <<
"Valid cellZones are:" << mesh_.cellZones().names()
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...
defineTypeNameAndDebug(atmAmbientTurbSource, 0)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
const fvMesh & mesh_
Reference to the mesh database.
constexpr char nl
The newline '\n' character (0x0a)
scalarList CdZone_
Drag coefficient.
Ignore writing from objectRegistry::writeObject()
const dimensionSet dimless
Dimensionless.
T get(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T. FatalIOError if not found, or if the number of tokens is incorrect.
const Time & time() const
Return the top-level database.
const dictionary & subDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a sub-dictionary.
Macros for easy insertion into run-time selection tables.
#define forAll(list, i)
Loop across all elements in list.
bool readEntry(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX, IOobjectOption::readOption readOpt=IOobjectOption::MUST_READ) const
Find entry and assign to T val. FatalIOError if it is found and the number of tokens is incorrect...
Foam::word regionName(Foam::polyMesh::defaultRegion)
const GeometricField< Type, fvPatchField, volMesh > & psi(const label i=0) const
Return psi.
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
A class for handling words, derived from Foam::string.
tmp< fvMatrix< Type > > ddt(const GeometricField< Type, fvPatchField, volMesh > &vf)
Calculate the matrix for the first temporal derivative.
static tmp< T > New(Args &&... args)
Construct tmp with forwarding arguments.
virtual bool read(const dictionary &dict)
Read source dictionary.
scalarList NZone_
Number of plants per unit of area.
constexpr scalar pi(M_PI)
A special matrix type and solver, designed for finite volume solutions of scalar equations. Face addressing is used to make all matrix assembly and solution loops vectorise.
tmp< volScalarField > dragCoeff(const volVectorField &U) const
Return the drag force coefficient.
labelListList zoneIDs_
Porosity coefficient.
zeroField Sp(const Foam::zero, const GeometricField< Type, fvPatchField, volMesh > &)
A no-op source.
addToRunTimeSelectionTable(option, atmAmbientTurbSource, dictionary)
scalarList aZone_
Width of the vegetation element.
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
static word timeName(const scalar t, const int precision=precision_)
Return time name of given scalar time formatted with the given precision.
virtual bool read(const dictionary &dict)
Read dictionary.
const Vector< label > N(dict.get< Vector< label >>("N"))
virtual void addSup(fvMatrix< vector > &eqn, const label fieldi)
Add implicit contribution to momentum equation.
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
Mesh data needed to do the Finite Volume discretisation.
void resetApplied()
Resize/reset applied flag list for all fieldNames_ entries.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
A special matrix type and solver, designed for finite volume solutions of scalar equations.
const cellZoneMesh & cellZones() const noexcept
Return cell zone mesh.
A class for managing temporary objects.
Defines the attributes of an object for which implicit objectRegistry management is supported...
tmp< volScalarField > inertiaCoeff() const
Return the inertia force coefficient.
Calculate the finiteVolume matrix for implicit and explicit sources.
Base abstract class for handling finite volume options (i.e. fvOption).
static constexpr const zero Zero
Global zero (0)