Source code for ase2sprkkr.asr.magstate

"""Module for determining magnetic state."""
from asr.core import command, ASRResult, prepare_result
import typing


[docs] def get_magstate(calc): """Determine the magstate of calc.""" magmoms = calc.get_property('magmoms', allow_calculation=False) if magmoms is None: return 'nm' maximum_mom = abs(magmoms).max() if maximum_mom < 0.1: return 'nm' magmom = calc.get_magnetic_moment() if abs(magmom) < 0.01 and maximum_mom > 0.1: return 'afm' return 'fm'
[docs] def webpanel(result, row, key_descriptions): """Webpanel for magnetic state.""" rows = [['Magnetic state', row.magstate]] summary = {'title': 'Summary', 'columns': [[{'type': 'table', 'header': ['Electronic properties', ''], 'rows': rows}]], 'sort': 0} return [summary]
[docs] @prepare_result class Result(ASRResult): magstate: str is_magnetic: bool magmoms: typing.List[float] magmom: float nspins: int key_descriptions = {'magstate': 'Magnetic state.', 'is_magnetic': 'Is the material magnetic?', 'magmoms': 'Atomic magnetic moments.', 'magmom': 'Total magnetic moment.', 'nspins': 'Number of spins in system.'} formats = {"ase_webpanel": webpanel}
@command('asr.magstate', requires=['gs.gpw'], returns=Result, dependencies=['asr.gs@calculate']) def main() -> Result: """Determine magnetic state.""" from gpaw import GPAW calc = GPAW('gs.gpw', txt=None) magstate = get_magstate(calc) magmoms = calc.get_property('magmoms', allow_calculation=False) magmom = calc.get_property('magmom', allow_calculation=False) nspins = calc.get_number_of_spins() results = {'magstate': magstate.upper(), 'is_magnetic': magstate != 'nm', 'magmoms': magmoms, 'magmom': magmom, 'nspins': nspins} return Result(data=results) if __name__ == '__main__': main.cli()