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