def test_prim_vec_from_angles_tetr(): energy_driver = None template_file = None #s = [] abc = [] angles = [90, 90, 90] run = m.DftRun(energy_driver, template_file, abc, angles=angles) correct_vec = np.array([[1,0,0],[0,1,0], [0,0,1]]) assert np.isclose(run._prim_vec_from_angles(), correct_vec).all()
def test_angles_prim_vec_both(): """ raises value error if both angles and prim_vec are specified """ energy_driver = None template_file = None abc = [] with pytest.raises(ValueError): m.DftRun(energy_driver, template_file, abc, angles=[90, 90, 90], prim_vec_unscaled=[] )
def test_preprocess_file_bad(): """ entering bad name for energy driver raises value error """ energy_driver = 'bad_energy_driver_name' template_file = None pvu = [] abc = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) with pytest.raises(ValueError): run._preprocess_file()
def test_angles_prim_vec_neither(): """ raises value error if neither of angles and prim_vec are specified """ energy_driver = None template_file = None #abc_guess = [] #s = [] abc = [] with pytest.raises(ValueError): m.DftRun(energy_driver, template_file, abc)
def test_get_energy_elk(): """read total energy from elk correctly""" with TemporaryDirectory() as tmp_dir: energy_driver = 'elk' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'TOTENERGY.OUT.example'), 'TOTENERGY.OUT') E = run.get_energy() assert np.isclose(E, -7.51826352965)
def test_get_energy_espresso_none(): """ raises NoEnergyFromDFT if espresso output file doesn't show completion""" with TemporaryDirectory() as tmp_dir: with pytest.raises(m.NoEnergyFromDFT): energy_driver = 'quantumespresso' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'espresso.out.noenergy'), 'log') E = run.get_energy()
def test_get_energy_espresso(): """read final energy from espresso output file correctly""" with TemporaryDirectory() as tmp_dir: energy_driver = 'quantumespresso' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'espresso.out.example'), 'log') E = run.get_energy() assert np.isclose(E, -4.18725738/2.)
def test_get_energy_socorro_relax(): """ gets FINAL energy from socorro diaryf if relaxation was performed """ with TemporaryDirectory() as tmp_dir: energy_driver = 'socorro' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'diaryf.relax'), 'diaryf') E = run.get_energy() assert np.isclose(E, -360.361967002/2.)
def test_get_energy_socorro_none(): """ raises NoEnergyFromDFT if socorro doesn't complete """ with TemporaryDirectory() as tmp_dir: with pytest.raises(m.NoEnergyFromDFT): energy_driver = 'socorro' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'diaryf.noenergy'), 'diaryf') E = run.get_energy()
def test_get_energy_socorro(): """read cell enrgy from socorro correctly""" with TemporaryDirectory() as tmp_dir: energy_driver = 'socorro' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'diaryf.example'), 'diaryf') E = run.get_energy() assert np.isclose(E, -74.637868487/2.)
def test_abinit_get_energy_multiple(): """When multiple etotal reported, returns correct etotal in Hartree""" with TemporaryDirectory() as tmp_dir: energy_driver='abinit' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'log.structurerelax.example'), 'log') E = run.get_energy() assert np.isclose(E, -7.3655263854)
def test_abinit_get_energy_single(): """When only single etotal reported (typical case), returns etotal in Hartree""" with TemporaryDirectory() as tmp_dir: energy_driver='abinit' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'log.example'), 'log') E = run.get_energy() assert np.isclose(E, -6.1395717098)
def test_get_energy_bad(): """ entering bad name for energy driver raises value error """ energy_driver = 'bad' template_file = None abc = [] pvu = [[1,1,0], [0,1,1], [1,0,1]] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) with pytest.raises(ValueError): run.get_energy()
def test_get_energy_espresso_relax(): """ gets FINAL energy from espresso if relaxation was performed """ with TemporaryDirectory() as tmp_dir: energy_driver = 'quantumespresso' template_file = None abc = [] pvu = [] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) shutil.copy(os.path.join(input_dir, 'espresso.out.relax'), 'log') E = run.get_energy() assert np.isclose(E, -29.22370146/2.)
def test_preprocess_file_espresso_rprim(): """ calling _preprocess_file for espresso correctly writes scale and lattice constants to espresso input file """ with TemporaryDirectory() as tmp_dir: correct_file = os.path.join(input_dir, 'espresso.in.correct') energy_driver = 'quantumespresso' template_file = os.path.join(input_dir, 'espresso.in.template.example') abc = [1.5, 3, 6] pvu = [[1,1,0], [0,1,1], [1,0,1]] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) run._preprocess_file() # compare written espresso input file with correct input file with open(correct_file) as f1, open('espresso.in') as f2: assert f1.readlines() == f2.readlines()
def test_preprocess_file_abinit_rprim(): """ calling _preprocess_file with for abinit correctly writes acell and lattice vectors to file not very robust since different number format would cause a fail """ with TemporaryDirectory() as tmp_dir: correct_file = os.path.join(input_dir, 'abinit.in.correct.2') energy_driver = 'abinit' template_file = os.path.join(input_dir, 'abinit.in.template.example') abc = [1.5,3,6] pvu = [[1,1,0], [0,1,1], [1,0,1]] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) run._preprocess_file() # compare written abinit file with correct input file with open(correct_file) as f1, open('abinit.in') as f2: assert f1.readlines() == f2.readlines()
def test_preprocess_file_socorro_rprim(): """ calling _preprocess_file for socorro correctly writes scale and lattice constants to socorro crystal file not very robust since different number format would cause a fail """ with TemporaryDirectory() as tmp_dir: correct_file = os.path.join(input_dir, 'crystal.correct') energy_driver = 'socorro' template_file = os.path.join(input_dir, 'crystal.template.example') abc = [1.5, 3, 6] pvu = [[1,1,0], [0,1,1], [1,0,1]] run = m.DftRun(energy_driver, template_file, abc, prim_vec_unscaled=pvu) run._preprocess_file() # compare written socorro crystal file with correct input file with open(correct_file) as f1, open('crystal') as f2: assert f1.readlines() == f2.readlines()
def test_preprocess_file_abinit_angdeg(): """ calling _preprocess_file with for abinit correctly writes lattice constants and angles to abinit input file. not very robust since different number format would cause a fail """ with TemporaryDirectory() as tmp_dir: energy_driver = 'abinit' template_file = os.path.join(input_dir, 'abinit.in.template.example') correct_file = os.path.join(input_dir, 'abinit.in.correct') ang = [90, 90, 120] abc = [1.5, 3.0, 4.5] run = m.DftRun(energy_driver, template_file, abc, angles=ang) run._preprocess_file() # compare written abinit file with correct input file with open(correct_file) as f1, open('abinit.in') as f2: assert f1.readlines() == f2.readlines()
def test_calc_unit_cell_volume_2(): abc = [8,10,12] pvu = [[2,0,0], [0,3,0], [0,0,1]] run = m.DftRun(None, None, abc, prim_vec_unscaled=pvu) assert np.isclose(run._calc_unit_cell_volume(), 5760.)
def test_calc_unit_cell_volume_3(): abc = [12,15,18] pvu = [[1,1,0], [0,1,1], [1,0,1]] run = m.DftRun(None, None, abc, prim_vec_unscaled=pvu) assert np.isclose(run._calc_unit_cell_volume(), 6480.)
def test_calc_unit_cell_volume_6(): abc = [2,2,10] angles = [90,90,120] run = m.DftRun(None, None, abc, angles=angles) assert np.isclose(run._calc_unit_cell_volume(), 20*np.sqrt(3))
def test_calc_unit_cell_volume_5(): abc = [3,6,9] angles = [90,90,90] run = m.DftRun(None, None, abc, angles=angles) assert np.isclose(run._calc_unit_cell_volume(), 162.)