Skip to content

Model Components

This page describes the main interchangeable building blocks used by the simulation controller.

Grid interface

The grid layer is defined by the SimulationGrid2D protocol. Concrete grids must provide:

  • domain sizes and resolution: nx, ny, lx, ly
  • real-space coordinates: X, Y
  • spacings: dx, dy
  • spectral coordinates: kx, ky, KX, KY, k_squared

Supported grid types

grid_type Meaning
periodic periodic spatial topology, natural for FFT-based methods
closed-interval bounded interval with finite-difference-oriented treatment

Boundary-condition wrapper

BoundaryCondition wraps the boundary absorption strategy around each solver step.

Supported absorption strategies

absorption Meaning
no-absorption no damping near the boundary
mask multiplicative damping mask applied after each step near the edges; its per-step multiplier is exp(-strength * profile * dt / 2), the exact step of the cap potential with the same strength. Applied as a separate step, it limits the solver to first order in time.
cap complex absorbing potential added near the edges; strength scales its imaginary component

Potential factory

Potentials are chosen by cfg.potential.potential_type and built as spatial fields on the active grid.

Supported potential types

potential_type Meaning
zero no external potential
double-well-supergaussian structured two-well profile with configurable centers, amplitudes, widths, and order

Laser interface and factory

Pump profiles share the AbstractLaser contract:

  • accept LaserParameters and grid coordinates
  • compute a pump field through spatial, temporal, and amplitude factors
  • return the full pump power field at time t

Supported laser types

laser_type Meaning
uniform homogeneous continuous pump
continuous-gaussian localized Gaussian continuous pump
continuous-exp localized continuous pump with exponential radial decay
continuous-exp-length localized continuous pump with a length-consistent exponential radial decay
pulse-gaussian repeated Gaussian pulses with Gaussian spatial profile; the first peak is phase-shifted after delay, and per-pulse strength ramps from P0 toward Pmax

For pulse-gaussian, the power_definition field decides what that strength means. peak_amplitude is the legacy interpretation: P0 is the local peak source density at the Gaussian centre. pulse_energy normalizes the spatial and temporal envelopes so that P0 is the integrated dose of one pulse over the simulation domain and pulse duration. The latter is the appropriate choice when comparing different spot sizes.

continuous-exp is retained as the legacy, Phoenix-compatible profile exp(-r / sigma_space**2). New configurations requiring sigma_space to be the 1/e radial decay length should use continuous-exp-length, which evaluates exp(-r / sigma_space).

Laser composition modes

mode Meaning
single build one pump from cfg.laser
multiple build a list of pumps from an external YAML file

Reservoir interface and factory

Reservoir models share the AbstractReservoir contract:

  • store the current reservoir state
  • expose the active density that couples to the condensate
  • compute reservoir derivatives
  • advance the reservoir in time
  • optionally expose result nodes for storage and visualization

Supported reservoir types

reservoir_type Meaning
single one effective active reservoir
double inactive plus active reservoir with transfer between them
quadratic-double inactive reservoir directly fed by the pump and active reservoir fed by quadratic transfer kappa*nI^2

In quadratic-double, the active density exposed to the condensate is nR. The inactive density nI is useful for pulsed excitation because it can retain memory of recent pulses before feeding the active reservoir.