Author Topic: DOS for bulk  (Read 15004 times)

0 Members and 1 Guest are viewing this topic.

Offline tigeryzz

  • Heavy QuantumATK user
  • ***
  • Posts: 34
  • Reputation: 0
    • View Profile
DOS for bulk
« on: June 27, 2009, 09:49 »
hi, Anders,
I just found that i can only calculate the band of a bulk material, but cannot get its Density of States.
i think that once we get the eigenvalue, the dos can be known by integral. but i do not know if it is complex.
could you please offer me a script to calculate the DOS ?

Offline Nordland

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 812
  • Reputation: 18
    • View Profile
Re: DOS for bulk
« Reply #1 on: June 28, 2009, 06:49 »
Hey Tigerzz.

I have once posted this script for calculating the bandstructure for bulk.
You can find the post here.

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5418
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
DOS for 1D systems
« Reply #2 on: June 29, 2009, 17:04 »
For 1D systems, the bulk DOS script is a bit of an overkill (plus it doesn't work ;) ). You can just use a simple histogram approach instead. I have attached a script that computes the 1D DOS. It requires a few parameters, like how many k-points to use for the band structure, how many energy points to sample in the histogram, etc. There is also an option to compute a Gaussian or Lorentzian broadened DOS, which sometimes gives nicer pictures. I hope it's relatively self-explanatory, but here is a concrete example, which assumes that I have a converged carbon nanotube (4,4) checkpoint file called cnt44.nc. (By the way, the DOS script assumes the systems is 1D in the Z direction; it's trivial to modify for other directions, however.)
Code
from ATK.KohnSham import *
import dos1d

# =====================================================
scf_filename = 'cnt44.nc'
num_k_points = 200          # Number of k-points from 0 to pi/a along z
num_E_points = 100          # Number of energy points in the histogram
Emin = -10*eV                 # Energy interval
Emax =  10*eV                 # Can also be None, for automatic interval
broadening = 0.025*eV      # Energy broadening
# =====================================================

scf = restoreSelfConsistentCalculation(scf_filename)

kpoints,bandstructure = dos1d.calculate_bandstructure(scf,num_k_points)

DOS,energies = dos1d.calculateDOS1D(bandstructure,num_E_points,Emin,Emax)

# Or, compute the corresponding broadened DOS
#DOS_bG = dos1d.DOS1DGaussianBroadening(DOS,energies,broadening)
#DOS_bL = dos1d.DOS1DLorentzianBroadening(DOS,energies,broadening)

dos1d.plot_DOS(DOS,energies,'dos.png')
I have also attached a picture of the computed DOS for my nanotube! Have fun with it! One probably needs to play around with the k-point sampling and number of energy points, and the broadening, to get really nice pictures. 100 energy-points was fine for the nanotube, 1000 too many (you get noise), although I didn't try if more broadening would remove it...

Offline zdhlover

  • Global Moderator
  • QuantumATK Guru
  • *****
  • Posts: 106
  • Reputation: 2
    • View Profile
Re: DOS for bulk
« Reply #3 on: June 29, 2009, 17:36 »
 ;D ;D ;D your magic is so wizardly ,I have learn more from you .
  
After I see the 1D Dos's interpreter ,and I think may be you can  expand this moehtod to compute the molecular(central region)'s Dos easily ?

hope your good news
 
 
 

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5418
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
Re: DOS for bulk
« Reply #4 on: June 29, 2009, 18:29 »
You need to specify a bit clearer what you would like, since there is no standard definition of the DOS for the central region.

It would be quite easy to take a molecular energy spectrum, with its isolated peaks, and apply a Gaussian broadening to them. Would it be something like that you are looking for?

Offline tigeryzz

  • Heavy QuantumATK user
  • ***
  • Posts: 34
  • Reputation: 0
    • View Profile
Re: DOS for bulk
« Reply #5 on: June 30, 2009, 02:22 »
Thank you very much , dear Anders.

I'll try it!

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5418
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
MPSH DOS
« Reply #6 on: June 30, 2009, 10:10 »
Some people have asked how to plot the DOS like in APL 94, 173110 (2009).

Although it's not explained in detail how the DOS in Fig. 2a is calculated, a reasonable guess is that they have just taken the MPSH spectrum and applied some broadening to the peaks. Attached is a script that shows how to do this!

The only thing you need to do, to use this script to calculate the "MPSH DOS" is to specify, at the top of the script,

  • Name of the two-probe checkpoint file (with full path, esp. important if you run the script from VNL)
  • MPSH projection atoms
  • Broadening (values in the range 0.025-0.1 eV seem reasonable)
  • Energy resolution (something like 0.1 eV)

Then run the script, either from the command line or by dropping it on the Job Manager in VNL, and pipe the output to a file (or copy the contents of the Log Window in VNL) into the plotting program of your choice.

The output will be two columns, with energy (in eV) and DOS (in a.u.).

Attached is a picture showing the result (plotted in GNUPlot) for Li-H2-Li (projected on the two H atoms, parameters as in the script).

Offline zdhlover

  • Global Moderator
  • QuantumATK Guru
  • *****
  • Posts: 106
  • Reputation: 2
    • View Profile
Re: DOS for bulk
« Reply #7 on: June 30, 2009, 10:30 »
 :D :D :D  First ,Thanks for your hard work in holiday .
In the article they have saturated the central region by hydrogen atoms ,then  I think that you do  may be  not same as the article did (but your work may be useful for other situations).
Onlyway I think your work it's very close to it ,you may  write a script like this to compute the Dos by using the moelecular energy spectrum which can calculate inATK.

thanks a lot ,wish a good day!
« Last Edit: June 30, 2009, 10:34 by zdhlover »

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5418
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
Re: DOS for bulk
« Reply #8 on: June 30, 2009, 10:43 »
I think the only difference is which atoms you choose to project on.

The script will work also for a pure molecule, with minor adjustments.

Offline zdhlover

  • Global Moderator
  • QuantumATK Guru
  • *****
  • Posts: 106
  • Reputation: 2
    • View Profile
Re: DOS for bulk
« Reply #9 on: June 30, 2009, 10:51 »
 :)    The hydrogen atoms of which saturated the central region didn't include in the origin one ,so I think the script that can compute the molecular's Dos  hve more ways to use?
 :) :)

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5418
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
Re: DOS for bulk
« Reply #10 on: June 30, 2009, 10:54 »
As I said, it's really just matter of which atoms you select to project on. You can include or exclude the H atoms, and a certain number of C atoms (you probably don't want them all anyway), it's entirely up to you, and you just need to modify the "projection_atoms" parameter.

Offline zdhlover

  • Global Moderator
  • QuantumATK Guru
  • *****
  • Posts: 106
  • Reputation: 2
    • View Profile
Re: DOS for bulk
« Reply #11 on: June 30, 2009, 11:16 »
oh ,I am so sorry to bother you that I didn't say clearly about the question.
after I check the MPSH_DOS_broaden.py ,I know what you mean . And I know how can calculate the molecular's Dos by modify the script.
 
Thanks a lot !

By the way ,the MPSH's Dos that you write is also very useful ,and I have seen many times in other articles. And through these discuss I know many about that how to expand the function by using the internal ATK's function.

Offline xhsh

  • Heavy QuantumATK user
  • ***
  • Posts: 32
  • Reputation: 0
    • View Profile
Re: MPSH DOS
« Reply #12 on: July 3, 2009, 08:26 »
Some people have asked how to plot the DOS like in APL 94, 173110 (2009).

Although it's not explained in detail how the DOS in Fig. 2a is calculated, a reasonable guess is that they have just taken the MPSH spectrum and applied some broadening to the peaks. 
...

In my opinion, in the article APL 94, 173110 (2009), the DOS is not obtained by MPSH.  It is obtained by SIESTA or ATK for molecular calculations. And it is not for the central region in a two probe structure. It is calculated for the scattering region as an isolated unit which means it is dealt as a molecule.

In earlier versions of ATK, like ATK-2.0.4, the PDOS of the molecule and the DOS of central region is a standard output together with the transmission.  The latest version of ATK do not provide these?

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5418
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
Re: DOS for bulk
« Reply #13 on: July 3, 2009, 10:31 »
You are perhaps right, but for the broadening and plotting it doesn't matter where the molecular spectrum comes from :)

The ability to compute the full DOS is included as a standard function in ATK (see the manual), while there is a Forum post on how to obtain the PDOS (see http://quantumwise.com/forum/index.php?topic=69.0).

Offline jiangning198511

  • New QuantumATK user
  • *
  • Posts: 1
  • Reputation: 0
    • View Profile
Re: DOS for 1D systems
« Reply #14 on: July 6, 2009, 08:04 »
For 1D systems, the bulk DOS script is a bit of an overkill (plus it doesn't work ;) ). You can just use a simple histogram approach instead. I have attached a script that computes the 1D DOS. It requires a few parameters, like how many k-points to use for the band structure, how many energy points to sample in the histogram, etc. There is also an option to compute a Gaussian or Lorentzian broadened DOS, which sometimes gives nicer pictures. I hope it's relatively self-explanatory, but here is a concrete example, which assumes that I have a converged carbon nanotube (4,4) checkpoint file called cnt44.nc. (By the way, the DOS script assumes the systems is 1D in the Z direction; it's trivial to modify for other directions, however.)
Code
from ATK.KohnSham import *
import dos1d

# =====================================================
scf_filename = 'cnt44.nc'
num_k_points = 200          # Number of k-points from 0 to pi/a along z
num_E_points = 100          # Number of energy points in the histogram
Emin = -10*eV                 # Energy interval
Emax =  10*eV                 # Can also be None, for automatic interval
broadening = 0.025*eV      # Energy broadening
# =====================================================

scf = restoreSelfConsistentCalculation(scf_filename)

kpoints,bandstructure = dos1d.calculate_bandstructure(scf,num_k_points)

DOS,energies = dos1d.calculateDOS1D(bandstructure,num_E_points,Emin,Emax)

# Or, compute the corresponding broadened DOS
#DOS_bG = dos1d.DOS1DGaussianBroadening(DOS,energies,broadening)
#DOS_bL = dos1d.DOS1DLorentzianBroadening(DOS,energies,broadening)

dos1d.plot_DOS(DOS,energies,'dos.png')
I have also attached a picture of the computed DOS for my nanotube! Have fun with it! One probably needs to play around with the k-point sampling and number of energy points, and the broadening, to get really nice pictures. 100 energy-points was fine for the nanotube, 1000 too many (you get noise), although I didn't try if more broadening would remove it...
Hi Anders Blom i want to calculate a spin polarized 1D systems DOS,How can i use you script to accomplice achieve it. thank you