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


















