(** Atomic shell pair *) (** Data structure to represent pairs of atomic shells. The products of * functions in the shell pair are one-electron functions. * * An atomic shell pair is an array of pairs of contracted shells. *) (** Type *) type t open Common (** Access *) val atomic_shell_a : t -> Atomic_shell.t (** Returns the first ~Atomic_shell.t~ which was used to build the atomic * shell pair. *) val atomic_shell_b : t -> Atomic_shell.t (** Returns the second ~Atomic_shell.t~ which was used to build the atomic * shell pair. *) val contracted_shell_pairs : t -> Contracted_shell_pair.t list (** Returns an array of ~ContractedShellPair.t~, containing all the pairs of * contracted functions used to build the atomic shell pair. *) val ang_mom : t -> Angular_momentum.t (** Total angular Momentum *) val monocentric : t -> bool (** If true, the two atomic shells have the same center. *) val norm_scales : t -> float array (** norm_coef.(i) / norm_coef.(0) *) val a_minus_b : t -> Coordinate.t (** Returns $A-B$ *) val a_minus_b_sq : t -> float (** Returns $\vert A-B \vert^2$ *) (** Creation *) val make : ?cutoff:float -> Atomic_shell.t -> Atomic_shell.t -> t option (* Creates an atomic shell pair from two atomic shells. * * The contracted shell pairs contains the only pairs of primitives for which * the norm is greater than ~cutoff~. * * If all the contracted shell pairs are not significant, the function returns * ~None~. *) val of_atomic_shell_array : ?cutoff:float -> Atomic_shell.t array -> t option array array (** Creates all possible atomic shell pairs from an array of atomic shells. * If an atomic shell pair is not significant, sets the value to ~None~. *) (** Printers *) val pp : Format.formatter -> t -> unit