Skip to content

Jupyter notebook mode

5.8. Solutions

Click above to activate the Jupyter notebook mode and display the source code.

5.3. Resonant scattering with a 1D square potential

In this problem, we consider scattering in 1 dimension for the potential in the following picture:

Resonance

The the height of the barriers is , and the well depth is . The barrier width is and the width of the well . We consider the transmission of an incoming particle (an electron) at some energy . We take the Bohr radius as the unit of length, and the Rydberg (V) as the unit of energy. In these units, the Schrödinger equation reads

In each region where the potential is constant, the wave function is a linear combination of two independent functions. At each boundary between two regions of constant potential, the wave functions should be matched in value and derivative. This matching leads to a linear relation between the two coefficients on the left and those on the right.

Consider a separation between a region with potential on the right and on the left. The separation is located at the (horizontal) coordinate

5.3.1

Give the scattering matrix which relates the expansion coefficients on the left of to those at the right (suppose those at the right are given). The matrix elements depend on , , and The energy can be smaller or larger than , .

1. Using matching conditions, write down the system of the wave functions matching at a boundary

2. Define above system of equations in matrix notation

3. Rearrange

4. Define the scattering matrix

import common
common.configure_plotting()
import numpy as np
import matplotlib.pyplot as plt

def make_mat(kl,kr,rs):
    ''' Matrix defining the relation between the expansion coefficients of the wave function
        at two sides of a separation wall located at rs '''
    m11 = 0.5*np.exp((kr-kl)*rs)*(1+kr/kl) 
    m12 = 0.5*np.exp(-(kr+kl)*rs)*(1-kr/kl)
    m21 = 0.5*np.exp((kr+kl)*rs)*(1-kr/kl)
    m22 = 0.5*np.exp((kl-kr)*rs)*(1+kr/kl) 
    return m11, m12, m21, m22

5.3.2

If we want to find the transmission amplitude, we take on the very right exclusively a right-moving wave, with amplitude 1. By acting with the appropriate scattering matrices, you can find the wave functions in the the other regions. In the leftmost region the wave function has an incoming and an outgoing component. Use a computer to calculate the coefficients of the two waves in this leftmost region as a function of the energy, ranging from a value just above to just below (take about 200 values for the energy).

Parameter suggestion: , , and (all in our 'natural' units).

# Problem parameters
Vb = 8.0  # Barrier height
b = 0.8   # Barrier width
w = 2*np.pi   # Well width
Vw = -2.0 # Well depth

# We consider a number of energies to loop over
enernum = 2000
# Energy grid:
E = np.linspace(0.01, 0.99*Vb, enernum)

# k-vectors:
k1 = 1j*np.sqrt(E)
k2 = np.sqrt(Vb-E)
k3 = 1j*np.sqrt(E-Vw)

# Vector definitions. For each energy, a 2d vector
vec = np.ndarray((enernum, 2),dtype=complex)
nvec = np.ndarray((enernum, 2),dtype=complex)

5.3.3.

In the leftmost region, there is an incoming and a reflected wave. The transmission is defined as the amplitude of the outgoing wave in the rightmost region, provided that the amplitude of the incoming wave on the left is 1. Plot the transmission amplitude as a function of the energy.

# At the right, we only want a transmitted wave
vec[:,0] = 1.0
vec[:,1] = 0.0

def treat_wall(kl,kr,rs, vec):
    '''Calculate the left coefficient vector at a wall from the right vector'''
    m11, m12, m21, m22 = make_mat(kl,kr,rs)
    nvec[:,0] = np.multiply(m11,vec[:,0])+np.multiply(m12,vec[:,1])
    nvec[:,1] = np.multiply(m21,vec[:,0])+np.multiply(m22,vec[:,1])
    vec = np.copy(nvec)
    return vec

# Transfer matrix for each of the separation walls (counting from right to left)
vec = treat_wall(k2,k1,w*0.5+b,vec)
vec = treat_wall(k3,k2,w*0.5,vec)
vec = treat_wall(k2,k3,-w*0.5,vec)
vec = treat_wall(k1,k2,-w*0.5-b,vec)

#plot the result
fig = plt.figure(figsize=(5,5))
plt.plot(E,1/np.absolute(vec[:,0]))
plt.xlabel(r'E', fontsize=15)
plt.ylabel(r'$|t|$', fontsize=15)
fig.show()

svg

If your program works correctly, you find several peaks. Give an explanation for those peaks!