(** Data structure for Atomic Orbitals. *) open Qcaml_common open Qcaml_particles open Qcaml_operators open Qcaml_linear_algebra type basis = | Unknown | Gaussian of Ao_basis_gaussian.t type t (** {1 Accessors} *) val size : t -> int (** Number of atomic orbitals in the AO basis set *) val ao_basis : t -> basis (** One-electron basis set *) val overlap : t -> ('a,'a) Matrix.t (** Overlap matrix *) val multipole : t -> ('a,'a) Matrix.t array (** Multipole matrices *) val ortho : t -> ('a,'a) Matrix.t (** Orthonormalization matrix of the overlap *) val eN_ints : t -> ('a,'a) Matrix.t (** Electron-nucleus potential integrals *) val kin_ints : t -> ('a,'a) Matrix.t (** Kinetic energy integrals *) val ee_ints : t -> 'a Four_idx_storage.t (** Electron-electron potential integrals *) val ee_lr_ints : t -> 'a Four_idx_storage.t (** Electron-electron long-range potential integrals *) val f12_ints : t -> 'a Four_idx_storage.t (** Electron-electron potential integrals *) val f12_over_r12_ints : t -> 'a Four_idx_storage.t (** Electron-electron potential integrals *) val cartesian : t -> bool (** If true, use cartesian Gaussians (6d, 10f, ...) *) val values : t -> Coordinate.t -> 'a Vector.t (** Values of the AOs evaluated at a given point *) (** {1 Creators} *) val of_nuclei_and_basis_filename : ?kind:[> `Gaussian ] -> ?operators:Operator.t list -> ?cartesian:bool -> nuclei:Nuclei.t -> string -> t (** Creates the data structure for atomic orbitals from a {Basis.t} and the molecular geometry {Nuclei.t} *)