open Util open Constants type t = { expo : float; (* alpha + beta *) expo_inv : float; (* 1/(alpha + beta) *) center : Coordinate.t; (* P = (alpha * A + beta B)/(alpha+beta) *) center_a : Coordinate.t; (* P - A *) center_ab: Coordinate.t; (* A - B *) norm_sq : float; (* |A-B|^2 *) norm_coef: float; (* norm_coef_a * norm_coef_b *) coef : float; (* norm_coef * coef_a * coef_b * g, with g = (pi/(alpha+beta))^(3/2) exp (-|A-B|^2 * alpha*beta/(alpha+beta)) *) norm_coef_scale : float array; (* norm_coef.(i) / norm_coef.(0) *) i : int; j : int; shell_a : Contracted_shell.t; shell_b : Contracted_shell.t; monocentric : bool } (** Returns an integer characteristic of a primitive shell pair *) let hash a = Hashtbl.hash (a.expo, a.center_a, a.center_ab, a.coef) (** Comparison function, used for sorting *) let cmp a b = hash a - hash b