(** Data structure for Atomic Orbitals. *) open Qcaml_common open Qcaml_particles open Qcaml_linear_algebra open Qcaml_gaussian_basis open Qcaml_gaussian_integrals open Qcaml_operators type t = { basis : Basis.t ; overlap : Overlap.t lazy_t; multipole : Multipole.t lazy_t; ortho : Orthonormalization.t lazy_t; eN_ints : Electron_nucleus.t lazy_t; kin_ints : Kinetic.t lazy_t; ee_ints : Eri.t lazy_t; ee_lr_ints : Eri_long_range.t lazy_t; f12_ints : F12.t lazy_t; f12_over_r12_ints : Screened_eri.t lazy_t; cartesian : bool ; } (** {1 Accessors} *) val basis : t -> Basis.t (** One-electron basis set *) val overlap : t -> Overlap.t (** Overlap matrix *) val multipole : t -> Multipole.t (** Multipole matrices *) val ortho : t -> Orthonormalization.t (** Orthonormalization matrix of the overlap *) val eN_ints : t -> Electron_nucleus.t (** Electron-nucleus potential integrals *) val ee_ints : t -> Eri.t (** Electron-electron potential integrals *) val ee_lr_ints : t -> Eri_long_range.t (** Electron-electron long-range potential integrals *) val f12_ints : t -> F12.t (** Electron-electron potential integrals *) val f12_over_r12_ints : t -> Screened_eri.t (** Electron-electron potential integrals *) val kin_ints : t -> Kinetic.t (** Kinetic energy integrals *) val cartesian : t -> bool (** If true, use cartesian Gaussians (6d, 10f, ...) *) val values : t -> Coordinate.t -> Basis.t Vector.t (** Values of the AOs evaluated at a given point *) (** {1 Creators} *) val make : basis:Basis.t -> ?operators:Operator.t list -> ?cartesian:bool -> Nuclei.t -> t (** Creates the data structure for atomic orbitals from a {Basis.t} and the molecular geometry {Nuclei.t} *)