mo_rte_solver_kernels Module

Numeric calculations for radiative transfer solvers

  • Emission/absorption (no-scattering) calculations
  • solver for multi-angle Gaussian quadrature
  • Extinction-only calculation (direct solar beam)
  • Two-stream calculations: solvers for LW and SW with different boundary conditions and source functions

Uses

  • module~~mo_rte_solver_kernels~2~~UsesGraph module~mo_rte_solver_kernels~2 mo_rte_solver_kernels iso_c_binding iso_c_binding module~mo_rte_solver_kernels~2->iso_c_binding mo_rte_kind mo_rte_kind module~mo_rte_solver_kernels~2->mo_rte_kind

Contents


Interfaces

interface

Longwave two-stream calculation: - combine RRTMGP-specific sources at levels - compute layer reflectance, transmittance - compute total source function at levels using linear-in-tau - transport

  • public subroutine lw_solver_2stream(ncol, nlay, ngpt, top_at_1, tau, ssa, g, lay_source, lev_source, sfc_emis, sfc_src, inc_flux, flux_up, flux_dn) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    Number of columns, layers, g-points

    integer, intent(in) :: nlay

    Number of columns, layers, g-points

    integer, intent(in) :: ngpt

    Number of columns, layers, g-points

    logical(kind=wl), intent(in) :: top_at_1

    ilay = 1 is the top of the atmosphere?

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: tau

    Optical thickness, single-scattering albedo, asymmetry parameter []

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: ssa

    Optical thickness, single-scattering albedo, asymmetry parameter []

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: g

    Optical thickness, single-scattering albedo, asymmetry parameter []

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: lay_source

    Planck source at layer average temperature [W/m2]

    real(kind=wp), intent(in), dimension(ncol,nlay+1,ngpt):: lev_source

    Planck source at layer edge for radiation [W/m2]

    real(kind=wp), intent(in), dimension(ncol, ngpt):: sfc_emis

    Surface emissivity []

    real(kind=wp), intent(in), dimension(ncol, ngpt):: sfc_src

    Surface source function [W/m2]

    real(kind=wp), intent(in), dimension(ncol, ngpt):: inc_flux

    Incident diffuse flux, probably 0 [W/m2]

    real(kind=wp), intent(out), dimension(ncol,nlay+1,ngpt):: flux_up

    Fluxes [W/m2]

    real(kind=wp), intent(out), dimension(ncol,nlay+1,ngpt):: flux_dn

    Fluxes [W/m2]

interface

LW transport, no scattering, multi-angle quadrature Users provide a set of weights and quadrature angles Routine sums over single-angle solutions for each sets of angles/weights

  • public subroutine lw_solver_noscat(ncol, nlay, ngpt, top_at_1, nmus, Ds, weights, tau, lay_source, lev_source, sfc_emis, sfc_src, inc_flux, flux_up, flux_dn, do_broadband, broadband_up, broadband_dn, do_Jacobians, sfc_srcJac, flux_upJac, do_rescaling, ssa, g) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    Number of columns, layers, g-points

    integer, intent(in) :: nlay

    Number of columns, layers, g-points

    integer, intent(in) :: ngpt

    Number of columns, layers, g-points

    logical(kind=wl), intent(in) :: top_at_1

    ilay = 1 is the top of the atmosphere?

    integer, intent(in) :: nmus

    number of quadrature angles

    real(kind=wp), intent(in), dimension (ncol, ngpt, nmus):: Ds

    quadrature secants

    real(kind=wp), intent(in), dimension(nmus):: weights

    quadrature weights

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: tau

    Absorption optical thickness []

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: lay_source

    Planck source at layer average temperature [W/m2]

    real(kind=wp), intent(in), dimension(ncol,nlay+1,ngpt):: lev_source

    Planck source at layer edge for radiation [W/m2]

    real(kind=wp), intent(in), dimension(ncol, ngpt):: sfc_emis

    Surface emissivity []

    real(kind=wp), intent(in), dimension(ncol, ngpt):: sfc_src

    Surface source function [W/m2]

    real(kind=wp), intent(in), dimension(ncol, ngpt):: inc_flux

    Incident diffuse flux, probably 0 [W/m2]

    real(kind=wp), intent(out), dimension(ncol,nlay+1,ngpt), target:: flux_up

    Fluxes [W/m2]

    real(kind=wp), intent(out), dimension(ncol,nlay+1,ngpt), target:: flux_dn

    Fluxes [W/m2]

    logical(kind=wl), intent(in) :: do_broadband
    real(kind=wp), intent(out), dimension(ncol,nlay+1 ), target:: broadband_up

    Spectrally-integrated fluxes [W/m2]

    real(kind=wp), intent(out), dimension(ncol,nlay+1 ), target:: broadband_dn

    Spectrally-integrated fluxes [W/m2]

    logical(kind=wl), intent(in) :: do_Jacobians

    compute Jacobian with respect to surface temeprature?

    real(kind=wp), intent(in), dimension(ncol ,ngpt):: sfc_srcJac

    surface temperature Jacobian of surface source function [W/m2/K]

    real(kind=wp), intent(out), dimension(ncol,nlay+1 ), target:: flux_upJac

    surface temperature Jacobian of Radiances [W/m2-str / K]

    logical(kind=wl), intent(in) :: do_rescaling

    Approximate treatment of scattering (10.1175/JAS-D-18-0014.1)

    real(kind=wp), intent(in), dimension(ncol,nlay ,ngpt):: ssa

    single-scattering albedo, asymmetry parameter

    real(kind=wp), intent(in), dimension(ncol,nlay ,ngpt):: g

    single-scattering albedo, asymmetry parameter

interface

Shortwave two-stream calculation: compute layer reflectance, transmittance compute solar source function for diffuse radiation transport

  • public subroutine sw_solver_2stream(ncol, nlay, ngpt, top_at_1, tau, ssa, g, mu0, sfc_alb_dir, sfc_alb_dif, inc_flux_dir, flux_up, flux_dn, flux_dir, has_dif_bc, inc_flux_dif, do_broadband, broadband_up, broadband_dn, broadband_dir) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    Number of columns, layers, g-points

    integer, intent(in) :: nlay

    Number of columns, layers, g-points

    integer, intent(in) :: ngpt

    Number of columns, layers, g-points

    logical(kind=wl), intent(in) :: top_at_1

    ilay = 1 is the top of the atmosphere?

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: tau

    Optical thickness, single-scattering albedo, asymmetry parameter []

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: ssa

    Optical thickness, single-scattering albedo, asymmetry parameter []

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: g

    Optical thickness, single-scattering albedo, asymmetry parameter []

    real(kind=wp), intent(in), dimension(ncol,nlay ):: mu0

    cosine of solar zenith angle

    real(kind=wp), intent(in), dimension(ncol, ngpt):: sfc_alb_dir

    Spectral surface albedo for direct and diffuse radiation

    real(kind=wp), intent(in), dimension(ncol, ngpt):: sfc_alb_dif

    Spectral surface albedo for direct and diffuse radiation

    real(kind=wp), intent(in), dimension(ncol, ngpt):: inc_flux_dir

    Direct beam incident flux

    real(kind=wp), intent(out), dimension(ncol,nlay+1,ngpt), target:: flux_up

    Fluxes [W/m2]

    real(kind=wp), intent(out), dimension(ncol,nlay+1,ngpt), target:: flux_dn

    Fluxes [W/m2]

    real(kind=wp), intent(out), dimension(ncol,nlay+1,ngpt), target:: flux_dir

    Fluxes [W/m2]

    logical(kind=wl), intent(in) :: has_dif_bc

    Is a boundary condition for diffuse flux supplied?

    real(kind=wp), intent(in), dimension(ncol, ngpt):: inc_flux_dif

    Boundary condition for diffuse flux [W/m2]

    logical(kind=wl), intent(in) :: do_broadband

    Provide broadband-integrated, not spectrally-resolved, fluxes?

    real(kind=wp), intent(out), dimension(ncol,nlay+1 ):: broadband_up
    real(kind=wp), intent(out), dimension(ncol,nlay+1 ):: broadband_dn
    real(kind=wp), intent(out), dimension(ncol,nlay+1 ):: broadband_dir

interface

  • public pure subroutine sw_solver_noscat(ncol, nlay, ngpt, top_at_1, tau, mu0, inc_flux_dir, flux_dir) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    Number of columns, layers, g-points

    integer, intent(in) :: nlay

    Number of columns, layers, g-points

    integer, intent(in) :: ngpt

    Number of columns, layers, g-points

    logical(kind=wl), intent(in) :: top_at_1

    ilay = 1 is the top of the atmosphere?

    real(kind=wp), intent(in), dimension(ncol,nlay, ngpt):: tau

    Absorption optical thickness []

    real(kind=wp), intent(in), dimension(ncol,nlay ):: mu0

    cosine of solar zenith angle

    real(kind=wp), intent(in), dimension(ncol, ngpt):: inc_flux_dir

    Direct beam incident flux [W/m2]

    real(kind=wp), intent(out), dimension(ncol,nlay+1,ngpt):: flux_dir