34 bool Foam::extrudedMesh::sameOrder(
const face&
f,
const edge&
e)
38 label nextI = (i == f.size()-1 ? 0 : i+1);
40 return f[nextI] == e[1];
47 template<
class>
class FaceList,
52 const PrimitivePatch<Face, FaceList, PointField>& extrudePatch,
53 const extrudeModel& model
56 const pointField& surfacePoints = extrudePatch.localPoints();
57 const vectorField& surfaceNormals = extrudePatch.pointNormals();
59 const label nLayers = model.nLayers();
61 pointField ePoints((nLayers + 1)*surfacePoints.size());
63 for (label layer=0; layer<=nLayers; layer++)
65 label offset = layer*surfacePoints.
size();
69 ePoints[offset + i] = model
83 template<
class Face,
template<
class>
class FaceList,
class PointField>
86 const PrimitivePatch<Face, FaceList, PointField>& extrudePatch,
87 const extrudeModel& model
90 const pointField& surfacePoints = extrudePatch.localPoints();
91 const List<face>& surfaceFaces = extrudePatch.localFaces();
92 const edgeList& surfaceEdges = extrudePatch.edges();
93 const label nInternalEdges = extrudePatch.nInternalEdges();
95 const label nLayers = model.nLayers();
98 (nLayers + 1)*surfaceFaces.
size() + nLayers*surfaceEdges.size();
106 for (label layer=0; layer<nLayers; layer++)
108 label currentLayerOffset = layer*surfacePoints.size();
109 label nextLayerOffset = currentLayerOffset + surfacePoints.size();
112 for (label edgeI=0; edgeI<nInternalEdges; edgeI++)
114 const edge& e = surfaceEdges[edgeI];
115 const labelList& edgeFaces = extrudePatch.edgeFaces()[edgeI];
117 face& f = eFaces[facei++];
122 (edgeFaces[0] < edgeFaces[1])
123 == sameOrder(surfaceFaces[edgeFaces[0]], e)
126 f[0] = e[0] + currentLayerOffset;
127 f[1] = e[1] + currentLayerOffset;
128 f[2] = e[1] + nextLayerOffset;
129 f[3] = e[0] + nextLayerOffset;
133 f[0] = e[1] + currentLayerOffset;
134 f[1] = e[0] + currentLayerOffset;
135 f[2] = e[0] + nextLayerOffset;
136 f[3] = e[1] + nextLayerOffset;
141 if (layer < nLayers-1)
156 for (label layer=0; layer<nLayers; layer++)
158 label currentLayerOffset = layer*surfacePoints.size();
159 label nextLayerOffset = currentLayerOffset + surfacePoints.size();
162 for (label edgeI=nInternalEdges; edgeI<surfaceEdges.size(); edgeI++)
164 const edge& e = surfaceEdges[edgeI];
165 const labelList& edgeFaces = extrudePatch.edgeFaces()[edgeI];
167 face& f = eFaces[facei++];
170 if (sameOrder(surfaceFaces[edgeFaces[0]], e))
172 f[0] = e[0] + currentLayerOffset;
173 f[1] = e[1] + currentLayerOffset;
174 f[2] = e[1] + nextLayerOffset;
175 f[3] = e[0] + nextLayerOffset;
179 f[0] = e[1] + currentLayerOffset;
180 f[1] = e[0] + currentLayerOffset;
181 f[2] = e[0] + nextLayerOffset;
182 f[3] = e[1] + nextLayerOffset;
190 eFaces[facei++] = face(surfaceFaces[i]).reverseFace();
200 + nLayers*surfacePoints.size()
209 template<
class Face,
template<
class>
class FaceList,
class PointField>
212 const PrimitivePatch<Face, FaceList, PointField>& extrudePatch,
213 const extrudeModel& model
216 const List<face>& surfaceFaces = extrudePatch.localFaces();
217 const edgeList& surfaceEdges = extrudePatch.edges();
218 const label nInternalEdges = extrudePatch.nInternalEdges();
220 const label nLayers = model.nLayers();
222 cellList eCells(nLayers*surfaceFaces.size());
227 const face& f = surfaceFaces[i];
229 for (label layer=0; layer<nLayers; layer++)
231 eCells[i + layer*surfaceFaces.size()].setSize(f.size() + 2);
241 for (label layer=0; layer<nLayers; layer++)
244 for (label i=0; i<nInternalEdges; i++)
247 const labelList& edgeFaces = extrudePatch.edgeFaces()[i];
250 label cell0 = layer*surfaceFaces.
size() + edgeFaces[0];
251 label cell1 = layer*surfaceFaces.size() + edgeFaces[1];
253 eCells[cell0][nCellFaces[cell0]++] = facei;
254 eCells[cell1][nCellFaces[cell1]++] = facei;
260 if (layer < nLayers-1)
264 label cell0 = layer*surfaceFaces.size() + i;
265 label cell1 = (layer+1)*surfaceFaces.size() + i;
267 eCells[cell0][nCellFaces[cell0]++] = facei;
268 eCells[cell1][nCellFaces[cell1]++] = facei;
276 for (label layer=0; layer<nLayers; layer++)
279 for (label i=nInternalEdges; i<surfaceEdges.size(); i++)
282 const labelList& edgeFaces = extrudePatch.edgeFaces()[i];
285 label cell0 = layer*surfaceFaces.
size() + edgeFaces[0];
287 eCells[cell0][nCellFaces[cell0]++] = facei;
296 eCells[i][nCellFaces[i]++] = facei;
304 label cell0 = (nLayers-1)*surfaceFaces.size() + i;
306 eCells[cell0][nCellFaces[cell0]++] = facei;
321 template<
class>
class FaceList,
324 Foam::extrudedMesh::extrudedMesh
327 const PrimitivePatch<Face, FaceList, PointField>& extrudePatch,
328 const extrudeModel& model
334 extrudedPoints(extrudePatch, model),
335 extrudedFaces(extrudePatch, model),
336 extrudedCells(extrudePatch, model)
342 label facei = nInternalFaces();
346 *(extrudePatch.nEdges() - extrudePatch.nInternalEdges());
368 facei += extrudePatch.size();