Skip to content
Snippets Groups Projects
Commit ede0f512 authored by Mohamed, Fawzi Roberto (fawzi)'s avatar Mohamed, Fawzi Roberto (fawzi)
Browse files

meta 2.0 changes

parent ddf84959
No related branches found
No related merge requests found
...@@ -258,6 +258,7 @@ class VasprunContext(object): ...@@ -258,6 +258,7 @@ class VasprunContext(object):
self.eFermi = None self.eFermi = None
self.cell = None self.cell = None
self.angstrom_cell = None self.angstrom_cell = None
self.waveCut = None
sectionMap = { sectionMap = {
"modeling": ["section_run", "section_method"], "modeling": ["section_run", "section_method"],
...@@ -304,7 +305,7 @@ class VasprunContext(object): ...@@ -304,7 +305,7 @@ class VasprunContext(object):
if (el.tag != "i"): if (el.tag != "i"):
backend.pwarn("unexpected tag %s %s %r in incar" % (el.tag, el.attrib, el.text)) backend.pwarn("unexpected tag %s %s %r in incar" % (el.tag, el.attrib, el.text))
else: else:
name = el.attrib.get("name", None) name = el.attrib.get("name", None).lower()
meta = metaEnv['x_vasp_incar_' + name] meta = metaEnv['x_vasp_incar_' + name]
valType = el.attrib.get("type") valType = el.attrib.get("type")
if not meta: if not meta:
...@@ -330,7 +331,7 @@ class VasprunContext(object): ...@@ -330,7 +331,7 @@ class VasprunContext(object):
backend.addValue(meta["name"], [converter(x) for x in vals]) backend.addValue(meta["name"], [converter(x) for x in vals])
else: else:
backend.addValue(meta["name"], converter(el.text)) backend.addValue(meta["name"], converter(el.text))
if name == 'GGA': if name == 'gga':
fMap = { fMap = {
'91': ['GGA_X_PW91', 'GGA_C_PW91'], '91': ['GGA_X_PW91', 'GGA_C_PW91'],
'PE': ['GGA_X_PBE', 'GGA_C_PBE'], 'PE': ['GGA_X_PBE', 'GGA_C_PBE'],
...@@ -342,17 +343,17 @@ class VasprunContext(object): ...@@ -342,17 +343,17 @@ class VasprunContext(object):
backend.pwarn("Unknown XC functional %s" % el.text.strip()) backend.pwarn("Unknown XC functional %s" % el.text.strip())
else: else:
for f in functs: for f in functs:
backend.openNonOverlappingSection("section_XC_functionals") backend.openNonOverlappingSection("section_xc_functionals")
backend.addValue("XC_functional_name", f) backend.addValue("xc_functional_name", f)
backend.closeNonOverlappingSection("section_XC_functionals") backend.closeNonOverlappingSection("section_xc_functionals")
elif name == "ISPIN": elif name == "ispin":
self.ispin = int(el.text.strip()) self.ispin = int(el.text.strip())
elif name == "LDAU": elif name == "ldau":
if re.match(".?[Tt](?:[rR][uU][eE])?.?|[yY](?:[eE][sS])?|1", el.text.strip()): if re.match(".?[Tt](?:[rR][uU][eE])?.?|[yY](?:[eE][sS])?|1", el.text.strip()):
dft_plus_u = True dft_plus_u = True
elif name == "IBRION": elif name == "ibrion":
ibrion = int(el.text.strip()) ibrion = int(el.text.strip())
elif name == "NSW": elif name == "nsw":
nsw = int(el.text.strip()) nsw = int(el.text.strip())
if ibrion is None: if ibrion is None:
ibrion = -1 if nsw == 0 or nsw == 1 else 0 ibrion = -1 if nsw == 0 or nsw == 1 else 0
...@@ -437,8 +438,8 @@ class VasprunContext(object): ...@@ -437,8 +438,8 @@ class VasprunContext(object):
if pathStr != "modeling/calculation/eigenvalues": if pathStr != "modeling/calculation/eigenvalues":
return True return True
backend = parser.backend backend = parser.backend
eigenvalues = None eigenvalues = []
occupation = None occupation = []
for el in element: for el in element:
if el.tag == "array": if el.tag == "array":
for arrEl in el: for arrEl in el:
...@@ -456,27 +457,26 @@ class VasprunContext(object): ...@@ -456,27 +457,26 @@ class VasprunContext(object):
if kEl.tag == "set": if kEl.tag == "set":
ik += 1 ik += 1
bands = np.asarray(getVector(kEl, field = "r")) bands = np.asarray(getVector(kEl, field = "r"))
if eigenvalues is None: if len(eigenvalues) <= isp:
eigenvalues = np.zeros((self.ispin, self.kpoints.shape[0], bands.shape[0]), dtype = float) eigenvalues.append(np.zeros((self.kpoints.shape[0], bands.shape[0]), dtype = float))
occupation = np.zeros((self.ispin, self.kpoints.shape[0], bands.shape[0]), dtype = float) occupation.append(np.zeros((self.kpoints.shape[0], bands.shape[0]), dtype = float))
eigenvalues[isp, ik] = bands[:,0] eigenvalues[isp][ik] = bands[:,0]
occupation[isp, ik] = bands[:,1] occupation[isp][ik] = bands[:,1]
else: else:
backend.pwarn("unexpected tag %s in k array of the eigenvalues" % kEl.tag) backend.pwarn("unexpected tag %s in k array of the eigenvalues" % kEl.tag)
else: else:
backend.pwarn("unexpected tag %s in spin array of the eigenvalues" % spinEl.tag) backend.pwarn("unexpected tag %s in spin array of the eigenvalues" % spinEl.tag)
else: else:
backend.pwarn("unexpected tag %s in array of the eigenvalues" % arrEl.tag) backend.pwarn("unexpected tag %s in array of the eigenvalues" % arrEl.tag)
if eigenvalues is not None: if eigenvalues:
ev = eV2JV(np.array(eigenvalues))
ev = eV2JV(eigenvalues)
vbTopE = [] vbTopE = []
ebMinE = [] ebMinE = []
for ispin in range(occupation.shape[0]): for ispin in range(len(occupation)):
vbTopE.append(float('-inf')) vbTopE.append(float('-inf'))
ebMinE.append(float('inf')) ebMinE.append(float('inf'))
for ik in range(occupation.shape[1]): for ik in range(occupation[ispin].shape[0]):
ebIndex = bisect.bisect_right(-occupation[ispin, ik, :], -0.5) - 1 ebIndex = bisect.bisect_right(-occupation[ispin][ik, :], -0.5) - 1
vbTopIndex = ebIndex -1 vbTopIndex = ebIndex -1
if vbTopIndex >= 0: if vbTopIndex >= 0:
vbTopK = ev[ispin, ik, vbTopIndex] vbTopK = ev[ispin, ik, vbTopIndex]
...@@ -495,8 +495,9 @@ class VasprunContext(object): ...@@ -495,8 +495,9 @@ class VasprunContext(object):
backend.openNonOverlappingSection("section_k_band") backend.openNonOverlappingSection("section_k_band")
nsegments = self.kpoints.shape[0] // divisions nsegments = self.kpoints.shape[0] // divisions
kpt = np.reshape(self.kpoints, (nsegments, divisions, 3)) kpt = np.reshape(self.kpoints, (nsegments, divisions, 3))
energies = np.reshape(ev, (self.ispin, nsegments, divisions , bands.shape[0])) ispin = len(eigenvalues)
occ = np.reshape(occupation, (self.ispin, nsegments, divisions, bands.shape[0])) energies = np.reshape(ev, (ispin, nsegments, divisions , bands.shape[0]))
occ = np.reshape(np.array(occupation), (ispin, nsegments, divisions, bands.shape[0]))
for isegment in range(nsegments): for isegment in range(nsegments):
backend.openNonOverlappingSection("section_k_band_segment") backend.openNonOverlappingSection("section_k_band_segment")
backend.addArrayValues("band_energies", energies[:, isegment, :, :]) backend.addArrayValues("band_energies", energies[:, isegment, :, :])
...@@ -527,7 +528,7 @@ class VasprunContext(object): ...@@ -527,7 +528,7 @@ class VasprunContext(object):
else: else:
backend.openNonOverlappingSection("section_eigenvalues") backend.openNonOverlappingSection("section_eigenvalues")
backend.addArrayValues("eigenvalues_values", ev) backend.addArrayValues("eigenvalues_values", ev)
backend.addArrayValues("eigenvalues_occupation", occupation) backend.addArrayValues("eigenvalues_occupation", np.array(occupation))
backend.closeNonOverlappingSection("section_eigenvalues") backend.closeNonOverlappingSection("section_eigenvalues")
else: else:
backend.pwarn("unexpected tag %s in the eigenvalues" % el.tag) backend.pwarn("unexpected tag %s in the eigenvalues" % el.tag)
...@@ -538,7 +539,7 @@ class VasprunContext(object): ...@@ -538,7 +539,7 @@ class VasprunContext(object):
def onStart_calculation(self, parser, event, element, pathStr): def onStart_calculation(self, parser, event, element, pathStr):
gIndexes = parser.tagSections[pathStr] gIndexes = parser.tagSections[pathStr]
self.singleConfCalcs.append(gIndexes["section_single_configuration_calculation"]) self.singleConfCalcs.append(gIndexes["section_single_configuration_calculation"])
if self.waveCut: if self.waveCut is not None:
backend.openNonOverlappingSection("section_basis_set") backend.openNonOverlappingSection("section_basis_set")
backend.addValue("mapping_section_basis_set_cell_dependent", self.waveCut) backend.addValue("mapping_section_basis_set_cell_dependent", self.waveCut)
backend.closeNonOverlappingSection("section_basis_set") backend.closeNonOverlappingSection("section_basis_set")
...@@ -555,8 +556,8 @@ class VasprunContext(object): ...@@ -555,8 +556,8 @@ class VasprunContext(object):
backend.addValue("sampling_method", sampling_method) backend.addValue("sampling_method", sampling_method)
backend.closeSection("section_sampling_method", samplingGIndex) backend.closeSection("section_sampling_method", samplingGIndex)
frameSequenceGIndex = backend.openSection("section_frame_sequence") frameSequenceGIndex = backend.openSection("section_frame_sequence")
backend.addValue("frame_sequence_to_sampling_ref", samplingGIndex) backend.addValue("frame_sequence_to_sampling_method_ref", samplingGIndex)
backend.addArrayValues("frame_sequence_local_frames_ref", np.asarray(self.singleConfCalcs)) backend.addArrayValues("frame_sequence_to_frames_ref", np.asarray(self.singleConfCalcs))
backend.closeSection("section_frame_sequence", frameSequenceGIndex) backend.closeSection("section_frame_sequence", frameSequenceGIndex)
def onEnd_calculation(self, parser, event, element, pathStr): def onEnd_calculation(self, parser, event, element, pathStr):
...@@ -566,7 +567,7 @@ class VasprunContext(object): ...@@ -566,7 +567,7 @@ class VasprunContext(object):
backend = parser.backend backend = parser.backend
backend.addValue("single_configuration_calculation_to_system_ref", self.lastSystemDescription) backend.addValue("single_configuration_calculation_to_system_ref", self.lastSystemDescription)
gIndexes = parser.tagSections["/modeling"] gIndexes = parser.tagSections["/modeling"]
backend.addValue("single_configuration_to_calculation_method_ref", gIndexes["section_method"]) backend.addValue("single_configuration_calculation_to_method_ref", gIndexes["section_method"])
for el in element: for el in element:
if el.tag == "energy": if el.tag == "energy":
for enEl in el: for enEl in el:
...@@ -580,14 +581,16 @@ class VasprunContext(object): ...@@ -580,14 +581,16 @@ class VasprunContext(object):
backend.addValue("energy_total", value) backend.addValue("energy_total", value)
elif name == "e_0_energy": elif name == "e_0_energy":
value = eConv(float(enEl.text.strip())) value = eConv(float(enEl.text.strip()))
backend.addValue("energy_total_T0", value) backend.addValue("energy_total_t0", value)
else: else:
backend.pwarn("Unexpected i tag with name %s in energy section" % name) backend.pwarn("Unexpected i tag with name %s in energy section" % name)
elif enEl.tag == "varray": elif enEl.tag == "varray":
name = enEl.attrib.get("name", None) name = enEl.attrib.get("name", None)
if name == "forces": if name == "forces":
f = getVector(enEl, lambda x: fConv(float(x))) f = getVector(enEl, lambda x: fConv(float(x)))
fId = backend.openSection('section_atom_forces')
backend.addValue("atom_forces", f) backend.addValue("atom_forces", f)
backend.closeSection('section_atom_forces', fId)
elif name == 'stress': elif name == 'stress':
f = getVector(enEl, lambda x: pConv(float(x))) f = getVector(enEl, lambda x: pConv(float(x)))
backend.addValue("stress_tensor", f) backend.addValue("stress_tensor", f)
...@@ -743,9 +746,9 @@ class VasprunContext(object): ...@@ -743,9 +746,9 @@ class VasprunContext(object):
backend.pwarn("Unknown XC functional %s" % el.text.strip()) backend.pwarn("Unknown XC functional %s" % el.text.strip())
else: else:
for f in functs: for f in functs:
backend.openNonOverlappingSection("section_XC_functionals") backend.openNonOverlappingSection("section_xc_functionals")
backend.addValue("XC_functional_name", f) backend.addValue("xc_functional_name", f)
backend.closeNonOverlappingSection("section_XC_functionals") backend.closeNonOverlappingSection("section_xc_functionals")
elif name == "ISPIN": elif name == "ISPIN":
self.ispin = int(el.text.strip()) self.ispin = int(el.text.strip())
......
...@@ -46,7 +46,7 @@ object VaspParser extends SimpleExternalParserGenerator( ...@@ -46,7 +46,7 @@ object VaspParser extends SimpleExternalParserGenerator(
"parser-vasp/vaspparser/setup_paths.py", "parser-vasp/vaspparser/setup_paths.py",
"nomad_meta_info/public.nomadmetainfo.json", "nomad_meta_info/public.nomadmetainfo.json",
"nomad_meta_info/common.nomadmetainfo.json", "nomad_meta_info/common.nomadmetainfo.json",
"nomad_meta_info/meta_types.nomadmetainfo.json", "nomad_meta_info/meta.nomadmetainfo.json",
"nomad_meta_info/vasp.nomadmetainfo.json" "nomad_meta_info/vasp.nomadmetainfo.json"
) ++ DefaultPythonInterpreter.commonFiles(), ) ++ DefaultPythonInterpreter.commonFiles(),
dirMap = Map( dirMap = Map(
...@@ -89,7 +89,7 @@ object VaspRunParser extends SimpleExternalParserGenerator( ...@@ -89,7 +89,7 @@ object VaspRunParser extends SimpleExternalParserGenerator(
"parser-vasp/vaspparser/vaspmainparser.py", "parser-vasp/vaspparser/vaspmainparser.py",
"nomad_meta_info/public.nomadmetainfo.json", "nomad_meta_info/public.nomadmetainfo.json",
"nomad_meta_info/common.nomadmetainfo.json", "nomad_meta_info/common.nomadmetainfo.json",
"nomad_meta_info/meta_types.nomadmetainfo.json", "nomad_meta_info/meta.nomadmetainfo.json",
"nomad_meta_info/vasp.nomadmetainfo.json" "nomad_meta_info/vasp.nomadmetainfo.json"
) ++ DefaultPythonInterpreter.commonFiles(), ) ++ DefaultPythonInterpreter.commonFiles(),
dirMap = Map( dirMap = Map(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment