Charge Decomposition Analysis

From cclib
Jump to: navigation, search

The Charge Decomposition Analysis (CDA) as developed by Gernot Frenking et al. is used to study the donor-acceptor interactions of a molecule in terms of two user-specified fragments.

The CDA class available from cclib.method performs this analysis:

from cclib.parser import ccopen
from cclib.method import CDA

molecule = ccopen("molecule.log")
frag1 = ccopen("fragment1.log")
frag2 = ccopen("fragment2.log")

# if using CDA from an interactive session, it's best
# to parse the files at the same time in case they aren't
# parsed immediately---go get a drink!

m = molecule.parse()
f1 = frag1.parse()
f2 = frag2.parse()

cda = CDA(m)
cda.calculate([f1, f2])

After calculate() finishes, there should be the donations, bdonations (back donation), and repulsions attributes to the cda instance. These attributes are simply lists of 1-dimensional Numeric arrays corresponding to the restricted or alpha/beta molecular orbitals of the entire molecule. Additionally, the CDA method involves transforming the atomic basis functions of the molecule into a basis using the molecular orbitals of the fragments so the attributes mocoeffs and fooverlaps are created and can be used in population analyses such as Mulliken or C-squared (see Fragment Analysis for more details).

There is also a script provided by cclib that performs the CDA from a command-line:

$ cda molecule.log fragment1.log fragment2.log
Charge decomposition analysis of molecule.log

 MO#      d       b       r
   1:  -0.000  -0.000  -0.000
   2:  -0.000   0.002   0.000
   3:  -0.001  -0.000   0.000
   4:  -0.001  -0.026  -0.006
   5:  -0.006   0.082   0.230
   6:  -0.040   0.075   0.214
   7:   0.001  -0.001   0.022
   8:   0.001  -0.001   0.022
   9:   0.054   0.342  -0.740
  10:   0.087  -0.001  -0.039
  11:   0.087  -0.001  -0.039
------ HOMO - LUMO gap ------
  12:   0.000   0.000   0.000
  13:   0.000   0.000   0.000



  • Only molecular orbitals with non-zero occupancy will have a non-zero value.
  • The absolute values of the calculated terms have no physical meaning and only the relative magnitudes, especially for the donation and back donation terms, are of any real value (Frenking, et al.)
  • The atom coordinates in molecules and fragments must be the same, which is usually accomplished with an argument in the QM program (the NoSymm keyword in Gaussian, for instance).
  • The current implementation has some subtle differences than the code from the Frenking group. The CDA class in cclib follows the formula outlined in one of Frenking's CDA papers, but contains an extra factor of 2 to give results that agree with those from the original CDA program. It also doesn't include negligible terms (on the order of 10^-6) that result from overlap between MOs on the same fragment that appears to be included in the Frenking code. Contact atenderholt (at) gmail (dot) com for discussion and more information.
Personal tools