Constructor for the MullikenPopulation object.
The Configuration which the Mulliken population should be calculated for.
Type: DeviceConfiguration | BulkConfiguration, | MoleculeConfiguration.
Default:
None
A MullikenPopulation object provides the following methods:
atomicAngles(): Return the atomic polarization angles.
atoms(spin): Return an array with the Mulliken population of each atom.
bond(atom_i, atom_j, spin): Return a float which is the Mulliken population projected onto the bond between atom_i and atom_j
Index of the first atom in the bond projection.
Type: Integer between zero and the number of atoms.
Index of the second atom in the bond projection.
Type: Integer between zero and the number of atoms.
The mulliken population is calculated for this spin.
Type: Spin.Up | Spin.Down | None
nlprint(stream): Print a string containing an ASCII table useful for plotting the molecular
energy spectrum.
orbitals(spin): Return a list of arrays. The array in entry atom_i holds the Mulliken population of the orbitals on atom i
spins(): Return the spins available in this Mulliken population
Calculate the Mulliken population of an ammonia molecule and print projections of orbitals and bonds.
# Set up configuration
molecule_configuration = MoleculeConfiguration(
elements=[Nitrogen, Hydrogen, Hydrogen, Hydrogen],
cartesian_coordinates= [[ 0. , 0. , 0.124001],
[ 0. , 0.941173, -0.289336],
[ 0.81508 , -0.470587, -0.289336],
[-0.81508 , -0.470587, -0.289336]]*Angstrom )
# Define the calculator
calculator = HuckelCalculator()
molecule_configuration.setCalculator(calculator)
# Calculate and save the mulliken population
mulliken_population = MullikenPopulation(
configuration=molecule_configuration)
nlsave('mulliken.nc', mulliken_population)
# print all occupations
nlprint(mulliken_population)
#print partial occupations of N
print 'N ',mulliken_population.atoms()[0],
print ' | ',mulliken_population.orbitals()[0]
print
#print partial occupations of first H
print 'H ',mulliken_population.atoms()[1],
print ' | ',mulliken_population.orbitals()[1]
print
#print mulliken population of N-H bond
print 'N-H bond ',mulliken_population.bond(0,1)
The total number of electrons,
, is given by
where
is the Density Matrix,
the overlap matrix, and the sum is over all orbitals in the system.
The Mulliken population is defined by different partitions of this sum into orbitals, atoms and bonds.
The Mulliken Population of orbitals,
, is defined by restricting one of the sum indexes to the orbital, i.e.
The Mulliken Population of atoms,
, is defined by adding up all the orbital contributions on atom number
The Mulliken Population of bonds,
, is defined by restricting the sum indexes to the orbitals on atom number
and
, i.e.
Note the factor two, which ensures
For noncollinear systems the atom mulliken population is a four component spin tensor
The atom Mulliken Population can be diagonalized to give a local spin direction, and this direction is reported by the nlprint command for noncollinear systems.
The nlprint report for noncollinear spin also shows the orbital mulliken populations in the local spin direction.