scopeinpython.rtmt_sb
Total thermal-infrared outgoing radiation and net radiation per
leaf/soil component (Stefan-Boltzmann, spectrally-integrated), given
already-solved leaf/soil temperatures. Direct, partial port of
SCOPEinR/R/RTMt.sb.R (get.RTMt.sb).
Note
Only the “SCOPE-lite” scalar-per-layer branch is ported (matches
every reference case built during this port). The full per-leaf-angle
(13, 36, nl) array branch and the obsdir (observation-direction
brightness temperature) branch are not ported.
RTMt (Stefan-Boltzmann variant): total thermal-infrared outgoing radiation and net radiation per leaf/soil component, given already-solved leaf/soil temperatures.
Direct, partial port of SCOPEinR::get.RTMt.sb (SCOPEinR/R/RTMt.sb.R)
– the spectrally-integrated (Stefan-Boltzmann) thermal RTM, cheaper than
the per-wavelength RTMt_planck.R (not ported). Leaf/soil temperatures
(Tcu/Tch/Tsu/Tsh) are inputs here, not solved for – that
is scopeinpython.ebal’s job (not yet ported).
Only the “SCOPE-lite” scalar-per-layer branch is ported (R’s
is.matrix(Hcsu3) == FALSE path, i.e. Tcu/Tch given as plain
length-nl vectors, one temperature per canopy layer – not the full
(13, 36, nl) per-leaf-angle-class array). This matches every
reference case built during this whole port (data.opts always sets
lite = 1) and the full-array branch has its own unresolved question
(see below), so is intentionally left for later.
Not ported: the ``obsdir`` (observation-direction brightness
temperature) branch. Not needed for scopeinpython.ebal’s
convergence loop, which only depends on the core net-radiation output
below.
A structural note, not a bug: in this formulation, the “direct thermal
emission” term Es_ is initialized to zero and never given a nonzero
seed anywhere in the recursion (unlike the analogous Es_/Esun_
in RTMo/RTMf, which are seeded from real solar irradiance) – so every
Xsd/R_sd-weighted term in the layer recursion below is always
exactly zero. Kept in the port for structural fidelity with R (and in
case a future obsdir/full port needs it), not simplified away.
- class scopeinpython.rtmt_sb.RTMtSbResult(Emint: 'np.ndarray', Eplut: 'np.ndarray', Eoutte: 'float', Rnuct: 'np.ndarray', Rnhct: 'np.ndarray', Rnust: 'float', Rnhst: 'float')[source]
Bases:
object- Parameters:
- Eoutte: float
- Rnust: float
- Rnhst: float
- scopeinpython.rtmt_sb.rtmt_sb(rtmo, nl, LAI, rho_thermal, tau_thermal, rs_thermal, Tcu, Tch, Tsu, Tsh)[source]
Direct port of the scalar/”lite” branch of
SCOPEinR::get.RTMt.sb(see module docstring for what’s not ported).- Parameters:
rtmo (RTMoResult) – From
scopeinpython.rtmo.run_rtmo(), called with the same canopy as here. Only the thermal-region (last-column) values ofXdd/rho_dd/tau_dd/R_ddand the (wavelength- independent)Xssare used.Tcu (array_like, shape (nl,)) – Sunlit / shaded leaf temperature per canopy layer, deg C.
Tch (array_like, shape (nl,)) – Sunlit / shaded leaf temperature per canopy layer, deg C.
Tsu (float) – Sunlit / shaded soil temperature, deg C.
Tsh (float) – Sunlit / shaded soil temperature, deg C.
nl (int)
LAI (float)
rho_thermal (float)
tau_thermal (float)
rs_thermal (float)
- Return type: