QCaml/gaussian/lib/atomic_shell.mli

98 lines
3.1 KiB
OCaml

(** Atomic Shell *)
(**
* Set of contracted Gaussians differing only by the powers of $x$, $y$
* and $z$, with a constant ~Angular_momentum.t~, all centered on the same
* point.
*
* In other words, it is the set of all contracted shells sharing the same
* center.
*
* \begin{align*}
* \chi_{n_x,n_y,n_z}(r) & = f(n_x,n_y,n_z) \sum_{j=1}^{n} \sum_{i=1}^{m} \mathcal{N}_{ij}\, d_{ij}\, g_{ij\,n_x,n_y,n_z}(r) \\
* & = (x-X_A)^{n_x} (y-Y_A)^{n_y} (z-Z_A)^{n_z} f(n_x,n_y,n_z) \sum_{j=1}^{n} \sum_{i=1}^{m} \mathcal{N}_{ij}\, d_{ij}\, \exp \left( -\alpha_{ij} |r-R_A|^2 \right)
* \end{align*}
*
* where:
*
* - $g_{ij\,n_x,n_y,n_z}(r)$ is the $i$-th ~PrimitiveShell.t~ of the
* $j$-th ~Contracted_shell.t~
* - $n_x + n_y + n_z = l$, the total angular momentum
* - $\alpha_{ij}$ are the exponents (tabulated) of the $j$-th
* ~Contracted_shell.t~
* - $d_{ij}$ are the contraction coefficients of the $j$-th
* ~Contracted_shell.t~
* - $\mathcal{N}_{ij}$ is the normalization coefficient of the $i$-th
* primitive shell
* (~PrimitiveShell.norm_coef~) of the $j$-th ~Contracted_shell.t~
* - $f(n_x,n_y,n_z)$ is a scaling factor adjusting the normalization
* coefficient for the particular powers of $x,y,z$
* (~PrimitiveShell.norm_coef_scale~)
*)
(** Types and modules *)
type t
open Common
(** Access *)
val ang_mom : t -> Angular_momentum.t
(** Total angular momentum : $l = n_x + n_y + n_z$. *)
val center : t -> Coordinate.t
(** Coordinate of the center $\mathbf{A} = (X_A,Y_A,Z_A)$. *)
val coefficients : t -> float array array
(** Array of contraction coefficients $d_{ij}$. The first index is the index
* of the contracted function, and the second index is the index of the
* primitive.
*)
val contracted_shells : t -> Contracted_shell.t array
(** Array of contracted gaussians *)
val exponents : t -> float array array
(** Array of exponents $\alpha_{ij}$. The first index is the index of the
* contracted function, and the second index is the index of the primitive.
*)
val index : t -> int
(** Index in the basis set, represented as an array of contracted shells. *)
val normalizations : t -> float array array
(** Normalization coefficients $\mathcal{N}_{ij}$. The first index is the
* index of the contracted function, and the second index is the index of
* the primitive.
*)
val norm_scales : t -> float array
(** Scaling factors $f(n_x,n_y,n_z)$, given in the same order as
* ~Angular_momentum.zkey_array ang_mom~.
*)
val size_of_shell : t -> int
(** Number of contracted functions in the shell: length of
* ~norm_coef_scale~.
*)
val size : t -> int
(** Number of contracted functions, $n$ in the definition. *)
(** Creation *)
val make : ?index:int -> Contracted_shell.t array -> t
(** Creates a contracted shell from a list of coefficients and primitives. *)
val with_index : t -> int -> t
(** Returns a copy of the contracted shell with a modified index. *)
(** Printers *)
val pp : Format.formatter -> t -> unit