From 42ac20c6a96e231bb305eee2e576c7b90ea6fd93 Mon Sep 17 00:00:00 2001 From: Mikkel Strange <mikst@fysik.dtu.dk> Date: Wed, 21 Sep 2016 19:03:05 +0200 Subject: [PATCH] xc name seperated out in x and c parts --- parser/parser-gpaw/libxc_names.py | 39 +++++++++++++++++++++++++++++-- parser/parser-gpaw/parser.py | 8 ++++--- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/parser/parser-gpaw/libxc_names.py b/parser/parser-gpaw/libxc_names.py index df65b9f..11c183a 100644 --- a/parser/parser-gpaw/libxc_names.py +++ b/parser/parser-gpaw/libxc_names.py @@ -1,4 +1,8 @@ from __future__ import print_function +import re +#p = re.compile(r"(?P<x_name>.*_X.*)\+(?P<c_name>.*_C.*)") +p = re.compile( + '((?P<x_name>(GGA|LDA|MGGA|HF|HYB_MGGA)_X.*)|(?P<c_name>(GGA|LDA|MGGA)_C.*))') short_names = { 'LDA': 'LDA_X+LDA_C_PW', @@ -24,7 +28,38 @@ def get_libxc_name(name): libxc_name = name return libxc_name +def get_libxc_xc_names(name): + name = get_libxc_name(name) + xc = {'xc_name': None, + 'x_name' : None, + 'c_name': None} + + if '_XC_' in name: + xc['xc_name'] = name + return xc + + if '+' in name: + s = name.split('+') + xc['x_name'] = s[0] + xc['c_name'] = s[1] + return xc + + m = re.search(p, name) + if m is not None: # it is either a correlation or exchange functional + xc.update(m.groupdict()) + return xc + + xc['xc_name'] = name # for something like BEEF-vdW + return xc if __name__ == '__main__': - print(get_libxc_name('LDA')) - print(get_libxc_name('GGA_X_PBE')) +# print(get_libxc_name('LDA')) +# print(get_libxc_name('GGA_X_PBE')) + names = ['GGA_X_B88+GGA_C_LYP', + 'HF_X', + 'HYB_GGA_XC_B1LYP', + 'HYB_GGA_XC_HSE03', + 'BEEF-vdW', + 'LDA_K_TF'] + for name in names: + print(get_libxc_xc_names(name)) diff --git a/parser/parser-gpaw/parser.py b/parser/parser-gpaw/parser.py index 435514e..e169f95 100644 --- a/parser/parser-gpaw/parser.py +++ b/parser/parser-gpaw/parser.py @@ -8,7 +8,7 @@ from nomadcore.unit_conversion.unit_conversion import convert_unit as cu from nomadcore.local_meta_info import loadJsonFile, InfoKindEl from nomadcore.parser_backend import JsonParseEventsWriterBackend from tar import Reader -from libxc_names import get_libxc_name +from libxc_names import get_libxc_xc_names @contextmanager @@ -87,8 +87,10 @@ def parse(filename): p.addRealValue('smearing_width', c(r.FermiWidth, 'hartree')) with o(p, 'section_XC_functionals'): - p.addValue('XC_functional_name', - get_libxc_name(r.XCFunctional)) + xc_names = get_libxc_xc_names(r.XCFunctional) + for name in xc_names.values(): + if name is not None: + p.addValue('XC_functional_name', name) with o(p, 'section_single_configuration_calculation'): p.addValue('single_configuration_calculation_to_system_ref', system_gid) -- GitLab