2014-10-21 23:23:37 +02:00
|
|
|
open Qptypes;;
|
|
|
|
open Qputils;;
|
|
|
|
open Core.Std;;
|
|
|
|
|
|
|
|
module Electrons : sig
|
|
|
|
type t =
|
2014-10-22 00:12:23 +02:00
|
|
|
{ elec_alpha_num : Elec_alpha_number.t;
|
|
|
|
elec_beta_num : Elec_beta_number.t;
|
2014-10-25 21:24:21 +02:00
|
|
|
} with sexp
|
2014-10-21 23:23:37 +02:00
|
|
|
;;
|
2014-11-04 00:39:10 +01:00
|
|
|
val read : unit -> t
|
|
|
|
val write : t -> unit
|
2014-10-31 19:33:29 +01:00
|
|
|
val read_elec_num : unit -> Elec_number.t
|
2014-10-21 23:23:37 +02:00
|
|
|
val to_string : t -> string
|
2014-10-29 22:13:03 +01:00
|
|
|
val to_rst : t -> Rst_string.t
|
2014-10-31 19:33:29 +01:00
|
|
|
val of_rst : Rst_string.t -> t
|
2014-10-21 23:23:37 +02:00
|
|
|
end = struct
|
|
|
|
type t =
|
2014-10-22 00:12:23 +02:00
|
|
|
{ elec_alpha_num : Elec_alpha_number.t;
|
|
|
|
elec_beta_num : Elec_beta_number.t;
|
2014-10-25 21:24:21 +02:00
|
|
|
} with sexp
|
2014-10-21 23:23:37 +02:00
|
|
|
;;
|
|
|
|
|
|
|
|
let get_default = Qpackage.get_ezfio_default "electrons";;
|
|
|
|
|
|
|
|
let read_elec_alpha_num() =
|
|
|
|
Ezfio.get_electrons_elec_alpha_num ()
|
2014-10-22 00:12:23 +02:00
|
|
|
|> Elec_alpha_number.of_int
|
2014-10-21 23:23:37 +02:00
|
|
|
;;
|
|
|
|
|
2014-11-04 00:39:10 +01:00
|
|
|
let write_elec_alpha_num n =
|
|
|
|
Elec_alpha_number.to_int n
|
|
|
|
|> Ezfio.set_electrons_elec_alpha_num
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
2014-10-21 23:23:37 +02:00
|
|
|
let read_elec_beta_num() =
|
|
|
|
Ezfio.get_electrons_elec_beta_num ()
|
2014-10-22 00:12:23 +02:00
|
|
|
|> Elec_beta_number.of_int
|
2014-10-21 23:23:37 +02:00
|
|
|
;;
|
|
|
|
|
2014-11-04 00:39:10 +01:00
|
|
|
let write_elec_beta_num n =
|
|
|
|
Elec_beta_number.to_int n
|
|
|
|
|> Ezfio.set_electrons_elec_beta_num
|
|
|
|
;;
|
|
|
|
|
2014-10-21 23:23:37 +02:00
|
|
|
let read_elec_num () =
|
|
|
|
let na = Ezfio.get_electrons_elec_alpha_num ()
|
|
|
|
and nb = Ezfio.get_electrons_elec_beta_num ()
|
|
|
|
in assert (na >= nb);
|
2014-10-22 00:12:23 +02:00
|
|
|
Elec_number.of_int (na + nb)
|
2014-10-21 23:23:37 +02:00
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
let read () =
|
|
|
|
{ elec_alpha_num = read_elec_alpha_num ();
|
|
|
|
elec_beta_num = read_elec_beta_num ();
|
|
|
|
}
|
|
|
|
;;
|
|
|
|
|
2014-11-04 00:39:10 +01:00
|
|
|
let write { elec_alpha_num ; elec_beta_num } =
|
|
|
|
write_elec_alpha_num elec_alpha_num;
|
|
|
|
write_elec_beta_num elec_beta_num;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
2014-10-29 22:13:03 +01:00
|
|
|
let to_rst b =
|
2014-10-29 00:12:45 +01:00
|
|
|
Printf.sprintf "
|
|
|
|
Spin multiplicity is %s.
|
|
|
|
|
|
|
|
Number of alpha and beta electrons ::
|
|
|
|
|
|
|
|
elec_alpha_num = %s
|
|
|
|
elec_beta_num = %s
|
|
|
|
|
2014-10-28 17:16:51 +01:00
|
|
|
"
|
2014-10-29 00:12:45 +01:00
|
|
|
(Multiplicity.of_alpha_beta b.elec_alpha_num b.elec_beta_num
|
|
|
|
|> Multiplicity.to_string)
|
2014-10-28 17:16:51 +01:00
|
|
|
(Elec_alpha_number.to_string b.elec_alpha_num)
|
|
|
|
(Elec_beta_number.to_string b.elec_beta_num)
|
2014-10-29 22:13:03 +01:00
|
|
|
|> Rst_string.of_string
|
2014-10-28 17:16:51 +01:00
|
|
|
;;
|
|
|
|
|
2014-10-29 22:13:03 +01:00
|
|
|
let to_string b =
|
2014-10-28 17:16:51 +01:00
|
|
|
Printf.sprintf "elec_alpha_num = %s
|
2014-10-21 23:23:37 +02:00
|
|
|
elec_beta_num = %s
|
|
|
|
elec_num = %s
|
|
|
|
"
|
2014-10-22 00:12:23 +02:00
|
|
|
(Elec_alpha_number.to_string b.elec_alpha_num)
|
|
|
|
(Elec_beta_number.to_string b.elec_beta_num)
|
2014-10-31 19:33:29 +01:00
|
|
|
(Elec_number.to_string (read_elec_num ()))
|
2014-10-28 17:16:51 +01:00
|
|
|
;;
|
2014-10-31 19:33:29 +01:00
|
|
|
|
|
|
|
let of_rst s =
|
|
|
|
let s = Rst_string.to_string s
|
|
|
|
|> String.split ~on:'\n'
|
|
|
|
|> List.filter ~f:(fun line ->
|
|
|
|
String.contains line '=')
|
|
|
|
|> List.map ~f:(fun line ->
|
|
|
|
"("^(
|
|
|
|
String.tr line ~target:'=' ~replacement:' '
|
|
|
|
)^")" )
|
|
|
|
|> String.concat
|
|
|
|
in
|
|
|
|
Sexp.of_string ("("^s^")")
|
|
|
|
|> t_of_sexp
|
|
|
|
;;
|
|
|
|
|
2014-10-21 23:23:37 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
|