コード例 #1
0
ファイル: STMTest.py プロジェクト: engelund/CalcTroll
    def notestPropagatePlaneRealistic(self):
        label = join(test_folder, 'siesta')
        eigs, kpts, EF = readInfoForSTMSimulation(label=label)
        rho, variables, dh_cell = readCubeDensity(label=label)
        dh = np.array(map(vectorLength, dh_cell))
        band = 30
        kn = 4
        kappa = 1.0
        rho = rho.sum(axis=0)
        c, variables, domain = surfaceIntegrator(rho=rho, variables=variables)
        wf, variables1, dh_cell = readCubeWavefunction(label=label, band=band, kn=kn)
        kpt, wk = kpts[kn-1]
        eikr = phaseFactor(kpt, variables1)
        u1 = wf/eikr

        u2, variables2 = propagateWaveFunction(
            c=c,
            kpt=kpt,
            u=u1,
            variables=variables,
            kappa=kappa,
            )

        grad_u = np.array(np.gradient(u2, *dh))
        index = 5
        grad_uz = grad_u[2, :, :, index]
        u2_plane = u2[:,:, index]
        plane_z = variables2[2,0,0, index]
        r_plane = variables2[:2, :,:, index]

        u3, variables3 = propagateWaveFunctionPlane(
            kpt=kpt,
            u=u2_plane,
            grad_uz=grad_uz,
            variables=r_plane,
            kappa=kappa,
            plane_z=plane_z,
            )

        from matplotlib import pylab as plt
        fig = plt.figure(figsize=(8, 8))
        ax = plt.gca()
        z = variables[2,0,0,:]
        v = abs(u1).sum(axis=(0,1))
        ax.semilogy(z, v)
        z = variables2[2,0,0,:]
        v = abs(u2).sum(axis=(0,1))
        ax.semilogy(z, v)
        z = variables3[2,0,0,:]
        v = abs(u3).sum(axis=(0,1))
        #ax.semilogy(z, v)

        print abs(u2).sum(axis=(0,1))
        print variables2[2,0,0,:]
        plt.show()
        eeeeee
コード例 #2
0
ファイル: STMTest.py プロジェクト: engelund/CalcTroll
    def notestSaveReadWaveFunctionsTest(self):
        band = 21
        kn = 4
        ws = 2
        potential = Topographic(voltage=-2)
        rho, r, dh_cell = readCubeDensity(label=test_label)
        dh = np.array(map(vectorLength, dh_cell))
        rho = rho.sum(axis=0)
        c, variables, domain = surfaceIntegrator(rho=rho, variables=r, rho0=1e-3, DS=1)
        thick_surface = vectorLength(c, axis=0) > 1e-9
        take_z = thick_surface.sum(axis=0)
        take_z = take_z.sum(axis=0) > 0

        wf, r, dh_cell = readCubeWavefunction(label=test_label, band=band, kn=kn)
        EF, eigs= readEigenvalues(label=test_label)
        kpts = readKpoints(label=test_label)
        energy = eigs[kn-1, band-1, 0]
        we = STMWeighting(energies=[energy], potential=potential, EF=EF)
        we = we[0]

        kpt, wk = kpts[kn-1]
        kappa = getVacuumDecayRate(energy)
        eikr = phaseFactor(kpt, r)
        u = wf/eikr
        grad_u = np.array(np.gradient(u, *dh))
        A = (c*grad_u).sum(axis=0)
        B = u*c
        A=A[:,:,take_z]
        B=B[:,:,:,take_z]
        r=r[:,:,:,take_z]
        u, variables = propagateWaveFunction(
                A=A,
                B=B,
                kpt=kpt,
                r=r,
                kappa=kappa,
                height=10,
                )
        weight = we*ws*wk
        Itest = weight*abs(u)**2

        self.assertFalse(os.path.exists(testfile))
        saveWavefunctionsToPlane(filename=testfile, label=test_label)
        self.assertTrue(os.path.exists(testfile))
        f = netcdf.netcdf_file(testfile, 'r')
        self.assertTrue(len(f.variables.keys()) >0)
        f.close()
        I, r = STMFromFile(
                label=join(test_folder, 'test'),
                potentials=[potential],
                cells=None,
                )
        self.assertArraysEqual(np.log(Itest[0,0]), np.log(I[0,0,0]), 5)