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:
Emint: ndarray
Eplut: ndarray
Eoutte: float
Rnuct: ndarray
Rnhct: ndarray
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 of Xdd/rho_dd/tau_dd/R_dd and the (wavelength- independent) Xss are 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:

RTMtSbResult