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
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)