32 template<
class Po
int,
class Po
intRef>
47 storeOp inside(insideTets, nInside);
48 storeOp cutInside(cutInsideTets, nCutInside);
51 storeOp outside(outsideTets, nOutside);
59 plane pl0(tetB.b_, tetB.d_, tetB.c_);
64 sliceWithPlane(pl0, cutInside, outside);
75 plane pl1(tetB.a_, tetB.c_, tetB.d_);
79 for (
label i = 0; i < nCutInside; i++)
81 cutInsideTets[i].tet().sliceWithPlane(pl1, inside, outside);
92 plane pl2(tetB.a_, tetB.d_, tetB.b_);
96 for (
label i = 0; i < nInside; i++)
98 insideTets[i].tet().sliceWithPlane(pl2, cutInside, outside);
103 nInside = nCutInside;
110 plane pl3(tetB.a_, tetB.b_, tetB.c_);
114 for (
label i = 0; i < nCutInside; i++)
116 cutInsideTets[i].tet().sliceWithPlane(pl3, inside, outside);
122 template<
class Po
int,
class Po
intRef>
135 const scalar fac = 1 + tol;
153 scalar radiusSqr =
magSqr(ctr - a_);
157 radiusSqr < minRadiusSqr
163 minRadiusSqr = radiusSqr;
168 scalar radiusSqr =
magSqr(ctr - a_);
172 radiusSqr < minRadiusSqr
178 minRadiusSqr = radiusSqr;
183 scalar radiusSqr =
magSqr(ctr - a_);
187 radiusSqr < minRadiusSqr
193 minRadiusSqr = radiusSqr;
198 scalar radiusSqr =
magSqr(ctr - b_);
202 radiusSqr < minRadiusSqr
208 minRadiusSqr = radiusSqr;
217 point ctr = 0.5*(a_ + b_);
218 scalar radiusSqr =
magSqr(a_ - ctr);
219 scalar testRadSrq = facSqr*radiusSqr;
223 radiusSqr < minRadiusSqr
224 &&
magSqr(c_-ctr) <= testRadSrq
225 &&
magSqr(d_-ctr) <= testRadSrq)
229 minRadiusSqr = radiusSqr;
235 point ctr = 0.5*(a_ + c_);
236 scalar radiusSqr =
magSqr(a_ - ctr);
237 scalar testRadSrq = facSqr*radiusSqr;
241 radiusSqr < minRadiusSqr
242 &&
magSqr(b_-ctr) <= testRadSrq
243 &&
magSqr(d_-ctr) <= testRadSrq
248 minRadiusSqr = radiusSqr;
254 point ctr = 0.5*(a_ + d_);
255 scalar radiusSqr =
magSqr(a_ - ctr);
256 scalar testRadSrq = facSqr*radiusSqr;
260 radiusSqr < minRadiusSqr
261 &&
magSqr(b_-ctr) <= testRadSrq
262 &&
magSqr(c_-ctr) <= testRadSrq
267 minRadiusSqr = radiusSqr;
273 point ctr = 0.5*(b_ + c_);
274 scalar radiusSqr =
magSqr(b_ - ctr);
275 scalar testRadSrq = facSqr*radiusSqr;
279 radiusSqr < minRadiusSqr
280 &&
magSqr(a_-ctr) <= testRadSrq
281 &&
magSqr(d_-ctr) <= testRadSrq
286 minRadiusSqr = radiusSqr;
292 point ctr = 0.5*(b_ + d_);
293 scalar radiusSqr =
magSqr(b_ - ctr);
294 scalar testRadSrq = facSqr*radiusSqr;
298 radiusSqr < minRadiusSqr
299 &&
magSqr(a_-ctr) <= testRadSrq
300 &&
magSqr(c_-ctr) <= testRadSrq)
304 minRadiusSqr = radiusSqr;
310 point ctr = 0.5*(c_ + d_);
311 scalar radiusSqr =
magSqr(c_ - ctr);
312 scalar testRadSrq = facSqr*radiusSqr;
316 radiusSqr < minRadiusSqr
317 &&
magSqr(a_-ctr) <= testRadSrq
318 &&
magSqr(b_-ctr) <= testRadSrq
323 minRadiusSqr = radiusSqr;
334 template<
class Po
int,
class Po
intRef>
348 buffer[0] = (1.0/9.0)*
magSqr(Sa())/magVol;
349 buffer[1] = (1.0/9.0)*
magSqr(Sb())/magVol;
350 buffer[2] = (1.0/9.0)*
magSqr(Sc())/magVol;
351 buffer[3] = (1.0/9.0)*
magSqr(Sd())/magVol;
355 template<
class Po
int,
class Po
intRef>
376 buffer[0] = (1.0/9.0)*(sa & sb)/magVol;
377 buffer[1] = (1.0/9.0)*(sa & sc)/magVol;
378 buffer[2] = (1.0/9.0)*(sa & sd)/magVol;
379 buffer[3] = (1.0/9.0)*(sd & sb)/magVol;
380 buffer[4] = (1.0/9.0)*(sb & sc)/magVol;
381 buffer[5] = (1.0/9.0)*(sd & sc)/magVol;
385 template<
class Po
int,
class Po
intRef>
396 buffer[0] = (1.0/9.0)*
sqr(Sa())/magVol;
397 buffer[1] = (1.0/9.0)*
sqr(Sb())/magVol;
398 buffer[2] = (1.0/9.0)*
sqr(Sc())/magVol;
399 buffer[3] = (1.0/9.0)*
sqr(Sd())/magVol;
403 template<
class Po
int,
class Po
intRef>
420 buffer[0] = (1.0/9.0)*(sa * sb)/magVol;
421 buffer[1] = (1.0/9.0)*(sa * sc)/magVol;
422 buffer[2] = (1.0/9.0)*(sa * sd)/magVol;
423 buffer[3] = (1.0/9.0)*(sd * sb)/magVol;
424 buffer[4] = (1.0/9.0)*(sb * sc)/magVol;
425 buffer[5] = (1.0/9.0)*(sd * sc)/magVol;
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
void gradNiGradNj(tensorField &buffer) const
A 1D vector of objects of type <T> with a fixed size <Size>.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
const Point & rawPoint() const
Return point with no checking.
dimensionedScalar sqrt(const dimensionedScalar &ds)
Geometric class that creates a 2D plane and can return the intersection point between a line and the ...
void gradNiSquared(scalarField &buffer) const
Fill buffer with shape function products.
void setDistance(const scalar d)
void setMiss(const bool eligible)
dimensioned< scalar > magSqr(const dimensioned< Type > &)
void gradNiGradNi(tensorField &buffer) const
pointHit containmentSphere(const scalar tol) const
Return (min)containment sphere, i.e. the smallest sphere with.
void tetOverlap(const tetrahedron< Point, PointRef > &tetB, tetIntersectionList &insideTets, label &nInside, tetIntersectionList &outsideTets, label &nOutside) const
Decompose tet into tets inside and outside other tet.
triangle< point, const point & > triPointRef
dimensioned< scalar > mag(const dimensioned< Type > &)
void gradNiDotGradNj(scalarField &buffer) const
void setPoint(const Point &p)