Nonlinear Differential Equations For Pulsed Light
Contents
16. Nonlinear Differential Equations For Pulsed Light#
Name:
Total Points: –/100 pts
### UNCOMMENT AND RUN THIS CELL IF USING GOOGLE COLAB
# !pip install ipympl -q
# from google.colab import output
# output.enable_custom_widget_manager()
In assignment 4, we derived the coupled differential equations that govern nonlinear optical processes. We started with Maxwell’s equations, which required us to take both space and time derivatives of the electric fields. To do that, we wrote down the electric field and resulting polarization as
where the amplitudes \(E(z)\) and \(P(z)\) varied in space but not time. In order to treat optical pulses, we must allow these field amplitudes to vary int time, and instead write
If we take space and time derivatives just like we did before and insert them back into the plane-wave version of Maxwell’s equations, we obtain:
This looks just like the differential equation we obtained before, but with extra time derivatives. How do we deal with these extra time derivatives?
Well, let’s first make the usual substitutions:
To obtain
This differential equation has a problem, however. It was derived just like before assuming a single frequency. However, the derivatives in time imply that we may have additional spectral components beyond just \(\omega\). And these additional frequencies might have different k-vectors associated with them. In other words, this equation does not yet take into account dispersion.
To fix that, we can write the k-vector as a Taylor series around a central frequency \(\omega_0\):
After some rather tedious manipulations, we arrive at
Alternatively we could just use a Sellmeir equation to write down \(k(\omega)\). This differential equation is the equivalent to the ones we have been solving throughout the course, but now takes into account a time-dependent field amplitude. However, many authors make one more simplification by transforming this equation into a “local time frame”, which removes the motion of the pulse from the equations. Sometimes this is helpful so that the pulse profile can be visualized. To transform to a local time frame, we let
and arrive at
Note that that last step is not trivial, and requires some subtlety to reproduce.
16.1. Self Phase Modulation#
Let’s now explore how the nonlinearities change pulse propagation. We’ll start by taking another look at the intensity-dependent refractive index. Recall that this is a third-order nonlinear process in which the nonlinear polarization takes the form
This implies that we an effective polarization oscillating at frequency \(\omega\) (which normally looks like a linear susceptibility) of the form
where
We can therefore write the refractive index as
The most significant cosequnce of the frequency-dependent refractive index is that the refractive index is different within different regions of the pulse. This means that the phase velocity is modulated with pulse intensity, an effect known as self-phase modulation. To get a feeling for how this affects the pulses, let’s plot some examples.
We’ll start with the same gaussian pulse we used in the last notebook, but this time we’ll plot the field instead of the intensity so that we can see the phase.
import numpy as np
import matplotlib.pyplot as plt
import ipywidgets as ipw
from scipy.constants import *
%matplotlib widget
## Generate Gaussian Pulse in the time domain
lam0 = 1.5 # wavelength in microns
f0 = c*1e-9*1e6/lam0 # cycles per ns
omega0 = 2*pi*f0 #angular frequency in rad/ns
T0 = 1/f0 # period in ns
tau = 10*T0 #width of gaussian pulse in time (ns)
N=10000
fs = N/200/T0
t = np.linspace(-100*T0, 100*T0, N) #time array
A = 1 #peak field amplitude
E_pulse = A*np.exp(-t**2/(tau**2))
Et = E_pulse*np.exp(1j*omega0*t)
It = np.abs(Et)**2
#z = np.linspace(0, 20*lam, 1000)
scale = 1e6
fig, ax = plt.subplots()
ax.plot(t*scale, np.real(Et))
ax.set_xlabel(r'$t (fs)$')
plt.xlim(-1e-4*scale, 1e-4*scale)
plt.show()
This is for a pulse at \(z=0\). Let’s now add an intensity dependent phase and let the pulse travel some distance z:
# Self-Phase Modulated Pulse
n0 = 1.73 # refractive index of sapphire
n2 = 3e-16*1e8 #um^2/W #approximate n2 of sapphire
n = n0 + It*n2
def update(z = 0):
phi = omega0*t - n*It*omega0*z/c
Et = E_pulse*np.exp(1j*phi)
line0.set_ydata(np.real(Et))
fig, ax = plt.subplots()
dummy_E = np.zeros_like(np.real(Et))
scale = 1e6
line0, = ax.plot(t*scale, dummy_E, label = 'E', color = 'red')
ax.set_ylabel('E-field')
ax.set_xlabel('t (fs)')
ax.set_ylim(-1, 1)
ax.set_xlim(-1e-4*scale, 1e-4*scale)
ipw.interact(update, z = (0, 1e4, 1e2))
#plt.plot(z,I2)
plt.show()
Notice that the carrier frequency appears to change within the pulse. We can calculate that! Since the intensity-induced phase shift is
The intantaneous phase shift is then
# Self-Phase Modulated Pulse with relative frequency shift
def update(z = 0):
phi = omega0*t - n*It*omega0*z/c
Et = E_pulse*np.exp(1j*phi)
omega_inst = -omega0*n2*z/c*np.diff(It)/np.diff(t)*1e9/4 # cycles per ns
line0.set_ydata(np.real(Et))
line1.set_ydata(omega_inst/omega0)
scale = 1e6
fig, ax = plt.subplots()
dummy_E = np.zeros_like(np.real(Et))
dummy_omega_inst = np.zeros_like(np.diff(It))
line0, = ax.plot(t*scale, dummy_E, label = 'E', color = 'red')
line1, = ax.plot(t[0:-1]*scale, dummy_omega_inst, label = 'omega', color = 'blue')
ax.set_ylabel('E-field')
ax.set_xlabel('t (fs)')
ax.set_ylim(-2, 3)
ax.set_xlim(-1e-4*scale, 1e-4*scale)
ipw.interact(update, z = (0, 1e4, 1e2))
#plt.plot(z,I2)
plt.show()
This reproduces Fig 7.1 in New.
16.2. Exercises#
(50 pts) Reproduce Fig. 7.2 in New. What is the physical interpretation of the three lines plotted?
(50 pts) Take the fourier transform of the self-phase modulated pulse. Reproduce Fig 7.3 in New.