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


















