2014-10-24 00:42:07 +02:00
|
|
|
open Qptypes;;
|
|
|
|
open Qputils;;
|
|
|
|
open Core.Std;;
|
|
|
|
|
|
|
|
module Nuclei : sig
|
|
|
|
type t =
|
|
|
|
{ nucl_num : Nucl_number.t ;
|
|
|
|
nucl_label : Element.t array;
|
|
|
|
nucl_charge : Charge.t array;
|
|
|
|
nucl_coord : Point3d.t array;
|
2014-10-25 21:24:21 +02:00
|
|
|
} with sexp
|
2014-10-24 00:42:07 +02:00
|
|
|
;;
|
|
|
|
val read : unit -> t
|
|
|
|
val to_string : t -> string
|
|
|
|
end = struct
|
|
|
|
type t =
|
|
|
|
{ nucl_num : Nucl_number.t ;
|
|
|
|
nucl_label : Element.t array;
|
|
|
|
nucl_charge : Charge.t array;
|
|
|
|
nucl_coord : Point3d.t array;
|
2014-10-25 21:24:21 +02:00
|
|
|
} with sexp
|
2014-10-24 00:42:07 +02:00
|
|
|
;;
|
|
|
|
|
|
|
|
let get_default = Qpackage.get_ezfio_default "nuclei";;
|
|
|
|
|
|
|
|
let read_nucl_num () =
|
|
|
|
Ezfio.get_nuclei_nucl_num ()
|
|
|
|
|> Nucl_number.of_int
|
|
|
|
;;
|
|
|
|
|
|
|
|
let read_nucl_label () =
|
|
|
|
(Ezfio.get_nuclei_nucl_label ()).Ezfio.data
|
|
|
|
|> Ezfio.flattened_ezfio_data
|
|
|
|
|> Array.map ~f:Element.of_string
|
|
|
|
;;
|
|
|
|
|
|
|
|
let read_nucl_charge () =
|
|
|
|
(Ezfio.get_nuclei_nucl_charge () ).Ezfio.data
|
|
|
|
|> Ezfio.flattened_ezfio_data
|
|
|
|
|> Array.map ~f:Charge.of_float
|
|
|
|
;;
|
|
|
|
|
|
|
|
let read_nucl_coord () =
|
|
|
|
let nucl_num = Nucl_number.to_int (read_nucl_num ()) in
|
|
|
|
let raw_data =
|
|
|
|
(Ezfio.get_nuclei_nucl_coord() ).Ezfio.data
|
|
|
|
|> Ezfio.flattened_ezfio_data
|
|
|
|
in
|
|
|
|
let zero = Point3d.of_string Units.Bohr "0. 0. 0." in
|
|
|
|
let result = Array.create nucl_num zero in
|
|
|
|
for i=0 to (nucl_num-1)
|
|
|
|
do
|
|
|
|
result.(i) <- Point3d.({ x=raw_data.(i);
|
|
|
|
y=raw_data.(nucl_num+i);
|
|
|
|
z=raw_data.(2*nucl_num+i); });
|
|
|
|
done;
|
|
|
|
result
|
|
|
|
;;
|
|
|
|
|
|
|
|
let read () =
|
|
|
|
{ nucl_num = read_nucl_num ();
|
|
|
|
nucl_label = read_nucl_label () ;
|
|
|
|
nucl_charge = read_nucl_charge ();
|
|
|
|
nucl_coord = read_nucl_coord ();
|
|
|
|
}
|
|
|
|
;;
|
|
|
|
|
|
|
|
let to_string b =
|
|
|
|
Printf.sprintf "
|
|
|
|
nucl_num = %s
|
|
|
|
nucl_label = %s
|
|
|
|
nucl_charge = %s
|
|
|
|
nucl_coord = %s
|
|
|
|
"
|
|
|
|
(Nucl_number.to_string b.nucl_num)
|
|
|
|
(b.nucl_label |> Array.to_list |> List.map
|
|
|
|
~f:(Element.to_string) |> String.concat ~sep:", " )
|
|
|
|
(b.nucl_charge |> Array.to_list |> List.map
|
|
|
|
~f:(Charge.to_string) |> String.concat ~sep:", " )
|
|
|
|
(b.nucl_coord |> Array.to_list |> List.map
|
|
|
|
~f:(Point3d.to_string Units.Bohr) |> String.concat ~sep:"\n" )
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|