48void Foam::block::createPoints()
81 for (label
k=0;
k<=nk;
k++)
83 for (label j=0; j<=nj; j++)
85 for (label i=0; i<=ni; i++)
95 scalar wx1 = (1 -
w0)*(1 -
w4)*(1 -
w8) +
w0*(1 -
w5)*(1 -
w9);
100 const scalar
sum(wx1 + wx2 + wx3 + wx4);
108 scalar wy1 = (1 -
w4)*(1 -
w0)*(1 -
w8) +
w4*(1 -
w1)*(1 -
w11);
113 const scalar
sum(wy1 + wy2 + wy3 + wy4);
121 scalar wz1 = (1 -
w8)*(1 -
w0)*(1 -
w4) +
w8*(1 -
w3)*(1 -
w7);
126 const scalar
sum(wz1 + wz2 + wz3 + wz4);
134 const vector edgex1 = p000 + (p100 - p000)*
w0;
135 const vector edgex2 = p010 + (p110 - p010)*
w1;
136 const vector edgex3 = p011 + (p111 - p011)*
w2;
137 const vector edgex4 = p001 + (p101 - p001)*
w3;
139 const vector edgey1 = p000 + (p010 - p000)*
w4;
140 const vector edgey2 = p100 + (p110 - p100)*
w5;
141 const vector edgey3 = p101 + (p111 - p101)*
w6;
142 const vector edgey4 = p001 + (p011 - p001)*
w7;
144 const vector edgez1 = p000 + (p001 - p000)*
w8;
145 const vector edgez2 = p100 + (p101 - p100)*
w9;
146 const vector edgez3 = p110 + (p111 - p110)*
w10;
147 const vector edgez4 = p010 + (p011 - p010)*
w11;
154 sumVector += wx1*edgex1;
155 sumVector += wx2*edgex2;
156 sumVector += wx3*edgex3;
157 sumVector += wx4*edgex4;
159 sumVector += wy1*edgey1;
160 sumVector += wy2*edgey2;
161 sumVector += wy3*edgey3;
162 sumVector += wy4*edgey4;
164 sumVector += wz1*edgez1;
165 sumVector += wz2*edgez2;
166 sumVector += wz3*edgez3;
167 sumVector += wz4*edgez4;
174 sumVector += wx1*(
p[0][i] - edgex1);
175 sumVector += wx2*(
p[1][i] - edgex2);
176 sumVector += wx3*(
p[2][i] - edgex3);
177 sumVector += wx4*(
p[3][i] - edgex4);
179 sumVector += wy1*(
p[4][j] - edgey1);
180 sumVector += wy2*(
p[5][j] - edgey2);
181 sumVector += wy3*(
p[6][j] - edgey3);
182 sumVector += wy4*(
p[7][j] - edgey4);
184 sumVector += wz1*(
p[8][
k] - edgez1);
185 sumVector += wz2*(
p[9][
k] - edgez2);
186 sumVector += wz3*(
p[10][
k] - edgez3);
187 sumVector += wz4*(
p[11][
k] - edgez4);
190 points_[vijk] = sumVector;
202 for (label ii=0; ii<=ni; ii++)
205 const label i = (ii + 1)%(ni + 1);
207 for (label j=0; j<=nj; j++)
209 for (label
k=0;
k<=nk;
k++)
218 (1 -
w0)*(1 -
w4)*(1 -
w8)
232 const scalar sumWf = wf0 + wf1;
254 for (label jj=0; jj<=nj; jj++)
257 const label j = (jj + 1)%(nj + 1);
259 for (label i=0; i<=ni; i++)
261 for (label
k=0;
k<=nk;
k++)
270 (1 -
w4)*(1 -
w1)*(1 -
w8)
284 const scalar sumWf = wf2 + wf3;
306 for (label kk=0; kk<=nk; kk++)
309 const label
k = (kk + 1)%(nk + 1);
311 for (label i=0; i<=ni; i++)
313 for (label j=0; j<=nj; j++)
322 (1 -
w8)*(1 -
w0)*(1 -
w4)
337 const scalar
sum(wf4 + wf5);
361void Foam::block::createCells()
363 const label ni = density().x();
364 const label nj = density().y();
365 const label nk = density().z();
367 blockCells_.resize(nCells());
371 for (label
k=0;
k<nk; ++
k)
373 for (label j=0; j<nj; ++j)
375 for (label i=0; i<ni; ++i)
377 blockCells_[celli] = vertLabels(i, j,
k);
385template<
class OutputIterator>
386OutputIterator Foam::block::addBoundaryFaces
392 const label ni = density().x();
393 const label nj = density().y();
394 const label nk = density().z();
401 for (label
k=0;
k<nk; ++
k)
403 for (label j=0; j<nj; ++j)
409 f[0] = pointLabel(0, j,
k);
410 f[1] = pointLabel(0, j,
k+1);
411 f[2] = pointLabel(0, j+1,
k+1);
412 f[3] = pointLabel(0, j+1,
k);
421 for (label
k=0;
k<nk; ++
k)
423 for (label j=0; j<nj; ++j)
429 f[0] = pointLabel(ni, j,
k);
430 f[1] = pointLabel(ni, j+1,
k);
431 f[2] = pointLabel(ni, j+1,
k+1);
432 f[3] = pointLabel(ni, j,
k+1);
441 for (label i=0; i<ni; ++i)
443 for (label
k=0;
k<nk; ++
k)
449 f[0] = pointLabel(i, 0,
k);
450 f[1] = pointLabel(i+1, 0,
k);
451 f[2] = pointLabel(i+1, 0,
k+1);
452 f[3] = pointLabel(i, 0,
k+1);
461 for (label i=0; i<ni; ++i)
463 for (label
k=0;
k<nk; ++
k)
469 f[0] = pointLabel(i, nj,
k);
470 f[1] = pointLabel(i, nj,
k+1);
471 f[2] = pointLabel(i+1, nj,
k+1);
472 f[3] = pointLabel(i+1, nj,
k);
481 for (label i=0; i<ni; ++i)
483 for (label j=0; j<nj; ++j)
489 f[0] = pointLabel(i, j, 0);
490 f[1] = pointLabel(i, j+1, 0);
491 f[2] = pointLabel(i+1, j+1, 0);
492 f[3] = pointLabel(i+1, j, 0);
501 for (label i=0; i<ni; ++i)
503 for (label j=0; j<nj; ++j)
509 f[0] = pointLabel(i, j, nk);
510 f[1] = pointLabel(i+1, j, nk);
511 f[2] = pointLabel(i+1, j+1, nk);
512 f[3] = pointLabel(i, j+1, nk);
523void Foam::block::createBoundary()
525 const label countx = (density().y() * density().z());
526 const label county = (density().z() * density().x());
527 const label countz = (density().x() * density().y());
532 blockPatches_[patchi].resize(countx);
533 addBoundaryFaces(patchi, blockPatches_[patchi].begin());
537 blockPatches_[patchi].resize(countx);
538 addBoundaryFaces(patchi, blockPatches_[patchi].begin());
542 blockPatches_[patchi].resize(county);
543 addBoundaryFaces(patchi, blockPatches_[patchi].begin());
547 blockPatches_[patchi].resize(county);
548 addBoundaryFaces(patchi, blockPatches_[patchi].begin());
552 blockPatches_[patchi].resize(countz);
553 addBoundaryFaces(patchi, blockPatches_[patchi].begin());
557 blockPatches_[patchi].resize(countz);
558 addBoundaryFaces(patchi, blockPatches_[patchi].begin());
567 const label ni = density().x();
568 const label nj = density().y();
569 const label nk = density().z();
575 for (label
k=0;
k<nk; ++
k)
577 for (label j=0; j<nj; ++j)
579 for (label i=0; i<ni; ++i)
581 theCells[celli] = vertLabels(i, j,
k).shape();
void resize(const label len)
Adjust allocated size of list.
const Cmpt & x() const noexcept
Access to the vector x component.
const Cmpt & z() const noexcept
Access to the vector z component.
const Cmpt & y() const noexcept
Access to the vector y component.
label nCurvedFaces() const noexcept
Number of curved faces in this block.
bool flatFaceOrEdge(const label i, const label j, const label k) const
Return true if point i,j,k addresses a block flat face or edge.
const point & blockPoint(const label i) const
Return block point for local label i.
bool vertex(const label i, const label j, const label k) const
True if point i,j,k addresses a block vertex.
int edgesPointsWeights(pointField(&edgesPoints)[12], scalarList(&edgesWeights)[12]) const
Calculate the points and weights for all edges.
label facePointLabel(const direction facei, const label i, const label j) const
Face vertex label offset for a particular i,j,k position on hex face (0-5).
const labelVector & density() const noexcept
The mesh density (number of cells) in the i,j,k directions.
void correctFacePoints(FixedList< pointField, 6 > &) const
Correct the location of the given face-points.
FixedList< pointField, 6 > facePoints(const pointField &points) const
Return the list of face-points for all of the faces of the block.
cellShapeList shapes() const
The (hex) cell shapes for filling the block.
A Vector of values with double precision.
label pointLabel(const label i, const label j, const label k) const
The linear point index for an i-j-k position.
label nCells() const
The number of mesh cells (nx*ny*nz) in the i-j-k mesh.
label nPoints() const
The number of mesh points (nx+1)*(ny+1)*(nz+1) in the i-j-k mesh.
hexCell vertLabels(const label i, const label j, const label k) const
The hex cell vertices for an i-j-k position.
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
vector point
Point is a vector.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &f1, const label comm)
static constexpr const zero Zero
Global zero (0).
vectorField pointField
pointField is a vectorField.
List< scalar > scalarList
List of scalar.
List< cellShape > cellShapeList
List of cellShape.