cppdisort

class pyarts3.arts.cppdisort(*args, **kwargs)

A DISORT object.

This offers a low level interface to the DISORT solver. See DisortSettings for a higher level interface. Especially, see the workspace variables for the type as the workspace methods that operate on them explains the interface on a higher level.

The implementation is based on the Pythonic-DISORT implementation, which is a from scratch reimplementation of DISORT in Python. The interface here is mostly mimicking the Pythonic-DISORT interface, with some exceptions to improve performance and usability.

The two main differences are that we use a custom Legendre-Gauss quadrature implementation, that we use the BandMatrix LAPACK solver for the left-hand side of the linear system, and that we use a pure real eigenvalue solver for the matrix decomposition that’s been ported and optimized in C++.

Warning

The DISORT implementation is still being tested. Initial results look promising, but please report any issues you find. Initial tests show that the implementation is about 6x faster than CDISORT. We do not have numbers on the performance compared to Pythonic-DISORT because Pythonic-DISORT is not optimized for speed.

Warning

The internals of this implementation calls LAPACK routines. Please ensure that your LAPACK installation is either single threaded or uses OpenMP. Mixing multiple threading implementations will lead to significant slowdowns (or a complete stall of the program).

The relevant references are:

  • Pythonic-DISORT: Ho [10]

  • Original DISORT: Stamnes et al. [33]

  • Legendre-Gauss quadrature: Bogaert [4]

  • BandMatrix solver: Barrett et al. [3]

  • Real eigenvalue solver (original sources, the executed code is ported to C++): Buras et al. [6], Dongarra and Moler [7], Parlett and Reinsch [24], Mitchell [21]

Overview

Method

flux()

Compute the flux

Method

pydisort_flux_down()

Compute the downward flux

Method

pydisort_flux_up()

Compute the upward flux

Method

pydisort_u()

Compute the intensity

Method

u()

Compute the intensity

Operator

__eq__()

Return self==value.

Operator

__format__()

__format__(self, arg: str, /) -> str

Operator

__ge__()

Return self>=value.

Operator

__getstate__()

Helper for pickle.

Operator

__gt__()

Return self>value.

Operator

__hash__()

Return hash(self).

Operator

__init__()

Overloaded function.

Operator

__le__()

Return self<=value.

Operator

__lt__()

Return self<value.

Operator

__ne__()

Return self!=value.

Operator

__repr__()

__repr__(self) -> str

Operator

__str__()

__str__(self) -> str

Constructors

__init__(self, tau_arr: pyarts3.arts.AscendingGrid, omega_arr: pyarts3.arts.Vector, NQuad: int, Leg_coeffs_all: pyarts3.arts.Matrix, mu0: float, I0: float, phi0: float, NLeg: int | None = None, NFourier: int | None = None, b_pos: pyarts3.arts.Matrix | None = None, b_neg: pyarts3.arts.Matrix | None = None, f_arr: pyarts3.arts.Vector | None = None, BDRF_Fourier_modes: pyarts3.arts.disort.ArrayOfBDRF = pyarts3.arts.disort.ArrayOfBDRF([]), s_poly_coeffs: pyarts3.arts.Matrix | None = None) None
__init__(self) None
__init__(self, arg: pyarts3.arts.cppdisort) None

Overloaded function.

  1. __init__(self, tau_arr: pyarts3.arts.AscendingGrid, omega_arr: pyarts3.arts.Vector, NQuad: int, Leg_coeffs_all: pyarts3.arts.Matrix, mu0: float, I0: float, phi0: float, NLeg: int | None = None, NFourier: int | None = None, b_pos: pyarts3.arts.Matrix | None = None, b_neg: pyarts3.arts.Matrix | None = None, f_arr: pyarts3.arts.Vector | None = None, BDRF_Fourier_modes: pyarts3.arts.disort.ArrayOfBDRF = pyarts3.arts.disort.ArrayOfBDRF([]), s_poly_coeffs: pyarts3.arts.Matrix | None = None) -> None

Run disort, mostly mimicying the 0.7 Pythonic-DISORT interface.

  1. __init__(self) -> None

  2. __init__(self, arg: pyarts3.arts.cppdisort) -> None

Methods

flux(self, tau: pyarts3.arts.AscendingGrid) pyarts3.arts.Matrix

Compute the flux

pydisort_flux_down(self, tau: pyarts3.arts.Vector) pyarts3.arts.ArrayOfVector

Compute the downward flux

pydisort_flux_up(self, tau: pyarts3.arts.Vector) pyarts3.arts.Vector

Compute the upward flux

pydisort_u(self, tau: pyarts3.arts.Vector, phi: pyarts3.arts.Vector) pyarts3.arts.Tensor3

Compute the intensity

u(self, tau: pyarts3.arts.AscendingGrid, phi: pyarts3.arts.Vector) pyarts3.arts.Tensor3

Compute the intensity

Operators

__eq__(value, /)

Return self==value.

__format__(self, arg: str, /) str
__ge__(value, /)

Return self>=value.

__getstate__()

Helper for pickle.

__gt__(value, /)

Return self>value.

__hash__()

Return hash(self).

__init__(self, tau_arr: pyarts3.arts.AscendingGrid, omega_arr: pyarts3.arts.Vector, NQuad: int, Leg_coeffs_all: pyarts3.arts.Matrix, mu0: float, I0: float, phi0: float, NLeg: int | None = None, NFourier: int | None = None, b_pos: pyarts3.arts.Matrix | None = None, b_neg: pyarts3.arts.Matrix | None = None, f_arr: pyarts3.arts.Vector | None = None, BDRF_Fourier_modes: pyarts3.arts.disort.ArrayOfBDRF = pyarts3.arts.disort.ArrayOfBDRF([]), s_poly_coeffs: pyarts3.arts.Matrix | None = None) None
__init__(self) None
__init__(self, arg: pyarts3.arts.cppdisort) None

Overloaded function.

  1. __init__(self, tau_arr: pyarts3.arts.AscendingGrid, omega_arr: pyarts3.arts.Vector, NQuad: int, Leg_coeffs_all: pyarts3.arts.Matrix, mu0: float, I0: float, phi0: float, NLeg: int | None = None, NFourier: int | None = None, b_pos: pyarts3.arts.Matrix | None = None, b_neg: pyarts3.arts.Matrix | None = None, f_arr: pyarts3.arts.Vector | None = None, BDRF_Fourier_modes: pyarts3.arts.disort.ArrayOfBDRF = pyarts3.arts.disort.ArrayOfBDRF([]), s_poly_coeffs: pyarts3.arts.Matrix | None = None) -> None

Run disort, mostly mimicying the 0.7 Pythonic-DISORT interface.

  1. __init__(self) -> None

  2. __init__(self, arg: pyarts3.arts.cppdisort) -> None

__le__(value, /)

Return self<=value.

__lt__(value, /)

Return self<value.

__ne__(value, /)

Return self!=value.

__repr__(self) str
__str__(self) str