from pylgs.all import *Sodium 330 nm LGS
A polychromatic sodium LGS excited by 330 nm light
Define a LGS system pumped by 330 nm light:
lgs = LGSSystem(
'Na330',
{
'IntensitySI1': 5000.,
'BFieldG': 0.5,
'EllipticityDegrees1': 45.,
'PolarizationAngleDegrees1': 0,
'DetuningHz1': 1.0832e9,
'LaserWidthHz1': 10.0e6,
'MagneticZenithDegrees': 45.,
'MagneticAzimuthDegrees': 45.,
'SDampingCollisionRatePerS': 4081.63,
'BeamTransitRatePerS': 131.944,
'VccRatePerS': 28571.,
'TemperatureK': 185.,
'RecoilParameter': 1.
}
)The system is made up of 774 density-matrix elements describing 7 atomic levels:
lgs.level_population.rangeLevel(7)
<xarray.DataArray 'XarrayVectorSpace' (Level: 7)> Size: 56B array([0., 0., 0., 0., 0., 0., 0.]) Coordinates: * Level (Level) <U16 448B '3P<sub>3/2</sub>' ... '3D<sub>3/2</sub>'
HTML(', '.join(lgs.level_population.range.coords['Level'].data))
3P3/2, 3S1/2, 3D5/2, 4S1/2, 4P3/2, 3P1/2, 3D3/2
Steady-state model
Adaptively refine velocity groups
Build a steady-state model with adaptively refined velocity groups:
model, sol = lgs.adaptive_stationary_model({}, rtol=1e-2)Solve for the density matrix. There are 77 velocity groups in the model:
sol = model.solve()
sol∅ ⛒ Atomic velocity(106) ⛒ Density matrix(774)
<xarray.DataArray (Atomic velocity: 106, Density matrix: 774)> Size: 656kB
array([[ 1.16073479e-05, 1.29066164e-06, -1.29057180e-06, ...,
-1.61010818e-09, -2.94902464e-12, 9.76750757e-12],
[ 5.73120609e-05, 6.37263788e-06, -6.37218417e-06, ...,
-8.88427925e-09, -1.81878127e-11, 5.56622776e-11],
[ 2.36938318e-04, 2.63453439e-05, -2.63434049e-05, ...,
-4.16189579e-08, -9.65707159e-11, 2.73939403e-10],
...,
[ 7.97090203e-05, 8.93037052e-06, -8.92552198e-06, ...,
1.37548468e-08, -3.08409859e-11, 8.88953999e-11],
[ 5.71475479e-05, 6.38820606e-06, -6.38582196e-06, ...,
8.93664238e-09, -1.82708056e-11, 5.58317771e-11],
[ 1.15860032e-05, 1.29318916e-06, -1.29284466e-06, ...,
1.61518494e-09, -2.95482171e-12, 9.77938575e-12]],
shape=(106, 774))
Coordinates:
* Atomic velocity (Atomic velocity) float64 848B -2.85 -2.55 ... 2.55 2.85
* Density matrix (Density matrix) <U68 211kB 'ρ<sub>Re, (3S<sub>1/2</sub>...Plot the total return flux for each transition as a bar chart:
model.total_flux(sol).array<xarray.DataArray (Sum: 1, Transition: 11)> Size: 88B
array([[ 52.76085958, 106.35513199, 64.56494505, 49.78030685,
3.06319183, 99.56061371, 0.58224987, 3.38556015,
155.89499459, 3.4505648 , 3.24447093]])
Coordinates:
* Sum (Sum) <U3 12B 'Sum'
* Transition (Transition) <U33 1kB '3P<sub>1/2</sub>→3S<sub>1/2</sub>' ......
Attributes:
long_name: Flux
units: photon/atom/s/srmodel.total_flux(sol).visualize()Plot the flux as a function of velocity:
model.flux_distribution(sol).visualize(xaxis_range=(-1, 2))Transient dynamics model
Build a model for the transient dynamics:
model = lgs.instationary_model(
vg=model.data['velocity_groups'],
T=1e-6,
num_values=101
)Set tolerances for the BDF solver:
pymor.basic.set_defaults({
'pylgs.pymor.timestepping.cvode_solver_options.cvode_bdf_atol': 1e-6,
'pylgs.pymor.timestepping.cvode_solver_options.cvode_bdf_rtol': 1e-5,
})Solve for the density matrix as a function of time:
sol = model.solve()Plot the return flux for each transition:
model.total_flux(sol).visualize()Animate the level population distribution as a function of time:
model.level_population_distribution(sol).visualize(xaxis_range=(-.25, 2), yaxis_range=(0, .045))