mirror of
https://gitlab.com/scemama/QCaml.git
synced 2024-12-22 12:23:31 +01:00
98 lines
3.1 KiB
OCaml
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
|