[cig-commits] r17138 - in short/3D/PyLith/branches/v1.5-stable: libsrc/meshio pylith/feassemble pylith/perf unittests/pytests/feassemble
brad at geodynamics.org
brad at geodynamics.org
Fri Aug 27 17:37:47 PDT 2010
Author: brad
Date: 2010-08-27 17:37:46 -0700 (Fri, 27 Aug 2010)
New Revision: 17138
Modified:
short/3D/PyLith/branches/v1.5-stable/libsrc/meshio/MeshIOCubit.cc
short/3D/PyLith/branches/v1.5-stable/pylith/feassemble/FIATLagrange.py
short/3D/PyLith/branches/v1.5-stable/pylith/perf/Mesh.py
short/3D/PyLith/branches/v1.5-stable/unittests/pytests/feassemble/TestFIATLagrange.py
Log:
Adjusted ordering of vertices for higher order Lagrange cells to conform to VTK (corners, edges, faces, interior), which is more natural, rather than CUBIT ordering.
Modified: short/3D/PyLith/branches/v1.5-stable/libsrc/meshio/MeshIOCubit.cc
===================================================================
--- short/3D/PyLith/branches/v1.5-stable/libsrc/meshio/MeshIOCubit.cc 2010-08-28 00:36:36 UTC (rev 17137)
+++ short/3D/PyLith/branches/v1.5-stable/libsrc/meshio/MeshIOCubit.cc 2010-08-28 00:37:46 UTC (rev 17138)
@@ -392,38 +392,71 @@
assert(0 != cells);
assert(cells->size() == numCells*numCorners);
- if (2 == meshDim && 4 == numCorners) // QUAD
-#if 0 // OLD
- // 0 1 2 3 -> 0 1 3 2
+ if (2 == meshDim && 4 == numCorners) { // QUAD4
+ ; // do nothing
+ } else if (3 == meshDim && 8 == numCorners) { // HEX8
+ ; // do nothing
+ } else if (3 == meshDim && 27 == numCorners) { // HEX27
+ // CUBIT
+ // corners,
+ // bottom edges, middle edges, top edges
+ // interior
+ // bottom/top, left/right, front/back
+
+ // PyLith
+ // corners,
+ // bottom edges, top edges, middle edges
+ // left/right, front/back, bottom/top
+ // interior
+ int tmp = 0;
for (int iCell=0; iCell < numCells; ++iCell) {
- const int i2 = iCell*numCorners+2;
- const int i3 = iCell*numCorners+3;
- const int tmp = (*cells)[i2];
- (*cells)[i2] = (*cells)[i3];
- (*cells)[i3] = tmp;
+ const int i12 = iCell*numCorners+12;
+ const int i13 = iCell*numCorners+13;
+ const int i14 = iCell*numCorners+14;
+ const int i15 = iCell*numCorners+15;
+ const int i16 = iCell*numCorners+16;
+ const int i17 = iCell*numCorners+17;
+ const int i18 = iCell*numCorners+18;
+ const int i19 = iCell*numCorners+19;
+ const int i20 = iCell*numCorners+20;
+ const int i21 = iCell*numCorners+21;
+ const int i22 = iCell*numCorners+22;
+ const int i23 = iCell*numCorners+23;
+ const int i24 = iCell*numCorners+24;
+ const int i25 = iCell*numCorners+25;
+ const int i26 = iCell*numCorners+26;
+
+ tmp = (*cells)[i12];
+ (*cells)[i12] = (*cells)[i16];
+ (*cells)[i16] = tmp;
+
+ tmp = (*cells)[i13];
+ (*cells)[i13] = (*cells)[i17];
+ (*cells)[i17] = tmp;
+
+ tmp = (*cells)[i14];
+ (*cells)[i14] = (*cells)[i18];
+ (*cells)[i18] = tmp;
+
+ tmp = (*cells)[i15];
+ (*cells)[i15] = (*cells)[i19];
+ (*cells)[i19] = tmp;
+
+ tmp = (*cells)[i20];
+ (*cells)[i20] = (*cells)[i23];
+ (*cells)[i23] = (*cells)[i26];
+ (*cells)[i26] = tmp;
+
+ tmp = (*cells)[i21];
+ (*cells)[i21] = (*cells)[i24];
+ (*cells)[i24] = tmp;
+
+ tmp = (*cells)[i22];
+ (*cells)[i22] = (*cells)[i25];
+ (*cells)[i25] = tmp;
} // for
-#else
- ; // do nothing
-#endif
- else if (3 == meshDim && 8 == numCorners) // HEX
-#if 0 // OLD
- // 0 1 2 3 4 5 6 7 -> 0 1 3 2 4 5 7 6
- for (int iCell=0; iCell < numCells; ++iCell) {
- const int i2 = iCell*numCorners+2;
- const int i3 = iCell*numCorners+3;
- int tmp = (*cells)[i2];
- (*cells)[i2] = (*cells)[i3];
- (*cells)[i3] = tmp;
+ } // if/else
- const int i6 = iCell*numCorners+6;
- const int i7 = iCell*numCorners+7;
- tmp = (*cells)[i6];
- (*cells)[i6] = (*cells)[i7];
- (*cells)[i7] = tmp;
- } // for
-#else
- ; // do nothing
-#endif
} // _orientCells
Modified: short/3D/PyLith/branches/v1.5-stable/pylith/feassemble/FIATLagrange.py
===================================================================
--- short/3D/PyLith/branches/v1.5-stable/pylith/feassemble/FIATLagrange.py 2010-08-28 00:36:36 UTC (rev 17137)
+++ short/3D/PyLith/branches/v1.5-stable/pylith/feassemble/FIATLagrange.py 2010-08-28 00:37:46 UTC (rev 17138)
@@ -211,6 +211,26 @@
q = numpy.arange(numBasis-1, 1, step=-1, dtype=numpy.int32)
r = numpy.zeros(numBasis-2, dtype=numpy.int32)
vertexOrder += zip(p,q,r)
+ # Top front
+ p = numpy.arange(2, numBasis, dtype=numpy.int32)
+ q = numpy.zeros(numBasis-2, dtype=numpy.int32)
+ r = numpy.ones(numBasis-2, dtype=numpy.int32)
+ vertexOrder += zip(p,q,r)
+ # Top right
+ p = numpy.ones(numBasis-2, dtype=numpy.int32)
+ q = numpy.arange(2, numBasis, dtype=numpy.int32)
+ r = numpy.ones(numBasis-2, dtype=numpy.int32)
+ vertexOrder += zip(p,q,r)
+ # Top back
+ p = numpy.arange(numBasis-1, 1, step=-1, dtype=numpy.int32)
+ q = numpy.ones(numBasis-2, dtype=numpy.int32)
+ r = numpy.ones(numBasis-2, dtype=numpy.int32)
+ vertexOrder += zip(p,q,r)
+ # Top left
+ p = numpy.zeros(numBasis-2, dtype=numpy.int32)
+ q = numpy.arange(numBasis-1, 1, step=-1, dtype=numpy.int32)
+ r = numpy.ones(numBasis-2, dtype=numpy.int32)
+ vertexOrder += zip(p,q,r)
# Middle left front
p = numpy.zeros(numBasis-2, dtype=numpy.int32)
q = numpy.zeros(numBasis-2, dtype=numpy.int32)
@@ -231,44 +251,8 @@
q = numpy.ones(numBasis-2, dtype=numpy.int32)
r = numpy.arange(2, numBasis, dtype=numpy.int32)
vertexOrder += zip(p,q,r)
- # Top front
- p = numpy.arange(2, numBasis, dtype=numpy.int32)
- q = numpy.zeros(numBasis-2, dtype=numpy.int32)
- r = numpy.ones(numBasis-2, dtype=numpy.int32)
- vertexOrder += zip(p,q,r)
- # Top right
- p = numpy.ones(numBasis-2, dtype=numpy.int32)
- q = numpy.arange(2, numBasis, dtype=numpy.int32)
- r = numpy.ones(numBasis-2, dtype=numpy.int32)
- vertexOrder += zip(p,q,r)
- # Top back
- p = numpy.arange(numBasis-1, 1, step=-1, dtype=numpy.int32)
- q = numpy.ones(numBasis-2, dtype=numpy.int32)
- r = numpy.ones(numBasis-2, dtype=numpy.int32)
- vertexOrder += zip(p,q,r)
- # Top left
- p = numpy.zeros(numBasis-2, dtype=numpy.int32)
- q = numpy.arange(numBasis-1, 1, step=-1, dtype=numpy.int32)
- r = numpy.ones(numBasis-2, dtype=numpy.int32)
- vertexOrder += zip(p,q,r)
+
# Face
- # Interior
- ip = numpy.arange(2, numBasis, dtype=numpy.int32)
- p = numpy.tile(ip, (1, (numBasis-2)*(numBasis-2)))
- iq = numpy.arange(2, numBasis, dtype=numpy.int32)
- q = numpy.tile(iq, ((numBasis-2), numBasis-2)).transpose()
- ir = numpy.arange(2, numBasis, dtype=numpy.int32)
- r = numpy.tile(ir, ((numBasis-2)*(numBasis-2), 1)).transpose()
- vertexOrder += zip(p.ravel(),q.ravel(),r.ravel())
-
- # Bottom / Top
- ip = numpy.arange(2, numBasis, dtype=numpy.int32)
- p = numpy.tile(ip, (1, 2*(numBasis-2)))
- iq = numpy.arange(2, numBasis, dtype=numpy.int32)
- q = numpy.tile(iq, (2, numBasis-2)).transpose()
- ir = numpy.arange(0, 2, dtype=numpy.int32)
- r = numpy.tile(ir, ((numBasis-2)*(numBasis-2), 1)).transpose()
- vertexOrder += zip(p.ravel(),q.ravel(),r.ravel())
# Left / Right
ip = numpy.arange(0, 2, dtype=numpy.int32)
p = numpy.tile(ip, ((numBasis-2)*(numBasis-2), 1)).transpose()
@@ -285,7 +269,24 @@
ir = numpy.arange(2, numBasis, dtype=numpy.int32)
r = numpy.tile(ir, (2, numBasis-2)).transpose()
vertexOrder += zip(p.ravel(),q.ravel(),r.ravel())
+ # Bottom / Top
+ ip = numpy.arange(2, numBasis, dtype=numpy.int32)
+ p = numpy.tile(ip, (1, 2*(numBasis-2)))
+ iq = numpy.arange(2, numBasis, dtype=numpy.int32)
+ q = numpy.tile(iq, (2, numBasis-2)).transpose()
+ ir = numpy.arange(0, 2, dtype=numpy.int32)
+ r = numpy.tile(ir, ((numBasis-2)*(numBasis-2), 1)).transpose()
+ vertexOrder += zip(p.ravel(),q.ravel(),r.ravel())
+ # Interior
+ ip = numpy.arange(2, numBasis, dtype=numpy.int32)
+ p = numpy.tile(ip, (1, (numBasis-2)*(numBasis-2)))
+ iq = numpy.arange(2, numBasis, dtype=numpy.int32)
+ q = numpy.tile(iq, ((numBasis-2), numBasis-2)).transpose()
+ ir = numpy.arange(2, numBasis, dtype=numpy.int32)
+ r = numpy.tile(ir, ((numBasis-2)*(numBasis-2), 1)).transpose()
+ vertexOrder += zip(p.ravel(),q.ravel(),r.ravel())
+
self.vertices = numpy.zeros((self.numCorners, dim))
n = 0
for (p,q,r) in vertexOrder:
Modified: short/3D/PyLith/branches/v1.5-stable/pylith/perf/Mesh.py
===================================================================
--- short/3D/PyLith/branches/v1.5-stable/pylith/perf/Mesh.py 2010-08-28 00:36:36 UTC (rev 17137)
+++ short/3D/PyLith/branches/v1.5-stable/pylith/perf/Mesh.py 2010-08-28 00:37:46 UTC (rev 17138)
@@ -29,7 +29,8 @@
(2,4): 'quad4',
(2,9): 'quad9',
(3,4): 'tet4',
- (3,8): 'hex8'
+ (3,8): 'hex8',
+ (3,27): 'hex27'
}
"""
Modified: short/3D/PyLith/branches/v1.5-stable/unittests/pytests/feassemble/TestFIATLagrange.py
===================================================================
--- short/3D/PyLith/branches/v1.5-stable/unittests/pytests/feassemble/TestFIATLagrange.py 2010-08-28 00:36:36 UTC (rev 17137)
+++ short/3D/PyLith/branches/v1.5-stable/unittests/pytests/feassemble/TestFIATLagrange.py 2010-08-28 00:37:46 UTC (rev 17138)
@@ -523,21 +523,21 @@
[+1.0, 0.0, -1.0],
[ 0.0, +1.0, -1.0],
[-1.0, 0.0, -1.0],
+ [ 0.0, -1.0, +1.0], # Top edges
+ [+1.0, 0.0, +1.0],
+ [ 0.0, +1.0, +1.0],
+ [-1.0, 0.0, +1.0],
[-1.0, -1.0, 0.0], # Middle edges
[+1.0, -1.0, 0.0],
[+1.0, +1.0, 0.0],
[-1.0, +1.0, 0.0],
- [ 0.0, -1.0, +1.0], # Top edges
- [+1.0, 0.0, +1.0],
- [ 0.0, +1.0, +1.0],
- [-1.0, 0.0, +1.0],
- [ 0.0, 0.0, 0.0], # Interior
- [ 0.0, 0.0, -1.0], # Faces
- [ 0.0, 0.0, +1.0],
- [-1.0, 0.0, 0.0],
+ [-1.0, 0.0, 0.0], # Faces
[+1.0, 0.0, 0.0],
[ 0.0, -1.0, 0.0],
- [ 0.0, +1.0, 0.0]])
+ [ 0.0, +1.0, 0.0],
+ [ 0.0, 0.0, -1.0],
+ [ 0.0, 0.0, +1.0],
+ [ 0.0, 0.0, 0.0]]) # Interior
quadPts = numpy.array([ [-(3.0/5)**0.5, -(3.0/5)**0.5, -(3.0/5)**0.5],
[ 0.0, -(3.0/5)**0.5, -(3.0/5)**0.5],
[+(3.0/5)**0.5, -(3.0/5)**0.5, -(3.0/5)**0.5],
@@ -631,6 +631,7 @@
return
+ # Corners
def N0(self, p):
return (-0.5*p[0])*(1.0-p[0])*(-0.5*p[1])*(1.0-p[1])*(-0.5*p[2])*(1.0-p[2])
@@ -735,6 +736,7 @@
return (-0.5*p[0])*(1.0-p[0])*(+0.5*p[1])*(1.0+p[1])*(p[2]+0.5)
+ # Bottom edges
def N8(self, p):
return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(-0.5*p[2])*(1.0-p[2])
@@ -787,199 +789,205 @@
return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(p[2]-0.5)
+ # Top edges
def N12(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(+0.5*p[2])*(1.0+p[2])
def N12p(self, p):
- return (p[0]-0.5)*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
+ return (-2.0*p[0])*(-0.5*p[1])*(1.0-p[1])*(+0.5*p[2])*(1.0+p[2])
def N12q(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(p[1]-0.5)*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(p[1]-0.5)*(+0.5*p[2])*(1.0+p[2])
def N12r(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(-0.5*p[1])*(1.0-p[1])*(-2.0*p[2])
+ return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(p[2]+0.5)
def N13(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
+ return (+0.5*p[0])*(1.0+p[0])*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
def N13p(self, p):
- return (p[0]+0.5)*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
+ return (p[0]+0.5)*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
def N13q(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(p[1]-0.5)*(1.0-p[2]**2)
+ return (+0.5*p[0])*(1.0+p[0])*(-2.0*p[1])*(+0.5*p[2])*(1.0+p[2])
def N13r(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(-0.5*p[1])*(1.0-p[1])*(-2.0*p[2])
+ return (+0.5*p[0])*(1.0+p[0])*(1.0-p[1]**2)*(p[2]+0.5)
def N14(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(+0.5*p[1])*(1.0+p[1])*(+0.5*p[2])*(1.0+p[2])
def N14p(self, p):
- return (p[0]+0.5)*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
+ return (-2.0*p[0])*(+0.5*p[1])*(1.0+p[1])*(+0.5*p[2])*(1.0+p[2])
def N14q(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(p[1]+0.5)*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(p[1]+0.5)*(+0.5*p[2])*(1.0+p[2])
def N14r(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(+0.5*p[1])*(1.0+p[1])*(-2.0*p[2])
+ return (1.0-p[0]**2)*(+0.5*p[1])*(1.0+p[1])*(p[2]+0.5)
def N15(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
+ return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
def N15p(self, p):
- return (p[0]-0.5)*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
+ return (p[0]-0.5)*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
def N15q(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(p[1]+0.5)*(1.0-p[2]**2)
+ return (-0.5*p[0])*(1.0-p[0])*(-2.0*p[1])*(+0.5*p[2])*(1.0+p[2])
def N15r(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(+0.5*p[1])*(1.0+p[1])*(-2.0*p[2])
+ return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(p[2]+0.5)
+ # Middle edges
def N16(self, p):
- return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(+0.5*p[2])*(1.0+p[2])
+ return (-0.5*p[0])*(1.0-p[0])*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
def N16p(self, p):
- return (-2.0*p[0])*(-0.5*p[1])*(1.0-p[1])*(+0.5*p[2])*(1.0+p[2])
+ return (p[0]-0.5)*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
def N16q(self, p):
- return (1.0-p[0]**2)*(p[1]-0.5)*(+0.5*p[2])*(1.0+p[2])
+ return (-0.5*p[0])*(1.0-p[0])*(p[1]-0.5)*(1.0-p[2]**2)
def N16r(self, p):
- return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(p[2]+0.5)
+ return (-0.5*p[0])*(1.0-p[0])*(-0.5*p[1])*(1.0-p[1])*(-2.0*p[2])
def N17(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
+ return (+0.5*p[0])*(1.0+p[0])*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
def N17p(self, p):
- return (p[0]+0.5)*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
+ return (p[0]+0.5)*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
def N17q(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(-2.0*p[1])*(+0.5*p[2])*(1.0+p[2])
+ return (+0.5*p[0])*(1.0+p[0])*(p[1]-0.5)*(1.0-p[2]**2)
def N17r(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(1.0-p[1]**2)*(p[2]+0.5)
+ return (+0.5*p[0])*(1.0+p[0])*(-0.5*p[1])*(1.0-p[1])*(-2.0*p[2])
def N18(self, p):
- return (1.0-p[0]**2)*(+0.5*p[1])*(1.0+p[1])*(+0.5*p[2])*(1.0+p[2])
+ return (+0.5*p[0])*(1.0+p[0])*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
def N18p(self, p):
- return (-2.0*p[0])*(+0.5*p[1])*(1.0+p[1])*(+0.5*p[2])*(1.0+p[2])
+ return (p[0]+0.5)*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
def N18q(self, p):
- return (1.0-p[0]**2)*(p[1]+0.5)*(+0.5*p[2])*(1.0+p[2])
+ return (+0.5*p[0])*(1.0+p[0])*(p[1]+0.5)*(1.0-p[2]**2)
def N18r(self, p):
- return (1.0-p[0]**2)*(+0.5*p[1])*(1.0+p[1])*(p[2]+0.5)
+ return (+0.5*p[0])*(1.0+p[0])*(+0.5*p[1])*(1.0+p[1])*(-2.0*p[2])
def N19(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
+ return (-0.5*p[0])*(1.0-p[0])*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
def N19p(self, p):
- return (p[0]-0.5)*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
+ return (p[0]-0.5)*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
def N19q(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(-2.0*p[1])*(+0.5*p[2])*(1.0+p[2])
+ return (-0.5*p[0])*(1.0-p[0])*(p[1]+0.5)*(1.0-p[2]**2)
def N19r(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(p[2]+0.5)
+ return (-0.5*p[0])*(1.0-p[0])*(+0.5*p[1])*(1.0+p[1])*(-2.0*p[2])
+ # Left/right
def N20(self, p):
- return (1.0-p[0]**2)*(1.0-p[1]**2)*(1.0-p[2]**2)
+ return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(1.0-p[2]**2)
def N20p(self, p):
- return (-2.0*p[0])*(1.0-p[1]**2)*(1.0-p[2]**2)
+ return (p[0]-0.5)*(1.0-p[1]**2)*(1.0-p[2]**2)
def N20q(self, p):
- return (1.0-p[0]**2)*(-2.0*p[1])*(1.0-p[2]**2)
+ return (-0.5*p[0])*(1.0-p[0])*(-2.0*p[1])*(1.0-p[2]**2)
def N20r(self, p):
- return (1.0-p[0]**2)*(1.0-p[1]**2)*(-2.0*p[2])
+ return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(-2.0*p[2])
def N21(self, p):
- return (1.0-p[0]**2)*(1.0-p[1]**2)*(-0.5*p[2])*(1.0-p[2])
+ return (+0.5*p[0])*(1.0+p[0])*(1.0-p[1]**2)*(1.0-p[2]**2)
def N21p(self, p):
- return (-2.0*p[0])*(1.0-p[1]**2)*(-0.5*p[2])*(1.0-p[2])
+ return (p[0]+0.5)*(1.0-p[1]**2)*(1.0-p[2]**2)
def N21q(self, p):
- return (1.0-p[0]**2)*(-2.0*p[1])*(-0.5*p[2])*(1.0-p[2])
+ return (+0.5*p[0])*(1.0+p[0])*(-2.0*p[1])*(1.0-p[2]**2)
def N21r(self, p):
- return (1.0-p[0]**2)*(1.0-p[1]**2)*(p[2]-0.5)
+ return (+0.5*p[0])*(1.0+p[0])*(1.0-p[1]**2)*(-2.0*p[2])
+ # Front/back
def N22(self, p):
- return (1.0-p[0]**2)*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
+ return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
def N22p(self, p):
- return (-2.0*p[0])*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
+ return (-2.0*p[0])*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
def N22q(self, p):
- return (1.0-p[0]**2)*(-2.0*p[1])*(+0.5*p[2])*(1.0+p[2])
+ return (1.0-p[0]**2)*(p[1]-0.5)*(1.0-p[2]**2)
def N22r(self, p):
- return (1.0-p[0]**2)*(1.0-p[1]**2)*(p[2]+0.5)
+ return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(-2.0*p[2])
def N23(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
def N23p(self, p):
- return (p[0]-0.5)*(1.0-p[1]**2)*(1.0-p[2]**2)
+ return (-2.0*p[0])*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
def N23q(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(-2.0*p[1])*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(p[1]+0.5)*(1.0-p[2]**2)
def N23r(self, p):
- return (-0.5*p[0])*(1.0-p[0])*(1.0-p[1]**2)*(-2.0*p[2])
+ return (1.0-p[0]**2)*(+0.5*p[1])*(1.0+p[1])*(-2.0*p[2])
+ # Bottom/top
def N24(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(1.0-p[1]**2)*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(1.0-p[1]**2)*(-0.5*p[2])*(1.0-p[2])
def N24p(self, p):
- return (p[0]+0.5)*(1.0-p[1]**2)*(1.0-p[2]**2)
+ return (-2.0*p[0])*(1.0-p[1]**2)*(-0.5*p[2])*(1.0-p[2])
def N24q(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(-2.0*p[1])*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(-2.0*p[1])*(-0.5*p[2])*(1.0-p[2])
def N24r(self, p):
- return (+0.5*p[0])*(1.0+p[0])*(1.0-p[1]**2)*(-2.0*p[2])
+ return (1.0-p[0]**2)*(1.0-p[1]**2)*(p[2]-0.5)
def N25(self, p):
- return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
def N25p(self, p):
- return (-2.0*p[0])*(-0.5*p[1])*(1.0-p[1])*(1.0-p[2]**2)
+ return (-2.0*p[0])*(1.0-p[1]**2)*(+0.5*p[2])*(1.0+p[2])
def N25q(self, p):
- return (1.0-p[0]**2)*(p[1]-0.5)*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(-2.0*p[1])*(+0.5*p[2])*(1.0+p[2])
def N25r(self, p):
- return (1.0-p[0]**2)*(-0.5*p[1])*(1.0-p[1])*(-2.0*p[2])
+ return (1.0-p[0]**2)*(1.0-p[1]**2)*(p[2]+0.5)
+ # Interior
def N26(self, p):
- return (1.0-p[0]**2)*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(1.0-p[1]**2)*(1.0-p[2]**2)
def N26p(self, p):
- return (-2.0*p[0])*(+0.5*p[1])*(1.0+p[1])*(1.0-p[2]**2)
+ return (-2.0*p[0])*(1.0-p[1]**2)*(1.0-p[2]**2)
def N26q(self, p):
- return (1.0-p[0]**2)*(p[1]+0.5)*(1.0-p[2]**2)
+ return (1.0-p[0]**2)*(-2.0*p[1])*(1.0-p[2]**2)
def N26r(self, p):
- return (1.0-p[0]**2)*(+0.5*p[1])*(1.0+p[1])*(-2.0*p[2])
+ return (1.0-p[0]**2)*(1.0-p[1]**2)*(-2.0*p[2])
# ----------------------------------------------------------------------
More information about the CIG-COMMITS
mailing list