37 label hexBlock::vtxLabel(label a, label
b, label
c)
const 39 return (a +
b*(xDim_ + 1) +
c*(xDim_ + 1)*(yDim_ + 1));
46 void hexBlock::setHandedness()
50 for (label
k = 0;
k <= zDim_ - 1;
k++)
52 for (label j = 0; j <= yDim_ - 1; j++)
54 for (label i = 0; i <= xDim_ - 1; i++)
56 vector x =
p[vtxLabel(i+1, j,
k)] -
p[vtxLabel(i, j,
k)];
57 vector y =
p[vtxLabel(i, j+1,
k)] -
p[vtxLabel(i, j,
k)];
58 vector z =
p[vtxLabel(i, j,
k+1)] -
p[vtxLabel(i, j,
k)];
60 if (
mag(
x) > SMALL &&
mag(
y) > SMALL &&
mag(z) > SMALL)
62 Info<<
"Looking at cell " 63 << i <<
' ' << j <<
' ' <<
k 64 <<
" to determine orientation." 67 if (((
x ^
y) & z) > 0)
69 Info<<
"Right-handed block." <<
endl;
70 blockHandedness_ = right;
75 blockHandedness_ = left;
81 Info<<
"Cannot determine orientation of cell " 82 << i <<
' ' << j <<
' ' <<
k 83 <<
" since has base vectors " <<
x <<
y << z <<
endl;
89 if (blockHandedness_ == noPoints)
92 <<
"Cannot determine orientation of block." 93 <<
" Continuing as if right handed." <<
endl;
94 blockHandedness_ = right;
102 hexBlock::hexBlock(
const label nx,
const label ny,
const label nz)
107 blockHandedness_(noPoints),
108 points_((xDim_ + 1)*(yDim_ + 1)*(zDim_ + 1))
114 void hexBlock::readPoints
116 const bool readBlank,
117 const scalar twoDThicknes,
123 label
nPoints = points_.size();
125 if (twoDThicknes > 0)
131 for (label i=0; i <
nPoints; i++)
133 is >> points_[i].x();
137 for (label i=0; i <
nPoints; i++)
139 is >> points_[i].y();
142 if (twoDThicknes > 0)
146 for (label i=0; i <
nPoints; i++)
148 points_[i+
nPoints] = points_[i];
150 for (label i=0; i <
nPoints; i++)
153 points_[i+
nPoints].z() = twoDThicknes;
159 for (label i=0; i <
nPoints; i++)
161 is >> points_[i].z();
169 for (label i=0; i <
nPoints; i++)
186 if (blockHandedness_ == right)
188 for (label
k = 0;
k <= zDim_ - 1;
k++)
190 for (label j = 0; j <= yDim_ - 1; j++)
192 for (label i = 0; i <= xDim_ - 1; i++)
197 hexLabels[0] = vtxLabel(i, j,
k);
198 hexLabels[1] = vtxLabel(i+1, j,
k);
199 hexLabels[2] = vtxLabel(i+1, j+1,
k);
200 hexLabels[3] = vtxLabel(i, j+1,
k);
201 hexLabels[4] = vtxLabel(i, j,
k+1);
202 hexLabels[5] = vtxLabel(i+1, j,
k+1);
203 hexLabels[6] = vtxLabel(i+1, j+1,
k+1);
204 hexLabels[7] = vtxLabel(i, j+1,
k+1);
211 else if (blockHandedness_ == left)
213 for (label
k = 0;
k <= zDim_ - 1;
k++)
215 for (label j = 0; j <= yDim_ - 1; j++)
217 for (label i = 0; i <= xDim_ - 1; i++)
222 hexLabels[0] = vtxLabel(i, j,
k+1);
223 hexLabels[1] = vtxLabel(i+1, j,
k+1);
224 hexLabels[2] = vtxLabel(i+1, j+1,
k+1);
225 hexLabels[3] = vtxLabel(i, j+1,
k+1);
226 hexLabels[4] = vtxLabel(i, j,
k);
227 hexLabels[5] = vtxLabel(i+1, j,
k);
228 hexLabels[6] = vtxLabel(i+1, j+1,
k);
229 hexLabels[7] = vtxLabel(i, j+1,
k);
239 <<
"Unable to determine block handedness as points " 240 <<
"have not been read in yet" 255 if (
range.size() != 6)
258 <<
"Invalid size of the range array: " <<
range.size()
259 <<
". Should be 6 (xMin, xMax, yMin, yMax, zMin, zMax" 263 label xMinRange =
range[0];
264 label xMaxRange =
range[1];
265 label yMinRange =
range[2];
266 label yMaxRange =
range[3];
267 label zMinRange =
range[4];
268 label zMaxRange =
range[5];
280 (yMaxRange - yMinRange + 1)*(zMaxRange - zMinRange + 1)
284 for (label
k = zMinRange - 1;
k <= zMaxRange - 1;
k++)
286 for (label j = yMinRange - 1; j <= yMaxRange - 1; j++)
288 result[
p].setSize(4);
291 result[
p][0] = vtxLabel(xDim_, j,
k);
292 result[
p][1] = vtxLabel(xDim_, j+1,
k);
293 result[
p][2] = vtxLabel(xDim_, j+1,
k+1);
294 result[
p][3] = vtxLabel(xDim_, j,
k+1);
309 (xMaxRange - xMinRange + 1)*(zMaxRange - zMinRange + 1)
313 for (label i = xMinRange - 1; i <= xMaxRange - 1; i++)
315 for (label
k = zMinRange - 1;
k <= zMaxRange - 1;
k++)
317 result[
p].setSize(4);
320 result[
p][0] = vtxLabel(i, yDim_,
k);
321 result[
p][1] = vtxLabel(i, yDim_,
k + 1);
322 result[
p][2] = vtxLabel(i + 1, yDim_,
k + 1);
323 result[
p][3] = vtxLabel(i + 1, yDim_,
k);
338 (xMaxRange - xMinRange + 1)*(yMaxRange - yMinRange + 1)
342 for (label i = xMinRange - 1; i <= xMaxRange - 1; i++)
344 for (label j = yMinRange - 1; j <= yMaxRange - 1; j++)
346 result[
p].setSize(4);
349 result[
p][0] = vtxLabel(i, j, zDim_);
350 result[
p][1] = vtxLabel(i + 1, j, zDim_);
351 result[
p][2] = vtxLabel(i + 1, j + 1, zDim_);
352 result[
p][3] = vtxLabel(i, j + 1, zDim_);
367 (yMaxRange - yMinRange + 1)*(zMaxRange - zMinRange + 1)
371 for (label
k = zMinRange - 1;
k <= zMaxRange - 1;
k++)
373 for (label j = yMinRange - 1; j <= yMaxRange - 1; j++)
375 result[
p].setSize(4);
378 result[
p][0] = vtxLabel(0, j,
k);
379 result[
p][1] = vtxLabel(0, j,
k + 1);
380 result[
p][2] = vtxLabel(0, j + 1,
k + 1);
381 result[
p][3] = vtxLabel(0, j + 1,
k);
396 (xMaxRange - xMinRange + 1)*(zMaxRange - zMinRange + 1)
400 for (label i = xMinRange - 1; i <= xMaxRange - 1; i++)
402 for (label
k = zMinRange - 1;
k <= zMaxRange - 1;
k++)
404 result[
p].setSize(4);
407 result[
p][0] = vtxLabel(i, 0,
k);
408 result[
p][1] = vtxLabel(i + 1, 0,
k);
409 result[
p][2] = vtxLabel(i + 1, 0,
k + 1);
410 result[
p][3] = vtxLabel(i, 0,
k + 1);
425 (xMaxRange - xMinRange + 1)*(yMaxRange - yMinRange + 1)
429 for (label i = xMinRange - 1; i <= xMaxRange - 1; i++)
431 for (label j = yMinRange - 1; j <= yMaxRange - 1; j++)
433 result[
p].setSize(4);
436 result[
p][0] = vtxLabel(i, j, 0);
437 result[
p][1] = vtxLabel(i, j + 1, 0);
438 result[
p][2] = vtxLabel(i + 1, j + 1, 0);
439 result[
p][3] = vtxLabel(i + 1, j, 0);
452 <<
"direction out of range (1 to 6): " << direc
459 if (blockHandedness_ == noPoints)
462 <<
"Unable to determine block handedness as points " 463 <<
"have not been read in yet" 466 else if (blockHandedness_ == left)
471 result[facei].flip();
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Ostream & endl(Ostream &os)
Add newline and flush stream.
label k
Boltzmann constant.
List< labelList > labelListList
List of labelList.
#define forAll(list, i)
Loop across all elements in list.
List< face > faceList
List of faces.
vectorField pointField
pointField is a vectorField.
void setSize(const label n)
Alias for resize()
const dimensionedScalar b
Wien displacement law constant: default SI units: [m.K].
errorManip< error > abort(error &err)
#define WarningInFunction
Report a warning using Foam::Warning.
const dimensionedScalar c
Speed of light in a vacuum.
messageStream Info
Information stream (stdout output on master, null elsewhere)
List< label > labelList
A List of labels.