Triangular cavity
Below, we construct a triangular cavity formed by three mirrors (denoted \(\text{IMC}_1\), \(\text{IMC}_2\), and \(\text{IMC}_3\)) and three optical paths between them.
In LIGO, a triangular cavity of this type is placed immediately after the laser, and is known as the input mode cleaner (IMC). Its purpose is to clean and stabilize the laser beam before it enters the main interferometer. For example, the laser’s optical frequency is not perfectly constant in time, but oscillates slightly around its nominal, central value. The IMC acts as a frequency filter reducing the laser’s noise before it enters the main interferometer.
In this example we vary both the microscopic tuning of mirror \(\text{IMC}_3\), and the laser frequency. At resonance all power is transmitted and the reflected power drops to zero. When the tuning of \(\text{IMC}_3\) is varied, the cavity is at resonance when the extra path length is a whole number of wavelengths, that is when the phase picked up is a multiple of \(360 \degree\). Since light reflected from a tuned mirror or beamsplitter picks up a phase shift of twice the tuning, the cavity is at resonance when the tuning of \(\text{IMC}_3\) is a multiple of \(180 \degree\). When instead the laser frequency is varied, the cavity is at resonance when a whole numer of extra wavelengths fits inside the cavity. This occurs when the frequency offset is a multiple of \(\Delta\omega = c / L\), where \(c\) is the speed of light and \(L\) is the total length of the cavity (for the LIGO parameters used below \(\Delta\omega=9.1 \text{MHz}\)). This example demonstrates the use of the triangular cavity as a frequency filter: specific resonance frequencies are transmitted, while other frequencies are heavily suppressed.
Note
Even though we say ‘mirrors’ in the text, we have to use the beamsplitter component in Finesse to create any cavity with more than two mirrors since the Finesse mirror component assumes normal incidence.
import finesse
from finesse.analysis.actions import Xaxis
import matplotlib.pyplot as plt
finesse.init_plotting()
# parameters from https://finesse.docs.ligo.org/finesse-ligo/parameter_files/llo.html
IMC_model = finesse.Model()
IMC_model.parse(
"""
l l1 P=1 # laser with P=1W
s s1 l1.p1 IMC_1.p1 L=0 # space of 1m length connecting laser to IMC
# Input Mode Cleaner (IMC) mirrors
# Light transmitted through IMC_1 (from p1 to p3) enters IMC_3 (in p1 and is
# reflected in p2). Then it continues into IMC_2 (enters in p1, reflected in p2).
# Finally it returns from IMC_2.p2 into IMC_1.p4, which reflects into MC1.p3,
# closing the triangular cavity.
bs IMC_1 T=6150u L=20u Rc=101609
bs IMC_2 T=3.5u L=20u Rc=27.178
bs IMC_3 T=6130u L=20u Rc=171747
# Connect spaces to form a triangle
s L13 IMC_1.p3 IMC_3.p1 L=0.465
s L23 IMC_3.p2 IMC_2.p1 L=16.24057
s L12 IMC_2.p2 IMC_1.p4 L=16.24057
# Photodiodes measuring the reflected, circulating, and transmitted light
pd power_reflected IMC_1.p2.o
pd power_circulating IMC_1.p3.o
pd power_transmitted IMC_3.p3.o
"""
)
# Change the tuning of mirror IMC_3 up to second resonance
out_tuning = IMC_model.run(Xaxis('IMC_3.phi', 'lin', 0, 360, 1000))
# Change the frequency of the laser up to second resonance
cavity_length = IMC_model.L13.L + IMC_model.L23.L + IMC_model.L12.L
resonance_freq = 2.99792e8 / cavity_length
out_laser = IMC_model.run(Xaxis('l1.f', 'lin', 0, 2*resonance_freq, 1000))
fig, ax = plt.subplots(1, 2, figsize=(10, 4))
ax[0].semilogy(out_tuning.x1, out_tuning['power_reflected'], label='reflected')
ax[0].semilogy(out_tuning.x1, out_tuning['power_circulating'], label='circulating')
ax[0].semilogy(out_tuning.x1, out_tuning['power_transmitted'], label='transmitted')
ax[0].set_xlabel(r'IMC3 tuning [$\degree$]')
ax[0].set_ylabel('Power [W]')
ax[0].legend()
ax[1].semilogy(out_laser.x1, out_laser['power_reflected'], label='reflected')
ax[1].semilogy(out_laser.x1, out_laser['power_circulating'], label='circulating')
ax[1].semilogy(out_laser.x1, out_laser['power_transmitted'], label='transmitted')
ax[1].set_xlabel('frequency offset [Hz]')
ax[1].set_ylabel('Power [W]')
ax[1].legend()
plt.show()