Name

calculateMullikenPopulation Calculates the Mulliken population of each atom in the system.

Synopsis

Namespace: ATK.KohnSham or ATK.TwoProbe
MullikenPopulation calculateMullikenPopulation(self_consistent_calculation)

Description

This function calculates and returns the Mulliken populations (i.e. orbital occupations) of each atom in the system.

List of arguments

self_consistent_calculation

An object returned from a previously performed self-consistent calculation.

Default: None

Returned object methods

The returned object from calculateMullikenPopulation() has the following query method:

  • Array toArray(): Returns the Mulliken population per atom (and per spin if spin-polarized) in a NumPy array. The dimension of the array is (natoms) (spin-unpolarized) and (2,natoms) (spin-polarized), where n is the number of atoms in the system.

Usage examples

from ATK.KohnSham import *

molecule = MoleculeConfiguration(...)
scf = executeSelfConsistentCalculation(molecule)

mulliken = calculateMullikenPopulation(scf).toArray()
elements = molecular.elements()
for (e,m) in zip(elements,mulliken):
    print e.symbol(),m

Notes

When using verbosity level 10, ATK also prints the Mulliken population for each orbital in the basis set to the terminal when this function is called. An example of such an output, where a DZP basis set was used for both H and Au will typically look like this:

%block Results::MullikenPopulations
0 H   q =  1.00000 [ s:  1.014, s: -0.014, y:  0.000, z:  0.000, x:  0.000 ]
1 Au  q = 11.00000 [ s: -0.006, s:  2.006, d(-2):  1.840, d(-1):  1.840,
d(0): 1.331, d(1):  1.840, d(2):  1.331, d(-2):  0.160, d(-1):  0.160,
d(0): 0.169, d(1):  0.160, d(2):  0.169, y:  0.000, z:  0.000, x:  0.000 ]
# ----------------------------------------------------------------
# Total charge = 12
# ----------------------------------------------------------------
%endblock Results::MullikenPopulations

In this example, there are two "s" orbitals for H, which is the "DZ" part of the basis set plus the "P" (polarization) "p" orbitals. For Au, we have two sets of "s" and "d" orbitals (again "DZ") plus a single set of polarization "p" orbitals.

ATK employs solid harmonics to expand the angular part of the basis orbitals. The labels for the orbitals are defined as follows:

Table 5: Mulliken population orbital labels (normalization factors omitted)

l m Label Solid harmonic
0 0 s 1
1 -1 py y
1 0 pz z
1 +1 px x
2 -2 d(-2) xy
2 -1 d(-1) yz
2 0 d(0) 2z2-(x2+y2)
2 +1 d(1) xz
2 +2 d(2) x2-y2
3 -3 f(-3) y(3x2-y2)
3 -2 f(-2) xyz
3 -1 f(-1) y(4z2-x2-y2)
3 0 f(0) z(2z2-3x2-3y2)
3 +1 f(1) x(4z2-x2-y2)
3 +2 f(2) z(x2-y2)
3 +3 f(3) x(x2-3y2)