10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-11-03 20:54:00 +01:00
quantum_package/ocaml/Input_electrons.ml

77 lines
1.7 KiB
OCaml

open Qptypes;;
open Qputils;;
open Core.Std;;
module Electrons : sig
type t =
{ elec_alpha_num : Elec_alpha_number.t;
elec_beta_num : Elec_beta_number.t;
elec_num : Elec_number.t;
} with sexp
;;
val read : unit -> t
val to_string : t -> string
end = struct
type t =
{ elec_alpha_num : Elec_alpha_number.t;
elec_beta_num : Elec_beta_number.t;
elec_num : Elec_number.t;
} with sexp
;;
let get_default = Qpackage.get_ezfio_default "electrons";;
let read_elec_alpha_num() =
Ezfio.get_electrons_elec_alpha_num ()
|> Elec_alpha_number.of_int
;;
let read_elec_beta_num() =
Ezfio.get_electrons_elec_beta_num ()
|> Elec_beta_number.of_int
;;
let read_elec_num () =
let na = Ezfio.get_electrons_elec_alpha_num ()
and nb = Ezfio.get_electrons_elec_beta_num ()
in assert (na >= nb);
Elec_number.of_int (na + nb)
;;
let read () =
{ elec_alpha_num = read_elec_alpha_num ();
elec_beta_num = read_elec_beta_num ();
elec_num = read_elec_num ();
}
;;
let to_string b =
Printf.sprintf "
Spin multiplicity is %s.
Number of alpha and beta electrons ::
elec_alpha_num = %s
elec_beta_num = %s
"
(Multiplicity.of_alpha_beta b.elec_alpha_num b.elec_beta_num
|> Multiplicity.to_string)
(Elec_alpha_number.to_string b.elec_alpha_num)
(Elec_beta_number.to_string b.elec_beta_num)
;;
let debug b =
Printf.sprintf "elec_alpha_num = %s
elec_beta_num = %s
elec_num = %s
"
(Elec_alpha_number.to_string b.elec_alpha_num)
(Elec_beta_number.to_string b.elec_beta_num)
(Elec_number.to_string b.elec_num)
;;
end