rydiqule.doppler_exact.solve_doppler_analytic¶
- rydiqule.doppler_exact.solve_doppler_analytic(sensor: Sensor, doppler_mesh_method: UniformMethod | IsoPopMethod | SplitMethod | DirectMethod | None = None, analytic_axis: int | None = None, n_slices: int | None = None, rtol: float = 1e-05, atol: float = 1e-09) Solution[source]¶
Solves a sensor in steady state in the presence of doppler broadening, with one dimension analytically averaged.
If the broadening is 1 dimensional, this function will solve analytically. If the broadening is 2 or 3 dimensional, this function will average analytically over the specified axis and numerically over the remaining axes.
This function uses the method outlined in Ref [1] for the analytic dimension.
This solver is considered more accurate than
solve_steady_state()since it replaces direct sampling and solving of the velocity classes with a few tensor inversions and calculation of the numerical prefactor. This also leads to faster solves, approximately dictated by the ratio of samples along the doppler axis relative to the other parameter dimensions. Additionally, in sensors with 2 or 3 dimensional doppler broadening, this solver effectively reduces the dimension to 1 or 2, respectively, leading to faster solves.If the sensor contains couplings with
time_dependence, this solver will add those couplings at their \(t=0\) value to the steady-state hamiltonian to solve.If insufficient system memory is available to solve the system in a single call, system is broken into “slices” of manageable memory footprint which are solved individually. This slicing behavior does not affect the result.
- Parameters:
sensor (
Sensor) – The sensor for which the solution will be calculated. It must define 1 and only 1 dimension of doppler shifts (ie one or more couplings withkvecwith non-zero values on the same dimension).doppler_mesh_method (dict, optional) – If not
None, should be a dictionary of meshing parameters to be passed todoppler_classes(). Seedoppler_classes()for more information on supported methods and arguments. IfNone, uses the default doppler meshing. Default is `None.analytic_axis (int, optional) – Specifies over which axis the solver will average analytically. Defaults to the first nonzero axis.
n_slices (int or None, optional) – How many sets of equations to break the full equations into. The actual number of slices will be the largest between this value and the minimum number of slices to solve the system without a memory error. If
None, uses the minimum number of slices to solve the system without a memory error. Detailed information about slicing behavior can be found inmatrix_slice(). Default isNone.rtol (float, optional) – Relative tolerance parameter for checking 0-eigenvalues when calculating the doppler prefactor. Passed to
isclose(). Defaults to 1e-5.atol (float, optional) – Absolute tolerance parameter for checking 0-eigenvalues when calculating the doppler prefactor. Passed to
isclose(). Defaults to 1e-9.
- Returns:
An object containing the solution and related information.
- Return type:
References