🌐 EN | 🇯🇵 JP | Last sync: 2025-12-19

Chapter 3: Josephson Effects

DC/AC Josephson Effects, RCSJ Model, Phase Dynamics, and SQUID Principles

📖 Reading time: 40-50min 📊 Difficulty: Intermediate 💻 Code examples: 8 examples

The Josephson effects, discovered by Brian Josephson in 1962 (Nobel Prize 1973), describe quantum tunneling of Cooper pairs through a weak link between two superconductors. This phenomenon leads to remarkable effects: supercurrent flow without voltage (DC Josephson effect) and oscillating supercurrent under applied voltage (AC Josephson effect). In this chapter, we rigorously derive these effects, explore the RCSJ model for realistic junctions, analyze phase dynamics, and investigate SQUID devices for ultra-sensitive magnetometry.

Learning Objectives

By reading this chapter, you will be able to:


3.1 Josephson Junction Types and Structure

What is a Josephson Junction?

A Josephson junction (JJ) consists of two superconducting electrodes separated by a weak link through which Cooper pairs can tunnel quantum mechanically. The weak link can take several forms:

graph TD A[Josephson Junction Types] --> B[Tunnel Junction
Thin insulating barrier
~1-2 nm oxide] A --> C[Weak Link
Narrow superconducting
constriction] A --> D[Point Contact
Mechanical contact
between superconductors] A --> E[SNS Junction
Normal metal
between superconductors] style A fill:#fef3c7,stroke:#f59e0b,stroke-width:3px style B fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style C fill:#dcfce7,stroke:#22c55e,stroke-width:2px style D fill:#fce7f3,stroke:#ec4899,stroke-width:2px style E fill:#e0e7ff,stroke:#6366f1,stroke-width:2px

Tunnel Junction (SIS)

The most common type consists of two superconductors (S) separated by a thin insulating barrier (I):

Weak Link Junction

A narrow superconducting constriction with width comparable to coherence length $\xi$:

SNS Junction

Normal metal (N) sandwiched between two superconductors:


3.2 DC Josephson Effect: Supercurrent Without Voltage

The Josephson Current-Phase Relation

The fundamental result of Josephson's theory is that a supercurrent flows through the junction even in the absence of voltage, with magnitude determined by the phase difference $\phi$ between the two superconductors:

$$\boxed{I = I_c \sin(\phi)}$$

where:

Derivation from Coupled Ginzburg-Landau Equations

Consider two superconductors (labeled 1 and 2) with order parameters:

$$\psi_1 = |\psi_1| e^{i\phi_1}, \quad \psi_2 = |\psi_2| e^{i\phi_2}$$

The weak coupling allows Cooper pairs to tunnel between the superconductors. The tunneling Hamiltonian couples the two order parameters:

$$H_T = -T (\psi_1^* \psi_2 + \psi_2^* \psi_1)$$

where $T$ is the tunneling matrix element.

The time evolution of the order parameters is governed by the time-dependent Ginzburg-Landau equation. For the current density through the junction:

$$j = j_c \sin(\phi_2 - \phi_1)$$

Integrating over the junction area $A$:

$$I = A j_c \sin(\phi) = I_c \sin(\phi)$$

Critical Current Ic

For a tunnel junction with barrier thickness $d$ and area $A$, the Ambegaokar-Baratoff formula gives:

$$I_c = \frac{\pi \Delta(T)}{2 e R_N} \tanh\left(\frac{\Delta(T)}{2 k_B T}\right)$$

where:

At $T = 0$:

$$I_c(0) = \frac{\pi \Delta(0)}{2 e R_N}$$

Energy of the Junction

The energy stored in the junction due to the phase difference is:

$$U(\phi) = -E_J \cos(\phi) + \text{const}$$

where the Josephson coupling energy is:

$$E_J = \frac{\Phi_0 I_c}{2\pi} = \frac{\hbar I_c}{2e}$$

Here $\Phi_0 = h/2e$ is the flux quantum.

Key Insight: The DC Josephson effect allows dissipationless current flow up to $I_c$. This is the basis for superconducting quantum interference devices (SQUIDs), Josephson voltage standards, and superconducting qubits.

💻 Code Example 1: DC Josephson Current-Phase Relation

import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as const

# Physical constants
e = const.e          # Elementary charge (C)
h = const.h          # Planck constant (J·s)
hbar = const.hbar    # Reduced Planck constant (J·s)
Phi_0 = h / (2*e)    # Flux quantum (Wb)

# Junction parameters
I_c = 10e-6  # Critical current (A) - 10 μA typical for small junction
R_N = 10     # Normal resistance (Ω)

# Calculate Josephson energy
E_J = (Phi_0 * I_c) / (2*np.pi)

# Phase difference array
phi = np.linspace(-2*np.pi, 2*np.pi, 500)

# DC Josephson current
I = I_c * np.sin(phi)

# Josephson energy
U = -E_J * np.cos(phi)

# Plotting
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))

# Current-phase relation
ax1.plot(phi, I*1e6, 'b-', linewidth=2.5, label='I(φ) = Ic sin(φ)')
ax1.axhline(I_c*1e6, color='red', linestyle='--', linewidth=2, alpha=0.7, label=f'Ic = {I_c*1e6:.0f} μA')
ax1.axhline(-I_c*1e6, color='red', linestyle='--', linewidth=2, alpha=0.7)
ax1.axhline(0, color='black', linestyle='-', linewidth=0.8, alpha=0.5)
ax1.axvline(0, color='black', linestyle='-', linewidth=0.8, alpha=0.5)

ax1.set_xlabel('Phase difference φ (rad)', fontsize=13, fontweight='bold')
ax1.set_ylabel('Current I (μA)', fontsize=13, fontweight='bold')
ax1.set_title('DC Josephson Effect: Current-Phase Relation', fontsize=14, fontweight='bold')
ax1.grid(True, alpha=0.3)
ax1.legend(fontsize=11)
ax1.set_xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi])
ax1.set_xticklabels(['-2π', '-π', '0', 'π', '2π'])

# Energy-phase relation
ax2.plot(phi, U/const.e*1e6, 'r-', linewidth=2.5, label='U(φ) = -EJ cos(φ)')
ax2.axhline(0, color='black', linestyle='-', linewidth=0.8, alpha=0.5)
ax2.axvline(0, color='black', linestyle='-', linewidth=0.8, alpha=0.5)

# Mark minima and maxima
minima_phi = np.array([0])
maxima_phi = np.array([-np.pi, np.pi])
ax2.plot(minima_phi, -E_J/const.e*1e6*np.ones_like(minima_phi), 'go',
         markersize=10, label='Energy minimum (stable)')
ax2.plot(maxima_phi, E_J/const.e*1e6*np.ones_like(maxima_phi), 'ro',
         markersize=10, label='Energy maximum (unstable)')

ax2.set_xlabel('Phase difference φ (rad)', fontsize=13, fontweight='bold')
ax2.set_ylabel('Energy U (μeV)', fontsize=13, fontweight='bold')
ax2.set_title('Josephson Energy Landscape', fontsize=14, fontweight='bold')
ax2.grid(True, alpha=0.3)
ax2.legend(fontsize=11)
ax2.set_xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi])
ax2.set_xticklabels(['-2π', '-π', '0', 'π', '2π'])

plt.tight_layout()
plt.savefig('dc_josephson_effect.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"Junction Parameters:")
print(f"  Critical current Ic = {I_c*1e6:.2f} μA")
print(f"  Normal resistance RN = {R_N:.1f} Ω")
print(f"  Josephson energy EJ = {E_J/const.e*1e6:.3f} μeV")
print(f"  IcRN product = {I_c*R_N*1e6:.2f} μV")
print(f"  Characteristic frequency = EJ/ℏ = {E_J/hbar*1e-9:.2f} GHz")

3.3 AC Josephson Effect: Voltage-to-Frequency Conversion

The Voltage-Frequency Relation

When a DC voltage $V$ is applied across the junction, the phase difference evolves in time according to:

$$\boxed{\frac{d\phi}{dt} = \frac{2eV}{\hbar}}$$

This is the second Josephson equation, describing the AC Josephson effect.

Derivation from Energy Considerations

The Josephson energy difference between the two sides is related to the work done by the voltage:

$$dU = 2e V dt$$

The energy is also related to the phase:

$$dU = \frac{\partial U}{\partial \phi} d\phi = E_J \sin(\phi) d\phi$$

However, from quantum mechanics, the phase evolution relates to energy as:

$$\frac{d\phi}{dt} = \frac{2 \times \text{energy gain per Cooper pair}}{\hbar} = \frac{2eV}{\hbar}$$

Josephson Frequency

Integrating the voltage-phase relation with constant voltage $V$:

$$\phi(t) = \phi_0 + \frac{2eV}{\hbar} t = \phi_0 + \omega_J t$$

where the Josephson frequency is:

$$\omega_J = \frac{2eV}{\hbar}, \quad f_J = \frac{2eV}{h}$$

Numerically:

$$\boxed{f_J = 483.6 \text{ GHz/mV} \times V}$$

Oscillating Supercurrent

Substituting the time-dependent phase into the DC Josephson relation:

$$I(t) = I_c \sin(\phi_0 + \omega_J t) = I_c \sin(\phi_0) \cos(\omega_J t) + I_c \cos(\phi_0) \sin(\omega_J t)$$

The current oscillates at the Josephson frequency. For typical voltages ($V \sim 1$ mV), $f_J \sim 500$ GHz (microwave frequency).

Metrological Application: The AC Josephson effect provides the most accurate voltage standard. The frequency $f_J$ can be measured with atomic clock precision, allowing voltage to be defined through the relation $V = (h/2e) f_J$. This defines the volt in the SI system.

Shapiro Steps

When the junction is irradiated with microwave radiation at frequency $f_{RF}$, the I-V curve develops Shapiro steps (constant-voltage plateaus) at voltages:

$$V_n = n \frac{h f_{RF}}{2e}, \quad n = 0, 1, 2, 3, \ldots$$

These steps occur when the Josephson frequency synchronizes with the applied RF frequency: $f_J = n f_{RF}$.

💻 Code Example 2: AC Josephson Effect and Frequency Calculation

import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as const

# Physical constants
e = const.e
h = const.h
hbar = const.hbar

# Voltage-to-frequency conversion factor
K_J = 2*e / h  # Josephson constant (Hz/V)

# Voltage range
V = np.linspace(0, 2e-3, 100)  # 0 to 2 mV

# Josephson frequency
f_J = K_J * V

# Example: Fixed voltage for time-dependent current
V_fixed = 1e-3  # 1 mV
omega_J = 2*e*V_fixed / hbar
f_J_fixed = omega_J / (2*np.pi)

I_c = 10e-6  # 10 μA
phi_0 = 0

# Time array
t = np.linspace(0, 10e-12, 1000)  # 10 ps

# Oscillating current
phi_t = phi_0 + omega_J * t
I_t = I_c * np.sin(phi_t)

# Plotting
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 5))

# Voltage-frequency relation
ax1.plot(V*1e3, f_J*1e-9, 'b-', linewidth=2.5)
ax1.set_xlabel('Voltage V (mV)', fontsize=13, fontweight='bold')
ax1.set_ylabel('Josephson Frequency fJ (GHz)', fontsize=13, fontweight='bold')
ax1.set_title('AC Josephson Effect: Voltage-Frequency Relation', fontsize=14, fontweight='bold')
ax1.grid(True, alpha=0.3)

# Add annotation for 483.6 GHz/mV slope
ax1.text(0.5, 400, f'fJ = {K_J*1e-9:.1f} GHz/mV × V\n= 483.6 GHz/mV × V',
         fontsize=11, bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.8))

# Oscillating current
ax2.plot(t*1e12, I_t*1e6, 'r-', linewidth=2)
ax2.set_xlabel('Time t (ps)', fontsize=13, fontweight='bold')
ax2.set_ylabel('Current I (μA)', fontsize=13, fontweight='bold')
ax2.set_title(f'Oscillating Supercurrent at V = {V_fixed*1e3:.1f} mV\nfJ = {f_J_fixed*1e-9:.1f} GHz',
             fontsize=14, fontweight='bold')
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('ac_josephson_effect.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"AC Josephson Effect:")
print(f"  Josephson constant KJ = 2e/h = {K_J*1e-9:.2f} GHz/mV")
print(f"  For V = 1 mV:")
print(f"    Josephson frequency fJ = {K_J*1e-3*1e-9:.2f} GHz")
print(f"    Period T = {1/(K_J*1e-3)*1e12:.3f} ps")
print(f"\n  Voltage standard:")
print(f"    1 μV corresponds to fJ = {K_J*1e-6*1e-6:.3f} MHz")

3.4 RCSJ Model: Realistic Junction Dynamics

The Resistively and Capacitively Shunted Junction Model

Real Josephson junctions have not only the ideal Josephson element but also:

The RCSJ model represents the junction as a parallel combination of these elements:

graph LR A[Current Source I] --> B[Josephson Element
IJ = Ic sin φ] A --> C[Resistor R
IR = V/R] A --> D[Capacitor C
IC = C dV/dt] style B fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style C fill:#fef3c7,stroke:#f59e0b,stroke-width:2px style D fill:#dcfce7,stroke:#22c55e,stroke-width:2px

Circuit Equation Derivation

Applying Kirchhoff's current law at the junction node:

$$I = I_J + I_R + I_C = I_c \sin(\phi) + \frac{V}{R} + C \frac{dV}{dt}$$

Using the AC Josephson relation $V = (\hbar/2e)(d\phi/dt)$:

$$I = I_c \sin(\phi) + \frac{\hbar}{2eR} \frac{d\phi}{dt} + C \frac{\hbar}{2e} \frac{d^2\phi}{dt^2}$$

Defining characteristic time and damping:

The normalized RCSJ equation becomes:

$$\boxed{\frac{d^2\phi}{dt^2} + \frac{1}{Q\omega_p} \frac{d\phi}{dt} + \omega_p^2 \sin(\phi) = \frac{\omega_p^2 I}{I_c}}$$

Or in dimensionless form with $\tau = \omega_p t$:

$$\frac{d^2\phi}{d\tau^2} + \frac{1}{Q} \frac{d\phi}{d\tau} + \sin(\phi) = \frac{I}{I_c}$$

Washboard Potential Analogy

The RCSJ equation can be interpreted as a particle moving in a tilted washboard potential:

$$U(\phi) = -E_J \cos(\phi) - \frac{\hbar I}{2e} \phi$$

The tilt is proportional to the applied current $I$. For small $I < I_c$, the particle is trapped in a potential well (zero-voltage state). For $I > I_c$, the particle rolls down the potential (voltage state).

Stewart-McCumber Parameter βc

The parameter $\beta_c$ determines the junction dynamics:

$$\beta_c = \frac{2\pi I_c R^2 C}{\Phi_0}$$

💻 Code Example 3: Solve RCSJ Equation with scipy.integrate

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
import scipy.constants as const

# Physical constants
e = const.e
h = const.h
hbar = const.hbar
Phi_0 = h / (2*e)

# Junction parameters
I_c = 10e-6    # Critical current (A)
R = 10         # Resistance (Ω)
C = 1e-12      # Capacitance (F) - 1 pF

# Calculate characteristic parameters
omega_p = np.sqrt(2*np.pi*I_c / (Phi_0*C))
Q = omega_p * R * C
beta_c = (2*np.pi / Phi_0) * I_c * R**2 * C

print(f"Junction Parameters:")
print(f"  Ic = {I_c*1e6:.1f} μA")
print(f"  R = {R:.1f} Ω")
print(f"  C = {C*1e12:.1f} pF")
print(f"  Plasma frequency ωp = {omega_p*1e-9:.2f} GHz")
print(f"  Quality factor Q = {Q:.2f}")
print(f"  Stewart-McCumber parameter βc = {beta_c:.2f}")
print(f"  Junction type: {'Underdamped (hysteretic)' if beta_c > 1 else 'Overdamped (non-hysteretic)'}")

# RCSJ differential equation
def rcsj_equation(t, y, I_applied):
    """
    y[0] = phi (phase)
    y[1] = dphi/dt (phase velocity)
    """
    phi, dphi_dt = y

    # d²φ/dt² = -ωp²sin(φ) - (1/Q)·(dφ/dt) + (ωp²/Ic)·I
    d2phi_dt2 = -omega_p**2 * np.sin(phi) - (omega_p/Q) * dphi_dt + (omega_p**2 / I_c) * I_applied

    return [dphi_dt, d2phi_dt2]

# Time array
t_max = 50e-9  # 50 ns
t_eval = np.linspace(0, t_max, 5000)

# Applied current (step function)
I_applied = 1.2 * I_c  # 120% of critical current

# Initial conditions
y0 = [0.0, 0.0]  # phi=0, dphi/dt=0

# Solve RCSJ equation
sol = solve_ivp(rcsj_equation, [0, t_max], y0, args=(I_applied,),
                t_eval=t_eval, method='RK45', rtol=1e-8, atol=1e-10)

# Extract results
phi = sol.y[0]
dphi_dt = sol.y[1]

# Calculate voltage from phase velocity
V = (hbar / (2*e)) * dphi_dt

# Plotting
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(12, 12))

# Phase evolution
ax1.plot(sol.t*1e9, phi, 'b-', linewidth=2)
ax1.set_xlabel('Time (ns)', fontsize=12, fontweight='bold')
ax1.set_ylabel('Phase φ (rad)', fontsize=12, fontweight='bold')
ax1.set_title(f'Phase Dynamics (I = {I_applied/I_c:.2f}Ic, βc = {beta_c:.2f})',
             fontsize=13, fontweight='bold')
ax1.grid(True, alpha=0.3)

# Phase velocity
ax2.plot(sol.t*1e9, dphi_dt*1e-9, 'r-', linewidth=2)
ax2.set_xlabel('Time (ns)', fontsize=12, fontweight='bold')
ax2.set_ylabel('dφ/dt (GHz)', fontsize=12, fontweight='bold')
ax2.set_title('Phase Velocity', fontsize=13, fontweight='bold')
ax2.grid(True, alpha=0.3)

# Voltage
ax3.plot(sol.t*1e9, V*1e6, 'g-', linewidth=2)
ax3.axhline(I_applied*R*1e6, color='red', linestyle='--', linewidth=2,
           label=f'V = IR = {I_applied*R*1e6:.2f} μV')
ax3.set_xlabel('Time (ns)', fontsize=12, fontweight='bold')
ax3.set_ylabel('Voltage V (μV)', fontsize=12, fontweight='bold')
ax3.set_title('Junction Voltage', fontsize=13, fontweight='bold')
ax3.grid(True, alpha=0.3)
ax3.legend(fontsize=10)

plt.tight_layout()
plt.savefig('rcsj_dynamics.png', dpi=150, bbox_inches='tight')
plt.show()

# Time-averaged voltage
V_avg = np.mean(V[-1000:])  # Average over last part
print(f"\nTime-averaged voltage V = {V_avg*1e6:.3f} μV")
print(f"Ohmic voltage IR = {I_applied*R*1e6:.3f} μV")

3.5 I-V Characteristics: Zero-Voltage and Voltage States

Zero-Voltage State

For $I < I_c$, there exists a static solution with constant phase $\phi_0$ satisfying:

$$I = I_c \sin(\phi_0)$$

The voltage is zero: $V = (\hbar/2e)(d\phi/dt) = 0$. This is the superconducting state.

Voltage State

For $I > I_c$, no static solution exists. The phase continuously increases, and the time-averaged voltage is:

$$\langle V \rangle = R \sqrt{I^2 - I_c^2}$$

This is the voltage state with dissipation.

Hysteresis in Underdamped Junctions

For $\beta_c > 1$, the I-V curve exhibits hysteresis:

The return current is approximately:

$$I_r \approx \frac{4}{\pi} \frac{I_c}{\sqrt{\beta_c}}$$

Thermal Fluctuations and Phase Diffusion

At finite temperature, thermal fluctuations cause the phase to diffuse even for $I < I_c$. The characteristic energy for thermal escape from the zero-voltage state is:

$$U_0 = E_J \left(1 - \frac{I}{I_c}\right)^{3/2}$$

The switching rate from thermal activation is:

$$\Gamma \sim \omega_p \exp\left(-\frac{U_0}{k_B T}\right)$$

💻 Code Example 4: I-V Characteristics for Different βc

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
import scipy.constants as const

# Physical constants
e = const.e
h = const.h
hbar = const.hbar
Phi_0 = h / (2*e)

# Junction parameters
I_c = 10e-6
R = 10

def calculate_iv_curve(C, I_range, label, color):
    """Calculate I-V curve for given capacitance"""
    omega_p = np.sqrt(2*np.pi*I_c / (Phi_0*C))
    Q = omega_p * R * C
    beta_c = (2*np.pi / Phi_0) * I_c * R**2 * C

    def rcsj_equation(t, y, I_applied):
        phi, dphi_dt = y
        d2phi_dt2 = -omega_p**2 * np.sin(phi) - (omega_p/Q) * dphi_dt + (omega_p**2 / I_c) * I_applied
        return [dphi_dt, d2phi_dt2]

    voltages = []

    for I_applied in I_range:
        t_max = 100e-9
        t_eval = np.linspace(0, t_max, 1000)
        y0 = [0.0, 0.0]

        sol = solve_ivp(rcsj_equation, [0, t_max], y0, args=(I_applied,),
                       t_eval=t_eval, method='RK45', rtol=1e-8)

        dphi_dt = sol.y[1]
        V = (hbar / (2*e)) * dphi_dt
        V_avg = np.mean(V[-200:])  # Time-average over last part
        voltages.append(V_avg)

    return np.array(voltages), beta_c

# Current range for sweep
I_range_up = np.linspace(0, 2*I_c, 50)

# Different capacitances (different βc values)
capacitances = [0.1e-12, 0.5e-12, 2e-12]  # pF
labels = []
colors = ['blue', 'green', 'red']

fig, ax = plt.subplots(figsize=(12, 8))

for C, color in zip(capacitances, colors):
    V, beta_c = calculate_iv_curve(C, I_range_up, f'C={C*1e12:.1f}pF', color)
    ax.plot(I_range_up*1e6, V*1e6, color=color, linewidth=2.5,
           label=f'βc = {beta_c:.2f} ({"underdamped" if beta_c > 1 else "overdamped"})')

# Theoretical zero-voltage line
ax.axvline(I_c*1e6, color='black', linestyle='--', linewidth=2,
          label=f'Ic = {I_c*1e6:.0f} μA')

ax.set_xlabel('Current I (μA)', fontsize=13, fontweight='bold')
ax.set_ylabel('Voltage V (μV)', fontsize=13, fontweight='bold')
ax.set_title('I-V Characteristics: Effect of Stewart-McCumber Parameter βc',
            fontsize=14, fontweight='bold')
ax.grid(True, alpha=0.3)
ax.legend(fontsize=11, loc='upper left')
ax.set_xlim(0, 20)
ax.set_ylim(0, None)

plt.tight_layout()
plt.savefig('iv_characteristics_beta_c.png', dpi=150, bbox_inches='tight')
plt.show()

print("I-V Characteristics calculated for different βc values")
print("Underdamped junctions (βc > 1) would show hysteresis in full bidirectional sweep")

3.6 Shapiro Steps: Microwave-Induced Phenomena

Phase Locking to External RF

When the junction is irradiated with microwave radiation at frequency $f_{RF}$, the voltage across the junction can lock to discrete values:

$$V_n = n \frac{h f_{RF}}{2e} = n \frac{\Phi_0 f_{RF}}{2\pi}, \quad n = 0, \pm 1, \pm 2, \ldots$$

These Shapiro steps appear as horizontal plateaus in the I-V curve.

Modified RCSJ Equation with RF Drive

The current becomes:

$$I(t) = I_{DC} + I_{RF} \sin(\omega_{RF} t)$$

The RCSJ equation with RF drive is:

$$\frac{d^2\phi}{d\tau^2} + \frac{1}{Q} \frac{d\phi}{d\tau} + \sin(\phi) = i_{DC} + i_{RF} \sin(\Omega \tau)$$

where $i_{DC} = I_{DC}/I_c$, $i_{RF} = I_{RF}/I_c$, and $\Omega = \omega_{RF}/\omega_p$.

Physical Mechanism

Shapiro steps occur when the Josephson oscillation frequency synchronizes with harmonics of the RF frequency:

$$f_J = n f_{RF}$$

This phase-locking mechanism is analogous to mode-locking in lasers.

💻 Code Example 5: Shapiro Steps Simulation

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
import scipy.constants as const

# Physical constants
e = const.e
h = const.h
hbar = const.hbar
Phi_0 = h / (2*e)

# Junction parameters
I_c = 10e-6
R = 10
C = 0.5e-12

omega_p = np.sqrt(2*np.pi*I_c / (Phi_0*C))
Q = omega_p * R * C
beta_c = (2*np.pi / Phi_0) * I_c * R**2 * C

# RF parameters
f_RF = 10e9  # 10 GHz
omega_RF = 2*np.pi*f_RF
I_RF = 0.3 * I_c  # RF amplitude

print(f"Shapiro Step Simulation:")
print(f"  RF frequency fRF = {f_RF*1e-9:.1f} GHz")
print(f"  Expected step voltage Vn = n × {(h*f_RF)/(2*e)*1e6:.2f} μV")

# RCSJ with RF drive
def rcsj_rf_equation(t, y, I_DC):
    phi, dphi_dt = y
    I_applied = I_DC + I_RF * np.sin(omega_RF * t)
    d2phi_dt2 = -omega_p**2 * np.sin(phi) - (omega_p/Q) * dphi_dt + (omega_p**2 / I_c) * I_applied
    return [dphi_dt, d2phi_dt2]

# DC current sweep
I_DC_range = np.linspace(0, 2*I_c, 60)
voltages = []

for I_DC in I_DC_range:
    t_max = 200e-9
    t_eval = np.linspace(0, t_max, 2000)
    y0 = [0.0, 0.0]

    sol = solve_ivp(rcsj_rf_equation, [0, t_max], y0, args=(I_DC,),
                   t_eval=t_eval, method='RK45', rtol=1e-8)

    dphi_dt = sol.y[1]
    V = (hbar / (2*e)) * dphi_dt
    V_avg = np.mean(V[-500:])
    voltages.append(V_avg)

voltages = np.array(voltages)

# Calculate theoretical step voltages
step_voltage = (h * f_RF) / (2*e)
step_numbers = np.arange(-2, 5)
step_voltages = step_numbers * step_voltage

# Plotting
fig, ax = plt.subplots(figsize=(12, 8))

# I-V curve with Shapiro steps
ax.plot(I_DC_range*1e6, voltages*1e6, 'b-', linewidth=2.5, label='I-V with RF drive')

# Mark theoretical step positions
for n, V_step in zip(step_numbers, step_voltages):
    if V_step > 0 and V_step < max(voltages):
        ax.axhline(V_step*1e6, color='red', linestyle='--', linewidth=1.5, alpha=0.6)
        ax.text(1, V_step*1e6 + 0.5, f'n={n}', fontsize=10, color='red')

ax.set_xlabel('DC Current IDC (μA)', fontsize=13, fontweight='bold')
ax.set_ylabel('Time-Averaged Voltage V (μV)', fontsize=13, fontweight='bold')
ax.set_title(f'Shapiro Steps under Microwave Irradiation\nfRF = {f_RF*1e-9:.0f} GHz, IRF = {I_RF/I_c:.2f}Ic',
            fontsize=14, fontweight='bold')
ax.grid(True, alpha=0.3)
ax.legend(fontsize=11)

plt.tight_layout()
plt.savefig('shapiro_steps.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"\nShapiro step positions (n × {step_voltage*1e6:.2f} μV):")
for n in range(0, 4):
    print(f"  n = {n}: V = {n*step_voltage*1e6:.2f} μV")

3.7 DC SQUID: Two-Junction Quantum Interferometer

DC SQUID Structure

A DC SQUID (Superconducting Quantum Interference Device) consists of a superconducting loop interrupted by two Josephson junctions in parallel.

graph TD A[DC SQUID] --> B[Superconducting Loop
Inductance L] A --> C[Two Josephson Junctions
Critical currents Ic1, Ic2] A --> D[Bias Current Ib] A --> E[Applied Flux Φext] style A fill:#fef3c7,stroke:#f59e0b,stroke-width:3px style B fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style C fill:#dcfce7,stroke:#22c55e,stroke-width:2px

Flux Quantization in SQUID Loop

The total flux through the loop is:

$$\Phi = \Phi_{ext} + L I_s$$

where $I_s$ is the screening current and $L$ is the loop inductance.

Flux quantization requires:

$$\Phi = n \Phi_0$$

The phase drops across the two junctions satisfy:

$$\phi_2 - \phi_1 = 2\pi \frac{\Phi_{ext}}{\Phi_0}$$

Critical Current Modulation

For a symmetric SQUID (identical junctions with $I_{c1} = I_{c2} = I_c$), the total critical current is:

$$\boxed{I_c^{tot}(\Phi_{ext}) = 2I_c \left|\cos\left(\pi \frac{\Phi_{ext}}{\Phi_0}\right)\right|}$$

The critical current oscillates periodically with applied flux, with period $\Phi_0$.

Voltage Modulation

When biased with constant current $I_b > 2I_c$, the time-averaged voltage also oscillates:

$$V(\Phi_{ext}) = V_{max} \sqrt{1 - \left|\cos\left(\pi \frac{\Phi_{ext}}{\Phi_0}\right)\right|^2}$$

SQUID Sensitivity

The flux sensitivity (minimum detectable flux) is limited by thermal and quantum noise:

$$\delta \Phi_{min} \sim \sqrt{\frac{k_B T}{L}} \cdot \sqrt{\text{measurement time}}$$

State-of-the-art DC SQUIDs achieve flux sensitivities of $\sim 10^{-6} \Phi_0/\sqrt{\text{Hz}}$, making them the most sensitive magnetic field detectors.

💻 Code Example 6: DC SQUID Critical Current and Voltage Modulation

import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as const

# Physical constants
e = const.e
h = const.h
Phi_0 = h / (2*e)

# SQUID parameters
I_c = 5e-6     # Critical current per junction (A)
R = 10         # Resistance per junction (Ω)
L = 100e-12    # Loop inductance (H) - 100 pH

# Screening parameter
beta_L = 2*np.pi * L * I_c / Phi_0

print(f"DC SQUID Parameters:")
print(f"  Critical current per junction Ic = {I_c*1e6:.1f} μA")
print(f"  Resistance per junction R = {R:.1f} Ω")
print(f"  Loop inductance L = {L*1e12:.0f} pH")
print(f"  Screening parameter βL = {beta_L:.2f}")
print(f"  Flux quantum Φ₀ = {Phi_0*1e15:.3f} fWb")

# Applied flux range
Phi_ext = np.linspace(-2*Phi_0, 2*Phi_0, 500)
phi_ext_normalized = Phi_ext / Phi_0

# Critical current modulation (symmetric SQUID)
I_c_tot = 2 * I_c * np.abs(np.cos(np.pi * phi_ext_normalized))

# Bias current
I_b = 1.5 * 2 * I_c  # 150% of max critical current

# Voltage modulation (simplified model)
# V = R * sqrt(Ib² - Ic_tot²) for Ib > Ic_tot
V = np.zeros_like(I_c_tot)
for i, Ic_t in enumerate(I_c_tot):
    if I_b > Ic_t:
        V[i] = R * np.sqrt(I_b**2 - Ic_t**2)

# Flux-to-voltage transfer function (sensitivity)
dV_dPhi = np.gradient(V, Phi_ext)

# Plotting
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(12, 14))

# Critical current modulation
ax1.plot(phi_ext_normalized, I_c_tot*1e6, 'b-', linewidth=2.5)
ax1.axhline(2*I_c*1e6, color='red', linestyle='--', linewidth=1.5,
           label=f'Max Ic = {2*I_c*1e6:.1f} μA')
ax1.axhline(0, color='black', linestyle='-', linewidth=0.8, alpha=0.5)
ax1.set_xlabel('Applied Flux Φext / Φ₀', fontsize=13, fontweight='bold')
ax1.set_ylabel('Critical Current Ic(Φ) (μA)', fontsize=13, fontweight='bold')
ax1.set_title('DC SQUID Critical Current Modulation', fontsize=14, fontweight='bold')
ax1.grid(True, alpha=0.3)
ax1.legend(fontsize=11)

# Voltage modulation
ax2.plot(phi_ext_normalized, V*1e6, 'r-', linewidth=2.5)
ax2.set_xlabel('Applied Flux Φext / Φ₀', fontsize=13, fontweight='bold')
ax2.set_ylabel('Voltage V(Φ) (μV)', fontsize=13, fontweight='bold')
ax2.set_title(f'DC SQUID Voltage Modulation (Ib = {I_b*1e6:.1f} μA)',
             fontsize=14, fontweight='bold')
ax2.grid(True, alpha=0.3)

# Flux-to-voltage transfer (sensitivity)
ax3.plot(phi_ext_normalized, dV_dPhi*1e-9, 'g-', linewidth=2.5)
ax3.axhline(0, color='black', linestyle='-', linewidth=0.8, alpha=0.5)
ax3.set_xlabel('Applied Flux Φext / Φ₀', fontsize=13, fontweight='bold')
ax3.set_ylabel('dV/dΦ (V/Φ₀)', fontsize=13, fontweight='bold')
ax3.set_title('Flux-to-Voltage Transfer Function (Sensitivity)', fontsize=14, fontweight='bold')
ax3.grid(True, alpha=0.3)

# Mark maximum sensitivity points
max_sensitivity = np.max(np.abs(dV_dPhi))
max_idx = np.argmax(np.abs(dV_dPhi))
ax3.plot(phi_ext_normalized[max_idx], dV_dPhi[max_idx]*1e-9, 'ro', markersize=10,
        label=f'Max |dV/dΦ| = {max_sensitivity*1e-9:.2e} V/Φ₀')
ax3.legend(fontsize=11)

plt.tight_layout()
plt.savefig('dc_squid_characteristics.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"\nSQUID Sensitivity:")
print(f"  Maximum |dV/dΦ| = {max_sensitivity*1e-9:.2e} V/Φ₀")
print(f"  At flux values: Φ/Φ₀ = ±0.5, ±1.5, ...")

3.8 RF SQUID: Single-Junction Interferometer

RF SQUID Structure

An RF SQUID consists of a superconducting loop with a single Josephson junction, inductively coupled to an external RF tank circuit.

Operating Principle

The RF tank circuit at frequency $f_{RF}$ (typically 20-30 MHz) drives an oscillating current through the SQUID loop. The energy dissipated in the junction depends on the applied flux through:

$$\Phi_{total} = \Phi_{ext} + L I_J$$

The junction switches between superconducting and resistive states, modulating the tank circuit Q-factor and thus the RF amplitude or phase.

Flux Quantization and Potential Wells

The effective potential energy is:

$$U(\phi, \Phi_{ext}) = \frac{1}{2L}\left(\Phi_0 \frac{\phi}{2\pi} - \Phi_{ext}\right)^2 - E_J \cos(\phi)$$

This creates a tilted washboard potential. The number of flux quanta trapped in the loop changes as $\Phi_{ext}$ varies, causing stepwise changes in the tank circuit response.

Comparison: DC vs RF SQUID

Property DC SQUID RF SQUID
Junctions Two parallel junctions Single junction
Read-out DC voltage measurement RF tank circuit coupling
Sensitivity Higher (~10⁻⁶ Φ₀/√Hz) Lower (~10⁻⁵ Φ₀/√Hz)
Complexity More complex fabrication Simpler fabrication
Dynamic range Larger Smaller
Applications High-precision magnetometry Geophysical surveys, NDE

💻 Code Example 7: RF SQUID Potential Landscape

import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as const
from mpl_toolkits.mplot3d import Axes3D

# Physical constants
e = const.e
h = const.h
Phi_0 = h / (2*e)

# RF SQUID parameters
I_c = 10e-6    # Critical current (A)
L = 500e-12    # Loop inductance (H) - 500 pH

E_J = (Phi_0 * I_c) / (2*np.pi)
beta_L = 2*np.pi * L * I_c / Phi_0

print(f"RF SQUID Parameters:")
print(f"  Critical current Ic = {I_c*1e6:.1f} μA")
print(f"  Loop inductance L = {L*1e12:.0f} pH")
print(f"  Josephson energy EJ = {E_J/const.e*1e6:.2f} μeV")
print(f"  Screening parameter βL = {beta_L:.2f}")

# Potential energy function
def potential_energy(phi, Phi_ext):
    """
    U(φ, Φext) = (1/2L)(Φ₀φ/2π - Φext)² - EJ cos(φ)
    """
    flux_term = (Phi_0 * phi / (2*np.pi) - Phi_ext)**2 / (2*L)
    josephson_term = -E_J * np.cos(phi)
    return flux_term + josephson_term

# Phase and external flux arrays
phi = np.linspace(-2*np.pi, 4*np.pi, 300)
Phi_ext_normalized = np.linspace(-0.5, 1.5, 200)
Phi_ext = Phi_ext_normalized * Phi_0

# Create meshgrid
PHI, PHIEXT = np.meshgrid(phi, Phi_ext)

# Calculate potential energy landscape
U = np.zeros_like(PHI)
for i in range(len(Phi_ext_normalized)):
    for j in range(len(phi)):
        U[i, j] = potential_energy(PHI[i, j], PHIEXT[i, j])

# Normalize energy to Josephson energy
U_normalized = U / E_J

# Plotting
fig = plt.figure(figsize=(16, 6))

# 3D surface plot
ax1 = fig.add_subplot(121, projection='3d')
surf = ax1.plot_surface(PHI, PHIEXT/Phi_0, U_normalized, cmap='viridis',
                        alpha=0.9, linewidth=0, antialiased=True)

ax1.set_xlabel('Phase φ (rad)', fontsize=11, fontweight='bold')
ax1.set_ylabel('Φext / Φ₀', fontsize=11, fontweight='bold')
ax1.set_zlabel('Energy U / EJ', fontsize=11, fontweight='bold')
ax1.set_title('RF SQUID Potential Energy Landscape', fontsize=13, fontweight='bold')
fig.colorbar(surf, ax=ax1, shrink=0.5, aspect=10)

# 2D contour plot
ax2 = fig.add_subplot(122)
contour = ax2.contourf(PHI, PHIEXT/Phi_0, U_normalized, levels=30, cmap='viridis')
ax2.contour(PHI, PHIEXT/Phi_0, U_normalized, levels=15, colors='black',
           linewidths=0.5, alpha=0.3)

ax2.set_xlabel('Phase φ (rad)', fontsize=12, fontweight='bold')
ax2.set_ylabel('Φext / Φ₀', fontsize=12, fontweight='bold')
ax2.set_title('RF SQUID Potential Energy Contours', fontsize=13, fontweight='bold')
fig.colorbar(contour, ax=ax2, label='Energy U / EJ')

# Mark flux quantum transitions
for n in range(-1, 3):
    ax2.axhline(n, color='red', linestyle='--', linewidth=1.5, alpha=0.6)
    ax2.text(phi[-1] + 0.2, n, f'n={n}', fontsize=10, color='red')

plt.tight_layout()
plt.savefig('rf_squid_potential.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"\nFlux quantization states visible as potential wells at integer Φ/Φ₀")
print(f"βL = {beta_L:.2f} determines well depth and barrier height")

3.9 SQUID Noise and Sensitivity Analysis

Noise Sources in SQUIDs

The ultimate sensitivity of SQUIDs is limited by various noise sources:

Flux Noise Spectral Density

The flux noise power spectral density is:

$$S_\Phi(f) = \frac{k_B T}{L} \cdot \frac{1}{(\partial V / \partial \Phi)^2}$$

The energy resolution is:

$$\varepsilon = \frac{S_\Phi(f)}{2L} \approx \frac{k_B T}{2L} \cdot \frac{1}{(\partial V / \partial \Phi)^2}$$

Quantum Limit

The quantum limit for SQUID energy resolution is:

$$\varepsilon_{quantum} \sim \hbar \omega_p$$

where $\omega_p$ is the plasma frequency. For typical SQUIDs, this is $\sim 10^{-32}$ J, far below the thermal noise limit at mK temperatures.

Practical Sensitivity

State-of-the-art DC SQUIDs achieve:

💻 Code Example 8: SQUID Sensitivity and Noise Analysis

import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as const

# Physical constants
k_B = const.k
e = const.e
h = const.h
hbar = const.hbar
Phi_0 = h / (2*e)

# SQUID parameters
I_c = 5e-6      # Critical current (A)
R = 10          # Resistance (Ω)
L = 100e-12     # Inductance (H)
T = 4.2         # Temperature (K) - liquid He

# Calculate transfer function sensitivity (simplified)
# Maximum dV/dΦ occurs near Φ = (n+1/2)Φ₀
# From DC SQUID theory: max(dV/dΦ) ~ R·Ic / Φ₀
dV_dPhi_max = (R * I_c) / Phi_0

# Thermal flux noise spectral density
S_Phi_thermal = (k_B * T * L) / (dV_dPhi_max**2)

# Flux noise (white noise approximation)
flux_noise_density = np.sqrt(S_Phi_thermal) / Phi_0  # in units of Φ₀/√Hz

# Energy resolution
epsilon = S_Phi_thermal / (2*L)

# Frequency range for noise analysis
freq = np.logspace(-2, 6, 100)  # 0.01 Hz to 1 MHz

# 1/f noise model (simplified)
S_Phi_1f = S_Phi_thermal * (1 + 1/(freq/10))  # 1/f knee at 10 Hz

# Total noise
S_Phi_total = S_Phi_thermal + S_Phi_1f

print(f"SQUID Noise and Sensitivity Analysis:")
print(f"  Temperature T = {T:.1f} K")
print(f"  Loop inductance L = {L*1e12:.0f} pH")
print(f"  Transfer function dV/dΦ = {dV_dPhi_max:.2e} V/Wb")
print(f"\nNoise Performance:")
print(f"  Thermal flux noise = {flux_noise_density:.2e} Φ₀/√Hz")
print(f"  Flux noise in SI = {np.sqrt(S_Phi_thermal)*1e15:.2f} fWb/√Hz")
print(f"  Energy resolution ε = {epsilon/const.e*1e6:.2e} μeV")
print(f"  Energy resolution ε = {epsilon:.2e} J")

# Magnetic field sensitivity
# B = Φ / A_eff, assuming effective area A_eff ~ 1 mm²
A_eff = 1e-6  # m²
B_noise = np.sqrt(S_Phi_thermal) / A_eff
print(f"\nMagnetic Field Sensitivity (assuming A = 1 mm²):")
print(f"  Field noise = {B_noise*1e15:.2f} fT/√Hz")

# Quantum limit estimate
C_junction = 1e-12  # Typical junction capacitance (F)
omega_p = np.sqrt(2*np.pi*I_c / (Phi_0*C_junction))
epsilon_quantum = hbar * omega_p

print(f"\nQuantum Limit:")
print(f"  Plasma frequency ωp = {omega_p*1e-9:.2f} GHz")
print(f"  Quantum energy ℏωp = {epsilon_quantum/const.e*1e6:.2e} μeV")
print(f"  Ratio ε/ℏωp = {epsilon/epsilon_quantum:.1f}")

# Plotting
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))

# Flux noise spectral density
ax1.loglog(freq, np.sqrt(S_Phi_total)/Phi_0, 'b-', linewidth=2.5, label='Total noise')
ax1.loglog(freq, np.sqrt(S_Phi_thermal)/Phi_0 * np.ones_like(freq), 'r--',
          linewidth=2, label='White (thermal) noise floor')
ax1.set_xlabel('Frequency (Hz)', fontsize=13, fontweight='bold')
ax1.set_ylabel('Flux Noise (Φ₀/√Hz)', fontsize=13, fontweight='bold')
ax1.set_title('SQUID Flux Noise Spectral Density', fontsize=14, fontweight='bold')
ax1.grid(True, alpha=0.3, which='both')
ax1.legend(fontsize=11)

# Energy resolution vs inductance
L_range = np.logspace(-13, -10, 100)  # 0.1 pH to 10 nH
epsilon_vs_L = (k_B * T) / (2 * L_range * dV_dPhi_max**2 / L**2)

ax2.loglog(L_range*1e12, epsilon_vs_L/const.e*1e6, 'g-', linewidth=2.5)
ax2.axhline(epsilon_quantum/const.e*1e6, color='red', linestyle='--', linewidth=2,
           label=f'Quantum limit = {epsilon_quantum/const.e*1e6:.2e} μeV')
ax2.axvline(L*1e12, color='blue', linestyle='--', linewidth=2, alpha=0.7,
           label=f'Current L = {L*1e12:.0f} pH')
ax2.set_xlabel('Loop Inductance L (pH)', fontsize=13, fontweight='bold')
ax2.set_ylabel('Energy Resolution ε (μeV)', fontsize=13, fontweight='bold')
ax2.set_title('Energy Resolution vs Loop Inductance', fontsize=14, fontweight='bold')
ax2.grid(True, alpha=0.3, which='both')
ax2.legend(fontsize=11)

plt.tight_layout()
plt.savefig('squid_sensitivity_analysis.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"\nOptimization: Smaller L improves energy resolution but reduces flux coupling")

Summary

In this chapter, we explored the Josephson effects and SQUID devices in depth:

The Josephson effects form the foundation of modern quantum electronics, enabling ultra-sensitive magnetometry (SQUIDs), voltage standards, superconducting qubits for quantum computing, and rapid single-flux-quantum (RSFQ) logic circuits. The next chapter will explore BCS theory in depth to understand the microscopic origin of superconductivity.


Exercises

Exercise 1: Critical Current Calculation

Problem: A tunnel junction has a normal-state resistance $R_N = 5$ Ω and operates at temperature $T = 4.2$ K. The superconducting gap is $\Delta(T) = 1.5$ meV. Calculate the critical current using the Ambegaokar-Baratoff formula.

Hint: $I_c = (\pi \Delta / 2eR_N) \tanh(\Delta / 2k_B T)$

Exercise 2: Josephson Frequency

Problem: A voltage of $V = 2.07$ mV is applied across a Josephson junction. Calculate:

  1. The Josephson frequency $f_J$
  2. The period of oscillation
  3. The phase change over 1 nanosecond

Solution hints:

1) $f_J = 2eV/h = 483.6 \times 2.07 = 1001$ GHz

2) $T = 1/f_J = 0.999$ ps

3) $\Delta\phi = (2eV/\hbar) \times t = \omega_J \times 1$ ns

Exercise 3: Stewart-McCumber Parameter

Problem: Calculate $\beta_c$ for a junction with $I_c = 10$ μA, $R = 5$ Ω, $C = 2$ pF. Will the I-V curve show hysteresis?

Hint: $\beta_c = 2\pi I_c R^2 C / \Phi_0$. Hysteresis occurs if $\beta_c > 1$.

Exercise 4: Shapiro Step Voltage

Problem: A junction is irradiated with 94 GHz radiation. Calculate the voltage of the first three Shapiro steps ($n = 1, 2, 3$).

Hint: $V_n = n h f_{RF} / 2e$

Exercise 5: DC SQUID Critical Current

Problem: A symmetric DC SQUID has junctions with $I_c = 8$ μA each. Calculate the total critical current when:

  1. $\Phi_{ext} = 0$
  2. $\Phi_{ext} = \Phi_0/2$
  3. $\Phi_{ext} = \Phi_0$

Hint: $I_c^{tot} = 2I_c |\cos(\pi \Phi_{ext}/\Phi_0)|$

Exercise 6: SQUID Flux Sensitivity

Problem: A DC SQUID operates at $T = 4.2$ K with $L = 100$ pH and maximum transfer function $dV/d\Phi = 10^6$ V/Wb. Calculate the thermal flux noise in units of $\Phi_0/\sqrt{\text{Hz}}$.

Hint: $S_\Phi = k_B T L / (dV/d\Phi)^2$

Exercise 7: Programming Challenge - Hysteresis

Problem: Modify Code Example 4 to sweep the current both up and down to visualize hysteresis in an underdamped junction ($\beta_c = 5$). Plot the hysteresis loop and calculate the return current $I_r$.

Exercise 8: Programming Challenge - Phase Dynamics Animation

Problem: Create an animated visualization of the washboard potential $U(\phi) = -E_J \cos(\phi) - (\hbar I/2e)\phi$ for increasing bias current $I$ from 0 to $2I_c$. Show how the particle transitions from trapped to running state.

Hint: Use matplotlib.animation or create a sequence of frames.


Disclaimer