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))
112 void hexBlock::readPoints
114 const bool readBlank,
115 const scalar twoDThickness,
123 if (twoDThickness > 0)
131 is >> points_[i].x();
137 is >> points_[i].y();
140 if (twoDThickness > 0)
146 points_[i+
nPoints] = points_[i];
151 points_[i+
nPoints].z() = twoDThickness;
159 is >> points_[i].z();
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"
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();
#define forAll(list, i)
Loop across all elements in list.
void setSize(const label)
Reset size of List.
hexBlock(const label nx, const label ny, const label nz)
Construct from components.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
#define WarningInFunction
Report a warning using Foam::Warning.
const dimensionedScalar c
Speed of light in a vacuum.
List< label > labelList
A List of labels.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
errorManip< error > abort(error &err)
vectorField pointField
pointField is a vectorField.
Vector< scalar > vector
A scalar version of the templated Vector.
List< labelList > labelListList
A List of labelList.
dimensioned< scalar > mag(const dimensioned< Type > &)