def test_brmix(self): h = VaspErrorHandler("vasp.brmix") self.assertEqual(h.check(), True) # The first (no good OUTCAR) correction, check IMIX d = h.correct() self.assertEqual(d["errors"], ['brmix']) vi = VaspInput.from_directory(".") self.assertEqual(vi["INCAR"]["IMIX"], 1) self.assertTrue(os.path.exists("CHGCAR")) # The next correction check Gamma and evenize h.correct() vi = VaspInput.from_directory(".") self.assertFalse("IMIX" in vi["INCAR"]) self.assertTrue(os.path.exists("CHGCAR")) if vi["KPOINTS"].style == Kpoints.supported_modes.Gamma and vi["KPOINTS"].num_kpts < 1: all_kpts_even = all([ bool(n % 2 == 0) for n in vi["KPOINTS"].kpts[0] ]) self.assertFalse(all_kpts_even) # The next correction check ISYM and no CHGCAR h.correct() vi = VaspInput.from_directory(".") self.assertEqual(vi["INCAR"]["ISYM"], 0) self.assertFalse(os.path.exists("CHGCAR")) shutil.copy("INCAR.nelect", "INCAR") h = VaspErrorHandler("vasp.brmix") self.assertEqual(h.check(), False) d = h.correct() self.assertEqual(d["errors"], [])
def test_static_run_correction(self): shutil.copy("OSZICAR.empty", "OSZICAR") s1 = Structure.from_file("POSCAR") incar = Incar.from_file("INCAR") # Test for NSW 0 incar.update({"NSW": 0}) incar.write_file("INCAR") h = VaspErrorHandler("vasp.out") self.assertEqual(h.check(), True) d = h.correct() self.assertEqual(d['errors'], ['zpotrf']) s2 = Structure.from_file("POSCAR") self.assertAlmostEqual(s2.volume, s1.volume, 3) self.assertEqual(Incar.from_file("INCAR")["ISYM"], 0) # Test for ISIF 0-2 incar.update({"NSW":99, "ISIF":2}) incar.write_file("INCAR") h = VaspErrorHandler("vasp.out") self.assertEqual(h.check(), True) d = h.correct() self.assertEqual(d['errors'], ['zpotrf']) s2 = Structure.from_file("POSCAR") self.assertAlmostEqual(s2.volume, s1.volume, 3) self.assertEqual(Incar.from_file("INCAR")["ISYM"], 0)
def test_dentet(self): h = VaspErrorHandler("vasp.dentet") h.check() d = h.correct() self.assertEqual(d["errors"], ['dentet']) self.assertEqual(d["actions"], [{'action': {'_set': {'ISMEAR': 0}}, 'dict': 'INCAR'}])
def test_too_few_bands(self): os.chdir(os.path.join(test_dir, "too_few_bands")) shutil.copy("INCAR", "INCAR.orig") h = VaspErrorHandler("vasp.too_few_bands") h.check() d = h.correct() self.assertEqual(d["errors"], ['too_few_bands']) self.assertEqual(d["actions"], [{'action': {'_set': {'NBANDS': 501}}, 'dict': 'INCAR'}]) os.remove("error.1.tar.gz") shutil.move("INCAR.orig", "INCAR")
def test_brmix(self): h = VaspErrorHandler("vasp.brmix") self.assertEqual(h.check(), True) d = h.correct() self.assertEqual(d["errors"], ['brmix']) self.assertFalse(os.path.exists("CHGCAR")) shutil.copy("INCAR.nelect", "INCAR") h = VaspErrorHandler("vasp.brmix") self.assertEqual(h.check(), False) d = h.correct() self.assertEqual(d["errors"], [])
def test_rot_matrix(self): if "PMG_VASP_PSP_DIR" not in os.environ: os.environ["PMG_VASP_PSP_DIR"] = test_dir subdir = os.path.join(test_dir, "poscar_error") os.chdir(subdir) shutil.copy("KPOINTS", "KPOINTS.orig") h = VaspErrorHandler() h.check() d = h.correct() self.assertEqual(d["errors"], ["rot_matrix"]) os.remove(os.path.join(subdir, "error.1.tar.gz")) shutil.copy("KPOINTS.orig", "KPOINTS") os.remove("KPOINTS.orig")
def test_nicht_konv(self): h = VaspErrorHandler("vasp.nicht_konvergent") h.natoms_large_cell = 5 self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["nicht_konv"]) i = Incar.from_file("INCAR") self.assertEqual(i["LREAL"], True)
def test_subspace(self): h = VaspErrorHandler("vasp.subspace") h.check() d = h.correct() self.assertEqual(d["errors"], ['subspacematrix']) self.assertEqual(d["actions"], [{'action': {'_set': {'LREAL': False}}, 'dict': 'INCAR'}]) # 2nd error should set PREC to accurate. h.check() d = h.correct() self.assertEqual(d["errors"], ['subspacematrix']) self.assertEqual(d["actions"], [{'action': {'_set': {'PREC': 'Accurate'}}, 'dict': 'INCAR'}])
def test_aliasing(self): os.chdir(os.path.join(test_dir, "aliasing")) shutil.copy("INCAR", "INCAR.orig") h = VaspErrorHandler("vasp.aliasing") h.check() d = h.correct() shutil.move("INCAR.orig", "INCAR") clean_dir() os.chdir(test_dir) self.assertEqual(d["errors"], ['aliasing']) self.assertEqual(d["actions"], [{'action': {'_set': {'NGX': 34}}, 'dict': 'INCAR'}, {"file": "CHGCAR", "action": {"_file_delete": {'mode': "actual"}}}, {"file": "WAVECAR", "action": {"_file_delete": {'mode': "actual"}}}])
def test_first_step(self): shutil.copy("OSZICAR.empty", "OSZICAR") s1 = Structure.from_file("POSCAR") h = VaspErrorHandler("vasp.out") self.assertEqual(h.check(), True) d = h.correct() self.assertEqual(d['errors'], ['zpotrf']) s2 = Structure.from_file("POSCAR") self.assertAlmostEqual(s2.volume, s1.volume * 1.2 ** 3, 3)
def test_rhosyg(self): h = VaspErrorHandler("vasp.rhosyg") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["rhosyg"]) i = Incar.from_file("INCAR") self.assertEqual(i["SYMPREC"], 1e-4) self.assertEqual(h.correct()["errors"], ["rhosyg"]) i = Incar.from_file("INCAR") self.assertEqual(i["ISYM"], 0)
def test_eddrmm(self): h = VaspErrorHandler("vasp.eddrmm") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["eddrmm"]) i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "Normal") self.assertEqual(h.correct()["errors"], ["eddrmm"]) i = Incar.from_file("INCAR") self.assertEqual(i["POTIM"], 0.25)
def test_too_few_bands(self): os.chdir(os.path.join(test_dir, "too_few_bands")) shutil.copy("INCAR", "INCAR.orig") h = VaspErrorHandler("vasp.too_few_bands") h.check() d = h.correct() self.assertEqual(d["errors"], ['too_few_bands']) self.assertEqual(d["actions"], [{ 'action': { '_set': { 'NBANDS': 501 } }, 'dict': 'INCAR' }]) clean_dir() shutil.move("INCAR.orig", "INCAR") os.chdir(test_dir)
def test_first_step(self): shutil.copy("OSZICAR.empty", "OSZICAR") s1 = Structure.from_file("POSCAR") h = VaspErrorHandler("vasp.out") self.assertEqual(h.check(), True) d = h.correct() self.assertEqual(d['errors'], ['zpotrf']) s2 = Structure.from_file("POSCAR") self.assertAlmostEqual(s2.volume, s1.volume * 1.2**3, 3)
def test_potim_correction(self): shutil.copy("OSZICAR.one_step", "OSZICAR") s1 = Structure.from_file("POSCAR") h = VaspErrorHandler("vasp.out") self.assertEqual(h.check(), True) d = h.correct() self.assertEqual(d['errors'], ['zpotrf']) s2 = Structure.from_file("POSCAR") self.assertAlmostEqual(s2.volume, s1.volume, 3) self.assertAlmostEqual(Incar.from_file("INCAR")['POTIM'], 0.25)
def test_check_correct(self): h = VaspErrorHandler("vasp.teterror") h.check() d = h.correct() self.assertEqual(d["errors"], ['tet']) self.assertEqual(d["actions"], [{'action': {'_set': {'ISMEAR': 0}}, 'dict': 'INCAR'}]) h = VaspErrorHandler("vasp.sgrcon") h.check() d = h.correct() self.assertEqual(d["errors"], ['rot_matrix']) self.assertEqual(set([a["dict"] for a in d["actions"]]), {"KPOINTS"}) h = VaspErrorHandler("vasp.real_optlay") h.check() d = h.correct() self.assertEqual(d["errors"], ['real_optlay']) self.assertEqual(d["actions"], [{'action': {'_set': {'LREAL': False}}, 'dict': 'INCAR'}]) subdir = os.path.join(test_dir, "large_cell_real_optlay") os.chdir(subdir) shutil.copy("INCAR", "INCAR.orig") h = VaspErrorHandler() h.check() d = h.correct() self.assertEqual(d["errors"], ['real_optlay']) vi = VaspInput.from_directory(".") self.assertEqual(vi["INCAR"]["LREAL"], True) h.check() d = h.correct() self.assertEqual(d["errors"], ['real_optlay']) vi = VaspInput.from_directory(".") self.assertEqual(vi["INCAR"]["LREAL"], False) shutil.copy("INCAR.orig", "INCAR") os.remove("INCAR.orig") os.remove("error.1.tar.gz") os.remove("error.2.tar.gz") os.chdir(test_dir)
def test_check_correct(self): h = VaspErrorHandler("vasp.teterror") h.check() d = h.correct() self.assertEqual(d["errors"], ['tet']) self.assertEqual(d["actions"], [{ 'action': { '_set': { 'ISMEAR': 0 } }, 'dict': 'INCAR' }]) h = VaspErrorHandler("vasp.sgrcon") h.check() d = h.correct() self.assertEqual(d["errors"], ['rot_matrix']) self.assertEqual(set([a["dict"] for a in d["actions"]]), {"KPOINTS"}) h = VaspErrorHandler("vasp.real_optlay") h.check() d = h.correct() self.assertEqual(d["errors"], ['real_optlay']) self.assertEqual(d["actions"], [{ 'action': { '_set': { 'LREAL': False } }, 'dict': 'INCAR' }])
def test_brmix(self): h = VaspErrorHandler("vasp.brmix") self.assertEqual(h.check(), True) d = h.correct() self.assertEqual(d["errors"], ['brmix']) vi = VaspInput.from_directory(".") chgcar_exists = os.path.exists("CHGCAR") if h.error_count['brmix'] > 1: self.assertFalse(chgcar_exists) else: self.assertTrue(chgcar_exists) if vi["KPOINTS"].style == Kpoints.supported_modes.Gamma and vi["KPOINTS"].num_kpts < 1: all_kpts_even = all([ bool(n % 2 == 0) for n in vi["KPOINTS"].kpts[0] ]) self.assertFalse(all_kpts_even) shutil.copy("INCAR.nelect", "INCAR") h = VaspErrorHandler("vasp.brmix") self.assertEqual(h.check(), False) d = h.correct() self.assertEqual(d["errors"], [])
def test_brmix(self): h = VaspErrorHandler("vasp.brmix") self.assertEqual(h.check(), True) d = h.correct() self.assertEqual(d["errors"], ['brmix']) vi = VaspInput.from_directory(".") chgcar_exists = os.path.exists("CHGCAR") if h.error_count['brmix'] > 1: self.assertFalse(chgcar_exists) else: self.assertTrue(chgcar_exists) if vi["KPOINTS"].style == Kpoints.supported_modes.Gamma and vi[ "KPOINTS"].num_kpts < 1: all_kpts_even = all( [bool(n % 2 == 0) for n in vi["KPOINTS"].kpts[0]]) self.assertFalse(all_kpts_even) shutil.copy("INCAR.nelect", "INCAR") h = VaspErrorHandler("vasp.brmix") self.assertEqual(h.check(), False) d = h.correct() self.assertEqual(d["errors"], [])
def test_gradient_not_orthogonal(self): h = VaspErrorHandler("vasp.gradient_not_orthogonal") self.assertEqual(h.check(), True) self.assertIn("grad_not_orth", h.correct()["errors"]) i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "Fast") shutil.copy("INCAR.gga_all", "INCAR") i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "All") h = VaspErrorHandler("vasp.gradient_not_orthogonal") self.assertEqual(h.check(), True) self.assertIn("grad_not_orth", h.correct()["errors"]) i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "Normal") shutil.copy("INCAR.hybrid_normal", "INCAR") i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "Normal") h = VaspErrorHandler("vasp.gradient_not_orthogonal") self.assertEqual(h.check(), True) self.assertIn("grad_not_orth", h.correct()["errors"]) i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "Normal") shutil.copy("INCAR.hybrid_all", "INCAR") i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "All") h = VaspErrorHandler("vasp.gradient_not_orthogonal") self.assertEqual(h.check(), True) self.assertIn("grad_not_orth", h.correct()["errors"]) i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "All") shutil.copy("INCAR.metagga_all", "INCAR") i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "All") h = VaspErrorHandler("vasp.gradient_not_orthogonal") self.assertEqual(h.check(), True) self.assertIn("grad_not_orth", h.correct()["errors"]) i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "All") shutil.copy("INCAR.metagga_fast", "INCAR") i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "Fast") h = VaspErrorHandler("vasp.gradient_not_orthogonal") self.assertEqual(h.check(), True) self.assertIn("grad_not_orth", h.correct()["errors"]) i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "Fast")
def test_check_correct(self): h = VaspErrorHandler("vasp.teterror") h.check() d = h.correct() self.assertEqual(d["errors"], ["tet"]) self.assertEqual( d["actions"], [{ "action": { "_set": { "ISMEAR": 0, "SIGMA": 0.05 } }, "dict": "INCAR" }], ) h = VaspErrorHandler("vasp.teterror", errors_subset_to_catch=["eddrmm"]) self.assertFalse(h.check()) h = VaspErrorHandler("vasp.sgrcon") h.check() d = h.correct() self.assertEqual(d["errors"], ["rot_matrix"]) self.assertEqual({a["dict"] for a in d["actions"]}, {"KPOINTS"}) h = VaspErrorHandler("vasp.real_optlay") h.check() d = h.correct() self.assertEqual(d["errors"], ["real_optlay"]) self.assertEqual(d["actions"], [{ "action": { "_set": { "LREAL": False } }, "dict": "INCAR" }])
def test_check_correct(self): h = VaspErrorHandler("vasp.teterror") h.check() d = h.correct() self.assertEqual(d["errors"], ['tet']) self.assertEqual(d["actions"], [{'action': {'_set': {'ISMEAR': 0}}, 'dict': 'INCAR'}]) h = VaspErrorHandler("vasp.classrotmat") h.check() d = h.correct() self.assertEqual(d["errors"], ['rot_matrix']) self.assertEqual(set([a["dict"] for a in d["actions"]]), set(["POSCAR", "INCAR"])) h = VaspErrorHandler("vasp.real_optlay") h.check() d = h.correct() self.assertEqual(d["errors"], ['real_optlay']) self.assertEqual(d["actions"], [{'action': {'_set': {'LREAL': False}}, 'dict': 'INCAR'}])
def test_brions(self): shutil.copy("INCAR.ibrion", "INCAR") h = VaspErrorHandler("vasp.brions") h.check() d = h.correct() self.assertEqual(d["errors"], ["brions"]) i = Incar.from_file("INCAR") self.assertEqual(i["IBRION"], 1) self.assertAlmostEqual(i["POTIM"], 1.5) h.check() d = h.correct() self.assertEqual(d["errors"], ["brions"]) i = Incar.from_file("INCAR") self.assertEqual(i["IBRION"], 2) self.assertAlmostEqual(i["POTIM"], 1.4) h.check() d = h.correct() self.assertEqual(d["errors"], ["brions"]) i = Incar.from_file("INCAR") self.assertEqual(i["IBRION"], 2) self.assertAlmostEqual(i["POTIM"], 1.5)
def test_point_group(self): h = VaspErrorHandler("vasp.point_group") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["point_group"]) i = Incar.from_file("INCAR") self.assertEqual(i["ISYM"], 0)
def test_zbrent(self): h = VaspErrorHandler("vasp.zbrent") h.check() d = h.correct() self.assertEqual(d["errors"], ["zbrent"]) i = Incar.from_file("INCAR") self.assertEqual(i["IBRION"], 1) h.check() d = h.correct() self.assertEqual(d["errors"], ["zbrent"]) i = Incar.from_file("INCAR") self.assertEqual(i["EDIFF"], 1e-6) self.assertEqual(i["NELMIN"], 6) shutil.copy("INCAR.orig", "INCAR") h = VaspErrorHandler("vasp.zbrent") h.vtst_fixes = True h.check() d = h.correct() self.assertEqual(d["errors"], ["zbrent"]) i = Incar.from_file("INCAR") self.assertEqual(i["IBRION"], 1) self.assertEqual(i["EDIFF"], 0.0004) h.check() d = h.correct() self.assertEqual(d["errors"], ["zbrent"]) i = Incar.from_file("INCAR") self.assertEqual(i["EDIFF"], 1e-6) self.assertEqual(i["NELMIN"], 6) self.assertEqual(i["IBRION"], 3) self.assertEqual(i["IOPT"], 7) self.assertEqual(i["POTIM"], 0) shutil.copy("INCAR.ediff", "INCAR") h = VaspErrorHandler("vasp.zbrent") h.check() d = h.correct() self.assertEqual(d["errors"], ["zbrent"]) i = Incar.from_file("INCAR") self.assertEqual(i["IBRION"], 1) self.assertEqual(i["EDIFF"], 1e-6) h.check() d = h.correct() self.assertEqual(d["errors"], ["zbrent"]) i = Incar.from_file("INCAR") self.assertEqual(i["EDIFF"], 1e-7) self.assertEqual(i["NELMIN"], 6)
def test_posmap(self): h = VaspErrorHandler("vasp.posmap") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["posmap"]) i = Incar.from_file("INCAR") self.assertEqual(i["SYMPREC"], 1e-6)
def test_edddav(self): h = VaspErrorHandler("vasp.edddav") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["edddav"]) self.assertFalse(os.path.exists("CHGCAR"))
def test_gradient_not_orthogonal(self): h = VaspErrorHandler("vasp.gradient_not_orthogonal") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["grad_not_orth"]) i = Incar.from_file("INCAR") self.assertEqual(i["ISMEAR"], 0)
def test_nicht_konv(self): h = VaspErrorHandler("vasp.nicht_konvergent") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["nicht_konv"]) i = Incar.from_file("INCAR") self.assertEqual(i["LREAL"], False)
def test_algo_tet(self): h = VaspErrorHandler("vasp.algo_tet") self.assertEqual(h.check(), True) self.assertIn("algo_tet", h.correct()["errors"]) i = Incar.from_file("INCAR") self.assertEqual(i["ISMEAR"], 0)
def test_pssyevx(self): h = VaspErrorHandler("vasp.pssyevx") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["pssyevx"]) i = Incar.from_file("INCAR") self.assertEqual(i["ALGO"], "Normal")
def test_symprec_noise(self): h = VaspErrorHandler("vasp.symprec_noise") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["symprec_noise"]) i = Incar.from_file("INCAR") self.assertEqual(i["SYMPREC"], 1e-6)
def test_check_correct(self): h = VaspErrorHandler("vasp.teterror") h.check() d = h.correct() self.assertEqual(d["errors"], ["tet"]) self.assertEqual( d["actions"], [{ "action": { "_set": { "ISMEAR": 0, "SIGMA": 0.05 } }, "dict": "INCAR" }], ) h = VaspErrorHandler("vasp.teterror", errors_subset_to_catch=["eddrmm"]) self.assertFalse(h.check()) h = VaspErrorHandler("vasp.sgrcon") h.check() d = h.correct() self.assertEqual(d["errors"], ["rot_matrix"]) self.assertEqual(set([a["dict"] for a in d["actions"]]), {"KPOINTS"}) h = VaspErrorHandler("vasp.real_optlay") h.check() d = h.correct() self.assertEqual(d["errors"], ["real_optlay"]) self.assertEqual(d["actions"], [{ "action": { "_set": { "LREAL": False } }, "dict": "INCAR" }]) subdir = os.path.join(test_dir, "large_cell_real_optlay") os.chdir(subdir) shutil.copy("INCAR", "INCAR.orig") h = VaspErrorHandler() h.check() d = h.correct() self.assertEqual(d["errors"], ["real_optlay"]) vi = VaspInput.from_directory(".") self.assertEqual(vi["INCAR"]["LREAL"], True) h.check() d = h.correct() self.assertEqual(d["errors"], ["real_optlay"]) vi = VaspInput.from_directory(".") self.assertEqual(vi["INCAR"]["LREAL"], False) shutil.copy("INCAR.orig", "INCAR") os.remove("INCAR.orig") os.remove("error.1.tar.gz") os.remove("error.2.tar.gz") os.chdir(test_dir)
def test_rot_matrix_vasp6(self): h = VaspErrorHandler("vasp6.sgrcon") self.assertEqual(h.check(), True) self.assertEqual(h.correct()["errors"], ["rot_matrix"])
'garden/dev', 'garden') try: os.chdir(launch_dir) except: print ' |===> could not find launch directory in usual locations' lpdb.rerun_fw(fw['fw_id']) print ' |===> marked for RERUN' counter['LOCATION_NOT_FOUND'] += 1 continue print ' |===>', launch_dir vaspout = os.path.join(launch_dir, "vasp.out") if not os.path.exists(vaspout): vaspout = os.path.join(launch_dir, "vasp.out.gz") try: h = VaspErrorHandler(vaspout) h.check() d = h.correct() except: counter['GGA_static_Handler_Error'] += 1 if d['errors']: for err in d['errors']: counter['GGA_static_' + err] += 1 if 'brmix' in d['errors']: #lpdb.rerun_fw(fw['fw_id']) print ' |===> BRMIX error -> marked for RERUN with alternative strategy' else: print ' |===> no vasp error indicated -> TODO' counter['GGA_STATIC_NO_VASP_ERROR'] += 1 os.chdir(cwd) else: workflow = lpdb.workflows.find_one(
launch_dir = launch_dir.replace('garden/dev', 'garden') try: os.chdir(launch_dir) except: print ' |===> could not find launch directory in usual locations' lpdb.rerun_fw(fw['fw_id']) print ' |===> marked for RERUN' counter['LOCATION_NOT_FOUND'] += 1 continue print ' |===>', launch_dir vaspout = os.path.join(launch_dir, "vasp.out") if not os.path.exists(vaspout): vaspout = os.path.join(launch_dir, "vasp.out.gz") try: h = VaspErrorHandler(vaspout) h.check() d = h.correct() except: counter['GGA_static_Handler_Error'] += 1 if d['errors']: for err in d['errors']: counter['GGA_static_' + err] += 1 if 'brmix' in d['errors']: #lpdb.rerun_fw(fw['fw_id']) print ' |===> BRMIX error -> marked for RERUN with alternative strategy' else: print ' |===> no vasp error indicated -> TODO' counter['GGA_STATIC_NO_VASP_ERROR'] += 1 os.chdir(cwd) else: workflow = lpdb.workflows.find_one(