34template<
class FaceList,
class Po
intField>
40 if (meshPointsPtr_ || localFacesPtr_)
44 <<
"meshPointsPtr_ or localFacesPtr_ already allocated"
50 Map<label> markedPoints(4*this->size());
86 DynamicList<label> meshPoints(2*this->size());
87 for (
const face_type&
f : *
this)
89 for (
const label pointi :
f)
91 if (markedPoints.insert(pointi, meshPoints.size()))
93 meshPoints.append(pointi);
98 meshPointsPtr_.reset(
new labelList(meshPoints,
true));
103 localFacesPtr_.reset(
new List<face_type>(*
this));
104 auto& locFaces = *localFacesPtr_;
106 for (face_type&
f : locFaces)
108 for (label& pointi :
f)
110 pointi = *(markedPoints.cfind(pointi));
118template<
class FaceList,
class Po
intField>
124 if (meshPointMapPtr_)
128 <<
"meshPointMapPtr_ already allocated"
129 <<
abort(FatalError);
134 meshPointMapPtr_.reset(
new Map<label>(2*
mp.size()));
135 auto& mpMap = *meshPointMapPtr_;
139 mpMap.insert(mp[i], i);
146template<
class FaceList,
class Po
intField>
156 <<
"localPointsPtr_ already allocated"
157 <<
abort(FatalError);
162 localPointsPtr_.reset(
new Field<point_type>(meshPts.size()));
163 auto& locPts = *localPointsPtr_;
167 locPts[pointi] = points_[meshPts[pointi]];
174template<
class FaceList,
class Po
intField>
180 if (pointNormalsPtr_)
184 <<
"pointNormalsPtr_ already allocated"
185 <<
abort(FatalError);
192 pointNormalsPtr_.reset(
new Field<point_type>(meshPoints().size(), Zero));
193 auto&
n = *pointNormalsPtr_;
197 point_type& curNormal =
n[pointi];
201 for (
const label facei : curFaces)
203 curNormal += faceUnitNormals[facei];
206 curNormal.normalise();
213template<
class FaceList,
class Po
intField>
223 <<
"faceCentresPtr_ already allocated"
224 <<
abort(FatalError);
227 faceCentresPtr_.reset(
new Field<point_type>(this->size()));
228 auto&
c = *faceCentresPtr_;
232 c[facei] = this->operator[](facei).centre(points_);
239template<
class FaceList,
class Po
intField>
245 if (magFaceAreasPtr_)
249 <<
"magFaceAreasPtr_ already allocated"
250 <<
abort(FatalError);
253 magFaceAreasPtr_.reset(
new Field<scalar>(this->size()));
254 auto& a = *magFaceAreasPtr_;
258 a[facei] = this->operator[](facei).mag(points_);
265template<
class FaceList,
class Po
intField>
275 <<
"faceAreasPtr_ already allocated"
276 <<
abort(FatalError);
279 faceAreasPtr_.reset(
new Field<point_type>(this->size()));
280 auto&
n = *faceAreasPtr_;
284 n[facei] = this->operator[](facei).areaNormal(points_);
291template<
class FaceList,
class Po
intField>
301 <<
"faceNormalsPtr_ already allocated"
302 <<
abort(FatalError);
305 faceNormalsPtr_.reset(
new Field<point_type>(this->size()));
306 auto&
n = *faceNormalsPtr_;
310 n[facei] = this->operator[](facei).unitNormal(points_);
A list of faces which address into the list of points.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
surfaceVectorField faceNormals(mesh.Sf()/mesh.magSf())
#define DebugInfo
Report an information message using Foam::Info.
#define DebugInFunction
Report an information message using Foam::Info.
const dimensionedScalar mp
Proton mass.
const dimensionedScalar c
Speed of light in a vacuum.
List< label > labelList
A List of labels.
Ostream & endl(Ostream &os)
Add newline and flush stream.
List< labelList > labelListList
A List of labelList.
errorManip< error > abort(error &err)
#define forAll(list, i)
Loop across all elements in list.