(** Data structure for Atomic Orbitals. *) type t type ao = Ao_dim.t open Common open Particles open Operators open Linear_algebra (** Conversions *) 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. Defaults: - ~kind~ : ~`Gaussian~ - ~operators~ : ~[]~ - ~cartesian~ : ~false~ Example: #+begin_example let b = Ao.Basis.of_nuclei_and_basis_filename ~nuclei filename;; val b : Ao.Basis.t = Gaussian Basis, spherical, 15 AOs #+end_example *) val of_nuclei_and_basis_string : ?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 a basis-set string. Defaults: - ~kind~ : ~`Gaussian~ - ~operators~ : ~[]~ - ~cartesian~ : ~false~ Example: #+begin_example let b = Ao.Basis.of_nuclei_and_basis_string ~nuclei " HYDROGEN S 1 1 0.0395061728 1.00000000 " ;; val b : Ao.Basis.t = Gaussian Basis, spherical, 1 AOs #+end_example *) (** Access *) 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 (** ectron-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 *) (** TREXIO *) (* val of_trexio : Trexio.trexio_file -> t (** Reads the basis set from a TREXIO file *) val to_trexio : Trexio.trexio_file -> t -> unit (** Writes the basis set to a TREXIO file *) *) (* Printers *) val pp : Format.formatter -> t -> unit