10
1
mirror of https://gitlab.com/scemama/qmcchem.git synced 2024-11-07 06:33:38 +01:00

Zero variance almost OK

This commit is contained in:
Anthony Scemama 2018-03-06 18:20:08 +01:00
parent 267c1cf9a0
commit b0b0987274
4 changed files with 90 additions and 6 deletions

View File

@ -379,6 +379,7 @@ let run ?(daemon=true) ezfio_filename =
same host name, but different PIDs. The result is merging all the CPU cores of same host name, but different PIDs. The result is merging all the CPU cores of
the compute nodes. Happens when [max_file_size] is reached. the compute nodes. Happens when [max_file_size] is reached.
*) *)
(*
let compress_block_file filename = let compress_block_file filename =
let t0 = let t0 =
Time.now () Time.now ()
@ -389,6 +390,7 @@ let run ?(daemon=true) ezfio_filename =
send_log "status" 0 t0 "Compressed block file"; send_log "status" 0 t0 "Compressed block file";
block_channel := Out_channel.create ~append:true block_channel_filename_locked block_channel := Out_channel.create ~append:true block_channel_filename_locked
in in
*)
@ -817,7 +819,9 @@ let run ?(daemon=true) ezfio_filename =
let finalize ~t0 = let finalize ~t0 =
print_string "Finalizing..."; print_string "Finalizing...";
change_status Status.Stopped; change_status Status.Stopped;
(*
compress_block_file (); compress_block_file ();
*)
send_log "status" 0 t0 "Done"; send_log "status" 0 t0 "Done";
close_debug_socket (); close_debug_socket ();
ZMQ.Context.terminate zmq_context; ZMQ.Context.terminate zmq_context;

View File

@ -3,7 +3,19 @@ open Qptypes
(** Display a table that can be plotted by gnuplot *) (** Display a table that can be plotted by gnuplot *)
let display_table ~range property = let display_table ~range property =
let p = Property.of_string property let p =
(*---*)
if (property = "xxx") then
let open Random_variable in
(of_raw_data ~range Property.E_ref_zv)
/! (of_raw_data ~range Property.Psi_no_cusp_weight)
-! ( (of_raw_data ~range Property.E_loc_zv)
/! (of_raw_data ~range Property.Weight_zv) )
/! (of_raw_data ~range Property.Psi_no_cusp_weight2)
+@ Input.Trial_wf_energy.to_float (Input.Trial_wf_energy. read () )
else
(*---*)
Property.of_string property
|> Random_variable.of_raw_data ~range |> Random_variable.of_raw_data ~range
in in
let conv = Random_variable.convergence p let conv = Random_variable.convergence p
@ -145,14 +157,19 @@ let display_summary ~range =
in in
List.iter properties ~f:print_property ; List.iter properties ~f:print_property ;
(*---*)
let open Random_variable in let open Random_variable in
let p = (of_raw_data ~range Property.E_ref_zv) let p = (of_raw_data ~range Property.E_ref_zv)
/! (of_raw_data ~range Property.Psi_no_cusp_weight)
-! ( (of_raw_data ~range Property.E_loc_zv) -! ( (of_raw_data ~range Property.E_loc_zv)
/! (of_raw_data ~range Property.Weight_zv) ) /! (of_raw_data ~range Property.Weight_zv) )
/! (of_raw_data ~range Property.Psi_no_cusp_weight2)
+@ Input.Trial_wf_energy.to_float (Input.Trial_wf_energy. read () )
in in
Printf.printf "%20s : %s\n" Printf.printf "%20s : %s\n"
("E_loc_zv(+)") ("E_loc_zv(+)")
(Random_variable.to_string p); (Random_variable.to_string p);
(*---*)
(*--- (*---
let open Random_variable in let open Random_variable in

View File

@ -452,6 +452,40 @@ let merge_per_compute_node_and_block_id =
(Compute_node.to_string block.Block.compute_node) (Compute_node.to_string block.Block.compute_node)
(Block_id.to_int block.Block.block_id) ) (Block_id.to_int block.Block.block_id) )
let error_x_over_y = function
| [] -> (Average.of_float 0., None)
| (x,_)::[] -> (Average.of_float x, None)
| (x,w)::tail ->
begin
let avcu0 = ref 0.
and ansum = ref w
and avsum = ref x
and avbl = ref (x /. w)
and avsq = ref 0.
and n = ref 1.
in
let avcu = ref !avbl
in
List.iter tail ~f:(fun (x,w) ->
avcu0 := !avsum /. !ansum;
ansum := !ansum +. w;
avsum := !avsum +. x;
avbl := x /. w ;
if (!ansum <> 0.) then
avcu := !avsum /. !ansum
else ();
avsq := !avsq +. (1. -. w /. !ansum) *. (!avbl -. !avcu0) *. (!avbl -. !avcu0) *. w;
n := !n +. 1.
);
let arg =
Float.abs (!avsq /.(!ansum *. (!n -. 1.)))
in
let error =
sqrt arg
in
(Average.of_float !avcu, Some (Error.of_float error) )
end
(** Create float, variable operators *) (** Create float, variable operators *)
let one_variable_operator ~update_value p f = let one_variable_operator ~update_value p f =

View File

@ -272,13 +272,42 @@ BEGIN_PROVIDER [ double precision, E_loc ]
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, psi_no_cusp_weight ]
psi_no_cusp_weight = 1.d0
END_PROVIDER
BEGIN_PROVIDER [ double precision, psi_no_cusp_weight2 ]
psi_no_cusp_weight2 = 1.d0
END_PROVIDER
BEGIN_PROVIDER [ double precision, E_loc_nocusp ]
implicit none
BEGIN_DOC
! Local energy without fitcusp
END_DOC
double precision :: psi_cusp_inv
if (do_nucl_fitcusp) then
psi_cusp_inv = psi_value_inv
do_nucl_fitcusp = .False.
TOUCH do_nucl_fitcusp
psi_no_cusp_weight = psi_value * psi_cusp_inv
psi_no_cusp_weight2 = psi_no_cusp_weight * psi_no_cusp_weight
E_loc_nocusp = psi_no_cusp_weight * E_loc
do_nucl_fitcusp = .True.
TOUCH do_nucl_fitcusp
else
E_loc_nocusp = E_loc
psi_no_cusp_weight = 1.d0
endif
END_PROVIDER
BEGIN_PROVIDER [ double precision, E_ref_zv ] BEGIN_PROVIDER [ double precision, E_ref_zv ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! E_loc - E_trial ! E_loc - E_trial
END_DOC END_DOC
E_ref_zv = E_loc + E_trial E_ref_zv = E_loc_nocusp
E_ref_zv_min = min(E_ref_zv,E_ref_zv_min) E_ref_zv_min = min(E_ref_zv,E_ref_zv_min)
E_ref_zv_max = max(E_ref_zv,E_ref_zv_max) E_ref_zv_max = max(E_ref_zv,E_ref_zv_max)
@ -291,7 +320,7 @@ BEGIN_PROVIDER [ double precision, E_loc_zv ]
BEGIN_DOC BEGIN_DOC
! Estimate of the VMC energy in PDMC ! Estimate of the VMC energy in PDMC
END_DOC END_DOC
E_loc_zv = E_loc * dmc_zv_weight E_loc_zv = E_loc_nocusp * psi_no_cusp_weight * dmc_zv_weight
E_loc_zv_min = min(E_loc_zv,E_loc_zv_min) E_loc_zv_min = min(E_loc_zv,E_loc_zv_min)
E_loc_zv_max = max(E_loc_zv,E_loc_zv_max) E_loc_zv_max = max(E_loc_zv,E_loc_zv_max)