10
1
mirror of https://gitlab.com/scemama/QCaml.git synced 2024-06-19 19:52:06 +02:00
QCaml/Basis/ContractedShellPair.mli
2018-03-14 14:51:50 +01:00

69 lines
2.3 KiB
OCaml

(** A datastructure to represent pairs of contracted shells.
A contracted shell pair is a product of two {!ContractedShell.t}:
{% \begin{align*}
\varphi_{ab}(r) & = \chi_a(r) \times \chi_b(r) \\
& = P_a \sum_{i=1}^{m_a} \mathcal{N}_i^a f_i[P_a] d_i^a \exp \left( -\alpha_i^a |r-R_a|^2 \right) \times
P_b \sum_{j=1}^{m_b} \mathcal{N}_j^b f_j[P_b] d_j^b \exp \left( -\alpha_j^b |r-R_b|^2 \right) \\
& = P_a P_b \sum_{i=1}^{m_a} \sum_{j=1}^{m_b} \left( \mathcal{N}_i^a \mathcal{N}_j^b \right) \left( f_i[P_a] f_j[P_b] \right) \left( d_i^a d_j^b \right) \exp \left( -\alpha_i^a |r-R_a|^2 -\alpha_j^b |r-R_b|^2 \right) \\
\end{align*} %}
*)
type t
val create : ?cutoff:float -> ContractedShell.t -> ContractedShell.t -> t
(** Creates an contracted shell pair {% $\varphi_{ab}$ %} from a contracted
shell {% $\chi_a$ %} (first argument) and a contracted shell {% $\chi_b$ %}
(second argument).
The contracted shell pair contains the pairs of primitives for which
the norm is greater than [cutoff], and for which ... TODO ....
All other pairs are discarded.
*)
val of_basis : ContractedShell.t array -> t array array
(** Creates all possible contracted shell pairs from the basis set. *)
val shell_a : t -> ContractedShell.t
(** Returns the first {!ContractedShell.t} {% $\chi_a$ %} which was used to
build the contracted shell pair.
*)
val shell_b : t -> ContractedShell.t
(** Returns the second {!ContractedShell.t} {% $\chi_b$ %} which was used to
build the contracted shell pair.
*)
val shell_pairs : t -> ShellPair.t array
(** Returns an array of {!ShellPair.t}, containing all the pairs of primitive functions.
build the contracted shell pair.
*)
val coef : t -> float array
val expo_inv : t -> float array
val center_ab : t -> Coordinate.t
(* A-B *)
val norm_sq : t -> float
(* |A-B|^2 *)
val norm_coef_scale : t -> float array
(* norm_coef.(i) / norm_coef.(0) *)
val totAngMomInt : t -> int
(* Total angular Momentum *)
val monocentric : t -> bool
(** If true, the two contracted shells have the same center. *)
val hash : 'a array -> int array
val cmp : 'a array -> 'a array -> int
val equivalent : 'a array -> 'a array -> bool
val unique : 'a array array array -> 'a array list
val indices : 'a array array array -> (int array, int * int) Hashtbl.t