2018-02-07 17:07:05 +01:00
|
|
|
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)) *)
|
2018-02-10 03:37:00 +01:00
|
|
|
totAngMomInt : int ;
|
2018-02-07 17:07:05 +01:00
|
|
|
i : int;
|
|
|
|
j : int;
|
2018-02-23 18:41:30 +01:00
|
|
|
shell_a : ContractedShell.t;
|
|
|
|
shell_b : ContractedShell.t;
|
2018-02-07 17:07:05 +01:00
|
|
|
monocentric : bool
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
(** Returns an integer characteristic of a primitive shell pair *)
|
|
|
|
let hash a =
|
2018-02-08 01:00:54 +01:00
|
|
|
Hashtbl.hash a
|
|
|
|
|
|
|
|
let equivalent a b =
|
|
|
|
a = b
|
|
|
|
(*
|
2018-02-23 18:41:30 +01:00
|
|
|
Hashtbl.hash (a.expo, a.center_a, a.center_ab, a.coef, ContractedShell.totAngMom a.shell_a, ContractedShell.totAngMom a.shell_b)
|
2018-02-08 01:00:54 +01:00
|
|
|
*)
|
2018-02-07 17:07:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
(** Comparison function, used for sorting *)
|
|
|
|
let cmp a b =
|
|
|
|
hash a - hash b
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|