[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