QCaml/Utils/SphericalToCartesian.ml

661 lines
29 KiB
OCaml

open Lacaml.D
module Am = AngularMomentum
let matrix = function
| Am.S -> Mat.make 1 1 1.
| Am.P ->
begin
let result = Mat.make 3 3 0. in
result.{ 3, 1} <- 1.0;
result.{ 1, 2} <- 1.0;
result.{ 2, 3} <- 1.0;
result
end
| Am.D ->
begin
let result = Mat.make 6 5 0. in
result.{ 1, 1} <- -0.5;
result.{ 4, 1} <- -0.5;
result.{ 6, 1} <- 1.0;
result.{ 3, 2} <- 1.0;
result.{ 5, 3} <- 1.0;
result.{ 1, 4} <- 0.86602540378443864676;
result.{ 4, 4} <- -0.86602540378443864676;
result.{ 2, 5} <- 1.0;
result
end
| Am.F ->
begin
let result = Mat.make 10 7 0. in
result.{ 3, 1} <- -0.67082039324993690892;
result.{ 8, 1} <- -0.67082039324993690892;
result.{10, 1} <- 1.0;
result.{ 1, 2} <- -0.61237243569579452455;
result.{ 4, 2} <- -0.27386127875258305673;
result.{ 6, 2} <- 1.0954451150103322269;
result.{ 2, 3} <- -0.27386127875258305673;
result.{ 7, 3} <- -0.61237243569579452455;
result.{ 9, 3} <- 1.0954451150103322269;
result.{ 3, 4} <- 0.86602540378443864676;
result.{ 8, 4} <- -0.86602540378443864676;
result.{ 5, 5} <- 1.0;
result.{ 1, 6} <- 0.790569415042094833;
result.{ 4, 6} <- -1.0606601717798212866;
result.{ 2, 7} <- 1.0606601717798212866;
result.{ 7, 7} <- -0.790569415042094833;
result
end
| Am.G ->
begin
let result = Mat.make 15 9 0. in
result.{ 1, 1} <- 0.375;
result.{ 4, 1} <- 0.21957751641341996535;
result.{ 6, 1} <- -0.87831006565367986142;
result.{11, 1} <- 0.375;
result.{13, 1} <- -0.87831006565367986142;
result.{15, 1} <- 1.0;
result.{ 3, 2} <- -0.89642145700079522998;
result.{ 8, 2} <- -0.40089186286863657703;
result.{10, 2} <- 1.19522860933439364;
result.{ 5, 3} <- -0.40089186286863657703;
result.{12, 3} <- -0.89642145700079522998;
result.{14, 3} <- 1.19522860933439364;
result.{ 1, 4} <- -0.5590169943749474241;
result.{ 6, 4} <- 0.9819805060619657157;
result.{11, 4} <- 0.5590169943749474241;
result.{13, 4} <- -0.9819805060619657157;
result.{ 2, 5} <- -0.42257712736425828875;
result.{ 7, 5} <- -0.42257712736425828875;
result.{ 9, 5} <- 1.1338934190276816816;
result.{ 3, 6} <- 0.790569415042094833;
result.{ 8, 6} <- -1.0606601717798212866;
result.{ 5, 7} <- 1.0606601717798212866;
result.{12, 7} <- -0.790569415042094833;
result.{ 1, 8} <- 0.73950997288745200532;
result.{ 4, 8} <- -1.2990381056766579701;
result.{11, 8} <- 0.73950997288745200532;
result.{ 2, 9} <- 1.1180339887498948482;
result.{ 7, 9} <- -1.1180339887498948482;
result
end
| Am.H ->
begin
let result = Mat.make 21 11 0. in
result.{ 3, 1} <- 0.625;
result.{ 8, 1} <- 0.36596252735569994226;
result.{10, 1} <- -1.0910894511799619063;
result.{17, 1} <- 0.625;
result.{19, 1} <- -1.0910894511799619063;
result.{21, 1} <- 1.0;
result.{ 1, 2} <- 0.48412291827592711065;
result.{ 4, 2} <- 0.21128856368212914438;
result.{ 6, 2} <- -1.2677313820927748663;
result.{11, 2} <- 0.16137430609197570355;
result.{13, 2} <- -0.56694670951384084082;
result.{15, 2} <- 1.2909944487358056284;
result.{ 2, 3} <- 0.16137430609197570355;
result.{ 7, 3} <- 0.21128856368212914438;
result.{ 9, 3} <- -0.56694670951384084082;
result.{16, 3} <- 0.48412291827592711065;
result.{18, 3} <- -1.2677313820927748663;
result.{20, 3} <- 1.2909944487358056284;
result.{ 3, 4} <- -0.85391256382996653194;
result.{10, 4} <- 1.1180339887498948482;
result.{17, 4} <- 0.85391256382996653194;
result.{19, 4} <- -1.1180339887498948482;
result.{ 5, 5} <- -0.6454972243679028142;
result.{12, 5} <- -0.6454972243679028142;
result.{14, 5} <- 1.2909944487358056284;
result.{ 1, 6} <- -0.52291251658379721749;
result.{ 4, 6} <- 0.22821773229381921394;
result.{ 6, 6} <- 0.91287092917527685576;
result.{11, 6} <- 0.52291251658379721749;
result.{13, 6} <- -1.2247448713915890491;
result.{ 2, 7} <- -0.52291251658379721749;
result.{ 7, 7} <- -0.22821773229381921394;
result.{ 9, 7} <- 1.2247448713915890491;
result.{16, 7} <- 0.52291251658379721749;
result.{18, 7} <- -0.91287092917527685576;
result.{ 3, 8} <- 0.73950997288745200532;
result.{ 8, 8} <- -1.2990381056766579701;
result.{17, 8} <- 0.73950997288745200532;
result.{ 5, 9} <- 1.1180339887498948482;
result.{12, 9} <- -1.1180339887498948482;
result.{ 1,10} <- 0.7015607600201140098;
result.{ 4,10} <- -1.5309310892394863114;
result.{11,10} <- 1.169267933366856683;
result.{ 2,11} <- 1.169267933366856683;
result.{ 7,11} <- -1.5309310892394863114;
result.{16,11} <- 0.7015607600201140098;
result
end
|Am.I ->
begin
let result = Mat.make 28 13 0. in
result.{ 1, 1} <- -0.3125;
result.{ 4, 1} <- -0.16319780245846672329;
result.{ 6, 1} <- 0.97918681475080033975;
result.{11, 1} <- -0.16319780245846672329;
result.{13, 1} <- 0.57335309036732873772;
result.{15, 1} <- -1.3055824196677337863;
result.{22, 1} <- -0.3125;
result.{24, 1} <- 0.97918681475080033975;
result.{26, 1} <- -1.3055824196677337863;
result.{28, 1} <- 1.0;
result.{ 3, 2} <- 0.86356159963469679725;
result.{ 8, 2} <- 0.37688918072220452831;
result.{10, 2} <- -1.6854996561581052156;
result.{17, 2} <- 0.28785386654489893242;
result.{19, 2} <- -0.75377836144440905662;
result.{21, 2} <- 1.3816985594155148756;
result.{ 5, 3} <- 0.28785386654489893242;
result.{12, 3} <- 0.37688918072220452831;
result.{14, 3} <- -0.75377836144440905662;
result.{23, 3} <- 0.86356159963469679725;
result.{25, 3} <- -1.6854996561581052156;
result.{27, 3} <- 1.3816985594155148756;
result.{ 1, 4} <- 0.45285552331841995543;
result.{ 4, 4} <- 0.078832027985861408788;
result.{ 6, 4} <- -1.2613124477737825406;
result.{11, 4} <- -0.078832027985861408788;
result.{15, 4} <- 1.2613124477737825406;
result.{22, 4} <- -0.45285552331841995543;
result.{24, 4} <- 1.2613124477737825406;
result.{26, 4} <- -1.2613124477737825406;
result.{ 2, 5} <- 0.27308215547040717681;
result.{ 7, 5} <- 0.26650089544451304287;
result.{ 9, 5} <- -0.95346258924559231545;
result.{16, 5} <- 0.27308215547040717681;
result.{18, 5} <- -0.95346258924559231545;
result.{20, 5} <- 1.4564381625088382763;
result.{ 3, 6} <- -0.81924646641122153043;
result.{ 8, 6} <- 0.35754847096709711829;
result.{10, 6} <- 1.0660035817780521715;
result.{17, 6} <- 0.81924646641122153043;
result.{19, 6} <- -1.4301938838683884732;
result.{ 5, 7} <- -0.81924646641122153043;
result.{12, 7} <- -0.35754847096709711829;
result.{14, 7} <- 1.4301938838683884732;
result.{23, 7} <- 0.81924646641122153043;
result.{25, 7} <- -1.0660035817780521715;
result.{ 1, 8} <- -0.49607837082461073572;
result.{ 4, 8} <- 0.43178079981734839863;
result.{ 6, 8} <- 0.86356159963469679725;
result.{11, 8} <- 0.43178079981734839863;
result.{13, 8} <- -1.5169496905422946941;
result.{22, 8} <- -0.49607837082461073572;
result.{24, 8} <- 0.86356159963469679725;
result.{ 2, 9} <- -0.59829302641309923139;
result.{ 9, 9} <- 1.3055824196677337863;
result.{16, 9} <- 0.59829302641309923139;
result.{18, 9} <- -1.3055824196677337863;
result.{ 3,10} <- 0.7015607600201140098;
result.{ 8,10} <- -1.5309310892394863114;
result.{17,10} <- 1.169267933366856683;
result.{ 5,11} <- 1.169267933366856683;
result.{12,11} <- -1.5309310892394863114;
result.{23,11} <- 0.7015607600201140098;
result.{ 1,12} <- 0.67169328938139615748;
result.{ 4,12} <- -1.7539019000502850245;
result.{11,12} <- 1.7539019000502850245;
result.{22,12} <- -0.67169328938139615748;
result.{ 2,13} <- 1.2151388809514737933;
result.{ 7,13} <- -1.9764235376052370825;
result.{16,13} <- 1.2151388809514737933;
result
end
|Am.J ->
begin
let result = Mat.make 36 15 0. in
result.{ 3, 1} <- -0.60670333962134435221;
result.{ 8, 1} <- -0.31684048566533184861;
result.{10, 1} <- 1.4169537279434593918;
result.{17, 1} <- -0.31684048566533184861;
result.{19, 1} <- 0.82968314787883083417;
result.{21, 1} <- -1.5208343311935928733;
result.{30, 1} <- -0.60670333962134435221;
result.{32, 1} <- 1.4169537279434593918;
result.{34, 1} <- -1.5208343311935928733;
result.{36, 1} <- 1.0;
result.{ 1, 2} <- -0.41339864235384227977;
result.{ 4, 2} <- -0.17963167078872714852;
result.{ 6, 2} <- 1.4370533663098171882;
result.{11, 2} <- -0.1338895422651523892;
result.{13, 2} <- 0.62718150750531807803;
result.{15, 2} <- -2.1422326762424382273;
result.{22, 2} <- -0.1146561540164598136;
result.{24, 2} <- 0.47901778876993906273;
result.{26, 2} <- -0.95803557753987812546;
result.{28, 2} <- 1.4675987714106856141;
result.{ 2, 3} <- -0.1146561540164598136;
result.{ 7, 3} <- -0.1338895422651523892;
result.{ 9, 3} <- 0.47901778876993906273;
result.{16, 3} <- -0.17963167078872714852;
result.{18, 3} <- 0.62718150750531807803;
result.{20, 3} <- -0.95803557753987812546;
result.{29, 3} <- -0.41339864235384227977;
result.{31, 3} <- 1.4370533663098171882;
result.{33, 3} <- -2.1422326762424382273;
result.{35, 3} <- 1.4675987714106856141;
result.{ 3, 4} <- 0.84254721963085980365;
result.{ 8, 4} <- 0.14666864502533059662;
result.{10, 4} <- -1.7491256557036030854;
result.{17, 4} <- -0.14666864502533059662;
result.{21, 4} <- 1.4080189922431737275;
result.{30, 4} <- -0.84254721963085980365;
result.{32, 4} <- 1.7491256557036030854;
result.{34, 4} <- -1.4080189922431737275;
result.{ 5, 5} <- 0.50807509012231371428;
result.{12, 5} <- 0.49583051751369852316;
result.{14, 5} <- -1.3222147133698627284;
result.{23, 5} <- 0.50807509012231371428;
result.{25, 5} <- -1.3222147133698627284;
result.{27, 5} <- 1.6258402883914038857;
result.{ 1, 6} <- 0.42961647140211000062;
result.{ 4, 6} <- -0.062226236090912312563;
result.{ 6, 6} <- -1.2445247218182462513;
result.{11, 6} <- -0.23190348980538452414;
result.{13, 6} <- 0.54315511828342602619;
result.{15, 6} <- 1.2368186122953841287;
result.{22, 6} <- -0.35746251148251142922;
result.{24, 6} <- 1.2445247218182462513;
result.{26, 6} <- -1.6593662957576616683;
result.{ 2, 7} <- 0.35746251148251142922;
result.{ 7, 7} <- 0.23190348980538452414;
result.{ 9, 7} <- -1.2445247218182462513;
result.{16, 7} <- 0.062226236090912312563;
result.{18, 7} <- -0.54315511828342602619;
result.{20, 7} <- 1.6593662957576616683;
result.{29, 7} <- -0.42961647140211000062;
result.{31, 7} <- 1.2445247218182462513;
result.{33, 7} <- -1.2368186122953841287;
result.{ 3, 8} <- -0.79037935147039945351;
result.{ 8, 8} <- 0.6879369240987588816;
result.{10, 8} <- 1.025515817677958738;
result.{17, 8} <- 0.6879369240987588816;
result.{19, 8} <- -1.8014417303072302517;
result.{30, 8} <- -0.79037935147039945351;
result.{32, 8} <- 1.025515817677958738;
result.{ 5, 9} <- -0.95323336395336381126;
result.{14, 9} <- 1.5504341823651057024;
result.{23, 9} <- 0.95323336395336381126;
result.{25, 9} <- -1.5504341823651057024;
result.{ 1,10} <- -0.47495887979908323849;
result.{ 4,10} <- 0.61914323168888299344;
result.{ 6,10} <- 0.82552430891851065792;
result.{11,10} <- 0.25637895441948968451;
result.{13,10} <- -1.8014417303072302517;
result.{22,10} <- -0.65864945955866621126;
result.{24,10} <- 1.3758738481975177632;
result.{ 2,11} <- -0.65864945955866621126;
result.{ 7,11} <- 0.25637895441948968451;
result.{ 9,11} <- 1.3758738481975177632;
result.{16,11} <- 0.61914323168888299344;
result.{18,11} <- -1.8014417303072302517;
result.{29,11} <- -0.47495887979908323849;
result.{31,11} <- 0.82552430891851065792;
result.{ 3,12} <- 0.67169328938139615748;
result.{ 8,12} <- -1.7539019000502850245;
result.{17,12} <- 1.7539019000502850245;
result.{30,12} <- -0.67169328938139615748;
result.{ 5,13} <- 1.2151388809514737933;
result.{12,13} <- -1.9764235376052370825;
result.{23,13} <- 1.2151388809514737933;
result.{ 1,14} <- 0.64725984928774934788;
result.{ 4,14} <- -1.96875;
result.{11,14} <- 2.4456993503903949804;
result.{22,14} <- -1.2566230789301937693;
result.{ 2,15} <- 1.2566230789301937693;
result.{ 7,15} <- -2.4456993503903949804;
result.{16,15} <- 1.96875;
result.{29,15} <- -0.64725984928774934788;
result
end
|Am.K ->
begin
let result = Mat.make 45 17 0. in
result.{ 1, 1} <- 0.2734375;
result.{ 4, 1} <- 0.13566299095694674896;
result.{ 6, 1} <- -1.0853039276555739917;
result.{11, 1} <- 0.12099545906566282998;
result.{13, 1} <- -0.56678149117738375672;
result.{15, 1} <- 1.9359273450506052797;
result.{22, 1} <- 0.13566299095694674896;
result.{24, 1} <- -0.56678149117738375672;
result.{26, 1} <- 1.1335629823547675134;
result.{28, 1} <- -1.7364862842489183867;
result.{37, 1} <- 0.2734375;
result.{39, 1} <- -1.0853039276555739917;
result.{41, 1} <- 1.9359273450506052797;
result.{43, 1} <- -1.7364862842489183867;
result.{45, 1} <- 1.0;
result.{ 3, 2} <- -0.84721510698287244363;
result.{ 8, 2} <- -0.36813537731583001376;
result.{10, 2} <- 2.1951352762686132731;
result.{17, 2} <- -0.27439190953357665914;
result.{19, 2} <- 0.95803557753987812546;
result.{21, 2} <- -2.6341623315223359277;
result.{30, 2} <- -0.23497519304418891392;
result.{32, 2} <- 0.73171175875620442437;
result.{34, 2} <- -1.178033207410656044;
result.{36, 2} <- 1.5491933384829667541;
result.{ 5, 3} <- -0.23497519304418891392;
result.{12, 3} <- -0.27439190953357665914;
result.{14, 3} <- 0.73171175875620442437;
result.{23, 3} <- -0.36813537731583001376;
result.{25, 3} <- 0.95803557753987812546;
result.{27, 3} <- -1.178033207410656044;
result.{38, 3} <- -0.84721510698287244363;
result.{40, 3} <- 2.1951352762686132731;
result.{42, 3} <- -2.6341623315223359277;
result.{44, 3} <- 1.5491933384829667541;
result.{ 1, 4} <- -0.39218438743784791311;
result.{ 4, 4} <- -0.0972889728117695298;
result.{ 6, 4} <- 1.459334592176542947;
result.{13, 4} <- 0.25403754506115685714;
result.{15, 4} <- -2.3138757483972597747;
result.{22, 4} <- 0.0972889728117695298;
result.{24, 4} <- -0.25403754506115685714;
result.{28, 4} <- 1.5566235649883124768;
result.{37, 4} <- 0.39218438743784791311;
result.{39, 4} <- -1.459334592176542947;
result.{41, 4} <- 2.3138757483972597747;
result.{43, 4} <- -1.5566235649883124768;
result.{ 2, 5} <- -0.20252314682524563222;
result.{ 7, 5} <- -0.1967766362666553471;
result.{ 9, 5} <- 0.8800118701519835797;
result.{16, 5} <- -0.1967766362666553471;
result.{18, 5} <- 0.85880364827689588344;
result.{20, 5} <- -1.7491256557036030854;
result.{29, 5} <- -0.20252314682524563222;
result.{31, 5} <- 0.8800118701519835797;
result.{33, 5} <- -1.7491256557036030854;
result.{35, 5} <- 1.7974340685458342478;
result.{ 3, 6} <- 0.82265291131801144316;
result.{ 8, 6} <- -0.11915417049417047641;
result.{10, 6} <- -1.7762455001837659611;
result.{17, 6} <- -0.44406137504594149028;
result.{19, 6} <- 0.77521709118255285119;
result.{21, 6} <- 1.4209964001470127689;
result.{30, 6} <- -0.68448859700003543819;
result.{32, 6} <- 1.7762455001837659611;
result.{34, 6} <- -1.9064667279067276225;
result.{ 5, 7} <- 0.68448859700003543819;
result.{12, 7} <- 0.44406137504594149028;
result.{14, 7} <- -1.7762455001837659611;
result.{23, 7} <- 0.11915417049417047641;
result.{25, 7} <- -0.77521709118255285119;
result.{27, 7} <- 1.9064667279067276225;
result.{38, 7} <- -0.82265291131801144316;
result.{40, 7} <- 1.7762455001837659611;
result.{42, 7} <- -1.4209964001470127689;
result.{ 1, 8} <- 0.41132645565900572158;
result.{ 4, 8} <- -0.20407507102873838124;
result.{ 6, 8} <- -1.2244504261724302874;
result.{11, 8} <- -0.3033516698106721761;
result.{13, 8} <- 1.0657473001102595767;
result.{15, 8} <- 1.2134066792426887044;
result.{22, 8} <- -0.20407507102873838124;
result.{24, 8} <- 1.0657473001102595767;
result.{26, 8} <- -2.1314946002205191534;
result.{37, 8} <- 0.41132645565900572158;
result.{39, 8} <- -1.2244504261724302874;
result.{41, 8} <- 1.2134066792426887044;
result.{ 2, 9} <- 0.42481613669916071115;
result.{ 7, 9} <- 0.13758738481975177632;
result.{ 9, 9} <- -1.4767427774562605828;
result.{16, 9} <- -0.13758738481975177632;
result.{20, 9} <- 1.8344984642633570176;
result.{29, 9} <- -0.42481613669916071115;
result.{31, 9} <- 1.4767427774562605828;
result.{33, 9} <- -1.8344984642633570176;
result.{ 3,10} <- -0.76584818175667166625;
result.{ 8,10} <- 0.99833846339806020718;
result.{10,10} <- 0.99215674164922147144;
result.{17,10} <- 0.41339864235384227977;
result.{19,10} <- -2.1650635094610966169;
result.{30,10} <- -1.0620403417479017779;
result.{32,10} <- 1.6535945694153691191;
result.{ 5,11} <- -1.0620403417479017779;
result.{12,11} <- 0.41339864235384227977;
result.{14,11} <- 1.6535945694153691191;
result.{23,11} <- 0.99833846339806020718;
result.{25,11} <- -2.1650635094610966169;
result.{38,11} <- -0.76584818175667166625;
result.{40,11} <- 0.99215674164922147144;
result.{ 1,12} <- -0.45768182862115030664;
result.{ 4,12} <- 0.79475821795059156217;
result.{ 6,12} <- 0.79475821795059156217;
result.{13,12} <- -2.0752447144854989366;
result.{22,12} <- -0.79475821795059156217;
result.{24,12} <- 2.0752447144854989366;
result.{37,12} <- 0.45768182862115030664;
result.{39,12} <- -0.79475821795059156217;
result.{ 2,13} <- -0.70903764004458888811;
result.{ 7,13} <- 0.53582588123382020898;
result.{ 9,13} <- 1.4377717134510610478;
result.{16,13} <- 0.53582588123382020898;
result.{18,13} <- -2.338535866733713366;
result.{29,13} <- -0.70903764004458888811;
result.{31,13} <- 1.4377717134510610478;
result.{ 3,14} <- 0.64725984928774934788;
result.{ 8,14} <- -1.96875;
result.{17,14} <- 2.4456993503903949804;
result.{30,14} <- -1.2566230789301937693;
result.{ 5,15} <- 1.2566230789301937693;
result.{12,15} <- -2.4456993503903949804;
result.{23,15} <- 1.96875;
result.{38,15} <- -0.64725984928774934788;
result.{ 1,16} <- 0.626706654240043952;
result.{ 4,16} <- -2.176535018670731151;
result.{11,16} <- 3.2353561313826025233;
result.{22,16} <- -2.176535018670731151;
result.{37,16} <- 0.626706654240043952;
result.{ 2,17} <- 1.2945196985754986958;
result.{ 7,17} <- -2.9348392204684739765;
result.{16,17} <- 2.9348392204684739765;
result.{29,17} <- -1.2945196985754986958;
result
end
|Am.L ->
begin
let result = Mat.make 55 19 0. in
result.{ 3, 1} <- 0.59686501473785067702;
result.{ 8, 1} <- 0.29612797475437320937;
result.{10, 1} <- -1.7657660842403202261;
result.{17, 1} <- 0.26411138361943717788;
result.{19, 1} <- -0.92214126273187869253;
result.{21, 1} <- 2.5354692827465969076;
result.{30, 1} <- 0.29612797475437320937;
result.{32, 1} <- -0.92214126273187869253;
result.{34, 1} <- 1.4846187947947014119;
result.{36, 1} <- -1.952374120367905548;
result.{47, 1} <- 0.59686501473785067702;
result.{49, 1} <- -1.7657660842403202261;
result.{51, 1} <- 2.5354692827465969076;
result.{53, 1} <- -1.952374120367905548;
result.{55, 1} <- 1.0;
result.{ 1, 2} <- 0.36685490255855924707;
result.{ 4, 2} <- 0.15916400393009351387;
result.{ 6, 2} <- -1.5916400393009351387;
result.{11, 2} <- 0.11811420148091719529;
result.{13, 2} <- -0.6916059470489090194;
result.{15, 2} <- 3.1497120394911252077;
result.{22, 2} <- 0.098709324918124403125;
result.{24, 2} <- -0.51549263708149354579;
result.{26, 2} <- 1.3746470322173161221;
result.{28, 2} <- -3.1586983973799809;
result.{37, 2} <- 0.088975383089683195547;
result.{39, 2} <- -0.44144152106008005653;
result.{41, 2} <- 1.0499040131637084026;
result.{43, 2} <- -1.4126128673922561809;
result.{45, 2} <- 1.62697843363992129;
result.{ 2, 3} <- 0.088975383089683195547;
result.{ 7, 3} <- 0.098709324918124403125;
result.{ 9, 3} <- -0.44144152106008005653;
result.{16, 3} <- 0.11811420148091719529;
result.{18, 3} <- -0.51549263708149354579;
result.{20, 3} <- 1.0499040131637084026;
result.{29, 3} <- 0.15916400393009351387;
result.{31, 3} <- -0.6916059470489090194;
result.{33, 3} <- 1.3746470322173161221;
result.{35, 3} <- -1.4126128673922561809;
result.{46, 3} <- 0.36685490255855924707;
result.{48, 3} <- -1.5916400393009351387;
result.{50, 3} <- 3.1497120394911252077;
result.{52, 3} <- -3.1586983973799809;
result.{54, 3} <- 1.62697843363992129;
result.{ 3, 4} <- -0.83466307816035426155;
result.{ 8, 4} <- -0.2070544267420625878;
result.{10, 4} <- 2.3149388661875113029;
result.{19, 4} <- 0.40297913150666282783;
result.{21, 4} <- -2.9546917977869539993;
result.{30, 4} <- 0.2070544267420625878;
result.{32, 4} <- -0.40297913150666282783;
result.{36, 4} <- 1.7063893769835631924;
result.{47, 4} <- 0.83466307816035426155;
result.{49, 4} <- -2.3149388661875113029;
result.{51, 4} <- 2.9546917977869539993;
result.{53, 4} <- -1.7063893769835631924;
result.{ 5, 5} <- -0.43101816018790287844;
result.{12, 5} <- -0.4187881980957120927;
result.{14, 5} <- 1.395960660319040309;
result.{23, 5} <- -0.4187881980957120927;
result.{25, 5} <- 1.3623181102386339839;
result.{27, 5} <- -2.2335370565104644944;
result.{38, 5} <- -0.43101816018790287844;
result.{40, 5} <- 1.395960660319040309;
result.{42, 5} <- -2.2335370565104644944;
result.{44, 5} <- 1.9703687322875560157;
result.{ 1, 6} <- -0.37548796377180986812;
result.{ 6, 6} <- 1.4661859659554465543;
result.{11, 6} <- 0.12089373945199884835;
result.{13, 6} <- -0.21236437647040795145;
result.{15, 6} <- -2.417874789039976967;
result.{22, 6} <- 0.20206443016189559856;
result.{24, 6} <- -0.79143530297864839268;
result.{26, 6} <- 1.0552470706381978569;
result.{28, 6} <- 1.6165154412951647885;
result.{37, 6} <- 0.27320762396104757397;
result.{39, 6} <- -1.2199404645272449631;
result.{41, 6} <- 2.417874789039976967;
result.{43, 6} <- -2.16878304804843549;
result.{ 2, 7} <- -0.27320762396104757397;
result.{ 7, 7} <- -0.20206443016189559856;
result.{ 9, 7} <- 1.2199404645272449631;
result.{16, 7} <- -0.12089373945199884835;
result.{18, 7} <- 0.79143530297864839268;
result.{20, 7} <- -2.417874789039976967;
result.{31, 7} <- 0.21236437647040795145;
result.{33, 7} <- -1.0552470706381978569;
result.{35, 7} <- 2.16878304804843549;
result.{46, 7} <- 0.37548796377180986812;
result.{48, 7} <- -1.4661859659554465543;
result.{50, 7} <- 2.417874789039976967;
result.{52, 7} <- -1.6165154412951647885;
result.{ 3, 8} <- 0.80430146722719804411;
result.{ 8, 8} <- -0.39904527606894581113;
result.{10, 8} <- -1.7845847267806657796;
result.{17, 8} <- -0.59316922059788797031;
result.{19, 8} <- 1.5532816304615888184;
result.{21, 8} <- 1.4236061294349311288;
result.{30, 8} <- -0.39904527606894581113;
result.{32, 8} <- 1.5532816304615888184;
result.{34, 8} <- -2.5007351860179508607;
result.{47, 8} <- 0.80430146722719804411;
result.{49, 8} <- -1.7845847267806657796;
result.{51, 8} <- 1.4236061294349311288;
result.{ 5, 9} <- 0.83067898344030094085;
result.{12, 9} <- 0.26903627024228973454;
result.{14, 9} <- -2.1522901619383178764;
result.{23, 9} <- -0.26903627024228973454;
result.{27, 9} <- 2.1522901619383178764;
result.{38, 9} <- -0.83067898344030094085;
result.{40, 9} <- 2.1522901619383178764;
result.{42, 9} <- -2.1522901619383178764;
result.{ 1,10} <- 0.39636409043643194293;
result.{ 4,10} <- -0.34393377440500167929;
result.{ 6,10} <- -1.2037682104175058775;
result.{11,10} <- -0.29776858550677551679;
result.{13,10} <- 1.5691988753163563388;
result.{15,10} <- 1.1910743420271020672;
result.{24,10} <- 0.64978432507844251538;
result.{26,10} <- -2.5991373003137700615;
result.{37,10} <- 0.48066206207978815025;
result.{39,10} <- -1.6693261563207085231;
result.{41,10} <- 1.9851239033785034453;
result.{ 2,11} <- 0.48066206207978815025;
result.{ 9,11} <- -1.6693261563207085231;
result.{16,11} <- -0.29776858550677551679;
result.{18,11} <- 0.64978432507844251538;
result.{20,11} <- 1.9851239033785034453;
result.{29,11} <- -0.34393377440500167929;
result.{31,11} <- 1.5691988753163563388;
result.{33,11} <- -2.5991373003137700615;
result.{46,11} <- 0.39636409043643194293;
result.{48,11} <- -1.2037682104175058775;
result.{50,11} <- 1.1910743420271020672;
result.{ 3,12} <- -0.74463846463549402274;
result.{ 8,12} <- 1.2930544805637086353;
result.{10,12} <- 0.96378590571704436469;
result.{19,12} <- -2.5166038696554342464;
result.{30,12} <- -1.2930544805637086353;
result.{32,12} <- 2.5166038696554342464;
result.{47,12} <- 0.74463846463549402274;
result.{49,12} <- -0.96378590571704436469;
result.{ 5,13} <- -1.1535889489914915606;
result.{12,13} <- 0.87177715295353129935;
result.{14,13} <- 1.7435543059070625987;
result.{23,13} <- 0.87177715295353129935;
result.{25,13} <- -2.8358912905407192076;
result.{38,13} <- -1.1535889489914915606;
result.{40,13} <- 1.7435543059070625987;
result.{ 1,14} <- -0.44314852502786805507;
result.{ 4,14} <- 0.96132412415957630049;
result.{ 6,14} <- 0.76905929932766104039;
result.{11,14} <- -0.33291539937855436029;
result.{13,14} <- -2.3392235702823930554;
result.{22,14} <- -0.83466307816035426155;
result.{24,14} <- 2.9059238431784376645;
result.{37,14} <- 0.75235513151094117345;
result.{39,14} <- -1.4930907048606177933;
result.{ 2,15} <- -0.75235513151094117345;
result.{ 7,15} <- 0.83466307816035426155;
result.{ 9,15} <- 1.4930907048606177933;
result.{16,15} <- 0.33291539937855436029;
result.{18,15} <- -2.9059238431784376645;
result.{29,15} <- -0.96132412415957630049;
result.{31,15} <- 2.3392235702823930554;
result.{46,15} <- 0.44314852502786805507;
result.{48,15} <- -0.76905929932766104039;
result.{ 3,16} <- 0.626706654240043952;
result.{ 8,16} <- -2.176535018670731151;
result.{17,16} <- 3.2353561313826025233;
result.{30,16} <- -2.176535018670731151;
result.{47,16} <- 0.626706654240043952;
result.{ 5,17} <- 1.2945196985754986958;
result.{12,17} <- -2.9348392204684739765;
result.{23,17} <- 2.9348392204684739765;
result.{38,17} <- -1.2945196985754986958;
result.{ 1,18} <- 0.60904939217552380708;
result.{ 4,18} <- -2.3781845426185916576;
result.{11,18} <- 4.1179360680974030877;
result.{22,18} <- -3.4414040330583097636;
result.{37,18} <- 1.3294455750836041652;
result.{ 2,19} <- 1.3294455750836041652;
result.{ 7,19} <- -3.4414040330583097636;
result.{16,19} <- 4.1179360680974030877;
result.{29,19} <- -2.3781845426185916576;
result.{46,19} <- 0.60904939217552380708;
result
end
| _ -> invalid_arg "Not implemented"
let index ~nx ~ny ~nz =
let l = nx + ny + nz in
((l-nx)*(l-nx+1))/2 + nz + 1