34 namespace porosityModels
44 void Foam::porosityModels::fixedCoeff::apply
53 forAll(cellZoneIDs_, zoneI)
62 const label celli = cells[i];
63 const label j = fieldIndex(i);
64 const tensor Cd = rho*(alphaZones[j] + betaZones[j]*
mag(U[celli]));
65 const scalar isoCd =
tr(Cd);
67 Udiag[celli] += V[celli]*isoCd;
68 Usource[celli] -= V[celli]*((Cd -
I*isoCd) & U[celli]);
74 void Foam::porosityModels::fixedCoeff::apply
82 forAll(cellZoneIDs_, zoneI)
91 const label celli = cells[i];
92 const label j = fieldIndex(i);
96 AU[celli] += rho*(alpha + beta*
mag(U[celli]));
104 Foam::porosityModels::fixedCoeff::fixedCoeff
107 const word& modelType,
110 const word& cellZoneName
116 alpha_(cellZoneIDs_.size()),
117 beta_(cellZoneIDs_.size())
119 adjustNegativeResistance(alphaXYZ_);
120 adjustNegativeResistance(betaXYZ_);
122 calcTransformModelData();
136 if (coordSys_.R().uniform())
138 forAll(cellZoneIDs_, zoneI)
140 alpha_[zoneI].setSize(1);
141 beta_[zoneI].setSize(1);
143 alpha_[zoneI][0] =
Zero;
144 alpha_[zoneI][0].xx() = alphaXYZ_.value().x();
145 alpha_[zoneI][0].yy() = alphaXYZ_.value().y();
146 alpha_[zoneI][0].zz() = alphaXYZ_.value().z();
147 alpha_[zoneI][0] = coordSys_.R().transformTensor(alpha_[zoneI][0]);
149 beta_[zoneI][0] =
Zero;
150 beta_[zoneI][0].xx() = betaXYZ_.value().x();
151 beta_[zoneI][0].yy() = betaXYZ_.value().y();
152 beta_[zoneI][0].zz() = betaXYZ_.value().z();
153 beta_[zoneI][0] = coordSys_.R().transformTensor(beta_[zoneI][0]);
158 forAll(cellZoneIDs_, zoneI)
162 alpha_[zoneI].setSize(cells.
size());
163 beta_[zoneI].setSize(cells.
size());
167 alpha_[zoneI][i] =
Zero;
168 alpha_[zoneI][i].xx() = alphaXYZ_.value().x();
169 alpha_[zoneI][i].yy() = alphaXYZ_.value().y();
170 alpha_[zoneI][i].zz() = alphaXYZ_.value().z();
172 beta_[zoneI][i] =
Zero;
173 beta_[zoneI][i].xx() = betaXYZ_.value().x();
174 beta_[zoneI][i].yy() = betaXYZ_.value().y();
175 beta_[zoneI][i].zz() = betaXYZ_.value().z();
198 scalar rhoRef =
readScalar(coeffs_.lookup(
"rhoRef"));
200 apply(Udiag, Usource, V, U, rhoRef);
202 force = Udiag*U - Usource;
219 coeffs_.lookup(
"rhoRef") >>
rho;
222 apply(Udiag, Usource, V, U, rho);
241 coeffs_.lookup(
"rhoRef") >>
rho;
244 apply(Udiag, Usource, V, U, rho);
259 coeffs_.lookup(
"rhoRef") >>
rho;
Abstract base class for coordinate rotation.
#define forAll(list, i)
Loop across all elements in list.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & indent(Ostream &os)
Indent stream.
const GeometricField< Type, fvPatchField, volMesh > & psi() const
A list of keyword definitions, which are a keyword followed by any number of values (e...
void size(const label)
Override size to be inconsistent with allocated storage.
Ostream & endl(Ostream &os)
Add newline and flush stream.
virtual ~fixedCoeff()
Destructor.
bool writeData(Ostream &os) const
Write.
Macros for easy insertion into run-time selection tables.
const dimensionSet & dimensions() const
static const Identity< scalar > I
A class for handling words, derived from string.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
addToRunTimeSelectionTable(porosityModel, DarcyForchheimer, mesh)
virtual void calcTransformModelData()
Transform the model data wrt mesh changes.
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.
List< label > labelList
A List of labels.
dimensionedScalar tr(const dimensionedSphericalTensor &dt)
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if succesful.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
const dimensionSet dimForce
virtual void calcForce(const volVectorField &U, const volScalarField &rho, const volScalarField &mu, vectorField &force) const
Calculate the porosity force.
virtual tmp< tensorField > transformTensor(const tensorField &st) const =0
Transform tensor field using transformation tensorField.
Field< tensor > tensorField
Specialisation of Field<T> for tensor.
virtual void correct(fvVectorMatrix &UEqn) const
Add resistance.
const dimensionSet dimless(0, 0, 0, 0, 0, 0, 0)
#define R(A, B, C, D, E, F, K, M)
const dimensionSet dimLength(0, 1, 0, 0, 0, 0, 0)
Mesh data needed to do the Finite Volume discretisation.
defineTypeNameAndDebug(DarcyForchheimer, 0)
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
A special matrix type and solver, designed for finite volume solutions of scalar equations.
dimensionedScalar beta("beta", dimless/dimTemperature, laminarTransport)
dimensioned< scalar > mag(const dimensioned< Type > &)
Field< vector > vectorField
Specialisation of Field<T> for vector.
virtual Ostream & write(const token &)=0
Write next token to stream.
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
Tensor< scalar > tensor
Tensor of scalars.
Top level model for porosity models.