mirror of
https://github.com/LCPQ/quantum_package
synced 2024-11-03 20:54:00 +01:00
Added tool to compute the overlap between wf
This commit is contained in:
parent
605e8743f9
commit
8ca37e49cf
67
ocaml/qp_overlap_of_wf.ml
Normal file
67
ocaml/qp_overlap_of_wf.ml
Normal file
@ -0,0 +1,67 @@
|
||||
open Input_determinants_by_hand
|
||||
open Qptypes
|
||||
|
||||
let () =
|
||||
let ezfio, ezfio' =
|
||||
try
|
||||
Sys.argv.(1), Sys.argv.(2)
|
||||
with Invalid_argument _ ->
|
||||
raise (Invalid_argument (Printf.sprintf
|
||||
"Syntax : %s EZFIO1 EZFIO2" Sys.argv.(0)))
|
||||
in
|
||||
|
||||
let fetch_wf filename =
|
||||
Ezfio.set_file filename;
|
||||
let mo_tot_num =
|
||||
Ezfio.get_mo_basis_mo_tot_num ()
|
||||
|> MO_number.of_int
|
||||
in
|
||||
let d =
|
||||
Determinants_by_hand.read ()
|
||||
in
|
||||
let n_det =
|
||||
Det_number.to_int d.Determinants_by_hand.n_det
|
||||
in
|
||||
let keys =
|
||||
Array.map (Determinant.to_string ~mo_tot_num)
|
||||
d.Determinants_by_hand.psi_det
|
||||
and values =
|
||||
Array.map Det_coef.to_float
|
||||
d.Determinants_by_hand.psi_coef
|
||||
in
|
||||
let hash =
|
||||
Hashtbl.create n_det
|
||||
in
|
||||
for i=0 to n_det-1
|
||||
do
|
||||
Hashtbl.add hash keys.(i) values.(i);
|
||||
done;
|
||||
hash
|
||||
in
|
||||
|
||||
let overlap wf wf' =
|
||||
let result, norm, norm' =
|
||||
Hashtbl.fold (fun k c (accu,norm,norm') ->
|
||||
let c' =
|
||||
try Hashtbl.find wf' k
|
||||
with Not_found -> 0.
|
||||
in
|
||||
(accu +. c *. c' ,
|
||||
norm +. c *. c ,
|
||||
norm'+. c'*. c' )
|
||||
) wf (0.,0.,0.)
|
||||
in
|
||||
Printf.printf "%f %f %f\n" result norm norm';
|
||||
result /. (norm *. norm')
|
||||
in
|
||||
|
||||
let wf, wf' =
|
||||
fetch_wf ezfio,
|
||||
fetch_wf ezfio'
|
||||
in
|
||||
|
||||
let o =
|
||||
overlap wf wf'
|
||||
in
|
||||
Printf.printf "Overlap : %f\n" o
|
||||
|
Loading…
Reference in New Issue
Block a user