ExamplesMeep Examples
Multilevel Atom Laser
Simulate laser dynamics in a multilevel atom gain medium inside a cavity
Multilevel Atom Laser Simulation
This example simulates laser dynamics in a multilevel atom gain medium inside a cavity using Meep's saturable gain model.
Overview
Multilevel atom simulations model:
- Laser dynamics: Gain, saturation, and mode competition
- Cavity QED: Light-matter interaction in resonators
- Amplified spontaneous emission: Noise properties
- Nonlinear optics: Gain-induced nonlinearities
Simulation Parameters
| Parameter | Default Value | Description |
|---|---|---|
resolution | 400 | Pixels per unit length |
ncav | 1.5 | Cavity refractive index |
Lcav | 1 | Cavity length |
omega_a | 40 | Transition frequency (SALT) |
gamma_perp | 4 | HWHM linewidth |
N0 | 37 | Initial population density |
Rp | 0.0051 | Pumping rate |
Physical Setup
- 1D cavity: Dielectric slab with gain medium
- Two-level gain: Lorentzian lineshape with pumping
- PML boundary: One end open for output
- Field initialization: Seed for lasing
The SALT (steady-state ab initio laser theory) parameters are converted to Meep units for the simulation.
Python Code
"""
Multilevel Atom Laser Simulation with OptixLog Integration
Simulates laser dynamics in a multilevel atom gain medium
inside a cavity using MEEP's saturable gain model.
"""
import os
import math
import optixlog
import meep as mp
import matplotlib
matplotlib.use("agg")
import matplotlib.pyplot as plt
import numpy as np
api_key = os.getenv("OPTIX_API_KEY", "")
project_name = os.getenv("OPTIX_PROJECT", "MeepExamples")
def main():
if not optixlog.is_master_process():
return
try:
client = optixlog.init(
api_key=api_key,
project=project_name,
run_name="multilevel_atom_laser",
config={"simulation_type": "laser_dynamics"},
create_project_if_not_exists=True
)
# Simulation parameters
resolution = 400
ncav = 1.5
Lcav = 1
dpad = 1
dpml = 1
sz = Lcav + dpad + dpml
# Gain parameters
omega_a = 40
freq_21 = omega_a / (2 * math.pi)
gamma_perp = 4
gamma_21 = (2 * gamma_perp) / (2 * math.pi)
theta = 1
sigma_21 = 2 * theta * theta * omega_a
rate_21 = 0.005
N0 = 37
Rp = 0.0051
client.log(step=0, resolution=resolution, emission_frequency=freq_21, pumping_rate=Rp)
cell_size = mp.Vector3(z=sz)
pml_layers = [mp.PML(dpml, side=mp.High)]
transitions = [
mp.Transition(1, 2, pumping_rate=Rp, frequency=freq_21, gamma=gamma_21, sigma_diag=mp.Vector3(sigma_21, 0, 0)),
mp.Transition(2, 1, transition_rate=rate_21),
]
ml_atom = mp.MultilevelAtom(sigma=1, transitions=transitions, initial_populations=[N0])
two_level = mp.Medium(index=ncav, E_susceptibilities=[ml_atom])
geometry = [
mp.Block(center=mp.Vector3(z=-0.5 * sz + 0.5 * Lcav), size=mp.Vector3(mp.inf, mp.inf, Lcav), material=two_level)
]
sim = mp.Simulation(cell_size=cell_size, resolution=resolution, boundary_layers=pml_layers, geometry=geometry, dimensions=1)
sim.init_sim()
def field_func(p):
return 1 if p.z == -0.5 * sz + 0.5 * Lcav else 0
sim.fields.initialize_field(mp.Ex, field_func)
endt = 7000
sim.run(until=endt)
client.log(step=1, simulation_completed=True)
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
main()Results and Analysis
Laser Dynamics
The simulation captures:
- Transient buildup: Field grows from noise
- Saturation: Gain depletion limits amplitude
- Steady state: Continuous wave operation
OptixLog Metrics
emission_frequency: Lasing frequencysteady_state_amplitude: Final field amplitudepumping_rate: Pump strength
Related Examples
- Metal Cavity LDOS - Cavity enhancement
- Stochastic Emitter - Random sources