34 template<
class FaceList,
class Po
intField>
37 const PrimitivePatch<FaceList, PointField>& extrudePatch,
38 const extrudeModel& model
41 const pointField& surfacePoints = extrudePatch.localPoints();
42 const vectorField& surfaceNormals = extrudePatch.pointNormals();
44 const label nLayers = model.nLayers();
46 pointField ePoints((nLayers + 1)*surfacePoints.size());
48 for (label layer=0; layer <= nLayers; ++layer)
50 const label offset = layer*surfacePoints.size();
54 ePoints[offset + i] = model
67 template<
class FaceList,
class Po
intField>
70 const PrimitivePatch<FaceList, PointField>& extrudePatch,
71 const extrudeModel& model
74 const pointField& surfacePoints = extrudePatch.localPoints();
75 const List<face>& surfaceFaces = extrudePatch.localFaces();
76 const edgeList& surfaceEdges = extrudePatch.edges();
77 const label nInternalEdges = extrudePatch.nInternalEdges();
79 const label nLayers = model.nLayers();
82 (nLayers + 1)*surfaceFaces.size() + nLayers*surfaceEdges.size();
90 for (label layer=0; layer<nLayers; layer++)
92 label currentLayerOffset = layer*surfacePoints.size();
93 label nextLayerOffset = currentLayerOffset + surfacePoints.size();
96 for (label edgeI=0; edgeI<nInternalEdges; edgeI++)
98 const edge&
e = surfaceEdges[edgeI];
99 const labelList& edgeFaces = extrudePatch.edgeFaces()[edgeI];
101 face&
f = eFaces[facei++];
106 (edgeFaces[0] < edgeFaces[1])
107 == sameOrder(surfaceFaces[edgeFaces[0]],
e)
110 f[0] =
e[0] + currentLayerOffset;
111 f[1] =
e[1] + currentLayerOffset;
112 f[2] =
e[1] + nextLayerOffset;
113 f[3] =
e[0] + nextLayerOffset;
117 f[0] =
e[1] + currentLayerOffset;
118 f[1] =
e[0] + currentLayerOffset;
119 f[2] =
e[0] + nextLayerOffset;
120 f[3] =
e[1] + nextLayerOffset;
125 if (layer < nLayers-1)
140 for (label layer=0; layer<nLayers; layer++)
142 label currentLayerOffset = layer*surfacePoints.size();
143 label nextLayerOffset = currentLayerOffset + surfacePoints.size();
146 for (label edgeI=nInternalEdges; edgeI<surfaceEdges.size(); edgeI++)
148 const edge&
e = surfaceEdges[edgeI];
149 const labelList& edgeFaces = extrudePatch.edgeFaces()[edgeI];
151 face&
f = eFaces[facei++];
154 if (sameOrder(surfaceFaces[edgeFaces[0]],
e))
156 f[0] =
e[0] + currentLayerOffset;
157 f[1] =
e[1] + currentLayerOffset;
158 f[2] =
e[1] + nextLayerOffset;
159 f[3] =
e[0] + nextLayerOffset;
163 f[0] =
e[1] + currentLayerOffset;
164 f[1] =
e[0] + currentLayerOffset;
165 f[2] =
e[0] + nextLayerOffset;
166 f[3] =
e[1] + nextLayerOffset;
174 eFaces[facei++] = face(surfaceFaces[i]).reverseFace();
184 + nLayers*surfacePoints.size()
193 template<
class FaceList,
class Po
intField>
196 const PrimitivePatch<FaceList, PointField>& extrudePatch,
197 const extrudeModel& model
200 const List<face>& surfaceFaces = extrudePatch.localFaces();
201 const edgeList& surfaceEdges = extrudePatch.edges();
202 const label nInternalEdges = extrudePatch.nInternalEdges();
204 const label nLayers = model.nLayers();
206 cellList eCells(nLayers*surfaceFaces.size());
211 const face&
f = surfaceFaces[i];
213 for (label layer=0; layer<nLayers; layer++)
215 eCells[i + layer*surfaceFaces.size()].
setSize(
f.size() + 2);
225 for (label layer=0; layer<nLayers; layer++)
228 for (label i=0; i<nInternalEdges; i++)
231 const labelList& edgeFaces = extrudePatch.edgeFaces()[i];
234 label cell0 = layer*surfaceFaces.size() + edgeFaces[0];
235 label cell1 = layer*surfaceFaces.size() + edgeFaces[1];
237 eCells[cell0][nCellFaces[cell0]++] = facei;
238 eCells[cell1][nCellFaces[cell1]++] = facei;
244 if (layer < nLayers-1)
248 label cell0 = layer*surfaceFaces.size() + i;
249 label cell1 = (layer+1)*surfaceFaces.size() + i;
251 eCells[cell0][nCellFaces[cell0]++] = facei;
252 eCells[cell1][nCellFaces[cell1]++] = facei;
260 for (label layer=0; layer<nLayers; layer++)
263 for (label i=nInternalEdges; i<surfaceEdges.size(); i++)
266 const labelList& edgeFaces = extrudePatch.edgeFaces()[i];
269 label cell0 = layer*surfaceFaces.size() + edgeFaces[0];
271 eCells[cell0][nCellFaces[cell0]++] = facei;
280 eCells[i][nCellFaces[i]++] = facei;
288 label cell0 = (nLayers-1)*surfaceFaces.size() + i;
290 eCells[cell0][nCellFaces[cell0]++] = facei;
301 template<
class FaceList,
class Po
intField>
302 Foam::extrudedMesh::extrudedMesh
305 const PrimitivePatch<FaceList, PointField>& extrudePatch,
306 const extrudeModel& model
312 extrudedPoints(extrudePatch, model),
313 extrudedFaces(extrudePatch, model),
314 extrudedCells(extrudePatch, model)
324 *(extrudePatch.nEdges() - extrudePatch.nInternalEdges());
333 wallPolyPatch::typeName
348 facei += extrudePatch.size();