mirror of
https://gitlab.com/scemama/QCaml.git
synced 2024-12-22 12:23:31 +01:00
Parallel debugging
This commit is contained in:
parent
8f496ddb44
commit
774d977d99
10
CI/F12CI.ml
10
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
|
||||
|
@ -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 =
|
||||
|
@ -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
|
||||
Some (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
|
||||
in
|
||||
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
|
||||
|
||||
|
@ -96,7 +96,8 @@ let () =
|
||||
Simulation.of_filenames ~f12 ~charge ~multiplicity ~nuclei:nuclei_file basis_file
|
||||
in
|
||||
|
||||
let hf = HartreeFock.make simulation in
|
||||
let hf = HartreeFock.make ~guess:`Huckel simulation in
|
||||
if Parallel.master then
|
||||
Format.fprintf ppf "@[%a@]@." HartreeFock.pp hf;
|
||||
|
||||
let mo_basis =
|
||||
@ -112,6 +113,7 @@ let () =
|
||||
in
|
||||
|
||||
let ci = F12CI.ci fcif12 in
|
||||
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) )
|
||||
@ -119,6 +121,7 @@ let () =
|
||||
Format.fprintf ppf "@.";
|
||||
|
||||
let _, e_cif12 = F12CI.eigensystem fcif12 in
|
||||
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) )
|
||||
|
Loading…
Reference in New Issue
Block a user