Charge Decomposition Analysis
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.