
RP Coating – Advanced Software for
Designing Optical Multilayer Structures
| Overview | Purpose | Model | Interface | Demos | Versions |
Demo File: Gires–Tournois interferometer
Here, we analyze the characteristics of a Gires–Tournois interferometer, which could be used for dispersion compensation in a mode-locked laser, for example. It consists of a Bragg mirror, one thicker layer and a thin top layer. Effectively, it is like a Fabry–Pérot interferometer operated in reflection, where the back mirror has a high reflectivity. The overall reflectivity is then high for all wavelengths within some range, and is hardly affected by the resonances. Due to the interference effect from the top mirror, however, one obtains a periodic variation of the phase change and thus chromatic dispersion.
We first describe the structure:
d_units: nm
l_units: nm
l_Bragg := 1000 { Bragg wavelength }
N_Bragg := 10 { number of layer pairs }
d_t := 3.25 * l_Bragg / n_SiO2(l_Bragg * l_units) { thickness of thick SiO2 layer }
beam from superstrate
substrate: BK7
for j := 1 to N_Bragg do
begin
* TiO2, l / 4 at l_Bragg
* SiO2, l / 4 at l_Bragg
end
* SiO2, d = d_t
* TiO2, l / 4 at l_Bragg
superstrate: air
The first diagram shows the reflectivity profile:
diagram 1:
"Reflectivity Profile"
x: 800, 1200
"wavelength (nm)", @x
y: 0, 100
"reflectivity (%)", @y
cs: frame, hx, hy
f: 100 * R(x), color = red, width = 3, step = 1
A second diagram shows the group delay versus wavelength, which is highest on the resonances:
diagram 2:
"Group Delay in Reflection"
x: 800, 1200
"wavelength (nm)", @x
y: -150, +150
"T_g (fs)", @y
cs: frame, hx, hy, clip
f: T_g_r(x) / fs, color = green, width = 3
f: CS_y1 + R(x) * (CS_y2 - CS_y1), style = dotted
f: 0
The third diagram plots the group delay dispersion as a function of wavelength:
diagram 3:
"Group Delay Dispersion"
x: 800, 1200
"wavelength (nm)", @x
y: -4000, +4000
"GDD (fs^2)", @y
y2: 0, 1
frame
f: GDD_r(x) / fs^2,
color = blue,
width = cwidth,
step = 1,
maxconnect = 1
f: R(x),
yscale = 2,
style = dotted
f: 0
Next we look at intensity patterns versus wavelength:
diagram 4:
x: 800, 1200
"wavelength (nm)", @x
y: -500, d_tot + 1500
"depth in the mirror structure (nm)", @y
frame
! begin { show the color scale }
var x1, x2;
x1 := CS_x2 + 0.02 * (CS_x2 - CS_x1);
x2 := CS_x2 + 0.04 * (CS_x2 - CS_x1);
for y := CS_y1 to CS_y2 step (CS_y2 - CS_y1) / 500 do
begin
setcolor(colorscale((y - CS_y1) / (CS_y2 - CS_y1)));
line(x1 + i * y,x2 + i * y);
end;
setcolor(black);
end
! (set_dir(1); R(lambda_t))
cp: colorscale((R(x); E2(y) / 4)) { color plot }
; Show the layer boundaries:
f: get_z(j), style = solid, color = lightgray, for j := 1 to nolayers()
f: 0
f: get_z(nolayers() + 1)
"substrate", 200c, (-200)c
"superstrate", 150, (d_tot + 200)c
Finally, we simulate the propagation of an ultrashort pulse through the structure. Although RP Coating has no explicit functions for such purposes, we can do that with a few lines of script code. We define some arrays for the time- and frequency-dependent complex amplitudes, also for the complex electric field in the whole structure for all optical frequencies (for later use, see below). Then we do the actual calculation and display the reflected pulse:
diagram 5:
"Reflection of Ultrashort Pulse"
x: -50, +200
"time (fs)", @x
y: -1, 1
"electric field strength (a. u.)", @y
cs: frame, hx, hy
; Parameters of the test pulse:
A0 := 0.9 { peak amplitude }
tau0 := 10 fs { FWHM duration }
l0 := 1000 nm { center wavelength }
f0 := c / l0 { center frequency }
A0%(t) := A0 / cosh(1.7627 * t / tau0) { complex amplitude in time domain }
E0(t) := Re(A0%(t) * expi(-2pi * f0 * t)) { electric field }
["l0 = ", l0:d3:"(n)m",
", tau0 = ", tau0:d3:"s",
", T_g = ", T_g_r(l0 / l_units):d3:"s",
", GDD = ", GDD_r(l0 / l_units) / fs^2:f0:"fs^2"]
; Numerical parameters:
T := 3000 fs
N := 2^10
dt := T / N
t1 := -T / 2 + dt
t2 := T / 2
df := 1 / T
f2 := (N / 2) * df
f1 := -f2 + df
f_max := 1 / dt - df
defarray A%[0, T - dt, dt] (periodic) { amplitudes in time domain }
z_max := d_tot * d_units + 3 um
dz := 30 nm
dz := z_max / round(z_max / dz)
defarray E%[0, z_max, dz; f1, f2, df]
calc
{ Calculate reflected time-domain amplitudes A%[]
and electric field E%[] inside the structure }
begin
for t := t1 to t2 step dt do A%[t] := A0%(t);
A0_f%[] := FFT(A%[], -1);
A_f%[] := A0_f%[];
for f := f1 to f2 step df do
begin
A_f%[f] := A_f%[f] * r%(c / (f0 + f) / l_units);
for z := 0 to z_max step dz do
E%[z, f] := E_plus%(z / d_units) + E_minus%(z / d_units);
end;
A%[] := FFT(A_f%[], +1); {}
end
A%(t) := A%~[t] { final amplitude }
E(t) := Re(A%(t) * expi(-2pi * f0 * t))
f: E0(x * fs), color = lightgray, step = 1
f: E(x * fs), color = blue, step = 1
f: abs(A0%(x * fs)), color = lightgray, step = 1 { envelope of initial pulse }
f: -abs(A0%(x * fs)), color = lightgray, step = 1
f: abs(A%(x * fs)), color = blue, step = 1 { envelope of final pulse }
f: -abs(A%(x * fs)), color = blue, step = 1
As the chosen input pulse (gray curve) is rather short, we obtain a sequence of output pulses:
For the next diagram, we need the time-dependent field at all positions in the structure. For each position, a fast Fourier transform (FFT) delivers the complex amplitudes for all times. That is far faster than explicitly summing up the contributions of all frequency components for each point of the diagram. We use zero padding in the frequency domain, i.e., a wider frequency range with additional zero amplitudes, in order to obtain a finer temporal resolution. Between the stored values, the function I(z, t) interpolates:
pad := 4 { zero padding factor }
dt_p := dt / pad { temporal resolution }
t_p1 := -(round(50 fs / dt_p) + 1) * dt_p { stored time range }
t_p2 := +(round(100 fs / dt_p) + 1) * dt_p
defarray Ez_f%[0, pad / dt - df, df] (periodic) { spectrum at one position }
defarray Ez%[0, T - dt_p, dt_p] (periodic) { time-domain amplitudes at one position }
defarray Et%[0, z_max, dz; t_p1, t_p2, dt_p]
calc
{ Calculate Et%[z, t]: time-dependent field in the structure }
begin
I_max := 0;
for z := 0 to z_max step dz do
begin
for f := f1 to f2 step df do
Ez_f%[f] := A0_f%[f] * E%[z, f];
FFT(Ez_f%[], Ez%[], +1);
for t := t_p1 to t_p2 step dt_p do
Et%[z, t] := Ez%[t];
I_max := maxr(I_max, abs2(Et%[z, 0]));
end;
end
I(z, t) := abs2(Et%~[z, t]) / I_max
{ normalized intensity at position z and time t, interpolated }
With that, the next diagram shows the time-resolved field intensity distribution:
diagram 6:
"Ultrashort Pulse in the GTI Structure"
x: -50, +100
"t (fs)", @x
y: 0, z_max / um
"z (µm)", @y
cs: frame, hx, hy
cp: colorscale(I(y * um, x * fs))
"air", 100, (d_tot * nm / um + 0.3)c
f: d_tot * nm / um { indicate the surface of the GTI }
"GTI", 100, (d_tot * nm / um - 0.3)c
One can see how the incoming pulse (upper left part) causes a first reflected pulse at the input face, then a stronger pulse via reflection at the bottom Bragg mirror, and further weaker pulses which do multiple round trips in the structure. For the given very short input pulse, these reflected pulses stay well separated in time. Normally, a GTI would be used with much longer pulses, so that all reflected pulses overlap strongly in time. In that situation, the pulse bandwidth is smaller than the bandwidth of the GTI resonances.
