diff --git a/Basis/Orthonormalization.ml b/Basis/Orthonormalization.ml index 6fb3e25..a923e95 100644 --- a/Basis/Orthonormalization.ml +++ b/Basis/Orthonormalization.ml @@ -6,16 +6,42 @@ type t = | Canonical of Mat.t | Svd of Mat.t +module Am = AngularMomentum +module Bs = Basis +module Cs = ContractedShell + +let make_canonical_spherical ~thresh ~overlap basis = + let ao_num = Bs.size basis in + let cart_sphe = Mat.make ao_num ao_num 0. + and i = ref 0 + and n = ref 0 in + Array.iter (fun shell -> + let submatrix = + SphericalToCartesian.matrix (Cs.ang_mom shell) + in + ignore @@ lacpy ~b:cart_sphe ~br:(!i+1) ~bc:(!n+1) submatrix; + i := !i + Mat.dim1 submatrix; + n := !n + Mat.dim2 submatrix; + ) (Bs.contracted_shells basis); + let s = gemm ~transa:`T ~m:!n cart_sphe overlap in + let overlap = gemm s ~n:!n cart_sphe in + let s = canonical_ortho ~thresh ~overlap (Mat.identity !n) in + gemm cart_sphe ~k:!n s -let make_canonical ~cartesian ~thresh ~overlap = + + +let make_canonical ~cartesian ~thresh ~basis ~overlap = let result = if cartesian then canonical_ortho ~thresh ~overlap (Mat.identity @@ Mat.dim1 overlap) else - (* TODO *) - canonical_ortho ~thresh ~overlap (Mat.identity @@ Mat.dim1 overlap) + match basis with + | None -> invalid_arg + "Basis.t is required when cartesian=false in make_canonical" + | Some basis -> + make_canonical_spherical ~thresh ~overlap basis in Canonical result @@ -41,8 +67,8 @@ let make_lowdin ~thresh ~overlap = -let make ~cartesian ?(thresh=1.e-12) overlap = +let make ~cartesian ?(thresh=1.e-12) ?basis overlap = (* make_lowdin ~thresh ~overlap *) - make_canonical ~cartesian ~thresh ~overlap + make_canonical ~cartesian ~basis ~thresh ~overlap diff --git a/Simulation.ml b/Simulation.ml index 66a3d72..8766749 100644 --- a/Simulation.ml +++ b/Simulation.ml @@ -35,7 +35,7 @@ let make ?cartesian:(cartesian=true) { charge ; basis ; nuclei ; electrons ; overlap ; - overlap_ortho = lazy (Orthonormalization.make ~cartesian (Lazy.force overlap)); + overlap_ortho = lazy (Orthonormalization.make ~cartesian ~basis (Lazy.force overlap)); eN_ints = lazy (NucInt.of_basis_nuclei basis nuclei); kin_ints = lazy (KinInt.of_basis basis); ee_ints = lazy (ERI.of_basis basis); diff --git a/Utils/SphericalToCartesian.ml b/Utils/SphericalToCartesian.ml index c2c9142..e13011e 100644 --- a/Utils/SphericalToCartesian.ml +++ b/Utils/SphericalToCartesian.ml @@ -5,644 +5,651 @@ module Am = AngularMomentum let matrix = function | Am.S -> Mat.make 1 1 1. - | Am.P -> Mat.make 3 3 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.; - 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 + 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.; - 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 + 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.; - 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 + 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.; - 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 + 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.; - 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 + 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.; - 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 + 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.; - 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 + 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.; - 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 + 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" diff --git a/Utils/SphericalToCartesian.mli b/Utils/SphericalToCartesian.mli index d8f555f..0f0e99e 100644 --- a/Utils/SphericalToCartesian.mli +++ b/Utils/SphericalToCartesian.mli @@ -1,6 +1,6 @@ (** Conversion from spherical coordinate to cartesian corrdinates. *) -val matrix : AngularMomentum.t -> float array +val matrix : AngularMomentum.t -> Lacaml.D.Mat.t (** Returns a transformation matrix to rotate between the basis of atom-centered spherical coordinates to x,y,z coordinates. diff --git a/Utils/Util.ml b/Utils/Util.ml index ed58607..00b29a2 100644 --- a/Utils/Util.ml +++ b/Utils/Util.ml @@ -197,6 +197,10 @@ let canonical_ortho ?thresh:(thresh=1.e-6) ~overlap c = gemm c u +let debug_matrix name a = + Format.printf "@[<2>%s =@\n@\n@[%a@]@]@\n@\n" name pp_mat a + + (** {2 Printers} *) diff --git a/Utils/Util.mli b/Utils/Util.mli index 6a3228d..a732351 100644 --- a/Utils/Util.mli +++ b/Utils/Util.mli @@ -73,6 +73,8 @@ val canonical_ortho: ?thresh:float -> overlap:Lacaml.D.mat -> Lacaml.D.mat -> La (** Canonical orthogonalization. [overlap] is the overlap matrix, and the last argument contains the vectors to orthogonalize. *) +val debug_matrix: string -> Lacaml.D.mat -> unit +(** Prints a matrix in stdout for debug *) (** {2 Printers} *) val pp_float_array_size : Format.formatter -> float array -> unit