PumpProperties
PumpProperties describes the pump contribution to the beta population
\(\beta\) during one simulation time step.
from HASEonGPU import PumpProperties
pump = PumpProperties(
spectralProperties=spectra,
intensity=16e3,
pumpSubsteps=100,
wavelength=940e-9,
radiusX=1.5,
radiusY=1.5,
exponent=40,
)
Inputs and Defaults
PumpProperties stores both generic pump information and the parameters used
by the built-in Gaussian pump solver. The direct constructor is flexible:
custom pump solvers do not need to provide Gaussian beam parameters.
intensityRequired by the constructor. Pump intensity \(I\) in
W / cm^2.spectralPropertiesorcrossSectionsRequired in practice. Pass a
SpectralDecompositionobject, or provide monochromaticcrossSectionAbsorptionandcrossSectionEmissionvalues.wavelengthPump wavelength \(\lambda\). It is required when monochromatic cross sections are supplied. With
spectralPropertiesorcrossSectionsit can be omitted; in that case the first absorption wavelength is used. ThePumpProperties.superGaussian(...)helper requireswavelengthexplicitly in its signature.radiusXRequired only for the built-in Gaussian pump solver and for Gaussian helper methods such as
intensityAt(...)andtoDict(...). It is the beam radius parameter used in \(I(x, y)\). Custom pump solvers can omit it.radiusYOptional. When omitted, it defaults to
radiusXfor the built-in Gaussian pump solver.exponentOptional. Super-Gaussian exponent in \(I(x, y)\). Defaults to
40.0.pumpSubstepsOptional. Number of time samples used by the default pump integration. Defaults to
100and must be at least 2 when supplied.solverOptional. Custom pump solver. If omitted,
Simulationuses the built-inBetaIntegrationGaussianSolver.
Construction Helpers
Use the direct constructor when you want to pass custom properties freely:
pump = PumpProperties(
spectralProperties=spectra,
intensity=16e3,
wavelength=940e-9,
radiusX=1.5,
myCustomVar=6,
)
Use superGaussian for an explicit beam-shaped setup:
pump = PumpProperties.superGaussian(
spectralProperties=spectra,
intensity=16e3,
wavelength=940e-9,
radiusX=1.5,
radiusY=1.5,
exponent=40,
backReflection=True,
reflectivity=1.0,
)
Default Pump Routine
If pump.solver is not set, Simulation uses
BetaIntegrationGaussianSolver. The default routine:
Reads the current
betaCellsarray, the point-wise \(\beta_i\), with shape(numberOfPoints, numberOfLevels).Evaluates the super-Gaussian intensity profile at every transverse topology point.
Propagates pump intensity \(I\) along the crystal levels.
Optionally applies a backward reflected pump contribution when
backReflectionis true.Integrates the local beta update \(d\beta/dt\) over
pumpSubsteps.Returns the beta array \(\beta\) after pumping.
The intensity profile \(I(x, y)\) is:
I(x, y) = intensity * exp(-r ** exponent)
r = sqrt(x**2 / radiusY**2 + y**2 / radiusX**2)
You can evaluate it directly:
intensities = pump.intensityAt(medium.topology.points)
Custom Pump Solvers
A pump solver is any object with a step(input, pump) method. It receives a
dictionary and the PumpProperties object. It must return updated beta
values \(\beta\) with the same shape as input["betaCell"].
class MyPumpSolver:
def step(self, input, pump):
beta = input["betaCell"]
scale = pump.getProperty("scale", 1.0)
return np.clip(beta + scale * 1e-3, 0.0, 1.0)
pump = PumpProperties(
spectralProperties=spectra,
intensity=16e3,
wavelength=940e-9,
radiusX=1.5,
radiusY=1.5,
solver=MyPumpSolver(),
scale=2.0,
)
The input dictionary currently contains:
"betaCell": current beta array \(\beta\)."_medium": theGainMedium."_timeStep": simulation time step."_constants": physical constants object."_substeps": optional substep override.
Properties and Utilities
Custom values are stored in customProperties and can be accessed in three
ways:
pump.getProperty("myCustomVar")
pump.withProperty("myCustomVar", 7)
pump.withProperties(myCustomVar=8, anotherValue=1.0)
Common attributes include:
crossSections/spectralPropertiesradiusXandradiusYexponentpumpDurationordurationtemporaryFluorescencebackReflectionreflectivityextractionsolver
toDict(timeFrame=None) produces the low-level pump dictionary used by the
default solver. modeDict() returns the pump mode flags for back reflection,
reflectivity, and extraction.