From 8a566b1e6319d072365b2fa1f9a72750efcda7d4 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 27 Jan 2016 00:19:08 +0100 Subject: [PATCH 1/2] Implemented Spherical AOs --- ocaml/.gitignore | 2 + ocaml/Input_ao_basis.ml | 33 +- ocaml/Long_basis.ml | 2 +- ocaml/Symmetry.ml | 21 +- ocaml/qp_create_ezfio_from_xyz.ml | 9 +- ocaml/test_pseudo.ml | 19 + ocaml/test_symmetry.ml | 15 + plugins/Molden/aos.irp.f | 196 ++++++ src/AO_Basis/EZFIO.cfg | 22 +- src/AO_Basis/aos.irp.f | 200 +----- src/AO_Basis/spherical_to_cartesian.irp.f | 707 ++++++++++++++++++++++ src/MOGuess/guess_overlap.irp.f | 13 - src/MOGuess/truncate_mos.irp.f | 10 - src/MO_Basis/ao_ortho_canonical.irp.f | 47 +- 14 files changed, 1054 insertions(+), 242 deletions(-) create mode 100644 ocaml/test_pseudo.ml create mode 100644 ocaml/test_symmetry.ml create mode 100644 plugins/Molden/aos.irp.f create mode 100644 src/AO_Basis/spherical_to_cartesian.irp.f delete mode 100644 src/MOGuess/guess_overlap.irp.f delete mode 100644 src/MOGuess/truncate_mos.irp.f diff --git a/ocaml/.gitignore b/ocaml/.gitignore index a655960d..0f0c1ef9 100644 --- a/ocaml/.gitignore +++ b/ocaml/.gitignore @@ -54,5 +54,7 @@ test_pseudo test_pseudo.byte test_queuing_system test_queuing_system.byte +test_symmetry +test_symmetry.byte test_task_server test_task_server.byte diff --git a/ocaml/Input_ao_basis.ml b/ocaml/Input_ao_basis.ml index d84974a8..82bc4964 100644 --- a/ocaml/Input_ao_basis.ml +++ b/ocaml/Input_ao_basis.ml @@ -12,6 +12,7 @@ module Ao_basis : sig ao_power : Symmetry.Xyz.t array; ao_coef : AO_coef.t array; ao_expo : AO_expo.t array; + ao_cartesian : bool; } with sexp ;; val read : unit -> t option @@ -29,6 +30,7 @@ end = struct ao_power : Symmetry.Xyz.t array; ao_coef : AO_coef.t array; ao_expo : AO_expo.t array; + ao_cartesian : bool; } with sexp ;; @@ -93,6 +95,15 @@ end = struct |> Array.map ~f:AO_expo.of_float ;; + let read_ao_cartesian () = + if not (Ezfio.has_ao_basis_ao_cartesian ()) then + get_default "ao_cartesian" + |> Bool.of_string + |> Ezfio.set_ao_basis_ao_cartesian + ; + Ezfio.get_ao_basis_ao_cartesian () + ;; + let to_long_basis b = let ao_num = AO_number.to_int b.ao_num in let gto_array = Array.init (AO_number.to_int b.ao_num) @@ -154,6 +165,7 @@ end = struct ao_power ; ao_coef ; ao_expo ; + ao_cartesian ; } = b in write_md5 b ; @@ -173,6 +185,7 @@ end = struct ao_power = read_ao_power (); ao_coef = read_ao_coef () ; ao_expo = read_ao_expo () ; + ao_cartesian = read_ao_cartesian () ; } in to_md5 result @@ -204,7 +217,11 @@ Name of the AO basis :: ao_basis = %s -Basis set :: +Cartesian coordinates (6d,10f,...) :: + + ao_cartesian = %s + +Basis set (read-only) :: %s @@ -215,12 +232,14 @@ Basis set :: %s ======= ========= =========== -" (AO_basis_name.to_string b.ao_basis) +" (AO_basis_name.to_string b.ao_basis) + (Bool.to_string b.ao_cartesian) (Basis.to_string short_basis - |> String.split ~on:'\n' - |> List.map ~f:(fun x-> " "^x) - |> String.concat ~sep:"\n" + |> String.split ~on:'\n' + |> List.map ~f:(fun x-> " "^x) + |> String.concat ~sep:"\n" ) print_sym + |> Rst_string.of_string ;; @@ -232,7 +251,7 @@ Basis set :: | [] -> failwith "Error in basis set" | line :: tail -> let line = String.strip line in - if line = "Basis set ::" then + if line = "Basis set (read-only) ::" then String.concat tail ~sep:"\n" else extract_basis tail @@ -250,6 +269,7 @@ ao_nucl = %s ao_power = %s ao_coef = %s ao_expo = %s +ao_cartesian = %s md5 = %s " (AO_basis_name.to_string b.ao_basis) @@ -265,6 +285,7 @@ md5 = %s |> String.concat ~sep:", ") (b.ao_expo |> Array.to_list |> List.map ~f:AO_expo.to_string |> String.concat ~sep:", ") + (b.ao_cartesian |> Bool.to_string) (to_md5 b |> MD5.to_string ) ;; diff --git a/ocaml/Long_basis.ml b/ocaml/Long_basis.ml index 38091079..5c0ea6d6 100644 --- a/ocaml/Long_basis.ml +++ b/ocaml/Long_basis.ml @@ -10,7 +10,7 @@ let of_basis b = begin let new_accu = Symmetry.Xyz.of_symmetry g.Gto.sym - |> List.map ~f:(fun x-> (x,g,n)) + |> List.rev_map ~f:(fun x-> (x,g,n)) in do_work (new_accu@accu) tail end diff --git a/ocaml/Symmetry.ml b/ocaml/Symmetry.ml index 9e130606..5849e116 100644 --- a/ocaml/Symmetry.ml +++ b/ocaml/Symmetry.ml @@ -1,5 +1,5 @@ -open Qptypes;; -open Core.Std;; +open Qptypes +open Core.Std type t = S|P|D|F|G|H|I|J|K|L with sexp @@ -53,7 +53,7 @@ let to_l = function | J -> Positive_int.of_int 7 | K -> Positive_int.of_int 8 | L -> Positive_int.of_int 9 -;; + let of_l i = let i = Positive_int.to_int i in @@ -69,10 +69,10 @@ let of_l i = | 8 -> K | 9 -> L | x -> raise (Failure ("Symmetry should be S|P|D|F|G|H|I|J|K|L")) -;; + type st = t -;; + module Xyz = struct type t = { x: Positive_int.t ; @@ -119,7 +119,7 @@ module Xyz = struct { x=Positive_int.of_int 0 ; y=Positive_int.of_int 0 ; z=Positive_int.of_int 0 } "" - ;; + (** Transforms an XYZ triplet to a string *) let to_string t = @@ -139,7 +139,7 @@ module Xyz = struct let result = (x^y^z) in if (result = "") then "s" else result - ;; + (** Returns the l quantum number from a XYZ powers triplet *) let get_l t = @@ -147,7 +147,7 @@ module Xyz = struct and y = Positive_int.to_int t.y and z = Positive_int.to_int t.z in Positive_int.of_int (x+y+z) - ;; + (** Returns a list of XYZ powers for a given symmetry *) let of_symmetry sym = @@ -178,10 +178,11 @@ module Xyz = struct in create_x [] { x=(to_l sym) ; y=Positive_int.of_int 0 ; z=Positive_int.of_int 0 } - ;; + |> List.rev + (** Returns the symmetry corresponding to the XYZ triplet *) let to_symmetry sym = of_l (get_l sym) - ;; + end diff --git a/ocaml/qp_create_ezfio_from_xyz.ml b/ocaml/qp_create_ezfio_from_xyz.ml index 842f1457..bb7fd847 100644 --- a/ocaml/qp_create_ezfio_from_xyz.ml +++ b/ocaml/qp_create_ezfio_from_xyz.ml @@ -17,6 +17,8 @@ let spec = ~doc:"int Spin multiplicity (2S+1) of the molecule. Default is 1." +> flag "p" (optional string) ~doc:"string Name of the pseudopotential" + +> flag "cart" no_arg + ~doc:" Compute AOs in the Cartesian basis set (6d, 10f, ...)" +> anon ("xyz_file" %: file ) @@ -87,7 +89,7 @@ let list_basis () = (** Run the program *) -let run ?o b c d m p xyz_file = +let run ?o b c d m p cart xyz_file = (* Read molecule *) let molecule = @@ -592,6 +594,7 @@ let run ?o b c d m p xyz_file = ~rank:2 ~dim:[| ao_num ; ao_prim_num_max |] ~data:ao_coef) ; Ezfio.set_ao_basis_ao_expo(Ezfio.ezfio_array_of_list ~rank:2 ~dim:[| ao_num ; ao_prim_num_max |] ~data:ao_expo) ; + Ezfio.set_ao_basis_ao_cartesian(cart); in match Input.Ao_basis.read () with | None -> failwith "Error in basis" @@ -621,8 +624,8 @@ Otherwise, the basis set is obtained from the database. " ) spec - (fun o b c d m p xyz_file () -> - run ?o b c d m p xyz_file ) + (fun o b c d m p cart xyz_file () -> + run ?o b c d m p cart xyz_file ) let () = diff --git a/ocaml/test_pseudo.ml b/ocaml/test_pseudo.ml new file mode 100644 index 00000000..10c8aa0c --- /dev/null +++ b/ocaml/test_pseudo.ml @@ -0,0 +1,19 @@ +open Core.Std +open Qputils +open Qptypes + +let test_module () = + + let pseudo_channel = + let b = "BFD" in + In_channel.create (Qpackage.root^"/data/pseudo/"^(String.lowercase b)) + in + + let pseudo = + Pseudo.read_element pseudo_channel (Element.of_string "Cu") + in + + print_endline (Pseudo.to_string pseudo); +;; + +test_module (); diff --git a/ocaml/test_symmetry.ml b/ocaml/test_symmetry.ml new file mode 100644 index 00000000..bdc28e5c --- /dev/null +++ b/ocaml/test_symmetry.ml @@ -0,0 +1,15 @@ +open Core.Std +open Qputils +open Qptypes +open Symmetry + +let () = + "SPDFGHIJKL" + |> String.to_list_rev + |> List.rev + |> List.map ~f:of_char + |> List.map ~f:Xyz.of_symmetry + |> List.iter ~f:(fun x -> List.iter x ~f:(fun y -> Xyz.to_string y |> print_endline) ; + print_newline ();) + + diff --git a/plugins/Molden/aos.irp.f b/plugins/Molden/aos.irp.f new file mode 100644 index 00000000..71f8c5b8 --- /dev/null +++ b/plugins/Molden/aos.irp.f @@ -0,0 +1,196 @@ +BEGIN_PROVIDER [ character*(128), ao_l_char, (ao_num) ] + implicit none + BEGIN_DOC +! ao_l = l value of the AO: a+b+c in x^a y^b z^c + END_DOC + integer :: i + do i=1,ao_num + ao_l_char(i) = l_to_character(ao_l(i)) + enddo +END_PROVIDER + + +BEGIN_PROVIDER [ character*(128), l_to_character, (0:4)] + BEGIN_DOC + ! character corresponding to the "L" value of an AO orbital + END_DOC + implicit none + l_to_character(0)='S' + l_to_character(1)='P' + l_to_character(2)='D' + l_to_character(3)='F' + l_to_character(4)='G' +END_PROVIDER + + BEGIN_PROVIDER [ integer, Nucl_N_Aos, (nucl_num)] +&BEGIN_PROVIDER [ integer, N_AOs_max ] + implicit none + integer :: i + BEGIN_DOC + ! Number of AOs per atom + END_DOC + Nucl_N_Aos = 0 + do i = 1, ao_num + Nucl_N_Aos(ao_nucl(i)) +=1 + enddo + N_AOs_max = maxval(Nucl_N_Aos) +END_PROVIDER + + BEGIN_PROVIDER [ integer, Nucl_Aos, (nucl_num,N_AOs_max)] + implicit none + BEGIN_DOC + ! List of AOs attached on each atom + END_DOC + integer :: i + integer, allocatable :: nucl_tmp(:) + allocate(nucl_tmp(nucl_num)) + nucl_tmp = 0 + Nucl_Aos = 0 + do i = 1, ao_num + nucl_tmp(ao_nucl(i))+=1 + Nucl_Aos(ao_nucl(i),nucl_tmp(ao_nucl(i))) = i + enddo + deallocate(nucl_tmp) +END_PROVIDER + + + BEGIN_PROVIDER [ integer, Nucl_list_shell_Aos, (nucl_num,N_AOs_max)] +&BEGIN_PROVIDER [ integer, Nucl_num_shell_Aos, (nucl_num)] + implicit none + integer :: i,j,k + BEGIN_DOC + ! Index of the shell type Aos and of the corresponding Aos + ! Per convention, for P,D,F and G AOs, we take the index + ! of the AO with the the corresponding power in the "X" axis + END_DOC + do i = 1, nucl_num + Nucl_num_shell_Aos(i) = 0 + + do j = 1, Nucl_N_Aos(i) + if(ao_l(Nucl_Aos(i,j))==0)then + ! S type function + Nucl_num_shell_Aos(i)+=1 + Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) + elseif(ao_l(Nucl_Aos(i,j))==1)then + ! P type function + if(ao_power(Nucl_Aos(i,j),1)==1)then + Nucl_num_shell_Aos(i)+=1 + Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) + endif + elseif(ao_l(Nucl_Aos(i,j))==2)then + ! D type function + if(ao_power(Nucl_Aos(i,j),1)==2)then + Nucl_num_shell_Aos(i)+=1 + Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) + endif + elseif(ao_l(Nucl_Aos(i,j))==3)then + ! F type function + if(ao_power(Nucl_Aos(i,j),1)==3)then + Nucl_num_shell_Aos(i)+=1 + Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) + endif + elseif(ao_l(Nucl_Aos(i,j))==4)then + ! G type function + if(ao_power(Nucl_Aos(i,j),1)==4)then + Nucl_num_shell_Aos(i)+=1 + Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) + endif + endif + + enddo + enddo + +END_PROVIDER + + +BEGIN_PROVIDER [ character*(4), ao_l_char_space, (ao_num) ] + implicit none + integer :: i + character*(4) :: give_ao_character_space + do i=1,ao_num + + if(ao_l(i)==0)then + ! S type AO + give_ao_character_space = 'S ' + elseif(ao_l(i) == 1)then + ! P type AO + if(ao_power(i,1)==1)then + give_ao_character_space = 'X ' + elseif(ao_power(i,2) == 1)then + give_ao_character_space = 'Y ' + else + give_ao_character_space = 'Z ' + endif + elseif(ao_l(i) == 2)then + ! D type AO + if(ao_power(i,1)==2)then + give_ao_character_space = 'XX ' + elseif(ao_power(i,2) == 2)then + give_ao_character_space = 'YY ' + elseif(ao_power(i,3) == 2)then + give_ao_character_space = 'ZZ ' + elseif(ao_power(i,1) == 1 .and. ao_power(i,2) == 1)then + give_ao_character_space = 'XY ' + elseif(ao_power(i,1) == 1 .and. ao_power(i,3) == 1)then + give_ao_character_space = 'XZ ' + else + give_ao_character_space = 'YZ ' + endif + elseif(ao_l(i) == 3)then + ! F type AO + if(ao_power(i,1)==3)then + give_ao_character_space = 'XXX ' + elseif(ao_power(i,2) == 3)then + give_ao_character_space = 'YYY ' + elseif(ao_power(i,3) == 3)then + give_ao_character_space = 'ZZZ ' + elseif(ao_power(i,1) == 2 .and. ao_power(i,2) == 1)then + give_ao_character_space = 'XXY ' + elseif(ao_power(i,1) == 2 .and. ao_power(i,3) == 1)then + give_ao_character_space = 'XXZ ' + elseif(ao_power(i,2) == 2 .and. ao_power(i,1) == 1)then + give_ao_character_space = 'YYX ' + elseif(ao_power(i,2) == 2 .and. ao_power(i,3) == 1)then + give_ao_character_space = 'YYZ ' + elseif(ao_power(i,3) == 2 .and. ao_power(i,1) == 1)then + give_ao_character_space = 'ZZX ' + elseif(ao_power(i,3) == 2 .and. ao_power(i,2) == 1)then + give_ao_character_space = 'ZZY ' + elseif(ao_power(i,3) == 1 .and. ao_power(i,2) == 1 .and. ao_power(i,3) == 1)then + give_ao_character_space = 'XYZ ' + endif + elseif(ao_l(i) == 4)then + ! G type AO + if(ao_power(i,1)==4)then + give_ao_character_space = 'XXXX' + elseif(ao_power(i,2) == 4)then + give_ao_character_space = 'YYYY' + elseif(ao_power(i,3) == 4)then + give_ao_character_space = 'ZZZZ' + elseif(ao_power(i,1) == 3 .and. ao_power(i,2) == 1)then + give_ao_character_space = 'XXXY' + elseif(ao_power(i,1) == 3 .and. ao_power(i,3) == 1)then + give_ao_character_space = 'XXXZ' + elseif(ao_power(i,2) == 3 .and. ao_power(i,1) == 1)then + give_ao_character_space = 'YYYX' + elseif(ao_power(i,2) == 3 .and. ao_power(i,3) == 1)then + give_ao_character_space = 'YYYZ' + elseif(ao_power(i,3) == 3 .and. ao_power(i,1) == 1)then + give_ao_character_space = 'ZZZX' + elseif(ao_power(i,3) == 3 .and. ao_power(i,2) == 1)then + give_ao_character_space = 'ZZZY' + elseif(ao_power(i,1) == 2 .and. ao_power(i,2) == 2)then + give_ao_character_space = 'XXYY' + elseif(ao_power(i,2) == 2 .and. ao_power(i,3) == 2)then + give_ao_character_space = 'YYZZ' + elseif(ao_power(i,1) == 2 .and. ao_power(i,2) == 1 .and. ao_power(i,3) == 1)then + give_ao_character_space = 'XXYZ' + elseif(ao_power(i,2) == 2 .and. ao_power(i,1) == 1 .and. ao_power(i,3) == 1)then + give_ao_character_space = 'YYXZ' + elseif(ao_power(i,3) == 2 .and. ao_power(i,1) == 1 .and. ao_power(i,2) == 1)then + give_ao_character_space = 'ZZXY' + endif + endif + ao_l_char_space(i) = give_ao_character_space + enddo +END_PROVIDER diff --git a/src/AO_Basis/EZFIO.cfg b/src/AO_Basis/EZFIO.cfg index 4cb3b390..34bf2879 100644 --- a/src/AO_Basis/EZFIO.cfg +++ b/src/AO_Basis/EZFIO.cfg @@ -1,11 +1,11 @@ [ao_basis] type: character*(256) -doc: name of the ao basis +doc: name of the AO basis set interface: ezfio [ao_num] type: integer -doc: number of ao +doc: number of AOs interface: ezfio, provider [ao_prim_num] @@ -22,29 +22,35 @@ interface: ezfio [ao_nucl] type: integer -doc: Index of the nuclei on which the ao is centered +doc: Index of the nucleus on which the AO is centered size: (ao_basis.ao_num) interface: ezfio, provider [ao_power] type: integer -doc: power for each dimension for each ao_basis +doc: Powers of x, y and z for each AO size: (ao_basis.ao_num,3) interface: ezfio, provider [ao_coef] type: double precision -doc: AO Coefficients, read from input. Those should not be used directly, as the MOs are expressed on the basis of **normalized** AOs. +doc: Primitive coefficients, read from input. Those should not be used directly, as the MOs are expressed on the basis of **normalized** AOs. size: (ao_basis.ao_num,ao_basis.ao_prim_num_max) interface: ezfio, provider [ao_expo] type: double precision -doc: expo for each primitive of each ao_basis +doc: Exponents for each primitive of each AO size: (ao_basis.ao_num,ao_basis.ao_prim_num_max) interface: ezfio, provider [ao_md5] type: character*(32) -doc: MD5 key characteristic of the AO basis -interface: ezfio, provider \ No newline at end of file +doc: MD5 key, specific of the AO basis +interface: ezfio, provider + +[ao_cartesian] +type: logical +doc: If true, use AOs in Cartesian coordinates (6d,10f,...) +interface: ezfio, provider +default: false diff --git a/src/AO_Basis/aos.irp.f b/src/AO_Basis/aos.irp.f index 7627878b..341d1453 100644 --- a/src/AO_Basis/aos.irp.f +++ b/src/AO_Basis/aos.irp.f @@ -111,7 +111,7 @@ BEGIN_PROVIDER [ double precision, ao_expo_ordered_transp, (ao_prim_num_max_alig END_PROVIDER BEGIN_PROVIDER [ integer, ao_l, (ao_num) ] -&BEGIN_PROVIDER [ character*(128), ao_l_char, (ao_num) ] +&BEGIN_PROVIDER [ integer, ao_l_max ] implicit none BEGIN_DOC ! ao_l = l value of the AO: a+b+c in x^a y^b z^c @@ -119,8 +119,8 @@ END_PROVIDER integer :: i do i=1,ao_num ao_l(i) = ao_power(i,1) + ao_power(i,2) + ao_power(i,3) - ao_l_char(i) = l_to_charater(ao_l(i)) enddo + ao_l_max = maxval(ao_l) END_PROVIDER BEGIN_PROVIDER [ integer, ao_prim_num_max_align ] @@ -133,188 +133,16 @@ BEGIN_PROVIDER [ integer, ao_prim_num_max_align ] ao_prim_num_max_align = align_double(ao_prim_num_max) END_PROVIDER +integer function ao_power_index(nx,ny,nz) + implicit none + integer, intent(in) :: nx, ny, nz + BEGIN_DOC + ! Unique index given to a triplet of powers: + ! + ! 1/2 (l-n_x)*(l-n_x+1) + n_z + 1 + END_DOC + integer :: l + l = nx + ny + nz + ao_power_index = ((l-nx)*(l-nx+1))/2 + nz + 1 +end -BEGIN_PROVIDER [ character*(128), l_to_charater, (0:4)] - BEGIN_DOC - ! character corresponding to the "L" value of an AO orbital - END_DOC - implicit none - l_to_charater(0)='S' - l_to_charater(1)='P' - l_to_charater(2)='D' - l_to_charater(3)='F' - l_to_charater(4)='G' -END_PROVIDER - - BEGIN_PROVIDER [ integer, Nucl_N_Aos, (nucl_num)] -&BEGIN_PROVIDER [ integer, N_AOs_max ] - implicit none - integer :: i - BEGIN_DOC - ! Number of AOs per atom - END_DOC - Nucl_N_Aos = 0 - do i = 1, ao_num - Nucl_N_Aos(ao_nucl(i)) +=1 - enddo - N_AOs_max = maxval(Nucl_N_Aos) -END_PROVIDER - - BEGIN_PROVIDER [ integer, Nucl_Aos, (nucl_num,N_AOs_max)] - implicit none - BEGIN_DOC - ! List of AOs attached on each atom - END_DOC - integer :: i - integer, allocatable :: nucl_tmp(:) - allocate(nucl_tmp(nucl_num)) - nucl_tmp = 0 - Nucl_Aos = 0 - do i = 1, ao_num - nucl_tmp(ao_nucl(i))+=1 - Nucl_Aos(ao_nucl(i),nucl_tmp(ao_nucl(i))) = i - enddo - deallocate(nucl_tmp) -END_PROVIDER - - - BEGIN_PROVIDER [ integer, Nucl_list_shell_Aos, (nucl_num,N_AOs_max)] -&BEGIN_PROVIDER [ integer, Nucl_num_shell_Aos, (nucl_num)] - implicit none - integer :: i,j,k - BEGIN_DOC - ! Index of the shell type Aos and of the corresponding Aos - ! Per convention, for P,D,F and G AOs, we take the index - ! of the AO with the the corresponding power in the "X" axis - END_DOC - do i = 1, nucl_num - Nucl_num_shell_Aos(i) = 0 - - do j = 1, Nucl_N_Aos(i) - if(ao_l(Nucl_Aos(i,j))==0)then - ! S type function - Nucl_num_shell_Aos(i)+=1 - Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) - elseif(ao_l(Nucl_Aos(i,j))==1)then - ! P type function - if(ao_power(Nucl_Aos(i,j),1)==1)then - Nucl_num_shell_Aos(i)+=1 - Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) - endif - elseif(ao_l(Nucl_Aos(i,j))==2)then - ! D type function - if(ao_power(Nucl_Aos(i,j),1)==2)then - Nucl_num_shell_Aos(i)+=1 - Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) - endif - elseif(ao_l(Nucl_Aos(i,j))==3)then - ! F type function - if(ao_power(Nucl_Aos(i,j),1)==3)then - Nucl_num_shell_Aos(i)+=1 - Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) - endif - elseif(ao_l(Nucl_Aos(i,j))==4)then - ! G type function - if(ao_power(Nucl_Aos(i,j),1)==4)then - Nucl_num_shell_Aos(i)+=1 - Nucl_list_shell_Aos(i,Nucl_num_shell_Aos(i))=Nucl_Aos(i,j) - endif - endif - - enddo - enddo - -END_PROVIDER - - -BEGIN_PROVIDER [ character*(4), ao_l_char_space, (ao_num) ] - implicit none - integer :: i - character*(4) :: give_ao_character_space - do i=1,ao_num - - if(ao_l(i)==0)then - ! S type AO - give_ao_character_space = 'S ' - elseif(ao_l(i) == 1)then - ! P type AO - if(ao_power(i,1)==1)then - give_ao_character_space = 'X ' - elseif(ao_power(i,2) == 1)then - give_ao_character_space = 'Y ' - else - give_ao_character_space = 'Z ' - endif - elseif(ao_l(i) == 2)then - ! D type AO - if(ao_power(i,1)==2)then - give_ao_character_space = 'XX ' - elseif(ao_power(i,2) == 2)then - give_ao_character_space = 'YY ' - elseif(ao_power(i,3) == 2)then - give_ao_character_space = 'ZZ ' - elseif(ao_power(i,1) == 1 .and. ao_power(i,2) == 1)then - give_ao_character_space = 'XY ' - elseif(ao_power(i,1) == 1 .and. ao_power(i,3) == 1)then - give_ao_character_space = 'XZ ' - else - give_ao_character_space = 'YZ ' - endif - elseif(ao_l(i) == 3)then - ! F type AO - if(ao_power(i,1)==3)then - give_ao_character_space = 'XXX ' - elseif(ao_power(i,2) == 3)then - give_ao_character_space = 'YYY ' - elseif(ao_power(i,3) == 3)then - give_ao_character_space = 'ZZZ ' - elseif(ao_power(i,1) == 2 .and. ao_power(i,2) == 1)then - give_ao_character_space = 'XXY ' - elseif(ao_power(i,1) == 2 .and. ao_power(i,3) == 1)then - give_ao_character_space = 'XXZ ' - elseif(ao_power(i,2) == 2 .and. ao_power(i,1) == 1)then - give_ao_character_space = 'YYX ' - elseif(ao_power(i,2) == 2 .and. ao_power(i,3) == 1)then - give_ao_character_space = 'YYZ ' - elseif(ao_power(i,3) == 2 .and. ao_power(i,1) == 1)then - give_ao_character_space = 'ZZX ' - elseif(ao_power(i,3) == 2 .and. ao_power(i,2) == 1)then - give_ao_character_space = 'ZZY ' - elseif(ao_power(i,3) == 1 .and. ao_power(i,2) == 1 .and. ao_power(i,3) == 1)then - give_ao_character_space = 'XYZ ' - endif - elseif(ao_l(i) == 4)then - ! G type AO - if(ao_power(i,1)==4)then - give_ao_character_space = 'XXXX' - elseif(ao_power(i,2) == 4)then - give_ao_character_space = 'YYYY' - elseif(ao_power(i,3) == 4)then - give_ao_character_space = 'ZZZZ' - elseif(ao_power(i,1) == 3 .and. ao_power(i,2) == 1)then - give_ao_character_space = 'XXXY' - elseif(ao_power(i,1) == 3 .and. ao_power(i,3) == 1)then - give_ao_character_space = 'XXXZ' - elseif(ao_power(i,2) == 3 .and. ao_power(i,1) == 1)then - give_ao_character_space = 'YYYX' - elseif(ao_power(i,2) == 3 .and. ao_power(i,3) == 1)then - give_ao_character_space = 'YYYZ' - elseif(ao_power(i,3) == 3 .and. ao_power(i,1) == 1)then - give_ao_character_space = 'ZZZX' - elseif(ao_power(i,3) == 3 .and. ao_power(i,2) == 1)then - give_ao_character_space = 'ZZZY' - elseif(ao_power(i,1) == 2 .and. ao_power(i,2) == 2)then - give_ao_character_space = 'XXYY' - elseif(ao_power(i,2) == 2 .and. ao_power(i,3) == 2)then - give_ao_character_space = 'YYZZ' - elseif(ao_power(i,1) == 2 .and. ao_power(i,2) == 1 .and. ao_power(i,3) == 1)then - give_ao_character_space = 'XXYZ' - elseif(ao_power(i,2) == 2 .and. ao_power(i,1) == 1 .and. ao_power(i,3) == 1)then - give_ao_character_space = 'YYXZ' - elseif(ao_power(i,3) == 2 .and. ao_power(i,1) == 1 .and. ao_power(i,2) == 1)then - give_ao_character_space = 'ZZXY' - endif - endif - ao_l_char_space(i) = give_ao_character_space - enddo -END_PROVIDER diff --git a/src/AO_Basis/spherical_to_cartesian.irp.f b/src/AO_Basis/spherical_to_cartesian.irp.f new file mode 100644 index 00000000..33a3bc89 --- /dev/null +++ b/src/AO_Basis/spherical_to_cartesian.irp.f @@ -0,0 +1,707 @@ +! Spherical to cartesian transformation matrix obtained with +! Horton (http://theochem.github.com/horton/, 2015) + +! First index is the index of the carteisan AO, obtained by ao_power_index +! Second index is the index of the spherical AO + +BEGIN_PROVIDER [ double precision, cart_to_sphe_0, (1,1) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=0 + END_DOC + cart_to_sphe_0 = 0.d0 + + cart_to_sphe_0 ( 1, 1) = 1.0d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_1, (3,3) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=1 + END_DOC + cart_to_sphe_1 = 0.d0 + + cart_to_sphe_1 ( 3, 1) = 1.0d0 + cart_to_sphe_1 ( 1, 2) = 1.0d0 + cart_to_sphe_1 ( 2, 3) = 1.0d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_2, (6,5) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=2 + END_DOC + cart_to_sphe_2 = 0.d0 + + cart_to_sphe_2 ( 1, 1) = -0.5d0 + cart_to_sphe_2 ( 4, 1) = -0.5d0 + cart_to_sphe_2 ( 6, 1) = 1.0d0 + cart_to_sphe_2 ( 3, 2) = 1.0d0 + cart_to_sphe_2 ( 5, 3) = 1.0d0 + cart_to_sphe_2 ( 1, 4) = 0.86602540378443864676d0 + cart_to_sphe_2 ( 4, 4) = -0.86602540378443864676d0 + cart_to_sphe_2 ( 2, 5) = 1.0d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_3, (10,7) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=3 + END_DOC + cart_to_sphe_3 = 0.d0 + + cart_to_sphe_3 ( 3, 1) = -0.67082039324993690892d0 + cart_to_sphe_3 ( 8, 1) = -0.67082039324993690892d0 + cart_to_sphe_3 (10, 1) = 1.0d0 + cart_to_sphe_3 ( 1, 2) = -0.61237243569579452455d0 + cart_to_sphe_3 ( 4, 2) = -0.27386127875258305673d0 + cart_to_sphe_3 ( 6, 2) = 1.0954451150103322269d0 + cart_to_sphe_3 ( 2, 3) = -0.27386127875258305673d0 + cart_to_sphe_3 ( 7, 3) = -0.61237243569579452455d0 + cart_to_sphe_3 ( 9, 3) = 1.0954451150103322269d0 + cart_to_sphe_3 ( 3, 4) = 0.86602540378443864676d0 + cart_to_sphe_3 ( 8, 4) = -0.86602540378443864676d0 + cart_to_sphe_3 ( 5, 5) = 1.0d0 + cart_to_sphe_3 ( 1, 6) = 0.790569415042094833d0 + cart_to_sphe_3 ( 4, 6) = -1.0606601717798212866d0 + cart_to_sphe_3 ( 2, 7) = 1.0606601717798212866d0 + cart_to_sphe_3 ( 7, 7) = -0.790569415042094833d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_4, (15,9) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=4 + END_DOC + cart_to_sphe_4 = 0.d0 + + cart_to_sphe_4 ( 1, 1) = 0.375d0 + cart_to_sphe_4 ( 4, 1) = 0.21957751641341996535d0 + cart_to_sphe_4 ( 6, 1) = -0.87831006565367986142d0 + cart_to_sphe_4 (11, 1) = 0.375d0 + cart_to_sphe_4 (13, 1) = -0.87831006565367986142d0 + cart_to_sphe_4 (15, 1) = 1.0d0 + cart_to_sphe_4 ( 3, 2) = -0.89642145700079522998d0 + cart_to_sphe_4 ( 8, 2) = -0.40089186286863657703d0 + cart_to_sphe_4 (10, 2) = 1.19522860933439364d0 + cart_to_sphe_4 ( 5, 3) = -0.40089186286863657703d0 + cart_to_sphe_4 (12, 3) = -0.89642145700079522998d0 + cart_to_sphe_4 (14, 3) = 1.19522860933439364d0 + cart_to_sphe_4 ( 1, 4) = -0.5590169943749474241d0 + cart_to_sphe_4 ( 6, 4) = 0.9819805060619657157d0 + cart_to_sphe_4 (11, 4) = 0.5590169943749474241d0 + cart_to_sphe_4 (13, 4) = -0.9819805060619657157d0 + cart_to_sphe_4 ( 2, 5) = -0.42257712736425828875d0 + cart_to_sphe_4 ( 7, 5) = -0.42257712736425828875d0 + cart_to_sphe_4 ( 9, 5) = 1.1338934190276816816d0 + cart_to_sphe_4 ( 3, 6) = 0.790569415042094833d0 + cart_to_sphe_4 ( 8, 6) = -1.0606601717798212866d0 + cart_to_sphe_4 ( 5, 7) = 1.0606601717798212866d0 + cart_to_sphe_4 (12, 7) = -0.790569415042094833d0 + cart_to_sphe_4 ( 1, 8) = 0.73950997288745200532d0 + cart_to_sphe_4 ( 4, 8) = -1.2990381056766579701d0 + cart_to_sphe_4 (11, 8) = 0.73950997288745200532d0 + cart_to_sphe_4 ( 2, 9) = 1.1180339887498948482d0 + cart_to_sphe_4 ( 7, 9) = -1.1180339887498948482d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_5, (21,11) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=5 + END_DOC + cart_to_sphe_5 = 0.d0 + + cart_to_sphe_5 ( 3, 1) = 0.625d0 + cart_to_sphe_5 ( 8, 1) = 0.36596252735569994226d0 + cart_to_sphe_5 (10, 1) = -1.0910894511799619063d0 + cart_to_sphe_5 (17, 1) = 0.625d0 + cart_to_sphe_5 (19, 1) = -1.0910894511799619063d0 + cart_to_sphe_5 (21, 1) = 1.0d0 + cart_to_sphe_5 ( 1, 2) = 0.48412291827592711065d0 + cart_to_sphe_5 ( 4, 2) = 0.21128856368212914438d0 + cart_to_sphe_5 ( 6, 2) = -1.2677313820927748663d0 + cart_to_sphe_5 (11, 2) = 0.16137430609197570355d0 + cart_to_sphe_5 (13, 2) = -0.56694670951384084082d0 + cart_to_sphe_5 (15, 2) = 1.2909944487358056284d0 + cart_to_sphe_5 ( 2, 3) = 0.16137430609197570355d0 + cart_to_sphe_5 ( 7, 3) = 0.21128856368212914438d0 + cart_to_sphe_5 ( 9, 3) = -0.56694670951384084082d0 + cart_to_sphe_5 (16, 3) = 0.48412291827592711065d0 + cart_to_sphe_5 (18, 3) = -1.2677313820927748663d0 + cart_to_sphe_5 (20, 3) = 1.2909944487358056284d0 + cart_to_sphe_5 ( 3, 4) = -0.85391256382996653194d0 + cart_to_sphe_5 (10, 4) = 1.1180339887498948482d0 + cart_to_sphe_5 (17, 4) = 0.85391256382996653194d0 + cart_to_sphe_5 (19, 4) = -1.1180339887498948482d0 + cart_to_sphe_5 ( 5, 5) = -0.6454972243679028142d0 + cart_to_sphe_5 (12, 5) = -0.6454972243679028142d0 + cart_to_sphe_5 (14, 5) = 1.2909944487358056284d0 + cart_to_sphe_5 ( 1, 6) = -0.52291251658379721749d0 + cart_to_sphe_5 ( 4, 6) = 0.22821773229381921394d0 + cart_to_sphe_5 ( 6, 6) = 0.91287092917527685576d0 + cart_to_sphe_5 (11, 6) = 0.52291251658379721749d0 + cart_to_sphe_5 (13, 6) = -1.2247448713915890491d0 + cart_to_sphe_5 ( 2, 7) = -0.52291251658379721749d0 + cart_to_sphe_5 ( 7, 7) = -0.22821773229381921394d0 + cart_to_sphe_5 ( 9, 7) = 1.2247448713915890491d0 + cart_to_sphe_5 (16, 7) = 0.52291251658379721749d0 + cart_to_sphe_5 (18, 7) = -0.91287092917527685576d0 + cart_to_sphe_5 ( 3, 8) = 0.73950997288745200532d0 + cart_to_sphe_5 ( 8, 8) = -1.2990381056766579701d0 + cart_to_sphe_5 (17, 8) = 0.73950997288745200532d0 + cart_to_sphe_5 ( 5, 9) = 1.1180339887498948482d0 + cart_to_sphe_5 (12, 9) = -1.1180339887498948482d0 + cart_to_sphe_5 ( 1,10) = 0.7015607600201140098d0 + cart_to_sphe_5 ( 4,10) = -1.5309310892394863114d0 + cart_to_sphe_5 (11,10) = 1.169267933366856683d0 + cart_to_sphe_5 ( 2,11) = 1.169267933366856683d0 + cart_to_sphe_5 ( 7,11) = -1.5309310892394863114d0 + cart_to_sphe_5 (16,11) = 0.7015607600201140098d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_6, (28,13) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=6 + END_DOC + cart_to_sphe_6 = 0.d0 + + cart_to_sphe_6 ( 1, 1) = -0.3125d0 + cart_to_sphe_6 ( 4, 1) = -0.16319780245846672329d0 + cart_to_sphe_6 ( 6, 1) = 0.97918681475080033975d0 + cart_to_sphe_6 (11, 1) = -0.16319780245846672329d0 + cart_to_sphe_6 (13, 1) = 0.57335309036732873772d0 + cart_to_sphe_6 (15, 1) = -1.3055824196677337863d0 + cart_to_sphe_6 (22, 1) = -0.3125d0 + cart_to_sphe_6 (24, 1) = 0.97918681475080033975d0 + cart_to_sphe_6 (26, 1) = -1.3055824196677337863d0 + cart_to_sphe_6 (28, 1) = 1.0d0 + cart_to_sphe_6 ( 3, 2) = 0.86356159963469679725d0 + cart_to_sphe_6 ( 8, 2) = 0.37688918072220452831d0 + cart_to_sphe_6 (10, 2) = -1.6854996561581052156d0 + cart_to_sphe_6 (17, 2) = 0.28785386654489893242d0 + cart_to_sphe_6 (19, 2) = -0.75377836144440905662d0 + cart_to_sphe_6 (21, 2) = 1.3816985594155148756d0 + cart_to_sphe_6 ( 5, 3) = 0.28785386654489893242d0 + cart_to_sphe_6 (12, 3) = 0.37688918072220452831d0 + cart_to_sphe_6 (14, 3) = -0.75377836144440905662d0 + cart_to_sphe_6 (23, 3) = 0.86356159963469679725d0 + cart_to_sphe_6 (25, 3) = -1.6854996561581052156d0 + cart_to_sphe_6 (27, 3) = 1.3816985594155148756d0 + cart_to_sphe_6 ( 1, 4) = 0.45285552331841995543d0 + cart_to_sphe_6 ( 4, 4) = 0.078832027985861408788d0 + cart_to_sphe_6 ( 6, 4) = -1.2613124477737825406d0 + cart_to_sphe_6 (11, 4) = -0.078832027985861408788d0 + cart_to_sphe_6 (15, 4) = 1.2613124477737825406d0 + cart_to_sphe_6 (22, 4) = -0.45285552331841995543d0 + cart_to_sphe_6 (24, 4) = 1.2613124477737825406d0 + cart_to_sphe_6 (26, 4) = -1.2613124477737825406d0 + cart_to_sphe_6 ( 2, 5) = 0.27308215547040717681d0 + cart_to_sphe_6 ( 7, 5) = 0.26650089544451304287d0 + cart_to_sphe_6 ( 9, 5) = -0.95346258924559231545d0 + cart_to_sphe_6 (16, 5) = 0.27308215547040717681d0 + cart_to_sphe_6 (18, 5) = -0.95346258924559231545d0 + cart_to_sphe_6 (20, 5) = 1.4564381625088382763d0 + cart_to_sphe_6 ( 3, 6) = -0.81924646641122153043d0 + cart_to_sphe_6 ( 8, 6) = 0.35754847096709711829d0 + cart_to_sphe_6 (10, 6) = 1.0660035817780521715d0 + cart_to_sphe_6 (17, 6) = 0.81924646641122153043d0 + cart_to_sphe_6 (19, 6) = -1.4301938838683884732d0 + cart_to_sphe_6 ( 5, 7) = -0.81924646641122153043d0 + cart_to_sphe_6 (12, 7) = -0.35754847096709711829d0 + cart_to_sphe_6 (14, 7) = 1.4301938838683884732d0 + cart_to_sphe_6 (23, 7) = 0.81924646641122153043d0 + cart_to_sphe_6 (25, 7) = -1.0660035817780521715d0 + cart_to_sphe_6 ( 1, 8) = -0.49607837082461073572d0 + cart_to_sphe_6 ( 4, 8) = 0.43178079981734839863d0 + cart_to_sphe_6 ( 6, 8) = 0.86356159963469679725d0 + cart_to_sphe_6 (11, 8) = 0.43178079981734839863d0 + cart_to_sphe_6 (13, 8) = -1.5169496905422946941d0 + cart_to_sphe_6 (22, 8) = -0.49607837082461073572d0 + cart_to_sphe_6 (24, 8) = 0.86356159963469679725d0 + cart_to_sphe_6 ( 2, 9) = -0.59829302641309923139d0 + cart_to_sphe_6 ( 9, 9) = 1.3055824196677337863d0 + cart_to_sphe_6 (16, 9) = 0.59829302641309923139d0 + cart_to_sphe_6 (18, 9) = -1.3055824196677337863d0 + cart_to_sphe_6 ( 3,10) = 0.7015607600201140098d0 + cart_to_sphe_6 ( 8,10) = -1.5309310892394863114d0 + cart_to_sphe_6 (17,10) = 1.169267933366856683d0 + cart_to_sphe_6 ( 5,11) = 1.169267933366856683d0 + cart_to_sphe_6 (12,11) = -1.5309310892394863114d0 + cart_to_sphe_6 (23,11) = 0.7015607600201140098d0 + cart_to_sphe_6 ( 1,12) = 0.67169328938139615748d0 + cart_to_sphe_6 ( 4,12) = -1.7539019000502850245d0 + cart_to_sphe_6 (11,12) = 1.7539019000502850245d0 + cart_to_sphe_6 (22,12) = -0.67169328938139615748d0 + cart_to_sphe_6 ( 2,13) = 1.2151388809514737933d0 + cart_to_sphe_6 ( 7,13) = -1.9764235376052370825d0 + cart_to_sphe_6 (16,13) = 1.2151388809514737933d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_7, (36,15) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=7 + END_DOC + cart_to_sphe_7 = 0.d0 + + cart_to_sphe_7 ( 3, 1) = -0.60670333962134435221d0 + cart_to_sphe_7 ( 8, 1) = -0.31684048566533184861d0 + cart_to_sphe_7 (10, 1) = 1.4169537279434593918d0 + cart_to_sphe_7 (17, 1) = -0.31684048566533184861d0 + cart_to_sphe_7 (19, 1) = 0.82968314787883083417d0 + cart_to_sphe_7 (21, 1) = -1.5208343311935928733d0 + cart_to_sphe_7 (30, 1) = -0.60670333962134435221d0 + cart_to_sphe_7 (32, 1) = 1.4169537279434593918d0 + cart_to_sphe_7 (34, 1) = -1.5208343311935928733d0 + cart_to_sphe_7 (36, 1) = 1.0d0 + cart_to_sphe_7 ( 1, 2) = -0.41339864235384227977d0 + cart_to_sphe_7 ( 4, 2) = -0.17963167078872714852d0 + cart_to_sphe_7 ( 6, 2) = 1.4370533663098171882d0 + cart_to_sphe_7 (11, 2) = -0.1338895422651523892d0 + cart_to_sphe_7 (13, 2) = 0.62718150750531807803d0 + cart_to_sphe_7 (15, 2) = -2.1422326762424382273d0 + cart_to_sphe_7 (22, 2) = -0.1146561540164598136d0 + cart_to_sphe_7 (24, 2) = 0.47901778876993906273d0 + cart_to_sphe_7 (26, 2) = -0.95803557753987812546d0 + cart_to_sphe_7 (28, 2) = 1.4675987714106856141d0 + cart_to_sphe_7 ( 2, 3) = -0.1146561540164598136d0 + cart_to_sphe_7 ( 7, 3) = -0.1338895422651523892d0 + cart_to_sphe_7 ( 9, 3) = 0.47901778876993906273d0 + cart_to_sphe_7 (16, 3) = -0.17963167078872714852d0 + cart_to_sphe_7 (18, 3) = 0.62718150750531807803d0 + cart_to_sphe_7 (20, 3) = -0.95803557753987812546d0 + cart_to_sphe_7 (29, 3) = -0.41339864235384227977d0 + cart_to_sphe_7 (31, 3) = 1.4370533663098171882d0 + cart_to_sphe_7 (33, 3) = -2.1422326762424382273d0 + cart_to_sphe_7 (35, 3) = 1.4675987714106856141d0 + cart_to_sphe_7 ( 3, 4) = 0.84254721963085980365d0 + cart_to_sphe_7 ( 8, 4) = 0.14666864502533059662d0 + cart_to_sphe_7 (10, 4) = -1.7491256557036030854d0 + cart_to_sphe_7 (17, 4) = -0.14666864502533059662d0 + cart_to_sphe_7 (21, 4) = 1.4080189922431737275d0 + cart_to_sphe_7 (30, 4) = -0.84254721963085980365d0 + cart_to_sphe_7 (32, 4) = 1.7491256557036030854d0 + cart_to_sphe_7 (34, 4) = -1.4080189922431737275d0 + cart_to_sphe_7 ( 5, 5) = 0.50807509012231371428d0 + cart_to_sphe_7 (12, 5) = 0.49583051751369852316d0 + cart_to_sphe_7 (14, 5) = -1.3222147133698627284d0 + cart_to_sphe_7 (23, 5) = 0.50807509012231371428d0 + cart_to_sphe_7 (25, 5) = -1.3222147133698627284d0 + cart_to_sphe_7 (27, 5) = 1.6258402883914038857d0 + cart_to_sphe_7 ( 1, 6) = 0.42961647140211000062d0 + cart_to_sphe_7 ( 4, 6) = -0.062226236090912312563d0 + cart_to_sphe_7 ( 6, 6) = -1.2445247218182462513d0 + cart_to_sphe_7 (11, 6) = -0.23190348980538452414d0 + cart_to_sphe_7 (13, 6) = 0.54315511828342602619d0 + cart_to_sphe_7 (15, 6) = 1.2368186122953841287d0 + cart_to_sphe_7 (22, 6) = -0.35746251148251142922d0 + cart_to_sphe_7 (24, 6) = 1.2445247218182462513d0 + cart_to_sphe_7 (26, 6) = -1.6593662957576616683d0 + cart_to_sphe_7 ( 2, 7) = 0.35746251148251142922d0 + cart_to_sphe_7 ( 7, 7) = 0.23190348980538452414d0 + cart_to_sphe_7 ( 9, 7) = -1.2445247218182462513d0 + cart_to_sphe_7 (16, 7) = 0.062226236090912312563d0 + cart_to_sphe_7 (18, 7) = -0.54315511828342602619d0 + cart_to_sphe_7 (20, 7) = 1.6593662957576616683d0 + cart_to_sphe_7 (29, 7) = -0.42961647140211000062d0 + cart_to_sphe_7 (31, 7) = 1.2445247218182462513d0 + cart_to_sphe_7 (33, 7) = -1.2368186122953841287d0 + cart_to_sphe_7 ( 3, 8) = -0.79037935147039945351d0 + cart_to_sphe_7 ( 8, 8) = 0.6879369240987588816d0 + cart_to_sphe_7 (10, 8) = 1.025515817677958738d0 + cart_to_sphe_7 (17, 8) = 0.6879369240987588816d0 + cart_to_sphe_7 (19, 8) = -1.8014417303072302517d0 + cart_to_sphe_7 (30, 8) = -0.79037935147039945351d0 + cart_to_sphe_7 (32, 8) = 1.025515817677958738d0 + cart_to_sphe_7 ( 5, 9) = -0.95323336395336381126d0 + cart_to_sphe_7 (14, 9) = 1.5504341823651057024d0 + cart_to_sphe_7 (23, 9) = 0.95323336395336381126d0 + cart_to_sphe_7 (25, 9) = -1.5504341823651057024d0 + cart_to_sphe_7 ( 1,10) = -0.47495887979908323849d0 + cart_to_sphe_7 ( 4,10) = 0.61914323168888299344d0 + cart_to_sphe_7 ( 6,10) = 0.82552430891851065792d0 + cart_to_sphe_7 (11,10) = 0.25637895441948968451d0 + cart_to_sphe_7 (13,10) = -1.8014417303072302517d0 + cart_to_sphe_7 (22,10) = -0.65864945955866621126d0 + cart_to_sphe_7 (24,10) = 1.3758738481975177632d0 + cart_to_sphe_7 ( 2,11) = -0.65864945955866621126d0 + cart_to_sphe_7 ( 7,11) = 0.25637895441948968451d0 + cart_to_sphe_7 ( 9,11) = 1.3758738481975177632d0 + cart_to_sphe_7 (16,11) = 0.61914323168888299344d0 + cart_to_sphe_7 (18,11) = -1.8014417303072302517d0 + cart_to_sphe_7 (29,11) = -0.47495887979908323849d0 + cart_to_sphe_7 (31,11) = 0.82552430891851065792d0 + cart_to_sphe_7 ( 3,12) = 0.67169328938139615748d0 + cart_to_sphe_7 ( 8,12) = -1.7539019000502850245d0 + cart_to_sphe_7 (17,12) = 1.7539019000502850245d0 + cart_to_sphe_7 (30,12) = -0.67169328938139615748d0 + cart_to_sphe_7 ( 5,13) = 1.2151388809514737933d0 + cart_to_sphe_7 (12,13) = -1.9764235376052370825d0 + cart_to_sphe_7 (23,13) = 1.2151388809514737933d0 + cart_to_sphe_7 ( 1,14) = 0.64725984928774934788d0 + cart_to_sphe_7 ( 4,14) = -1.96875d0 + cart_to_sphe_7 (11,14) = 2.4456993503903949804d0 + cart_to_sphe_7 (22,14) = -1.2566230789301937693d0 + cart_to_sphe_7 ( 2,15) = 1.2566230789301937693d0 + cart_to_sphe_7 ( 7,15) = -2.4456993503903949804d0 + cart_to_sphe_7 (16,15) = 1.96875d0 + cart_to_sphe_7 (29,15) = -0.64725984928774934788d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_8, (45,17) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=8 + END_DOC + cart_to_sphe_8 = 0.d0 + + cart_to_sphe_8 ( 1, 1) = 0.2734375d0 + cart_to_sphe_8 ( 4, 1) = 0.13566299095694674896d0 + cart_to_sphe_8 ( 6, 1) = -1.0853039276555739917d0 + cart_to_sphe_8 (11, 1) = 0.12099545906566282998d0 + cart_to_sphe_8 (13, 1) = -0.56678149117738375672d0 + cart_to_sphe_8 (15, 1) = 1.9359273450506052797d0 + cart_to_sphe_8 (22, 1) = 0.13566299095694674896d0 + cart_to_sphe_8 (24, 1) = -0.56678149117738375672d0 + cart_to_sphe_8 (26, 1) = 1.1335629823547675134d0 + cart_to_sphe_8 (28, 1) = -1.7364862842489183867d0 + cart_to_sphe_8 (37, 1) = 0.2734375d0 + cart_to_sphe_8 (39, 1) = -1.0853039276555739917d0 + cart_to_sphe_8 (41, 1) = 1.9359273450506052797d0 + cart_to_sphe_8 (43, 1) = -1.7364862842489183867d0 + cart_to_sphe_8 (45, 1) = 1.0d0 + cart_to_sphe_8 ( 3, 2) = -0.84721510698287244363d0 + cart_to_sphe_8 ( 8, 2) = -0.36813537731583001376d0 + cart_to_sphe_8 (10, 2) = 2.1951352762686132731d0 + cart_to_sphe_8 (17, 2) = -0.27439190953357665914d0 + cart_to_sphe_8 (19, 2) = 0.95803557753987812546d0 + cart_to_sphe_8 (21, 2) = -2.6341623315223359277d0 + cart_to_sphe_8 (30, 2) = -0.23497519304418891392d0 + cart_to_sphe_8 (32, 2) = 0.73171175875620442437d0 + cart_to_sphe_8 (34, 2) = -1.178033207410656044d0 + cart_to_sphe_8 (36, 2) = 1.5491933384829667541d0 + cart_to_sphe_8 ( 5, 3) = -0.23497519304418891392d0 + cart_to_sphe_8 (12, 3) = -0.27439190953357665914d0 + cart_to_sphe_8 (14, 3) = 0.73171175875620442437d0 + cart_to_sphe_8 (23, 3) = -0.36813537731583001376d0 + cart_to_sphe_8 (25, 3) = 0.95803557753987812546d0 + cart_to_sphe_8 (27, 3) = -1.178033207410656044d0 + cart_to_sphe_8 (38, 3) = -0.84721510698287244363d0 + cart_to_sphe_8 (40, 3) = 2.1951352762686132731d0 + cart_to_sphe_8 (42, 3) = -2.6341623315223359277d0 + cart_to_sphe_8 (44, 3) = 1.5491933384829667541d0 + cart_to_sphe_8 ( 1, 4) = -0.39218438743784791311d0 + cart_to_sphe_8 ( 4, 4) = -0.0972889728117695298d0 + cart_to_sphe_8 ( 6, 4) = 1.459334592176542947d0 + cart_to_sphe_8 (13, 4) = 0.25403754506115685714d0 + cart_to_sphe_8 (15, 4) = -2.3138757483972597747d0 + cart_to_sphe_8 (22, 4) = 0.0972889728117695298d0 + cart_to_sphe_8 (24, 4) = -0.25403754506115685714d0 + cart_to_sphe_8 (28, 4) = 1.5566235649883124768d0 + cart_to_sphe_8 (37, 4) = 0.39218438743784791311d0 + cart_to_sphe_8 (39, 4) = -1.459334592176542947d0 + cart_to_sphe_8 (41, 4) = 2.3138757483972597747d0 + cart_to_sphe_8 (43, 4) = -1.5566235649883124768d0 + cart_to_sphe_8 ( 2, 5) = -0.20252314682524563222d0 + cart_to_sphe_8 ( 7, 5) = -0.1967766362666553471d0 + cart_to_sphe_8 ( 9, 5) = 0.8800118701519835797d0 + cart_to_sphe_8 (16, 5) = -0.1967766362666553471d0 + cart_to_sphe_8 (18, 5) = 0.85880364827689588344d0 + cart_to_sphe_8 (20, 5) = -1.7491256557036030854d0 + cart_to_sphe_8 (29, 5) = -0.20252314682524563222d0 + cart_to_sphe_8 (31, 5) = 0.8800118701519835797d0 + cart_to_sphe_8 (33, 5) = -1.7491256557036030854d0 + cart_to_sphe_8 (35, 5) = 1.7974340685458342478d0 + cart_to_sphe_8 ( 3, 6) = 0.82265291131801144316d0 + cart_to_sphe_8 ( 8, 6) = -0.11915417049417047641d0 + cart_to_sphe_8 (10, 6) = -1.7762455001837659611d0 + cart_to_sphe_8 (17, 6) = -0.44406137504594149028d0 + cart_to_sphe_8 (19, 6) = 0.77521709118255285119d0 + cart_to_sphe_8 (21, 6) = 1.4209964001470127689d0 + cart_to_sphe_8 (30, 6) = -0.68448859700003543819d0 + cart_to_sphe_8 (32, 6) = 1.7762455001837659611d0 + cart_to_sphe_8 (34, 6) = -1.9064667279067276225d0 + cart_to_sphe_8 ( 5, 7) = 0.68448859700003543819d0 + cart_to_sphe_8 (12, 7) = 0.44406137504594149028d0 + cart_to_sphe_8 (14, 7) = -1.7762455001837659611d0 + cart_to_sphe_8 (23, 7) = 0.11915417049417047641d0 + cart_to_sphe_8 (25, 7) = -0.77521709118255285119d0 + cart_to_sphe_8 (27, 7) = 1.9064667279067276225d0 + cart_to_sphe_8 (38, 7) = -0.82265291131801144316d0 + cart_to_sphe_8 (40, 7) = 1.7762455001837659611d0 + cart_to_sphe_8 (42, 7) = -1.4209964001470127689d0 + cart_to_sphe_8 ( 1, 8) = 0.41132645565900572158d0 + cart_to_sphe_8 ( 4, 8) = -0.20407507102873838124d0 + cart_to_sphe_8 ( 6, 8) = -1.2244504261724302874d0 + cart_to_sphe_8 (11, 8) = -0.3033516698106721761d0 + cart_to_sphe_8 (13, 8) = 1.0657473001102595767d0 + cart_to_sphe_8 (15, 8) = 1.2134066792426887044d0 + cart_to_sphe_8 (22, 8) = -0.20407507102873838124d0 + cart_to_sphe_8 (24, 8) = 1.0657473001102595767d0 + cart_to_sphe_8 (26, 8) = -2.1314946002205191534d0 + cart_to_sphe_8 (37, 8) = 0.41132645565900572158d0 + cart_to_sphe_8 (39, 8) = -1.2244504261724302874d0 + cart_to_sphe_8 (41, 8) = 1.2134066792426887044d0 + cart_to_sphe_8 ( 2, 9) = 0.42481613669916071115d0 + cart_to_sphe_8 ( 7, 9) = 0.13758738481975177632d0 + cart_to_sphe_8 ( 9, 9) = -1.4767427774562605828d0 + cart_to_sphe_8 (16, 9) = -0.13758738481975177632d0 + cart_to_sphe_8 (20, 9) = 1.8344984642633570176d0 + cart_to_sphe_8 (29, 9) = -0.42481613669916071115d0 + cart_to_sphe_8 (31, 9) = 1.4767427774562605828d0 + cart_to_sphe_8 (33, 9) = -1.8344984642633570176d0 + cart_to_sphe_8 ( 3,10) = -0.76584818175667166625d0 + cart_to_sphe_8 ( 8,10) = 0.99833846339806020718d0 + cart_to_sphe_8 (10,10) = 0.99215674164922147144d0 + cart_to_sphe_8 (17,10) = 0.41339864235384227977d0 + cart_to_sphe_8 (19,10) = -2.1650635094610966169d0 + cart_to_sphe_8 (30,10) = -1.0620403417479017779d0 + cart_to_sphe_8 (32,10) = 1.6535945694153691191d0 + cart_to_sphe_8 ( 5,11) = -1.0620403417479017779d0 + cart_to_sphe_8 (12,11) = 0.41339864235384227977d0 + cart_to_sphe_8 (14,11) = 1.6535945694153691191d0 + cart_to_sphe_8 (23,11) = 0.99833846339806020718d0 + cart_to_sphe_8 (25,11) = -2.1650635094610966169d0 + cart_to_sphe_8 (38,11) = -0.76584818175667166625d0 + cart_to_sphe_8 (40,11) = 0.99215674164922147144d0 + cart_to_sphe_8 ( 1,12) = -0.45768182862115030664d0 + cart_to_sphe_8 ( 4,12) = 0.79475821795059156217d0 + cart_to_sphe_8 ( 6,12) = 0.79475821795059156217d0 + cart_to_sphe_8 (13,12) = -2.0752447144854989366d0 + cart_to_sphe_8 (22,12) = -0.79475821795059156217d0 + cart_to_sphe_8 (24,12) = 2.0752447144854989366d0 + cart_to_sphe_8 (37,12) = 0.45768182862115030664d0 + cart_to_sphe_8 (39,12) = -0.79475821795059156217d0 + cart_to_sphe_8 ( 2,13) = -0.70903764004458888811d0 + cart_to_sphe_8 ( 7,13) = 0.53582588123382020898d0 + cart_to_sphe_8 ( 9,13) = 1.4377717134510610478d0 + cart_to_sphe_8 (16,13) = 0.53582588123382020898d0 + cart_to_sphe_8 (18,13) = -2.338535866733713366d0 + cart_to_sphe_8 (29,13) = -0.70903764004458888811d0 + cart_to_sphe_8 (31,13) = 1.4377717134510610478d0 + cart_to_sphe_8 ( 3,14) = 0.64725984928774934788d0 + cart_to_sphe_8 ( 8,14) = -1.96875d0 + cart_to_sphe_8 (17,14) = 2.4456993503903949804d0 + cart_to_sphe_8 (30,14) = -1.2566230789301937693d0 + cart_to_sphe_8 ( 5,15) = 1.2566230789301937693d0 + cart_to_sphe_8 (12,15) = -2.4456993503903949804d0 + cart_to_sphe_8 (23,15) = 1.96875d0 + cart_to_sphe_8 (38,15) = -0.64725984928774934788d0 + cart_to_sphe_8 ( 1,16) = 0.626706654240043952d0 + cart_to_sphe_8 ( 4,16) = -2.176535018670731151d0 + cart_to_sphe_8 (11,16) = 3.2353561313826025233d0 + cart_to_sphe_8 (22,16) = -2.176535018670731151d0 + cart_to_sphe_8 (37,16) = 0.626706654240043952d0 + cart_to_sphe_8 ( 2,17) = 1.2945196985754986958d0 + cart_to_sphe_8 ( 7,17) = -2.9348392204684739765d0 + cart_to_sphe_8 (16,17) = 2.9348392204684739765d0 + cart_to_sphe_8 (29,17) = -1.2945196985754986958d0 +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, cart_to_sphe_9, (55,19) ] + implicit none + BEGIN_DOC +! Spherical -> Cartesian Transformation matrix for l=9 + END_DOC + cart_to_sphe_9 = 0.d0 + + cart_to_sphe_9 ( 3, 1) = 0.59686501473785067702d0 + cart_to_sphe_9 ( 8, 1) = 0.29612797475437320937d0 + cart_to_sphe_9 (10, 1) = -1.7657660842403202261d0 + cart_to_sphe_9 (17, 1) = 0.26411138361943717788d0 + cart_to_sphe_9 (19, 1) = -0.92214126273187869253d0 + cart_to_sphe_9 (21, 1) = 2.5354692827465969076d0 + cart_to_sphe_9 (30, 1) = 0.29612797475437320937d0 + cart_to_sphe_9 (32, 1) = -0.92214126273187869253d0 + cart_to_sphe_9 (34, 1) = 1.4846187947947014119d0 + cart_to_sphe_9 (36, 1) = -1.952374120367905548d0 + cart_to_sphe_9 (47, 1) = 0.59686501473785067702d0 + cart_to_sphe_9 (49, 1) = -1.7657660842403202261d0 + cart_to_sphe_9 (51, 1) = 2.5354692827465969076d0 + cart_to_sphe_9 (53, 1) = -1.952374120367905548d0 + cart_to_sphe_9 (55, 1) = 1.0d0 + cart_to_sphe_9 ( 1, 2) = 0.36685490255855924707d0 + cart_to_sphe_9 ( 4, 2) = 0.15916400393009351387d0 + cart_to_sphe_9 ( 6, 2) = -1.5916400393009351387d0 + cart_to_sphe_9 (11, 2) = 0.11811420148091719529d0 + cart_to_sphe_9 (13, 2) = -0.6916059470489090194d0 + cart_to_sphe_9 (15, 2) = 3.1497120394911252077d0 + cart_to_sphe_9 (22, 2) = 0.098709324918124403125d0 + cart_to_sphe_9 (24, 2) = -0.51549263708149354579d0 + cart_to_sphe_9 (26, 2) = 1.3746470322173161221d0 + cart_to_sphe_9 (28, 2) = -3.1586983973799809d0 + cart_to_sphe_9 (37, 2) = 0.088975383089683195547d0 + cart_to_sphe_9 (39, 2) = -0.44144152106008005653d0 + cart_to_sphe_9 (41, 2) = 1.0499040131637084026d0 + cart_to_sphe_9 (43, 2) = -1.4126128673922561809d0 + cart_to_sphe_9 (45, 2) = 1.62697843363992129d0 + cart_to_sphe_9 ( 2, 3) = 0.088975383089683195547d0 + cart_to_sphe_9 ( 7, 3) = 0.098709324918124403125d0 + cart_to_sphe_9 ( 9, 3) = -0.44144152106008005653d0 + cart_to_sphe_9 (16, 3) = 0.11811420148091719529d0 + cart_to_sphe_9 (18, 3) = -0.51549263708149354579d0 + cart_to_sphe_9 (20, 3) = 1.0499040131637084026d0 + cart_to_sphe_9 (29, 3) = 0.15916400393009351387d0 + cart_to_sphe_9 (31, 3) = -0.6916059470489090194d0 + cart_to_sphe_9 (33, 3) = 1.3746470322173161221d0 + cart_to_sphe_9 (35, 3) = -1.4126128673922561809d0 + cart_to_sphe_9 (46, 3) = 0.36685490255855924707d0 + cart_to_sphe_9 (48, 3) = -1.5916400393009351387d0 + cart_to_sphe_9 (50, 3) = 3.1497120394911252077d0 + cart_to_sphe_9 (52, 3) = -3.1586983973799809d0 + cart_to_sphe_9 (54, 3) = 1.62697843363992129d0 + cart_to_sphe_9 ( 3, 4) = -0.83466307816035426155d0 + cart_to_sphe_9 ( 8, 4) = -0.2070544267420625878d0 + cart_to_sphe_9 (10, 4) = 2.3149388661875113029d0 + cart_to_sphe_9 (19, 4) = 0.40297913150666282783d0 + cart_to_sphe_9 (21, 4) = -2.9546917977869539993d0 + cart_to_sphe_9 (30, 4) = 0.2070544267420625878d0 + cart_to_sphe_9 (32, 4) = -0.40297913150666282783d0 + cart_to_sphe_9 (36, 4) = 1.7063893769835631924d0 + cart_to_sphe_9 (47, 4) = 0.83466307816035426155d0 + cart_to_sphe_9 (49, 4) = -2.3149388661875113029d0 + cart_to_sphe_9 (51, 4) = 2.9546917977869539993d0 + cart_to_sphe_9 (53, 4) = -1.7063893769835631924d0 + cart_to_sphe_9 ( 5, 5) = -0.43101816018790287844d0 + cart_to_sphe_9 (12, 5) = -0.4187881980957120927d0 + cart_to_sphe_9 (14, 5) = 1.395960660319040309d0 + cart_to_sphe_9 (23, 5) = -0.4187881980957120927d0 + cart_to_sphe_9 (25, 5) = 1.3623181102386339839d0 + cart_to_sphe_9 (27, 5) = -2.2335370565104644944d0 + cart_to_sphe_9 (38, 5) = -0.43101816018790287844d0 + cart_to_sphe_9 (40, 5) = 1.395960660319040309d0 + cart_to_sphe_9 (42, 5) = -2.2335370565104644944d0 + cart_to_sphe_9 (44, 5) = 1.9703687322875560157d0 + cart_to_sphe_9 ( 1, 6) = -0.37548796377180986812d0 + cart_to_sphe_9 ( 6, 6) = 1.4661859659554465543d0 + cart_to_sphe_9 (11, 6) = 0.12089373945199884835d0 + cart_to_sphe_9 (13, 6) = -0.21236437647040795145d0 + cart_to_sphe_9 (15, 6) = -2.417874789039976967d0 + cart_to_sphe_9 (22, 6) = 0.20206443016189559856d0 + cart_to_sphe_9 (24, 6) = -0.79143530297864839268d0 + cart_to_sphe_9 (26, 6) = 1.0552470706381978569d0 + cart_to_sphe_9 (28, 6) = 1.6165154412951647885d0 + cart_to_sphe_9 (37, 6) = 0.27320762396104757397d0 + cart_to_sphe_9 (39, 6) = -1.2199404645272449631d0 + cart_to_sphe_9 (41, 6) = 2.417874789039976967d0 + cart_to_sphe_9 (43, 6) = -2.16878304804843549d0 + cart_to_sphe_9 ( 2, 7) = -0.27320762396104757397d0 + cart_to_sphe_9 ( 7, 7) = -0.20206443016189559856d0 + cart_to_sphe_9 ( 9, 7) = 1.2199404645272449631d0 + cart_to_sphe_9 (16, 7) = -0.12089373945199884835d0 + cart_to_sphe_9 (18, 7) = 0.79143530297864839268d0 + cart_to_sphe_9 (20, 7) = -2.417874789039976967d0 + cart_to_sphe_9 (31, 7) = 0.21236437647040795145d0 + cart_to_sphe_9 (33, 7) = -1.0552470706381978569d0 + cart_to_sphe_9 (35, 7) = 2.16878304804843549d0 + cart_to_sphe_9 (46, 7) = 0.37548796377180986812d0 + cart_to_sphe_9 (48, 7) = -1.4661859659554465543d0 + cart_to_sphe_9 (50, 7) = 2.417874789039976967d0 + cart_to_sphe_9 (52, 7) = -1.6165154412951647885d0 + cart_to_sphe_9 ( 3, 8) = 0.80430146722719804411d0 + cart_to_sphe_9 ( 8, 8) = -0.39904527606894581113d0 + cart_to_sphe_9 (10, 8) = -1.7845847267806657796d0 + cart_to_sphe_9 (17, 8) = -0.59316922059788797031d0 + cart_to_sphe_9 (19, 8) = 1.5532816304615888184d0 + cart_to_sphe_9 (21, 8) = 1.4236061294349311288d0 + cart_to_sphe_9 (30, 8) = -0.39904527606894581113d0 + cart_to_sphe_9 (32, 8) = 1.5532816304615888184d0 + cart_to_sphe_9 (34, 8) = -2.5007351860179508607d0 + cart_to_sphe_9 (47, 8) = 0.80430146722719804411d0 + cart_to_sphe_9 (49, 8) = -1.7845847267806657796d0 + cart_to_sphe_9 (51, 8) = 1.4236061294349311288d0 + cart_to_sphe_9 ( 5, 9) = 0.83067898344030094085d0 + cart_to_sphe_9 (12, 9) = 0.26903627024228973454d0 + cart_to_sphe_9 (14, 9) = -2.1522901619383178764d0 + cart_to_sphe_9 (23, 9) = -0.26903627024228973454d0 + cart_to_sphe_9 (27, 9) = 2.1522901619383178764d0 + cart_to_sphe_9 (38, 9) = -0.83067898344030094085d0 + cart_to_sphe_9 (40, 9) = 2.1522901619383178764d0 + cart_to_sphe_9 (42, 9) = -2.1522901619383178764d0 + cart_to_sphe_9 ( 1,10) = 0.39636409043643194293d0 + cart_to_sphe_9 ( 4,10) = -0.34393377440500167929d0 + cart_to_sphe_9 ( 6,10) = -1.2037682104175058775d0 + cart_to_sphe_9 (11,10) = -0.29776858550677551679d0 + cart_to_sphe_9 (13,10) = 1.5691988753163563388d0 + cart_to_sphe_9 (15,10) = 1.1910743420271020672d0 + cart_to_sphe_9 (24,10) = 0.64978432507844251538d0 + cart_to_sphe_9 (26,10) = -2.5991373003137700615d0 + cart_to_sphe_9 (37,10) = 0.48066206207978815025d0 + cart_to_sphe_9 (39,10) = -1.6693261563207085231d0 + cart_to_sphe_9 (41,10) = 1.9851239033785034453d0 + cart_to_sphe_9 ( 2,11) = 0.48066206207978815025d0 + cart_to_sphe_9 ( 9,11) = -1.6693261563207085231d0 + cart_to_sphe_9 (16,11) = -0.29776858550677551679d0 + cart_to_sphe_9 (18,11) = 0.64978432507844251538d0 + cart_to_sphe_9 (20,11) = 1.9851239033785034453d0 + cart_to_sphe_9 (29,11) = -0.34393377440500167929d0 + cart_to_sphe_9 (31,11) = 1.5691988753163563388d0 + cart_to_sphe_9 (33,11) = -2.5991373003137700615d0 + cart_to_sphe_9 (46,11) = 0.39636409043643194293d0 + cart_to_sphe_9 (48,11) = -1.2037682104175058775d0 + cart_to_sphe_9 (50,11) = 1.1910743420271020672d0 + cart_to_sphe_9 ( 3,12) = -0.74463846463549402274d0 + cart_to_sphe_9 ( 8,12) = 1.2930544805637086353d0 + cart_to_sphe_9 (10,12) = 0.96378590571704436469d0 + cart_to_sphe_9 (19,12) = -2.5166038696554342464d0 + cart_to_sphe_9 (30,12) = -1.2930544805637086353d0 + cart_to_sphe_9 (32,12) = 2.5166038696554342464d0 + cart_to_sphe_9 (47,12) = 0.74463846463549402274d0 + cart_to_sphe_9 (49,12) = -0.96378590571704436469d0 + cart_to_sphe_9 ( 5,13) = -1.1535889489914915606d0 + cart_to_sphe_9 (12,13) = 0.87177715295353129935d0 + cart_to_sphe_9 (14,13) = 1.7435543059070625987d0 + cart_to_sphe_9 (23,13) = 0.87177715295353129935d0 + cart_to_sphe_9 (25,13) = -2.8358912905407192076d0 + cart_to_sphe_9 (38,13) = -1.1535889489914915606d0 + cart_to_sphe_9 (40,13) = 1.7435543059070625987d0 + cart_to_sphe_9 ( 1,14) = -0.44314852502786805507d0 + cart_to_sphe_9 ( 4,14) = 0.96132412415957630049d0 + cart_to_sphe_9 ( 6,14) = 0.76905929932766104039d0 + cart_to_sphe_9 (11,14) = -0.33291539937855436029d0 + cart_to_sphe_9 (13,14) = -2.3392235702823930554d0 + cart_to_sphe_9 (22,14) = -0.83466307816035426155d0 + cart_to_sphe_9 (24,14) = 2.9059238431784376645d0 + cart_to_sphe_9 (37,14) = 0.75235513151094117345d0 + cart_to_sphe_9 (39,14) = -1.4930907048606177933d0 + cart_to_sphe_9 ( 2,15) = -0.75235513151094117345d0 + cart_to_sphe_9 ( 7,15) = 0.83466307816035426155d0 + cart_to_sphe_9 ( 9,15) = 1.4930907048606177933d0 + cart_to_sphe_9 (16,15) = 0.33291539937855436029d0 + cart_to_sphe_9 (18,15) = -2.9059238431784376645d0 + cart_to_sphe_9 (29,15) = -0.96132412415957630049d0 + cart_to_sphe_9 (31,15) = 2.3392235702823930554d0 + cart_to_sphe_9 (46,15) = 0.44314852502786805507d0 + cart_to_sphe_9 (48,15) = -0.76905929932766104039d0 + cart_to_sphe_9 ( 3,16) = 0.626706654240043952d0 + cart_to_sphe_9 ( 8,16) = -2.176535018670731151d0 + cart_to_sphe_9 (17,16) = 3.2353561313826025233d0 + cart_to_sphe_9 (30,16) = -2.176535018670731151d0 + cart_to_sphe_9 (47,16) = 0.626706654240043952d0 + cart_to_sphe_9 ( 5,17) = 1.2945196985754986958d0 + cart_to_sphe_9 (12,17) = -2.9348392204684739765d0 + cart_to_sphe_9 (23,17) = 2.9348392204684739765d0 + cart_to_sphe_9 (38,17) = -1.2945196985754986958d0 + cart_to_sphe_9 ( 1,18) = 0.60904939217552380708d0 + cart_to_sphe_9 ( 4,18) = -2.3781845426185916576d0 + cart_to_sphe_9 (11,18) = 4.1179360680974030877d0 + cart_to_sphe_9 (22,18) = -3.4414040330583097636d0 + cart_to_sphe_9 (37,18) = 1.3294455750836041652d0 + cart_to_sphe_9 ( 2,19) = 1.3294455750836041652d0 + cart_to_sphe_9 ( 7,19) = -3.4414040330583097636d0 + cart_to_sphe_9 (16,19) = 4.1179360680974030877d0 + cart_to_sphe_9 (29,19) = -2.3781845426185916576d0 + cart_to_sphe_9 (46,19) = 0.60904939217552380708d0 +END_PROVIDER + diff --git a/src/MOGuess/guess_overlap.irp.f b/src/MOGuess/guess_overlap.irp.f deleted file mode 100644 index 7d75e118..00000000 --- a/src/MOGuess/guess_overlap.irp.f +++ /dev/null @@ -1,13 +0,0 @@ -program guess_mimi - BEGIN_DOC -! Produce `H_core` MO orbital - END_DOC - implicit none - character*(64) :: label - - label = "Guess" - call mo_as_eigvectors_of_mo_matrix(ao_overlap, & - size(ao_overlap,1), & - size(ao_overlap,2),label,-1) - call save_mos -end diff --git a/src/MOGuess/truncate_mos.irp.f b/src/MOGuess/truncate_mos.irp.f deleted file mode 100644 index 29756055..00000000 --- a/src/MOGuess/truncate_mos.irp.f +++ /dev/null @@ -1,10 +0,0 @@ -program prog_truncate_mo - BEGIN_DOC -! Truncate MO set - END_DOC - implicit none - integer :: n - write(*,*) 'Number of MOs to keep' - read (*,*) n - call save_mos_truncated(n) -end diff --git a/src/MO_Basis/ao_ortho_canonical.irp.f b/src/MO_Basis/ao_ortho_canonical.irp.f index f9862abb..62a72149 100644 --- a/src/MO_Basis/ao_ortho_canonical.irp.f +++ b/src/MO_Basis/ao_ortho_canonical.irp.f @@ -8,17 +8,54 @@ END_DOC integer :: i ao_ortho_canonical_coef(:,:) = 0.d0 - do i=1,ao_num - ao_ortho_canonical_coef(i,i) = 1.d0 - enddo + if (ao_cartesian) then + do i=1,ao_num + ao_ortho_canonical_coef(i,i) = 1.d0 + enddo + else + integer, external :: ao_power_index + integer :: ibegin,j,k + ! Assume order provided by ao_power_index + i = 1 + do while (i <= ao_num) + select case ( ao_l(i) ) + case (0) + ao_ortho_canonical_coef(i,i) = 1.d0 + i += 1 + BEGIN_TEMPLATE + case ($SHELL) + if (ao_power(i,1) == $SHELL) then + do k=1,size(cart_to_sphe_$SHELL,2) + do j=1,size(cart_to_sphe_$SHELL,1) + ao_ortho_canonical_coef(i+j-1,i+k-1) = cart_to_sphe_$SHELL(j,k) + enddo + enddo + i += size(cart_to_sphe_$SHELL,1) + endif + SUBST [ SHELL ] + 1;; + 2;; + 3;; + 4;; + 5;; + 6;; + 7;; + 8;; + 9;; + END_TEMPLATE + case default + stop 'Error in sphe_to_cart' + end select + enddo + endif call ortho_canonical(ao_overlap,ao_num_align,ao_num,ao_ortho_canonical_coef,ao_num_align,ao_ortho_canonical_num) END_PROVIDER BEGIN_PROVIDER [double precision, ao_ortho_canonical_overlap, (ao_ortho_canonical_num,ao_ortho_canonical_num)] implicit none BEGIN_DOC -! overlap matrix of the ao_ortho_canonical -! supposed to be the Identity +! overlap matrix of the ao_ortho_canonical. +! Expected to be the Identity END_DOC integer :: i,j,k,l double precision :: c From 434c1d1e61862e357147bdd20c1f223bb96f2446 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 27 Jan 2016 00:50:45 +0100 Subject: [PATCH 2/2] Updated tests in Spherical AOs --- tests/bats/qp.bats | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/bats/qp.bats b/tests/bats/qp.bats index 7224466e..ab686d71 100644 --- a/tests/bats/qp.bats +++ b/tests/bats/qp.bats @@ -100,11 +100,11 @@ function run_FCI() { } @test "SCF H2O cc-pVDZ" { - run_HF h2o.ezfio -76.0273597128701 + run_HF h2o.ezfio -76.0270218692377 } @test "FCI H2O cc-pVDZ" { - run_FCI h2o.ezfio 10000 -76.241461732569 -76.2471202055693 + run_FCI h2o.ezfio 10000 -76.2382562245107 -76.2433933430971 } @test "CAS_SD H2O cc-pVDZ" { @@ -116,7 +116,7 @@ function run_FCI() { qp_set_mo_class $INPUT -core "[1]" -inact "[2,5]" -act "[3,4,6,7]" -virt "[8-25]" qp_run cas_sd_selected $INPUT energy="$(ezfio get cas_sd energy)" - eq $energy -76.2216908793757 1.E-6 + eq $energy -76.2219816183745 1.E-6 } @test "MRCC H2O cc-pVDZ" { @@ -128,7 +128,7 @@ function run_FCI() { ezfio set determinants read_wf True qp_run mrcc_cassd $INPUT energy="$(ezfio get mrcc_cassd energy)" - eq $energy -76.2299480565054 1.E-3 + eq $energy -76.2313853324571 1.E-3 } @@ -138,11 +138,11 @@ function run_FCI() { } @test "SCF H2O VDZ pseudo" { - run_HF h2o_pseudo.ezfio -16.9487841972853 + run_HF h2o_pseudo.ezfio -16.9483703904632 } @test "FCI H2O VDZ pseudo" { - run_FCI h2o_pseudo.ezfio 2000 -17.1593409053142 -17.1699581090466 + run_FCI h2o_pseudo.ezfio 2000 -17.1550015533975 -17.1645044211228 } #=== Convert