Laser Cavity Stability and the Fundamental Gaussian Mode#

This tutorial builds a two-mirror optical resonator with physicskit.optics.ray, checks its stability against the standard \(g\)-parameter criterion, and then finds its self-consistent fundamental Gaussian mode with physicskit.optics.gaussian.

Building the cavity round trip#

A resonator formed by two spherical mirrors of radius \(R_1, R_2\) separated by length \(L\) is described, one round trip at a time, by cascading a reflection off each mirror with a free-space propagation between them. cavity_round_trip_matrix() multiplies the element list in order (rightmost element applied first), so listing [M1, d1, M2, d2] traces a ray starting just after mirror 1, to mirror 2, and back to mirror 1:

import numpy as np
from physicskit.optics.ray import (
    OpticalElement, spherical_mirror, free_space,
    cavity_round_trip_matrix, cavity_stability,
)

R1, R2, L = 2.0, 2.0, 1.0

elements = [
    OpticalElement(spherical_mirror(R1), name="M1"),
    OpticalElement(free_space(L), name="d1", length=L),
    OpticalElement(spherical_mirror(R2), name="M2"),
    OpticalElement(free_space(L), name="d2", length=L),
]
M = cavity_round_trip_matrix(elements)
print(M)
# [[-1.  1.]
#  [-1.  0.]]

The stability criterion#

A resonator is stable – rays stay bounded after arbitrarily many round trips – exactly when \(|A+D| \le 2\), checked directly by cavity_stability():

print(cavity_stability(M))  # True

This is the same condition usually written in terms of the dimensionless \(g\)-parameters \(g_i = 1 - L/R_i\), stable when \(0 \le g_1 g_2 \le 1\):

g1, g2 = 1 - L / R1, 1 - L / R2
print(g1 * g2)  # 0.25 -- inside [0, 1], confirming the same conclusion

Scanning the mirror separation L from just above 0 out past the symmetric cavity’s confocal-adjacent limit \(L = 2R\) shows exactly where the resonator stops being stable:

def is_stable(L):
    els = [
        OpticalElement(spherical_mirror(R1)),
        OpticalElement(free_space(L), length=L),
        OpticalElement(spherical_mirror(R2)),
        OpticalElement(free_space(L), length=L),
    ]
    return cavity_stability(cavity_round_trip_matrix(els))

print(is_stable(3.5), is_stable(4.5))  # True False

For this symmetric cavity \(g_1g_2 = (1-L/R)^2\) crosses 1 exactly at \(L = 2R = 4.0\), matching the True/False boundary found above.

The self-consistent Gaussian mode#

The fundamental mode of a stable cavity is the Gaussian beam whose complex parameter \(q\) reproduces itself after one round trip, \(q = (Aq+B)/(Cq+D)\), i.e. the fixed point of propagate_q(). Solving the resulting quadratic \(Cq^2 + (D-A)q - B = 0\) and keeping the root with \(\operatorname{Im}(q) > 0\) (a physical beam, not its mirror image) gives the mode at the reference plane just after mirror 1:

from physicskit.optics.gaussian import q_to_beam_params

A, B, C, D = M[0, 0], M[0, 1], M[1, 0], M[1, 1]
roots = np.roots([C, D - A, -B])
q = roots[roots.imag > 0][0]
print(q)  # (0.5+0.866...j)

wavelength = 1.064e-3  # Nd:YAG, same length units as R1, R2, L
w, R = q_to_beam_params(q, wavelength)
print(w, R)  # ~0.0198  2.0

The recovered radius of curvature, \(R \approx 2.0\), exactly matches mirror 1’s own radius – exactly what “self-consistent” means: the wavefront leaving mirror 1 has the same curvature as mirror 1 itself, so it retraces its path on reflection.

See Also#