def test_nc_multiple_fail(sisl_tmp, sisl_system): f = sisl_tmp('gr.nc', _dir) H = Hamiltonian(sisl_system.gtb) DM = DensityMatrix(sisl_system.gtb) sile = ncSileSiesta(f, 'w') H.construct([sisl_system.R, sisl_system.t]) H.write(sile) DM[0, 0] = 1. DM.write(sile)
def test_nc_multiple_fail(sisl_tmp, sisl_system): # writing two different sparse matrices to the same # file will fail f = sisl_tmp('gr.nc', _dir) H = Hamiltonian(sisl_system.gtb) DM = DensityMatrix(sisl_system.gtb) with ncSileSiesta(f, 'w') as sile: H.construct([sisl_system.R, sisl_system.t]) H.write(sile) DM[0, 0] = 1. with pytest.raises(ValueError): DM.write(sile)
def test_nc_density_matrix(sisl_tmp, sisl_system): f = sisl_tmp('grDM.nc', _dir) dm = DensityMatrix(sisl_system.gtb) for _, ix in dm.iter_orbitals(): dm[ix, ix] = ix / 2. dm.write(ncSileSiesta(f, 'w')) ndm = ncSileSiesta(f).read_density_matrix() # Assert they are the same assert np.allclose(dm.cell, ndm.cell) assert np.allclose(dm.xyz, ndm.xyz) dm.finalize() assert np.allclose(dm._csr._D[:, 0], ndm._csr._D[:, 0]) assert sisl_system.g.atoms.equal(ndm.atoms, R=False)
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 np.allclose(DM1._csr._D, DM2._csr._D) assert DM1._csr.spsame(DM3._csr) assert np.allclose(DM1._csr._D, DM3._csr._D)
def test_nc_multiple_checks(sisl_tmp, sisl_system, sort): f = sisl_tmp('gr.nc', _dir) H = Hamiltonian(sisl_system.gtb) DM = DensityMatrix(sisl_system.gtb) sile = ncSileSiesta(f, 'w') H.construct([sisl_system.R, sisl_system.t]) H.write(sile, sort=sort) shuffle = np.random.shuffle for io in range(len(H)): edges = H.edges(io) # get all edges shuffle(edges) DM[io, edges] = 2. DM.write(sile, sort=sort)
def test_nc_DM_spin_orbit_nc2dm2nc(sisl_tmp): DM1 = DensityMatrix(sisl.geom.graphene(), orthogonal=False, spin=sisl.Spin('SO')) DM1.construct(([0.1, 1.44], [[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.], [0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.]])) f1 = sisl_tmp('DM1.nc', _dir) f2 = sisl_tmp('DM2.DM', _dir) DM1.finalize() DM1.write(f1) 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 np.allclose(DM1._csr._D, DM2._csr._D) assert DM1._csr.spsame(DM3._csr) assert np.allclose(DM1._csr._D, DM3._csr._D)
def test_nc_multiple_checks(sisl_tmp, sisl_system, sort): f = sisl_tmp('gr.nc', _dir) H = Hamiltonian(sisl_system.gtb) DM = DensityMatrix(sisl_system.gtb) with ncSileSiesta(f, 'w') as sile: H.construct([sisl_system.R, sisl_system.t]) H.write(sile, sort=sort) # fix seed np.random.seed(42) shuffle = np.random.shuffle for io in range(len(H)): edges = H.edges(io) # get all edges shuffle(edges) DM[io, edges] = 2. if not sort: with pytest.raises(ValueError): DM.write(sile, sort=sort) else: DM.write(sile, sort=sort)