a side grad project
The Jahn-Teller effect is a phenomenon in molecular and solid-state physics where distortions in the molecular geometry occur due to degenerate electronic states. The effect is often associated with the geometric aspects and the Berry phase. In the gauge formalism of Jahn-Teller models, we can visualize the introduction of a magnetic flux into the Conical Intersection (CI). This has led to discussions about a “molecular Aharonov-Bohm effect.
In their work
Consider the full Schrödinger equation given by \(\hat{H}(r, R) \psi(r ; R) \chi(R)= & \left(E^{\mathrm{el}}(R)+\hat{V}_{\mathrm{N}}\right) \psi(r ; R) \chi(R) \\ & -\sum_{i} \frac{1}{2 M_{i}}\left[\psi(r ; R) \nabla_{\mathrm{N}, i}^{2} \chi(R)\right. \\ & \left.+2 \nabla_{\mathrm{N}, i} \psi(r ; R) \cdot \nabla_{\mathrm{N}, i} \chi(R)+\nabla_{\mathrm{N}, i}^{2} \psi(r ; R) \chi(R)\right]\) and total wavefunction is given by \(\Psi(r,R)=\sum_{i} \psi_i(r;R)\chi_i(R)\) where \(\psi_i(r;R)\) is the electronic wavefunction and \(\chi_i(R)\) is the nuclear wavefunction. The terms that carry the derivative of electronic wavefunction wrt to the nuclear coordinates are called non-adiabatic coupling terms. The adiabatic/Born-Oppenheimer approximation is valid when the non-adiabatic coupling terms are small. But these terms can blow up when the electronic states cross. The electron dynamics timescale becomes equal to nuclear dynamics timescale and hence BO is no longer valid. In the adiabatic representation we choose an ansatz given by \(\Psi(r ; R)=\sum_{n=0}^{\infty} \psi_{n}(r ; R) \chi_{n}(R)\). Using this in the schrodinger equation we get off diagonal coupling terms. Hence, this representation is only useful when off diagonal couplings are small and can be neglected since calculating them is quite difficult.
Specifically, consider a two state diabatic Hamiltonian with a CI at the origin. The Hamiltonian is given by \(\hat{H}= \hat{T_{nuc}}\mathbf{\hat{I}} + \hat{V}\) where \(\hat{T_{nuc}}\) is the nuclear kinetic energy operator, \(\mathbf{\hat{I}}\) is the identity matrix, and \(\hat{V}\) is the potential energy operator. The potential energy operator is given by \(\hat{V} = \begin{pmatrix} \frac{1}{2}w^2((x+a/2)^2+y^2) & c y \\ c y & \frac{1}{2}w^2((x-a/2)^2+y^2) \end{pmatrix} +\) where \(w\) is the frequency of the harmonic oscillator and \(c\) is the coupling between the two states.
One can reproduce this using the following code.
c = 4
w = 2 # 2*np.pi*f_Rabi
num_time_steps = 100
pop = np.zeros((num_time_steps, 2))
time = np.zeros(num_time_steps)
psi = pt.Wavefunction(["exp(-(x+1)**2-(y)**2)*exp(1j*2*x)", "0"], number_of_grid_points=(128*3, 128*3), spatial_ext=[(-4, 4), (-4, 4)])
V = ["1/2*w**2*((x+1)**2 + y**2)", "c*y", "1/2*w**2*((x-1)**2 + y**2)"]
def init():
data=np.abs(psi.amp[:,:,0].T)**2
sns.heatmap(data, cmap='jet',cbar=False)
def animate(i):
psi.propagate(V, num_time_steps=1, delta_t=0.05, variables={'w': w, 'c': c})
data=np.abs(psi.amp[:,:,0].T)**2
fig.clear()
sns.heatmap(data, cmap='jet',cbar=False)
#remove ticks in seaborn plot
plt.xticks([])
plt.yticks([])
plt.ylabel('$Q_y$')
plt.xlabel('$Q_x$')
plt.title('Time evolution of the wavefunction')
fig = plt.figure(figsize=(8, 8))
anim=animation.FuncAnimation(fig, animate, init_func=init, frames=num_time_steps, repeat=False)
HTML(anim.to_html5_video())