def test_get_eff_masses(self): m = [[9., 5., 1.], [5., 7., 3.], [1., 3., 6.]] basis = [[6., 2., 1.], [3., 9., 4.], [1., 3., 8.]] em, vecs_cart, vecs_frac, vecs_n = emc.get_eff_masses(m, basis) self.assertListAlmostEqual(em, [0.48965, 0.16844, 0.07132], places=5, msg='Effective mass value failed') self.assertListAlmostEqual(vecs_cart[0], [-0.47715, 0.75420, -0.45113], places=5, msg='Cartesian eigenvectors failed') self.assertListAlmostEqual(vecs_cart[1], [-0.53266, 0.16010, 0.83104], places=5, msg='Cartesian eigenvectors failed') self.assertListAlmostEqual(vecs_cart[2], [0.69900, 0.63683, 0.32534], places=5, msg='Cartesian eigenvectors failed') self.assertListAlmostEqual(vecs_frac[0], [-0.13660, 0.15271, -0.11567], places=5, msg='Fractional eigenvectors failed') self.assertListAlmostEqual(vecs_frac[1], [-0.10988, 0.00360, 0.11581], places=5, msg='Fractional eigenvectors failed') self.assertListAlmostEqual(vecs_frac[2], [0.09126, 0.04887, 0.00483], places=5, msg='Fractional eigenvectors failed') self.assertListAlmostEqual(vecs_n[0], [-0.89450, 1.00000, -0.75745], places=5, msg='Normalized eigenvectors failed') self.assertListAlmostEqual(vecs_n[1], [-0.94877, 0.03110, 1.00000], places=5, msg='Normalized eigenvectors failed') self.assertListAlmostEqual(vecs_n[2], [1.00000, 0.53551, 0.05287], places=5, msg='Normalized eigenvectors failed')
def test_calculate_effmass(self): kpt, stepsize, band, prg, basis = emc.parse_inpcar( self.inpcar_fh, debug=False) # will need band and stepsize later energies = emc.parse_EIGENVAL_VASP(self.eigenval_fh, band, len(emc.st3), debug=False) m = emc.fd_effmass_st3(energies, stepsize) self.assertListAlmostEqual( m[0], [-2.90687, 0.0, 0.0], places=5, msg='Failed to calculate effective mass tensor') self.assertListAlmostEqual( m[1], [0.0, -2.90687, 0.0], places=5, msg='Failed to calculate effective mass tensor') self.assertListAlmostEqual( m[2], [0.0, 0.0, -2.90687], places=5, msg='Failed to calculate effective mass tensor') masses, vecs_cart, vecs_frac, vecs_n = emc.get_eff_masses(m, basis) self.assertListAlmostEqual(masses, [-0.344013] * 3, places=5, msg='Effective mass calculations failed')
def test_calculate_effmass(self): kpt, stepsize, band, prg, basis = emc.parse_inpcar(self.inpcar_fh, debug=False) # will need band and stepsize later energies = emc.parse_EIGENVAL_VASP(self.eigenval_fh, band, len(emc.st3), debug=False) m = emc.fd_effmass_st3(energies, stepsize) self.assertListAlmostEqual(m[0], [-2.90687, 0.0, 0.0], places=5, msg='Failed to calculate effective mass tensor') self.assertListAlmostEqual(m[1], [0.0, -2.90687, 0.0], places=5, msg='Failed to calculate effective mass tensor') self.assertListAlmostEqual(m[2], [0.0, 0.0, -2.90687], places=5, msg='Failed to calculate effective mass tensor') masses, vecs_cart, vecs_frac, vecs_n = emc.get_eff_masses(m, basis) self.assertListAlmostEqual(masses, [-0.344013]*3, places=5, msg='Effective mass calculations failed')
def test_get_eff_masses(self): m = [[9.,5.,1.], [5.,7.,3.], [1.,3.,6.]] basis = [[6.,2.,1.], [3.,9.,4.], [1.,3.,8.]] em, vecs_cart, vecs_frac, vecs_n = emc.get_eff_masses(m, basis) self.assertListAlmostEqual(em, [0.48965,0.16844,0.07132], places=5, msg='Effective mass value failed') self.assertListAlmostEqual(vecs_cart[0], [-0.47715, 0.75420,-0.45113], places=5, msg='Cartesian eigenvectors failed') self.assertListAlmostEqual(vecs_cart[1], [-0.53266, 0.16010, 0.83104], places=5, msg='Cartesian eigenvectors failed') self.assertListAlmostEqual(vecs_cart[2], [ 0.69900, 0.63683, 0.32534], places=5, msg='Cartesian eigenvectors failed') self.assertListAlmostEqual(vecs_frac[0], [-0.13660, 0.15271,-0.11567], places=5, msg='Fractional eigenvectors failed') self.assertListAlmostEqual(vecs_frac[1], [-0.10988, 0.00360, 0.11581], places=5, msg='Fractional eigenvectors failed') self.assertListAlmostEqual(vecs_frac[2], [ 0.09126, 0.04887, 0.00483], places=5, msg='Fractional eigenvectors failed') self.assertListAlmostEqual(vecs_n[0], [-0.89450, 1.00000,-0.75745], places=5, msg='Normalized eigenvectors failed') self.assertListAlmostEqual(vecs_n[1], [-0.94877, 0.03110, 1.00000], places=5, msg='Normalized eigenvectors failed') self.assertListAlmostEqual(vecs_n[2], [ 1.00000, 0.53551, 0.05287], places=5, msg='Normalized eigenvectors failed')
def test_calculate_effmass(self): kpt, stepsize, band, prg, basis = emc.parse_inpcar( self.inpcar_fh, debug=False) # will need band and stepsize later energies = emc.parse_EIGENVAL_VASP(self.eigenval_fh, band, len(emc.st3), debug=False) m = emc.fd_effmass_st3(energies, stepsize) self.assertListAlmostEqual( m[0], [-1.23535, 0.04464, 0.0], places=5, msg='Failed to calculate effective mass tensor') self.assertListAlmostEqual( m[1], [0.04464, -0.45875, 0.0], places=5, msg='Failed to calculate effective mass tensor') self.assertListAlmostEqual( m[2], [0.0, 0.0, -0.67875], places=5, msg='Failed to calculate effective mass tensor') print '' print 'Effective mass values and directions for Perylene-TCNQ crystal' print 'are tested against data computed in the JLB group' print '' masses, vecs_cart, vecs_frac, vecs_n = emc.get_eff_masses(m, basis) self.assertListAlmostEqual(masses, [-0.808, -1.473, -2.192], places=3, msg='Effective mass calculations failed') self.assertListAlmostEqual(vecs_n[0], [1.0, -0.02531, 0.0], places=5, msg='Effective mass direction 1 failed') self.assertListAlmostEqual(vecs_n[1], [0.0, 0.0, 1.0], places=5, msg='Effective mass direction 2 failed') self.assertListAlmostEqual(vecs_n[2], [0.11385, 1.0, 0.0], places=5, msg='Effective mass direction 3 failed')