mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-11-19 12:32:30 +01:00
243 lines
7.2 KiB
OCaml
243 lines
7.2 KiB
OCaml
(* =~=~ *)
|
|
(* Init *)
|
|
(* =~=~ *)
|
|
|
|
open Qptypes;;
|
|
open Qputils;;
|
|
open Sexplib.Std;;
|
|
|
|
module Cipsi_deb : sig
|
|
(* Generate type *)
|
|
type t =
|
|
{
|
|
pert_2rdm : bool;
|
|
save_wf_after_selection : bool;
|
|
seniority_max : int;
|
|
excitation_ref : int;
|
|
excitation_max : int;
|
|
excitation_alpha_max : int;
|
|
excitation_beta_max : int;
|
|
} [@@deriving sexp]
|
|
;;
|
|
val read : unit -> t option
|
|
val write : t-> unit
|
|
val to_string : t -> string
|
|
val to_rst : t -> Rst_string.t
|
|
val of_rst : Rst_string.t -> t option
|
|
end = struct
|
|
(* Generate type *)
|
|
type t =
|
|
{
|
|
pert_2rdm : bool;
|
|
save_wf_after_selection : bool;
|
|
seniority_max : int;
|
|
excitation_ref : int;
|
|
excitation_max : int;
|
|
excitation_alpha_max : int;
|
|
excitation_beta_max : int;
|
|
} [@@deriving sexp]
|
|
;;
|
|
|
|
let get_default = Qpackage.get_ezfio_default "cipsi_deb";;
|
|
|
|
(* =~=~=~=~=~=~==~=~=~=~=~=~ *)
|
|
(* Generate Special Function *)
|
|
(* =~=~=~==~=~~=~=~=~=~=~=~=~ *)
|
|
|
|
(* Read snippet for excitation_alpha_max *)
|
|
let read_excitation_alpha_max () =
|
|
if not (Ezfio.has_cipsi_deb_excitation_alpha_max ()) then
|
|
get_default "excitation_alpha_max"
|
|
|> int_of_string
|
|
|> Ezfio.set_cipsi_deb_excitation_alpha_max
|
|
;
|
|
Ezfio.get_cipsi_deb_excitation_alpha_max ()
|
|
;;
|
|
(* Write snippet for excitation_alpha_max *)
|
|
let write_excitation_alpha_max =
|
|
Ezfio.set_cipsi_deb_excitation_alpha_max
|
|
;;
|
|
|
|
(* Read snippet for excitation_beta_max *)
|
|
let read_excitation_beta_max () =
|
|
if not (Ezfio.has_cipsi_deb_excitation_beta_max ()) then
|
|
get_default "excitation_beta_max"
|
|
|> int_of_string
|
|
|> Ezfio.set_cipsi_deb_excitation_beta_max
|
|
;
|
|
Ezfio.get_cipsi_deb_excitation_beta_max ()
|
|
;;
|
|
(* Write snippet for excitation_beta_max *)
|
|
let write_excitation_beta_max =
|
|
Ezfio.set_cipsi_deb_excitation_beta_max
|
|
;;
|
|
|
|
(* Read snippet for excitation_max *)
|
|
let read_excitation_max () =
|
|
if not (Ezfio.has_cipsi_deb_excitation_max ()) then
|
|
get_default "excitation_max"
|
|
|> int_of_string
|
|
|> Ezfio.set_cipsi_deb_excitation_max
|
|
;
|
|
Ezfio.get_cipsi_deb_excitation_max ()
|
|
;;
|
|
(* Write snippet for excitation_max *)
|
|
let write_excitation_max =
|
|
Ezfio.set_cipsi_deb_excitation_max
|
|
;;
|
|
|
|
(* Read snippet for excitation_ref *)
|
|
let read_excitation_ref () =
|
|
if not (Ezfio.has_cipsi_deb_excitation_ref ()) then
|
|
get_default "excitation_ref"
|
|
|> int_of_string
|
|
|> Ezfio.set_cipsi_deb_excitation_ref
|
|
;
|
|
Ezfio.get_cipsi_deb_excitation_ref ()
|
|
;;
|
|
(* Write snippet for excitation_ref *)
|
|
let write_excitation_ref =
|
|
Ezfio.set_cipsi_deb_excitation_ref
|
|
;;
|
|
|
|
(* Read snippet for pert_2rdm *)
|
|
let read_pert_2rdm () =
|
|
if not (Ezfio.has_cipsi_deb_pert_2rdm ()) then
|
|
get_default "pert_2rdm"
|
|
|> bool_of_string
|
|
|> Ezfio.set_cipsi_deb_pert_2rdm
|
|
;
|
|
Ezfio.get_cipsi_deb_pert_2rdm ()
|
|
;;
|
|
(* Write snippet for pert_2rdm *)
|
|
let write_pert_2rdm =
|
|
Ezfio.set_cipsi_deb_pert_2rdm
|
|
;;
|
|
|
|
(* Read snippet for save_wf_after_selection *)
|
|
let read_save_wf_after_selection () =
|
|
if not (Ezfio.has_cipsi_deb_save_wf_after_selection ()) then
|
|
get_default "save_wf_after_selection"
|
|
|> bool_of_string
|
|
|> Ezfio.set_cipsi_deb_save_wf_after_selection
|
|
;
|
|
Ezfio.get_cipsi_deb_save_wf_after_selection ()
|
|
;;
|
|
(* Write snippet for save_wf_after_selection *)
|
|
let write_save_wf_after_selection =
|
|
Ezfio.set_cipsi_deb_save_wf_after_selection
|
|
;;
|
|
|
|
(* Read snippet for seniority_max *)
|
|
let read_seniority_max () =
|
|
if not (Ezfio.has_cipsi_deb_seniority_max ()) then
|
|
get_default "seniority_max"
|
|
|> int_of_string
|
|
|> Ezfio.set_cipsi_deb_seniority_max
|
|
;
|
|
Ezfio.get_cipsi_deb_seniority_max ()
|
|
;;
|
|
(* Write snippet for seniority_max *)
|
|
let write_seniority_max =
|
|
Ezfio.set_cipsi_deb_seniority_max
|
|
;;
|
|
|
|
(* =~=~=~=~=~=~=~=~=~=~=~=~ *)
|
|
(* Generate Global Function *)
|
|
(* =~=~=~=~=~=~=~=~=~=~=~=~ *)
|
|
|
|
(* Read all *)
|
|
let read() =
|
|
Some
|
|
{
|
|
pert_2rdm = read_pert_2rdm ();
|
|
save_wf_after_selection = read_save_wf_after_selection ();
|
|
seniority_max = read_seniority_max ();
|
|
excitation_ref = read_excitation_ref ();
|
|
excitation_max = read_excitation_max ();
|
|
excitation_alpha_max = read_excitation_alpha_max ();
|
|
excitation_beta_max = read_excitation_beta_max ();
|
|
}
|
|
;;
|
|
(* Write all *)
|
|
let write{
|
|
pert_2rdm;
|
|
save_wf_after_selection;
|
|
seniority_max;
|
|
excitation_ref;
|
|
excitation_max;
|
|
excitation_alpha_max;
|
|
excitation_beta_max;
|
|
} =
|
|
write_pert_2rdm pert_2rdm;
|
|
write_save_wf_after_selection save_wf_after_selection;
|
|
write_seniority_max seniority_max;
|
|
write_excitation_ref excitation_ref;
|
|
write_excitation_max excitation_max;
|
|
write_excitation_alpha_max excitation_alpha_max;
|
|
write_excitation_beta_max excitation_beta_max;
|
|
;;
|
|
(* to_string*)
|
|
let to_string b =
|
|
Printf.sprintf "
|
|
pert_2rdm = %s
|
|
save_wf_after_selection = %s
|
|
seniority_max = %s
|
|
excitation_ref = %s
|
|
excitation_max = %s
|
|
excitation_alpha_max = %s
|
|
excitation_beta_max = %s
|
|
"
|
|
(string_of_bool b.pert_2rdm)
|
|
(string_of_bool b.save_wf_after_selection)
|
|
(string_of_int b.seniority_max)
|
|
(string_of_int b.excitation_ref)
|
|
(string_of_int b.excitation_max)
|
|
(string_of_int b.excitation_alpha_max)
|
|
(string_of_int b.excitation_beta_max)
|
|
;;
|
|
(* to_rst*)
|
|
let to_rst b =
|
|
Printf.sprintf "
|
|
If true, computes the one- and two-body rdms with perturbation theory ::
|
|
|
|
pert_2rdm = %s
|
|
|
|
If true, saves the wave function after the selection, before the diagonalization ::
|
|
|
|
save_wf_after_selection = %s
|
|
|
|
Maximum number of allowed open shells. Using -1 selects all determinants ::
|
|
|
|
seniority_max = %s
|
|
|
|
1: Hartree-Fock determinant, 2:All determinants of the dominant configuration ::
|
|
|
|
excitation_ref = %s
|
|
|
|
Maximum number of excitation with respect to the Hartree-Fock determinant. Using -1 selects all determinants ::
|
|
|
|
excitation_max = %s
|
|
|
|
Maximum number of excitation for alpha determinants with respect to the Hartree-Fock determinant. Using -1 selects all determinants ::
|
|
|
|
excitation_alpha_max = %s
|
|
|
|
Maximum number of excitation for beta determinants with respect to the Hartree-Fock determinant. Using -1 selects all determinants ::
|
|
|
|
excitation_beta_max = %s
|
|
|
|
"
|
|
(string_of_bool b.pert_2rdm)
|
|
(string_of_bool b.save_wf_after_selection)
|
|
(string_of_int b.seniority_max)
|
|
(string_of_int b.excitation_ref)
|
|
(string_of_int b.excitation_max)
|
|
(string_of_int b.excitation_alpha_max)
|
|
(string_of_int b.excitation_beta_max)
|
|
|> Rst_string.of_string
|
|
;;
|
|
include Generic_input_of_rst;;
|
|
let of_rst = of_rst t_of_sexp;;
|
|
|
|
end |