mirror of
https://gitlab.com/scemama/QCaml.git
synced 2024-06-19 19:52:06 +02:00
67 lines
1.7 KiB
OCaml
67 lines
1.7 KiB
OCaml
type t = Contracted_shell.t array
|
|
|
|
(** Returns an array of the basis set per atom *)
|
|
let of_nuclei_and_general_basis n b =
|
|
let result =
|
|
Array.map (fun (e, center) ->
|
|
List.assoc e b
|
|
|> Array.map (fun (totAngMom, shell) ->
|
|
let expo = Array.map (fun General_basis.{exponent ; coefficient} ->
|
|
exponent) shell
|
|
and coef = Array.map (fun General_basis.{exponent ; coefficient} ->
|
|
coefficient) shell
|
|
in
|
|
Contracted_shell.create ~expo ~coef ~totAngMom ~center ~index:0)
|
|
) n
|
|
|> Array.to_list
|
|
|> Array.concat
|
|
in
|
|
Array.iteri (fun i x ->
|
|
if (i > 0) then
|
|
result.(i) <- Contracted_shell.with_index x (
|
|
(Contracted_shell.index result.(i-1)) +
|
|
(Array.length (Contracted_shell.powers result.(i-1))))
|
|
) result ;
|
|
result
|
|
|
|
|
|
let to_string b =
|
|
let line ="
|
|
-----------------------------------------------------------------------
|
|
" in
|
|
"
|
|
Atomic Basis set
|
|
----------------
|
|
|
|
-----------------------------------------------------------------------
|
|
# Angular Coordinates (Bohr) Exponents Coefficients
|
|
Momentum X Y Z
|
|
-----------------------------------------------------------------------
|
|
"
|
|
^
|
|
( Array.map (fun i ->
|
|
Contracted_shell.to_string i) b
|
|
|> Array.to_list
|
|
|> String.concat line
|
|
)
|
|
^ line
|
|
|
|
let file : string option ref = ref None
|
|
|
|
let set_file f =
|
|
file := Some f
|
|
|
|
let general_basis = lazy(
|
|
match !file with
|
|
| None -> failwith "basis set file not defined"
|
|
| Some filename -> Gamess_reader.read ~filename
|
|
)
|
|
|
|
|
|
let basis = lazy (
|
|
of_nuclei_and_general_basis
|
|
(Lazy.force Nuclei.nuclei) (Lazy.force general_basis)
|
|
)
|
|
|
|
|