codex/past-exam-of-the-quantum-condensed-matter-field-theory-course-of-the-university-of-cambridge/2015/paper-1-spin-wave.py

past-exam-of-the-quantum-condensed-matter-field-theory-course-of-the-university-of-cambridge/2015/paper-1-spin-wave.py
"""Original harmonic spin-wave dispersions; Python 3.14."""
import numpy as np
import matplotlib.pyplot as plt
k=np.linspace(-np.pi,np.pi,900)
fig,ax=plt.subplots(figsize=(7,3.8),layout='constrained')
ax.plot(k,1-np.cos(k),label=r'Ferromagnet: $\omega/(2JS)=1-\cos k$',color='#2158a0')
ax.plot(k,np.abs(np.sin(k)),label=r'Antiferromagnet: $\omega/(2JS)=|\sin k|$',color='#b24b18')
ax.axvspan(-np.pi/2,np.pi/2,alpha=.06,color='black',label='Antiferromagnetic reduced zone')
ax.set(xlabel='Momentum k (lattice spacing = 1)',ylabel=r'$\omega/(2JS)$',title='Linear versus quadratic low-momentum behaviour')
ax.set_xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\pi/2$','0',r'$\pi/2$',r'$\pi$'])
ax.legend(fontsize=9,loc='upper center');ax.spines[['top','right']].set_visible(False)
fig.savefig('paper-1-spin-wave.png',dpi=155,facecolor='white')