User Tools

Site Tools


crawdad:programming:project6

Programming Project #6: A Perturbative Triples Correction to CCSD: CCSD(T)

The CCSD(T) method is often referred to as the “gold standard” of quantum chemistry for its high accuracy and reliability. The purpose of this project is to illustrate the fundamental aspects of an efficient implementation of the (T) energy correction. This project builds upon the results of Project #5 (CCSD).

The spin-orbital expression for the (T) correction, using the same notation as in Project #5, is:

$$E_{\rm (T)} = \frac{1}{36} \sum_{ijkabc} t_{ijk}^{abc}(c) D_{ijk}^{abc} \left[ t_{ijk}^{abc}(c) + t_{ijk}^{abc}(d) \right],
$$

where

$$D_{ijk}^{abc} = f_{ii} + f_{jj} + f_{kk} - f_{aa} - f_{bb} - f_{cc},
$$

the “disconnected” triples are defined as

$$D_{ijk}^{abc} t_{ijk}^{abc}(d) = P(i/jk) P(a/bc) t_i^a \langle jk || bc \rangle,
$$

and the “connected” triples as

$$D_{ijk}^{abc} t_{ijk}^{abc}(c) = P(i/jk) P(a/bc) \left[ \sum_e t_{jk}^{ae} \langle ei||bc \rangle - \sum_m t_{im}^{bc} \langle ma||jk \rangle \right].
$$

The three-index permutation operator is defined by its action on an algebraic function as

$$P(p/qr) f(pqr) = f(pqr) - f(qpr) - f(rqp).
$$

The total energy is

$$E_{\rm total} = E_{\rm SCF} + E_{\rm CCSD} + E_{\rm (T)}.
$$

Algorithm #1: Full Storage of Triples

The most straightforward approach to evaluation of the (T) energy correction is to compute and store explicitly the connected and disconnected triples and plug them into the energy expression above. Store the triples amplitudes as six-dimensional arrays over occupied and virtual spin orbitals.

Algorithm #2: Avoided Storage of Triples

Note that each T3 amplitude depends on all the T1 and T2 amplitudes, not on other triples. This suggests that the calculation of the T3 amplitudes appearing in the energy expression could proceed one amplitude at a time:

Loop over i
  Loop over j
    Loop over k
      Loop over a
        Loop over b
          Loop over c

          Compute connected and disconnected T3 amplitudes for current i,j,k,a,b,c combination

          Calculate contribution of these T3 amplitudes to the (T) energy

          End c loop
        End b loop
      End a loop
    End k loop
  End j loop
End i loop

This algorithm reduces the storage (memory and disk) requirements of the (T) correction considerably. One can conceive of other approaches as well, including calculations of batches of T3 amplitudes (rather than one at a time) to improve floating-point performance. For example:

Loop over i
  Loop over j
    Loop over k

      Compute all T3 amplitudes (all a,b,c combinations) for current i,j,k

      Calculation contribution of these T3 amplitudes to the (T) energy

    End k loop
  End j loop
End i loop

This approach requires more storage (on the order v3) than the one-at-a-time approach, but can be considerably faster of modern high-performance computers. A good discussion of the most efficient algorithm can be found in A. P. Rendell, T. J. Lee, A. Komornicki, Chem. Phys. Lett. 178, 462-470 (1991).

Test Cases

The input structures, integrals, etc. for these examples may be found in Project #3 and the CCSD energies in Project #5.

STO-3G Water output
DZ Water output
DZP Water output
STO-3G Methane output
crawdad/programming/project6.txt · Last modified: 2011/07/05 20:40 by crawdad