Python Solvers

DisortSolver

General-purpose radiative transfer solver.

solver = disortpp.DisortSolver()
result = solver.solve(cfg)   # cfg is a DisortConfig
solver.solve(config)

Solve the radiative transfer problem.

Parameters:

configDisortConfig instance. May be modified by the solver.

Returns:

DisortResult with fluxes and (optionally) intensities.

Raises:

ValueError – if the configuration is invalid.

The GIL is released during the C++ computation, allowing other Python threads to run.

DisortFluxSolver

Flux-only solver with compile-time stream count. Individual classes are available for each supported stream count:

solver = disortpp.DisortFluxSolver4()    # 4 streams
solver = disortpp.DisortFluxSolver6()    # 6 streams
solver = disortpp.DisortFluxSolver8()    # 8 streams
solver = disortpp.DisortFluxSolver10()   # 10 streams
solver = disortpp.DisortFluxSolver12()   # 12 streams
solver = disortpp.DisortFluxSolver14()   # 14 streams
solver = disortpp.DisortFluxSolver16()   # 16 streams
solver = disortpp.DisortFluxSolver32()   # 32 streams
solver = disortpp.DisortFluxSolver64()   # 64 streams
solver.solve(config)

Solve for fluxes only.

Parameters:

configDisortFluxConfig instance. Not modified.

Returns:

FluxResult with fluxes at all layer boundaries.

create_flux_solver

Factory function that creates the appropriate DisortFluxSolver for the given stream count.

solver = disortpp.create_flux_solver(nstr)
disortpp.create_flux_solver(nstr)
Parameters:

nstr – Number of streams (4, 6, 8, 10, 12, 14, 16, 32, or 64).

Returns:

A DisortFluxSolverN instance.

Raises:

ValueError – if nstr is not a supported value.

Example:

cfg = disortpp.DisortFluxConfig(6, 16)
cfg.direct_beam_flux = np.pi
cfg.direct_beam_mu = 0.5
cfg.surface_albedo = 0.1
cfg.allocate()

cfg.delta_tau = [0.1, 0.2, 0.5, 1.0, 2.0, 5.0]
cfg.single_scat_albedo = [0.9] * 6
cfg.set_henyey_greenstein(g=0.8)

solver = disortpp.create_flux_solver(16)
result = solver.solve(cfg)

flux_up = np.array(result.flux_up)