"""
SCF calculation for Fe using kkrscf and consequent DOS by kkrgen.
"""
[docs]
def main():
from ase.build import bulk
from ase2sprkkr.sprkkr.calculator import SPRKKR
atoms = bulk("Fe")
print("FIRST STEP: SELF CONSISTENT CALCULATIONS====")
calculator = SPRKKR(atoms=atoms, mpi=True)
calculator.input_parameters.set(NL=3)
calculator.input_parameters.SCF.MIX = 0.20
calculator.input_parameters.ENERGY.ImE = 0.0
calculator.input_parameters.ENERGY.GRID = [5, 3]
calculator.input_parameters.set(NE=32)
out = calculator.calculate(options={"NITER": 1})
print(out.energy)
print(len(out.iterations))
print(out.iterations[-1]["error"]())
print(out.last_iteration["moment"].to_dict())
print("SECOND (OPTIONAL) STEP: CALCULATION OF BSF============")
calculator = out.calculator
calculator.input_parameters = "bsfek"
calculator.input_parameters.ENERGY.EMAX = 0.2
calculator.input_parameters.TASK.KPATH = 1
calculator.calculate()
print("THIRD STEP: CALCULATION OF DOS============")
# Lets now calculate DOS
# First we need to change task (there are several input data tabulated for
# various tasks to help user.
calculator.input_parameters = "DOS"
print("INPUT PARAMETERS HAVE BEEN REPLACED =======")
print(calculator.input_parameters.to_dict())
print("===========================================")
calculator.input_parameters.set(NE=300)
calculator.input_parameters.set(NL=3)
# Pass a newly converged potential to the DOS calculation
out = calculator.calculate(potential=out.potential_filename)
out.dos.plot()
# For the processing of the results of the DOS task use xband
# calculator.run_xband()
# Just run the script only when directly called from command line
if __name__ == "__main__":
main()