Python Configuration Classes

DisortFlags

flags = disortpp.DisortFlags()

All members are read/write attributes:

Attribute

Type

Description

use_user_tau

bool

Return output at user-specified optical depths.

use_user_mu

bool

Return intensities at user-specified polar angles.

ibcnd

BoundaryConditionType

Boundary condition type (General or Special).

use_lambertian_surface

bool

Use Lambertian surface reflection.

use_thermal_emission

bool

Include thermal emission.

use_spherical_beam

bool

Pseudo-spherical beam geometry.

comp_only_fluxes

bool

Compute only fluxes (skip angular intensities).

brdf_type

BrdfType

BRDF model for the surface.

intensity_corr_buras

bool

Buras & Emde intensity correction.

intensity_corr_nakajima

bool

Nakajima & Tanaka intensity correction.

use_delta_m_plus

bool

Use Delta-M+ scaling.

use_diffusion_lower_bc

bool

Use the diffusion approximation as the lower boundary condition (for stellar atmospheres). Sets \(I(\mu) = B(T_\mathrm{bottom}) + \mu\,\mathrm{d}B/\mathrm{d}\tau\). Requires use_thermal_emission = True.

output_fourier_expansion

bool

Return Fourier expansion of intensity.

index_from_bottom

bool

If True, user arrays are indexed from BOA (index 0) to TOA. By default, arrays are indexed from TOA to BOA. When enabled, input and output arrays are automatically reversed by the solver.

BoundaryConditions

bc = disortpp.BoundaryConditions()

Attribute

Type

Description

direct_beam_flux

float

Incident parallel beam intensity.

direct_beam_mu

float

Cosine of beam polar angle.

direct_beam_phi

float

Azimuth angle of beam [deg].

isotropic_flux_top

float

Isotropic illumination at top.

isotropic_flux_bottom

float

Isotropic illumination at bottom.

temperature_top

float

Top boundary temperature [K].

temperature_bottom

float

Bottom boundary temperature [K].

emissivity_top

float

Top boundary emissivity.

surface_albedo

float

Lambertian surface albedo.

BRDF specifications

rpv = disortpp.RpvBrdfSpec()           # rho0, k, theta, sigma, t1, t2, scale
ambrals = disortpp.AmbralsBrdfSpec()   # iso, vol, geo
cox_munk = disortpp.CoxMunkBrdfSpec()  # u10, pcl, xsal, refractive_index, do_shadow
hapke = disortpp.HapkeBrdfSpec()       # b0, hh, w

brdf = disortpp.BrdfSpecification()
brdf.set_rpv(rpv)
brdf.set_ambrals(ambrals)
brdf.set_cox_munk(cox_munk)
brdf.set_hapke(hapke)

All BRDF struct members are accessible as read/write attributes. See the C++ BRDF documentation for details on each parameter.

DisortConfig

Main configuration class for the general solver.

# Construct with dimensions
cfg = disortpp.DisortConfig(num_layers, num_streams)
cfg = disortpp.DisortConfig(num_layers, num_streams, num_phase_func_moments)

# Or default-construct and set dimensions manually
cfg = disortpp.DisortConfig()
cfg.num_layers = 4
cfg.num_streams = 16

Nested structs (read/write):

  • cfg.flagsDisortFlags

  • cfg.bcBoundaryConditions

  • cfg.brdfBrdfSpecification

Dimension attributes:

  • num_layers, num_streams, num_phase_func_moments

  • num_user_tau, num_user_mu, num_phi

  • num_phase_func_angles

Physical parameters:

  • wavenumber_low, wavenumber_high (float)

  • accuracy_fourier_series (float)

  • bottom_radius (float)

Array attributes (set as Python lists after calling allocate()):

  • delta_tau – Layer optical depths.

  • single_scat_albedo – Layer single-scattering albedos.

  • phase_function_moments – Nested list of Legendre moments.

  • temperature – Level temperatures.

  • level_altitudes – Level altitudes.

  • tau_user – User optical depths.

  • mu_user – User polar angle cosines.

  • phi_user – User azimuthal angles [deg].

  • mu_phase_function – Scattering angle grid.

  • phase_function – Tabulated phase function values.

Methods:

cfg.nmom_nstr()

Returns max(num_phase_func_moments, num_streams).

cfg.allocate()

Allocate internal arrays. Call after setting all dimensions and flags.

cfg.validate()

Validate the configuration. Raises ValueError on invalid input.

cfg.set_henyey_greenstein(g, lc=-1)

Fill Henyey-Greenstein phase function moments (\(\chi_k = g^k\)). Set lc to fill only a specific layer (0-based), or -1 for all layers.

cfg.set_isotropic(lc=-1)

Set isotropic scattering.

cfg.set_rayleigh(lc=-1)

Set Rayleigh scattering.

cfg.set_haze_garcia_siewert(lc=-1)

Set Haze-L phase function.

cfg.set_cloud_garcia_siewert(lc=-1)

Set Cloud C.1 phase function.

cfg.set_phase_function(type, g=0.0, lc=-1)

Set phase function by enum type.

DisortFluxConfig

Lightweight configuration for the flux-only solver.

cfg = disortpp.DisortFluxConfig(num_layers, num_streams)

All fields are flat attributes (no nested structs):

Dimensions: num_layers, num_streams, num_phase_func_moments

Flags: use_thermal_emission, use_spherical_beam, use_delta_m_plus, use_diffusion_lower_bc, index_from_bottom

Boundary conditions: direct_beam_flux, direct_beam_mu, isotropic_flux_top, isotropic_flux_bottom, temperature_top, temperature_bottom, emissivity_top, surface_albedo

Physical parameters: wavenumber_low, wavenumber_high, bottom_radius

Arrays: delta_tau, single_scat_albedo, phase_function_moments, temperature, level_altitudes

Methods: Same as DisortConfig: nmom_nstr(), allocate(), validate(), set_henyey_greenstein(), set_isotropic(), set_rayleigh(), set_haze_garcia_siewert(), set_cloud_garcia_siewert(), set_phase_function().