38 namespace regionModels
46 void Foam::regionModels::singleLayerRegion::constructMeshObjects()
90 void Foam::regionModels::singleLayerRegion::initialise()
94 Pout<<
"singleLayerRegion::initialise()" <<
endl;
97 label nBoundaryFaces = 0;
98 const polyBoundaryMesh& rbm = regionMesh().boundaryMesh();
101 forAll(intCoupledPatchIDs_, i)
103 const label patchi = intCoupledPatchIDs_[i];
104 const polyPatch&
pp = rbm[patchi];
107 nBoundaryFaces += fCells.size();
109 UIndirectList<vector>(nHat, fCells) =
pp.faceNormals();
110 UIndirectList<scalar>(magSf, fCells) =
mag(
pp.faceAreas());
112 nHat.correctBoundaryConditions();
113 magSf.correctBoundaryConditions();
115 if (nBoundaryFaces != regionMesh().nCells())
118 <<
"Number of primary region coupled boundary faces not equal to " 119 <<
"the number of cells in the local region" <<
nl <<
nl 120 <<
"Number of cells = " << regionMesh().nCells() <<
nl 121 <<
"Boundary faces = " << nBoundaryFaces <<
nl 126 passivePatchIDs_.
setSize(intCoupledPatchIDs_.size(), -1);
127 forAll(intCoupledPatchIDs_, i)
129 const label patchi = intCoupledPatchIDs_[i];
130 const polyPatch& ppIntCoupled = rbm[patchi];
131 if (ppIntCoupled.size() > 0)
133 label
cellId = rbm[patchi].faceCells()[0];
134 const cell& cFaces = regionMesh().cells()[
cellId];
136 label facei = ppIntCoupled.start();
137 label faceO = cFaces.opposingFaceLabel(facei, regionMesh().faces());
139 label passivePatchi = rbm.whichPatch(faceO);
140 passivePatchIDs_[i] = passivePatchi;
141 const polyPatch& ppPassive = rbm[passivePatchi];
142 UIndirectList<scalar>(passiveMagSf, ppPassive.faceCells()) =
143 mag(ppPassive.faceAreas());
149 magSf.field() = 0.5*(magSf + passiveMagSf);
150 magSf.correctBoundaryConditions();
164 Foam::regionModels::singleLayerRegion::singleLayerRegion
167 const word& regionType
177 Foam::regionModels::singleLayerRegion::singleLayerRegion
180 const word& regionType,
181 const word& modelName,
192 constructMeshObjects();
216 <<
"Region patch normal vectors not available" 229 <<
"Region patch areas not available" 240 return passivePatchIDs_;
static const word & zeroGradientType() noexcept
The type name for zeroGradient patch fields.
virtual ~singleLayerRegion()
Destructor.
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...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
virtual const labelList & passivePatchIDs() const
Return the list of patch IDs opposite to internally.
constexpr char nl
The newline '\n' character (0x0a)
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Ignore writing from objectRegistry::writeObject()
const dimensionSet dimless
Dimensionless.
GeometricField< vector, fvPatchField, volMesh > volVectorField
UList< label > labelUList
A UList of labels.
#define forAll(list, i)
Loop across all elements in list.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
void readFields(const typename GeoFieldType::Mesh &mesh, const IOobjectList &objects, const NameMatchPredicate &selectedFields, DynamicList< regIOobject *> &storedObjects)
Read the selected GeometricFields of the templated type and store on the objectRegistry.
A class for handling words, derived from Foam::string.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
virtual bool read()
Read control parameters from dictionary.
Reading is optional [identical to LAZY_READ].
virtual const volVectorField & nHat() const
Return the patch normal vectors.
const fvMesh & regionMesh() const
Return the region mesh database.
errorManip< error > abort(error &err)
static word timeName(const scalar t, const int precision=precision_)
Return a time name for the given scalar time value formatted with the given precision.
Switch active_
Active flag.
int debug
Static debugging option.
autoPtr< volScalarField > magSfPtr_
Face area magnitudes / [m2].
virtual const volScalarField & magSf() const
Return the face area magnitudes / [m2].
decomposeUsingBbs false
Use bounding boxes (default) or unique decomposition of triangles (i.e. do not duplicate triangles) ...
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
const Time & time_
Reference to the time database.
Mesh data needed to do the Finite Volume discretisation.
autoPtr< volVectorField > nHatPtr_
Patch normal vectors.
Base class for region models.
static void listReduce(UList< T > &values, BinaryOp bop, const int tag=UPstream::msgType(), const int communicator=UPstream::worldComm)
Reduce list elements (list must be equal size on all ranks), applying bop to each list element...
defineTypeNameAndDebug(KirchhoffShell, 0)
void setSize(label n)
Alias for resize()
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
Do not request registration (bool: false)
const dimensionSet dimArea(sqr(dimLength))
uindirectPrimitivePatch pp(UIndirectList< face >(mesh.faces(), faceLabels), mesh.points())
virtual bool read()
Read control parameters from dictionary.
static constexpr const zero Zero
Global zero (0)