34 template<
class>
class FaceList,
39 const PrimitivePatch<Face, FaceList, PointField>& extrudePatch,
40 const extrudeModel& model
43 const pointField& surfacePoints = extrudePatch.localPoints();
44 const vectorField& surfaceNormals = extrudePatch.pointNormals();
46 const label nLayers = model.nLayers();
48 pointField ePoints((nLayers + 1)*surfacePoints.size());
50 for (
label layer=0; layer<=nLayers; layer++)
52 label offset = layer*surfacePoints.size();
56 ePoints[offset + i] = model
70 template<
class Face,
template<
class>
class FaceList,
class PointField>
73 const PrimitivePatch<Face, FaceList, PointField>& extrudePatch,
74 const extrudeModel& model
77 const pointField& surfacePoints = extrudePatch.localPoints();
78 const List<face>& surfaceFaces = extrudePatch.localFaces();
79 const edgeList& surfaceEdges = extrudePatch.edges();
80 const label nInternalEdges = extrudePatch.nInternalEdges();
82 const label nLayers = model.nLayers();
85 (nLayers + 1)*surfaceFaces.size() + nLayers*surfaceEdges.size();
93 for (
label layer=0; layer<nLayers; layer++)
95 label currentLayerOffset = layer*surfacePoints.size();
96 label nextLayerOffset = currentLayerOffset + surfacePoints.size();
101 const edge& e = surfaceEdges[edgeI];
102 const labelList& edgeFaces = extrudePatch.edgeFaces()[edgeI];
104 face& f = eFaces[facei++];
109 (edgeFaces[0] < edgeFaces[1])
110 == sameOrder(surfaceFaces[edgeFaces[0]], e)
113 f[0] = e[0] + currentLayerOffset;
114 f[1] = e[1] + currentLayerOffset;
115 f[2] = e[1] + nextLayerOffset;
116 f[3] = e[0] + nextLayerOffset;
120 f[0] = e[1] + currentLayerOffset;
121 f[1] = e[0] + currentLayerOffset;
122 f[2] = e[0] + nextLayerOffset;
123 f[3] = e[1] + nextLayerOffset;
128 if (layer < nLayers-1)
143 for (
label layer=0; layer<nLayers; layer++)
145 label currentLayerOffset = layer*surfacePoints.size();
146 label nextLayerOffset = currentLayerOffset + surfacePoints.size();
149 for (
label edgeI=nInternalEdges; edgeI<surfaceEdges.size(); edgeI++)
151 const edge& e = surfaceEdges[edgeI];
152 const labelList& edgeFaces = extrudePatch.edgeFaces()[edgeI];
154 face& f = eFaces[facei++];
157 if (sameOrder(surfaceFaces[edgeFaces[0]], e))
159 f[0] = e[0] + currentLayerOffset;
160 f[1] = e[1] + currentLayerOffset;
161 f[2] = e[1] + nextLayerOffset;
162 f[3] = e[0] + nextLayerOffset;
166 f[0] = e[1] + currentLayerOffset;
167 f[1] = e[0] + currentLayerOffset;
168 f[2] = e[0] + nextLayerOffset;
169 f[3] = e[1] + nextLayerOffset;
177 eFaces[facei++] = face(surfaceFaces[i]).reverseFace();
187 + nLayers*surfacePoints.size()
196 template<
class Face,
template<
class>
class FaceList,
class PointField>
199 const PrimitivePatch<Face, FaceList, PointField>& extrudePatch,
200 const extrudeModel& model
203 const List<face>& surfaceFaces = extrudePatch.localFaces();
204 const edgeList& surfaceEdges = extrudePatch.edges();
205 const label nInternalEdges = extrudePatch.nInternalEdges();
207 const label nLayers = model.nLayers();
209 cellList eCells(nLayers*surfaceFaces.size());
214 const face& f = surfaceFaces[i];
216 for (
label layer=0; layer<nLayers; layer++)
218 eCells[i + layer*surfaceFaces.size()].setSize(f.size() + 2);
228 for (
label layer=0; layer<nLayers; layer++)
234 const labelList& edgeFaces = extrudePatch.edgeFaces()[i];
237 label cell0 = layer*surfaceFaces.size() + edgeFaces[0];
238 label cell1 = layer*surfaceFaces.size() + edgeFaces[1];
240 eCells[cell0][nCellFaces[cell0]++] = facei;
241 eCells[cell1][nCellFaces[cell1]++] = facei;
247 if (layer < nLayers-1)
251 label cell0 = layer*surfaceFaces.size() + i;
252 label cell1 = (layer+1)*surfaceFaces.size() + i;
254 eCells[cell0][nCellFaces[cell0]++] = facei;
255 eCells[cell1][nCellFaces[cell1]++] = facei;
263 for (
label layer=0; layer<nLayers; layer++)
266 for (
label i=nInternalEdges; i<surfaceEdges.size(); i++)
269 const labelList& edgeFaces = extrudePatch.edgeFaces()[i];
272 label cell0 = layer*surfaceFaces.size() + edgeFaces[0];
274 eCells[cell0][nCellFaces[cell0]++] = facei;
283 eCells[i][nCellFaces[i]++] = facei;
291 label cell0 = (nLayers-1)*surfaceFaces.size() + i;
293 eCells[cell0][nCellFaces[cell0]++] = facei;
308 template<
class>
class FaceList,
311 Foam::extrudedMesh::extrudedMesh
314 const PrimitivePatch<Face, FaceList, PointField>& extrudePatch,
315 const extrudeModel& model
321 extrudedPoints(extrudePatch, model),
322 extrudedFaces(extrudePatch, model),
323 extrudedCells(extrudePatch, model)
333 *(extrudePatch.nEdges() - extrudePatch.nInternalEdges());
342 wallPolyPatch::typeName
357 facei += extrudePatch.size();
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
A simple container for copying or transferring objects of type <T>.
#define forAll(list, i)
Loop across all elements in list.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
label nInternalFaces() const
IOobject(const word &name, const fileName &instance, const objectRegistry ®istry, readOption r=NO_READ, writeOption w=NO_WRITE, bool registerObject=true)
Construct from name, instance, registry, io options.
vectorField pointField
pointField is a vectorField.
Xfer< T > xferMove(T &)
Construct by transferring the contents of the arg.
List< label > labelList
A List of labels.
void addPatches(const List< polyPatch *> &, const bool validBoundary=true)
Add boundary patches.
void setSize(const label)
Reset size of List.
Field< vector > vectorField
Specialisation of Field<T> for vector.
label nInternalEdges() const
Internal edges using 0,1 or 2 boundary points.
List< cell > cellList
list of cells
polyMesh(const IOobject &io)
Construct from IOobject.