(** Gaussian basis Data structure for Gaussian Atomic Orbitals: \[ \chi_i(\mathbf{r}) = P_i(\mathbf{r}) \sum_k c_k \exp\left( -\alpha_k (\mathbf{r-R_A})^2 \r$ \] where the polynomial $P_i$ and the Gaussian part are both centered on nucleus $A$. *) open Common open Particles open Linear_algebra open Gaussian_integrals open Operators type t (** Access *) val basis : t -> Gaussian.Basis.t (** One-electron basis set *) val cartesian : t -> bool (** If true, use cartesian Gaussians (6d, 10f, ...) *) 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 eN_ints : t -> Electron_nucleus.t (** Electron-nucleus potential integrals *) val f12_ints : t -> F12.t (** Electron-electron potential integrals *) val f12_over_r12_ints : t -> Screened_eri.t (**lectron-electron potential integrals *) val kin_ints : t -> Kinetic.t (** Kinetic energy integrals *) val multipole : t -> Multipole.t (** Multipole matrices *) val ortho : t -> Orthonormalization.t (** Orthonormalization matrix of the overlap *) val overlap : t -> Overlap.t (** Overlap matrix *) val size : t -> int (** Number of atomic orbitals *) (** Computation *) val values : t -> Coordinate.t -> Gaussian.Basis.t Vector.t (** Returns the values of all the AOs evaluated at a given point *) (** Creation *) val make : basis:Gaussian.Basis.t -> ?operators:Operator.t list -> ?cartesian:bool -> Nuclei.t -> t (** Creates the data structure for atomic orbitals from a Gaussian basis and the molecular geometry ~Nuclei.t~. Defaults: - ~operators~ : ~[]~ - ~cartesian~ : ~false~ Example: #+begin_example let b = Ao.Basis_gaussian.make ~basis nuclei ;; val b : Ao.Basis_gaussian.t = Gaussian Basis, spherical, 15 AOs #+end_example *) (** Printers *) val pp : Format.formatter -> t -> unit