Projection time is now in input parameter

This commit is contained in:
Anthony Scemama 2016-01-12 23:57:45 +01:00
parent 76d2e4a491
commit b19cde6bf4
8 changed files with 172 additions and 83 deletions

View File

@ -31,9 +31,9 @@ electrons
nuclei nuclei
nucl_num integer nucl_num integer
nucl_label character*(32) (nuclei_nucl_num) nucl_label character*(32) (nuclei_nucl_num)
nucl_charge real (nuclei_nucl_num) nucl_charge real (nuclei_nucl_num)
nucl_coord real (nuclei_nucl_num,3) nucl_coord real (nuclei_nucl_num,3)
nucl_fitcusp_radius real (nuclei_nucl_num) nucl_fitcusp_radius real (nuclei_nucl_num)
spindeterminants spindeterminants
n_det_alpha integer n_det_alpha integer
@ -50,23 +50,22 @@ spindeterminants
simulation simulation
do_run integer do_run integer
stop_time integer stop_time integer
equilibration logical equilibration logical
title character*(128) http_server character*(128)
http_server character*(128) do_jast logical
do_jast logical do_nucl_fitcusp logical
do_nucl_fitcusp logical method character*(32)
method character*(32) block_time integer
block_time integer sampling character*(32)
sampling character*(32) save_data logical
save_data logical time_step real
time_step real print_level integer
print_level integer ci_threshold double precision
ci_threshold double precision md5_key character*(32)
md5_key character*(32) E_ref double precision
orig_time double precision dmc_projection_time real
E_ref double precision
jastrow jastrow
jast_type character*(32) jast_type character*(32)

View File

@ -1,26 +1,23 @@
open Core.Std;; open Core.Std;;
let simulation_do_nucl_fitcusp =
if (not (Ezfio.has_simulation_do_nucl_fitcusp ())) then let simulation_do_nucl_fitcusp = lazy(
begin if (not (Ezfio.has_pseudo_do_pseudo ())) then
if (not (Ezfio.has_pseudo_do_pseudo ())) then not (Ezfio.get_pseudo_do_pseudo ())
true
else
not (Ezfio.get_pseudo_do_pseudo ())
end
else else
Ezfio.get_simulation_do_nucl_fitcusp () true
)
let electrons_elec_walk_num = lazy ( 30 )
let electrons_elec_walk_num = 30 let electrons_elec_walk_num_tot = lazy ( 10000 )
let electrons_elec_walk_num_tot = 10000 let jastrow_jast_type = lazy ( "None" )
let jastrow_jast_type = "None" let simulation_block_time = lazy ( 30 )
let simulation_block_time = 30 let simulation_ci_threshold = lazy ( 1.e-8 )
let simulation_ci_threshold = 1.e-8 let simulation_method = lazy ( "VMC" )
let simulation_method = "VMC" let simulation_sampling = lazy ( "Langevin" )
let simulation_sampling = "Langevin" let simulation_stop_time = lazy ( 3600 )
let simulation_stop_time = 3600 let simulation_time_step = lazy ( 0.15 )
let simulation_time_step = 0.15 let simulation_dmc_projection_time = lazy ( 1. )
let reset_defaults () = let reset_defaults () =
List.iter ~f:(fun x -> Sys.remove ( (Lazy.force Qputils.ezfio_filename) ^ x)) List.iter ~f:(fun x -> Sys.remove ( (Lazy.force Qputils.ezfio_filename) ^ x))

View File

@ -20,7 +20,7 @@ end = struct
type t = bool type t = bool
let doc = "Correct wave function to verify electron-nucleus cusp condition" let doc = "Compute pseudo-potentials"
let of_bool x = x let of_bool x = x
@ -94,7 +94,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_simulation_do_nucl_fitcusp ())) then if (not (Ezfio.has_simulation_do_nucl_fitcusp ())) then
Ezfio.set_simulation_do_nucl_fitcusp Default.simulation_do_nucl_fitcusp; Lazy.force Default.simulation_do_nucl_fitcusp
|> Ezfio.set_simulation_do_nucl_fitcusp ;
Ezfio.get_simulation_do_nucl_fitcusp () Ezfio.get_simulation_do_nucl_fitcusp ()
|> of_bool |> of_bool
@ -159,7 +160,7 @@ end = struct
type t = int type t = int
let doc = "Length (seconds) of a block" let doc = "Time (seconds) of a block"
let of_int x = let of_int x =
if (x < 1) then if (x < 1) then
@ -176,7 +177,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_simulation_block_time ())) then if (not (Ezfio.has_simulation_block_time ())) then
Ezfio.set_simulation_block_time Default.simulation_block_time; Lazy.force Default.simulation_block_time
|> Ezfio.set_simulation_block_time ;
Ezfio.get_simulation_block_time () Ezfio.get_simulation_block_time ()
|> of_int |> of_int
@ -242,7 +244,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_electrons_elec_walk_num () )) then if (not (Ezfio.has_electrons_elec_walk_num () )) then
Ezfio.set_electrons_elec_walk_num Default.electrons_elec_walk_num; Lazy.force Default.electrons_elec_walk_num
|> Ezfio.set_electrons_elec_walk_num ;
Ezfio.get_electrons_elec_walk_num () Ezfio.get_electrons_elec_walk_num ()
|> of_int |> of_int
@ -298,7 +301,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_electrons_elec_walk_num_tot () )) then if (not (Ezfio.has_electrons_elec_walk_num_tot () )) then
Ezfio.set_electrons_elec_walk_num_tot Default.electrons_elec_walk_num_tot; Lazy.force Default.electrons_elec_walk_num_tot
|> Ezfio.set_electrons_elec_walk_num_tot ;
Ezfio.get_electrons_elec_walk_num_tot () Ezfio.get_electrons_elec_walk_num_tot ()
|> of_int |> of_int
@ -356,7 +360,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_simulation_stop_time ())) then if (not (Ezfio.has_simulation_stop_time ())) then
Ezfio.set_simulation_stop_time Default.simulation_stop_time; Lazy.force Default.simulation_stop_time
|> Ezfio.set_simulation_stop_time ;
Ezfio.get_simulation_stop_time () Ezfio.get_simulation_stop_time ()
|> of_int |> of_int
@ -423,7 +428,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_simulation_method ())) then if (not (Ezfio.has_simulation_method ())) then
Ezfio.set_simulation_method Default.simulation_method; Lazy.force Default.simulation_method
|> Ezfio.set_simulation_method ;
Ezfio.get_simulation_method () Ezfio.get_simulation_method ()
|> of_string |> of_string
@ -472,7 +478,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_simulation_sampling ())) then if (not (Ezfio.has_simulation_sampling ())) then
Ezfio.set_simulation_sampling Default.simulation_sampling; Lazy.force Default.simulation_sampling
|> Ezfio.set_simulation_sampling ;
Ezfio.get_simulation_sampling () Ezfio.get_simulation_sampling ()
|> of_string |> of_string
@ -503,7 +510,7 @@ module Ref_energy : sig
end = struct end = struct
type t = float type t = float
let doc = "Fixed reference energy to normalize DMC weights" let doc = "Fixed reference energy to normalize DMC weights (au)"
let of_float x = let of_float x =
if (x > 0.) then if (x > 0.) then
@ -562,7 +569,7 @@ end = struct
type t = float type t = float
let doc = "Truncation t of the wave function : Remove determinants with a let doc = "Truncation t of the wave function : Remove determinants with a
contribution to the norm less than t" contribution to the norm less than t (au)"
let of_float x = let of_float x =
if (x >= 1.) then if (x >= 1.) then
@ -579,7 +586,8 @@ contribution to the norm less than t"
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_simulation_ci_threshold ())) then if (not (Ezfio.has_simulation_ci_threshold ())) then
Ezfio.set_simulation_ci_threshold Default.simulation_ci_threshold ; Lazy.force Default.simulation_ci_threshold
|> Ezfio.set_simulation_ci_threshold ;
Ezfio.get_simulation_ci_threshold () Ezfio.get_simulation_ci_threshold ()
|> of_float |> of_float
@ -603,6 +611,62 @@ contribution to the norm less than t"
end end
module DMC_projection_time : sig
type t = float
val doc : string
val read : unit -> t
val write : t -> unit
val to_float : t -> float
val of_float : float -> t
val to_string : t -> string
val of_string : string -> t
end = struct
type t = float
let doc = "DMC projection time (au)"
let of_float x =
if (x >= 100.) then
failwith "DMC Projection time should be < 100.";
if (x <= 0.) then
failwith "DMC Projection time should be positive.";
x
let to_float x = x
let read () =
let _ =
Lazy.force Qputils.ezfio_filename
in
if (not (Ezfio.has_simulation_dmc_projection_time())) then
Lazy.force Default.simulation_dmc_projection_time
|> Ezfio.set_simulation_dmc_projection_time ;
Ezfio.get_simulation_dmc_projection_time ()
|> of_float
let write t =
let _ =
Lazy.force Qputils.ezfio_filename
in
to_float t
|> Ezfio.set_simulation_dmc_projection_time
let of_string x =
Float.of_string x
|> of_float
let to_string x =
to_float x
|> Float.to_string
end
module Time_step : sig module Time_step : sig
type t = float type t = float
@ -617,7 +681,7 @@ module Time_step : sig
end = struct end = struct
type t = float type t = float
let doc = "Simulation time step" let doc = "Simulation time step (au)"
let of_float x = let of_float x =
if (x >= 10.) then if (x >= 10.) then
@ -634,7 +698,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_simulation_time_step ())) then if (not (Ezfio.has_simulation_time_step ())) then
Ezfio.set_simulation_time_step Default.simulation_time_step; Lazy.force Default.simulation_time_step
|> Ezfio.set_simulation_time_step ;
Ezfio.get_simulation_time_step () Ezfio.get_simulation_time_step ()
|> of_float |> of_float
@ -691,7 +756,8 @@ end = struct
Lazy.force Qputils.ezfio_filename Lazy.force Qputils.ezfio_filename
in in
if (not (Ezfio.has_jastrow_jast_type ())) then if (not (Ezfio.has_jastrow_jast_type ())) then
Ezfio.set_jastrow_jast_type Default.jastrow_jast_type; Lazy.force Default.jastrow_jast_type
|> Ezfio.set_jastrow_jast_type ;
Ezfio.get_jastrow_jast_type (); Ezfio.get_jastrow_jast_type ();
|> of_string |> of_string
@ -704,7 +770,7 @@ end = struct
match (Pseudo.read () |> Pseudo.to_bool, t) with match (Pseudo.read () |> Pseudo.to_bool, t) with
| (false, _) | (false, _)
| (true , None) -> () | (true , None) -> ()
| _ -> failwith "Jastrow and Pseudopotentials are incompatible" | _ -> failwith "Jastrow and Pseudopotentials are incompatible for now"
in in
to_string t to_string t

View File

@ -31,6 +31,7 @@ let files_to_track = [
"ao_basis/ao_prim_num.gz" ; "ao_basis/ao_prim_num.gz" ;
"electrons/elec_alpha_num" ; "electrons/elec_alpha_num" ;
"electrons/elec_beta_num" ; "electrons/elec_beta_num" ;
"electrons/elec_walk_num" ;
"jastrow/jast_type" ; "jastrow/jast_type" ;
"mo_basis/mo_coef.gz" ; "mo_basis/mo_coef.gz" ;
"mo_basis/mo_tot_num" ; "mo_basis/mo_tot_num" ;
@ -54,6 +55,7 @@ let files_to_track = [
"simulation/jast_pen.gz" ; "simulation/jast_pen.gz" ;
"simulation/method" ; "simulation/method" ;
"simulation/time_step" ; "simulation/time_step" ;
"simulation/dmc_projection_time" ;
"spindeterminants/bit_kind" ; "spindeterminants/bit_kind" ;
"spindeterminants/n_det" ; "spindeterminants/n_det" ;
"spindeterminants/n_det_alpha" ; "spindeterminants/n_det_alpha" ;

View File

@ -26,6 +26,7 @@ type field =
| Ref_energy | Ref_energy
| CI_threshold | CI_threshold
| Time_step | Time_step
| DMC_projection_time
| Jastrow_type | Jastrow_type
| Properties | Properties
@ -65,6 +66,8 @@ let get field =
option_to_string CI_threshold.read CI_threshold.to_string CI_threshold.doc option_to_string CI_threshold.read CI_threshold.to_string CI_threshold.doc
| Time_step -> | Time_step ->
option_to_string Time_step.read Time_step.to_string Time_step.doc option_to_string Time_step.read Time_step.to_string Time_step.doc
| DMC_projection_time ->
option_to_string DMC_projection_time.read DMC_projection_time.to_string DMC_projection_time.doc
| Jastrow_type -> | Jastrow_type ->
option_to_string Jastrow_type.read Jastrow_type.to_string Jastrow_type.doc option_to_string Jastrow_type.read Jastrow_type.to_string Jastrow_type.doc
| Properties -> | Properties ->
@ -102,7 +105,7 @@ let write_input_in_ezfio ezfio_filename fields =
(** Run the edit command *) (** Run the edit command *)
let run ~c ?f ?t ?l ?m ?e ?s ?ts ?w ?wt ?n ?j ?input ezfio_filename = let run ~c ?f ?t ?l ?m ?e ?s ?ts ?w ?wt ?n ?j ?p ?input ezfio_filename =
let interactive = ref ( let interactive = ref (
if c then if c then
@ -141,22 +144,24 @@ let run ~c ?f ?t ?l ?m ?e ?s ?ts ?w ?wt ?n ?j ?input ezfio_filename =
handle_option Input.Walk_num.(of_int , write) w; handle_option Input.Walk_num.(of_int , write) w;
handle_option Input.Walk_num_tot.(of_int , write) wt; handle_option Input.Walk_num_tot.(of_int , write) wt;
handle_option Input.CI_threshold.(of_float , write) n; handle_option Input.CI_threshold.(of_float , write) n;
handle_option Input.DMC_projection_time.(of_float , write) p;
let fields = let fields =
[ [
Stop_time ; Stop_time ;
Block_time ; Block_time ;
Method ; Method ;
Ref_energy ; Sampling ;
Sampling ; Time_step ;
Time_step ; DMC_projection_time ;
Walk_num ; Ref_energy ;
Walk_num_tot ; Walk_num ;
Fitcusp ; Walk_num_tot ;
CI_threshold ; Fitcusp ;
Jastrow_type ; CI_threshold ;
Properties ; Jastrow_type ;
Properties ;
] ]
in in
@ -211,18 +216,19 @@ let run ~c ?f ?t ?l ?m ?e ?s ?ts ?w ?wt ?n ?j ?input ezfio_filename =
try try
begin begin
match f with match f with
| Stop_time -> Stop_time.(of_string s |> write) | Stop_time -> Stop_time.(of_string s |> write)
| Fitcusp -> Fitcusp.(of_string s |> write) | Fitcusp -> Fitcusp.(of_string s |> write)
| Block_time -> Block_time.(of_string s |> write) | Block_time -> Block_time.(of_string s |> write)
| Method -> Method.(of_string s |> write) | Method -> Method.(of_string s |> write)
| Ref_energy -> Ref_energy.(of_string s |> write) | Ref_energy -> Ref_energy.(of_string s |> write)
| Sampling -> Sampling.(of_string s |> write) | Sampling -> Sampling.(of_string s |> write)
| Time_step -> Time_step.(of_string s |> write) | Time_step -> Time_step.(of_string s |> write)
| Walk_num -> Walk_num.(of_string s |> write) | DMC_projection_time -> DMC_projection_time.(of_string s |> write)
| Walk_num_tot -> Walk_num_tot.(of_string s |> write) | Walk_num -> Walk_num.(of_string s |> write)
| CI_threshold -> CI_threshold.(of_string s |> write) | Walk_num_tot -> Walk_num_tot.(of_string s |> write)
| Jastrow_type -> Jastrow_type.(of_string s |> write) | CI_threshold -> CI_threshold.(of_string s |> write)
| Properties -> Properties.(of_string s |> write) | Jastrow_type -> Jastrow_type.(of_string s |> write)
| Properties -> Properties.(of_string s |> write)
end end
with with
| Failure msg -> Printf.eprintf "%s\n" msg | Failure msg -> Printf.eprintf "%s\n" msg
@ -290,6 +296,8 @@ let spec =
~doc:("norm "^Input.CI_threshold.doc) ~doc:("norm "^Input.CI_threshold.doc)
+> flag "j" (optional string) +> flag "j" (optional string)
~doc:("jastrow_type "^Input.Jastrow_type.doc) ~doc:("jastrow_type "^Input.Jastrow_type.doc)
+> flag "p" (optional float)
~doc:("projection_time "^Input.DMC_projection_time.doc)
+> anon ("ezfio_file" %: string) +> anon ("ezfio_file" %: string)
+> anon (maybe ("input" %: string)) +> anon (maybe ("input" %: string))
;; ;;
@ -302,8 +310,8 @@ let command =
Edit input data Edit input data
") ")
spec spec
(fun c f t l m e s ts w wt n j ezfio_file input () -> (fun c f t l m e s ts w wt n j p ezfio_file input () ->
run ~c ?f ?t ?l ?m ?e ?s ?ts ?w ?wt ?n ?j ?input ezfio_file ) run ~c ?f ?t ?l ?m ?e ?s ?ts ?w ?wt ?n ?j ?p ?input ezfio_file )

View File

@ -47,6 +47,18 @@ BEGIN_PROVIDER [ double precision, wf_extension ]
SOFT_TOUCH wf_extension_min wf_extension_max SOFT_TOUCH wf_extension_min wf_extension_max
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, dmc_pop_weight ]
implicit none
BEGIN_DOC
! Weight of the DMC population
END_DOC
dmc_pop_weight = pop_weight_mult
dmc_pop_weight_min = min(dmc_pop_weight,dmc_pop_weight_min)
dmc_pop_weight_max = max(dmc_pop_weight,dmc_pop_weight_max)
SOFT_TOUCH dmc_pop_weight_min dmc_pop_weight_max
END_PROVIDER
BEGIN_PROVIDER [ double precision, drift_mod, (size_drift_mod) ] BEGIN_PROVIDER [ double precision, drift_mod, (size_drift_mod) ]
implicit none implicit none

View File

@ -110,6 +110,7 @@ END_SHELL
! Update the running population weight ! Update the running population weight
pop_weight_mult *= pop_weight(dmc_projection_step) pop_weight_mult *= pop_weight(dmc_projection_step)
SOFT_TOUCH pop_weight_mult
BEGIN_SHELL [ /usr/bin/python ] BEGIN_SHELL [ /usr/bin/python ]
from properties import * from properties import *
@ -264,7 +265,10 @@ END_PROVIDER
BEGIN_DOC BEGIN_DOC
! Number of projection steps for SRMC ! Number of projection steps for SRMC
END_DOC END_DOC
dmc_projection = int( 10.d0/time_step) real :: dmc_projection_time
dmc_projection_time = 1.
call get_simulation_dmc_projection_time(dmc_projection_time)
dmc_projection = int( dmc_projection_time/time_step)
dmc_projection_step = 0 dmc_projection_step = 0
END_PROVIDER END_PROVIDER

View File

@ -36,6 +36,7 @@ data = [ \
("simulation_equilibration" , "logical" , "" ), ("simulation_equilibration" , "logical" , "" ),
("simulation_block_time" , "integer" , "" ), ("simulation_block_time" , "integer" , "" ),
("simulation_time_step" , "real" , "" ), ("simulation_time_step" , "real" , "" ),
("simulation_dmc_projection_time" , "real" , "" ),
("simulation_method" , "character*(32)", "" ), ("simulation_method" , "character*(32)", "" ),
("simulation_save_data" , "logical" , "" ), ("simulation_save_data" , "logical" , "" ),
("simulation_print_level" , "integer" , "" ), ("simulation_print_level" , "integer" , "" ),