Example: DOS and BandStructure from a previous calculation

It is quite likely that you did a calculation, but forgot to request the DOS or BandStructure. Or maybe you did but want to use different settings.

Fortunately it is possible to calculate these directly from the previous calculation. The traditional way was to restart the SCF, but this is no longer needed.

With the restart of the DOS it has become possible to calculate the DOS with a finer k-space sampling. In this example it is shown that the DOS calculated this way matches well the DOS obtained from a full calculation with a dense k-grid (for both the SCF and DOS).

The example below features some concepts

  • use environment variables to control in one place repeated settings

  • DOS calculated on a fixed grid. This is not really needed, but it makes the comparison between different DOS results much more stable.

  • KSpace%Regular%DoubleCount key. Useful when you want to check against a k-grid that is twice as dense.

  • A text report is created, useful for automatic testing.

  • –delete-old-results. Allow ams to overwrite an existing results folder.

Download RestartDosAndBandStructure.run

#!/bin/bash

# some env. variables to control settings
unr=no
k_quality=Normal
DOSLINE="DOS CalcPDos=true Energies=300 AbsoluteMaxMin=yes Min=-0.3 Max=0.2" 
BANDSTTRUCTURELINE="BandStructure Enabled=true DeltaK=0.03"

cat << eor > convergence.inc
SCF Method=DIIS
Convergence Criterion=1e-8
eor

report=report.txt
echo "" > $report

base=test.unr=$unr.k_quality=$k_quality

export AMS_JOBNAME=$base

# First calculation, where we "forget" to request the PDOS and BandStructure, or did not satisfactory settings for those.

$AMSBIN/ams --delete-old-results << eor 

Task SinglePoint

System
    Atoms
        Cu     -1.014698231    -0.585836297     0.414248818
        Ni      1.014698231     0.585836297    -0.414248818
    End

    Lattice
        4.058792924     0.000000000     0.000000000
        2.029396462     3.515017781     0.000000000
    End
End

Engine Band

Unrestricted $unr
KSpace Quality=$k_quality

@include convergence.inc

$DOSLINE

$BANDSTTRUCTURELINE

EndEngine

eor


export AMS_JOBNAME=$base.betterk

# We could have done the calculation with a better k-grid

$AMSBIN/ams --delete-old-results << eor 

Task SinglePoint

System
    Atoms
        Cu     -1.014698231    -0.585836297     0.414248818
        Ni      1.014698231     0.585836297    -0.414248818
    End

    Lattice
        4.058792924     0.000000000     0.000000000
        2.029396462     3.515017781     0.000000000
    End
End

Engine Band

Unrestricted $unr

KSpace 
    Quality $k_quality
    Regular DoubleCount=1  # use a twice as dense k-grid. You could also use a better KSpace%Quality, or set a more dense grid otherwise.
End


@include convergence.inc

$DOSLINE

$BANDSTTRUCTURELINE

EndEngine

eor


$AMSBIN/amspython $AMSHOME/scripting/tools/comparekf.py --dot-product  $base.results/band.rkf  $base.betterk.results/band.rkf "DOS%Total DOS" >> $report


# We can request the dos and band structure simply restarting the SCF.

export AMS_JOBNAME=$base.restartscf

$AMSBIN/ams --delete-old-results << eor 

Task SinglePoint

LoadSystem
  File $base.results/ams.rkf
End

Engine Band

Unrestricted $unr
KSpace Quality=$k_quality

Restart
    File $base.results/band.rkf
    SCF true
End

@include convergence.inc

$DOSLINE

$BANDSTTRUCTURELINE

EndEngine

eor


# We can also request both the DOS and BandStructure in a restart, avoiding restarting the SCF

export AMS_JOBNAME=$base.restartdos

$AMSBIN/ams --delete-old-results << eor 

Task SinglePoint

LoadSystem
  File $base.results/ams.rkf
End

Engine Band

Unrestricted $unr
KSpace Quality=$k_quality

Restart
    File $base.restartscf.results/band.rkf      #  can as well be restarted from $base.results/band.rkf.  this restart used for the most precise comparison
    Dos true
    BandStructure true
End

@include convergence.inc

$DOSLINE

$BANDSTTRUCTURELINE

EndEngine

eor

$AMSBIN/amspython $AMSHOME/scripting/tools/comparekf.py --dot-product  $base.results/band.rkf  $base.restartscf.results/band.rkf "DOS%Total DOS" >> $report
$AMSBIN/amspython $AMSHOME/scripting/tools/comparekf.py --dot-product  $base.results/band.rkf  $base.restartdos.results/band.rkf "DOS%Total DOS" >> $report
$AMSBIN/amspython $AMSHOME/scripting/tools/comparekf.py --dot-product  $base.restartscf.results/band.rkf  $base.restartdos.results/band.rkf "DOS%Total DOS" >> $report


# We can even use a better k-space sampling which improves the DOS. BandStructure not affected.

export AMS_JOBNAME=$base.restartdosbetterk

$AMSBIN/ams --delete-old-results << eor 

Task SinglePoint

LoadSystem
  File $base.results/ams.rkf
End

Engine Band

Unrestricted $unr

KSpace 
    Quality $k_quality
    Regular DoubleCount=1  # use a twice as dense k-grid. You could also use a better KSpace%Quality, or set a more dense grid otherwise.
End

Restart
    File $base.results/band.rkf
    Dos true
    BandStructure true
End

@include convergence.inc

$DOSLINE

$BANDSTTRUCTURELINE

EndEngine

eor


$AMSBIN/amspython $AMSHOME/scripting/tools/comparekf.py --dot-product  $base.betterk.results/band.rkf  $base.restartdosbetterk.results/band.rkf "DOS%Total DOS" >> $report


echo "begin report"
cat $report
echo "end report"