diff --git a/parser/parser-exciting/exciting_parser_GS_input.py b/parser/parser-exciting/exciting_parser_GS_input.py new file mode 100644 index 0000000000000000000000000000000000000000..39c4cbd6f1f2e5bfbfc934f9e321050571bfdd88 --- /dev/null +++ b/parser/parser-exciting/exciting_parser_GS_input.py @@ -0,0 +1,29 @@ +import xml.sax +import logging +import numpy as np +from nomadcore.unit_conversion.unit_conversion import convert_unit_function +from nomadcore.unit_conversion.unit_conversion import convert_unit +from nomadcore.unit_conversion import unit_conversion + +class InputHandler(xml.sax.handler.ContentHandler): + def __init__(self, backend): + self.backend = backend + + def startElement(self, name, attrs): + if name == "libxc": #libXC + correlation = attrs.getValue("correlation")[3:] + exchange = attrs.getValue("exchange")[3:] + xcName = [correlation, exchange] + for xc in xcName: + gi = self.backend.openSection("section_XC_functionals") + self.backend.addValue("XC_functional_name", xc) + self.backend.closeSection("section_XC_functionals", gi) + + def endElement(self, name): + pass + +def parseInput(inF, backend): + handler = InputHandler(backend) + logging.error("will parse") + xml.sax.parse(inF, handler) + logging.error("did parse") diff --git a/parser/parser-exciting/parser_exciting.py b/parser/parser-exciting/parser_exciting.py index a530b3db51a7333029fbf5253ccf53ff9d503fe0..d6661faffd1ec38423208bd4094a940ad17add4c 100644 --- a/parser/parser-exciting/parser_exciting.py +++ b/parser/parser-exciting/parser_exciting.py @@ -7,7 +7,7 @@ from nomadcore.local_meta_info import loadJsonFile, InfoKindEl from nomadcore.caching_backend import CachingLevel from nomadcore.unit_conversion import unit_conversion from nomadcore.unit_conversion.unit_conversion import convert_unit_function -import os, sys, json, exciting_parser_dos,exciting_parser_bandstructure, exciting_parser_gw #, exciting_parser_input +import os, sys, json, exciting_parser_dos,exciting_parser_bandstructure, exciting_parser_gw, exciting_parser_GS_input from ase import Atoms import logging @@ -116,12 +116,19 @@ class ExcitingParserContext(object): 300: ['GGA_C_BGCP', 'GGA_X_PBE'], 406: ['HYB_GGA_XC_PBEH'] } - for xcName in xc_internal_map[xcNr]: - self.xcName = xcName -# print("xcName= ",self.xcName) - gi = backend.openSection("section_XC_functionals") - backend.addValue("XC_functional_name", xcName) - backend.closeSection("section_XC_functionals", gi) + if xcNr == 100: + dirPath = os.path.dirname(self.parser.fIn.name) + inputGSFile = os.path.join(dirPath, "input.xml") + with open(inputGSFile) as f: + exciting_parser_GS_input.parseInput(f, backend) +# pass + else: + for xcName in xc_internal_map[xcNr]: + self.xcName = xcName +# print("xcName= ",self.xcName) + gi = backend.openSection("section_XC_functionals") + backend.addValue("XC_functional_name", xcName) + backend.closeSection("section_XC_functionals", gi) def onClose_section_single_configuration_calculation(self, backend, gIndex, section): # logging.error("BASE onClose_section_single_configuration_calculation") @@ -340,6 +347,7 @@ class ExcitingParserContext(object): backend.addValue('electronic_structure_method', "DFT") energy_thresh = section["x_exciting_scf_threshold_energy_change"][0] potential_thresh = section["x_exciting_scf_threshold_potential_change_list"][0] +# print("potential_thresh====",potential_thresh) charge_thresh = section["x_exciting_scf_threshold_charge_change_list"][0] if section["x_exciting_scf_threshold_force_change_list"]: force_thresh = section["x_exciting_scf_threshold_force_change_list"][0] @@ -461,7 +469,7 @@ mainFileDescription = \ SM(r"\s*total charge in muffin-tins\s*:\s*(?P<x_exciting_total_MT_charge_scf_iteration>[-0-9.]+)"), SM(r"\s*Estimated fundamental gap\s*:\s*(?P<x_exciting_gap_scf_iteration__hartree>[-0-9.]+)"), SM(r"\s*Wall time \(seconds\)\s*:\s*(?P<x_exciting_time_scf_iteration>[-0-9.]+)"), - SM(r"\s*RMS change in effective potential \(target\)\s*:\s*(?P<x_exciting_effective_potential_convergence_scf_iteration__hartree>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_potential_change_list__hartree>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)"), + SM(r"\s*RMS change in effective potential \(target\)\s*:\s*(?P<x_exciting_effective_potential_convergence_scf_iteration__hartree>[0-9]+\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_potential_change_list__hartree>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)"), SM(r"\s*Absolute change in total energy\s*\(target\)\s*:\s*(?P<x_exciting_energy_convergence_scf_iteration>[0-9]+\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_energy_change__hartree>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)"), SM(r"\s*Charge distance\s*\(target\)\s*:\s*(?P<x_exciting_charge_convergence_scf_iteration>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_charge_change_list>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)"), SM(r"\s*Abs. change in max-nonIBS-force\s*\(target\)\s*:\s*(?P<x_exciting_force_convergence_scf_iteration>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_force_change_list>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)") diff --git a/src/main/scala/eu/nomad_lab/parsers/ExcitingParser.scala b/src/main/scala/eu/nomad_lab/parsers/ExcitingParser.scala index 2833e97d5d23a5dd4da0fe7b9306a808efa21533..f6db0f1956bb5ddb2046a0fae9e8e807af2e8102 100644 --- a/src/main/scala/eu/nomad_lab/parsers/ExcitingParser.scala +++ b/src/main/scala/eu/nomad_lab/parsers/ExcitingParser.scala @@ -47,6 +47,7 @@ object ExcitingParser extends SimpleExternalParserGenerator( "parser-exciting/exciting_parser_bandstructure.py", "parser-exciting/exciting_parser_gw.py", "parser-exciting/exciting_parser_input.py", + "parser-exciting/exciting_parser_GS_input.py", "parser-exciting/setup_paths.py", "nomad_meta_info/public.nomadmetainfo.json", "nomad_meta_info/common.nomadmetainfo.json",