42 const label cellIndex,
47 const label pointOffset,
51 static const cellModel* prismModelPtr_ =
nullptr;
58 const cellModel& prism = *prismModelPtr_;
61 if (faceLabels.size() != 3)
64 <<
"Trying to create a triangle with " << faceLabels.size()
74 const label curFaceLabel = faceLabels[facei];
76 const face& curFace = faces[curFaceLabel];
78 if (curFace.size() != 2)
81 <<
"face " << curFaceLabel
82 <<
"does not have 2 vertices. Number of vertices: " << curFace
86 if (owner[curFaceLabel] == cellIndex)
88 localFaces[facei] = curFace;
90 else if (neighbour[curFaceLabel] == cellIndex)
95 localFaces[facei].setSize(curFace.size());
99 localFaces[facei][curFace.size() - i - 1] =
106 <<
"face " << curFaceLabel
107 <<
" does not belong to cell " << cellIndex
108 <<
". Face owner: " << owner[curFaceLabel] <<
" neighbour: " 109 << neighbour[curFaceLabel]
115 if (localFaces[0][1] == localFaces[1][0])
121 missingPlaneFace[0] = localFaces[0][0];
122 missingPlaneFace[1] = localFaces[1][1];
123 missingPlaneFace[2] = localFaces[0][1];
125 frontAndBackFaces[2*cellIndex] = face(missingPlaneFace);
128 missingPlaneFace[0] = localFaces[0][0] + pointOffset;
129 missingPlaneFace[1] = localFaces[0][1] + pointOffset;
130 missingPlaneFace[2] = localFaces[1][1] + pointOffset;
132 frontAndBackFaces[2*cellIndex + 1] = face(missingPlaneFace);
137 cellShapeLabels[0] = localFaces[0][0];
138 cellShapeLabels[1] = localFaces[0][1];
139 cellShapeLabels[2] = localFaces[1][1];
141 cellShapeLabels[3] = localFaces[0][0] + pointOffset;
142 cellShapeLabels[4] = localFaces[0][1] + pointOffset;
143 cellShapeLabels[5] = localFaces[1][1] + pointOffset;
145 return cellShape(prism, cellShapeLabels);
147 else if (localFaces[0][1] == localFaces[2][0])
153 missingPlaneFace[0] = localFaces[0][0];
154 missingPlaneFace[1] = localFaces[2][1];
155 missingPlaneFace[2] = localFaces[0][1];
157 frontAndBackFaces[2*cellIndex] = face(missingPlaneFace);
160 missingPlaneFace[0] = localFaces[0][0] + pointOffset;
161 missingPlaneFace[1] = localFaces[0][1] + pointOffset;
162 missingPlaneFace[2] = localFaces[2][1] + pointOffset;
164 frontAndBackFaces[2*cellIndex + 1] = face(missingPlaneFace);
169 cellShapeLabels[0] = localFaces[0][0];
170 cellShapeLabels[1] = localFaces[0][1];
171 cellShapeLabels[2] = localFaces[2][1];
173 cellShapeLabels[3] = localFaces[0][0] + pointOffset;
174 cellShapeLabels[4] = localFaces[0][1] + pointOffset;
175 cellShapeLabels[5] = localFaces[2][1] + pointOffset;
177 return cellShape(prism, cellShapeLabels);
182 <<
"Problem with edge matching. Edges: " << localFaces
List< labelList > labelListList
A List of labelList.
#define forAll(list, i)
Loop across all elements in list.
FvWallInfoData< WallInfo, label > label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
static const cellModel * lookup(const word &)
Look up a model by name and return a pointer to the model or nullptr.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
#define forAllReverse(list, i)
Reverse loop across all elements in list.
List< label > labelList
A List of labels.
errorManip< error > abort(error &err)
cellShape extrudedTriangleCellShape(const label cellIndex, const labelList &faceLabels, const faceList &faces, const labelList &owner, const labelList &neighbour, const label pointOffset, faceList &frontAndBackFaces)