10
1
mirror of https://gitlab.com/scemama/qmcchem.git synced 2024-12-22 04:13:31 +01:00

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

View File

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

View File

@ -20,7 +20,7 @@ end = struct
type t = bool
let doc = "Correct wave function to verify electron-nucleus cusp condition"
let doc = "Compute pseudo-potentials"
let of_bool x = x
@ -94,7 +94,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_bool
@ -159,7 +160,7 @@ end = struct
type t = int
let doc = "Length (seconds) of a block"
let doc = "Time (seconds) of a block"
let of_int x =
if (x < 1) then
@ -176,7 +177,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_int
@ -242,7 +244,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_int
@ -298,7 +301,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_int
@ -356,7 +360,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_int
@ -423,7 +428,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_string
@ -472,7 +478,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_string
@ -503,7 +510,7 @@ module Ref_energy : sig
end = struct
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 =
if (x > 0.) then
@ -562,7 +569,7 @@ end = struct
type t = float
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 =
if (x >= 1.) then
@ -579,7 +586,8 @@ contribution to the norm less than t"
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_float
@ -603,6 +611,62 @@ contribution to the norm less than t"
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
type t = float
@ -617,7 +681,7 @@ module Time_step : sig
end = struct
type t = float
let doc = "Simulation time step"
let doc = "Simulation time step (au)"
let of_float x =
if (x >= 10.) then
@ -634,7 +698,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ()
|> of_float
@ -691,7 +756,8 @@ end = struct
Lazy.force Qputils.ezfio_filename
in
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 ();
|> of_string
@ -704,7 +770,7 @@ end = struct
match (Pseudo.read () |> Pseudo.to_bool, t) with
| (false, _)
| (true , None) -> ()
| _ -> failwith "Jastrow and Pseudopotentials are incompatible"
| _ -> failwith "Jastrow and Pseudopotentials are incompatible for now"
in
to_string t

View File

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

View File

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

View File

@ -47,6 +47,18 @@ BEGIN_PROVIDER [ double precision, wf_extension ]
SOFT_TOUCH wf_extension_min wf_extension_max
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) ]
implicit none

View File

@ -110,6 +110,7 @@ END_SHELL
! Update the running population weight
pop_weight_mult *= pop_weight(dmc_projection_step)
SOFT_TOUCH pop_weight_mult
BEGIN_SHELL [ /usr/bin/python ]
from properties import *
@ -264,7 +265,10 @@ END_PROVIDER
BEGIN_DOC
! Number of projection steps for SRMC
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
END_PROVIDER

View File

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