Adding Light to VlaPy
We added a light wave solver to the electrostatic physics in VlaPy (thanks to Prof. Alec Thomas). We use the vector potential formulation as that enables us to only track a single quantity rather than four i.e. $E/B_{y/z}$
Implementation
Vector Potential and the effect of Plasma on Light Waves
The vector potential, $a(x,t)$, is evolved using a centered, finite difference discretization of the wave equation interacting with a plasma given by
$$d_t^2 a + c^2 d_x^2 a = n_e a + j_y$$ which gives
$$a^{n+1} = 2 a^n - a^{n-1} + \left(\frac{c\Delta t}{\Delta x}\right)^2 a’’ + j_y^n \Delta t^2$$
There is now a source term $$j_y^n = -\rho^n a^n + \Delta j_s$$
which gives us the ability to drive light waves using
$$ j_s(x,t) = a_0 k_0 \sin(k_0 x - \omega_0 t) \times envelope(t)$$
We use the same driver API as for the electrostatic waves.
Effect of Light Waves on Plasma
Using the new $a(x,t)$ profile, we add the following term to the force equation $$\Delta F = d_x a^2$$
Light Wave Boundary Conditions
Finally, we need to add absorbing boundary conditions using the derivation found in chapter 6 of the Understanding the Finite-Difference Time-Domain Method. We implement both first and second order absorbing boundary conditions. In practice, we typically use the second order calculation.
Does it work?
Yes, it works!
Here’s a simulation of Stimulated Raman Scattering, where two light waves coincide and drive an electrostatic plasma wave. Eventually, this system goes unstable and results in bursty behavior. Here is a plot of the electrostatic field over time
and the corresponding transmitted light plot where pump depletion is evident