Dynamic simulation¶

class
DynamicSimulation
(max_time_steps)¶ DynamicSimulation is the interface class used for running fiber amplifier simulations with arbitrarily varying input powers. It also supports reflective boundary conditions and thus modeling of simple CW, gainswitched or Qswitched fiber lasers. With constant input powers, the result converges to the steady state simulation result. Setting multiple ion populations is also supported. The class defines the fiber, boundary conditions and optical channels used in the simulation.

__init__
(max_time_steps)¶ Initialize self. See help(type(self)) for accurate signature.

use_python_backend
()¶ Sets the simulation to use the slow Python finite difference solver. Using one of the faster solvers instead is highly recommended.

use_cpp_backend
()¶ Sets the simulation to use the C++ backend if available.

use_pythran_backend
()¶ Sets the simulation to use the pythran backend if available.

use_numba_backend
()¶ Sets the simulation to use the numba backend if available.

get_time_coordinates
(fiber, z_nodes, dt='auto')¶ Returns the time coordinates used in the simulation. Useful for setting timevarying input powers.
Parameters:  fiber (Subclass of FiberBase) – The fiber used in the simulation
 z_nodes (int) – Number of spatial nodes used in the simulation.
 dt (float) – Time step size. The ‘auto’ option uses realistic time step calculated from the Courant condition based on the speed of light in glass and the spatial step size. Larger (and physically unrealistic) time steps can be used to drastically speed up the convergence of steady state simulations.
Returns: Time coordinate array
Return type: numpy float array

add_forward_signal
(wl, input_power, wl_bandwidth=0.0, mode_shape_parameters=None, label='', reflection_target='', reflectance=0)¶ Adds a new forwardpropagating signal to the simulation.
Parameters:  wl (float) – Wavelength of the signal
 input_power (float or numpy array) – Input power of the signal at the beginning of the fiber
 wl_bandwidth (float) – Wavelength bandwidth of the channel. Finite bandwidth means including ASE.
 mode_shape_parameters (dict) – Defines the mode field shape. Allowed keyvalue pairs: functional_form > one of [‘bessel’, ‘gaussian’, ‘tophat’] mode_diameter > float overlaps > list of precalculated overlaps between the channel and the ion populations
 label (str) – Optional label for the channel (required to receive reflected power from another channel)
 reflection_target (str) – Label of the channel receiving reflection from this channel
 reflectance – Reflectance R [0,1] from this channel to the target channel

add_backward_signal
(wl, input_power, wl_bandwidth=0.0, mode_shape_parameters=None, label='', reflection_target='', reflectance=0)¶ Adds a new backwardpropagating signal to the simulation.
Parameters:  wl (float) – Wavelength of the signal
 input_power (float or numpy array) – Input power of the signal at the beginning of the fiber
 wl_bandwidth (float) – Wavelength bandwidth of the channel. Finite bandwidth means including ASE.
 mode_shape_parameters (dict) – Defines the mode field shape. Allowed keyvalue pairs: functional_form > one of [‘bessel’, ‘gaussian’, ‘tophat’] mode_diameter > float overlaps > list of precalculated overlaps between the channel and the ion populations
 label (str) – Optional label for the channel (required to receive reflected power from another channel)
 reflection_target (str) – Label of the channel receiving reflection from this channel
 reflectance – Reflectance R [0,1] from this channel to the target channel

add_forward_pump
(wl, input_power, wl_bandwidth=0.0, mode_shape_parameters=None, label='', reflection_target='', reflectance=0)¶ Adds a new forwardpropagating pump to the simulation.
Parameters:  wl (float) – Wavelength of the signal
 input_power (float or numpy array) – Input power of the signal at the beginning of the fiber
 wl_bandwidth (float) – Wavelength bandwidth of the channel. Finite bandwidth means including ASE.
 mode_shape_parameters (dict) – Defines the mode field shape. Allowed keyvalue pairs: functional_form > one of [‘bessel’, ‘gaussian’, ‘tophat’] mode_diameter > float overlaps > list of precalculated overlaps between the channel and the ion populations
 label (str) – Optional label for the channel (required to receive reflected power from another channel)
 reflection_target (str) – Label of the channel receiving reflection from this channel
 reflectance – Reflectance R [0,1] from this channel to the target channel

add_backward_pump
(wl, input_power, wl_bandwidth=0.0, mode_shape_parameters=None, label='', reflection_target='', reflectance=0)¶ Adds a new backwardpropagating pump to the simulation.
Parameters:  wl (float) – Wavelength of the signal
 input_power (float or numpy array) – Input power of the signal at the beginning of the fiber
 wl_bandwidth (float) – Wavelength bandwidth of the channel. Finite bandwidth means including ASE.
 mode_shape_parameters (dict) – Defines the mode field shape. Allowed keyvalue pairs: functional_form > one of [‘bessel’, ‘gaussian’, ‘tophat’] mode_diameter > float overlaps > list of precalculated overlaps between the channel and the ion populations
 label (str) – Optional label for the channel (required to receive reflected power from another channel)
 reflection_target (str) – Label of the channel receiving reflection from this channel
 reflectance – Reflectance R [0,1] from this channel to the target channel

add_ase
(wl_start, wl_end, n_bins)¶ Adds amplified spontaneous emission (ASE) channels. Using more channels improves accuracy, but incurs a heavier computational cost to the simulation.
Parameters:  wl_start (float) – The shorted wavelength of the ASE band
 wl_end (float) – The longest wavelength of the ASE band
 n_bins (positive int) – The number of simulated ASE channels.

run
(z_nodes, dt='auto', P=None, N2=None, stop_at_steady_state=False, steady_state_tolerance=0.0001, convergence_checking_interval=10000)¶ Runs the simulation.
Parameters:  z_nodes (int) – Number of spatial nodes used in the simulation.
 dt (float or str) – Time step size. The ‘auto’ option uses realistic time step calculated from the Courant condition based on the speed of light in glass and the spatial step size. Larger (and physically unrealistic) time steps can be used to drastically speed up the convergence of steady state simulations.
 P (numpy float array) – Preexisting powers in the fiber, useful when chaining multiple simulations.
 N2 (numpy float array) – Preexisting upper state excitation in the fiber, useful when chaining multiple simulations.
 stop_at_steady_state (bool) – If this flag parameter is set to True, the simulation stops when the excitation reaches a steady state (does not work if the excitation fluctuates at a specific frequency).
 steady_state_tolerance (float) – Sets the relative change in excitation that is used to detect the steady state.
 convergence_checking_interval (positive int) – If aiming for steady state, the simulation checks convergence always after this number of iterations and prints the average excitation. In truly dynamic simulations, only prints the excitation.
