QCaml/Simulation.ml

46 lines
1.3 KiB
OCaml
Raw Normal View History

2018-02-09 00:42:26 +01:00
type t = {
2018-02-22 18:20:45 +01:00
charge : Charge.t;
electrons : Electrons.t ;
2018-02-09 00:42:26 +01:00
basis : Basis.t;
nuclei : Nuclei.t;
overlap : Overlap.t lazy_t;
2018-02-21 17:06:24 +01:00
overlap_ortho : Orthonormalization.t lazy_t;
2018-02-09 00:42:26 +01:00
eN_ints : NucInt.t lazy_t;
kin_ints : KinInt.t lazy_t;
ee_ints : ERI.t lazy_t;
2018-02-20 23:54:48 +01:00
nuclear_repulsion : float;
2018-02-09 00:42:26 +01:00
}
2018-02-22 18:20:45 +01:00
let make ?multiplicity:(multiplicity=1) ?charge:(charge=0) ~nuclei basis =
let electrons =
Electrons.make ~multiplicity ~charge nuclei
in
let charge =
Array.fold_left (fun accu (e, _) -> accu + Charge.to_int (Element.to_charge e) )
0 nuclei - Electrons.(electrons.n_alpha + electrons.n_beta)
|> Charge.of_int
in
2018-02-21 17:06:24 +01:00
let overlap =
lazy (Overlap.of_basis basis)
in
2018-02-09 00:42:26 +01:00
{
2018-02-22 18:20:45 +01:00
charge ;
basis ; nuclei ; electrons ; overlap ;
2018-02-21 17:06:24 +01:00
overlap_ortho = lazy (Orthonormalization.make (Lazy.force overlap));
2018-02-09 00:42:26 +01:00
eN_ints = lazy (NucInt.of_basis_nuclei basis nuclei);
kin_ints = lazy (KinInt.of_basis basis);
ee_ints = lazy (ERI.of_basis basis);
2018-02-20 23:54:48 +01:00
nuclear_repulsion = Nuclei.repulsion nuclei;
2018-02-09 00:42:26 +01:00
}
2018-02-22 18:20:45 +01:00
let of_filenames ?multiplicity:(multiplicity=1) ?charge:(charge=0) ~nuclei basis =
2018-02-09 00:42:26 +01:00
let nuclei =
Nuclei.of_filename ~filename:nuclei
in
let basis =
Basis.of_nuclei_and_basis_filename ~nuclei ~filename:basis
in
2018-02-22 18:20:45 +01:00
make ~charge ~multiplicity ~nuclei basis
2018-02-09 00:42:26 +01:00