def test_principal_moments_of_inertia(self): """Testing principal moments of inertia and the principal axes for one logfile where it is printed. """ data, logfile = getdatafile(DALTON, "basicDALTON-2015", ["dvb_sp_hf.out"]) nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) ref_pmoi = [] ref_axes = [] with open(logfile.filename) as f: for line in f: if line.strip() == "Principal moments of inertia (u*A**2) and principal axes": next(f) next(f) for _ in range(3): tokens = [float(x) for x in next(f).split()[1:]] ref_pmoi.append(tokens[0]) ref_axes.append(tokens[1:]) pmoi, axes = nuclear.principal_moments_of_inertia() np.testing.assert_allclose(pmoi, ref_pmoi, rtol=0, atol=1.0e-4) # The phases of the eigenvectors may be different, but they # are still orthonormal within each set. np.testing.assert_allclose(np.abs(axes), np.abs(ref_axes), rtol=0, atol=1.0e-4)
def test_principal_moments_of_inertia(self): """Testing principal moments of inertia and the principal axes for one logfile where it is printed. """ data, logfile = getdatafile(DALTON, "basicDALTON-2015", ["dvb_sp_hf.out"]) nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) ref_pmoi = [] ref_axes = [] with open(logfile.filename) as f: for line in f: if line.strip( ) == "Principal moments of inertia (u*A**2) and principal axes": next(f) next(f) for _ in range(3): tokens = [float(x) for x in next(f).split()[1:]] ref_pmoi.append(tokens[0]) ref_axes.append(tokens[1:]) pmoi, axes = nuclear.principal_moments_of_inertia() np.testing.assert_allclose(pmoi, ref_pmoi, rtol=0, atol=1.0e-4) # The phases of the eigenvectors may be different, but they # are still orthonormal within each set. np.testing.assert_allclose(np.abs(axes), np.abs(ref_axes), rtol=0, atol=1.0e-4)
def test_rotational_constants(self): """Testing rotational constants for two logfiles where they are printed. """ data, logfile = getdatafile(DALTON, "basicDALTON-2015", ["dvb_sp_hf.out"]) nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) with open(logfile.filename) as f: for line in f: if line.strip() == "Rotational constants": while line.split() != ['A', 'B', 'C']: line = next(f) line = next(f) ref_mhz = [float(x) for x in next(f).split()[:-1]] ref_invcm = [float(x) for x in next(f).split()[:-1]] rotconsts_ghz = nuclear.rotational_constants('ghz') rotconsts_invcm = nuclear.rotational_constants('invcm') np.testing.assert_allclose(rotconsts_ghz * 1.0e3, ref_mhz, rtol=0, atol=1.0e-4) np.testing.assert_allclose(rotconsts_invcm, ref_invcm, rtol=0, atol=1.0e-4) data, logfile = getdatafile(Gaussian, "basicGaussian16", ["dvb_sp.out"]) nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) with open(logfile.filename) as f: for line in f: if "Rotational constants (GHZ):" in line: ref_ghz = [float(x) for x in line.split()[3:]] rotconsts_ghz = nuclear.rotational_constants('ghz') np.testing.assert_allclose(rotconsts_ghz, ref_ghz, rtol=0, atol=1.0e-5)
def test_nre(self): """Testing nuclear repulsion energy for one logfile where it is printed.""" data, logfile = getdatafile(QChem, "basicQChem4.2", "water_mp4sdq.out") nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) with open(logfile.filename) as f: output = f.read() line = re.search('Nuclear Repulsion Energy = .* hartrees', output).group() nre = float(line.split()[4]) nre = utils.convertor(nre, 'Angstrom', 'bohr') self.assertAlmostEqual(nuclear.repulsion_energy(), nre, places=7)
def test_repulsion_energy(self): """Testing nuclear repulsion energy for one logfile where it is printed.""" data, logfile = getdatafile(QChem, "basicQChem5.4", ["water_mp4sdq.out"]) nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) with open(logfile.filename) as f: output = f.read() line = re.search('Nuclear Repulsion Energy = .* hartrees', output).group() nre = float(line.split()[4]) nre = utils.convertor(nre, 'Angstrom', 'bohr') self.assertAlmostEqual(nuclear.repulsion_energy(), nre, places=7)
def test_principal_moments_of_inertia_2(self): """Testing principal moments of inertia and the principal axes for one logfile where it is printed. This test was added as a follow-up to PR #790. """ data, _ = getdatafile(Gaussian, "basicGaussian16", ["dvb_ir.out"]) nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) ref_pmoi = [390.07633792, 2635.01850639, 3025.09484431] pmoi, _ = nuclear.principal_moments_of_inertia("amu_bohr_2") np.testing.assert_allclose(pmoi, ref_pmoi, rtol=0, atol=1.0e-4)
def test_rotational_constants(self): """Testing rotational constants for two logfiles where they are printed. """ data, logfile = getdatafile(DALTON, "basicDALTON-2015", ["dvb_sp_hf.out"]) nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) with open(logfile.filename) as f: for line in f: if line.strip() == "Rotational constants": while line.split() != ['A', 'B', 'C']: line = next(f) line = next(f) ref_mhz = [float(x) for x in next(f).split()[:-1]] ref_invcm = [float(x) for x in next(f).split()[:-1]] rotconsts_ghz = nuclear.rotational_constants('ghz') rotconsts_invcm = nuclear.rotational_constants('invcm') np.testing.assert_allclose(rotconsts_ghz * 1.0e3, ref_mhz, rtol=0, atol=1.0e-4) np.testing.assert_allclose(rotconsts_invcm, ref_invcm, rtol=0, atol=1.0e-4) data, logfile = getdatafile(Gaussian, "basicGaussian16", ["dvb_sp.out"]) nuclear = Nuclear(data) nuclear.logger.setLevel(logging.ERROR) with open(logfile.filename) as f: for line in f: if "Rotational constants (GHZ):" in line: ref_ghz = [float(x) for x in line.split()[3:]] rotconsts_ghz = nuclear.rotational_constants('ghz') np.testing.assert_allclose(rotconsts_ghz, ref_ghz, rtol=0, atol=1.0e-5)
def check(atomnos, formula, charge=0): data.natom = len(atomnos) data.atomnos = np.array(atomnos) data.atomcoords = np.zeros((data.natom, 3)) data.charge = charge self.assertEqual(Nuclear(data).stoichiometry(), formula)