mirror of
https://github.com/LCPQ/quantum_package
synced 2024-12-22 12:23:48 +01:00
Truncate wave function with -ndet flag of qp_edit
This commit is contained in:
parent
4715857b07
commit
51cff0d890
@ -7,6 +7,7 @@ module Determinants_by_hand : sig
|
||||
{ n_int : N_int_number.t;
|
||||
bit_kind : Bit_kind.t;
|
||||
n_det : Det_number.t;
|
||||
n_states : States_number.t;
|
||||
expected_s2 : Positive_float.t;
|
||||
psi_coef : Det_coef.t array;
|
||||
psi_det : Determinant.t array;
|
||||
@ -18,11 +19,13 @@ module Determinants_by_hand : sig
|
||||
val to_rst : t -> Rst_string.t
|
||||
val of_rst : Rst_string.t -> t option
|
||||
val read_n_int : unit -> N_int_number.t
|
||||
val update_ndet : Det_number.t -> unit
|
||||
end = struct
|
||||
type t =
|
||||
{ n_int : N_int_number.t;
|
||||
bit_kind : Bit_kind.t;
|
||||
n_det : Det_number.t;
|
||||
n_states : States_number.t;
|
||||
expected_s2 : Positive_float.t;
|
||||
psi_coef : Det_coef.t array;
|
||||
psi_det : Determinant.t array;
|
||||
@ -200,6 +203,7 @@ end = struct
|
||||
expected_s2 = read_expected_s2 () ;
|
||||
psi_coef = read_psi_coef () ;
|
||||
psi_det = read_psi_det () ;
|
||||
n_states = read_n_states () ;
|
||||
}
|
||||
else
|
||||
failwith "No molecular orbitals, so no determinants"
|
||||
@ -222,10 +226,12 @@ end = struct
|
||||
expected_s2 ;
|
||||
psi_coef ;
|
||||
psi_det ;
|
||||
n_states ;
|
||||
} =
|
||||
write_n_int n_int ;
|
||||
write_bit_kind bit_kind;
|
||||
write_n_det n_det;
|
||||
write_n_states n_states;
|
||||
write_expected_s2 expected_s2;
|
||||
write_psi_coef ~n_det:n_det psi_coef ;
|
||||
write_psi_det ~n_int:n_int ~n_det:n_det psi_det;
|
||||
@ -298,6 +304,7 @@ Determinants ::
|
||||
n_int = %s
|
||||
bit_kind = %s
|
||||
n_det = %s
|
||||
n_states = %s
|
||||
expected_s2 = %s
|
||||
psi_coef = %s
|
||||
psi_det = %s
|
||||
@ -305,6 +312,7 @@ psi_det = %s
|
||||
(b.n_int |> N_int_number.to_string)
|
||||
(b.bit_kind |> Bit_kind.to_string)
|
||||
(b.n_det |> Det_number.to_string)
|
||||
(b.n_states |> States_number.to_string)
|
||||
(b.expected_s2 |> Positive_float.to_string)
|
||||
(b.psi_coef |> Array.to_list |> List.map ~f:Det_coef.to_string
|
||||
|> String.concat ~sep:", ")
|
||||
@ -433,14 +441,52 @@ psi_det = %s
|
||||
|> Bit_kind.to_int)
|
||||
and n_int =
|
||||
Printf.sprintf "(n_int %d)" (N_int_number.get_max ())
|
||||
and n_states =
|
||||
Printf.sprintf "(n_states %d)" (States_number.to_int @@ read_n_states ())
|
||||
in
|
||||
let s =
|
||||
String.concat [ header ; bitkind ; n_int ; psi_coef ; psi_det]
|
||||
String.concat [ header ; bitkind ; n_int ; n_states ; psi_coef ; psi_det]
|
||||
in
|
||||
|
||||
|
||||
|
||||
|
||||
Generic_input_of_rst.evaluate_sexp t_of_sexp s
|
||||
;;
|
||||
|
||||
let update_ndet n_det_new =
|
||||
let n_det_new =
|
||||
Det_number.to_int n_det_new
|
||||
in
|
||||
let det =
|
||||
read ()
|
||||
in
|
||||
let n_det_old, n_states =
|
||||
Det_number.to_int det.n_det,
|
||||
States_number.to_int det.n_states
|
||||
in
|
||||
if n_det_new = n_det_old then
|
||||
()
|
||||
;
|
||||
if n_det_new > n_det_new then
|
||||
failwith @@ Printf.sprintf "Requested n_det should be less than %d" n_det_old
|
||||
;
|
||||
for j=0 to (n_states-1) do
|
||||
let ishift_old, ishift_new =
|
||||
j*n_det_old,
|
||||
j*n_det_new
|
||||
in
|
||||
for i=0 to (n_det_new-1) do
|
||||
det.psi_coef.(i+ishift_new) <- det.psi_coef.(i+ishift_old)
|
||||
done
|
||||
done
|
||||
;
|
||||
let new_det =
|
||||
{ det with n_det = (Det_number.of_int n_det_new) }
|
||||
in
|
||||
write new_det
|
||||
;;
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
convert output of gamess/GAU$$IAN to ezfio
|
||||
|
||||
Usage:
|
||||
qp_convert_output_to_ezfio.py <file.out> [--ezfio=<ezfio_directory>]
|
||||
qp_convert_output_to_ezfio.py <file.out> [-o <ezfio_directory>]
|
||||
|
||||
Option:
|
||||
file.out is the file to check (like gamess.out)
|
||||
@ -431,8 +431,8 @@ if __name__ == '__main__':
|
||||
|
||||
file_ = get_full_path(arguments['<file.out>'])
|
||||
|
||||
if arguments["--ezfio"]:
|
||||
ezfio_file = get_full_path(arguments["--ezfio"])
|
||||
if arguments["-o"]:
|
||||
ezfio_file = get_full_path(arguments["<ezfio_directory>"])
|
||||
else:
|
||||
ezfio_file = "{0}.ezfio".format(file_)
|
||||
|
||||
|
@ -1,6 +1,10 @@
|
||||
open Qputils;;
|
||||
open Qptypes;;
|
||||
open Core.Std;;
|
||||
(*
|
||||
vim::syntax=ocaml
|
||||
*)
|
||||
|
||||
open Qputils
|
||||
open Qptypes
|
||||
open Core.Std
|
||||
|
||||
(** Interactive editing of the input.
|
||||
|
||||
@ -18,7 +22,7 @@ type keyword =
|
||||
| Mo_basis
|
||||
| Nuclei
|
||||
{keywords}
|
||||
;;
|
||||
|
||||
|
||||
|
||||
let keyword_to_string = function
|
||||
@ -28,7 +32,7 @@ let keyword_to_string = function
|
||||
| Mo_basis -> "MO basis"
|
||||
| Nuclei -> "Molecule"
|
||||
{keywords_to_string}
|
||||
;;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -42,7 +46,7 @@ let file_header filename =
|
||||
Editing file `%s`
|
||||
|
||||
" filename
|
||||
;;
|
||||
|
||||
|
||||
|
||||
(** Creates the header of a section *)
|
||||
@ -50,7 +54,7 @@ let make_header kw =
|
||||
let s = keyword_to_string kw in
|
||||
let l = String.length s in
|
||||
"\n\n"^s^"\n"^(String.init l ~f:(fun _ -> '='))^"\n\n"
|
||||
;;
|
||||
|
||||
|
||||
|
||||
(** Returns the rst string of section [s] *)
|
||||
@ -82,7 +86,7 @@ let get s =
|
||||
| Sys_error msg -> (Printf.eprintf "Info: %s\n%!" msg ; "")
|
||||
in
|
||||
rst
|
||||
;;
|
||||
|
||||
|
||||
|
||||
(** Applies the changes from the string [str] corresponding to section [s] *)
|
||||
@ -121,7 +125,7 @@ let set str s =
|
||||
| Ao_basis -> () (* TODO *)
|
||||
| Mo_basis -> () (* TODO *)
|
||||
end
|
||||
;;
|
||||
|
||||
|
||||
|
||||
(** Creates the temporary file for interactive editing *)
|
||||
@ -135,11 +139,19 @@ let create_temp_file ezfio_filename fields =
|
||||
)
|
||||
end
|
||||
; temp_filename
|
||||
;;
|
||||
|
||||
|
||||
|
||||
|
||||
let run check_only ezfio_filename =
|
||||
|
||||
let run check_only ?ndet ezfio_filename =
|
||||
|
||||
(* Set check_only if the arguments are not empty *)
|
||||
let check_only =
|
||||
match ndet with
|
||||
| None -> check_only
|
||||
| Some _ -> true
|
||||
in
|
||||
|
||||
(* Open EZFIO *)
|
||||
if (not (Sys.file_exists_exn ezfio_filename)) then
|
||||
@ -147,6 +159,13 @@ let run check_only ezfio_filename =
|
||||
|
||||
Ezfio.set_file ezfio_filename;
|
||||
|
||||
begin
|
||||
match ndet with
|
||||
| None -> ()
|
||||
| Some n -> Input.Determinants_by_hand.update_ndet (Det_number.of_int n)
|
||||
end;
|
||||
|
||||
|
||||
(*
|
||||
let output = (file_header ezfio_filename) :: (
|
||||
List.map ~f:get [
|
||||
@ -196,7 +215,7 @@ let run check_only ezfio_filename =
|
||||
|
||||
(* Remove temp_file *)
|
||||
Sys.remove temp_filename
|
||||
;;
|
||||
|
||||
|
||||
|
||||
(** Create a backup file in case of an exception *)
|
||||
@ -207,7 +226,7 @@ let create_backup ezfio_filename =
|
||||
"
|
||||
ezfio_filename ezfio_filename ezfio_filename
|
||||
|> Sys.command_exn
|
||||
;;
|
||||
|
||||
|
||||
|
||||
(** Restore the backup file when an exception occuprs *)
|
||||
@ -215,7 +234,7 @@ let restore_backup ezfio_filename =
|
||||
Printf.sprintf "tar -zxf %s/backup.tgz"
|
||||
ezfio_filename
|
||||
|> Sys.command_exn
|
||||
;;
|
||||
|
||||
|
||||
|
||||
let spec =
|
||||
@ -223,12 +242,10 @@ let spec =
|
||||
empty
|
||||
+> flag "-c" no_arg
|
||||
~doc:"Checks the input data"
|
||||
(*
|
||||
+> flag "o" (optional string)
|
||||
~doc:"Prints output data"
|
||||
*)
|
||||
+> flag "ndet" (optional int)
|
||||
~doc:"int Truncate the wavefunction to the target number of determinants"
|
||||
+> anon ("ezfio_file" %: string)
|
||||
;;
|
||||
|
||||
|
||||
let command =
|
||||
Command.basic
|
||||
@ -245,9 +262,9 @@ Edit input data
|
||||
with
|
||||
| _ msg -> print_string ("\n\nError\n\n"^msg^"\n\n")
|
||||
*)
|
||||
(fun c ezfio_file () ->
|
||||
(fun c ndet ezfio_file () ->
|
||||
try
|
||||
run c ezfio_file ;
|
||||
run c ?ndet ezfio_file ;
|
||||
(* create_backup ezfio_file; *)
|
||||
with
|
||||
| Failure exc
|
||||
@ -268,12 +285,12 @@ Edit input data
|
||||
raise e
|
||||
end
|
||||
)
|
||||
;;
|
||||
|
||||
|
||||
let () =
|
||||
Command.run command;
|
||||
exit 0
|
||||
;;
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user