37 return (a + b*(xDim_ + 1) + c*(xDim_ + 1)*(yDim_ + 1));
44 void hexBlock::setHandedness()
48 for (
label k = 0;
k <= zDim_ - 1;
k++)
50 for (
label j = 0; j <= yDim_ - 1; j++)
52 for (
label i = 0; i <= xDim_ - 1; i++)
54 vector x = p[vtxLabel(i+1, j,
k)] - p[vtxLabel(i, j,
k)];
55 vector y = p[vtxLabel(i, j+1,
k)] - p[vtxLabel(i, j,
k)];
56 vector z = p[vtxLabel(i, j,
k+1)] - p[vtxLabel(i, j,
k)];
58 if (
mag(x) > small &&
mag(y) > small &&
mag(z) > small)
60 Info<<
"Looking at cell " 61 << i <<
' ' << j <<
' ' <<
k 62 <<
" to determine orientation." 65 if (((x ^ y) & z) > 0)
67 Info<<
"Right-handed block." <<
endl;
68 blockHandedness_ = right;
73 blockHandedness_ = left;
79 Info<<
"Cannot determine orientation of cell " 80 << i <<
' ' << j <<
' ' <<
k 81 <<
" since has base vectors " << x << y << z <<
endl;
87 if (blockHandedness_ == noPoints)
90 <<
"Cannot determine orientation of block." 91 <<
" Continuing as if right handed." <<
endl;
92 blockHandedness_ = right;
105 blockHandedness_(noPoints),
106 points_((xDim_ + 1)*(yDim_ + 1)*(zDim_ + 1))
114 const bool readBlank,
115 const scalar twoDThickness,
121 label nPoints = points_.size();
123 if (twoDThickness > 0)
128 Info<<
"Reading " << nPoints <<
" x coordinates..." <<
endl;
131 is >> points_[i].x();
134 Info<<
"Reading " << nPoints <<
" y coordinates..." <<
endl;
137 is >> points_[i].y();
140 if (twoDThickness > 0)
142 Info<<
"Extruding " << nPoints <<
" points in z direction..." <<
endl;
146 points_[i+
nPoints] = points_[i];
151 points_[i+
nPoints].z() = twoDThickness;
156 Info<<
"Reading " << nPoints <<
" z coordinates..." <<
endl;
159 is >> points_[i].z();
166 Info<<
"Reading " << nPoints <<
" blanks..." <<
endl;
184 if (blockHandedness_ == right)
186 for (
label k = 0;
k <= zDim_ - 1;
k++)
188 for (
label j = 0; j <= yDim_ - 1; j++)
190 for (
label i = 0; i <= xDim_ - 1; i++)
195 hexLabels[0] = vtxLabel(i, j,
k);
196 hexLabels[1] = vtxLabel(i+1, j,
k);
197 hexLabels[2] = vtxLabel(i+1, j+1,
k);
198 hexLabels[3] = vtxLabel(i, j+1,
k);
199 hexLabels[4] = vtxLabel(i, j,
k+1);
200 hexLabels[5] = vtxLabel(i+1, j,
k+1);
201 hexLabels[6] = vtxLabel(i+1, j+1,
k+1);
202 hexLabels[7] = vtxLabel(i, j+1,
k+1);
209 else if (blockHandedness_ == left)
211 for (
label k = 0;
k <= zDim_ - 1;
k++)
213 for (
label j = 0; j <= yDim_ - 1; j++)
215 for (
label i = 0; i <= xDim_ - 1; i++)
220 hexLabels[0] = vtxLabel(i, j,
k+1);
221 hexLabels[1] = vtxLabel(i+1, j,
k+1);
222 hexLabels[2] = vtxLabel(i+1, j+1,
k+1);
223 hexLabels[3] = vtxLabel(i, j+1,
k+1);
224 hexLabels[4] = vtxLabel(i, j,
k);
225 hexLabels[5] = vtxLabel(i+1, j,
k);
226 hexLabels[6] = vtxLabel(i+1, j+1,
k);
227 hexLabels[7] = vtxLabel(i, j+1,
k);
237 <<
"Unable to determine block handedness as points " 238 <<
"have not been read in yet" 253 if (range.size() != 6)
256 <<
"Invalid size of the range array: " << range.size()
257 <<
". Should be 6 (xMin, xMax, yMin, yMax, zMin, zMax" 261 label xMinRange = range[0];
262 label xMaxRange = range[1];
263 label yMinRange = range[2];
264 label yMaxRange = range[3];
265 label zMinRange = range[4];
266 label zMaxRange = range[5];
278 (yMaxRange - yMinRange + 1)*(zMaxRange - zMinRange + 1)
282 for (
label k = zMinRange - 1;
k <= zMaxRange - 1;
k++)
284 for (
label j = yMinRange - 1; j <= yMaxRange - 1; j++)
286 result[
p].setSize(4);
289 result[
p][0] = vtxLabel(xDim_, j,
k);
290 result[
p][1] = vtxLabel(xDim_, j+1,
k);
291 result[
p][2] = vtxLabel(xDim_, j+1,
k+1);
292 result[
p][3] = vtxLabel(xDim_, j,
k+1);
307 (xMaxRange - xMinRange + 1)*(zMaxRange - zMinRange + 1)
311 for (
label i = xMinRange - 1; i <= xMaxRange - 1; i++)
313 for (
label k = zMinRange - 1;
k <= zMaxRange - 1;
k++)
315 result[
p].setSize(4);
318 result[
p][0] = vtxLabel(i, yDim_,
k);
319 result[
p][1] = vtxLabel(i, yDim_,
k + 1);
320 result[
p][2] = vtxLabel(i + 1, yDim_,
k + 1);
321 result[
p][3] = vtxLabel(i + 1, yDim_,
k);
336 (xMaxRange - xMinRange + 1)*(yMaxRange - yMinRange + 1)
340 for (
label i = xMinRange - 1; i <= xMaxRange - 1; i++)
342 for (
label j = yMinRange - 1; j <= yMaxRange - 1; j++)
344 result[
p].setSize(4);
347 result[
p][0] = vtxLabel(i, j, zDim_);
348 result[
p][1] = vtxLabel(i + 1, j, zDim_);
349 result[
p][2] = vtxLabel(i + 1, j + 1, zDim_);
350 result[
p][3] = vtxLabel(i, j + 1, zDim_);
365 (yMaxRange - yMinRange + 1)*(zMaxRange - zMinRange + 1)
369 for (
label k = zMinRange - 1;
k <= zMaxRange - 1;
k++)
371 for (
label j = yMinRange - 1; j <= yMaxRange - 1; j++)
373 result[
p].setSize(4);
376 result[
p][0] = vtxLabel(0, j,
k);
377 result[
p][1] = vtxLabel(0, j,
k + 1);
378 result[
p][2] = vtxLabel(0, j + 1,
k + 1);
379 result[
p][3] = vtxLabel(0, j + 1,
k);
394 (xMaxRange - xMinRange + 1)*(zMaxRange - zMinRange + 1)
398 for (
label i = xMinRange - 1; i <= xMaxRange - 1; i++)
400 for (
label k = zMinRange - 1;
k <= zMaxRange - 1;
k++)
402 result[
p].setSize(4);
405 result[
p][0] = vtxLabel(i, 0,
k);
406 result[
p][1] = vtxLabel(i + 1, 0,
k);
407 result[
p][2] = vtxLabel(i + 1, 0,
k + 1);
408 result[
p][3] = vtxLabel(i, 0,
k + 1);
423 (xMaxRange - xMinRange + 1)*(yMaxRange - yMinRange + 1)
427 for (
label i = xMinRange - 1; i <= xMaxRange - 1; i++)
429 for (
label j = yMinRange - 1; j <= yMaxRange - 1; j++)
431 result[
p].setSize(4);
434 result[
p][0] = vtxLabel(i, j, 0);
435 result[
p][1] = vtxLabel(i, j + 1, 0);
436 result[
p][2] = vtxLabel(i + 1, j + 1, 0);
437 result[
p][3] = vtxLabel(i + 1, j, 0);
450 <<
"direction out of range (1 to 6): " << direc
457 if (blockHandedness_ == noPoints)
460 <<
"Unable to determine block handedness as points " 461 <<
"have not been read in yet" 464 else if (blockHandedness_ == left)
469 result[facei].flip();
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.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Vector< scalar > vector
A scalar version of the templated Vector.
label k
Boltzmann constant.
vectorField pointField
pointField is a vectorField.
List< label > labelList
A List of labels.
errorManip< error > abort(error &err)
faceList patchFaces(label direc, const labelList &range) const
Return block patch faces given direction and range limits.
void setSize(const label)
Reset size of List.
#define WarningInFunction
Report a warning using Foam::Warning.
dimensioned< scalar > mag(const dimensioned< Type > &)
void readPoints(Istream &)
Read block points.
hexBlock(const label nx, const label ny, const label nz)
Construct from components.
labelListList blockCells() const
Return block cells.