54 #ifndef Foam_PrimitivePatch_H 55 #define Foam_PrimitivePatch_H 73 template<
class T>
class Map;
79 template<
class FaceList,
class Po
intField>
91 std::remove_reference<FaceList>::type::value_type
face_type;
95 std::remove_reference<PointField>::type::value_type
point_type;
131 mutable std::unique_ptr<edgeList> edgesPtr_;
134 mutable label nInternalEdges_;
137 mutable std::unique_ptr<labelList> boundaryPointsPtr_;
140 mutable std::unique_ptr<labelListList> faceFacesPtr_;
143 mutable std::unique_ptr<labelListList> edgeFacesPtr_;
146 mutable std::unique_ptr<labelListList> faceEdgesPtr_;
149 mutable std::unique_ptr<labelListList> pointEdgesPtr_;
152 mutable std::unique_ptr<labelListList> pointFacesPtr_;
155 mutable std::unique_ptr<List<face_type>> localFacesPtr_;
158 mutable std::unique_ptr<labelList> meshPointsPtr_;
162 mutable std::unique_ptr<Map<label>> meshPointMapPtr_;
165 mutable std::unique_ptr<labelListList> edgeLoopsPtr_;
168 mutable std::unique_ptr<Field<point_type>> localPointsPtr_;
171 mutable std::unique_ptr<labelList> localPointOrderPtr_;
174 mutable std::unique_ptr<Field<point_type>> faceCentresPtr_;
177 mutable std::unique_ptr<Field<point_type>> faceAreasPtr_;
180 mutable std::unique_ptr<Field<scalar>> magFaceAreasPtr_;
183 mutable std::unique_ptr<Field<point_type>> faceNormalsPtr_;
186 mutable std::unique_ptr<Field<point_type>> pointNormalsPtr_;
192 void calcInternPoints()
const;
195 void calcBdryPoints()
const;
198 void calcAddressing()
const;
201 void calcPointEdges()
const;
204 void calcPointFaces()
const;
207 void calcMeshData()
const;
210 void calcMeshPointMap()
const;
213 void calcEdgeLoops()
const;
216 void calcLocalPoints()
const;
219 void calcLocalPointOrder()
const;
222 void calcFaceCentres()
const;
225 void calcFaceAreas()
const;
228 void calcMagFaceAreas()
const;
231 void calcFaceNormals()
const;
234 void calcPointNormals()
const;
239 void visitPointRegion
243 const label startFacei,
244 const label startEdgeI,
256 const FaceList& faces,
308 return FaceList::size();
468 scalar
sphere(
const label facei)
const;
473 bool hasFaceAreas()
const {
return bool(faceAreasPtr_); }
483 bool hasEdges()
const {
return bool(edgesPtr_); }
484 bool hasFaceFaces()
const {
return bool(faceFacesPtr_); }
485 bool hasEdgeFaces()
const {
return bool(edgeFacesPtr_); }
486 bool hasFaceEdges()
const {
return bool(faceEdgesPtr_); }
498 template<
class ToPatch>
501 const ToPatch& targetPatch,
502 const Field<point_type>& projectionDirection,
508 template<
class ToPatch>
511 const ToPatch& targetPatch,
512 const Field<point_type>& projectionDirection,
537 const bool report =
false,
549 const bool report =
false,
557 virtual void movePoints(
const Field<point_type>&);
563 void operator=(
const PrimitivePatch<FaceList, PointField>& rhs);
566 void operator=(PrimitivePatch<FaceList, PointField>&& rhs);
const labelListList & pointEdges() const
Return point-edge addressing.
const Field< point_type > & faceAreas() const
Return face area vectors for patch.
std::remove_reference< PointField >::type::value_type point_type
The point type.
List< labelList > labelListList
A List of labelList.
label nPoints() const
Number of points supporting patch faces.
const List< face_type > & localFaces() const
Return patch faces addressing into local point list.
void size(const label n)
Older name for setAddressableSize.
List< objectHit > projectFaceCentres(const ToPatch &targetPatch, const Field< point_type > &projectionDirection, const intersection::algorithm=intersection::FULL_RAY, const intersection::direction=intersection::VECTOR) const
Project vertices of patch onto another patch.
surfaceTopo
Enumeration defining the surface type. Used in check routines.
bool hasMeshPointMap() const
const Field< point_type > & localPoints() const
Return pointField of points in patch.
bool hasPointFaces() const
List< objectHit > projectPoints(const ToPatch &targetPatch, const Field< point_type > &projectionDirection, const intersection::algorithm=intersection::FULL_RAY, const intersection::direction=intersection::VECTOR) const
Project vertices of patch onto another patch.
bool hasFaceAreas() const
const labelList & boundaryPoints() const
Return list of boundary points, address into LOCAL point list.
label nInternalEdges() const
Number of internal edges.
SubList< edge > subList
Declare type of subList.
bool checkPointManifold(const bool report=false, labelHashSet *setPtr=nullptr) const
Checks primitivePatch for faces sharing point but not edge.
Smooth ATC in cells next to a set of patches supplied by type.
const Field< scalar > & magFaceAreas() const
Return face area magnitudes for patch.
void clearPatchMeshAddr()
bool isInternalEdge(const label edgei) const
Is internal edge?
std::remove_reference< FaceList >::type::value_type face_type
The face type.
face_type FaceType
Deprecated(2020-03) prefer face_type typedef.
label whichEdge(const edge &e) const
Identical to findEdge.
const labelListList & edgeLoops() const
Return list of closed loops of boundary vertices.
const edgeList::subList boundaryEdges() const
Return sub-list of boundary edges, address into LOCAL point list.
const labelList & meshPoints() const
Return labelList of mesh points in patch.
const labelList & localPointOrder() const
Return orders the local points for most efficient search.
void operator=(const PrimitivePatch< FaceList, PointField > &rhs)
Copy assign faces. Leave points alone (could be a reference).
bool checkTopology(const bool report=false, labelHashSet *setPtr=nullptr) const
Check surface formed by patch for manifoldness (see above).
HashSet< label, Hash< label > > labelHashSet
A HashSet of labels, uses label hasher.
virtual void movePoints(const Field< point_type > &)
Correct patch after moving points.
const Field< point_type > & faceNormals() const
Return face unit normals for patch.
bool hasFaceFaces() const
Pair< point_type > box() const
The enclosing (bounding) box for the patch points.
Non-templated base elements for PrimitivePatch.
A list of faces which address into the list of points.
bool hasFaceNormals() const
const labelListList & faceFaces() const
Return face-face addressing.
const Map< label > & meshPointMap() const
Mesh point map.
label findEdge(const edge &e) const
Search for edge (local point labels) and return its index in the edge list or -1 if not found...
const dimensionedScalar e
Elementary charge.
An ordered pair of two objects of type <T> with first() and second() elements.
List< edge > edgeList
A List of edges.
PrimitivePatch(const FaceList &faces, const PointField &points)
Construct from components.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
Generic templated field type.
void swap(PrimitivePatch &)=delete
Suppress direct swapping, since storage containers may be const.
const edgeList::subList internalEdges() const
Return sub-list of internal edges, address into LOCAL point list.
surfaceTopo surfaceType() const
Calculate surface type formed by patch.
const Field< point_type > & faceCentres() const
Return face centres for patch.
const labelListList & edgeFaces() const
Return edge-face addressing.
const edgeList & edges() const
Return list of edges, address into LOCAL point list.
const Field< point_type > & points() const noexcept
Return reference to global points.
label nBoundaryEdges() const
Number of boundary edges == (nEdges() - nInternalEdges())
bool hasBoundaryPoints() const
label whichPoint(const label gp) const
Given a global point index, return the local point index.
const labelListList & pointFaces() const
Return point-face addressing.
label nEdges() const
Number of edges in patch.
bool hasFaceCentres() const
labelList uniqBoundaryFaces() const
Extract sorted list of unique local faces associated with the boundary edges.
const Field< point_type > & pointNormals() const
Return point normals for patch.
bool hasPointEdges() const
Info<< "Finished reading KIVA file"<< endl;cellShapeList cellShapes(nPoints);labelList cellZoning(nPoints, -1);const cellModel &hex=cellModel::ref(cellModel::HEX);labelList hexLabels(8);label activeCells=0;labelList pointMap(nPoints);forAll(pointMap, i){ pointMap[i]=i;}for(label i=0;i< nPoints;i++){ if(f[i] > 0.0) { hexLabels[0]=i;hexLabels[1]=i1tab[i];hexLabels[2]=i3tab[i1tab[i]];hexLabels[3]=i3tab[i];hexLabels[4]=i8tab[i];hexLabels[5]=i1tab[i8tab[i]];hexLabels[6]=i3tab[i1tab[i8tab[i]]];hexLabels[7]=i3tab[i8tab[i]];cellShapes[activeCells].reset(hex, hexLabels);edgeList edges=cellShapes[activeCells].edges();forAll(edges, ei) { if(edges[ei].mag(points)< SMALL) { label start=pointMap[edges[ei].start()];while(start !=pointMap[start]) { start=pointMap[start];} label end=pointMap[edges[ei].end()];while(end !=pointMap[end]) { end=pointMap[end];} label minLabel=min(start, end);pointMap[start]=pointMap[end]=minLabel;} } cellZoning[activeCells]=idreg[i];activeCells++;}}cellShapes.setSize(activeCells);cellZoning.setSize(activeCells);forAll(cellShapes, celli){ cellShape &cs=cellShapes[celli];forAll(cs, i) { cs[i]=pointMap[cs[i]];} cs.collapse();}label bcIDs[11]={-1, 0, 2, 4, -1, 5, -1, 6, 7, 8, 9};const label nBCs=12;const word *kivaPatchTypes[nBCs]={ &wallPolyPatch::typeName, &wallPolyPatch::typeName, &wallPolyPatch::typeName, &wallPolyPatch::typeName, &symmetryPolyPatch::typeName, &wedgePolyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &symmetryPolyPatch::typeName, &oldCyclicPolyPatch::typeName};enum patchTypeNames{ PISTON, VALVE, LINER, CYLINDERHEAD, AXIS, WEDGE, INFLOW, OUTFLOW, PRESIN, PRESOUT, SYMMETRYPLANE, CYCLIC};const char *kivaPatchNames[nBCs]={ "piston", "valve", "liner", "cylinderHead", "axis", "wedge", "inflow", "outflow", "presin", "presout", "symmetryPlane", "cyclic"};List< SLList< face > > pFaces[nBCs]
FaceList FaceListType
The face list type.
labelList boundaryFaces() const
Extract list of local faces corresponding to the boundary edges.
virtual ~PrimitivePatch()
Destructor.
bool hasPointNormals() const
labelList meshEdges(const edgeList &allEdges, const labelListList &cellEdges, const labelList &faceCells) const
Return labels of patch edges in the global edge list using cell addressing.
edge meshEdge(const label edgei) const
From patch edge to global edge using meshPoints.
scalar sphere(const label facei) const
The enclosing (bounding) sphere radius^2 for specified face.
bool hasEdgeFaces() const
const labelListList & faceEdges() const
Return face-edge addressing.
List< label > labelList
A List of labels.
bool hasMeshPoints() const
label nFaces() const noexcept
Number of faces in the patch.
PointField PointFieldType
The point field type.
bool hasFaceEdges() const