(** Data structure for Atomic Orbitals. *) open Common open Particles open Operators open Linear_algebra type t type ao = Ao_dim.t (** {1 Accessors} *) val size : t -> int (** Number of atomic orbitals in the AO basis set *) val ao_basis : t -> Basis_poly.t (** One-electron basis set *) val overlap : t -> (ao,ao) Matrix.t (** Overlap matrix *) val multipole : t -> string -> (ao,ao) Matrix.t (** Multipole matrices *) val ortho : t -> (ao,'a) Matrix.t (** Orthonormalization matrix of the overlap *) val eN_ints : t -> (ao,ao) Matrix.t (** Electron-nucleus potential integrals *) val kin_ints : t -> (ao,ao) Matrix.t (** Kinetic energy integrals *) val ee_ints : t -> ao Four_idx_storage.t (** Electron-electron potential integrals *) val ee_lr_ints : t -> ao Four_idx_storage.t (** Electron-electron long-range potential integrals *) val f12_ints : t -> ao Four_idx_storage.t (** Electron-electron potential integrals *) val f12_over_r12_ints : t -> ao Four_idx_storage.t (** Electron-electron potential integrals *) val cartesian : t -> bool (** If true, use cartesian Gaussians (6d, 10f, ...) *) val values : t -> Coordinate.t -> ao 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 the atomic orbitals basis from a molecule {Nuclei.t} and the name of the basis-set file *)