Skip to main content

Someone wanted to learn this too, so Grasp built them a personal learning path.

You can keep exploring this one or create your own

Wavepacket Scattering: Transmission & Reflection

Hello! Welcome to our next lesson on numerical methods in quantum mechanics.

In our last session, we explored Variational Monte Carlo, a powerful stochastic method for finding the ground state properties of a time-independent system. We saw how to use the Metropolis algorithm to sample a trial wavefunction and estimate the ground state energy.

Today, we shift our focus from static properties to dynamics. We will tackle the problem of how a quantum particle, described by a localized wavepacket, interacts with a potential barrier over time. This is a fundamental process in many areas of physics, from alpha decay to electron transport in semiconductor devices.

Your learning outcome for this lesson is to numerically simulate wavepacket scattering from a potential barrier to extract transmission and reflection coefficients. To achieve this, you will learn how to solve the time-dependent Schrödinger equation (TDSE) on a computer and then analyze the results to obtain physical observables.

1. From Continuous Evolution to Discrete Steps

The starting point for any quantum dynamics simulation is the time-dependent Schrödinger equation. In one dimension, it is:

To solve this on a computer, we must discretize both space and time. We replace the continuous variables and with a grid of points and . The wavefunction becomes a set of values .

Our goal is to find a reliable rule to calculate the state of the system at the next time step, , given the current state, . A particularly robust and widely used method for this is the Crank-Nicolson algorithm. It's an implicit method, which means it solves for the future state using a system of equations involving both and . This gives it excellent stability properties and, crucially for quantum mechanics, it is unitary, meaning it conserves the total probability over time.

Numerical Solution of the Time-Dependent 1D- ...

To understand how to numerically solve the TDSE, we'll use the Crank-Nicolson method. The following resource provides a clear derivation and shows how to formulate the problem in matrix terms, which is ideal for implementation.

Please read Section 3.1, 'Crank-Nicolson Method'. Focus on how the formal solution \psi^{n+1} = e^{-i\hat{H}\Delta t}\psi^n is approximated by the unitary Cayley's form (Eq. 3.7), leading to the discretized equation (3.8). The most important part is understanding how this is cast into the matrix equation U_1\psi^{n+1} = U_2\psi^n in equation (3.9).

The core result of the Crank-Nicolson method is that the time-evolution is reduced to solving a linear system of equations, , at each time step. Since the matrices and are tridiagonal, this system can be solved very efficiently, making the method practical.

2. Setting Up a Realistic Simulation

Before we can run the simulation, we need to address a few practical but crucial details.

The Initial State: A Gaussian Wavepacket

Instead of an unphysical, infinitely spread-out plane wave, we'll start with a localized particle. A Gaussian wavepacket is a common and convenient choice:

This describes a particle initially centered at , with a spatial width characterized by , and moving with an average momentum . Your simulation will start by setting up an array representing on your spatial grid.

The Boundaries: Avoiding Unphysical Reflections

A major challenge in simulating scattering on a finite grid is preventing the wavepacket from reflecting off the artificial boundaries of your simulation domain. If the wave reflects from the edge and comes back, it will interfere with the part of the wavepacket that was reflected from the potential barrier, contaminating your results.

A sophisticated solution is to use Absorbing Boundary Conditions (ABCs). These are special mathematical conditions applied at the grid's edges that are designed to "soak up" any incoming wave, effectively mimicking an infinite space.

Numerical Solution of the Time-Dependent 1D- ...

The same thesis we just looked at provides an excellent, practical guide to implementing ABCs by slightly modifying the Crank-Nicolson matrices.

First, read the introduction of the paper to understand the motivation for using ABCs. Then, skim Section 3.2, 'Implementation of Absorbing Boundary Conditions'. You don't need to re-derive the equations for the zeta coefficients. The key idea is to see how the corner elements of the U1 and U2 matrices are modified (as shown in equation 3.19) to implement these boundary conditions.

Numerical Stability and Accuracy

Even with a stable algorithm like Crank-Nicolson, the accuracy of your simulation depends on your choice of grid spacing and time step . They must be small enough to resolve the most rapid oscillations in the wavefunction, both in space and time.

  • Spatial Grid (): The grid must be fine enough to resolve the shortest de Broglie wavelength in the simulation. The wavelength is given by , where is the kinetic energy. Higher kinetic energy means a shorter wavelength, requiring a smaller .
  • Time Step (): The time step must be short enough to resolve the fastest time evolution, which is governed by the total energy through the relation .

Computational Solution to Discrete Time-Dependent ...

The following handout provides an excellent, intuitive discussion of the physical constraints that dictate the choice of \Delta x and \Delta t.

Read the section 'Constants – Respecting the Approximation'. Pay close attention to the physical reasoning behind the constraints on \Delta x related to wavelength (Eq. 2b) and on \Delta t related to energy (Eq. 7b). This intuition is crucial for setting up any numerical simulation correctly.

Test your understanding!

You are simulating a wavepacket with a total energy of 20 eV scattering from a potential barrier of height eV. The wavepacket will have different kinetic energies (and thus different de Broglie wavelengths) in different regions: before the barrier, over the barrier, and after the barrier.

In which region is the de Broglie wavelength the shortest? How does this influence your choice of the spatial grid spacing, , for the entire simulation?

Show answer

The kinetic energy is highest in the region before the barrier ( eV). Over the barrier, it is lower ( eV). Since wavelength is inversely related to momentum () and momentum is related to kinetic energy (), the shortest wavelength occurs where the kinetic energy is highest.

Therefore, the wavelength is shortest before the barrier. To ensure your simulation is accurate everywhere, your choice of must be small enough to resolve this shortest wavelength. A common rule of thumb is to have at least 10-20 grid points per wavelength.

3. Running the Simulation and Extracting Physics

After setting up the initial state, potential, and boundary conditions, you will run the time-evolution loop, repeatedly solving for many time steps. The output will be a large array, PSI[j, n], containing the value of the wavefunction at every grid point j for every time step n. A good way to visualize this is with a heatmap of the probability density, .

Wavepacket Scattering: Probability Density Heatmap
A heatmap showing the time evolution of a wavepacket's probability density, \(|\psi(x,t)|^2\). The x-axis is position and the y-axis is time. The wavepacket starts on the left, moves right, and interacts with a potential. This interaction splits the packet into a reflected part (moving back to the left) and a transmitted part (continuing to the right).

Once the simulation has run long enough for the interaction to complete, how do we calculate the transmission () and reflection () coefficients?

There are two common methods:

  1. Probability Current: A more rigorous method is to calculate the probability current, , at a point far beyond the barrier. The total transmitted probability is the time integral of this current, . The transmission coefficient is then , where is the total probability of the initial packet (which should be 1 if normalized).

  2. Integrated Probability: A simpler and more intuitive method is to simply wait until the wavepacket has fully separated into reflected and transmitted components. At a final time , you integrate over the region to the right of the barrier to get , and over the region to the left to get . Since the initial probability was 1, we have and .

For your implementation, the second method is more straightforward.

Computational Solution to Discrete Time-Dependent ...

The resource below describes the simpler, integrated probability method for finding T and R.

Read the paragraph under 'Optional: Get quantitative and determine Transmission and Reflection coefficients.' It explains how to calculate T and R by summing abs(wave[j])**2 over the final state for positions to the left and right of the barrier. This is the method I recommend you implement.

4. Your Task: Simulating Scattering from a Rectangular Barrier

Now it's time to put all the pieces together. Your task is to write a Python script that simulates a Gaussian wavepacket scattering from a simple rectangular potential barrier.

Wavepacket Scattering from a Potential Barrier and Time Delay
This image depicts the process you will simulate: an incoming wavepacket, \(\psi_{in}\), approaches a potential barrier, leading to a scattered outgoing wavepacket, \(\psi_{out}\), which has both transmitted and reflected components.

Here is a step-by-step guide for your implementation. Given your strong background in Python and Numpy, you are well-equipped to translate these steps into code.

  1. Setup:

    • Define your physical constants () and simulation parameters (, n_points, , , n_steps). Choose them carefully based on the stability considerations from section 2.
    • Create your spatial grid x and an empty array PSI to store the results.
  2. Initial and Potential Conditions:

    • Define your initial Gaussian wavepacket using the formula from section 2. Choose parameters that place the packet far to the left of the barrier and give it enough momentum to move towards it.
    • Define your rectangular potential barrier . It should be zero everywhere except for a finite region where it has height .
  3. Crank-Nicolson Implementation:

    • Construct the tridiagonal matrices and as described in resource LINK. You can use scipy.sparse.spdiags to do this efficiently.
    • (Optional, but highly recommended for better results) Modify the corners of your matrices to include Absorbing Boundary Conditions.
    • Pre-compute the LU decomposition of using scipy.sparse.linalg.splu. This will make the time-stepping loop much faster.
  4. Time-Evolution Loop:

    • Loop for n from 0 to n_steps:
      • Calculate the right-hand side of the equation: b = U2.dot(psi_current).
      • Solve for the next state: psi_next = LU.solve(b).
      • Update psi_current = psi_next.
      • Store psi_next in your PSI array for later analysis/visualization.
  5. Analysis:

    • After the loop finishes, take the final wavefunction .
    • Find the indices corresponding to the regions to the left and right of the barrier.
    • Calculate by summing over the reflection region.
    • Calculate by summing over the transmission region.
    • As a check, verify that .

You can find a good set of starting parameters that are known to work in the resource Computational Solution to Discrete Time-Dependent ... (ID LINK) in the section "Simulate Wave hitting a Potential Barrier".

Conclusion

In this lesson, we have moved from the static, time-independent world of VMC to the dynamic evolution of quantum systems. You have learned the theoretical and practical steps required to build a powerful simulation tool from scratch.

Key Takeaways:

  • The time-dependent Schrödinger equation can be solved numerically by discretizing space and time and using a time-stepping algorithm.
  • The Crank-Nicolson method is a stable and unitary algorithm that transforms the TDSE into a sequence of matrix equations.
  • Practical considerations are critical for a successful simulation: defining a localized initial state, handling grid boundaries with Absorbing Boundary Conditions, and choosing stable grid parameters ().
  • Physical observables like transmission and reflection coefficients are extracted by post-processing the final state of the simulated wavefunction.

Preview of the Next Lesson:

Today, we simulated the quantum mechanics of a single particle in continuous space. This is a powerful tool, but many problems in your field of interest, condensed matter physics, are naturally described on a lattice of atoms.

In our next lesson, we will explore a different but related framework: "Implement the Landauer-Büttiker formalism for a 1D tight-binding model to calculate quantum conductance." We will shift from a time-domain simulation to a steady-state, energy-domain picture of transport, connecting the scattering concepts we've learned today to the macroscopic property of electrical conductance. This will be a key step towards understanding quantum transport in nano-scale devices.

Can't find a good explanation? Sign up and we'll make it for you

Sign up