2020-10-17 19:02:37 +02:00
|
|
|
(** Data structure to represent the molecular orbitals.
|
|
|
|
|
|
|
|
The MO indices start from 1.
|
|
|
|
|
|
|
|
*)
|
|
|
|
|
|
|
|
open Linear_algebra
|
|
|
|
open Common
|
|
|
|
|
|
|
|
type mo_type =
|
|
|
|
| RHF | ROHF | UHF | CASSCF | Projected
|
|
|
|
| Natural of string
|
|
|
|
| Localized of string
|
|
|
|
|
|
|
|
type t
|
2020-10-18 01:58:22 +02:00
|
|
|
type mo = Mo_dim.t
|
|
|
|
type ao = Ao.Ao_dim.t
|
2020-10-17 19:02:37 +02:00
|
|
|
|
|
|
|
(** {1 Accessors} *)
|
|
|
|
|
|
|
|
val simulation : t -> Simulation.t
|
|
|
|
(** Simulation which produced the MOs *)
|
|
|
|
|
|
|
|
val mo_type : t -> mo_type
|
|
|
|
(** Kind of MOs (RHF, CASSCF, Localized...) *)
|
|
|
|
|
|
|
|
val ao_basis : t -> Ao.Basis.t
|
|
|
|
(** Matrix of the MO coefficients in the AO basis *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val mo_occupation : t -> mo Vector.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Occupation numbers *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val mo_coef : t -> (ao, mo) Matrix.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Molecular orbitcal coefficients *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val eN_ints : t -> (mo,mo) Matrix.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Electron-nucleus potential integrals *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val ee_ints : t -> mo Four_idx_storage.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Electron-electron repulsion integrals *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val kin_ints : t -> (mo,mo) Matrix.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Kinetic energy integrals *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val one_e_ints : t -> (mo,mo) Matrix.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** One-electron integrals {% $\hat{T} + V$ %} *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val two_e_ints : t -> mo Four_idx_storage.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Electron-electron repulsion integrals *)
|
|
|
|
|
|
|
|
(* TODO
|
|
|
|
val f12_ints : t -> F12.t
|
|
|
|
(** F12 integrals *)
|
|
|
|
*)
|
|
|
|
|
|
|
|
val size : t -> int
|
|
|
|
(** Number of molecular orbitals in the basis *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val mo_energies : t -> mo Vector.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Fock MO energies *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val values : t -> Coordinate.t -> mo Vector.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Values of the MOs evaluated at a given coordinate. *)
|
|
|
|
|
|
|
|
(** {1 Creators} *)
|
|
|
|
|
|
|
|
val make : simulation:Simulation.t ->
|
|
|
|
mo_type:mo_type ->
|
2020-10-18 01:58:22 +02:00
|
|
|
mo_occupation:mo Vector.t ->
|
|
|
|
mo_coef:(ao,mo) Matrix.t ->
|
2020-10-17 19:02:37 +02:00
|
|
|
unit -> t
|
|
|
|
(** Function to build a data structure representing the molecular orbitals. *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
val of_hartree_fock : Hartree_fock.t -> t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Build MOs from a Restricted Hartree-Fock calculation. *)
|
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
(*
|
2020-10-17 19:02:37 +02:00
|
|
|
val of_mo_basis : Simulation.t -> t -> t
|
|
|
|
(** Project the MOs of the other basis on the current one. *)
|
2020-10-18 01:58:22 +02:00
|
|
|
*)
|
2020-10-17 19:02:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
val mo_matrix_of_ao_matrix :
|
2020-10-18 01:58:22 +02:00
|
|
|
mo_coef:(ao,mo) Matrix.t ->
|
|
|
|
(ao,ao) Matrix.t -> (mo,mo) Matrix.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Build a matrix in MO basis from a matrix in AO basis. *)
|
|
|
|
|
|
|
|
val ao_matrix_of_mo_matrix :
|
2020-10-18 01:58:22 +02:00
|
|
|
mo_coef:(ao,mo) Matrix.t -> ao_overlap:(ao,ao) Matrix.t ->
|
|
|
|
(mo,mo) Matrix.t -> (ao,ao) Matrix.t
|
2020-10-17 19:02:37 +02:00
|
|
|
(** Build a matrix in AO basis from a matrix in MO basis. *)
|
|
|
|
|
|
|
|
(** {1 Printers} *)
|
|
|
|
|
|
|
|
val pp : ?start:int -> ?finish:int -> Format.formatter -> t -> unit
|
|
|
|
|
|
|
|
|
|
|
|
|