diff --git a/CI/F12CI.ml b/CI/F12CI.ml index 76c8070..d7dfa52 100644 --- a/CI/F12CI.ml +++ b/CI/F12CI.ml @@ -68,7 +68,7 @@ let make ~simulation ?(threshold=1.e-12) ~frozen_core ~mo_basis ~aux_basis_filen let ci = CI.make ~n_states:state det_space in let hf12_integrals = - HF12.make ~simulation ~mo_basis ~aux_basis_filename () + HF12.make ~frozen_core ~simulation ~mo_basis ~aux_basis_filename () in let ci_coef, ci_energy = @@ -174,14 +174,6 @@ Format.printf "%a@." Matrix.pp_matrix @@ Matrix.dense_of_mat psi; Printf.printf "F12 Convergence : %e %f\n" conv (eigenvalues.{state} +. Simulation.nuclear_repulsion simulation); -(* - let cabs_singles = - let f = - Fock.make_rhf ~density ~ao_basis:large_ao_basis - in - in -*) - if conv > threshold then iteration ~state eigenvectors else diff --git a/MOBasis/HF12.ml b/MOBasis/HF12.ml index 829d7f9..8df6c49 100644 --- a/MOBasis/HF12.ml +++ b/MOBasis/HF12.ml @@ -56,7 +56,6 @@ let array_4_init d1 d2 d3 d4 fx = let x = Bigarray.(Array2.create Float64 fortran_layout d1 d2) in - Printf.printf "Array 4: %d %d %d\n%!" Parallel.rank k l; for j=1 to d2 do for i=1 to d1 do x.{i,j} <- fx i j k l @@ -75,7 +74,6 @@ let array_4_init d1 d2 d3 d4 fx = |> Stream.of_list |> Farm.run ~f ~ordered:false |> Stream.iter (fun (k,l,x) -> - Printf.printf "Array 4: %d %d %d\n%!" Parallel.rank k l; for j=1 to d2 do for i=1 to d1 do result.{i,j,k,l} <- x.{i,j} @@ -122,7 +120,6 @@ let array_5_init d1 d2 d3 d4 d5 fx = let x = Bigarray.(Array3.create Float64 fortran_layout d1 d2 d3) in - Printf.printf "Array 5: %d %d %d\n%!" Parallel.rank l m; for k=1 to d3 do for j=1 to d2 do for i=1 to d1 do @@ -143,7 +140,6 @@ let array_5_init d1 d2 d3 d4 d5 fx = |> Stream.of_list |> Farm.run ~f ~ordered:false |> Stream.iter (fun (l,m,x) -> - Printf.printf "Array 5: %d %d\n%!" l m; for k=1 to d3 do for j=1 to d2 do for i=1 to d1 do @@ -193,7 +189,7 @@ let array_5_init d1 d2 d3 d4 d5 fx = end -let make ~simulation ~mo_basis ~aux_basis_filename () = +let make ~frozen_core ~simulation ~mo_basis ~aux_basis_filename () = let f12 = Util.of_some @@ Simulation.f12 simulation in let mo_num = MOBasis.size mo_basis in @@ -231,18 +227,26 @@ let make ~simulation ~mo_basis ~aux_basis_filename () = Util.list_range (mo_num+1) aux_num in + let n_core = + if frozen_core then + (Nuclei.small_core @@ Simulation.nuclei @@ MOBasis.simulation mo_basis) / 2 + else 0 + in + let mos_in = - Util.list_range 1 mo_num + Util.list_range (n_core+1) mo_num in let mos_a k = Determinant.alfa k |> Spindeterminant.to_list + |> List.filter (fun i -> i > n_core) in let mos_b k = Determinant.beta k |> Spindeterminant.to_list + |> List.filter (fun i -> i > n_core) in let h_one = diff --git a/Parallel_mpi/Parallel.ml b/Parallel_mpi/Parallel.ml index 21ed192..5fff1dd 100644 --- a/Parallel_mpi/Parallel.ml +++ b/Parallel_mpi/Parallel.ml @@ -59,17 +59,18 @@ module Node = struct let name = Unix.gethostname () + let world_rank = rank + let comm = let _, color = - Mpi.allgather (name, rank) Mpi.comm_world + Mpi.allgather (name, world_rank) Mpi.comm_world |> Array.to_list |> List.sort compare |> List.find (fun (n, r) -> n = name) in - Mpi.(comm_split comm_world color 0) + Mpi.(comm_split comm_world color world_rank) let rank = - Printf.printf "Node: %d %d\n%!" rank (Mpi.comm_rank comm); Mpi.comm_rank comm let master = rank = 0 @@ -87,12 +88,15 @@ module Node = struct let barrier () = Mpi.barrier comm - + let _ = barrier () + end module InterNode = struct + let world_rank = rank + let comm = let ranks = @@ -105,7 +109,7 @@ module InterNode = struct | (new_name, r) :: rest -> aux accu new_name rest in - Mpi.allgather (name, rank) Mpi.comm_world + Mpi.allgather (name, world_rank) Mpi.comm_world |> Array.to_list |> List.sort compare |> aux [] "" @@ -120,22 +124,17 @@ module InterNode = struct in let result = - let g = - Mpi.comm_create Mpi.comm_world new_group - in - try - ignore @@ List.find (fun x -> x = rank) @@ Array.to_list ranks; - Some g - with Not_found -> None + Some (Mpi.comm_create Mpi.comm_world new_group) in - result + try + ignore @@ List.find (fun x -> x = world_rank) @@ Array.to_list ranks; + result + with Not_found -> None let rank = match comm with - | Some comm -> - Printf.printf "InterNode: %d %d\n%!" rank (Mpi.comm_rank comm); - Mpi.comm_rank comm + | Some c-> Mpi.comm_rank c | None -> -1 let master = rank = 0 @@ -161,8 +160,9 @@ module InterNode = struct | Some comm -> Mpi.barrier comm | None -> () -end + let _ = barrier () +end module Vec = struct diff --git a/run_fci_f12.ml b/run_fci_f12.ml index a99b1b0..c1521a3 100644 --- a/run_fci_f12.ml +++ b/run_fci_f12.ml @@ -96,8 +96,9 @@ let () = Simulation.of_filenames ~f12 ~charge ~multiplicity ~nuclei:nuclei_file basis_file in - let hf = HartreeFock.make simulation in - Format.fprintf ppf "@[%a@]@." HartreeFock.pp hf; + let hf = HartreeFock.make ~guess:`Huckel simulation in + if Parallel.master then + Format.fprintf ppf "@[%a@]@." HartreeFock.pp hf; let mo_basis = MOBasis.of_hartree_fock hf @@ -112,14 +113,16 @@ let () = in let ci = F12CI.ci fcif12 in - Format.fprintf ppf "FCI energy : "; + if Parallel.master then + Format.fprintf ppf "FCI energy : "; Vec.iteri (fun i x -> if i <= state then Format.fprintf ppf "%20.16f@; " (x +. Simulation.nuclear_repulsion simulation) ) (CI.eigenvalues ci); Format.fprintf ppf "@."; let _, e_cif12 = F12CI.eigensystem fcif12 in - Format.fprintf ppf "FCI-F12 energy : "; + if Parallel.master then + Format.fprintf ppf "FCI-F12 energy : "; Vec.iteri (fun i x -> if i <= state then Format.fprintf ppf "%20.16f@; " (x +. Simulation.nuclear_repulsion simulation) ) e_cif12;