codexpast-exam-of-the-superconductivity-and-quantum-coherence-course-of-the-university-of-cambridge2016paper-1-amplitude-phase-modes.py
past-exam-of-the-superconductivity-and-quantum-coherence-course-of-the-university-of-cambridge/2016/paper-1-amplitude-phase-modes.py
"""Original condensate-mode comparison, with output PNG written to cwd."""
from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
def main():
beta = gamma = 1.0
k0 = 1.0
omega = np.sqrt(k0**4 + 2 * beta * k0**2)
tau = np.linspace(0, 2 * np.pi, 500)
density_amplitude = 0.14
fig, axes = plt.subplots(1, 3, figsize=(11, 3.9), dpi=120,
facecolor="white")
ax = axes[0]
real = 1 + density_amplitude * np.cos(tau) / 2
imag = -omega * density_amplitude * np.sin(tau) / (2 * k0**2)
ax.plot(real, imag, color="#1c67a0", lw=2,
label="First order: coupled")
ax.plot([.91, 1.09], [0, 0], color="#c35724", lw=2.5,
label="Second order: amplitude")
angle = np.linspace(-.13, .13, 180)
ax.plot(np.cos(angle), np.sin(angle), "--", color="#27834a", lw=2,
label="Second order: phase")
ax.scatter([1], [0], color="black", s=15, zorder=5)
ax.text(1.005, -.025, r"$\psi_0=1$", fontsize=9)
ax.set(xlim=(.82, 1.18), ylim=(-.18, .18), aspect="equal",
xlabel=r"$\mathrm{Re}\,\psi$", ylabel=r"$\mathrm{Im}\,\psi$",
title="Small motion about equilibrium")
ax.legend(loc="upper center", bbox_to_anchor=(.5, -.24),
fontsize=8, frameon=False)
k = np.linspace(0, 2, 500)
axes[1].plot(k, np.sqrt(k**4 + 2 * beta * k**2),
color="#1c67a0", lw=2, label="One positive branch")
axes[1].plot(k, np.sqrt(2 * beta) * k, ":", color="#56606b", lw=1.3,
label="Small-k sound limit")
axes[1].set(title="First-order time dynamics", xlabel=r"$|k|$",
ylabel=r"$\omega$", xlim=(0, 2), ylim=(0, 5.1))
axes[1].legend(loc="upper left", fontsize=8, frameon=False)
axes[2].plot(k, np.sqrt((k**2 + 2 * beta) / gamma),
color="#c35724", lw=2, label="Amplitude")
axes[2].plot(k, k / np.sqrt(gamma), "--", color="#27834a", lw=2,
label="Phase")
axes[2].set(title="Second-order time dynamics", xlabel=r"$|k|$",
ylabel=r"$\omega$", xlim=(0, 2), ylim=(0, 2.7))
axes[2].legend(loc="upper left", fontsize=8, frameon=False)
for ax in axes:
ax.grid(alpha=.18)
fig.suptitle(r"Condensate amplitude and phase: $\beta=\gamma=1$", fontsize=14)
fig.subplots_adjust(left=.065, right=.985, bottom=.28, top=.79, wspace=.4)
fig.savefig(Path.cwd() / Path(__file__).with_suffix(".png").name,
facecolor="white")
plt.close(fig)
if __name__ == "__main__":
main()