(** Atomic shell pair couple *) (** An atomic shell pair couple is the cartesian product between two sets of * functions, one set over electron one and one set over electron two. Both * sets are atomic shell pairs. *) (** These are usually called /shell quartets/ in the literature, but we * prefer to use /pair/ for two functions with the same electron, and * /couple/ for two functions acting on different electrons, since they will * be coupled by a two-electron operator. *) (** Type *) type t open Common (** Access *) val ang_mom : t -> Angular_momentum.t (** Total angular momentum of the shell pair couple: sum of the angular * momenta of all the shells. *) val atomic_shell_a : t -> Atomic_shell.t (** Returns the first atomic shell of the first shell pair. *) val atomic_shell_b : t -> Atomic_shell.t (** Returns the second atomic shell of the first shell pair. *) val atomic_shell_c : t -> Atomic_shell.t (** Returns the first atomic shell of the second shell pair. *) val atomic_shell_d : t -> Atomic_shell.t (** Returns the second atomic shell of the second shell pair. *) val atomic_shell_pair_p : t -> Atomic_shell_pair.t (** Returns the first atomic shell pair that was used to build the shell * pair. *) val atomic_shell_pair_q : t -> Atomic_shell_pair.t (** Returns the second atomic shell pair that was used to build the shell * pair. *) val contracted_shell_pair_couples : t -> Contracted_shell_pair_couple.t list (** Returns the list of significant contracted shell pair couples. *) val monocentric : t -> bool (** True if all four atomic shells have the same center. *) val norm_scales : t -> float array (** Scaling factors of normalization coefficients inside the shell. The * ordering is the same as ~zkey_array~. *) val zkey_array : t -> Zkey.t array (** Returns the array of ~Zkey.t~ relative to the four shells of the shell * pair couple. *) (** Creation *) val make : ?cutoff:float -> Atomic_shell_pair.t -> Atomic_shell_pair.t -> t option (** Creates an atomic shell pair couple using two atomic shell pairs. * Default cutoff is $\epsilon$. *) (** Printers *) val pp : Format.formatter -> t -> unit