From 1070a2d1ce7c9535f8bbe5c99a3d1ab0a5ac21fd Mon Sep 17 00:00:00 2001 From: Lauri Himanen <lauri.himanen@aalto.fi> Date: Mon, 13 Jun 2016 19:00:55 +0300 Subject: [PATCH] Now more method related data is parsed. --- .../versions/cp2k262/commonmatcher.py | 25 +++++++++++++------ .../versions/cp2k262/inputparser.py | 5 ++++ test/unittests/cp2k_2.6.2/run_tests.py | 12 +++++++++ 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonmatcher.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonmatcher.py index c24ccdd..3639dac 100644 --- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonmatcher.py +++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonmatcher.py @@ -37,6 +37,7 @@ class CommonMatcher(object): 'section_XC_functionals': CachingLevel.ForwardAndCache, 'self_interaction_correction_method': CachingLevel.Cache, 'x_cp2k_section_programinformation': CachingLevel.ForwardAndCache, + 'x_cp2k_section_quickstep_settings': CachingLevel.ForwardAndCache, } #======================================================================= @@ -189,11 +190,14 @@ class CommonMatcher(object): def quickstep_header(self): return SM( " *******************************************************************************".replace("*", "\*"), forwardMatch=True, + sections=["x_cp2k_section_quickstep_settings"], subMatchers=[ SM( " DFT\|", forwardMatch=True, subMatchers=[ + SM( " DFT\| Spin restricted Kohn-Sham (RKS) calculation\s+(?P<x_cp2k_spin_restriction>{})".format(self.regex_word)), SM( " DFT\| Multiplicity\s+(?P<spin_target_multiplicity>{})".format(self.regex_i)), + SM( " DFT\| Number of spin states\s+(?P<number_of_spin_channels>{})".format(self.regex_i)), SM( " DFT\| Charge\s+(?P<total_charge>{})".format(self.regex_i)), SM( " DFT\| Self-interaction correction \(SIC\)\s+(?P<self_interaction_correction_method>[^\n]+)"), ], @@ -231,6 +235,16 @@ class CommonMatcher(object): otherMetaInfo=["atom_labels", "atom_positions"] ) ] + ), + SM( " SCF PARAMETERS", + forwardMatch=True, + subMatchers=[ + SM( " SCF PARAMETERS Density guess:\s+{}".format(self.regex_eol)), + SM( " max_scf:\s+(?P<scf_max_iteration>{})".format(self.regex_i)), + SM( " max_scf_history:\s+{}".format(self.regex_i)), + SM( " max_diis:\s+{}".format(self.regex_i)), + SM( " eps_scf:\s+(?P<scf_threshold_energy_change>{})".format(self.regex_f)), + ] ) ] ) @@ -243,13 +257,6 @@ class CommonMatcher(object): if number_of_atoms is not None: self.cache_service["number_of_atoms"] = number_of_atoms - def onClose_section_run(self, backend, gIndex, section): - """Information that is pushed regardless at the end of parsing. - Contains also information that is totally agnostic on the calculation - contents, like program_basis_set_type. - """ - backend.addValue("program_basis_set_type", "gaussian") - def onClose_section_method(self, backend, gIndex, section): """When all the functional definitions have been gathered, matches them with the nomad correspondents and combines into one single string which @@ -276,6 +283,10 @@ class CommonMatcher(object): except: pass + def onClose_x_cp2k_section_quickstep_settings(self, backend, gIndex, section): + backend.addValue("program_basis_set_type", "gaussian") + # backend.addValue("electronic_structure_method", "DFT") + def onClose_x_cp2k_section_programinformation(self, backend, gIndex, section): input_file = section.get_latest_value("x_cp2k_input_filename") self.file_service.set_file_id(input_file, "input") diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py index dacf551..f411c86 100644 --- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py +++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py @@ -64,6 +64,7 @@ class CP2KInputParser(BasicParser): self.cache_service.add("vel_add_last") self.cache_service.add("each_geo_opt") self.cache_service.add("traj_add_last") + self.cache_service.add("electronic_structure_method") def parse(self): @@ -215,6 +216,10 @@ class CP2KInputParser(BasicParser): pint_vel_unit = self.get_pint_unit_string(vel_unit) self.cache_service["velocity_unit"] = pint_vel_unit + #======================================================================= + # See if some more exotic calculation is requested (e.g. MP2, DFT+U, GW, RPA) + + #======================================================================= # Stress tensor calculation method stress_tensor_method = self.input_tree.get_keyword("FORCE_EVAL/STRESS_TENSOR") diff --git a/test/unittests/cp2k_2.6.2/run_tests.py b/test/unittests/cp2k_2.6.2/run_tests.py index 5e5e7a5..d99e2dd 100644 --- a/test/unittests/cp2k_2.6.2/run_tests.py +++ b/test/unittests/cp2k_2.6.2/run_tests.py @@ -281,6 +281,18 @@ class TestEnergyForce(unittest.TestCase): expected_result = convert_unit(np.array(-32.2320848878), "hartree") self.assertTrue(np.array_equal(result[0], expected_result)) + def test_scf_max_iteration(self): + result = self.results["scf_max_iteration"] + self.assertEqual(result, 300) + + def test_scf_threshold_energy_change(self): + result = self.results["scf_threshold_energy_change"] + self.assertEqual(result, 1.00E-07) + + def test_number_of_spin_channels(self): + result = self.results["number_of_spin_channels"] + self.assertEqual(result, 1) + def test_energy_change_scf_iteration(self): energy_change = self.results["energy_change_scf_iteration"] expected_result = convert_unit(np.array(-3.22E+01), "hartree") -- GitLab