Exemple #1
0
    def setUp(self):
        bond = 1.42
        sq3h = 3.**.5 * 0.5
        self.sc = SuperCell(np.array(
            [[1.5, sq3h, 0.], [1.5, -sq3h, 0.], [0., 0., 10.]], np.float64) *
                            bond,
                            nsc=[3, 3, 1])

        C = Atom(Z=6, R=bond * 1.01, orbs=3)
        self.g = Geometry(np.array([[0., 0., 0.], [1., 0., 0.]], np.float64) *
                          bond,
                          atom=C,
                          sc=self.sc)
        self.D = DynamicalMatrix(self.g)

        def func(D, ia, idxs, idxs_xyz):
            idx = D.geom.close(ia, dR=(0.1, 1.44), idx=idxs, idx_xyz=idxs_xyz)
            ia = ia * 3

            i0 = idx[0] * 3
            i1 = idx[1] * 3
            print(ia, i0, i1)
            # on-site
            p = 1.
            D.D[ia, i0] = p
            D.D[ia + 1, i0 + 1] = p
            D.D[ia + 2, i0 + 2] = p

            # nn
            p = 0.1

            # on-site directions
            D.D[ia, ia + 1] = p
            D.D[ia, ia + 2] = p
            D.D[ia + 1, ia] = p
            D.D[ia + 1, ia + 2] = p
            D.D[ia + 2, ia] = p
            D.D[ia + 2, ia + 1] = p

            D.D[ia, i1 + 1] = p
            D.D[ia, i1 + 2] = p

            D.D[ia + 1, i1] = p
            D.D[ia + 1, i1 + 2] = p

            D.D[ia + 2, i1] = p
            D.D[ia + 2, i1 + 1] = p

        self.func = func
Exemple #2
0
def test_nc_dynamical_matrix(sisl_tmp, sisl_system):
    f = sisl_tmp('grdyn.nc', _dir)
    dm = DynamicalMatrix(sisl_system.gtb)
    for _, ix in dm.iter_orbitals():
        dm[ix, ix] = ix / 2.
    dm.write(ncSileSiesta(f, 'w'))

    ndm = ncSileSiesta(f).read_dynamical_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)
Exemple #3
0
class TestHamiltonian(object):
    # Base test class for MaskedArrays.

    def setUp(self):
        bond = 1.42
        sq3h = 3.**.5 * 0.5
        self.sc = SuperCell(np.array(
            [[1.5, sq3h, 0.], [1.5, -sq3h, 0.], [0., 0., 10.]], np.float64) *
                            bond,
                            nsc=[3, 3, 1])

        C = Atom(Z=6, R=bond * 1.01, orbs=3)
        self.g = Geometry(np.array([[0., 0., 0.], [1., 0., 0.]], np.float64) *
                          bond,
                          atom=C,
                          sc=self.sc)
        self.D = DynamicalMatrix(self.g)

        def func(D, ia, idxs, idxs_xyz):
            idx = D.geom.close(ia, dR=(0.1, 1.44), idx=idxs, idx_xyz=idxs_xyz)
            ia = ia * 3

            i0 = idx[0] * 3
            i1 = idx[1] * 3
            print(ia, i0, i1)
            # on-site
            p = 1.
            D.D[ia, i0] = p
            D.D[ia + 1, i0 + 1] = p
            D.D[ia + 2, i0 + 2] = p

            # nn
            p = 0.1

            # on-site directions
            D.D[ia, ia + 1] = p
            D.D[ia, ia + 2] = p
            D.D[ia + 1, ia] = p
            D.D[ia + 1, ia + 2] = p
            D.D[ia + 2, ia] = p
            D.D[ia + 2, ia + 1] = p

            D.D[ia, i1 + 1] = p
            D.D[ia, i1 + 2] = p

            D.D[ia + 1, i1] = p
            D.D[ia + 1, i1 + 2] = p

            D.D[ia + 2, i1] = p
            D.D[ia + 2, i1 + 1] = p

        self.func = func

    def tearDown(self):
        del self.sc
        del self.g
        del self.D

    def test_objects(self):
        print(self.D)
        assert_true(len(self.D.xyz) == 2)
        assert_true(self.g.no == len(self.D))

    def test_dtype(self):
        assert_true(self.D.dtype == np.float64)

    def test_ortho(self):
        assert_true(self.D.orthogonal)

    def test_set1(self):
        self.D.D[0, 0] = 1.
        assert_true(self.D[0, 0] == 1.)
        assert_true(self.D[1, 0] == 0.)
        self.D.empty()

    def test_correct_newton(self):
        self.D.construct(self.func)
        assert_true(self.D[0, 0] == 1.)
        assert_true(self.D[1, 0] == 0.1)
        assert_true(self.D[0, 1] == 0.1)
        self.D.correct_Newton()
        self.D.empty()