def test_sparse_orbital_bz_non_colinear(): M = SparseOrbitalBZSpin(geom.graphene(), spin=Spin('NC')) M.construct(([0.1, 1.44], [[0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.4, 0.5]])) MT = M.transpose() MH = M.transpose(True) assert np.abs((M - MT)._csr._D).sum() != 0 assert np.abs((M - MH)._csr._D).sum() != 0 assert np.abs((MT - MH)._csr._D).sum() != 0
def test_sparse_orbital_bz_spin_orbit(): M = SparseOrbitalBZSpin(geom.graphene(), spin=Spin('SO')) M.construct(([0.1, 1.44], [[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8], [0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]])) MT = M.transpose() MH = M.transpose(True) assert np.abs((M - MT)._csr._D).sum() != 0 assert np.abs((M - MH)._csr._D).sum() != 0 assert np.abs((MT - MH)._csr._D).sum() != 0
def test_sparse_orbital_bz_non_colinear(): M = SparseOrbitalBZSpin(geom.graphene(), spin=Spin('NC')) M.construct(([0.1, 1.44], [[0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.4, 0.5]])) MT = M.transpose() MH = M.transpose(True) assert np.abs((M - MT)._csr._D).sum() != 0 # For a non-collinear with construct we don't take # into account the imaginary parts... :( # This should be fixed assert np.abs((M - MH)._csr._D).sum() == 0 assert np.abs((MT - MH)._csr._D).sum() != 0
def test_sparse_orbital_bz_non_colinear(): M = SparseOrbitalBZSpin(geom.graphene(), spin=Spin('NC')) M.construct(([0.1, 1.44], [[0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.4, 0.5]])) M.finalize() MT = M.transpose() MH = M.transpose(True) assert np.abs((M - MT)._csr._D).sum() != 0 # For a non-collinear with construct we don't take # into account the imaginary parts... :( # Transposing and Hermitian transpose are the same for NC # There are only 1 imaginary part which will change sign regardless assert np.abs((MT - MH)._csr._D).sum() != 0 assert np.abs((M - MH)._csr._D).sum() == 0
def test_sparse_orbital_bz_spin_orbit(): M = SparseOrbitalBZSpin(geom.graphene(), spin=Spin('SO')) M.construct(([0.1, 1.44], [[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8], [0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]])) new = (M + M.transpose(True)) / 2 assert np.abs((M - new)._csr._D).sum() == 0
def test_sparse_orbital_bz_non_colinear_trs_kramers_theorem(): M = SparseOrbitalBZSpin(geom.graphene(), spin=Spin('NC')) M.construct(([0.1, 1.44], [[0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.4, 0.5]])) M = (M + M.transpose(True)) * 0.5 MTRS = (M + M.trs()) * 0.5 # This will in principle also work for M since the above parameters preserve # TRS k = np.array([0.1, 0.1, 0]) eig1 = MTRS.eigh(k=k) eig2 = MTRS.eigh(k=-k) assert np.allclose(eig1, eig2)