Go to the documentation of this file.
37 namespace incompressible
47 const labelList& ibc = ibPatch().ibCells();
49 if (ibcValues.size() != ibc.
size())
53 "void immersedBoundaryVelocityWallFunctionFvPatchVectorField::"
56 " const vectorField& ibcValues\n"
58 ) <<
"Size of ibcValues field not equal to the number of IB cells."
59 <<
nl <<
"ibcValues: " << ibcValues.size()
60 <<
" ibc: " << ibc.
size()
67 immersedBoundaryFvPatchVectorField::setIbCellValues(ibcValues);
69 if (wallTangentialValue_.empty() || wallMask_.empty())
71 immersedBoundaryFvPatchVectorField::setIbCellValues(ibcValues);
91 const vector curU = psiI[ibc[cellI]];
93 scalar ibcNormal = curN & ibcValues[cellI];
97 ibcTangential /=
mag(ibcTangential) + SMALL;
101 psiI[ibc[cellI]] = curN*ibcNormal
102 + ibcTangential*wallTangentialValue_[cellI]
107 psiI[ibc[cellI]] = ibcValues[cellI];
123 immersedBoundaryFvPatchVectorField(
p, iF),
124 wallTangentialValue_(),
138 immersedBoundaryFvPatchVectorField(
p, iF,
dict),
139 wallTangentialValue_(),
154 immersedBoundaryFvPatchVectorField(ptf,
p, iF, mapper),
155 wallTangentialValue_(),
167 immersedBoundaryFvPatchVectorField(ewfpsf),
168 wallTangentialValue_(),
181 immersedBoundaryFvPatchVectorField(ewfpsf, iF),
182 wallTangentialValue_(),
197 "const vectorField& "
198 "immersedBoundaryVelocityWallFunctionFvPatchVectorField::"
199 "wallShearStress() const"
200 ) <<
"tauWall not set for IB patch " << patch().name()
214 immersedBoundaryFvPatchVectorField::ibPatch();
223 this->ibPatch().ibCells().size(),
238 immersedBoundaryFvPatchVectorField::ibPatch();
247 this->ibPatch().ibCells().size(),
262 immersedBoundaryFvPatchVectorField::ibPatch();
271 this->ibPatch().ibCells().size(),
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
boolList & wallMask() const
Access to indicator on fixed values. Note non-const access.
bool movingIb() const
Is the immersed boundary patch moving?
#define forAll(list, i)
Loop across all elements in list.
bool moving() const
Is mesh moving.
Boundary condition for velocity when using wall functions.
rDeltaT dimensionedInternalField()
vectorField tauWall_
Wall shear stress.
dimensioned< scalar > mag(const dimensioned< Type > &)
const fvMesh & mesh() const
Return the mesh reference.
virtual void setIbCellValues(const vectorField &) const
Set IB cell values: contains data manipulation.
const fvBoundaryMesh & boundaryMesh() const
Return boundaryMesh reference.
scalarField & wallTangentialValue() const
Access to tangential velocity value to fix in IB cell.
Pre-declare SubField and related Field type.
Immersed boundary FV patch.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
makePatchTypeField(fvPatchScalarField, immersedBoundaryEpsilonWallFunctionFvPatchScalarField)
static const sphericalTensor I(1)
A list of keyword definitions, which are a keyword followed by any number of values (e....
Macros for easy insertion into run-time selection tables.
errorManip< error > abort(error &err)
scalarField wallTangentialValue_
Tangential velocity value to fix in IB cell.
immersedBoundaryVelocityWallFunctionFvPatchVectorField(const fvPatch &, const DimensionedField< vector, volMesh > &)
Construct from patch and internal field.
conserve internalField()+
const vectorField & wallShearStress() const
Return wall shear stress.
void setSize(const label)
Reset size of List.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
boolList wallMask_
Indicator on values to fix.
#define FatalErrorIn(functionName)
Report an error message using Foam::FatalError.
Foam::fvPatchFieldMapper.
void size(const label)
Override size to be inconsistent with allocated storage.
vectorField & tauWall() const
Access to wall shear stress in IB cell.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...