mirror of
https://github.com/LCPQ/quantum_package
synced 2024-08-30 16:13:42 +02:00
86 lines
2.1 KiB
OCaml
86 lines
2.1 KiB
OCaml
|
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;
|
||
|
}
|
||
|
;;
|
||
|
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;
|
||
|
}
|
||
|
;;
|
||
|
|
||
|
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
|
||
|
|
||
|
|