41 const label cellIndex,
46 const label pointOffset,
50 static const cellModel* hexModelPtr_ =
nullptr;
57 const cellModel& hex = *hexModelPtr_;
60 if (faceLabels.size() != 4)
63 <<
"Trying to create a quad with " << faceLabels.size() <<
" faces" 72 const label curFaceLabel = faceLabels[facei];
74 const face& curFace = faces[curFaceLabel];
76 if (curFace.size() != 2)
79 <<
"face " << curFaceLabel
80 <<
"does not have 2 vertices. Number of vertices: " << curFace
84 if (owner[curFaceLabel] == cellIndex)
86 localFaces[facei] = curFace;
88 else if (neighbour[curFaceLabel] == cellIndex)
93 localFaces[facei].setSize(curFace.size());
97 localFaces[facei][curFace.size() - i - 1] =
104 <<
"face " << curFaceLabel
105 <<
" does not belong to cell " << cellIndex
106 <<
". Face owner: " << owner[curFaceLabel] <<
" neighbour: " 107 << neighbour[curFaceLabel]
118 localFaces[0][0] != localFaces[1][1]
119 && localFaces[0][1] != localFaces[1][0]
126 missingPlaneFace[0] = localFaces[0][0];
127 missingPlaneFace[1] = localFaces[1][1];
128 missingPlaneFace[2] = localFaces[1][0];
129 missingPlaneFace[3] = localFaces[0][1];
131 frontAndBackFaces[2*cellIndex] = face(missingPlaneFace);
134 missingPlaneFace[0] = localFaces[0][0] + pointOffset;
135 missingPlaneFace[1] = localFaces[0][1] + pointOffset;
136 missingPlaneFace[2] = localFaces[1][0] + pointOffset;
137 missingPlaneFace[3] = localFaces[1][1] + pointOffset;
139 frontAndBackFaces[2*cellIndex + 1] = face(missingPlaneFace);
144 cellShapeLabels[0] = localFaces[0][0];
145 cellShapeLabels[1] = localFaces[0][1];
146 cellShapeLabels[2] = localFaces[1][0];
147 cellShapeLabels[3] = localFaces[1][1];
149 cellShapeLabels[4] = localFaces[0][0] + pointOffset;
150 cellShapeLabels[5] = localFaces[0][1] + pointOffset;
151 cellShapeLabels[6] = localFaces[1][0] + pointOffset;
152 cellShapeLabels[7] = localFaces[1][1] + pointOffset;
155 return cellShape(hex, cellShapeLabels);
159 localFaces[0][0] != localFaces[2][1]
160 && localFaces[0][1] != localFaces[2][0]
167 missingPlaneFace[0] = localFaces[0][0];
168 missingPlaneFace[1] = localFaces[2][1];
169 missingPlaneFace[2] = localFaces[2][0];
170 missingPlaneFace[3] = localFaces[0][1];
172 frontAndBackFaces[2*cellIndex] = face(missingPlaneFace);
175 missingPlaneFace[0] = localFaces[0][0] + pointOffset;
176 missingPlaneFace[1] = localFaces[0][1] + pointOffset;
177 missingPlaneFace[2] = localFaces[2][0] + pointOffset;
178 missingPlaneFace[3] = localFaces[2][1] + pointOffset;
180 frontAndBackFaces[2*cellIndex + 1] = face(missingPlaneFace);
185 cellShapeLabels[0] = localFaces[0][0];
186 cellShapeLabels[1] = localFaces[0][1];
187 cellShapeLabels[2] = localFaces[2][0];
188 cellShapeLabels[3] = localFaces[2][1];
190 cellShapeLabels[4] = localFaces[0][0] + pointOffset;
191 cellShapeLabels[5] = localFaces[0][1] + pointOffset;
192 cellShapeLabels[6] = localFaces[2][0] + pointOffset;
193 cellShapeLabels[7] = localFaces[2][1] + pointOffset;
196 return cellShape(hex, cellShapeLabels);
200 localFaces[0][0] != localFaces[3][1]
201 && localFaces[0][1] != localFaces[3][0]
208 missingPlaneFace[0] = localFaces[0][0];
209 missingPlaneFace[1] = localFaces[3][1];
210 missingPlaneFace[2] = localFaces[3][0];
211 missingPlaneFace[3] = localFaces[0][1];
213 frontAndBackFaces[2*cellIndex] = face(missingPlaneFace);
216 missingPlaneFace[0] = localFaces[0][0] + pointOffset;
217 missingPlaneFace[1] = localFaces[0][1] + pointOffset;
218 missingPlaneFace[2] = localFaces[3][0] + pointOffset;
219 missingPlaneFace[3] = localFaces[3][1] + pointOffset;
221 frontAndBackFaces[2*cellIndex + 1] = face(missingPlaneFace);
226 cellShapeLabels[0] = localFaces[0][0];
227 cellShapeLabels[1] = localFaces[0][1];
228 cellShapeLabels[2] = localFaces[3][0];
229 cellShapeLabels[3] = localFaces[3][1];
231 cellShapeLabels[4] = localFaces[0][0] + pointOffset;
232 cellShapeLabels[5] = localFaces[0][1] + pointOffset;
233 cellShapeLabels[6] = localFaces[3][0] + pointOffset;
234 cellShapeLabels[7] = localFaces[3][1] + pointOffset;
237 return cellShape(hex, cellShapeLabels);
242 <<
"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 extrudedQuadCellShape(const label cellIndex, const labelList &faceLabels, const faceList &faces, const labelList &owner, const labelList &neighbour, const label pointOffset, faceList &frontAndBackFaces)