def test_nc_DM_non_colinear(sisl_tmp): DM1 = DensityMatrix(sisl.geom.graphene(), spin=sisl.Spin('NC')) DM1.construct(([0.1, 1.44], [[0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.4, 0.5]])) f1 = sisl_tmp('DM1.nc', _dir) f2 = sisl_tmp('DM2.nc', _dir) DM1.write(f1) DM1.finalize() DM2 = sisl.get_sile(f1).read_density_matrix() DM2.write(f2) DM3 = sisl.get_sile(f2).read_density_matrix() assert DM1._csr.spsame(DM2._csr) assert DM1._csr.spsame(DM3._csr) # DM1 is finalized, but DM2 is not finalized assert np.allclose(DM1._csr._D, DM2._csr._D) # DM2 and DM3 are the same assert np.allclose(DM2._csr._D, DM3._csr._D) DM2.finalize() assert np.allclose(DM1._csr._D, DM2._csr._D)
def test_spin_rotate_nc(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]) orb = AtomicOrbital('px', R=bond * 1.001) C = Atom(6, orb) g = Geometry(np.array([[0., 0., 0.], [1., 0., 0.]], np.float64) * bond, atoms=C, sc=sc) D = DensityMatrix(g, spin=Spin('nc')) D.construct([[0.1, bond + 0.01], [(1., 0.5, 0.01, 0.01), (0.1, 0.2, 0.1, 0.1)]]) D_mull = D.mulliken() d = D.spin_rotate([45, 60, 90], rad=False) d_mull = d.mulliken() assert not np.allclose(D_mull, d_mull) assert np.allclose(D_mull[:, 0], d_mull[:, 0])
def test_rho_fail_p(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, 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, [1., -1, 0.])
def test_read_write_density_matrix(self, sisl_tmp, sisl_system, sile): G = sisl_system.g.rotate(-30, sisl_system.g.cell[2, :]) DM = DensityMatrix(G, orthogonal=True) DM.construct([[0.1, 1.45], [0.1, -2.7]]) f = sisl_tmp("test_read_write_density_matrix.win", _dir) # Write with sile(f, mode='w') as s: s.write_density_matrix(DM) # Read 1 try: with sile(f, mode='r') as s: dm = s.read_density_matrix(geometry=DM.geometry) assert DM.spsame(dm) except UnicodeDecodeError as e: pass # Read 2 try: with sile(f, mode='r') as s: dm = DensityMatrix.read(s, geometry=DM.geometry) assert DM.spsame(dm) except UnicodeDecodeError as e: pass
def test_spin_align_pol(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]) orb = AtomicOrbital('px', R=bond * 1.001) C = Atom(6, orb) g = Geometry(np.array([[0., 0., 0.], [1., 0., 0.]], np.float64) * bond, atoms=C, sc=sc) D = DensityMatrix(g, spin=Spin('p')) D.construct([[0.1, bond + 0.01], [(1., 0.5), (0.1, 0.2)]]) D_mull = D.mulliken() v = np.array([1, 2, 3]) d = D.spin_align(v) d_mull = d.mulliken() assert D_mull.shape == (len(D), 2) assert d_mull.shape == (len(D), 4) assert not np.allclose(-np.diff(D_mull, axis=1), d_mull[:, 3]) assert np.allclose(D_mull.sum(1), d_mull[:, 0])
def test_spin_align_so(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]) orb = AtomicOrbital('px', R=bond * 1.001) C = Atom(6, orb) g = Geometry(np.array([[0., 0., 0.], [1., 0., 0.]], np.float64) * bond, atom=C, sc=sc) 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.2, 0.2), (0.1, 0.2, 0.1, 0.1, 0., 0.1, 0.2, 0.3)]]) D_mull = D.mulliken() v = np.array([1, 2, 3]) d = D.spin_align(v) d_mull = d.mulliken() assert not np.allclose(D_mull, d_mull) assert np.allclose(D_mull[:, 0], d_mull[:, 0])