ShapeFunctions#

Create Lagrange finite element shape functions.

  • SEG2
  • SEG3
  • SEG4
  • SEG5
  • TRI3
  • TRI6
  • TRI10
  • TRI15
  • QUAD4
  • QUAD8
  • QUAD9
  • TETRA4
  • TETRA10
  • HEXA8
  • HEXA20
  • HEXA27
  • PRISM6
  • PRISM15
  • PRISM18
==================== SEG2 ====================
N1 = lambda r : -(r - 1)/2
N2 = lambda r : (r + 1)/2

dN1 = [lambda r : -1/2]
dN2 = [lambda r : 1/2]

ddN1 = [lambda r : 0]
ddN2 = [lambda r : 0]

dddN1 = [lambda r : 0]
dddN2 = [lambda r : 0]

ddddN1 = [lambda r : 0]
ddddN2 = [lambda r : 0]



============= SEG2 EulerBernoulli =============
N1 = lambda r : (r - 1)**2*(r + 2)/4
N2 = lambda r : (r - 1)**2*(r + 1)/8
N3 = lambda r : -(r - 2)*(r + 1)**2/4
N4 = lambda r : (r - 1)*(r + 1)**2/8

dN1 = [lambda r : (r - 1)**2/4 + (r + 2)*(2*r - 2)/4]
dN2 = [lambda r : (r - 1)**2/8 + (r + 1)*(2*r - 2)/8]
dN3 = [lambda r : -(r - 2)*(2*r + 2)/4 - (r + 1)**2/4]
dN4 = [lambda r : (r - 1)*(2*r + 2)/8 + (r + 1)**2/8]

ddN1 = [lambda r : 3*r/2]
ddN2 = [lambda r : 3*r/4 - 1/4]
ddN3 = [lambda r : -3*r/2]
ddN4 = [lambda r : 3*r/4 + 1/4]

dddN1 = [lambda r : 3/2]
dddN2 = [lambda r : 3/4]
dddN3 = [lambda r : -3/2]
dddN4 = [lambda r : 3/4]

ddddN1 = [lambda r : 0]
ddddN2 = [lambda r : 0]
ddddN3 = [lambda r : 0]
ddddN4 = [lambda r : 0]



==================== SEG3 ====================
N1 = lambda r : r*(r - 1)/2
N2 = lambda r : r*(r + 1)/2
N3 = lambda r : -(r - 1)*(r + 1)

dN1 = [lambda r : r - 1/2]
dN2 = [lambda r : r + 1/2]
dN3 = [lambda r : -2*r]

ddN1 = [lambda r : 1]
ddN2 = [lambda r : 1]
ddN3 = [lambda r : -2]

dddN1 = [lambda r : 0]
dddN2 = [lambda r : 0]
dddN3 = [lambda r : 0]

ddddN1 = [lambda r : 0]
ddddN2 = [lambda r : 0]
ddddN3 = [lambda r : 0]



============= SEG3 EulerBernoulli =============
N1 = lambda r : r**2*(r - 1)**2*(3*r + 4)/4
N2 = lambda r : r**2*(r - 1)**2*(r + 1)/8
N3 = lambda r : -r**2*(r + 1)**2*(3*r - 4)/4
N4 = lambda r : r**2*(r - 1)*(r + 1)**2/8
N5 = lambda r : (r - 1)**2*(r + 1)**2
N6 = lambda r : r*(r - 1)**2*(r + 1)**2/2

dN1 = [lambda r : 3*r**2*(r - 1)**2/4 + r**2*(2*r - 2)*(3*r + 4)/4 + r*(r - 1)**2*(3*r + 4)/2]
dN2 = [lambda r : r**2*(r - 1)**2/8 + r**2*(r + 1)*(2*r - 2)/8 + r*(r - 1)**2*(r + 1)/4]
dN3 = [lambda r : -3*r**2*(r + 1)**2/4 - r**2*(2*r + 2)*(3*r - 4)/4 - r*(r + 1)**2*(3*r - 4)/2]
dN4 = [lambda r : r**2*(r - 1)*(2*r + 2)/8 + r**2*(r + 1)**2/8 + r*(r - 1)*(r + 1)**2/4]
dN5 = [lambda r : (r - 1)**2*(2*r + 2) + (r + 1)**2*(2*r - 2)]
dN6 = [lambda r : r*(r - 1)**2*(2*r + 2)/2 + r*(r + 1)**2*(2*r - 2)/2 + (r - 1)**2*(r + 1)**2/2]

ddN1 = [lambda r : 3*r**2*(2*r - 2)/2 + r**2*(3*r + 4)/2 + 3*r*(r - 1)**2 + r*(2*r - 2)*(3*r + 4) + (r - 1)**2*(3*r + 4)/2]
ddN2 = [lambda r : r**2*(r + 1)/4 + r**2*(2*r - 2)/4 + r*(r - 1)**2/2 + r*(r + 1)*(2*r - 2)/2 + (r - 1)**2*(r + 1)/4]
ddN3 = [lambda r : -3*r**2*(2*r + 2)/2 - r**2*(3*r - 4)/2 - 3*r*(r + 1)**2 - r*(2*r + 2)*(3*r - 4) - (r + 1)**2*(3*r - 4)/2]
ddN4 = [lambda r : r**2*(r - 1)/4 + r**2*(2*r + 2)/4 + r*(r - 1)*(2*r + 2)/2 + r*(r + 1)**2/2 + (r - 1)*(r + 1)**2/4]
ddN5 = [lambda r : 2*(r - 1)**2 + 2*(r + 1)**2 + 2*(2*r - 2)*(2*r + 2)]
ddN6 = [lambda r : r*(r - 1)**2 + r*(r + 1)**2 + r*(2*r - 2)*(2*r + 2) + (r - 1)**2*(2*r + 2) + (r + 1)**2*(2*r - 2)]

dddN1 = [lambda r : 9*r**2/2 + 9*r*(2*r - 2) + 3*r*(3*r + 4) + 9*(r - 1)**2/2 + 3*(2*r - 2)*(3*r + 4)/2]
dddN2 = [lambda r : 3*r**2/4 + 3*r*(r + 1)/2 + 3*r*(2*r - 2)/2 + 3*(r - 1)**2/4 + 3*(r + 1)*(2*r - 2)/4]
dddN3 = [lambda r : -9*r**2/2 - 9*r*(2*r + 2) - 3*r*(3*r - 4) - 9*(r + 1)**2/2 - 3*(2*r + 2)*(3*r - 4)/2]
dddN4 = [lambda r : 3*r**2/4 + 3*r*(r - 1)/2 + 3*r*(2*r + 2)/2 + 3*(r - 1)*(2*r + 2)/4 + 3*(r + 1)**2/4]
dddN5 = [lambda r : 24*r]
dddN6 = [lambda r : 3*r*(2*r - 2) + 3*r*(2*r + 2) + 3*(r - 1)**2 + 3*(r + 1)**2 + 3*(2*r - 2)*(2*r + 2)]

ddddN1 = [lambda r : 90*r - 12]
ddddN2 = [lambda r : 15*r - 3]
ddddN3 = [lambda r : -90*r - 12]
ddddN4 = [lambda r : 15*r + 3]
ddddN5 = [lambda r : 24]
ddddN6 = [lambda r : 60*r]



==================== SEG4 ====================
N1 = lambda r : -9*r**3/16 + 9*r**2/16 + r/16 - 1/16
N2 = lambda r : 9*r**3/16 + 9*r**2/16 - r/16 - 1/16
N3 = lambda r : 27*r**3/16 - 9*r**2/16 - 27*r/16 + 9/16
N4 = lambda r : -27*r**3/16 - 9*r**2/16 + 27*r/16 + 9/16

dN1 = [lambda r : -27*r**2/16 + 9*r/8 + 1/16]
dN2 = [lambda r : 27*r**2/16 + 9*r/8 - 1/16]
dN3 = [lambda r : 81*r**2/16 - 9*r/8 - 27/16]
dN4 = [lambda r : -81*r**2/16 - 9*r/8 + 27/16]

ddN1 = [lambda r : 9/8 - 27*r/8]
ddN2 = [lambda r : 27*r/8 + 9/8]
ddN3 = [lambda r : 81*r/8 - 9/8]
ddN4 = [lambda r : -81*r/8 - 9/8]

dddN1 = [lambda r : -27/8]
dddN2 = [lambda r : 27/8]
dddN3 = [lambda r : 81/8]
dddN4 = [lambda r : -81/8]

ddddN1 = [lambda r : 0]
ddddN2 = [lambda r : 0]
ddddN3 = [lambda r : 0]
ddddN4 = [lambda r : 0]



============= SEG4 EulerBernoulli =============
N1 = lambda r : 891*r**7/512 - 729*r**6/512 - 1413*r**5/512 + 1215*r**4/512 + 137207031249999*r**3/250000000000000 - 237304687500001*r**2/500000000000000 - 292968749999991*r/10000000000000000 + 253906250000009/10000000000000000
N2 = lambda r : 81*r**7/512 - 81*r**6/512 - 99*r**5/512 + 99*r**4/512 + 92773437499999*r**3/2500000000000000 - 185546875000001*r**2/5000000000000000 - r/512 + 1/512
N3 = lambda r : -891*r**7/512 - 729*r**6/512 + 275976562499999*r**5/100000000000000 + 1215*r**4/512 - 109765624999999*r**3/200000000000000 - 243*r**2/512 + 292968749999987*r/10000000000000000 + 13/512
N4 = lambda r : 81*r**7/512 + 81*r**6/512 - 99*r**5/512 - 99*r**4/512 + 92773437499999*r**3/2500000000000000 + 371093749999999*r**2/10000000000000000 - r/512 - 1/512
N5 = lambda r : 2187*r**7/512 + 729*r**6/512 - 5589*r**5/512 - 1215*r**4/512 + 450878906249999*r**3/50000000000000 + 94921874999999*r**2/200000000000000 - 1215*r/512 + 474609375000003/1000000000000000
N6 = lambda r : 729*r**7/512 - 243*r**6/512 - 1539*r**5/512 + 513*r**4/512 + 891*r**3/512 - 290039062500001*r**2/500000000000000 - 158203124999999*r/1000000000000000 + 527343750000009/10000000000000000
N7 = lambda r : -2187*r**7/512 + 729*r**6/512 + 5589*r**5/512 - 1215*r**4/512 - 450878906249999*r**3/50000000000000 + 474609375000007*r**2/1000000000000000 + 1215*r/512 + 118652343749999/250000000000000
N8 = lambda r : 729*r**7/512 + 243*r**6/512 - 300585937499999*r**5/100000000000000 - 513*r**4/512 + 174023437499999*r**3/100000000000000 + 290039062499999*r**2/500000000000000 - 79101562499999*r/500000000000000 - 527343749999993/10000000000000000

dN1 = [lambda r : 6237*r**6/512 - 2187*r**5/256 - 7065*r**4/512 + 1215*r**3/128 + 411621093749997*r**2/250000000000000 - 237304687500001*r/250000000000000 - 292968749999991/10000000000000000]
dN2 = [lambda r : 567*r**6/512 - 243*r**5/256 - 495*r**4/512 + 99*r**3/128 + 278320312499997*r**2/2500000000000000 - 185546875000001*r/2500000000000000 - 1/512]
dN3 = [lambda r : -6237*r**6/512 - 2187*r**5/256 + 275976562499999*r**4/20000000000000 + 1215*r**3/128 - 329296874999997*r**2/200000000000000 - 243*r/256 + 292968749999987/10000000000000000]
dN4 = [lambda r : 567*r**6/512 + 243*r**5/256 - 495*r**4/512 - 99*r**3/128 + 278320312499997*r**2/2500000000000000 + 371093749999999*r/5000000000000000 - 1/512]
dN5 = [lambda r : 15309*r**6/512 + 2187*r**5/256 - 27945*r**4/512 - 1215*r**3/128 + 1352636718749997*r**2/50000000000000 + 94921874999999*r/100000000000000 - 1215/512]
dN6 = [lambda r : 5103*r**6/512 - 729*r**5/256 - 7695*r**4/512 + 513*r**3/128 + 2673*r**2/512 - 290039062500001*r/250000000000000 - 158203124999999/1000000000000000]
dN7 = [lambda r : -15309*r**6/512 + 2187*r**5/256 + 27945*r**4/512 - 1215*r**3/128 - 1352636718749997*r**2/50000000000000 + 474609375000007*r/500000000000000 + 1215/512]
dN8 = [lambda r : 5103*r**6/512 + 729*r**5/256 - 300585937499999*r**4/20000000000000 - 513*r**3/128 + 522070312499997*r**2/100000000000000 + 290039062499999*r/250000000000000 - 79101562499999/500000000000000]

ddN1 = [lambda r : 18711*r**5/256 - 10935*r**4/256 - 7065*r**3/128 + 3645*r**2/128 + 411621093749997*r/125000000000000 - 237304687500001/250000000000000]
ddN2 = [lambda r : 1701*r**5/256 - 1215*r**4/256 - 495*r**3/128 + 297*r**2/128 + 278320312499997*r/1250000000000000 - 185546875000001/2500000000000000]
ddN3 = [lambda r : -18711*r**5/256 - 10935*r**4/256 + 275976562499999*r**3/5000000000000 + 3645*r**2/128 - 329296874999997*r/100000000000000 - 243/256]
ddN4 = [lambda r : 1701*r**5/256 + 1215*r**4/256 - 495*r**3/128 - 297*r**2/128 + 278320312499997*r/1250000000000000 + 371093749999999/5000000000000000]
ddN5 = [lambda r : 45927*r**5/256 + 10935*r**4/256 - 27945*r**3/128 - 3645*r**2/128 + 1352636718749997*r/25000000000000 + 94921874999999/100000000000000]
ddN6 = [lambda r : 15309*r**5/256 - 3645*r**4/256 - 7695*r**3/128 + 1539*r**2/128 + 2673*r/256 - 290039062500001/250000000000000]
ddN7 = [lambda r : -45927*r**5/256 + 10935*r**4/256 + 27945*r**3/128 - 3645*r**2/128 - 1352636718749997*r/25000000000000 + 474609375000007/500000000000000]
ddN8 = [lambda r : 15309*r**5/256 + 3645*r**4/256 - 300585937499999*r**3/5000000000000 - 1539*r**2/128 + 522070312499997*r/50000000000000 + 290039062499999/250000000000000]

dddN1 = [lambda r : 93555*r**4/256 - 10935*r**3/64 - 21195*r**2/128 + 3645*r/64 + 411621093749997/125000000000000]
dddN2 = [lambda r : 8505*r**4/256 - 1215*r**3/64 - 1485*r**2/128 + 297*r/64 + 278320312499997/1250000000000000]
dddN3 = [lambda r : -93555*r**4/256 - 10935*r**3/64 + 827929687499997*r**2/5000000000000 + 3645*r/64 - 329296874999997/100000000000000]
dddN4 = [lambda r : 8505*r**4/256 + 1215*r**3/64 - 1485*r**2/128 - 297*r/64 + 278320312499997/1250000000000000]
dddN5 = [lambda r : 229635*r**4/256 + 10935*r**3/64 - 83835*r**2/128 - 3645*r/64 + 1352636718749997/25000000000000]
dddN6 = [lambda r : 76545*r**4/256 - 3645*r**3/64 - 23085*r**2/128 + 1539*r/64 + 2673/256]
dddN7 = [lambda r : -229635*r**4/256 + 10935*r**3/64 + 83835*r**2/128 - 3645*r/64 - 1352636718749997/25000000000000]
dddN8 = [lambda r : 76545*r**4/256 + 3645*r**3/64 - 901757812499997*r**2/5000000000000 - 1539*r/64 + 522070312499997/50000000000000]

ddddN1 = [lambda r : 93555*r**3/64 - 32805*r**2/64 - 21195*r/64 + 3645/64]
ddddN2 = [lambda r : 8505*r**3/64 - 3645*r**2/64 - 1485*r/64 + 297/64]
ddddN3 = [lambda r : -93555*r**3/64 - 32805*r**2/64 + 827929687499997*r/2500000000000 + 3645/64]
ddddN4 = [lambda r : 8505*r**3/64 + 3645*r**2/64 - 1485*r/64 - 297/64]
ddddN5 = [lambda r : 229635*r**3/64 + 32805*r**2/64 - 83835*r/64 - 3645/64]
ddddN6 = [lambda r : 76545*r**3/64 - 10935*r**2/64 - 23085*r/64 + 1539/64]
ddddN7 = [lambda r : -229635*r**3/64 + 32805*r**2/64 + 83835*r/64 - 3645/64]
ddddN8 = [lambda r : 76545*r**3/64 + 10935*r**2/64 - 901757812499997*r/2500000000000 - 1539/64]



==================== SEG5 ====================
N1 = lambda r : 2*r**4/3 - 2*r**3/3 - r**2/6 + r/6
N2 = lambda r : 2*r**4/3 + 2*r**3/3 - r**2/6 - r/6
N3 = lambda r : -8*r**4/3 + 4*r**3/3 + 8*r**2/3 - 4*r/3
N4 = lambda r : 4*r**4 - 5*r**2 + 1
N5 = lambda r : -8*r**4/3 - 4*r**3/3 + 8*r**2/3 + 4*r/3

dN1 = [lambda r : 8*r**3/3 - 2*r**2 - r/3 + 1/6]
dN2 = [lambda r : 8*r**3/3 + 2*r**2 - r/3 - 1/6]
dN3 = [lambda r : -32*r**3/3 + 4*r**2 + 16*r/3 - 4/3]
dN4 = [lambda r : 16*r**3 - 10*r]
dN5 = [lambda r : -32*r**3/3 - 4*r**2 + 16*r/3 + 4/3]

ddN1 = [lambda r : 8*r**2 - 4*r - 1/3]
ddN2 = [lambda r : 8*r**2 + 4*r - 1/3]
ddN3 = [lambda r : -32*r**2 + 8*r + 16/3]
ddN4 = [lambda r : 48*r**2 - 10]
ddN5 = [lambda r : -32*r**2 - 8*r + 16/3]

dddN1 = [lambda r : 16*r - 4]
dddN2 = [lambda r : 16*r + 4]
dddN3 = [lambda r : 8 - 64*r]
dddN4 = [lambda r : 96*r]
dddN5 = [lambda r : -64*r - 8]

ddddN1 = [lambda r : 16]
ddddN2 = [lambda r : 16]
ddddN3 = [lambda r : -64]
ddddN4 = [lambda r : 96]
ddddN5 = [lambda r : -64]



============= SEG5 EulerBernoulli =============
N1 = lambda r : 100*r**9/27 - 162962962962963*r**8/50000000000000 - 58*r**7/9 + 52*r**6/9 + 91*r**5/36 - 41*r**4/18 - 31*r**3/108 + 7*r**2/27
N2 = lambda r : 2*r**9/9 - 2*r**8/9 - r**7/3 + r**6/3 + r**5/8 - r**4/8 - r**3/72 + r**2/72
N3 = lambda r : -100*r**9/27 - 162962962962963*r**8/50000000000000 + 58*r**7/9 + 52*r**6/9 - 91*r**5/36 - 41*r**4/18 + 31*r**3/108 + 7*r**2/27
N4 = lambda r : 2*r**9/9 + 2*r**8/9 - r**7/3 - r**6/3 + r**5/8 + r**4/8 - r**3/72 - r**2/72
N5 = lambda r : 640*r**9/27 - 128*r**8/27 - 544*r**7/9 + 128*r**6/9 + 448*r**5/9 - 128*r**4/9 - 352*r**3/27 + 128*r**2/27
N6 = lambda r : 32*r**9/9 - 16*r**8/9 - 8*r**7 + 4*r**6 + 16*r**5/3 - 8*r**4/3 - 8*r**3/9 + 4*r**2/9
N7 = lambda r : 16*r**8 - 40*r**6 + 33*r**4 - 10*r**2 + 1
N8 = lambda r : 8*r**9 - 20*r**7 + 33*r**5/2 - 5*r**3 + r/2
N9 = lambda r : -640*r**9/27 - 128*r**8/27 + 544*r**7/9 + 128*r**6/9 - 448*r**5/9 - 128*r**4/9 + 352*r**3/27 + 128*r**2/27
N10 = lambda r : 32*r**9/9 + 16*r**8/9 - 8*r**7 - 4*r**6 + 16*r**5/3 + 8*r**4/3 - 8*r**3/9 - 4*r**2/9

dN1 = [lambda r : 100*r**8/3 - 162962962962963*r**7/6250000000000 - 406*r**6/9 + 104*r**5/3 + 455*r**4/36 - 82*r**3/9 - 31*r**2/36 + 14*r/27]
dN2 = [lambda r : 2*r**8 - 16*r**7/9 - 7*r**6/3 + 2*r**5 + 5*r**4/8 - r**3/2 - r**2/24 + r/36]
dN3 = [lambda r : -100*r**8/3 - 162962962962963*r**7/6250000000000 + 406*r**6/9 + 104*r**5/3 - 455*r**4/36 - 82*r**3/9 + 31*r**2/36 + 14*r/27]
dN4 = [lambda r : 2*r**8 + 16*r**7/9 - 7*r**6/3 - 2*r**5 + 5*r**4/8 + r**3/2 - r**2/24 - r/36]
dN5 = [lambda r : 640*r**8/3 - 1024*r**7/27 - 3808*r**6/9 + 256*r**5/3 + 2240*r**4/9 - 512*r**3/9 - 352*r**2/9 + 256*r/27]
dN6 = [lambda r : 32*r**8 - 128*r**7/9 - 56*r**6 + 24*r**5 + 80*r**4/3 - 32*r**3/3 - 8*r**2/3 + 8*r/9]
dN7 = [lambda r : 128*r**7 - 240*r**5 + 132*r**3 - 20*r]
dN8 = [lambda r : 72*r**8 - 140*r**6 + 165*r**4/2 - 15*r**2 + 1/2]
dN9 = [lambda r : -640*r**8/3 - 1024*r**7/27 + 3808*r**6/9 + 256*r**5/3 - 2240*r**4/9 - 512*r**3/9 + 352*r**2/9 + 256*r/27]
dN10 = [lambda r : 32*r**8 + 128*r**7/9 - 56*r**6 - 24*r**5 + 80*r**4/3 + 32*r**3/3 - 8*r**2/3 - 8*r/9]

ddN1 = [lambda r : 800*r**7/3 - 1140740740740741*r**6/6250000000000 - 812*r**5/3 + 520*r**4/3 + 455*r**3/9 - 82*r**2/3 - 31*r/18 + 14/27]
ddN2 = [lambda r : 16*r**7 - 112*r**6/9 - 14*r**5 + 10*r**4 + 5*r**3/2 - 3*r**2/2 - r/12 + 1/36]
ddN3 = [lambda r : -800*r**7/3 - 1140740740740741*r**6/6250000000000 + 812*r**5/3 + 520*r**4/3 - 455*r**3/9 - 82*r**2/3 + 31*r/18 + 14/27]
ddN4 = [lambda r : 16*r**7 + 112*r**6/9 - 14*r**5 - 10*r**4 + 5*r**3/2 + 3*r**2/2 - r/12 - 1/36]
ddN5 = [lambda r : 5120*r**7/3 - 7168*r**6/27 - 7616*r**5/3 + 1280*r**4/3 + 8960*r**3/9 - 512*r**2/3 - 704*r/9 + 256/27]
ddN6 = [lambda r : 256*r**7 - 896*r**6/9 - 336*r**5 + 120*r**4 + 320*r**3/3 - 32*r**2 - 16*r/3 + 8/9]
ddN7 = [lambda r : 896*r**6 - 1200*r**4 + 396*r**2 - 20]
ddN8 = [lambda r : 576*r**7 - 840*r**5 + 330*r**3 - 30*r]
ddN9 = [lambda r : -5120*r**7/3 - 7168*r**6/27 + 7616*r**5/3 + 1280*r**4/3 - 8960*r**3/9 - 512*r**2/3 + 704*r/9 + 256/27]
ddN10 = [lambda r : 256*r**7 + 896*r**6/9 - 336*r**5 - 120*r**4 + 320*r**3/3 + 32*r**2 - 16*r/3 - 8/9]

dddN1 = [lambda r : 5600*r**6/3 - 3422222222222223*r**5/3125000000000 - 4060*r**4/3 + 2080*r**3/3 + 455*r**2/3 - 164*r/3 - 31/18]
dddN2 = [lambda r : 112*r**6 - 224*r**5/3 - 70*r**4 + 40*r**3 + 15*r**2/2 - 3*r - 1/12]
dddN3 = [lambda r : -5600*r**6/3 - 3422222222222223*r**5/3125000000000 + 4060*r**4/3 + 2080*r**3/3 - 455*r**2/3 - 164*r/3 + 31/18]
dddN4 = [lambda r : 112*r**6 + 224*r**5/3 - 70*r**4 - 40*r**3 + 15*r**2/2 + 3*r - 1/12]
dddN5 = [lambda r : 35840*r**6/3 - 14336*r**5/9 - 38080*r**4/3 + 5120*r**3/3 + 8960*r**2/3 - 1024*r/3 - 704/9]
dddN6 = [lambda r : 1792*r**6 - 1792*r**5/3 - 1680*r**4 + 480*r**3 + 320*r**2 - 64*r - 16/3]
dddN7 = [lambda r : 5376*r**5 - 4800*r**3 + 792*r]
dddN8 = [lambda r : 4032*r**6 - 4200*r**4 + 990*r**2 - 30]
dddN9 = [lambda r : -35840*r**6/3 - 14336*r**5/9 + 38080*r**4/3 + 5120*r**3/3 - 8960*r**2/3 - 1024*r/3 + 704/9]
dddN10 = [lambda r : 1792*r**6 + 1792*r**5/3 - 1680*r**4 - 480*r**3 + 320*r**2 + 64*r - 16/3]

ddddN1 = [lambda r : 11200*r**5 - 3422222222222223*r**4/625000000000 - 16240*r**3/3 + 2080*r**2 + 910*r/3 - 164/3]
ddddN2 = [lambda r : 672*r**5 - 1120*r**4/3 - 280*r**3 + 120*r**2 + 15*r - 3]
ddddN3 = [lambda r : -11200*r**5 - 3422222222222223*r**4/625000000000 + 16240*r**3/3 + 2080*r**2 - 910*r/3 - 164/3]
ddddN4 = [lambda r : 672*r**5 + 1120*r**4/3 - 280*r**3 - 120*r**2 + 15*r + 3]
ddddN5 = [lambda r : 71680*r**5 - 71680*r**4/9 - 152320*r**3/3 + 5120*r**2 + 17920*r/3 - 1024/3]
ddddN6 = [lambda r : 10752*r**5 - 8960*r**4/3 - 6720*r**3 + 1440*r**2 + 640*r - 64]
ddddN7 = [lambda r : 26880*r**4 - 14400*r**2 + 792]
ddddN8 = [lambda r : 24192*r**5 - 16800*r**3 + 1980*r]
ddddN9 = [lambda r : -71680*r**5 - 71680*r**4/9 + 152320*r**3/3 + 5120*r**2 - 17920*r/3 - 1024/3]
ddddN10 = [lambda r : 10752*r**5 + 8960*r**4/3 - 6720*r**3 - 1440*r**2 + 640*r + 64]



==================== TRI3 ====================
N1 = lambda r, s : -r - s + 1
N2 = lambda r, s : r
N3 = lambda r, s : s

dN1 = [lambda r, s : -1, lambda r, s : -1]
dN2 = [lambda r, s : 1, lambda r, s : 0]
dN3 = [lambda r, s : 0, lambda r, s : 1]

ddN1 = [lambda r, s : 0, lambda r, s : 0]
ddN2 = [lambda r, s : 0, lambda r, s : 0]
ddN3 = [lambda r, s : 0, lambda r, s : 0]

dddN1 = [lambda r, s : 0, lambda r, s : 0]
dddN2 = [lambda r, s : 0, lambda r, s : 0]
dddN3 = [lambda r, s : 0, lambda r, s : 0]

ddddN1 = [lambda r, s : 0, lambda r, s : 0]
ddddN2 = [lambda r, s : 0, lambda r, s : 0]
ddddN3 = [lambda r, s : 0, lambda r, s : 0]



==================== TRI6 ====================
N1 = lambda r, s : (r + s - 1)*(2*r + 2*s - 1)
N2 = lambda r, s : r*(2*r - 1)
N3 = lambda r, s : s*(2*s - 1)
N4 = lambda r, s : -4*r*(r + s - 1)
N5 = lambda r, s : 4*r*s
N6 = lambda r, s : -4*s*(r + s - 1)

dN1 = [lambda r, s : 4*r + 4*s - 3, lambda r, s : 4*r + 4*s - 3]
dN2 = [lambda r, s : 4*r - 1, lambda r, s : 0]
dN3 = [lambda r, s : 0, lambda r, s : 4*s - 1]
dN4 = [lambda r, s : -8*r - 4*s + 4, lambda r, s : -4*r]
dN5 = [lambda r, s : 4*s, lambda r, s : 4*r]
dN6 = [lambda r, s : -4*s, lambda r, s : -4*r - 8*s + 4]

ddN1 = [lambda r, s : 4, lambda r, s : 4]
ddN2 = [lambda r, s : 4, lambda r, s : 0]
ddN3 = [lambda r, s : 0, lambda r, s : 4]
ddN4 = [lambda r, s : -8, lambda r, s : 0]
ddN5 = [lambda r, s : 0, lambda r, s : 0]
ddN6 = [lambda r, s : 0, lambda r, s : -8]

dddN1 = [lambda r, s : 0, lambda r, s : 0]
dddN2 = [lambda r, s : 0, lambda r, s : 0]
dddN3 = [lambda r, s : 0, lambda r, s : 0]
dddN4 = [lambda r, s : 0, lambda r, s : 0]
dddN5 = [lambda r, s : 0, lambda r, s : 0]
dddN6 = [lambda r, s : 0, lambda r, s : 0]

ddddN1 = [lambda r, s : 0, lambda r, s : 0]
ddddN2 = [lambda r, s : 0, lambda r, s : 0]
ddddN3 = [lambda r, s : 0, lambda r, s : 0]
ddddN4 = [lambda r, s : 0, lambda r, s : 0]
ddddN5 = [lambda r, s : 0, lambda r, s : 0]
ddddN6 = [lambda r, s : 0, lambda r, s : 0]



==================== TRI10 ====================
N1 = lambda r, s : -9*r**3/2 - 27*r**2*s/2 + 9*r**2 - 27*r*s**2/2 + 18*r*s - 11*r/2 - 9*s**3/2 + 9*s**2 - 11*s/2 + 1
N2 = lambda r, s : 9*r**3/2 - 9*r**2/2 + r
N3 = lambda r, s : 9*s**3/2 - 9*s**2/2 + s
N4 = lambda r, s : 27*r**3/2 + 27*r**2*s - 45*r**2/2 + 27*r*s**2/2 - 45*r*s/2 + 9*r
N5 = lambda r, s : -27*r**3/2 - 27*r**2*s/2 + 18*r**2 + 9*r*s/2 - 9*r/2
N6 = lambda r, s : 27*r**2*s/2 - 9*r*s/2
N7 = lambda r, s : 27*r*s**2/2 - 9*r*s/2
N8 = lambda r, s : -27*r*s**2/2 + 9*r*s/2 - 27*s**3/2 + 18*s**2 - 9*s/2
N9 = lambda r, s : 27*r**2*s/2 + 27*r*s**2 - 45*r*s/2 + 27*s**3/2 - 45*s**2/2 + 9*s
N10 = lambda r, s : -27*r**2*s - 27*r*s**2 + 27*r*s

dN1 = [lambda r, s : -27*r**2/2 - 27*r*s + 18*r - 27*s**2/2 + 18*s - 11/2, lambda r, s : -27*r**2/2 - 27*r*s + 18*r - 27*s**2/2 + 18*s - 11/2]
dN2 = [lambda r, s : 27*r**2/2 - 9*r + 1, lambda r, s : 0]
dN3 = [lambda r, s : 0, lambda r, s : 27*s**2/2 - 9*s + 1]
dN4 = [lambda r, s : 81*r**2/2 + 54*r*s - 45*r + 27*s**2/2 - 45*s/2 + 9, lambda r, s : 27*r**2 + 27*r*s - 45*r/2]
dN5 = [lambda r, s : -81*r**2/2 - 27*r*s + 36*r + 9*s/2 - 9/2, lambda r, s : -27*r**2/2 + 9*r/2]
dN6 = [lambda r, s : 27*r*s - 9*s/2, lambda r, s : 27*r**2/2 - 9*r/2]
dN7 = [lambda r, s : 27*s**2/2 - 9*s/2, lambda r, s : 27*r*s - 9*r/2]
dN8 = [lambda r, s : -27*s**2/2 + 9*s/2, lambda r, s : -27*r*s + 9*r/2 - 81*s**2/2 + 36*s - 9/2]
dN9 = [lambda r, s : 27*r*s + 27*s**2 - 45*s/2, lambda r, s : 27*r**2/2 + 54*r*s - 45*r/2 + 81*s**2/2 - 45*s + 9]
dN10 = [lambda r, s : -54*r*s - 27*s**2 + 27*s, lambda r, s : -27*r**2 - 54*r*s + 27*r]

ddN1 = [lambda r, s : -27*r - 27*s + 18, lambda r, s : -27*r - 27*s + 18]
ddN2 = [lambda r, s : 27*r - 9, lambda r, s : 0]
ddN3 = [lambda r, s : 0, lambda r, s : 27*s - 9]
ddN4 = [lambda r, s : 81*r + 54*s - 45, lambda r, s : 27*r]
ddN5 = [lambda r, s : -81*r - 27*s + 36, lambda r, s : 0]
ddN6 = [lambda r, s : 27*s, lambda r, s : 0]
ddN7 = [lambda r, s : 0, lambda r, s : 27*r]
ddN8 = [lambda r, s : 0, lambda r, s : -27*r - 81*s + 36]
ddN9 = [lambda r, s : 27*s, lambda r, s : 54*r + 81*s - 45]
ddN10 = [lambda r, s : -54*s, lambda r, s : -54*r]

dddN1 = [lambda r, s : -27, lambda r, s : -27]
dddN2 = [lambda r, s : 27, lambda r, s : 0]
dddN3 = [lambda r, s : 0, lambda r, s : 27]
dddN4 = [lambda r, s : 81, lambda r, s : 0]
dddN5 = [lambda r, s : -81, lambda r, s : 0]
dddN6 = [lambda r, s : 0, lambda r, s : 0]
dddN7 = [lambda r, s : 0, lambda r, s : 0]
dddN8 = [lambda r, s : 0, lambda r, s : -81]
dddN9 = [lambda r, s : 0, lambda r, s : 81]
dddN10 = [lambda r, s : 0, lambda r, s : 0]

ddddN1 = [lambda r, s : 0, lambda r, s : 0]
ddddN2 = [lambda r, s : 0, lambda r, s : 0]
ddddN3 = [lambda r, s : 0, lambda r, s : 0]
ddddN4 = [lambda r, s : 0, lambda r, s : 0]
ddddN5 = [lambda r, s : 0, lambda r, s : 0]
ddddN6 = [lambda r, s : 0, lambda r, s : 0]
ddddN7 = [lambda r, s : 0, lambda r, s : 0]
ddddN8 = [lambda r, s : 0, lambda r, s : 0]
ddddN9 = [lambda r, s : 0, lambda r, s : 0]
ddddN10 = [lambda r, s : 0, lambda r, s : 0]



==================== TRI15 ====================
N1 = lambda r, s : 32*r**4/3 + 128*r**3*s/3 - 80*r**3/3 + 64*r**2*s**2 - 80*r**2*s + 70*r**2/3 + 128*r*s**3/3 - 80*r*s**2 + 140*r*s/3 - 25*r/3 + 32*s**4/3 - 80*s**3/3 + 70*s**2/3 - 25*s/3 + 1
N2 = lambda r, s : 32*r**4/3 - 16*r**3 + 22*r**2/3 - r
N3 = lambda r, s : 32*s**4/3 - 16*s**3 + 22*s**2/3 - s
N4 = lambda r, s : -128*r**4/3 - 128*r**3*s + 96*r**3 - 128*r**2*s**2 + 192*r**2*s - 208*r**2/3 - 128*r*s**3/3 + 96*r*s**2 - 208*r*s/3 + 16*r
N5 = lambda r, s : 64*r**4 + 128*r**3*s - 128*r**3 + 64*r**2*s**2 - 144*r**2*s + 76*r**2 - 16*r*s**2 + 28*r*s - 12*r
N6 = lambda r, s : -128*r**4/3 - 128*r**3*s/3 + 224*r**3/3 + 32*r**2*s - 112*r**2/3 - 16*r*s/3 + 16*r/3
N7 = lambda r, s : 128*r**3*s/3 - 32*r**2*s + 16*r*s/3
N8 = lambda r, s : 64*r**2*s**2 - 16*r**2*s - 16*r*s**2 + 4*r*s
N9 = lambda r, s : 128*r*s**3/3 - 32*r*s**2 + 16*r*s/3
N10 = lambda r, s : -128*r*s**3/3 + 32*r*s**2 - 16*r*s/3 - 128*s**4/3 + 224*s**3/3 - 112*s**2/3 + 16*s/3
N11 = lambda r, s : 64*r**2*s**2 - 16*r**2*s + 128*r*s**3 - 144*r*s**2 + 28*r*s + 64*s**4 - 128*s**3 + 76*s**2 - 12*s
N12 = lambda r, s : -128*r**3*s/3 - 128*r**2*s**2 + 96*r**2*s - 128*r*s**3 + 192*r*s**2 - 208*r*s/3 - 128*s**4/3 + 96*s**3 - 208*s**2/3 + 16*s
N13 = lambda r, s : 128*r**3*s + 256*r**2*s**2 - 224*r**2*s + 128*r*s**3 - 224*r*s**2 + 96*r*s
N14 = lambda r, s : -128*r**3*s - 128*r**2*s**2 + 160*r**2*s + 32*r*s**2 - 32*r*s
N15 = lambda r, s : -128*r**2*s**2 + 32*r**2*s - 128*r*s**3 + 160*r*s**2 - 32*r*s

dN1 = [lambda r, s : 128*r**3/3 + 128*r**2*s - 80*r**2 + 128*r*s**2 - 160*r*s + 140*r/3 + 128*s**3/3 - 80*s**2 + 140*s/3 - 25/3, lambda r, s : 128*r**3/3 + 128*r**2*s - 80*r**2 + 128*r*s**2 - 160*r*s + 140*r/3 + 128*s**3/3 - 80*s**2 + 140*s/3 - 25/3]
dN2 = [lambda r, s : 128*r**3/3 - 48*r**2 + 44*r/3 - 1, lambda r, s : 0]
dN3 = [lambda r, s : 0, lambda r, s : 128*s**3/3 - 48*s**2 + 44*s/3 - 1]
dN4 = [lambda r, s : -512*r**3/3 - 384*r**2*s + 288*r**2 - 256*r*s**2 + 384*r*s - 416*r/3 - 128*s**3/3 + 96*s**2 - 208*s/3 + 16, lambda r, s : -128*r**3 - 256*r**2*s + 192*r**2 - 128*r*s**2 + 192*r*s - 208*r/3]
dN5 = [lambda r, s : 256*r**3 + 384*r**2*s - 384*r**2 + 128*r*s**2 - 288*r*s + 152*r - 16*s**2 + 28*s - 12, lambda r, s : 128*r**3 + 128*r**2*s - 144*r**2 - 32*r*s + 28*r]
dN6 = [lambda r, s : -512*r**3/3 - 128*r**2*s + 224*r**2 + 64*r*s - 224*r/3 - 16*s/3 + 16/3, lambda r, s : -128*r**3/3 + 32*r**2 - 16*r/3]
dN7 = [lambda r, s : 128*r**2*s - 64*r*s + 16*s/3, lambda r, s : 128*r**3/3 - 32*r**2 + 16*r/3]
dN8 = [lambda r, s : 128*r*s**2 - 32*r*s - 16*s**2 + 4*s, lambda r, s : 128*r**2*s - 16*r**2 - 32*r*s + 4*r]
dN9 = [lambda r, s : 128*s**3/3 - 32*s**2 + 16*s/3, lambda r, s : 128*r*s**2 - 64*r*s + 16*r/3]
dN10 = [lambda r, s : -128*s**3/3 + 32*s**2 - 16*s/3, lambda r, s : -128*r*s**2 + 64*r*s - 16*r/3 - 512*s**3/3 + 224*s**2 - 224*s/3 + 16/3]
dN11 = [lambda r, s : 128*r*s**2 - 32*r*s + 128*s**3 - 144*s**2 + 28*s, lambda r, s : 128*r**2*s - 16*r**2 + 384*r*s**2 - 288*r*s + 28*r + 256*s**3 - 384*s**2 + 152*s - 12]
dN12 = [lambda r, s : -128*r**2*s - 256*r*s**2 + 192*r*s - 128*s**3 + 192*s**2 - 208*s/3, lambda r, s : -128*r**3/3 - 256*r**2*s + 96*r**2 - 384*r*s**2 + 384*r*s - 208*r/3 - 512*s**3/3 + 288*s**2 - 416*s/3 + 16]
dN13 = [lambda r, s : 384*r**2*s + 512*r*s**2 - 448*r*s + 128*s**3 - 224*s**2 + 96*s, lambda r, s : 128*r**3 + 512*r**2*s - 224*r**2 + 384*r*s**2 - 448*r*s + 96*r]
dN14 = [lambda r, s : -384*r**2*s - 256*r*s**2 + 320*r*s + 32*s**2 - 32*s, lambda r, s : -128*r**3 - 256*r**2*s + 160*r**2 + 64*r*s - 32*r]
dN15 = [lambda r, s : -256*r*s**2 + 64*r*s - 128*s**3 + 160*s**2 - 32*s, lambda r, s : -256*r**2*s + 32*r**2 - 384*r*s**2 + 320*r*s - 32*r]

ddN1 = [lambda r, s : 128*r**2 + 256*r*s - 160*r + 128*s**2 - 160*s + 140/3, lambda r, s : 128*r**2 + 256*r*s - 160*r + 128*s**2 - 160*s + 140/3]
ddN2 = [lambda r, s : 128*r**2 - 96*r + 44/3, lambda r, s : 0]
ddN3 = [lambda r, s : 0, lambda r, s : 128*s**2 - 96*s + 44/3]
ddN4 = [lambda r, s : -512*r**2 - 768*r*s + 576*r - 256*s**2 + 384*s - 416/3, lambda r, s : -256*r**2 - 256*r*s + 192*r]
ddN5 = [lambda r, s : 768*r**2 + 768*r*s - 768*r + 128*s**2 - 288*s + 152, lambda r, s : 128*r**2 - 32*r]
ddN6 = [lambda r, s : -512*r**2 - 256*r*s + 448*r + 64*s - 224/3, lambda r, s : 0]
ddN7 = [lambda r, s : 256*r*s - 64*s, lambda r, s : 0]
ddN8 = [lambda r, s : 128*s**2 - 32*s, lambda r, s : 128*r**2 - 32*r]
ddN9 = [lambda r, s : 0, lambda r, s : 256*r*s - 64*r]
ddN10 = [lambda r, s : 0, lambda r, s : -256*r*s + 64*r - 512*s**2 + 448*s - 224/3]
ddN11 = [lambda r, s : 128*s**2 - 32*s, lambda r, s : 128*r**2 + 768*r*s - 288*r + 768*s**2 - 768*s + 152]
ddN12 = [lambda r, s : -256*r*s - 256*s**2 + 192*s, lambda r, s : -256*r**2 - 768*r*s + 384*r - 512*s**2 + 576*s - 416/3]
ddN13 = [lambda r, s : 768*r*s + 512*s**2 - 448*s, lambda r, s : 512*r**2 + 768*r*s - 448*r]
ddN14 = [lambda r, s : -768*r*s - 256*s**2 + 320*s, lambda r, s : -256*r**2 + 64*r]
ddN15 = [lambda r, s : -256*s**2 + 64*s, lambda r, s : -256*r**2 - 768*r*s + 320*r]

dddN1 = [lambda r, s : 256*r + 256*s - 160, lambda r, s : 256*r + 256*s - 160]
dddN2 = [lambda r, s : 256*r - 96, lambda r, s : 0]
dddN3 = [lambda r, s : 0, lambda r, s : 256*s - 96]
dddN4 = [lambda r, s : -1024*r - 768*s + 576, lambda r, s : -256*r]
dddN5 = [lambda r, s : 1536*r + 768*s - 768, lambda r, s : 0]
dddN6 = [lambda r, s : -1024*r - 256*s + 448, lambda r, s : 0]
dddN7 = [lambda r, s : 256*s, lambda r, s : 0]
dddN8 = [lambda r, s : 0, lambda r, s : 0]
dddN9 = [lambda r, s : 0, lambda r, s : 256*r]
dddN10 = [lambda r, s : 0, lambda r, s : -256*r - 1024*s + 448]
dddN11 = [lambda r, s : 0, lambda r, s : 768*r + 1536*s - 768]
dddN12 = [lambda r, s : -256*s, lambda r, s : -768*r - 1024*s + 576]
dddN13 = [lambda r, s : 768*s, lambda r, s : 768*r]
dddN14 = [lambda r, s : -768*s, lambda r, s : 0]
dddN15 = [lambda r, s : 0, lambda r, s : -768*r]

ddddN1 = [lambda r, s : 256, lambda r, s : 256]
ddddN2 = [lambda r, s : 256, lambda r, s : 0]
ddddN3 = [lambda r, s : 0, lambda r, s : 256]
ddddN4 = [lambda r, s : -1024, lambda r, s : 0]
ddddN5 = [lambda r, s : 1536, lambda r, s : 0]
ddddN6 = [lambda r, s : -1024, lambda r, s : 0]
ddddN7 = [lambda r, s : 0, lambda r, s : 0]
ddddN8 = [lambda r, s : 0, lambda r, s : 0]
ddddN9 = [lambda r, s : 0, lambda r, s : 0]
ddddN10 = [lambda r, s : 0, lambda r, s : -1024]
ddddN11 = [lambda r, s : 0, lambda r, s : 1536]
ddddN12 = [lambda r, s : 0, lambda r, s : -1024]
ddddN13 = [lambda r, s : 0, lambda r, s : 0]
ddddN14 = [lambda r, s : 0, lambda r, s : 0]
ddddN15 = [lambda r, s : 0, lambda r, s : 0]



==================== QUAD4 ====================
N1 = lambda r, s : (r - 1)*(s - 1)/4
N2 = lambda r, s : -(r + 1)*(s - 1)/4
N3 = lambda r, s : (r + 1)*(s + 1)/4
N4 = lambda r, s : -(r - 1)*(s + 1)/4

dN1 = [lambda r, s : s/4 - 1/4, lambda r, s : r/4 - 1/4]
dN2 = [lambda r, s : 1/4 - s/4, lambda r, s : -r/4 - 1/4]
dN3 = [lambda r, s : s/4 + 1/4, lambda r, s : r/4 + 1/4]
dN4 = [lambda r, s : -s/4 - 1/4, lambda r, s : 1/4 - r/4]

ddN1 = [lambda r, s : 0, lambda r, s : 0]
ddN2 = [lambda r, s : 0, lambda r, s : 0]
ddN3 = [lambda r, s : 0, lambda r, s : 0]
ddN4 = [lambda r, s : 0, lambda r, s : 0]

dddN1 = [lambda r, s : 0, lambda r, s : 0]
dddN2 = [lambda r, s : 0, lambda r, s : 0]
dddN3 = [lambda r, s : 0, lambda r, s : 0]
dddN4 = [lambda r, s : 0, lambda r, s : 0]

ddddN1 = [lambda r, s : 0, lambda r, s : 0]
ddddN2 = [lambda r, s : 0, lambda r, s : 0]
ddddN3 = [lambda r, s : 0, lambda r, s : 0]
ddddN4 = [lambda r, s : 0, lambda r, s : 0]



==================== QUAD8 ====================
N1 = lambda r, s : -(r - 1)*(s - 1)*(r + s + 1)/4
N2 = lambda r, s : -(r + 1)*(s - 1)*(r - s - 1)/4
N3 = lambda r, s : (r + 1)*(s + 1)*(r + s - 1)/4
N4 = lambda r, s : (r - 1)*(s + 1)*(r - s + 1)/4
N5 = lambda r, s : (r - 1)*(r + 1)*(s - 1)/2
N6 = lambda r, s : -(r + 1)*(s - 1)*(s + 1)/2
N7 = lambda r, s : -(r - 1)*(r + 1)*(s + 1)/2
N8 = lambda r, s : (r - 1)*(s - 1)*(s + 1)/2

dN1 = [lambda r, s : -(r - 1)*(s - 1)/4 - (s - 1)*(r + s + 1)/4, lambda r, s : -(r - 1)*(s - 1)/4 - (r - 1)*(r + s + 1)/4]
dN2 = [lambda r, s : -(r + 1)*(s - 1)/4 - (s - 1)*(r - s - 1)/4, lambda r, s : (r + 1)*(s - 1)/4 - (r + 1)*(r - s - 1)/4]
dN3 = [lambda r, s : (r + 1)*(s + 1)/4 + (s + 1)*(r + s - 1)/4, lambda r, s : (r + 1)*(s + 1)/4 + (r + 1)*(r + s - 1)/4]
dN4 = [lambda r, s : (r - 1)*(s + 1)/4 + (s + 1)*(r - s + 1)/4, lambda r, s : -(r - 1)*(s + 1)/4 + (r - 1)*(r - s + 1)/4]
dN5 = [lambda r, s : (r - 1)*(s - 1)/2 + (r + 1)*(s - 1)/2, lambda r, s : (r - 1)*(r + 1)/2]
dN6 = [lambda r, s : -(s - 1)*(s + 1)/2, lambda r, s : -(r + 1)*(s - 1)/2 - (r + 1)*(s + 1)/2]
dN7 = [lambda r, s : -(r - 1)*(s + 1)/2 - (r + 1)*(s + 1)/2, lambda r, s : -(r - 1)*(r + 1)/2]
dN8 = [lambda r, s : (s - 1)*(s + 1)/2, lambda r, s : (r - 1)*(s - 1)/2 + (r - 1)*(s + 1)/2]

ddN1 = [lambda r, s : 1/2 - s/2, lambda r, s : 1/2 - r/2]
ddN2 = [lambda r, s : 1/2 - s/2, lambda r, s : r/2 + 1/2]
ddN3 = [lambda r, s : s/2 + 1/2, lambda r, s : r/2 + 1/2]
ddN4 = [lambda r, s : s/2 + 1/2, lambda r, s : 1/2 - r/2]
ddN5 = [lambda r, s : s - 1, lambda r, s : 0]
ddN6 = [lambda r, s : 0, lambda r, s : -r - 1]
ddN7 = [lambda r, s : -s - 1, lambda r, s : 0]
ddN8 = [lambda r, s : 0, lambda r, s : r - 1]

dddN1 = [lambda r, s : 0, lambda r, s : 0]
dddN2 = [lambda r, s : 0, lambda r, s : 0]
dddN3 = [lambda r, s : 0, lambda r, s : 0]
dddN4 = [lambda r, s : 0, lambda r, s : 0]
dddN5 = [lambda r, s : 0, lambda r, s : 0]
dddN6 = [lambda r, s : 0, lambda r, s : 0]
dddN7 = [lambda r, s : 0, lambda r, s : 0]
dddN8 = [lambda r, s : 0, lambda r, s : 0]

ddddN1 = [lambda r, s : 0, lambda r, s : 0]
ddddN2 = [lambda r, s : 0, lambda r, s : 0]
ddddN3 = [lambda r, s : 0, lambda r, s : 0]
ddddN4 = [lambda r, s : 0, lambda r, s : 0]
ddddN5 = [lambda r, s : 0, lambda r, s : 0]
ddddN6 = [lambda r, s : 0, lambda r, s : 0]
ddddN7 = [lambda r, s : 0, lambda r, s : 0]
ddddN8 = [lambda r, s : 0, lambda r, s : 0]



==================== QUAD9 ====================
N1 = lambda r, s : r*s*(r - 1)*(s - 1)/4
N2 = lambda r, s : r*s*(r + 1)*(s - 1)/4
N3 = lambda r, s : r*s*(r + 1)*(s + 1)/4
N4 = lambda r, s : r*s*(r - 1)*(s + 1)/4
N5 = lambda r, s : -s*(r - 1)*(r + 1)*(s - 1)/2
N6 = lambda r, s : -r*(r + 1)*(s - 1)*(s + 1)/2
N7 = lambda r, s : -s*(r - 1)*(r + 1)*(s + 1)/2
N8 = lambda r, s : -r*(r - 1)*(s - 1)*(s + 1)/2
N9 = lambda r, s : (r - 1)*(r + 1)*(s - 1)*(s + 1)

dN1 = [lambda r, s : r*s*(s - 1)/4 + s*(r - 1)*(s - 1)/4, lambda r, s : r*s*(r - 1)/4 + r*(r - 1)*(s - 1)/4]
dN2 = [lambda r, s : r*s*(s - 1)/4 + s*(r + 1)*(s - 1)/4, lambda r, s : r*s*(r + 1)/4 + r*(r + 1)*(s - 1)/4]
dN3 = [lambda r, s : r*s*(s + 1)/4 + s*(r + 1)*(s + 1)/4, lambda r, s : r*s*(r + 1)/4 + r*(r + 1)*(s + 1)/4]
dN4 = [lambda r, s : r*s*(s + 1)/4 + s*(r - 1)*(s + 1)/4, lambda r, s : r*s*(r - 1)/4 + r*(r - 1)*(s + 1)/4]
dN5 = [lambda r, s : -s*(r - 1)*(s - 1)/2 - s*(r + 1)*(s - 1)/2, lambda r, s : -s*(r - 1)*(r + 1)/2 - (r - 1)*(r + 1)*(s - 1)/2]
dN6 = [lambda r, s : -r*(s - 1)*(s + 1)/2 - (r + 1)*(s - 1)*(s + 1)/2, lambda r, s : -r*(r + 1)*(s - 1)/2 - r*(r + 1)*(s + 1)/2]
dN7 = [lambda r, s : -s*(r - 1)*(s + 1)/2 - s*(r + 1)*(s + 1)/2, lambda r, s : -s*(r - 1)*(r + 1)/2 - (r - 1)*(r + 1)*(s + 1)/2]
dN8 = [lambda r, s : -r*(s - 1)*(s + 1)/2 - (r - 1)*(s - 1)*(s + 1)/2, lambda r, s : -r*(r - 1)*(s - 1)/2 - r*(r - 1)*(s + 1)/2]
dN9 = [lambda r, s : (r - 1)*(s - 1)*(s + 1) + (r + 1)*(s - 1)*(s + 1), lambda r, s : (r - 1)*(r + 1)*(s - 1) + (r - 1)*(r + 1)*(s + 1)]

ddN1 = [lambda r, s : s*(s - 1)/2, lambda r, s : r*(r - 1)/2]
ddN2 = [lambda r, s : s*(s - 1)/2, lambda r, s : r*(r + 1)/2]
ddN3 = [lambda r, s : s*(s + 1)/2, lambda r, s : r*(r + 1)/2]
ddN4 = [lambda r, s : s*(s + 1)/2, lambda r, s : r*(r - 1)/2]
ddN5 = [lambda r, s : -s*(s - 1), lambda r, s : -(r - 1)*(r + 1)]
ddN6 = [lambda r, s : -(s - 1)*(s + 1), lambda r, s : -r*(r + 1)]
ddN7 = [lambda r, s : -s*(s + 1), lambda r, s : -(r - 1)*(r + 1)]
ddN8 = [lambda r, s : -(s - 1)*(s + 1), lambda r, s : -r*(r - 1)]
ddN9 = [lambda r, s : 2*(s - 1)*(s + 1), lambda r, s : 2*(r - 1)*(r + 1)]

dddN1 = [lambda r, s : 0, lambda r, s : 0]
dddN2 = [lambda r, s : 0, lambda r, s : 0]
dddN3 = [lambda r, s : 0, lambda r, s : 0]
dddN4 = [lambda r, s : 0, lambda r, s : 0]
dddN5 = [lambda r, s : 0, lambda r, s : 0]
dddN6 = [lambda r, s : 0, lambda r, s : 0]
dddN7 = [lambda r, s : 0, lambda r, s : 0]
dddN8 = [lambda r, s : 0, lambda r, s : 0]
dddN9 = [lambda r, s : 0, lambda r, s : 0]

ddddN1 = [lambda r, s : 0, lambda r, s : 0]
ddddN2 = [lambda r, s : 0, lambda r, s : 0]
ddddN3 = [lambda r, s : 0, lambda r, s : 0]
ddddN4 = [lambda r, s : 0, lambda r, s : 0]
ddddN5 = [lambda r, s : 0, lambda r, s : 0]
ddddN6 = [lambda r, s : 0, lambda r, s : 0]
ddddN7 = [lambda r, s : 0, lambda r, s : 0]
ddddN8 = [lambda r, s : 0, lambda r, s : 0]
ddddN9 = [lambda r, s : 0, lambda r, s : 0]



=================== TETRA4 ===================
N1 = lambda r, s, t : -r - s - t + 1
N2 = lambda r, s, t : r
N3 = lambda r, s, t : s
N4 = lambda r, s, t : t

dN1 = [lambda r, s, t : -1, lambda r, s, t : -1, lambda r, s, t : -1]
dN2 = [lambda r, s, t : 1, lambda r, s, t : 0, lambda r, s, t : 0]
dN3 = [lambda r, s, t : 0, lambda r, s, t : 1, lambda r, s, t : 0]
dN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 1]

ddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

dddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

ddddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]



=================== TETRA10 ===================
N1 = lambda r, s, t : (r + s + t - 1)*(2*r + 2*s + 2*t - 1)
N2 = lambda r, s, t : r*(2*r - 1)
N3 = lambda r, s, t : s*(2*s - 1)
N4 = lambda r, s, t : t*(2*t - 1)
N5 = lambda r, s, t : -4*r*(r + s + t - 1)
N6 = lambda r, s, t : 4*r*s
N7 = lambda r, s, t : -4*s*(r + s + t - 1)
N8 = lambda r, s, t : -4*t*(r + s + t - 1)
N9 = lambda r, s, t : 4*s*t
N10 = lambda r, s, t : 4*r*t

dN1 = [lambda r, s, t : 4*r + 4*s + 4*t - 3, lambda r, s, t : 4*r + 4*s + 4*t - 3, lambda r, s, t : 4*r + 4*s + 4*t - 3]
dN2 = [lambda r, s, t : 4*r - 1, lambda r, s, t : 0, lambda r, s, t : 0]
dN3 = [lambda r, s, t : 0, lambda r, s, t : 4*s - 1, lambda r, s, t : 0]
dN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 4*t - 1]
dN5 = [lambda r, s, t : -8*r - 4*s - 4*t + 4, lambda r, s, t : -4*r, lambda r, s, t : -4*r]
dN6 = [lambda r, s, t : 4*s, lambda r, s, t : 4*r, lambda r, s, t : 0]
dN7 = [lambda r, s, t : -4*s, lambda r, s, t : -4*r - 8*s - 4*t + 4, lambda r, s, t : -4*s]
dN8 = [lambda r, s, t : -4*t, lambda r, s, t : -4*t, lambda r, s, t : -4*r - 4*s - 8*t + 4]
dN9 = [lambda r, s, t : 0, lambda r, s, t : 4*t, lambda r, s, t : 4*s]
dN10 = [lambda r, s, t : 4*t, lambda r, s, t : 0, lambda r, s, t : 4*r]

ddN1 = [lambda r, s, t : 4, lambda r, s, t : 4, lambda r, s, t : 4]
ddN2 = [lambda r, s, t : 4, lambda r, s, t : 0, lambda r, s, t : 0]
ddN3 = [lambda r, s, t : 0, lambda r, s, t : 4, lambda r, s, t : 0]
ddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 4]
ddN5 = [lambda r, s, t : -8, lambda r, s, t : 0, lambda r, s, t : 0]
ddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN7 = [lambda r, s, t : 0, lambda r, s, t : -8, lambda r, s, t : 0]
ddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : -8]
ddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

dddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

ddddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]



==================== HEXA8 ====================
N1 = lambda r, s, t : -(r - 1)*(s - 1)*(t - 1)/8
N2 = lambda r, s, t : (r + 1)*(s - 1)*(t - 1)/8
N3 = lambda r, s, t : -(r + 1)*(s + 1)*(t - 1)/8
N4 = lambda r, s, t : (r - 1)*(s + 1)*(t - 1)/8
N5 = lambda r, s, t : (r - 1)*(s - 1)*(t + 1)/8
N6 = lambda r, s, t : -(r + 1)*(s - 1)*(t + 1)/8
N7 = lambda r, s, t : (r + 1)*(s + 1)*(t + 1)/8
N8 = lambda r, s, t : -(r - 1)*(s + 1)*(t + 1)/8

dN1 = [lambda r, s, t : -(s - 1)*(t - 1)/8, lambda r, s, t : -(r - 1)*(t - 1)/8, lambda r, s, t : -(r - 1)*(s - 1)/8]
dN2 = [lambda r, s, t : (s - 1)*(t - 1)/8, lambda r, s, t : (r + 1)*(t - 1)/8, lambda r, s, t : (r + 1)*(s - 1)/8]
dN3 = [lambda r, s, t : -(s + 1)*(t - 1)/8, lambda r, s, t : -(r + 1)*(t - 1)/8, lambda r, s, t : -(r + 1)*(s + 1)/8]
dN4 = [lambda r, s, t : (s + 1)*(t - 1)/8, lambda r, s, t : (r - 1)*(t - 1)/8, lambda r, s, t : (r - 1)*(s + 1)/8]
dN5 = [lambda r, s, t : (s - 1)*(t + 1)/8, lambda r, s, t : (r - 1)*(t + 1)/8, lambda r, s, t : (r - 1)*(s - 1)/8]
dN6 = [lambda r, s, t : -(s - 1)*(t + 1)/8, lambda r, s, t : -(r + 1)*(t + 1)/8, lambda r, s, t : -(r + 1)*(s - 1)/8]
dN7 = [lambda r, s, t : (s + 1)*(t + 1)/8, lambda r, s, t : (r + 1)*(t + 1)/8, lambda r, s, t : (r + 1)*(s + 1)/8]
dN8 = [lambda r, s, t : -(s + 1)*(t + 1)/8, lambda r, s, t : -(r - 1)*(t + 1)/8, lambda r, s, t : -(r - 1)*(s + 1)/8]

ddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

dddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

ddddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]



=================== HEXA20 ===================
N1 = lambda r, s, t : (r - 1)*(s - 1)*(t - 1)*(r + s + t + 2)/8
N2 = lambda r, s, t : (r + 1)*(s - 1)*(t - 1)*(r - s - t - 2)/8
N3 = lambda r, s, t : -(r + 1)*(s + 1)*(t - 1)*(r + s - t - 2)/8
N4 = lambda r, s, t : -(r - 1)*(s + 1)*(t - 1)*(r - s + t + 2)/8
N5 = lambda r, s, t : -(r - 1)*(s - 1)*(t + 1)*(r + s - t + 2)/8
N6 = lambda r, s, t : -(r + 1)*(s - 1)*(t + 1)*(r - s + t - 2)/8
N7 = lambda r, s, t : (r + 1)*(s + 1)*(t + 1)*(r + s + t - 2)/8
N8 = lambda r, s, t : (r - 1)*(s + 1)*(t + 1)*(r - s - t + 2)/8
N9 = lambda r, s, t : -(r - 1)*(r + 1)*(s - 1)*(t - 1)/4
N10 = lambda r, s, t : -(r - 1)*(s - 1)*(s + 1)*(t - 1)/4
N11 = lambda r, s, t : -(r - 1)*(s - 1)*(t - 1)*(t + 1)/4
N12 = lambda r, s, t : (r + 1)*(s - 1)*(s + 1)*(t - 1)/4
N13 = lambda r, s, t : (r + 1)*(s - 1)*(t - 1)*(t + 1)/4
N14 = lambda r, s, t : (r - 1)*(r + 1)*(s + 1)*(t - 1)/4
N15 = lambda r, s, t : -(r + 1)*(s + 1)*(t - 1)*(t + 1)/4
N16 = lambda r, s, t : (r - 1)*(s + 1)*(t - 1)*(t + 1)/4
N17 = lambda r, s, t : (r - 1)*(r + 1)*(s - 1)*(t + 1)/4
N18 = lambda r, s, t : (r - 1)*(s - 1)*(s + 1)*(t + 1)/4
N19 = lambda r, s, t : -(r + 1)*(s - 1)*(s + 1)*(t + 1)/4
N20 = lambda r, s, t : -(r - 1)*(r + 1)*(s + 1)*(t + 1)/4

dN1 = [lambda r, s, t : (r - 1)*(s - 1)*(t - 1)/8 + (s - 1)*(t - 1)*(r + s + t + 2)/8, lambda r, s, t : (r - 1)*(s - 1)*(t - 1)/8 + (r - 1)*(t - 1)*(r + s + t + 2)/8, lambda r, s, t : (r - 1)*(s - 1)*(t - 1)/8 + (r - 1)*(s - 1)*(r + s + t + 2)/8]
dN2 = [lambda r, s, t : (r + 1)*(s - 1)*(t - 1)/8 + (s - 1)*(t - 1)*(r - s - t - 2)/8, lambda r, s, t : -(r + 1)*(s - 1)*(t - 1)/8 + (r + 1)*(t - 1)*(r - s - t - 2)/8, lambda r, s, t : -(r + 1)*(s - 1)*(t - 1)/8 + (r + 1)*(s - 1)*(r - s - t - 2)/8]
dN3 = [lambda r, s, t : -(r + 1)*(s + 1)*(t - 1)/8 - (s + 1)*(t - 1)*(r + s - t - 2)/8, lambda r, s, t : -(r + 1)*(s + 1)*(t - 1)/8 - (r + 1)*(t - 1)*(r + s - t - 2)/8, lambda r, s, t : (r + 1)*(s + 1)*(t - 1)/8 - (r + 1)*(s + 1)*(r + s - t - 2)/8]
dN4 = [lambda r, s, t : -(r - 1)*(s + 1)*(t - 1)/8 - (s + 1)*(t - 1)*(r - s + t + 2)/8, lambda r, s, t : (r - 1)*(s + 1)*(t - 1)/8 - (r - 1)*(t - 1)*(r - s + t + 2)/8, lambda r, s, t : -(r - 1)*(s + 1)*(t - 1)/8 - (r - 1)*(s + 1)*(r - s + t + 2)/8]
dN5 = [lambda r, s, t : -(r - 1)*(s - 1)*(t + 1)/8 - (s - 1)*(t + 1)*(r + s - t + 2)/8, lambda r, s, t : -(r - 1)*(s - 1)*(t + 1)/8 - (r - 1)*(t + 1)*(r + s - t + 2)/8, lambda r, s, t : (r - 1)*(s - 1)*(t + 1)/8 - (r - 1)*(s - 1)*(r + s - t + 2)/8]
dN6 = [lambda r, s, t : -(r + 1)*(s - 1)*(t + 1)/8 - (s - 1)*(t + 1)*(r - s + t - 2)/8, lambda r, s, t : (r + 1)*(s - 1)*(t + 1)/8 - (r + 1)*(t + 1)*(r - s + t - 2)/8, lambda r, s, t : -(r + 1)*(s - 1)*(t + 1)/8 - (r + 1)*(s - 1)*(r - s + t - 2)/8]
dN7 = [lambda r, s, t : (r + 1)*(s + 1)*(t + 1)/8 + (s + 1)*(t + 1)*(r + s + t - 2)/8, lambda r, s, t : (r + 1)*(s + 1)*(t + 1)/8 + (r + 1)*(t + 1)*(r + s + t - 2)/8, lambda r, s, t : (r + 1)*(s + 1)*(t + 1)/8 + (r + 1)*(s + 1)*(r + s + t - 2)/8]
dN8 = [lambda r, s, t : (r - 1)*(s + 1)*(t + 1)/8 + (s + 1)*(t + 1)*(r - s - t + 2)/8, lambda r, s, t : -(r - 1)*(s + 1)*(t + 1)/8 + (r - 1)*(t + 1)*(r - s - t + 2)/8, lambda r, s, t : -(r - 1)*(s + 1)*(t + 1)/8 + (r - 1)*(s + 1)*(r - s - t + 2)/8]
dN9 = [lambda r, s, t : -(r - 1)*(s - 1)*(t - 1)/4 - (r + 1)*(s - 1)*(t - 1)/4, lambda r, s, t : -(r - 1)*(r + 1)*(t - 1)/4, lambda r, s, t : -(r - 1)*(r + 1)*(s - 1)/4]
dN10 = [lambda r, s, t : -(s - 1)*(s + 1)*(t - 1)/4, lambda r, s, t : -(r - 1)*(s - 1)*(t - 1)/4 - (r - 1)*(s + 1)*(t - 1)/4, lambda r, s, t : -(r - 1)*(s - 1)*(s + 1)/4]
dN11 = [lambda r, s, t : -(s - 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -(r - 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -(r - 1)*(s - 1)*(t - 1)/4 - (r - 1)*(s - 1)*(t + 1)/4]
dN12 = [lambda r, s, t : (s - 1)*(s + 1)*(t - 1)/4, lambda r, s, t : (r + 1)*(s - 1)*(t - 1)/4 + (r + 1)*(s + 1)*(t - 1)/4, lambda r, s, t : (r + 1)*(s - 1)*(s + 1)/4]
dN13 = [lambda r, s, t : (s - 1)*(t - 1)*(t + 1)/4, lambda r, s, t : (r + 1)*(t - 1)*(t + 1)/4, lambda r, s, t : (r + 1)*(s - 1)*(t - 1)/4 + (r + 1)*(s - 1)*(t + 1)/4]
dN14 = [lambda r, s, t : (r - 1)*(s + 1)*(t - 1)/4 + (r + 1)*(s + 1)*(t - 1)/4, lambda r, s, t : (r - 1)*(r + 1)*(t - 1)/4, lambda r, s, t : (r - 1)*(r + 1)*(s + 1)/4]
dN15 = [lambda r, s, t : -(s + 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -(r + 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -(r + 1)*(s + 1)*(t - 1)/4 - (r + 1)*(s + 1)*(t + 1)/4]
dN16 = [lambda r, s, t : (s + 1)*(t - 1)*(t + 1)/4, lambda r, s, t : (r - 1)*(t - 1)*(t + 1)/4, lambda r, s, t : (r - 1)*(s + 1)*(t - 1)/4 + (r - 1)*(s + 1)*(t + 1)/4]
dN17 = [lambda r, s, t : (r - 1)*(s - 1)*(t + 1)/4 + (r + 1)*(s - 1)*(t + 1)/4, lambda r, s, t : (r - 1)*(r + 1)*(t + 1)/4, lambda r, s, t : (r - 1)*(r + 1)*(s - 1)/4]
dN18 = [lambda r, s, t : (s - 1)*(s + 1)*(t + 1)/4, lambda r, s, t : (r - 1)*(s - 1)*(t + 1)/4 + (r - 1)*(s + 1)*(t + 1)/4, lambda r, s, t : (r - 1)*(s - 1)*(s + 1)/4]
dN19 = [lambda r, s, t : -(s - 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -(r + 1)*(s - 1)*(t + 1)/4 - (r + 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -(r + 1)*(s - 1)*(s + 1)/4]
dN20 = [lambda r, s, t : -(r - 1)*(s + 1)*(t + 1)/4 - (r + 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -(r - 1)*(r + 1)*(t + 1)/4, lambda r, s, t : -(r - 1)*(r + 1)*(s + 1)/4]

ddN1 = [lambda r, s, t : (s - 1)*(t - 1)/4, lambda r, s, t : (r - 1)*(t - 1)/4, lambda r, s, t : (r - 1)*(s - 1)/4]
ddN2 = [lambda r, s, t : (s - 1)*(t - 1)/4, lambda r, s, t : -(r + 1)*(t - 1)/4, lambda r, s, t : -(r + 1)*(s - 1)/4]
ddN3 = [lambda r, s, t : -(s + 1)*(t - 1)/4, lambda r, s, t : -(r + 1)*(t - 1)/4, lambda r, s, t : (r + 1)*(s + 1)/4]
ddN4 = [lambda r, s, t : -(s + 1)*(t - 1)/4, lambda r, s, t : (r - 1)*(t - 1)/4, lambda r, s, t : -(r - 1)*(s + 1)/4]
ddN5 = [lambda r, s, t : -(s - 1)*(t + 1)/4, lambda r, s, t : -(r - 1)*(t + 1)/4, lambda r, s, t : (r - 1)*(s - 1)/4]
ddN6 = [lambda r, s, t : -(s - 1)*(t + 1)/4, lambda r, s, t : (r + 1)*(t + 1)/4, lambda r, s, t : -(r + 1)*(s - 1)/4]
ddN7 = [lambda r, s, t : (s + 1)*(t + 1)/4, lambda r, s, t : (r + 1)*(t + 1)/4, lambda r, s, t : (r + 1)*(s + 1)/4]
ddN8 = [lambda r, s, t : (s + 1)*(t + 1)/4, lambda r, s, t : -(r - 1)*(t + 1)/4, lambda r, s, t : -(r - 1)*(s + 1)/4]
ddN9 = [lambda r, s, t : -(s - 1)*(t - 1)/2, lambda r, s, t : 0, lambda r, s, t : 0]
ddN10 = [lambda r, s, t : 0, lambda r, s, t : -(r - 1)*(t - 1)/2, lambda r, s, t : 0]
ddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : -(r - 1)*(s - 1)/2]
ddN12 = [lambda r, s, t : 0, lambda r, s, t : (r + 1)*(t - 1)/2, lambda r, s, t : 0]
ddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : (r + 1)*(s - 1)/2]
ddN14 = [lambda r, s, t : (s + 1)*(t - 1)/2, lambda r, s, t : 0, lambda r, s, t : 0]
ddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : -(r + 1)*(s + 1)/2]
ddN16 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : (r - 1)*(s + 1)/2]
ddN17 = [lambda r, s, t : (s - 1)*(t + 1)/2, lambda r, s, t : 0, lambda r, s, t : 0]
ddN18 = [lambda r, s, t : 0, lambda r, s, t : (r - 1)*(t + 1)/2, lambda r, s, t : 0]
ddN19 = [lambda r, s, t : 0, lambda r, s, t : -(r + 1)*(t + 1)/2, lambda r, s, t : 0]
ddN20 = [lambda r, s, t : -(s + 1)*(t + 1)/2, lambda r, s, t : 0, lambda r, s, t : 0]

dddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN14 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN16 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN17 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN18 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN19 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN20 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

ddddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN14 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN16 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN17 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN18 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN19 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN20 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]



=================== HEXA27 ===================
N1 = lambda r, s, t : r*s*t*(r - 1)*(s - 1)*(t - 1)/8
N2 = lambda r, s, t : r*s*t*(r + 1)*(s - 1)*(t - 1)/8
N3 = lambda r, s, t : r*s*t*(r + 1)*(s + 1)*(t - 1)/8
N4 = lambda r, s, t : r*s*t*(r - 1)*(s + 1)*(t - 1)/8
N5 = lambda r, s, t : r*s*t*(r - 1)*(s - 1)*(t + 1)/8
N6 = lambda r, s, t : r*s*t*(r + 1)*(s - 1)*(t + 1)/8
N7 = lambda r, s, t : r*s*t*(r + 1)*(s + 1)*(t + 1)/8
N8 = lambda r, s, t : r*s*t*(r - 1)*(s + 1)*(t + 1)/8
N9 = lambda r, s, t : -s*t*(r - 1)*(r + 1)*(s - 1)*(t - 1)/4
N10 = lambda r, s, t : -r*t*(r - 1)*(s - 1)*(s + 1)*(t - 1)/4
N11 = lambda r, s, t : -r*s*(r - 1)*(s - 1)*(t - 1)*(t + 1)/4
N12 = lambda r, s, t : -r*t*(r + 1)*(s - 1)*(s + 1)*(t - 1)/4
N13 = lambda r, s, t : -r*s*(r + 1)*(s - 1)*(t - 1)*(t + 1)/4
N14 = lambda r, s, t : -s*t*(r - 1)*(r + 1)*(s + 1)*(t - 1)/4
N15 = lambda r, s, t : -r*s*(r + 1)*(s + 1)*(t - 1)*(t + 1)/4
N16 = lambda r, s, t : -r*s*(r - 1)*(s + 1)*(t - 1)*(t + 1)/4
N17 = lambda r, s, t : -s*t*(r - 1)*(r + 1)*(s - 1)*(t + 1)/4
N18 = lambda r, s, t : -r*t*(r - 1)*(s - 1)*(s + 1)*(t + 1)/4
N19 = lambda r, s, t : -r*t*(r + 1)*(s - 1)*(s + 1)*(t + 1)/4
N20 = lambda r, s, t : -s*t*(r - 1)*(r + 1)*(s + 1)*(t + 1)/4
N21 = lambda r, s, t : t*(r - 1)*(r + 1)*(s - 1)*(s + 1)*(t - 1)/2
N22 = lambda r, s, t : s*(r - 1)*(r + 1)*(s - 1)*(t - 1)*(t + 1)/2
N23 = lambda r, s, t : r*(r - 1)*(s - 1)*(s + 1)*(t - 1)*(t + 1)/2
N24 = lambda r, s, t : r*(r + 1)*(s - 1)*(s + 1)*(t - 1)*(t + 1)/2
N25 = lambda r, s, t : s*(r - 1)*(r + 1)*(s + 1)*(t - 1)*(t + 1)/2
N26 = lambda r, s, t : t*(r - 1)*(r + 1)*(s - 1)*(s + 1)*(t + 1)/2
N27 = lambda r, s, t : -(r - 1)*(r + 1)*(s - 1)*(s + 1)*(t - 1)*(t + 1)

dN1 = [lambda r, s, t : r*s*t*(s - 1)*(t - 1)/8 + s*t*(r - 1)*(s - 1)*(t - 1)/8, lambda r, s, t : r*s*t*(r - 1)*(t - 1)/8 + r*t*(r - 1)*(s - 1)*(t - 1)/8, lambda r, s, t : r*s*t*(r - 1)*(s - 1)/8 + r*s*(r - 1)*(s - 1)*(t - 1)/8]
dN2 = [lambda r, s, t : r*s*t*(s - 1)*(t - 1)/8 + s*t*(r + 1)*(s - 1)*(t - 1)/8, lambda r, s, t : r*s*t*(r + 1)*(t - 1)/8 + r*t*(r + 1)*(s - 1)*(t - 1)/8, lambda r, s, t : r*s*t*(r + 1)*(s - 1)/8 + r*s*(r + 1)*(s - 1)*(t - 1)/8]
dN3 = [lambda r, s, t : r*s*t*(s + 1)*(t - 1)/8 + s*t*(r + 1)*(s + 1)*(t - 1)/8, lambda r, s, t : r*s*t*(r + 1)*(t - 1)/8 + r*t*(r + 1)*(s + 1)*(t - 1)/8, lambda r, s, t : r*s*t*(r + 1)*(s + 1)/8 + r*s*(r + 1)*(s + 1)*(t - 1)/8]
dN4 = [lambda r, s, t : r*s*t*(s + 1)*(t - 1)/8 + s*t*(r - 1)*(s + 1)*(t - 1)/8, lambda r, s, t : r*s*t*(r - 1)*(t - 1)/8 + r*t*(r - 1)*(s + 1)*(t - 1)/8, lambda r, s, t : r*s*t*(r - 1)*(s + 1)/8 + r*s*(r - 1)*(s + 1)*(t - 1)/8]
dN5 = [lambda r, s, t : r*s*t*(s - 1)*(t + 1)/8 + s*t*(r - 1)*(s - 1)*(t + 1)/8, lambda r, s, t : r*s*t*(r - 1)*(t + 1)/8 + r*t*(r - 1)*(s - 1)*(t + 1)/8, lambda r, s, t : r*s*t*(r - 1)*(s - 1)/8 + r*s*(r - 1)*(s - 1)*(t + 1)/8]
dN6 = [lambda r, s, t : r*s*t*(s - 1)*(t + 1)/8 + s*t*(r + 1)*(s - 1)*(t + 1)/8, lambda r, s, t : r*s*t*(r + 1)*(t + 1)/8 + r*t*(r + 1)*(s - 1)*(t + 1)/8, lambda r, s, t : r*s*t*(r + 1)*(s - 1)/8 + r*s*(r + 1)*(s - 1)*(t + 1)/8]
dN7 = [lambda r, s, t : r*s*t*(s + 1)*(t + 1)/8 + s*t*(r + 1)*(s + 1)*(t + 1)/8, lambda r, s, t : r*s*t*(r + 1)*(t + 1)/8 + r*t*(r + 1)*(s + 1)*(t + 1)/8, lambda r, s, t : r*s*t*(r + 1)*(s + 1)/8 + r*s*(r + 1)*(s + 1)*(t + 1)/8]
dN8 = [lambda r, s, t : r*s*t*(s + 1)*(t + 1)/8 + s*t*(r - 1)*(s + 1)*(t + 1)/8, lambda r, s, t : r*s*t*(r - 1)*(t + 1)/8 + r*t*(r - 1)*(s + 1)*(t + 1)/8, lambda r, s, t : r*s*t*(r - 1)*(s + 1)/8 + r*s*(r - 1)*(s + 1)*(t + 1)/8]
dN9 = [lambda r, s, t : -s*t*(r - 1)*(s - 1)*(t - 1)/4 - s*t*(r + 1)*(s - 1)*(t - 1)/4, lambda r, s, t : -s*t*(r - 1)*(r + 1)*(t - 1)/4 - t*(r - 1)*(r + 1)*(s - 1)*(t - 1)/4, lambda r, s, t : -s*t*(r - 1)*(r + 1)*(s - 1)/4 - s*(r - 1)*(r + 1)*(s - 1)*(t - 1)/4]
dN10 = [lambda r, s, t : -r*t*(s - 1)*(s + 1)*(t - 1)/4 - t*(r - 1)*(s - 1)*(s + 1)*(t - 1)/4, lambda r, s, t : -r*t*(r - 1)*(s - 1)*(t - 1)/4 - r*t*(r - 1)*(s + 1)*(t - 1)/4, lambda r, s, t : -r*t*(r - 1)*(s - 1)*(s + 1)/4 - r*(r - 1)*(s - 1)*(s + 1)*(t - 1)/4]
dN11 = [lambda r, s, t : -r*s*(s - 1)*(t - 1)*(t + 1)/4 - s*(r - 1)*(s - 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -r*s*(r - 1)*(t - 1)*(t + 1)/4 - r*(r - 1)*(s - 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -r*s*(r - 1)*(s - 1)*(t - 1)/4 - r*s*(r - 1)*(s - 1)*(t + 1)/4]
dN12 = [lambda r, s, t : -r*t*(s - 1)*(s + 1)*(t - 1)/4 - t*(r + 1)*(s - 1)*(s + 1)*(t - 1)/4, lambda r, s, t : -r*t*(r + 1)*(s - 1)*(t - 1)/4 - r*t*(r + 1)*(s + 1)*(t - 1)/4, lambda r, s, t : -r*t*(r + 1)*(s - 1)*(s + 1)/4 - r*(r + 1)*(s - 1)*(s + 1)*(t - 1)/4]
dN13 = [lambda r, s, t : -r*s*(s - 1)*(t - 1)*(t + 1)/4 - s*(r + 1)*(s - 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -r*s*(r + 1)*(t - 1)*(t + 1)/4 - r*(r + 1)*(s - 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -r*s*(r + 1)*(s - 1)*(t - 1)/4 - r*s*(r + 1)*(s - 1)*(t + 1)/4]
dN14 = [lambda r, s, t : -s*t*(r - 1)*(s + 1)*(t - 1)/4 - s*t*(r + 1)*(s + 1)*(t - 1)/4, lambda r, s, t : -s*t*(r - 1)*(r + 1)*(t - 1)/4 - t*(r - 1)*(r + 1)*(s + 1)*(t - 1)/4, lambda r, s, t : -s*t*(r - 1)*(r + 1)*(s + 1)/4 - s*(r - 1)*(r + 1)*(s + 1)*(t - 1)/4]
dN15 = [lambda r, s, t : -r*s*(s + 1)*(t - 1)*(t + 1)/4 - s*(r + 1)*(s + 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -r*s*(r + 1)*(t - 1)*(t + 1)/4 - r*(r + 1)*(s + 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -r*s*(r + 1)*(s + 1)*(t - 1)/4 - r*s*(r + 1)*(s + 1)*(t + 1)/4]
dN16 = [lambda r, s, t : -r*s*(s + 1)*(t - 1)*(t + 1)/4 - s*(r - 1)*(s + 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -r*s*(r - 1)*(t - 1)*(t + 1)/4 - r*(r - 1)*(s + 1)*(t - 1)*(t + 1)/4, lambda r, s, t : -r*s*(r - 1)*(s + 1)*(t - 1)/4 - r*s*(r - 1)*(s + 1)*(t + 1)/4]
dN17 = [lambda r, s, t : -s*t*(r - 1)*(s - 1)*(t + 1)/4 - s*t*(r + 1)*(s - 1)*(t + 1)/4, lambda r, s, t : -s*t*(r - 1)*(r + 1)*(t + 1)/4 - t*(r - 1)*(r + 1)*(s - 1)*(t + 1)/4, lambda r, s, t : -s*t*(r - 1)*(r + 1)*(s - 1)/4 - s*(r - 1)*(r + 1)*(s - 1)*(t + 1)/4]
dN18 = [lambda r, s, t : -r*t*(s - 1)*(s + 1)*(t + 1)/4 - t*(r - 1)*(s - 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -r*t*(r - 1)*(s - 1)*(t + 1)/4 - r*t*(r - 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -r*t*(r - 1)*(s - 1)*(s + 1)/4 - r*(r - 1)*(s - 1)*(s + 1)*(t + 1)/4]
dN19 = [lambda r, s, t : -r*t*(s - 1)*(s + 1)*(t + 1)/4 - t*(r + 1)*(s - 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -r*t*(r + 1)*(s - 1)*(t + 1)/4 - r*t*(r + 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -r*t*(r + 1)*(s - 1)*(s + 1)/4 - r*(r + 1)*(s - 1)*(s + 1)*(t + 1)/4]
dN20 = [lambda r, s, t : -s*t*(r - 1)*(s + 1)*(t + 1)/4 - s*t*(r + 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -s*t*(r - 1)*(r + 1)*(t + 1)/4 - t*(r - 1)*(r + 1)*(s + 1)*(t + 1)/4, lambda r, s, t : -s*t*(r - 1)*(r + 1)*(s + 1)/4 - s*(r - 1)*(r + 1)*(s + 1)*(t + 1)/4]
dN21 = [lambda r, s, t : t*(r - 1)*(s - 1)*(s + 1)*(t - 1)/2 + t*(r + 1)*(s - 1)*(s + 1)*(t - 1)/2, lambda r, s, t : t*(r - 1)*(r + 1)*(s - 1)*(t - 1)/2 + t*(r - 1)*(r + 1)*(s + 1)*(t - 1)/2, lambda r, s, t : t*(r - 1)*(r + 1)*(s - 1)*(s + 1)/2 + (r - 1)*(r + 1)*(s - 1)*(s + 1)*(t - 1)/2]
dN22 = [lambda r, s, t : s*(r - 1)*(s - 1)*(t - 1)*(t + 1)/2 + s*(r + 1)*(s - 1)*(t - 1)*(t + 1)/2, lambda r, s, t : s*(r - 1)*(r + 1)*(t - 1)*(t + 1)/2 + (r - 1)*(r + 1)*(s - 1)*(t - 1)*(t + 1)/2, lambda r, s, t : s*(r - 1)*(r + 1)*(s - 1)*(t - 1)/2 + s*(r - 1)*(r + 1)*(s - 1)*(t + 1)/2]
dN23 = [lambda r, s, t : r*(s - 1)*(s + 1)*(t - 1)*(t + 1)/2 + (r - 1)*(s - 1)*(s + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : r*(r - 1)*(s - 1)*(t - 1)*(t + 1)/2 + r*(r - 1)*(s + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : r*(r - 1)*(s - 1)*(s + 1)*(t - 1)/2 + r*(r - 1)*(s - 1)*(s + 1)*(t + 1)/2]
dN24 = [lambda r, s, t : r*(s - 1)*(s + 1)*(t - 1)*(t + 1)/2 + (r + 1)*(s - 1)*(s + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : r*(r + 1)*(s - 1)*(t - 1)*(t + 1)/2 + r*(r + 1)*(s + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : r*(r + 1)*(s - 1)*(s + 1)*(t - 1)/2 + r*(r + 1)*(s - 1)*(s + 1)*(t + 1)/2]
dN25 = [lambda r, s, t : s*(r - 1)*(s + 1)*(t - 1)*(t + 1)/2 + s*(r + 1)*(s + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : s*(r - 1)*(r + 1)*(t - 1)*(t + 1)/2 + (r - 1)*(r + 1)*(s + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : s*(r - 1)*(r + 1)*(s + 1)*(t - 1)/2 + s*(r - 1)*(r + 1)*(s + 1)*(t + 1)/2]
dN26 = [lambda r, s, t : t*(r - 1)*(s - 1)*(s + 1)*(t + 1)/2 + t*(r + 1)*(s - 1)*(s + 1)*(t + 1)/2, lambda r, s, t : t*(r - 1)*(r + 1)*(s - 1)*(t + 1)/2 + t*(r - 1)*(r + 1)*(s + 1)*(t + 1)/2, lambda r, s, t : t*(r - 1)*(r + 1)*(s - 1)*(s + 1)/2 + (r - 1)*(r + 1)*(s - 1)*(s + 1)*(t + 1)/2]
dN27 = [lambda r, s, t : -(r - 1)*(s - 1)*(s + 1)*(t - 1)*(t + 1) - (r + 1)*(s - 1)*(s + 1)*(t - 1)*(t + 1), lambda r, s, t : -(r - 1)*(r + 1)*(s - 1)*(t - 1)*(t + 1) - (r - 1)*(r + 1)*(s + 1)*(t - 1)*(t + 1), lambda r, s, t : -(r - 1)*(r + 1)*(s - 1)*(s + 1)*(t - 1) - (r - 1)*(r + 1)*(s - 1)*(s + 1)*(t + 1)]

ddN1 = [lambda r, s, t : s*t*(s - 1)*(t - 1)/4, lambda r, s, t : r*t*(r - 1)*(t - 1)/4, lambda r, s, t : r*s*(r - 1)*(s - 1)/4]
ddN2 = [lambda r, s, t : s*t*(s - 1)*(t - 1)/4, lambda r, s, t : r*t*(r + 1)*(t - 1)/4, lambda r, s, t : r*s*(r + 1)*(s - 1)/4]
ddN3 = [lambda r, s, t : s*t*(s + 1)*(t - 1)/4, lambda r, s, t : r*t*(r + 1)*(t - 1)/4, lambda r, s, t : r*s*(r + 1)*(s + 1)/4]
ddN4 = [lambda r, s, t : s*t*(s + 1)*(t - 1)/4, lambda r, s, t : r*t*(r - 1)*(t - 1)/4, lambda r, s, t : r*s*(r - 1)*(s + 1)/4]
ddN5 = [lambda r, s, t : s*t*(s - 1)*(t + 1)/4, lambda r, s, t : r*t*(r - 1)*(t + 1)/4, lambda r, s, t : r*s*(r - 1)*(s - 1)/4]
ddN6 = [lambda r, s, t : s*t*(s - 1)*(t + 1)/4, lambda r, s, t : r*t*(r + 1)*(t + 1)/4, lambda r, s, t : r*s*(r + 1)*(s - 1)/4]
ddN7 = [lambda r, s, t : s*t*(s + 1)*(t + 1)/4, lambda r, s, t : r*t*(r + 1)*(t + 1)/4, lambda r, s, t : r*s*(r + 1)*(s + 1)/4]
ddN8 = [lambda r, s, t : s*t*(s + 1)*(t + 1)/4, lambda r, s, t : r*t*(r - 1)*(t + 1)/4, lambda r, s, t : r*s*(r - 1)*(s + 1)/4]
ddN9 = [lambda r, s, t : -s*t*(s - 1)*(t - 1)/2, lambda r, s, t : -t*(r - 1)*(r + 1)*(t - 1)/2, lambda r, s, t : -s*(r - 1)*(r + 1)*(s - 1)/2]
ddN10 = [lambda r, s, t : -t*(s - 1)*(s + 1)*(t - 1)/2, lambda r, s, t : -r*t*(r - 1)*(t - 1)/2, lambda r, s, t : -r*(r - 1)*(s - 1)*(s + 1)/2]
ddN11 = [lambda r, s, t : -s*(s - 1)*(t - 1)*(t + 1)/2, lambda r, s, t : -r*(r - 1)*(t - 1)*(t + 1)/2, lambda r, s, t : -r*s*(r - 1)*(s - 1)/2]
ddN12 = [lambda r, s, t : -t*(s - 1)*(s + 1)*(t - 1)/2, lambda r, s, t : -r*t*(r + 1)*(t - 1)/2, lambda r, s, t : -r*(r + 1)*(s - 1)*(s + 1)/2]
ddN13 = [lambda r, s, t : -s*(s - 1)*(t - 1)*(t + 1)/2, lambda r, s, t : -r*(r + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : -r*s*(r + 1)*(s - 1)/2]
ddN14 = [lambda r, s, t : -s*t*(s + 1)*(t - 1)/2, lambda r, s, t : -t*(r - 1)*(r + 1)*(t - 1)/2, lambda r, s, t : -s*(r - 1)*(r + 1)*(s + 1)/2]
ddN15 = [lambda r, s, t : -s*(s + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : -r*(r + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : -r*s*(r + 1)*(s + 1)/2]
ddN16 = [lambda r, s, t : -s*(s + 1)*(t - 1)*(t + 1)/2, lambda r, s, t : -r*(r - 1)*(t - 1)*(t + 1)/2, lambda r, s, t : -r*s*(r - 1)*(s + 1)/2]
ddN17 = [lambda r, s, t : -s*t*(s - 1)*(t + 1)/2, lambda r, s, t : -t*(r - 1)*(r + 1)*(t + 1)/2, lambda r, s, t : -s*(r - 1)*(r + 1)*(s - 1)/2]
ddN18 = [lambda r, s, t : -t*(s - 1)*(s + 1)*(t + 1)/2, lambda r, s, t : -r*t*(r - 1)*(t + 1)/2, lambda r, s, t : -r*(r - 1)*(s - 1)*(s + 1)/2]
ddN19 = [lambda r, s, t : -t*(s - 1)*(s + 1)*(t + 1)/2, lambda r, s, t : -r*t*(r + 1)*(t + 1)/2, lambda r, s, t : -r*(r + 1)*(s - 1)*(s + 1)/2]
ddN20 = [lambda r, s, t : -s*t*(s + 1)*(t + 1)/2, lambda r, s, t : -t*(r - 1)*(r + 1)*(t + 1)/2, lambda r, s, t : -s*(r - 1)*(r + 1)*(s + 1)/2]
ddN21 = [lambda r, s, t : t*(s - 1)*(s + 1)*(t - 1), lambda r, s, t : t*(r - 1)*(r + 1)*(t - 1), lambda r, s, t : (r - 1)*(r + 1)*(s - 1)*(s + 1)]
ddN22 = [lambda r, s, t : s*(s - 1)*(t - 1)*(t + 1), lambda r, s, t : (r - 1)*(r + 1)*(t - 1)*(t + 1), lambda r, s, t : s*(r - 1)*(r + 1)*(s - 1)]
ddN23 = [lambda r, s, t : (s - 1)*(s + 1)*(t - 1)*(t + 1), lambda r, s, t : r*(r - 1)*(t - 1)*(t + 1), lambda r, s, t : r*(r - 1)*(s - 1)*(s + 1)]
ddN24 = [lambda r, s, t : (s - 1)*(s + 1)*(t - 1)*(t + 1), lambda r, s, t : r*(r + 1)*(t - 1)*(t + 1), lambda r, s, t : r*(r + 1)*(s - 1)*(s + 1)]
ddN25 = [lambda r, s, t : s*(s + 1)*(t - 1)*(t + 1), lambda r, s, t : (r - 1)*(r + 1)*(t - 1)*(t + 1), lambda r, s, t : s*(r - 1)*(r + 1)*(s + 1)]
ddN26 = [lambda r, s, t : t*(s - 1)*(s + 1)*(t + 1), lambda r, s, t : t*(r - 1)*(r + 1)*(t + 1), lambda r, s, t : (r - 1)*(r + 1)*(s - 1)*(s + 1)]
ddN27 = [lambda r, s, t : -2*(s - 1)*(s + 1)*(t - 1)*(t + 1), lambda r, s, t : -2*(r - 1)*(r + 1)*(t - 1)*(t + 1), lambda r, s, t : -2*(r - 1)*(r + 1)*(s - 1)*(s + 1)]

dddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN14 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN16 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN17 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN18 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN19 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN20 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN21 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN22 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN23 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN24 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN25 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN26 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN27 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

ddddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN14 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN16 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN17 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN18 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN19 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN20 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN21 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN22 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN23 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN24 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN25 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN26 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN27 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]



=================== PRISM6 ===================
N1 = lambda r, s, t : (t - 1)*(r + s - 1)/2
N2 = lambda r, s, t : -r*(t - 1)/2
N3 = lambda r, s, t : -s*(t - 1)/2
N4 = lambda r, s, t : -(t + 1)*(r + s - 1)/2
N5 = lambda r, s, t : r*(t + 1)/2
N6 = lambda r, s, t : s*(t + 1)/2

dN1 = [lambda r, s, t : t/2 - 1/2, lambda r, s, t : t/2 - 1/2, lambda r, s, t : r/2 + s/2 - 1/2]
dN2 = [lambda r, s, t : 1/2 - t/2, lambda r, s, t : 0, lambda r, s, t : -r/2]
dN3 = [lambda r, s, t : 0, lambda r, s, t : 1/2 - t/2, lambda r, s, t : -s/2]
dN4 = [lambda r, s, t : -t/2 - 1/2, lambda r, s, t : -t/2 - 1/2, lambda r, s, t : -r/2 - s/2 + 1/2]
dN5 = [lambda r, s, t : t/2 + 1/2, lambda r, s, t : 0, lambda r, s, t : r/2]
dN6 = [lambda r, s, t : 0, lambda r, s, t : t/2 + 1/2, lambda r, s, t : s/2]

ddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

dddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

ddddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]



=================== PRISM15 ===================
N1 = lambda r, s, t : -(t - 1)*(r + s - 1)*(2*r + 2*s + t)/2
N2 = lambda r, s, t : -r*(t - 1)*(2*r - t - 2)/2
N3 = lambda r, s, t : -s*(t - 1)*(2*s - t - 2)/2
N4 = lambda r, s, t : (t + 1)*(r + s - 1)*(2*r + 2*s - t)/2
N5 = lambda r, s, t : r*(t + 1)*(2*r + t - 2)/2
N6 = lambda r, s, t : s*(t + 1)*(2*s + t - 2)/2
N7 = lambda r, s, t : 2*r*(t - 1)*(r + s - 1)
N8 = lambda r, s, t : 2*s*(t - 1)*(r + s - 1)
N9 = lambda r, s, t : (t - 1)*(t + 1)*(r + s - 1)
N10 = lambda r, s, t : -2*r*s*(t - 1)
N11 = lambda r, s, t : -r*(t - 1)*(t + 1)
N12 = lambda r, s, t : -s*(t - 1)*(t + 1)
N13 = lambda r, s, t : -2*r*(t + 1)*(r + s - 1)
N14 = lambda r, s, t : -2*s*(t + 1)*(r + s - 1)
N15 = lambda r, s, t : 2*r*s*(t + 1)

dN1 = [lambda r, s, t : -(t - 1)*(r + s - 1) - (t - 1)*(2*r + 2*s + t)/2, lambda r, s, t : -(t - 1)*(r + s - 1) - (t - 1)*(2*r + 2*s + t)/2, lambda r, s, t : -(t - 1)*(r + s - 1)/2 - (r + s - 1)*(2*r + 2*s + t)/2]
dN2 = [lambda r, s, t : -r*(t - 1) - (t - 1)*(2*r - t - 2)/2, lambda r, s, t : 0, lambda r, s, t : r*(t - 1)/2 - r*(2*r - t - 2)/2]
dN3 = [lambda r, s, t : 0, lambda r, s, t : -s*(t - 1) - (t - 1)*(2*s - t - 2)/2, lambda r, s, t : s*(t - 1)/2 - s*(2*s - t - 2)/2]
dN4 = [lambda r, s, t : (t + 1)*(r + s - 1) + (t + 1)*(2*r + 2*s - t)/2, lambda r, s, t : (t + 1)*(r + s - 1) + (t + 1)*(2*r + 2*s - t)/2, lambda r, s, t : -(t + 1)*(r + s - 1)/2 + (r + s - 1)*(2*r + 2*s - t)/2]
dN5 = [lambda r, s, t : r*(t + 1) + (t + 1)*(2*r + t - 2)/2, lambda r, s, t : 0, lambda r, s, t : r*(t + 1)/2 + r*(2*r + t - 2)/2]
dN6 = [lambda r, s, t : 0, lambda r, s, t : s*(t + 1) + (t + 1)*(2*s + t - 2)/2, lambda r, s, t : s*(t + 1)/2 + s*(2*s + t - 2)/2]
dN7 = [lambda r, s, t : 2*r*(t - 1) + 2*(t - 1)*(r + s - 1), lambda r, s, t : 2*r*(t - 1), lambda r, s, t : 2*r*(r + s - 1)]
dN8 = [lambda r, s, t : 2*s*(t - 1), lambda r, s, t : 2*s*(t - 1) + 2*(t - 1)*(r + s - 1), lambda r, s, t : 2*s*(r + s - 1)]
dN9 = [lambda r, s, t : (t - 1)*(t + 1), lambda r, s, t : (t - 1)*(t + 1), lambda r, s, t : (t - 1)*(r + s - 1) + (t + 1)*(r + s - 1)]
dN10 = [lambda r, s, t : -2*s*(t - 1), lambda r, s, t : -2*r*(t - 1), lambda r, s, t : -2*r*s]
dN11 = [lambda r, s, t : -(t - 1)*(t + 1), lambda r, s, t : 0, lambda r, s, t : -r*(t - 1) - r*(t + 1)]
dN12 = [lambda r, s, t : 0, lambda r, s, t : -(t - 1)*(t + 1), lambda r, s, t : -s*(t - 1) - s*(t + 1)]
dN13 = [lambda r, s, t : -2*r*(t + 1) - 2*(t + 1)*(r + s - 1), lambda r, s, t : -2*r*(t + 1), lambda r, s, t : -2*r*(r + s - 1)]
dN14 = [lambda r, s, t : -2*s*(t + 1), lambda r, s, t : -2*s*(t + 1) - 2*(t + 1)*(r + s - 1), lambda r, s, t : -2*s*(r + s - 1)]
dN15 = [lambda r, s, t : 2*s*(t + 1), lambda r, s, t : 2*r*(t + 1), lambda r, s, t : 2*r*s]

ddN1 = [lambda r, s, t : 2 - 2*t, lambda r, s, t : 2 - 2*t, lambda r, s, t : -r - s + 1]
ddN2 = [lambda r, s, t : 2 - 2*t, lambda r, s, t : 0, lambda r, s, t : r]
ddN3 = [lambda r, s, t : 0, lambda r, s, t : 2 - 2*t, lambda r, s, t : s]
ddN4 = [lambda r, s, t : 2*t + 2, lambda r, s, t : 2*t + 2, lambda r, s, t : -r - s + 1]
ddN5 = [lambda r, s, t : 2*t + 2, lambda r, s, t : 0, lambda r, s, t : r]
ddN6 = [lambda r, s, t : 0, lambda r, s, t : 2*t + 2, lambda r, s, t : s]
ddN7 = [lambda r, s, t : 4*t - 4, lambda r, s, t : 0, lambda r, s, t : 0]
ddN8 = [lambda r, s, t : 0, lambda r, s, t : 4*t - 4, lambda r, s, t : 0]
ddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 2*r + 2*s - 2]
ddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : -2*r]
ddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : -2*s]
ddN13 = [lambda r, s, t : -4*t - 4, lambda r, s, t : 0, lambda r, s, t : 0]
ddN14 = [lambda r, s, t : 0, lambda r, s, t : -4*t - 4, lambda r, s, t : 0]
ddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

dddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN14 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

ddddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN14 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]



=================== PRISM18 ===================
N1 = lambda r, s, t : t*(t - 1)*(r + s - 1)*(2*r + 2*s - 1)/2
N2 = lambda r, s, t : r*t*(2*r - 1)*(t - 1)/2
N3 = lambda r, s, t : s*t*(2*s - 1)*(t - 1)/2
N4 = lambda r, s, t : t*(t + 1)*(r + s - 1)*(2*r + 2*s - 1)/2
N5 = lambda r, s, t : r*t*(2*r - 1)*(t + 1)/2
N6 = lambda r, s, t : s*t*(2*s - 1)*(t + 1)/2
N7 = lambda r, s, t : -2*r*t*(t - 1)*(r + s - 1)
N8 = lambda r, s, t : -2*s*t*(t - 1)*(r + s - 1)
N9 = lambda r, s, t : -(t - 1)*(t + 1)*(r + s - 1)*(2*r + 2*s - 1)
N10 = lambda r, s, t : 2*r*s*t*(t - 1)
N11 = lambda r, s, t : -r*(2*r - 1)*(t - 1)*(t + 1)
N12 = lambda r, s, t : -s*(2*s - 1)*(t - 1)*(t + 1)
N13 = lambda r, s, t : -2*r*t*(t + 1)*(r + s - 1)
N14 = lambda r, s, t : -2*s*t*(t + 1)*(r + s - 1)
N15 = lambda r, s, t : 2*r*s*t*(t + 1)
N16 = lambda r, s, t : 4*r*(t - 1)*(t + 1)*(r + s - 1)
N17 = lambda r, s, t : 4*s*(t - 1)*(t + 1)*(r + s - 1)
N18 = lambda r, s, t : -4*r*s*(t - 1)*(t + 1)

dN1 = [lambda r, s, t : t*(t - 1)*(r + s - 1) + t*(t - 1)*(2*r + 2*s - 1)/2, lambda r, s, t : t*(t - 1)*(r + s - 1) + t*(t - 1)*(2*r + 2*s - 1)/2, lambda r, s, t : t*(r + s - 1)*(2*r + 2*s - 1)/2 + (t - 1)*(r + s - 1)*(2*r + 2*s - 1)/2]
dN2 = [lambda r, s, t : r*t*(t - 1) + t*(2*r - 1)*(t - 1)/2, lambda r, s, t : 0, lambda r, s, t : r*t*(2*r - 1)/2 + r*(2*r - 1)*(t - 1)/2]
dN3 = [lambda r, s, t : 0, lambda r, s, t : s*t*(t - 1) + t*(2*s - 1)*(t - 1)/2, lambda r, s, t : s*t*(2*s - 1)/2 + s*(2*s - 1)*(t - 1)/2]
dN4 = [lambda r, s, t : t*(t + 1)*(r + s - 1) + t*(t + 1)*(2*r + 2*s - 1)/2, lambda r, s, t : t*(t + 1)*(r + s - 1) + t*(t + 1)*(2*r + 2*s - 1)/2, lambda r, s, t : t*(r + s - 1)*(2*r + 2*s - 1)/2 + (t + 1)*(r + s - 1)*(2*r + 2*s - 1)/2]
dN5 = [lambda r, s, t : r*t*(t + 1) + t*(2*r - 1)*(t + 1)/2, lambda r, s, t : 0, lambda r, s, t : r*t*(2*r - 1)/2 + r*(2*r - 1)*(t + 1)/2]
dN6 = [lambda r, s, t : 0, lambda r, s, t : s*t*(t + 1) + t*(2*s - 1)*(t + 1)/2, lambda r, s, t : s*t*(2*s - 1)/2 + s*(2*s - 1)*(t + 1)/2]
dN7 = [lambda r, s, t : -2*r*t*(t - 1) - 2*t*(t - 1)*(r + s - 1), lambda r, s, t : -2*r*t*(t - 1), lambda r, s, t : -2*r*t*(r + s - 1) - 2*r*(t - 1)*(r + s - 1)]
dN8 = [lambda r, s, t : -2*s*t*(t - 1), lambda r, s, t : -2*s*t*(t - 1) - 2*t*(t - 1)*(r + s - 1), lambda r, s, t : -2*s*t*(r + s - 1) - 2*s*(t - 1)*(r + s - 1)]
dN9 = [lambda r, s, t : -2*(t - 1)*(t + 1)*(r + s - 1) - (t - 1)*(t + 1)*(2*r + 2*s - 1), lambda r, s, t : -2*(t - 1)*(t + 1)*(r + s - 1) - (t - 1)*(t + 1)*(2*r + 2*s - 1), lambda r, s, t : -(t - 1)*(r + s - 1)*(2*r + 2*s - 1) - (t + 1)*(r + s - 1)*(2*r + 2*s - 1)]
dN10 = [lambda r, s, t : 2*s*t*(t - 1), lambda r, s, t : 2*r*t*(t - 1), lambda r, s, t : 2*r*s*t + 2*r*s*(t - 1)]
dN11 = [lambda r, s, t : -2*r*(t - 1)*(t + 1) - (2*r - 1)*(t - 1)*(t + 1), lambda r, s, t : 0, lambda r, s, t : -r*(2*r - 1)*(t - 1) - r*(2*r - 1)*(t + 1)]
dN12 = [lambda r, s, t : 0, lambda r, s, t : -2*s*(t - 1)*(t + 1) - (2*s - 1)*(t - 1)*(t + 1), lambda r, s, t : -s*(2*s - 1)*(t - 1) - s*(2*s - 1)*(t + 1)]
dN13 = [lambda r, s, t : -2*r*t*(t + 1) - 2*t*(t + 1)*(r + s - 1), lambda r, s, t : -2*r*t*(t + 1), lambda r, s, t : -2*r*t*(r + s - 1) - 2*r*(t + 1)*(r + s - 1)]
dN14 = [lambda r, s, t : -2*s*t*(t + 1), lambda r, s, t : -2*s*t*(t + 1) - 2*t*(t + 1)*(r + s - 1), lambda r, s, t : -2*s*t*(r + s - 1) - 2*s*(t + 1)*(r + s - 1)]
dN15 = [lambda r, s, t : 2*s*t*(t + 1), lambda r, s, t : 2*r*t*(t + 1), lambda r, s, t : 2*r*s*t + 2*r*s*(t + 1)]
dN16 = [lambda r, s, t : 4*r*(t - 1)*(t + 1) + 4*(t - 1)*(t + 1)*(r + s - 1), lambda r, s, t : 4*r*(t - 1)*(t + 1), lambda r, s, t : 4*r*(t - 1)*(r + s - 1) + 4*r*(t + 1)*(r + s - 1)]
dN17 = [lambda r, s, t : 4*s*(t - 1)*(t + 1), lambda r, s, t : 4*s*(t - 1)*(t + 1) + 4*(t - 1)*(t + 1)*(r + s - 1), lambda r, s, t : 4*s*(t - 1)*(r + s - 1) + 4*s*(t + 1)*(r + s - 1)]
dN18 = [lambda r, s, t : -4*s*(t - 1)*(t + 1), lambda r, s, t : -4*r*(t - 1)*(t + 1), lambda r, s, t : -4*r*s*(t - 1) - 4*r*s*(t + 1)]

ddN1 = [lambda r, s, t : 2*t*(t - 1), lambda r, s, t : 2*t*(t - 1), lambda r, s, t : (r + s - 1)*(2*r + 2*s - 1)]
ddN2 = [lambda r, s, t : 2*t*(t - 1), lambda r, s, t : 0, lambda r, s, t : r*(2*r - 1)]
ddN3 = [lambda r, s, t : 0, lambda r, s, t : 2*t*(t - 1), lambda r, s, t : s*(2*s - 1)]
ddN4 = [lambda r, s, t : 2*t*(t + 1), lambda r, s, t : 2*t*(t + 1), lambda r, s, t : (r + s - 1)*(2*r + 2*s - 1)]
ddN5 = [lambda r, s, t : 2*t*(t + 1), lambda r, s, t : 0, lambda r, s, t : r*(2*r - 1)]
ddN6 = [lambda r, s, t : 0, lambda r, s, t : 2*t*(t + 1), lambda r, s, t : s*(2*s - 1)]
ddN7 = [lambda r, s, t : -4*t*(t - 1), lambda r, s, t : 0, lambda r, s, t : -4*r*(r + s - 1)]
ddN8 = [lambda r, s, t : 0, lambda r, s, t : -4*t*(t - 1), lambda r, s, t : -4*s*(r + s - 1)]
ddN9 = [lambda r, s, t : -4*(t - 1)*(t + 1), lambda r, s, t : -4*(t - 1)*(t + 1), lambda r, s, t : -2*(r + s - 1)*(2*r + 2*s - 1)]
ddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 4*r*s]
ddN11 = [lambda r, s, t : -4*(t - 1)*(t + 1), lambda r, s, t : 0, lambda r, s, t : -2*r*(2*r - 1)]
ddN12 = [lambda r, s, t : 0, lambda r, s, t : -4*(t - 1)*(t + 1), lambda r, s, t : -2*s*(2*s - 1)]
ddN13 = [lambda r, s, t : -4*t*(t + 1), lambda r, s, t : 0, lambda r, s, t : -4*r*(r + s - 1)]
ddN14 = [lambda r, s, t : 0, lambda r, s, t : -4*t*(t + 1), lambda r, s, t : -4*s*(r + s - 1)]
ddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 4*r*s]
ddN16 = [lambda r, s, t : 8*(t - 1)*(t + 1), lambda r, s, t : 0, lambda r, s, t : 8*r*(r + s - 1)]
ddN17 = [lambda r, s, t : 0, lambda r, s, t : 8*(t - 1)*(t + 1), lambda r, s, t : 8*s*(r + s - 1)]
ddN18 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : -8*r*s]

dddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN14 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN16 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN17 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
dddN18 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

ddddN1 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN2 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN3 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN4 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN5 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN6 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN7 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN8 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN9 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN10 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN11 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN12 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN13 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN14 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN15 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN16 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN17 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]
ddddN18 = [lambda r, s, t : 0, lambda r, s, t : 0, lambda r, s, t : 0]

  13 import numpy as np
  14 import matplotlib.pyplot as plt
  15 from EasyFEA import Display
  16
  17 try:
  18     import sympy
  19 except ModuleNotFoundError:
  20     raise Exception("sympy must be installed!")
  21
  22 Display.Clear()
  23
  24 # SEGMENTS
  25 # TRIANGLES
  26 # QUADRANGLES
  27 # TETRAHEDRON
  28 # HEXAHEDRON
  29 # PRISM
  30
  31 # ----------------------------------------------
  32 # Options
  33 # ----------------------------------------------
  34
  35 plot_dN = True
  36 plot_ddN = True
  37 plot_dddN = True
  38 plot_ddddN = True
  39
  40 # coords = sympy.symbols("x, y, z")
  41 coords = sympy.symbols("r, s, t")
  42
  43 # ----------------------------------------------
  44 # Public functions
  45 # ----------------------------------------------
  46
  47
  48 def Compute_and_Print(
  49     polynom, *args, useSimplify=True, useFactor=True, useEulerBernoulli=False
  50 ):
  51     """Compute and print shape functions and their derivatives for a given polynom.
  52
  53     Parameters
  54     ----------
  55     polynom : function
  56         Polynomial basis function taking 1, 2, or 3 arguments.
  57     args : tuple
  58         Coordinates (1, 2, or 3 lists of x, y, z).
  59     useSimplify : bool, optional
  60         Simplify the shape functions. Default is True.
  61     useFactor : bool, optional
  62         Factor the shape functions. Default is True.
  63     useEulerBernoulli : bool, optional
  64         useEulerBernoulli shape functions. Default is False.
  65     """
  66
  67     local_coords, dim = __Get_local_coords_and_dim(*args)
  68
  69     shape_functions = __Get_shape_functions(
  70         polynom, local_coords, dim, useSimplify, useFactor, useEulerBernoulli
  71     )
  72
  73     __Print_functions(shape_functions, dim, "N")
  74
  75     # derivative_shape_functions
  76     if plot_dN:
  77         dN_functions = __Get_derivative_functions(shape_functions, dim, 1)
  78         __Print_functions(dN_functions, dim, "dN")
  79
  80     if plot_ddN:
  81         ddN_functions = __Get_derivative_functions(shape_functions, dim, 2)
  82         __Print_functions(ddN_functions, dim, "ddN")
  83
  84     if plot_dddN:
  85         dddN_functions = __Get_derivative_functions(shape_functions, dim, 3)
  86         __Print_functions(dddN_functions, dim, "dddN")
  87
  88     if plot_ddddN:
  89         ddddN_functions = __Get_derivative_functions(shape_functions, dim, 4)
  90         __Print_functions(ddddN_functions, dim, "ddddN")
  91
  92
  93 def Plot_Nodes(title: str, *args):
  94     local_coords, dim = __Get_local_coords_and_dim(*args)
  95     nPe = local_coords.shape[0]
  96
  97     list_x, list_y, list_z = local_coords.T
  98
  99     if dim == 3:
 100         ax = Display.Init_Axes(3, elev=16, azim=37)
 101         ax.set_xlabel("x")
 102         ax.set_ylabel("y")
 103         ax.set_zlabel("z")
 104         ax.set_title(title)
 105         ax.axis("equal")
 106
 107         ax.scatter(list_x, list_y, list_z)
 108         [ax.text(list_x[i], list_y[i], list_z[i], i) for i in range(nPe)]
 109     else:
 110         ax = Display.Init_Axes(2)
 111         ax.set_xlabel("x")
 112         ax.set_ylabel("y")
 113         ax.set_title(title)
 114         ax.axis("equal")
 115         ax.grid(zorder=-10)
 116
 117         ax.scatter(list_x, list_y)
 118         [ax.text(list_x[i], list_y[i], i + 1) for i in range(nPe)]
 119
 120
 121 # ----------------------------------------------
 122 # Private functions do not touch
 123 # ----------------------------------------------
 124
 125
 126 def __Get_local_coords_and_dim(*args):
 127     # Get dim
 128     dim = len(args)
 129     assert dim in [1, 2, 3], "The number of lists in args must be 1, 2, or 3."
 130
 131     # Get coordinates
 132     list_x = args[0]
 133     nPe = len(list_x)
 134
 135     list_y = args[1] if dim > 1 else [0] * nPe
 136     assert (
 137         len(list_y) == nPe
 138     ), "The length of list_y must be equal to the length of list_x."
 139
 140     list_z = args[2] if dim > 2 else [0] * nPe
 141     assert (
 142         len(list_z) == nPe
 143     ), "The length of list_z must be equal to the length of list_x."
 144
 145     local_coords = np.array([list_x, list_y, list_z]).T
 146
 147     return local_coords, dim
 148
 149
 150 def __Get_shape_functions(
 151     polynom,
 152     local_coords: np.ndarray,
 153     dim: int,
 154     useSimplify=True,
 155     useFactor=True,
 156     useEulerBernoulli=False,
 157 ) -> list:
 158     nPe = local_coords.shape[0]
 159
 160     nF = __Get_functions_per_node(polynom, local_coords, dim)
 161
 162     if useEulerBernoulli:
 163         assert nF == 2, "euler bernoulli shape functions use 2 functions per node!"
 164
 165     # construct matrix a
 166     matrix_A = __Get_matrix_A(polynom, local_coords, dim)
 167
 168     # Get symbols and coords symbols
 169     symbols = sympy.symbols(f"x0:{nPe * nF}")
 170
 171     functions = []
 172
 173     for i in range(nPe * nF):
 174         # construct vector b
 175         vector_b = np.zeros(nPe * nF)
 176         if useEulerBernoulli:
 177             vector_b[i] = 1 if i % 2 == 0 else 1 / 2
 178             coefs = polynom(*coords[:dim])[0]
 179         else:
 180             vector_b[i] = 1
 181             coefs = polynom(*coords[:dim])
 182
 183         # solve x from A x = b
 184         vector_x = np.linalg.solve(matrix_A, vector_b)
 185         # check that A x = b
 186         assert np.linalg.norm(matrix_A @ vector_x - vector_b) <= 1e-12
 187
 188         # construct shape function
 189         function = sum(coef * term for coef, term in zip(symbols, coefs))
 190         # apply values
 191         function = function.subs({key: value for key, value in zip(symbols, vector_x)})
 192
 193         # apply function display properties
 194         function = __chop(function)
 195         if useSimplify:
 196             function = function.nsimplify()
 197         if useFactor:
 198             function = function.factor()
 199
 200         functions.append(function)
 201
 202     return functions
 203
 204
 205 def __Get_matrix_A(polynom, local_coords: np.ndarray, dim: int):
 206     nPe = local_coords.shape[0]
 207
 208     nF = __Get_functions_per_node(polynom, local_coords, dim)
 209     indexes = np.arange(nPe * nF)
 210     if nF > 1:
 211         indexes = indexes.reshape(-1, 2)
 212
 213     matrix_A = np.zeros((nPe * nF, nPe * nF))
 214
 215     for n in range(nPe):
 216         matrix_A[indexes[n], :] = polynom(*local_coords[n, :dim])
 217
 218     return matrix_A
 219
 220
 221 def __Get_functions_per_node(polynom, local_coords: np.ndarray, dim: int) -> int:
 222     eval = np.array(polynom(*local_coords[0, :dim]))
 223     if len(eval.shape) == 2:
 224         return eval.shape[0]
 225     elif len(eval.shape) == 1:
 226         return 1
 227     else:
 228         raise Exception("polynom must be a function or a list of functions.")
 229
 230
 231 def __Get_derivative_functions(functions, dim, order):
 232     assert isinstance(functions, list), "functions must be a list"
 233     assert dim in [1, 2, 3]
 234     assert order >= 1 and isinstance(order, int), "order must be >= 1"
 235
 236     derivative_functions = []
 237
 238     for function in functions:
 239         functions_per_dim = []
 240
 241         # loop on dimensions
 242         for coord in coords[:dim]:
 243             func = function  # copy of `function`
 244             # loop to derive the func function
 245             for _ in range(order):
 246                 func = func.diff(coord)
 247             functions_per_dim.append(func)
 248
 249         derivative_functions.append(functions_per_dim)
 250
 251     return derivative_functions
 252
 253
 254 def __Print_functions(functions: list, dim: int, name="", printArray=False):
 255     # lamba string (e.g. lamda r, s)
 256     lambda_str = f"lambda {', '.join(str(coord) for coord in coords[:dim])}"
 257
 258     # print each functions
 259     for i, function in enumerate(functions):
 260         if isinstance(function, list):
 261             print(
 262                 f"{name}{i + 1} = [{', '.join(f'{lambda_str} : {func}' for func in function)}]"
 263             )
 264         else:
 265             print(f"{name}{i + 1} = {lambda_str} : {function}")
 266
 267     print()
 268     if printArray:
 269         end = ".reshape(-1, 1)" if len(np.shape(functions)) == 1 else ""
 270         nF = len(functions)
 271         print(
 272             f"{name} = np.array([{', '.join(f'{name}{i + 1}' for i in range(nF))}]){end}\n"
 273         )
 274
 275
 276 def __chop(expr):
 277     """Recursive function that replaces small values in the sympy expression with zero."""
 278     if isinstance(expr, sympy.Float) and abs(expr) < 1e-12:
 279         return sympy.S.Zero
 280     elif isinstance(expr, sympy.Add):
 281         return sympy.Add(*[__chop(arg) for arg in expr.args])
 282     elif isinstance(expr, sympy.Mul):
 283         return sympy.Mul(*[__chop(arg) for arg in expr.args])
 284     elif isinstance(expr, sympy.Pow):
 285         return sympy.Pow(__chop(expr.base), expr.exp)
 286     else:
 287         return expr
 288
 289
 290 # ----------------------------------------------
 291 # SEGMENTS
 292 # ----------------------------------------------
 293
 294
 295 def Do_Segments():
 296     # ----------------------------------------------
 297     # SEG 2
 298     # ----------------------------------------------
 299     #       v
 300     #       ^
 301     #       |
 302     #       |
 303     #  0----+----1 --> u
 304     # ----------------------------------------------
 305
 306     name = "SEG2"
 307     Display.Section(name)
 308
 309     list_x = [-1, 1]
 310     Plot_Nodes(name, list_x)
 311
 312     polynom = lambda x: [x, 1]
 313     Compute_and_Print(polynom, list_x)
 314
 315     Display.Section(name + " EulerBernoulli")
 316     polynom = lambda x: [[1, x, x**2, x**3], [0, 1, 2 * x, 3 * x**2]]
 317     Compute_and_Print(polynom, list_x, useEulerBernoulli=True)
 318
 319     # ----------------------------------------------
 320     # SEG 3
 321     # ----------------------------------------------
 322     #       v
 323     #       ^
 324     #       |
 325     #       |
 326     #  0----2----1 --> u
 327     # ----------------------------------------------
 328
 329     name = "SEG3"
 330     Display.Section(name)
 331
 332     list_x = [-1, 1, 0]
 333     Plot_Nodes(name, list_x)
 334
 335     polynom = lambda x: [x**2, x, 1]
 336     Compute_and_Print(polynom, list_x)
 337
 338     Display.Section(name + " EulerBernoulli")
 339     polynom = lambda x: [
 340         [1, x, x**2, x**3, x**4, x**5],
 341         [0, 1, 2 * x, 3 * x**2, 4 * x**3, 5 * x**4],
 342     ]
 343     Compute_and_Print(polynom, list_x, useEulerBernoulli=True)
 344
 345     # ----------------------------------------------
 346     # SEG 4
 347     # ----------------------------------------------
 348     #        v
 349     #        ^
 350     #        |
 351     #        |
 352     #  0---2-+-3---1 --> u
 353     # ----------------------------------------------
 354
 355     name = "SEG4"
 356     Display.Section(name)
 357
 358     list_x = [-1, 1, -1 / 3, 1 / 3]
 359     Plot_Nodes(name, list_x)
 360
 361     polynom = lambda x: [x**3, x**2, x, 1]
 362     Compute_and_Print(polynom, list_x, useFactor=False)
 363
 364     Display.Section(name + " EulerBernoulli")
 365     polynom = lambda x: [
 366         [1, x, x**2, x**3, x**4, x**5, x**6, x**7],
 367         [0, 1, 2 * x, 3 * x**2, 4 * x**3, 5 * x**4, 6 * x**5, 7 * x**6],
 368     ]
 369     Compute_and_Print(polynom, list_x, useEulerBernoulli=True, useFactor=False)
 370
 371     # ----------------------------------------------
 372     # SEG 5
 373     # ----------------------------------------------
 374     #        v
 375     #        ^
 376     #        |
 377     #        |
 378     #  0--2--3--4--1 --> u
 379     # ----------------------------------------------
 380
 381     name = "SEG5"
 382     Display.Section(name)
 383
 384     list_x = [-1, 1, -1 / 2, 0, 1 / 2]
 385     Plot_Nodes(name, list_x)
 386
 387     polynom = lambda x: [x**4, x**3, x**2, x, 1]
 388
 389     Compute_and_Print(polynom, list_x, useFactor=False)
 390
 391     Display.Section(name + " EulerBernoulli")
 392     polynom = lambda x: [
 393         [1, x, x**2, x**3, x**4, x**5, x**6, x**7, x**8, x**9],
 394         [
 395             0,
 396             1,
 397             2 * x,
 398             3 * x**2,
 399             4 * x**3,
 400             5 * x**4,
 401             6 * x**5,
 402             7 * x**6,
 403             8 * x**7,
 404             9 * x**8,
 405         ],
 406     ]
 407     Compute_and_Print(polynom, list_x, useEulerBernoulli=True, useFactor=False)
 408
 409
 410 # ----------------------------------------------
 411 # TRIANGLES
 412 # ----------------------------------------------
 413
 414
 415 def Do_Triangles():
 416     # ----------------------------------------------
 417     # TRI3
 418     # ----------------------------------------------
 419     # v
 420     # ^
 421     # |
 422     # 2
 423     # |`\
 424     # |  `\
 425     # |    `\
 426     # |      `\
 427     # |        `\
 428     # 0----------1 --> u
 429     # ----------------------------------------------
 430
 431     name = "TRI3"
 432     Display.Section(name)
 433
 434     list_x = [0, 1, 0]
 435     list_y = [0, 0, 1]
 436     Plot_Nodes(name, list_x, list_y)
 437
 438     polynom = lambda x, y: [x, y, 1]
 439
 440     Compute_and_Print(polynom, list_x, list_y)
 441
 442     # ----------------------------------------------
 443     # TRI6
 444     # ----------------------------------------------
 445     # v
 446     # ^
 447     # |
 448     # 2
 449     # |`\
 450     # |  `\
 451     # 5    `4
 452     # |      `\
 453     # |        `\
 454     # 0----3-----1 --> u
 455     # ----------------------------------------------
 456
 457     name = "TRI6"
 458     Display.Section(name)
 459
 460     list_x = [0, 1, 0, 0.5, 0.5, 0]
 461     list_y = [0, 0, 1, 0, 0.5, 0.5]
 462     Plot_Nodes(name, list_x, list_y)
 463
 464     polynom = lambda x, y: [x**2, y**2, x * y, x, y, 1]
 465
 466     Compute_and_Print(polynom, list_x, list_y)
 467
 468     # ----------------------------------------------
 469     # TRI10
 470     # ----------------------------------------------
 471     # v
 472     # ^
 473     # |
 474     # 2
 475     # | \
 476     # 7   6
 477     # |     \
 478     # 8  (9)  5
 479     # |         \
 480     # 0---3---4---1 --> u
 481     # ----------------------------------------------
 482
 483     name = "TRI10"
 484     Display.Section(name)
 485
 486     # fmt: off
 487     list_x = [
 488         0,1,0,
 489         1/3,2/3,
 490         2/3, 1/3,
 491         0,0,
 492         1/3
 493     ]
 494     list_y = [
 495         0,0,1,
 496         0,0,
 497         1/3, 2/3,
 498         2/3,1/3,
 499         1/3
 500     ]
 501     # fmt: off
 502     Plot_Nodes(name, list_x, list_y)
 503
 504     polynom = lambda x, y: [x**3, y**3, x**2 * y, x * y**2, x**2, y**2, x * y, x, y, 1]
 505
 506     Compute_and_Print(polynom, list_x, list_y, useFactor=False)
 507
 508     # ----------------------------------------------
 509     # TRI15
 510     # ----------------------------------------------
 511     #
 512     # 2
 513     # | \
 514     # 9   8
 515     # |     \
 516     # 10 (14)  7
 517     # |         \
 518     # 11 (12) (13) 6
 519     # |             \
 520     # 0---3---4---5---1
 521     # ----------------------------------------------
 522
 523     name = "TRI15"
 524     Display.Section(name)
 525
 526     # fmt: off
 527     list_x = [
 528         0,1,0,
 529         1/4,1/2,3/4,
 530         3/4,1/2,1/4,
 531         0,0,0,
 532         1/4,1/2,1/4
 533     ]
 534     list_y = [
 535         0,0,1,
 536         0,0,0,
 537         1/4,1/2,3/4,
 538         3/4,1/2,1/4,
 539         1/4,1/4,1/2
 540     ]
 541     # fmt: on
 542     Plot_Nodes(name, list_x, list_y)
 543
 544     polynom = lambda x, y: [
 545         x**4,
 546         x**3 * y,
 547         x**2 * y**2,
 548         x * y**3,
 549         y**4,
 550         x**3,
 551         x**2 * y,
 552         x * y**2,
 553         y**3,
 554         x**2,
 555         x * y,
 556         y**2,
 557         x,
 558         y,
 559         1,
 560     ]
 561
 562     Compute_and_Print(polynom, list_x, list_y, useFactor=False)
 563
 564
 565 # ----------------------------------------------
 566 # QUADRANGLES
 567 # ----------------------------------------------
 568
 569
 570 def Do_Quadrangles():
 571     # ----------------------------------------------
 572     # QUAD4
 573     # ----------------------------------------------
 574     #       v
 575     #       ^
 576     #       |
 577     # 3-----------2
 578     # |     |     |
 579     # |     |     |
 580     # |     +---- | --> u
 581     # |           |
 582     # |           |
 583     # 0-----------1
 584     # ----------------------------------------------
 585
 586     name = "QUAD4"
 587     Display.Section(name)
 588
 589     list_x = [-1, 1, 1, -1]
 590     list_y = [-1, -1, 1, 1]
 591     Plot_Nodes(name, list_x, list_y)
 592
 593     polynom = lambda x, y: [x * y, x, y, 1]
 594
 595     Compute_and_Print(polynom, list_x, list_y)
 596
 597     # ----------------------------------------------
 598     # QUAD8
 599     # ----------------------------------------------
 600     #       v
 601     #       ^
 602     #       |
 603     # 3-----6-----2
 604     # |     |     |
 605     # |     |     |
 606     # 7     +---- 5 --> u
 607     # |           |
 608     # |           |
 609     # 0-----4-----1
 610     # ----------------------------------------------
 611
 612     name = "QUAD8"
 613     Display.Section(name)
 614
 615     list_x = [-1, 1, 1, -1, 0, 1, 0, -1]
 616     list_y = [-1, -1, 1, 1, -1, 0, 1, 0]
 617     Plot_Nodes(name, list_x, list_y)
 618
 619     polynom = lambda x, y: [x**2 * y, y**2 * x, x**2, y**2, x * y, x, y, 1]
 620
 621     Compute_and_Print(polynom, list_x, list_y, useFactor=True)
 622
 623     # ----------------------------------------------
 624     # QUAD9
 625     # ----------------------------------------------
 626     #       v
 627     #       ^
 628     #       |
 629     # 3-----6-----2
 630     # |     |     |
 631     # |     |     |
 632     # 7     8---- 5 --> u
 633     # |           |
 634     # |           |
 635     # 0-----4-----1
 636     # ----------------------------------------------
 637
 638     name = "QUAD9"
 639     Display.Section(name)
 640
 641     list_x = [-1, 1, 1, -1, 0, 1, 0, -1, 0]
 642     list_y = [-1, -1, 1, 1, -1, 0, 1, 0, 0]
 643     Plot_Nodes(name, list_x, list_y)
 644
 645     polynom = lambda x, y: [x**2 * y**2, x**2 * y, y**2 * x, x**2, y**2, x * y, x, y, 1]
 646
 647     Compute_and_Print(polynom, list_x, list_y, useFactor=True)
 648
 649
 650 # ----------------------------------------------
 651 # TETRAHEDRON
 652 # ----------------------------------------------
 653
 654
 655 def Do_Tetrahedron():
 656     # ----------------------------------------------
 657     # TETRA4
 658     # ----------------------------------------------
 659     #                    v
 660     #                  .
 661     #                ,/
 662     #               /
 663     #            2
 664     #          ,/|`\
 665     #        ,/  |  `\
 666     #      ,/    '.   `\
 667     #    ,/       |     `\
 668     #  ,/         |       `\
 669     # 0-----------'.--------1 --> u
 670     #  `\.         |      ,/
 671     #     `\.      |    ,/
 672     #        `\.   '. ,/
 673     #           `\. |/
 674     #              `3
 675     #                 `\.
 676     #                    ` w
 677     # ----------------------------------------------
 678
 679     name = "TETRA4"
 680     Display.Section(name)
 681
 682     list_x = [0, 1, 0, 0]
 683     list_y = [0, 0, 1, 0]
 684     list_z = [0, 0, 0, 1]
 685     Plot_Nodes(name, list_x, list_y, list_z)
 686
 687     polynom = lambda x, y, z: [x, y, z, 1]
 688
 689     Compute_and_Print(polynom, list_x, list_y, list_z)
 690
 691     # ----------------------------------------------
 692     # TETRA10
 693     # ----------------------------------------------
 694     #                    v
 695     #                  .
 696     #                ,/
 697     #               /
 698     #            2
 699     #          ,/|`\
 700     #        ,/  |  `\
 701     #      ,6    '.   `5
 702     #    ,/       8     `\
 703     #  ,/         |       `\
 704     # 0--------4--'.--------1 --> u
 705     #  `\.         |      ,/
 706     #     `\.      |    ,9
 707     #        `7.   '. ,/
 708     #           `\. |/
 709     #              `3
 710     #                 `\.
 711     #                    ` w
 712     # ----------------------------------------------
 713
 714     name = "TETRA10"
 715     Display.Section(name)
 716
 717     list_x = [0, 1, 0, 0, 0.5, 0.5, 0, 0, 0, 0.5]
 718     list_y = [0, 0, 1, 0, 0, 0.5, 0.5, 0, 0.5, 0]
 719     list_z = [0, 0, 0, 1, 0, 0, 0, 0.5, 0.5, 0.5]
 720     Plot_Nodes(name, list_x, list_y, list_z)
 721
 722     polynom = lambda x, y, z: [x**2, y**2, z**2, x * y, x * z, y * z, x, y, z, 1]
 723
 724     Compute_and_Print(polynom, list_x, list_y, list_z)
 725
 726
 727 # ----------------------------------------------
 728 # HEXAHEDRON
 729 # ----------------------------------------------
 730
 731
 732 def Do_Hexahedron():
 733     # ----------------------------------------------
 734     # HEXA8
 735     # ----------------------------------------------
 736     #        v
 737     # 3----------2
 738     # |\     ^   |\
 739     # | \    |   | \
 740     # |  \   |   |  \
 741     # |   7------+---6
 742     # |   |  +-- |-- | -> u
 743     # 0---+---\--1   |
 744     #  \  |    \  \  |
 745     #   \ |     \  \ |
 746     #    \|      w  \|
 747     #     4----------5
 748     # ----------------------------------------------
 749
 750     name = "HEXA8"
 751     Display.Section(name)
 752
 753     list_x = [-1, 1, 1, -1, -1, 1, 1, -1]
 754     list_y = [-1, -1, 1, 1, -1, -1, 1, 1]
 755     list_z = [-1, -1, -1, -1, 1, 1, 1, 1]
 756     Plot_Nodes(name, list_x, list_y, list_z)
 757
 758     polynom = lambda x, y, z: [x * y * z, x * y, x * z, y * z, x, y, z, 1]
 759
 760     Compute_and_Print(polynom, list_x, list_y, list_z)
 761
 762     # ----------------------------------------------
 763     # HEXA20
 764     # ----------------------------------------------
 765     #        v
 766     # 3----13----2
 767     # |\     ^   |\
 768     # | 15   |   | 14
 769     # 9  \   |   11 \
 770     # |   7----19+---6
 771     # |   |  +-- |-- | -> u
 772     # 0---+-8-\--1   |
 773     #  \  17   \  \  18
 774     #  10 |     \  12|
 775     #    \|      w  \|
 776     #     4----16----5
 777     # ----------------------------------------------
 778
 779     name = "HEXA20"
 780     Display.Section(name)
 781
 782     # fmt: off
 783     list_x = [-1,1,1,-1,
 784             -1,1,1,-1,
 785             0,-1,-1,1,
 786             1,0,1,-1,
 787             0,-1,1,0]
 788     list_y = [-1,-1,1,1,
 789             -1,-1,1,1,
 790             -1,0,-1,0,
 791             -1,1,1,1,
 792             -1,0,0,1]
 793     list_z = [-1,-1,-1,-1,
 794             1,1,1,1,
 795             -1,-1,0,-1,
 796             0,-1,0,0,
 797             1,1,1,1]
 798     # fmt: on
 799     Plot_Nodes(name, list_x, list_y, list_z)
 800
 801     polynom = lambda x, y, z: [
 802         x**2 * y * z,
 803         y**2 * x * z,
 804         z**2 * x * y,
 805         x**2 * y,
 806         y**2 * x,
 807         z**2 * x,
 808         x**2 * z,
 809         y**2 * z,
 810         z**2 * y,
 811         x**2,
 812         y**2,
 813         z**2,
 814         x * y,
 815         x * z,
 816         y * z,
 817         x,
 818         y,
 819         z,
 820         x * y * z,
 821         1,
 822     ]
 823
 824     Compute_and_Print(polynom, list_x, list_y, list_z, useSimplify=True, useFactor=True)
 825
 826     # ----------------------------------------------
 827     # HEXA27
 828     # ----------------------------------------------
 829     #
 830     # 3----13----2
 831     # |\         |\
 832     # |15    24  | 14
 833     # 9  \ 20    11 \
 834     # |   7----19+---6
 835     # |22 |  26  | 23|
 836     # 0---+-8----1   |
 837     #  \ 17    25 \  18
 838     #  10 |  21    12|
 839     #    \|         \|
 840     #     4----16----5
 841     # ----------------------------------------------
 842
 843     name = "HEXA27"
 844     Display.Section(name)
 845
 846     # fmt: off
 847     list_x = [
 848         -1,1,1,-1,
 849         -1,1,1,-1,
 850         0,-1,-1,1,
 851         1,0,1,-1,
 852         0,-1,1,0,
 853         0,0,-1,1,
 854         0,0,0
 855     ]
 856     list_y = [
 857         -1,-1,1,1,
 858         -1,-1,1,1,
 859         -1,0,-1,0,
 860         -1,1,1,1,
 861         -1,0,0,1,
 862         0,-1,0,0,
 863         1,0,0
 864     ]
 865     list_z = [
 866         -1,-1,-1,-1,
 867         1,1,1,1,
 868         -1,-1,0,-1,
 869         0,-1,0,0,
 870         1,1,1,1,
 871         -1,0,0,0,
 872         0,1,0
 873     ]
 874     # fmt: on
 875     Plot_Nodes(name, list_x, list_y, list_z)
 876
 877     polynom = lambda x, y, z: [
 878         x**2 * z**2 * y,
 879         x**2 * y**2 * z,
 880         y**2 * z**2 * x,
 881         x**2 * z**2 * y**2,
 882         x**2 * y**2,
 883         x**2 * z**2,
 884         y**2 * z**2,
 885         x**2 * y * z,
 886         y**2 * x * z,
 887         z**2 * x * y,
 888         x**2 * y,
 889         y**2 * x,
 890         z**2 * x,
 891         x**2 * z,
 892         y**2 * z,
 893         z**2 * y,
 894         x**2,
 895         y**2,
 896         z**2,
 897         x * y,
 898         x * z,
 899         y * z,
 900         x,
 901         y,
 902         z,
 903         x * y * z,
 904         1,
 905     ]
 906
 907     Compute_and_Print(polynom, list_x, list_y, list_z, useSimplify=True, useFactor=True)
 908
 909
 910 # ----------------------------------------------
 911 # PRISM
 912 # ----------------------------------------------
 913
 914
 915 def Do_Prism():
 916     # ----------------------------------------------
 917     # PRISM6
 918     # ----------------------------------------------
 919     #            w
 920     #            ^
 921     #            |
 922     #            3
 923     #          ,/|`\
 924     #        ,/  |  `\
 925     #      ,/    |    `\
 926     #     4------+------5
 927     #     |      |      |
 928     #     |    ,/|`\    |
 929     #     |  ,/  |  `\  |
 930     #     |,/    |    `\|
 931     #    ,|      |      |\
 932     #  ,/ |      0      | `\
 933     # u   |    ,/ `\    |    v
 934     #     |  ,/     `\  |
 935     #     |,/         `\|
 936     #     1-------------2
 937     # ----------------------------------------------
 938
 939     name = "PRISM6"
 940     Display.Section(name)
 941
 942     list_x = [0, 1, 0, 0, 1, 0]
 943     list_y = [0, 0, 1, 0, 0, 1]
 944     list_z = [-1, -1, -1, 1, 1, 1]
 945     Plot_Nodes(name, list_x, list_y, list_z)
 946
 947     polynom = lambda x, y, z: [x * z, y * z, x, y, z, 1]
 948
 949     Compute_and_Print(polynom, list_x, list_y, list_z)
 950
 951     # ----------------------------------------------
 952     # PRISM15
 953     # ----------------------------------------------
 954     #            w
 955     #            ^
 956     #            |
 957     #            3
 958     #          ,/|`\
 959     #        12  |  13
 960     #      ,/    |    `\
 961     #     4------14-----5
 962     #     |      8      |
 963     #     |    ,/|`\    |
 964     #     |  ,/  |  `\  |
 965     #     |,/    |    `\|
 966     #    ,10     |      11
 967     #  ,/ |      0      | \
 968     # u   |    ,/ `\    |   v
 969     #     |  ,6     `7  |
 970     #     |,/         `\|
 971     #     1------9------2
 972     # ----------------------------------------------
 973
 974     name = "PRISM15"
 975     Display.Section(name)
 976
 977     list_x = [0, 1, 0, 0, 1, 0, 0.5, 0, 0, 0.5, 1, 0, 0.5, 0, 0.5]
 978     list_y = [0, 0, 1, 0, 0, 1, 0, 0.5, 0, 0.5, 0, 1, 0, 0.5, 0.5]
 979     list_z = [-1, -1, -1, 1, 1, 1, -1, -1, 0, -1, 0, 0, 1, 1, 1]
 980     Plot_Nodes(name, list_x, list_y, list_z)
 981
 982     polynom = lambda x, y, z: [
 983         x**2 * z,
 984         y**2 * z,
 985         z**2 * x,
 986         z**2 * y,
 987         x * y * z,
 988         x**2,
 989         y**2,
 990         z**2,
 991         x * y,
 992         x * z,
 993         y * z,
 994         x,
 995         y,
 996         z,
 997         1,
 998     ]
 999
1000     Compute_and_Print(polynom, list_x, list_y, list_z)
1001
1002     # ----------------------------------------------
1003     # PRISM18
1004     # ----------------------------------------------
1005     #            w
1006     #            ^
1007     #            |
1008     #            3
1009     #          ,/|`\
1010     #        12  |  13
1011     #      ,/    |    `\
1012     #     4------14-----5
1013     #     |      8      |
1014     #     |    ,/|`\    |
1015     #     |  15  |  16  |
1016     #     |,/    |    `\|
1017     #    ,10-----17-----11
1018     #  ,/ |      0      | \
1019     # u   |    ,/ `\    |   v
1020     #     |  ,6     `7  |
1021     #     |,/         `\|
1022     #     1------9------2
1023     # ----------------------------------------------
1024
1025     name = "PRISM18"
1026     Display.Section(name)
1027
1028     list_x = [0, 1, 0, 0, 1, 0, 0.5, 0, 0, 0.5, 1, 0, 0.5, 0, 0.5, 0.5, 0, 0.5]
1029     list_y = [0, 0, 1, 0, 0, 1, 0, 0.5, 0, 0.5, 0, 1, 0, 0.5, 0.5, 0, 0.5, 0.5]
1030     list_z = [-1, -1, -1, 1, 1, 1, -1, -1, 0, -1, 0, 0, 1, 1, 1, 0, 0, 0]
1031     Plot_Nodes(name, list_x, list_y, list_z)
1032
1033     polynom = lambda x, y, z: [
1034         x**2,
1035         y**2,
1036         x * y,
1037         x,
1038         y,
1039         1,
1040         x**2 * z,
1041         y**2 * z,
1042         x * y * z,
1043         x * z,
1044         y * z,
1045         z,
1046         x**2 * z**2,
1047         y**2 * z**2,
1048         x * y * z**2,
1049         x * z**2,
1050         y * z**2,
1051         z**2,
1052     ]
1053
1054     Compute_and_Print(polynom, list_x, list_y, list_z)
1055
1056
1057 # ----------------------------------------------
1058 # MAIN
1059 # ----------------------------------------------
1060
1061 if __name__ == "__main__":
1062     Do_Segments()
1063
1064     Do_Triangles()
1065
1066     Do_Quadrangles()
1067
1068     Do_Tetrahedron()
1069
1070     Do_Hexahedron()
1071
1072     Do_Prism()
1073
1074     plt.show()

Total running time of the script: (0 minutes 6.766 seconds)

Gallery generated by Sphinx-Gallery