Gaussian integrals
"Integrals on the Gaussian basis sets"
+"Integrals on the Gaussian basis sets"
diff --git a/docs/ao.html b/docs/ao.html index afa195d..6e8580d 100644 --- a/docs/ao.html +++ b/docs/ao.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +"Atomic basis set"
+"Atomic basis set"
Data structure for Gaussian Atomic Orbitals: @@ -298,11 +298,11 @@ nucleus \(A\).
open Common +open Common open Particles open Linear_algebra open Gaussian_integrals @@ -314,8 +314,8 @@ nucleus \(A\).
val basis : t -> Gaussian.Basis.t @@ -406,8 +406,8 @@ nucleus \(A\).
val values : t -> Coordinate.t -> Gaussian.Basis.t Vector.t @@ -432,8 +432,8 @@ nucleus \(A\).
val make : basis:Gaussian.Basis.t -> @@ -456,15 +456,15 @@ Defaults:
cartesian
: false
+let b = Ao.Basis_gaussian.make ~basis nuclei ;; val b : Ao.Basis_gaussian.t = Gaussian Basis, spherical, 15 AOs
val pp : Format.formatter -> t -> unit @@ -474,23 +474,23 @@ val b : Ao.Basis_gaussian.t = Gaussian Basis, spherical, 15 AOs
Data structure for Atomic Orbitals.
type t = +type t = | Unknown | Gaussian of Basis_gaussian.t@@ -498,8 +498,8 @@ Data structure for Atomic Orbitals.
type t @@ -514,8 +514,8 @@ Data structure for Atomic Orbitals.
val of_nuclei_and_basis_filename : @@ -549,15 +549,15 @@ Defaults:
cartesian
: false
+let b = Ao.Basis.of_nuclei_and_basis_filename ~nuclei filename;; val b : Ao.Basis.t = Gaussian Basis, spherical, 15 AOs
val size : t -> int @@ -655,8 +655,8 @@ val b : Ao.Basis.t = Gaussian Basis, spherical, 15 AOs
val pp : Format.formatter -> t -> unit @@ -668,7 +668,7 @@ val b : Ao.Basis.t = Gaussian Basis, spherical, 15 AOs
"Utility functions used by all the other directories."
+"Utility functions used by all the other directories."
Azimuthal quantum number, repsesented as \( s,p,d,\dots \) .
type t = +type t = | S | P | D | F | G | H | I | J | K | L | M | N | O | Int of int @@ -411,8 +411,8 @@ quartets, use in the two-electron operators.
val of_char : char -> t @@ -461,7 +461,7 @@ quartets, use in the two-electron operators. -+Angular_momentum.of_char 'p';; - : Angular_momentum.t = P @@ -480,8 +480,8 @@ Angular_momentum.(to_string D);;
val n_functions : t -> int @@ -510,7 +510,7 @@ Angular_momentum.(to_string D);; -+Angular_momentum.(n_functions D) ;; - : int = 6 @@ -523,8 +523,8 @@ Angular_momentum.( zkey_array (Doublet (P,S)) );;
val ( + ) : t -> t -> t @@ -532,7 +532,7 @@ Angular_momentum.( zkey_array (Doublet (P,S)) );;
+Angular_momentum.(D + P);; - : Angular_momentum.t = F @@ -542,8 +542,8 @@ Angular_momentum.(F - P);;
Printers can print as a string (default) or as an integer. @@ -558,12 +558,12 @@ Printers can print as a string (default) or as an integer.
We define here a data type to handle bit strings efficiently. When @@ -575,8 +575,8 @@ bit string as a multi-precision integer.
type t @@ -585,8 +585,8 @@ bit string as a multi-precision integer.
val of_int : int -> t @@ -735,13 +735,13 @@ bit string as a multi-precision integer. -+Bitstring.of_int 15;; - : Bitstring.t = ++++-------------------------------------------------------------+Bitstring.(shift_left (of_int 15) 2);; - : Bitstring.t = --++++---------------------------------------------------------- @@ -761,7 +761,7 @@ Bitstring.(testbit (of_int 15) 4);; - : bool = false-+Bitstring.(logor (of_int 15) (of_int 73));; - : Bitstring.t = ++++--+--------------------------------------------------------- @@ -776,7 +776,7 @@ Bitstring.(logxor (of_int 15) (of_int 73));;-+Bitstring.(plus_one (of_int 15));; - : Bitstring.t = ----+----------------------------------------------------------- @@ -787,7 +787,7 @@ Bitstring.(minus_one (of_int 15));;-+Bitstring.(trailing_zeros (of_int 12));; - : int = 2 @@ -798,12 +798,12 @@ Bitstring.(popcount (of_int 15));; - : int = 4-+Bitstring.(to_list (of_int 45));; - : int list = [1; 3; 4; 6]-+Bitstring.permutations 2 4;; - : Bitstring.t list = [++--------------------------------------------------------------; @@ -816,8 +816,8 @@ Bitstring.(to_list (of_int 45));;
val pp : Format.formatter -> t -> unit @@ -827,13 +827,13 @@ Bitstring.(to_list (of_int 45));;
type t @@ -846,8 +846,8 @@ This type should be used for all charges in the program (electrons, nuclei,
val of_float : float -> t @@ -863,8 +863,8 @@ This type should be used for all charges in the program (electrons, nuclei,
val ( + ) : t -> t -> t @@ -877,8 +877,8 @@ This type should be used for all charges in the program (electrons, nuclei,
val pp : Format.formatter -> t -> unit @@ -888,8 +888,8 @@ This type should be used for all charges in the program (electrons, nuclei,
This module is a wrapper around the Getopt
library and helps to
@@ -945,11 +945,11 @@ Then, define what to do with the arguments:
type short_opt = char +type short_opt = char type long_opt = string type optional = Mandatory | Optional type documentation = string @@ -980,8 +980,8 @@ don't (ls -l
) and for some arguments the argument is optional
All the options are stored in the hash table dict
where the key
@@ -1011,8 +1011,8 @@ Function to create an anonymous argument.
val get : long_opt -> string option @@ -1050,8 +1050,8 @@ Function to create an anonymous argument.
val set_specs : description list -> unit @@ -1066,16 +1066,16 @@ Sets the specifications of the current program from a list of
All constants used in the program.
val epsilon : float @@ -1106,8 +1106,8 @@ All constants used in the program.
val pi : float @@ -1162,8 +1162,8 @@ All constants used in the program.
val a0 : float @@ -1207,8 +1207,8 @@ All constants used in the program.
Coordinates in 3D space. @@ -1221,11 +1221,11 @@ module.
type bohr +type bohr type angstrom type xyz = { @@ -1244,8 +1244,8 @@ module.
val make : 'a point -> t @@ -1282,8 +1282,8 @@ module.
val bohr_to_angstrom : bohr point -> angstrom point @@ -1314,8 +1314,8 @@ module.
val neg : t -> t @@ -1374,7 +1374,7 @@ module. -+Coordinate.neg { x=1. ; y=2. ; z=3. } ;; - : Coordinate.t = -1.0000 -2.0000 -3.0000 @@ -1400,8 +1400,8 @@ Coordinate.(
val pp : Format.formatter -> t -> unit @@ -1417,13 +1417,13 @@ Coordinates can be printed in bohr or angstrom.
type t = private float @@ -1432,8 +1432,8 @@ Coordinates can be printed in bohr or angstrom.
val of_float : float -> t @@ -1453,16 +1453,16 @@ The unsafe variant doesn't do this check.
Contains powers of x, y and z describing the polynomials in atomic basis sets.
type t = private { @@ -1480,8 +1480,8 @@ Contains powers of x, y and z describing the polynomials in atomic basis sets.
val of_int_tuple : int * int * int -> t @@ -1489,7 +1489,7 @@ Contains powers of x, y and z describing the polynomials in atomic basis sets.
+Powers.of_int_tuple (2,3,1);; - : Powers.t = x^2 + y^3 + z^1 @@ -1499,8 +1499,8 @@ Powers.(to_int_tuple (of_int_tuple (2,3,1)));;
val get : Coordinate.axis -> t -> int @@ -1535,7 +1535,7 @@ Powers.(to_int_tuple (of_int_tuple (2,3,1)));; -+Powers.get Coordinate.Y (Powers.of_int_tuple (2,3,1));; - : int = 3 @@ -1549,8 +1549,8 @@ Powers.decr Coordinate.Y (Powers.of_int_tuple (2,3,1));;
val pp : Format.formatter -> t -> unit @@ -1560,8 +1560,8 @@ Powers.decr Coordinate.Y (Powers.of_int_tuple (2,3,1));;
QCaml-specific parameters @@ -1596,8 +1596,8 @@ QCaml-specific parameters
A range is a sorted list of integers in an interval. @@ -1612,8 +1612,8 @@ A range is a sorted list of integers in an interval.
type t @@ -1622,8 +1622,8 @@ A range is a sorted list of integers in an interval.
val of_string : string -> t @@ -1634,8 +1634,8 @@ A range is a sorted list of integers in an interval.
val pp : Format.formatter -> t -> unit @@ -1645,16 +1645,16 @@ A range is a sorted list of integers in an interval.
Electron spin
type t = Alfa | Beta
@@ -1669,8 +1669,8 @@ letters as Beta
, so the alignment of the code is nicer.
val other : t -> t @@ -1683,8 +1683,8 @@ Returns the opposite spin
val pp : Format.formatter -> t -> unit @@ -1694,8 +1694,8 @@ Returns the opposite spin
Utility functions. @@ -1703,8 +1703,8 @@ Utility functions.
external erf_float : float -> float = "erf_float_bytecode" "erf_float" [@@unboxed] [@@noalloc] @@ -1758,8 +1758,8 @@ Utility functions.
external erfc_float : float -> float = "erfc_float_bytecode" "erfc_float" [@@unboxed] [@@noalloc] @@ -1768,8 +1768,8 @@ Utility functions.
external gamma_float : float -> float = "gamma_float_bytecode" "gamma_float" [@@unboxed] [@@noalloc] @@ -1778,8 +1778,8 @@ Utility functions.
val popcnt : int64 -> int @@ -1788,8 +1788,8 @@ Utility functions.
val trailz : int64 -> int @@ -1798,8 +1798,8 @@ Utility functions.
val leadz : int64 -> int @@ -1808,13 +1808,13 @@ Utility functions.
val fact : int -> float @@ -1887,8 +1887,8 @@ Utility functions.
val incomplete_gamma : alpha:float -> float -> float @@ -1945,8 +1945,8 @@ where \(\gamma\) is the incomplete gamma function.
val list_some : 'a option list -> 'a list @@ -1983,8 +1983,8 @@ where \(\gamma\) is the incomplete gamma function.
val array_range : int -> int -> int array @@ -2021,8 +2021,8 @@ where \(\gamma\) is the incomplete gamma function.
val stream_range : int -> int -> int Stream.t @@ -2059,8 +2059,8 @@ where \(\gamma\) is the incomplete gamma function.
val pp_float_array_size : Format.formatter -> float array -> unit @@ -2107,7 +2107,7 @@ where \(\gamma\) is the incomplete gamma function. -+pp_float_array_size: [ 6: 1.000000 1.732051 1.732051 1.000000 1.732051 1.000000 ] @@ -2130,8 +2130,8 @@ pp_bitstring 14:
Encodes the powers of x, y, z in a compact form, suitable for being @@ -2144,7 +2144,7 @@ The small integers x, y and z are stored compactly in this 126-bits space:
-+Left Right 3 [--------------------------------------------------------------] [------------------|---------------|---------------|---------------] x y z @@ -2165,8 +2165,8 @@ The values of x,y,z should be positive and should not exceed 32767 for
type t @@ -2182,8 +2182,8 @@ The values of x,y,z should be positive and should not exceed 32767 for
val of_powers_three : Powers.t -> t @@ -2262,8 +2262,8 @@ The values of x,y,z should be positive and should not exceed 32767 for
val hash : t -> int @@ -2300,8 +2300,8 @@ The values of x,y,z should be positive and should not exceed 32767 for
val pp : Format.formatter -> t -> unit @@ -2311,16 +2311,16 @@ The values of x,y,z should be positive and should not exceed 32767 for
A hash table where the keys are Zkey
include module type of Hashtbl.Make(Zkey)
@@ -2332,7 +2332,7 @@ A hash table where the keys are Zkey
"Gaussian basis sets"
+"Gaussian basis sets"
Set of contracted Gaussians differing only by the powers of \(x\), \(y\) and \(z\), with a
@@ -302,8 +310,8 @@ particular powers of \(x,y,z\) (PrimitiveShell.norm_coef_scale
)
-
type t
@@ -314,47 +322,20 @@ particular powers of \(x,y,z\) (PrimitiveShell.norm_coef_scale
)
val index : t -> int -(** Index in the basis set, represented as an array of contracted shells. *) - -val center : t -> Coordinate.t -(** Coordinate of the center {% $\mathbf{A} = (X_A,Y_A,Z_A)$ %}. *) - -val ang_mom : t -> Angular_momentum.t -(** Total angular momentum : {% $l = n_x + n_y + n_z$ %}. *) - -val size : t -> int -(** Number of contracted functions, {% $n$ %} in the definition. *) - -val contracted_shells: t -> Contracted_shell.t array -(** Array of contracted gaussians *) - -val exponents : t -> float array array -(** Array of exponents {% $\alpha_{ij}$ %}. The first index is the index of - the contracted function, and the second index is the index of the primitive. -*) - -val coefficients : t -> float array array -(** Array of contraction coefficients {% $d_{ij}$ %}. The first index is the index of - the contracted function, and the second index is the index of the primitive. -*) - -val normalizations : t -> float array array -(** Normalization coefficients {% $\mathcal{N}_{ij}$ %}. The first index is the index of - the contracted function, and the second index is the index of the primitive. -*) - -val norm_scales : t -> float array -(** Scaling factors {% $f(n_x,n_y,n_z)$ %}, given in the same order as - [Angular_momentum.zkey_array ang_mom]. *) - -val size_of_shell : t -> int -(** Number of contracted functions in the shell: length of {!norm_coef_scale}. *) - +val ang_mom : t -> Angular_momentum.t +val center : t -> Coordinate.t +val coefficients : t -> float array array +val contracted_shells : t -> Contracted_shell.t array +val exponents : t -> float array array +val index : t -> int +val normalizations : t -> float array array +val norm_scales : t -> float array +val size_of_shell : t -> int +val size : t -> int
PrimitiveShell.norm_coef_scale
)
index
ang_mom
PrimitiveShell.norm_coef_scale
)
ang_mom
size
coefficients
PrimitiveShell.norm_coef_scale
)
coefficients
index
PrimitiveShell.norm_coef_scale
)Scaling factors \(f(n_x,n_y,n_z)\), given in the same order as Angular_momentum.zkey_array ang_mom
.
size
size_of_shell
norm_coef_scale
.PrimitiveShell.norm_coef_scale
)
-+--1.3 Creation
++1.3 Creation
@@ -457,16 +436,171 @@ particular powers of \(x,y,z\) (val make : ?index:int -> Contracted_shell.t array -> t -(** Creates a contracted shell from a list of coefficients and primitives. *) val with_index : t -> int -> t -(** Returns a copy of the contracted shell with a modified index. *)PrimitiveShell.norm_coef_scale
)
+++1.4 Printers
+++++val pp : Format.formatter -> t -> unit ++
+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 t + +open Common ++
val ang_mom : t -> Angular_momentum.t +val atomic_shell_a : t -> Atomic_shell.t +val atomic_shell_b : t -> Atomic_shell.t +val atomic_shell_c : t -> Atomic_shell.t +val atomic_shell_d : t -> Atomic_shell.t +val atomic_shell_pair_p : t -> Atomic_shell_pair.t +val atomic_shell_pair_q : t -> Atomic_shell_pair.t +val contracted_shell_pair_couples : t -> Contracted_shell_pair_couple.t list +val monocentric : t -> bool +val norm_scales : t -> float array +val zkey_array : t -> Zkey.t array ++
ang_mom |
+Total angular momentum of the shell pair couple: sum of the angular momenta of all the shells. | +
atomic_shell_a |
+Returns the first atomic shell of the first shell pair. | +
atomic_shell_b |
+Returns the second atomic shell of the first shell pair. | +
atomic_shell_c |
+Returns the first atomic shell of the second shell pair. | +
atomic_shell_d |
+Returns the second atomic shell of the second shell pair. | +
atomic_shell_pair_p |
+Returns the first atomic shell pair that was used to build the shell pair. | +
atomic_shell_pair_q |
+Returns the second atomic shell pair that was used to build the shell pair. | +
contracted_shell_pair_couples |
+Returns the list of significant contracted shell pair couples. | +
monocentric |
+True if all four atomic shells have the same center. | +
norm_scales |
+Scaling factors of normalization coefficients inside the shell. The ordering is the same as zkey_array . |
+
zkey_array |
+Returns the array of Zkey.t relative to the four shells of the shell pair couple. |
+
val make : ?cutoff:float -> Atomic_shell_pair.t -> Atomic_shell_pair.t -> t option ++
+Default cutoff is \(\epsilon\). +
+ +make |
+Creates an atomic shell pair couple using two atomic shell pairs. | +
val pp : Format.formatter -> t -> unit@@ -477,7 +611,7 @@ particular powers of \(x,y,z\) (
PrimitiveShell.norm_coef_scale
)
diff --git a/docs/gaussian_integrals.html b/docs/gaussian_integrals.html
index b19959d..dd7f4b6 100644
--- a/docs/gaussian_integrals.html
+++ b/docs/gaussian_integrals.html
@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
+
-"Integrals on the Gaussian basis sets"
+"Integrals on the Gaussian basis sets"
"Linear algebra utilities of QCaml libraries."
+"Linear algebra utilities of QCaml libraries."
"Molecular orbitals"
+"Molecular orbitals"
Defines how the core electrons are frozen, for each atom.
type kind = +type kind = | All_electron | Small | Large @@ -272,8 +272,8 @@ Defines how the core electrons are frozen, for each atom.
val make : kind -> Particles.Nuclei.t -> t @@ -309,7 +309,7 @@ Defines how the core electrons are frozen, for each atom. -+let f = Frozen_core.(make Small nuclei) ;; val f : Frozen_core.t = [|0; 2; 2; 0|] @@ -319,8 +319,8 @@ val f : Frozen_core.t = [|0; 2; 2; 0|]
val num_elec : t -> int @@ -349,7 +349,7 @@ val f : Frozen_core.t = [|0; 2; 2; 0|] -+Frozen_core.num_elec f ;; - : int = 4 @@ -359,8 +359,8 @@ Frozen_core.num_mos f ;;
val pp : Format.formatter -> t -> unit @@ -372,7 +372,7 @@ Frozen_core.num_mos f ;;
"Information relative to particles (electrons and nuclei)."
+"Information relative to particles (electrons and nuclei)."
Data structure which contains the number of α and β electrons.
type t +type t
open Common @@ -358,8 +358,8 @@ Data structure which contains the number of α and β electrons.
val charge : t -> Charge.t @@ -408,8 +408,8 @@ Data structure which contains the number of α and β electrons.
val pp : Format.formatter -> t -> unit @@ -418,24 +418,24 @@ Data structure which contains the number of α and β electrons.
Chemical elements.
type t = +type t = |X |H |He |Li|Be |B |C |N |O |F |Ne @@ -452,8 +452,8 @@ Chemical elements.
val of_string : string -> t @@ -514,7 +514,7 @@ Chemical elements. -+Element.of_string "Fe" ;; - : Element.t = Particles.Element.Fe @@ -533,8 +533,8 @@ Element.(to_string Fe);;
val covalent_radius : t -> Non_negative_float.t @@ -583,8 +583,8 @@ Element.(to_string Fe);;
val pp : Format.formatter -> t -> unit @@ -595,30 +595,30 @@ Element.(to_string Fe);;
Atomic mass, a non-negative float.
include module type of Common.Non_negative_float +include module type of Common.Non_negative_float
open Common +open Common type t = (Element.t * Coordinate.t) array@@ -626,12 +626,12 @@ Atomic mass, a non-negative float.
nuclei_lexer.mll
contains the description of the lexemes used in
@@ -684,8 +684,8 @@ rule read_all = parse
xyz_parser.mly
parses nuclear coordinates in xyz format.
@@ -804,8 +804,8 @@ an xyz_file
data structure.
val of_xyz_string : string -> t
@@ -864,8 +864,8 @@ an xyz_file
data structure.
val formula : t -> string
@@ -914,8 +914,8 @@ an xyz_file
data structure.
val pp : Format.formatter -> t -> unit
@@ -924,31 +924,31 @@ an xyz_file
data structure.
Z-matrix representation of nuclear coordinates.
type t +type t
val of_string : string -> t @@ -983,7 +983,7 @@ Z-matrix representation of nuclear coordinates. -+let zmt = Zmatrix.of_string " n n 1 nn @@ -1028,8 +1028,8 @@ H -0.568803 -0.793910 1.726048"
val pp : Format.formatter -> t -> unit @@ -1041,7 +1041,7 @@ H -0.568803 -0.793910 1.726048"
"Perturbation theory"
+"Perturbation theory"
type t @@ -262,8 +262,8 @@
val make : frozen_core:Mo.Frozen_core.t -> Mo.Basis.t -> t @@ -286,7 +286,7 @@ -+let mp2 = Perturbation.Mp2.make ~frozen_core:(Mo.Frozen_core.(make Small nuclei)) mo_basis ;; @@ -295,8 +295,8 @@ val mp2 : Perturbation.Mp2.t = E(MP2)=-0.185523
val energy : t -> float @@ -331,14 +331,14 @@ val mp2 : Perturbation.Mp2.t = E(MP2)=-0.185523 -+
val pp : Format.formatter -> t -> unit @@ -347,14 +347,14 @@ val mp2 : Perturbation.Mp2.t = E(MP2)=-0.185523
"Installs pretty printers for top-level."
+"Installs pretty printers for top-level."