Marcus Model
The Marcus model explains the rates of electron transfer reactions using two harmonic potential curves. The two-state system can be described by the potential energy operator $$ \hat{V}(q) = \begin{pmatrix} \hat{v}_ {11}(q) & \hat{v}_ {12}(q) \\ \hat{v}_ {21}(q) & \hat{v}_ {22}(q) \end{pmatrix} $$ with \( \hat{v}_ {21}(q) = \hat{v}_ {12}^{\dagger}(q) \).
Marcus set \( \hat{v}_ {12}^{\dagger}(q) \) to be constant over the whole space to obtain analytical expressions from all the integrals. Since we will do everything numerically, we can use an more realistic expression for the coupling $$v_{12}(q) = v_{21}(q) = C \mathrm{e}^{-D q^2}$$
For this test, we use the class HarmonicOscillator from section
6.2.1.
mass, omega = 1.0, 1.0
c = 2.5
d = 1.0/(2.0*2.0**2)
ho = HarmonicOscillator(mass, omega)
xmin = -20.0
xmax = -xmin
ngrid = 256
displacement = 3.0
e_ge = 0.0
x = np.linspace(xmin, xmax, ngrid)
nstate = 2
v11 = ho.get_potential(x - displacement)
v22 = e_ge + ho.get_potential(x + displacement)
v12 = c * np.exp(-d * x**2)
vgrid = np.zeros((x.shape[0], nstate, nstate)) # Dimension: ngrid * nstate * nstate
psi0 = np.zeros((x.shape[0], nstate)) # Dimension: ngrid * nstate
vgrid[:, 0, 0] = v11
vgrid[:, 1, 1] = v22
vgrid[:, 0, 1] = v12
vgrid[:, 1, 0] = v12
psi00 = ho.get_eigenfunction(x + 8, 0)
psi0[:, 1] = psi00
psi0[:, 0] = np.zeros(x.shape[0])
wp_multi = QuantumDynamics1D(mass)
wp_multi.setup_grid(xmin, xmax, ngrid)
wp_multi.set_potential(vgrid)
n = 200
nstep = 1000
tstep = (2*np.pi/omega) / n
wp_multi.propagate(tstep, nstep, psi0, method="Split Operator")
an_multi = wp_multi.animate(nstep=nstep, delay=10, scalewf=100.0, plot_potential=True)