GAUSS_DFG directory
-------------------
The files in this directory are designed to assist with the problem of ensuring
that the interfaces between CASINO and various Gaussian basis set codes such as
Gaussian09, CRYSTAL, GAMESS, Turbomole, Molpro etc. are correctly implemented
for supported higher angular momentum Gaussian functions (d, f, and g), and
also that the CASINO orbital evaluators for such functions are correct. One can
hopefully assume that s, sp, and p are done correctly.
Any implementer of a new Gaussian interface - if the CASINO developers are to
acknowledge the external code as 'supported' - must produce three sets of files
for the methane molecule; one with *only* d functions in the basis, one with
only f functions, and one with only g. A 'set of files' in this context means
an input and output file for the generating program, a gwfn.data CASINO
Gaussian wave function file produced with that input, and a VMC-HF output file
produced by CASINO using that gwfn.data. To do this, one should simply change
the format of the existing CRYSTAL files in this directory which have suitable
exponents and contraction coefficients (the provided CASINO input file provided
may be re-used for the VMC calculations). It is required that the CASINO VMC-HF
run with no Jastrow factor reproduces the Hartree-Fock energy reported by the
generating program.
Derivatives of higher angular momentum harmonic Gaussians become incredibly
complicated very quickly. The conventions for normalization and how to treat
the numerical factors in the real solid harmonics are also complicated
and easily confused. This document attempts to clarify matters.
Reference expressions
---------------------
The CASINO orbital evaluators were originally written to take input from
CRYSTAL, and we therefore use the conventions of that program.
For reference, the second column of the following tables shows the forms of the
real solid harmonics as assumed by CASINO. These are taken from p. 170 of the
'orange book' of the CRYSTAL program 'HF ab initio treatment of crystalline
systems' by C. Pisani, R. Dovesi, and C. Roetti 1988, which is freely
downloadable from Springer; the relevant appendix is available from my website
at :
https://casinoqmc.net/crystal_sold_harmonics.pdf
The third column below shows these formulae as printed in the current CRYSTAL09
manual, which randomly include or omit the numerical factors (the conversion
factor between the two columns is given as O-->C below. At least one entry (the
d 2,2) seems to be incorrect in the CRYSTAL09 manual, in the sense that it does
not differ from the Orange book version by a simple multiplicative factor.
d functions
-----------
l,m Orange book (and CASINO) CRYSTAL manual O-->C
2,0 0.5 * (3z^2 - r^2) 3z^2 - r^2 * 2
2,1 3xz 3xz
2,-1 3yz 3yz
2,2 3(x^2-y^2) 3(x^2+y^2) INCORRECT?
2,-2 6xy 3xy * 0.5
f functions
-----------
l,m Orange book (and CASINO) CRYSTAL manual O-->C
3,0 z^3 - 3/2 * (x^2z + y^2z) 2z^3 - 3 * (x^2z + y^2z) * 2
3,1 6 * xz^2 - 3/2 * (x^3 + xy^2) 4xz^2 - x^3 - xy^2 * 2/3
3,-1 6 * yz^2 - 3/2 * (x^2y + y^3) 4yz^2 - x^2y - y^3 * 2/3
3,2 15 * (x^2z - y^2z) x^2z - y^2z * 1/15
3,-2 30 * xyz xyz * 1/30
3,3 15 * x^3 - 45 * xy^2 x^3 - 3xy^2 * 1/15
3,-3 45 * x^2y - 15 * y^3 3x^2y - y^3 * 1/15
g functions (not actually implemented in CRYSTAL)
-----------
l,m Orange book (and CASINO)
4,4 105 * x^4 - 630 * x^2y^2 + 105 * y^4
4,3 105 * x^3z - 315 * xy^2z
4,2 -15/2 * x^4 + 45 * x^2z^2 + 15/2 * y^4 - 45 * y^2z^2
4,1 -15/2 * x^3z - 15/2 * xy^2z + 10 * xz^3
4,0 3/8 * x^4 + 3/4 * x^2y^2 - 3 * x^2z^2 + 3/8 * y^4 - 3 * y^2z^2 + z^4
4,-1 -15/2 * x^2yz - 15/2 * y^3z + 10 * yz^3
4,-2 -15 * x^3y - 15 * xy^3 + 90 xyz^2
4,-3 315 * x^2yz - 105 * y^3z
4,-4 420 * x^3y - 420 * xy^3
We do not need to write down here expressions for the first and second
derivatives since CASINO will do a numerical check that its analytic
expressions are the correct derivatives of the formulae above (irrespective of
whether or not the above formulae are correct). To do this check, set the
'wfcheck' keyword in input to be 'T'.
One historical CASINO inconsistency which may be easily overlooked:
Constant numerical factors in the real solid harmonics e.g. the '3' in the 3xy
d function, or '15' in the (15x^3-45^xy2) f function, may be premultiplied into
the orbital coefficients so that CASINO doesn't have to e.g. multiply by 3
every time it evaluates that particular d function. In practice the CASINO
orbital evaluators do this only for d functions, but *not for f and g* (this
may or may not be changed in the future if it can be done in a
backwards-consistent way)
Normalization
-------------
One needs to very aware of the conventions for doing this used by other codes,
since the way things are arranged and stored are often very peculiar. Let's
begin by writing down the general principles and the relevant formulae:
(1) The orbitals are given by an expression of
the form
Sum (orbital coefficients * basis functions)
(2) In general the basis functions are linear combinations ('contractions') of
simple harmonic Gaussian-type functions (GTFs); the coefficients in the linear
combination are the 'contraction coefficients', and the (polynomial *
exp(-alpha*r^2) functions being combined are referred to as 'primitive
Gaussians' or 'primitives'.
(3) A contracted GTF in the input file looks like, e.g.:
0 4 3 1.0 1.0
10.1787046997423421309 0.00059884370424923467
2.39526407180282360689 -0.09809424339784892573
1.04864968631957502892 0.94847150361269593480
in CRYSTAL, or
F 3 1.0
10.1787046997423421309 0.00059884370424923467
2.39526407180282360689 -0.09809424339784892573
1.04864968631957502892 0.94847150361269593480
in Gaussian09.
The '4' in the CRYSTAL input is a code, meaning 'f function' (this is stated
more explicitly in the Gaussian09 input). The first column gives the exponents
of the three primitives, the second column the contraction coefficients. Note
also that this information only gives the radial part; the contraction in fact
represents a 'shell' of 7 different basis functions representing the 7
different possible m values when l=4. The 'm-dependence' comes from the
multiplication of each primitive Gaussian by the solid harmonic for that m (see
the pojynomials in the above tables).
Note that this means that stuff which is stored in an array indexed by the
shell (such as the contraction coefficients) cannot contain any m-dependence.
(4) One must normalize both the individual primitives, and the whole
contraction so that overlap integrals come out right.
The normalization constant N_cont for the whole contraction (in which the
contraction coefficient for the ith primitive is d_i, and the exponent is a_i)
is given by:
1
N_cont = ---------------------------------------------------------
2 * root (a_i * a_j )
sqrt [ sum_ij d_i d_j ( --------------------- )^(l+3/2) ]
a_i + a_j
This is clearly independent of m.
Next the normalization constant N_prim for the individual primitives (split
into two parts, with all the m-dependence in the second one):
root[2^(l+3/2) * alpha^(l+3/2)] 2^l
N_prim = ------------------------------- * root -------- (m-independent)
pi^(3/4) (2l-1)!!
(2 - delta_m,0) * (l - |m|)!
* root ------------------------------ (m-dependent)
(l + |m|)!
where delta_m,0 is the Kronecker delta.
In the API for the CRYSTAL program N_cont and the first part of N_prim are
multiplied into the Gaussian contraction coefficients, but the m-dependent part
- which could in principle be multiplied into the orbital coefficients, is
simply omitted. (Our CASINO conversion utilities manually add the m-dependent
normalization factor before writing gwfn.data). In addition all the contraction
coefficients are multiplied by pi^(5/8) * 2^(1/4), as this is useful in
computing overlap integrals; as far as I can tell without looking at the source
code, the orbital coefficients must be multiplied by the reciprocal of this.
You can see how complicated things can get..
The m-dependent factors for the different shells are, which must be added
manually by the CRYSTAL-->CASINO converter are:
d functions
-----------
l,m
---
2,0 root 1*2/2 = 1
2,1 root 2*1/6 = 1/root(3)
2,-1 = 1/root(3)
2,2 root 2*1/24 = 1/root(12) = 1/(2*root3)
2,-2 = 1/root(12) = 1/(2*root3)
f_functions
-----------
l,m
---
3,0 root 1*6/6 = 1
3,1 root 2*2/24 = 1/root(6)
3,-1 = 1/root(6)
3,2 root 2*1/120 = 1/root(60)
3,-2 = 1/root(60)
3,3 root 2*1/720 = 1/root(360)
3,-3 = 1/root(360)
g functions
-----------
4,0 root 1*24/24 = 1
4,1 root 2*6/120 = 1/root(10)
4,-1 = 1/root(10)
4,2 root 2*2/720 = 1/root(180)
4,-2 = 1/root(180)
4,3 root 2*1/5040 = 1/root(2520)
4,-3 = 1/root(2520)
4,4 root 2*1/40320 = 1/root(20160)
4,-4 = 1/root(20160)
Enjoy!
MDT 11.2013