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);
94 const tensor beta = betaZones[j];
96 AU[celli] += rho*(alpha + beta*
mag(U[celli]));
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();
201 scalar rhoRef = coeffs_.lookup<scalar>(
"rhoRef");
203 apply(Udiag, Usource, V, U, rhoRef);
205 force = Udiag*U - Usource;
222 coeffs_.lookup(
"rhoRef") >>
rho;
225 apply(Udiag, Usource, V, U, rho);
240 coeffs_.lookup(
"rhoRef") >>
rho;
fixedCoeff(const word &name, const word &modelType, const fvMesh &mesh, const dictionary &dict, const word &cellZoneName)
Abstract base class for coordinate rotation.
#define forAll(list, i)
Loop across all elements in list.
virtual Ostream & write(const char)=0
Write character.
FvWallInfoData< WallInfo, label > label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
defineTypeNameAndDebug(powerLawLopesdaCosta, 0)
Ostream & indent(Ostream &os)
Indent stream.
A list of keyword definitions, which are a keyword followed by any number of values (e...
addToRunTimeSelectionTable(porosityModel, powerLawLopesdaCosta, mesh)
const GeometricField< Type, fvPatchField, volMesh > & psi() const
void size(const label)
Override size to be inconsistent with allocated storage.
volScalarField alpha(IOobject("alpha", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
Ostream & endl(Ostream &os)
Add newline and flush stream.
virtual ~fixedCoeff()
Destructor.
const dimensionSet dimless
Macros for easy insertion into run-time selection tables.
const dimensionSet dimLength
const dimensionSet dimTime
static const Identity< scalar > I
A class for handling words, derived from string.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
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)
const dimensionSet dimForce
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Field< tensor > tensorField
Specialisation of Field<T> for tensor.
virtual void correct(fvVectorMatrix &UEqn) const
Add resistance.
#define R(A, B, C, D, E, F, K, M)
Mesh data needed to do the Finite Volume discretisation.
A List with indirect addressing.
bool writeData(Ostream &os) const
Write.
A special matrix type and solver, designed for finite volume solutions of scalar equations.
virtual void calcForce(const volVectorField &U, const volScalarField &rho, const volScalarField &mu, vectorField &force) const
Calculate the porosity force.
virtual tensor transformTensor(const tensor &st) const =0
Transform tensor using transformation tensorField.
dimensioned< scalar > mag(const dimensioned< Type > &)
Field< vector > vectorField
Specialisation of Field<T> for vector.
Tensor< scalar > tensor
Tensor of scalars.
Top level model for porosity models.
const dimensionSet & dimensions() const