QuantumATK Forum
QuantumATK => General Questions and Answers => Topic started by: Nayab Shiraz on April 2, 2020, 16:41
-
Hello everyone
I need some information about what negative mulliken population means? Also in general how to calculate charge transfer from Mulliken population analysis?
-
Hi Nayab,
Mulliken population is not supposed to be negative, but I have seen this happening in few circumstances in which the population was supposed to be zero, such as when using ghost atoms. Could you attach a sample of your input file that shows the problem ?
Best
Daniele
-
# -*- coding: utf-8 -*-
# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------
# Set up lattice
vector_a = [17.8336117435, 0.0, 0.0]*Angstrom
vector_b = [0.0, 17.8336117435, 0.0]*Angstrom
vector_c = [0.0, 0.0, 4.26258]*Angstrom
lattice = UnitCell(vector_a, vector_b, vector_c)
# Define elements
elements = [Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon,
Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon,
Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon,
Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon,
Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon]
# Define coordinates
fractional_coordinates = [[ 0.719630545292, 0.5 , 0.666666666667],
[ 0.708881061277, 0.567869570979, 0.833333333333],
[ 0.719630545292, 0.5 , 0.333333333333],
[ 0.677684843625, 0.629095595475, 0.666666666667],
[ 0.629095595475, 0.677684843625, 0.833333333333],
[ 0.708881061277, 0.567869570979, 0.166666666667],
[ 0.677684843625, 0.629095595475, 0.333333333333],
[ 0.567869570979, 0.708881061277, 0.666666666667],
[ 0.5 , 0.719630545292, 0.833333333333],
[ 0.629095595475, 0.677684843625, 0.166666666667],
[ 0.567869570979, 0.708881061277, 0.333333333333],
[ 0.432130429021, 0.708881061277, 0.666666666667],
[ 0.370904404525, 0.677684843625, 0.833333333333],
[ 0.5 , 0.719630545292, 0.166666666667],
[ 0.432130429021, 0.708881061277, 0.333333333333],
[ 0.322315156375, 0.629095595475, 0.666666666667],
[ 0.291118938723, 0.567869570979, 0.833333333333],
[ 0.370904404525, 0.677684843625, 0.166666666667],
[ 0.322315156375, 0.629095595475, 0.333333333333],
[ 0.280369454708, 0.5 , 0.666666666667],
[ 0.291118938723, 0.432130429021, 0.833333333333],
[ 0.291118938723, 0.567869570979, 0.166666666667],
[ 0.280369454708, 0.5 , 0.333333333333],
[ 0.322315156375, 0.370904404525, 0.666666666667],
[ 0.370904404525, 0.322315156375, 0.833333333333],
[ 0.291118938723, 0.432130429021, 0.166666666667],
[ 0.322315156375, 0.370904404525, 0.333333333333],
[ 0.432130429021, 0.291118938723, 0.666666666667],
[ 0.5 , 0.280369454708, 0.833333333333],
[ 0.370904404525, 0.322315156375, 0.166666666667],
[ 0.432130429021, 0.291118938723, 0.333333333333],
[ 0.567869570979, 0.291118938723, 0.666666666667],
[ 0.629095595475, 0.322315156375, 0.833333333333],
[ 0.5 , 0.280369454708, 0.166666666667],
[ 0.567869570979, 0.291118938723, 0.333333333333],
[ 0.677684843625, 0.370904404525, 0.666666666667],
[ 0.708881061277, 0.432130429021, 0.833333333333],
[ 0.629095595475, 0.322315156375, 0.166666666667],
[ 0.677684843625, 0.370904404525, 0.333333333333],
[ 0.708881061277, 0.432130429021, 0.166666666667]]
# Set up configuration
bulk_configuration = BulkConfiguration(
bravais_lattice=lattice,
elements=elements,
fractional_coordinates=fractional_coordinates
)
# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
k_point_sampling = MonkhorstPackGrid(
nc=6,
)
numerical_accuracy_parameters = NumericalAccuracyParameters(
density_mesh_cutoff=55.0*Hartree,
k_point_sampling=k_point_sampling,
)
calculator = LCAOCalculator(
numerical_accuracy_parameters=numerical_accuracy_parameters,
)
bulk_configuration.setCalculator(calculator)
nlprint(bulk_configuration)
bulk_configuration.update()
nlsave('(10,0) Carbon Nanotube.hdf5', bulk_configuration)
# -------------------------------------------------------------
# Mulliken Population
# -------------------------------------------------------------
mulliken_population = MullikenPopulation(bulk_configuration)
nlsave('(10,0) Carbon Nanotube.hdf5', mulliken_population)
nlprint(mulliken_population)
-
For example, I wrote a simple script above where I calculate Mulliken population for CNT(10,0). Even in this one some shells have negative numbers.
-
Mulliken populations are a rather crude tool, it's more a numerical thing than a physical concept. So negative numbers for shells is not too uncommon. What were you intending to use the numbers for`? Are the negative values small or large? Maybe increasing the k-point in C improves it a bit, your value is rather low for a 4.3 Å long cell, but I am not sure about the relation to Mulliken exactly (would actually be interesting if there is a relation, so please report back).