"""
Scf info section contains configuration options used in computation
"""
from ...potential_definitions import PotSectionDefinition, PotValueDefinition
from ...potential_sections import PotentialSection
from ....common.grammar_types import DefKeyword, Array, line_string
[docs]
class ScfInfoSection(PotentialSection):
"""This section retrieves the atomic positions and
it creates (during reading) the ASE Atoms object"""
[docs]
def _depends_on(self):
return ["SITES"]
[docs]
def _update_atoms(self, atoms, read_io_data):
atoms.info["fermi_energy"] = self.EF()
atoms.info["sprkkr_rmsavv"] = self.RMSAVV()
atoms.info["sprkkr_rmsavb"] = self.RMSAVB()
atoms.info["sprkkr_vmtz"] = self.VMTZ()
[docs]
def _set_from_atoms(self, atoms, write_io_data):
info = atoms.info
if "fermi_energy" in info:
self.EF = atoms.info["fermi_energy"]
if "sprkkr_rmsavv" in info:
self.RMSAVV = atoms.info["sprkkr_rmsavv"]
if "sprkkr_rmsavb" in info:
self.RMSAVB = atoms.info["sprkkr_rmsavb"]
if "sprkkr_vmtz" in info:
self.VMTZ = atoms.info["sprkkr_vmtz"]
if self.SCFSTATUS() == "START":
for i in atoms.sites:
for j in i.occupation.atomic_types():
if not j.has_converged_data():
break
else:
continue
break
else:
self.SCFSTATUS = "CONVERGED"
[docs]
class ScfInfoSectionDefinition(PotSectionDefinition):
[docs]
def __init__(self, name="SCF-INFO", **kwargs):
V = PotValueDefinition
members = [
V("INFO", line_string, "NONE"),
V(
"SCFSTATUS",
DefKeyword("START", "CONVERGED", "ITR-BULK", "ITR-R-BULK", "ITR-L-BULK", "ITR-I-ZONE", "ITR"),
),
V("FULLPOT", False),
V("BREITINT", False),
V(("NONMAG", "NOMAG"), False),
V("ORBPOL", str, "NONE"),
V("EXTFIELD", False),
V("BLCOUPL", False),
V("BEXT", 0.0),
V("SEMICORE", False),
V("LLOYD", False),
V("NE", Array(int), is_optional=True),
V("IBZINT", int, is_optional=True),
V("NKTAB", int, is_optional=True),
V("TETDEPPOT", False, is_optional=True),
V("XC-POT", str, is_optional=True),
V("SCF-ALG", str, is_optional=True),
V("SCF-ITER", 0),
V("SCF-MIX", 0.2),
V("SCF-TOL", 1e-5),
V("RMSAVV", 999999.0),
V("RMSAVB", 999999.0),
V("EF", 999999.0),
V("VMTZ", 0.7),
V("EWORK", float, is_optional=True),
]
super().__init__(name, members, has_hidden_members=True)
result_class = ScfInfoSection
section = ScfInfoSectionDefinition