34template<
class FaceList,
class Po
intField>
36Foam::PrimitivePatch<FaceList, PointField>::calcMeshData()
const
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.push_back(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>
120Foam::PrimitivePatch<FaceList, PointField>::calcMeshPointMap()
const
124 if (meshPointMapPtr_)
128 <<
"meshPointMapPtr_ already allocated"
129 <<
abort(FatalError);
134 meshPointMapPtr_.reset(
new Map<label>(
invertToMap(meshPts)));
140template<
class FaceList,
class Po
intField>
142Foam::PrimitivePatch<FaceList, PointField>::calcLocalPoints()
const
150 <<
"localPointsPtr_ already allocated"
151 <<
abort(FatalError);
156 localPointsPtr_.reset(
new Field<point_type>(meshPts.size()));
157 auto& locPts = *localPointsPtr_;
161 locPts[pointi] = points_[meshPts[pointi]];
168template<
class FaceList,
class Po
intField>
170Foam::PrimitivePatch<FaceList, PointField>::calcPointNormals()
const
174 if (pointNormalsPtr_)
178 <<
"pointNormalsPtr_ already allocated"
179 <<
abort(FatalError);
182 const auto& faceUnitNormals = faceNormals();
186 pointNormalsPtr_.reset(
new Field<point_type>(meshPoints().size(), Zero));
187 auto&
n = *pointNormalsPtr_;
191 point_type& curNormal =
n[pointi];
195 for (
const label facei : curFaces)
197 curNormal += faceUnitNormals[facei];
200 curNormal.normalise();
207template<
class FaceList,
class Po
intField>
209Foam::PrimitivePatch<FaceList, PointField>::calcFaceCentres()
const
217 <<
"faceCentresPtr_ already allocated"
218 <<
abort(FatalError);
221 faceCentresPtr_.reset(
new Field<point_type>(this->size()));
222 auto&
c = *faceCentresPtr_;
226 c[facei] = this->operator[](facei).centre(points_);
233template<
class FaceList,
class Po
intField>
235Foam::PrimitivePatch<FaceList, PointField>::calcMagFaceAreas()
const
239 if (magFaceAreasPtr_)
243 <<
"magFaceAreasPtr_ already allocated"
244 <<
abort(FatalError);
247 magFaceAreasPtr_.reset(
new Field<scalar>(this->size()));
248 auto& a = *magFaceAreasPtr_;
252 a[facei] = this->operator[](facei).mag(points_);
259template<
class FaceList,
class Po
intField>
261Foam::PrimitivePatch<FaceList, PointField>::calcFaceAreas()
const
269 <<
"faceAreasPtr_ already allocated"
270 <<
abort(FatalError);
273 faceAreasPtr_.reset(
new Field<point_type>(this->size()));
274 auto&
n = *faceAreasPtr_;
278 n[facei] = this->operator[](facei).areaNormal(points_);
285template<
class FaceList,
class Po
intField>
287Foam::PrimitivePatch<FaceList, PointField>::calcFaceNormals()
const
295 <<
"faceNormalsPtr_ already allocated"
296 <<
abort(FatalError);
299 faceNormalsPtr_.reset(
new Field<point_type>(this->size()));
300 auto&
n = *faceNormalsPtr_;
304 n[facei] = this->operator[](facei).unitNormal(points_);
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
#define DebugInfo
Report an information message using Foam::Info.
#define DebugInFunction
Report an information message using Foam::Info.
const dimensionedScalar c
Speed of light in a vacuum.
List< labelList > labelListList
List of labelList.
Map< label > invertToMap(const labelUList &values)
Create inverse mapping, which is a lookup table into the given list.
List< label > labelList
A List of labels.
Ostream & endl(Ostream &os)
Add newline and flush stream.
errorManip< error > abort(error &err)
#define forAll(list, i)
Loop across all elements in list.