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 calcTranformModelData();
136 if (coordSys_.R().uniform())
138 forAll (cellZoneIDs_, zoneI)
140 alpha_[zoneI].setSize(1);
141 beta_[zoneI].setSize(1);
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]);
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());
168 alpha_[zoneI][i].
xx() = alphaXYZ_.value().x();
169 alpha_[zoneI][i].yy() = alphaXYZ_.value().y();
170 alpha_[zoneI][i].zz() = alphaXYZ_.value().z();
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;
const dimensionSet dimForce
Mesh data needed to do the Finite Volume discretisation.
const dimensionSet & dimensions() const
dimensioned< scalar > mag(const dimensioned< Type > &)
Tensor< scalar > tensor
Tensor of scalars.
virtual void calcForce(const volVectorField &U, const volScalarField &rho, const volScalarField &mu, vectorField &force) const
Calculate the porosity force.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
dimensionedScalar beta("beta", dimless/dimTemperature, laminarTransport)
#define R(A, B, C, D, E, F, K, M)
Ostream & indent(Ostream &os)
Indent stream.
static const sphericalTensor I(1)
Top level model for porosity models.
A class for handling words, derived from string.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
void size(const label)
Override size to be inconsistent with allocated storage.
dimensionedScalar tr(const dimensionedSphericalTensor &dt)
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.
A list of keyword definitions, which are a keyword followed by any number of values (e...
const dimensionSet dimLength(0, 1, 0, 0, 0, 0, 0)
virtual tmp< tensorField > transformTensor(const tensorField &st) const =0
Transform tensor field using transformation tensorField.
Field< tensor > tensorField
Specialisation of Field<T> for tensor.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
virtual void calcTranformModelData()
Transform the model data wrt mesh changes.
const GeometricField< Type, fvPatchField, volMesh > & psi() const
Ostream & endl(Ostream &os)
Add newline and flush stream.
Abstract base class for coordinate rotation.
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
virtual void correct(fvVectorMatrix &UEqn) const
Add resistance.
Field< vector > vectorField
Specialisation of Field<T> for vector.
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if succesful.
defineTypeNameAndDebug(DarcyForchheimer, 0)
virtual Ostream & write(const token &)=0
Write next token to stream.
Macros for easy insertion into run-time selection tables.
const cellShapeList & cells
addToRunTimeSelectionTable(porosityModel, DarcyForchheimer, mesh)
List< label > labelList
A List of labels.
virtual ~fixedCoeff()
Destructor.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
const dimensionSet dimless(0, 0, 0, 0, 0, 0, 0)
bool writeData(Ostream &os) const
Write.
A special matrix type and solver, designed for finite volume solutions of scalar equations.