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


















