def _check_incar_ele_temp(testCase, idx, ele_temp): fp_path = os.path.join('iter.%06d' % idx, '02.fp') tasks = glob.glob(os.path.join(fp_path, 'task.*')) cwd = os.getcwd() for ii in tasks: os.chdir(ii) bname = os.path.basename(ii) sidx = int(bname.split('.')[1]) tidx = int(bname.split('.')[2]) with open('INCAR') as fp: incar = fp.read() incar0 = Incar.from_string(incar) # make_fake_md: the frames in a system shares the same ele_temp incar1 = Incar.from_string( vasp_incar_ele_temp_ref % (ele_temp[sidx][0] * pc.Boltzmann / pc.electron_volt)) for ii in incar0.keys(): # skip checking nbands... if ii == 'NBANDS': continue testCase.assertAlmostEqual(incar0[ii], incar1[ii], msg='key %s differ' % (ii), places=5) os.chdir(cwd)
def make_vasp_kpoints_from_incar(work_dir, jdata): cwd = os.getcwd() fp_aniso_kspacing = jdata.get('fp_aniso_kspacing') os.chdir(work_dir) # get kspacing and kgamma from incar assert (os.path.exists('INCAR')) with open('INCAR') as fp: incar = fp.read() standard_incar = incar_upper(Incar.from_string(incar)) if fp_aniso_kspacing is None: try: kspacing = standard_incar['KSPACING'] except KeyError: raise RuntimeError("KSPACING must be given in INCAR") else: kspacing = fp_aniso_kspacing try: gamma = standard_incar['KGAMMA'] if isinstance(gamma, bool): pass else: if gamma[0].upper() == "T": gamma = True else: gamma = False except KeyError: raise RuntimeError("KGAMMA must be given in INCAR") # check poscar assert (os.path.exists('POSCAR')) # make kpoints ret = make_kspacing_kpoints('POSCAR', kspacing, gamma) kp = Kpoints.from_string(ret) kp.write_file("KPOINTS") os.chdir(cwd)
def test_get_defect_charge_state(tmpdir): tmpdir.chdir() structure = Structure(Lattice.cubic(10), ["H", "He"], [[0.0] * 3, [0.5] * 3]) fake_potcar_str = """ PAW_PBE H 15Jun2001 1.00000000000000 parameters from PSCTR are: VRHFIN =H: ultrasoft test LEXCH = PE TITEL = PAW_PBE H 15Jun2001 POMASS = 1.000; ZVAL = 1.000 mass and valenz ENMAX = 250.000; ENMIN = 200.000 eV END of PSCTR-controll parameters End of Dataset PAW_PBE He_pv 15Jun2001 1.00000000000000 parameters from PSCTR are: VRHFIN =He: ultrasoft test LEXCH = PE TITEL = PAW_PBE He_pv 15Jun2001 POMASS = 1.000; ZVAL = 1.000 mass and valenz ENMAX = 250.000; ENMIN = 200.000 eV END of PSCTR-controll parameters End of Dataset """ Path("POTCAR").write_text(fake_potcar_str) potcar = Potcar.from_file("POTCAR") incar = Incar.from_string("NELECT = 1") assert get_defect_charge_state(Poscar(structure), potcar, incar) == 2 - 1 structure = Structure(Lattice.cubic(10), ["H", "He", "H", "H"], [[0.0] * 3, [0.2] * 3, [0.4] * 3, [0.6] * 3]) with pytest.raises(ValueError): get_defect_charge_state(Poscar(structure), potcar, incar) incar = Incar.from_string("") assert get_defect_charge_state(Poscar(structure), potcar, incar) == 0