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:
config –
DisortConfiginstance. May be modified by the solver.- Returns:
DisortResultwith 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:
config –
DisortFluxConfiginstance. Not modified.- Returns:
FluxResultwith 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
DisortFluxSolverNinstance.- Raises:
ValueError – if
nstris 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)