QuantumATK Forum

QuantumATK => General Questions and Answers => Topic started by: krishnabhattaram on November 8, 2023, 11:39

Title: Calculating Projected DOS Efficiently
Post by: krishnabhattaram on November 8, 2023, 11:39
I've been working with the DensityOfStates class with the default tetrahedral sampling method using the projection_list option in the .evaluate() function to calculate local density of states by specifying the appropriate atoms using ProjectionList(atoms=[...]). However, it seems that for every local density of states the progress bar indicating tetrahedral sampling is being conducted is displayed, indicating that the K-point sampling and eigenenergies are reevaluated. Even worse, when I call the .energies() or .fermiLevel() functions on a single DensityOfStates instance after calling .evaluate(), the tetrahedral resampling progress appears again. My calculations are currently limited by the DOS step, with average runtimes on my machine being on the scale of 5 hours for a single DOS calculation. I therefore was wondering if there is a way to take advantage of previously conducted calculations for DOS to avoid redundancy in LDOS calculations, thereby reducing computation time. My ultimate goal is to calculate LDOS (value, energy, and fermi level) for every atom of a structure with around one hundred atoms using a semiempirical approach.
Title: Re: Calculating Projected DOS Efficiently
Post by: Anders Blom on November 8, 2023, 23:21
The short answer is don't use the DensityOfStates class, it's outdated and very slow and cumbersome to work with. We have a much more powerful ProjectedDensityOfStates class that hopefully takes care of all your needs!

It still takes the same amount of time to calculate the DOS (which btw parallelizes really well, so use as many MPI processes as possible), and you do have to decide on the projections beforehand. But as long as you only need e.g. site and angular momentum projection, it will later be instantaneous to get the projection plots, and you can do it right in the GUI analyzer.