Author Topic: How can we get the magnetic moment of each atoms from MullikenPopulation?  (Read 4903 times)

0 Members and 1 Guest are viewing this topic.

Offline alan

  • Regular QuantumATK user
  • **
  • Posts: 23
  • Reputation: 0
    • View Profile
 Hi,
i have got the MullikenPopulation,
 -----------------------------------------------------------------------------
# Mulliken Population
# -----------------------------------------------------------------------------
# Index      Population (Up,Down)
    c       0   (  1.8061 ,  2.0663 )
    c       1   (  2.0075 ,  1.9499 )
    c       2   (  1.9609 ,  2.0365 )
    c       3   (  2.0253 ,  1.9804 )
    c       4   (  1.9804 ,  2.0253 )
    c       5   (  2.0365 ,  1.9609 )
    c       6   (  1.9499 ,  2.0075 )
    c       7   (  2.0663 ,  1.8061 )
    H       8   (  0.5873 ,  0.5797 )
    H       9   (  0.5797 ,  0.5873 )
how can i get the magnetic moment of each atoms ,the system is the unit cell of zigzig carbon nanoribbon.
Thanks.

Offline zh

  • QuantumATK Support
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 1141
  • Reputation: 24
    • View Profile
It is quite simple. The Mulliken Population is one of analysis methods to give the electron location on atoms. The population-up and population-down correspond to the spin-up and spin-down electrons localized on atom, respectively. So the local magnetic moment (M) of atom can be estimated as followings:

M = population-up  -  population-down

For example, the local magnetic moment of the atom with index 0:  1.8061 - 2.0663  [tex]\mu B[/tex]


Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5429
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
If you're looking for a general way to subtract the populations, use the following code (adjust to fit your script variables):
Code
import ATK
ATK.setVerbosityLevel(10)
# When we compute the populations under verbosity 10, they are printed to the screen!
pop = calculateMullikenPopulation(scf)
# Majority and minority populations
maj_pops = pop._population()[0]
min_pops = pop._population()[1]
# Magnetic moments
moments = maj_pops-min_pops
print "Magnetic moments (in muB)"
print "="*25
for i in range(len(moments)):
    print i,moments[i]
The code can be made a bit simpler, but this way it should be clear what's going on!