def test_rho2(self, setup): bond = 1.42 sq3h = 3.**.5 * 0.5 sc = SuperCell(np.array( [[1.5, sq3h, 0.], [1.5, -sq3h, 0.], [0., 0., 10.]], np.float64) * bond, nsc=[3, 3, 1]) n = 60 rf = np.linspace(0, bond * 1.01, n) rf = (rf, rf) orb = SphericalOrbital(1, rf, 2.) C = Atom(6, orb) g = Geometry(np.array([[0., 0., 0.], [1., 0., 0.]], np.float64) * bond, atom=C, sc=sc) D = DensityMatrix(g) D.construct([[0.1, bond + 0.01], [1., 0.1]]) grid = Grid(0.2, geometry=D.geom) D.density(grid) D = DensityMatrix(g, spin=Spin('P')) D.construct([[0.1, bond + 0.01], [(1., 0.5), (0.1, 0.1)]]) grid = Grid(0.2, geometry=D.geom) D.density(grid) D.density(grid, [1., -1]) D.density(grid, 0) D.density(grid, 1) D = DensityMatrix(g, spin=Spin('NC')) D.construct([[0.1, bond + 0.01], [(1., 0.5, 0.01, 0.01), (0.1, 0.1, 0.1, 0.1)]]) grid = Grid(0.2, geometry=D.geom) D.density(grid) D.density(grid, [[1., 0.], [0., -1]]) D = DensityMatrix(g, spin=Spin('SO')) D.construct([[0.1, bond + 0.01], [(1., 0.5, 0.01, 0.01, 0.01, 0.01, 0., 0.), (0.1, 0.1, 0.1, 0.1, 0., 0., 0., 0.)]]) grid = Grid(0.2, geometry=D.geom) D.density(grid) D.density(grid, [[1., 0.], [0., -1]]) D.density(grid, Spin.X) D.density(grid, Spin.Y) D.density(grid, Spin.Z)
def test_transform_nonortho(self, setup): D = DensityMatrix(setup.g, spin='polarized', orthogonal=False) a = np.arange(3) a[-1] = 1. for ia in setup.g: D[ia, ia] = a Dt = D.transform(spin='unpolarized', dtype=np.float32) assert np.abs(0.5 * D.tocsr(0) + 0.5 * D.tocsr(1) - Dt.tocsr(0)).sum() == 0 assert np.abs(D.tocsr(-1) - Dt.tocsr(-1)).sum() == 0 Dt = D.transform(spin='polarized') assert np.abs(D.tocsr(0) - Dt.tocsr(0)).sum() == 0 assert np.abs(D.tocsr(1) - Dt.tocsr(1)).sum() == 0 Dt = D.transform(spin='polarized', orthogonal=True) assert np.abs(D.tocsr(0) - Dt.tocsr(0)).sum() == 0 assert np.abs(D.tocsr(1) - Dt.tocsr(1)).sum() == 0 Dt = D.transform(spin='non-colinear', orthogonal=False) assert np.abs(D.tocsr(0) - Dt.tocsr(0)).sum() == 0 assert np.abs(D.tocsr(1) - Dt.tocsr(1)).sum() == 0 assert np.abs(Dt.tocsr(2)).sum() == 0 assert np.abs(Dt.tocsr(3)).sum() == 0 assert np.abs(D.tocsr(-1) - Dt.tocsr(-1)).sum() == 0 Dt = D.transform(spin='so', orthogonal=True) assert np.abs(D.tocsr(0) - Dt.tocsr(0)).sum() == 0 assert np.abs(D.tocsr(1) - Dt.tocsr(1)).sum() == 0 assert np.abs(Dt.tocsr(-1)).sum() == 0