mo_rte_solver_kernels Module

Numeric calculations for radiative transfer solvers

  • Emission/absorption (no-scattering) calculations
  • solver for multi-angle Gaussian quadrature
  • solver for a single angle, calling
    • source function computation (linear-in-tau)
    • transport
  • Extinction-only calculation (direct solar beam)
  • Two-stream calculations: solvers for LW and SW with different boundary conditions and source functions
    • source function calculation for LW, SW
    • two-stream calculations for LW, SW (using different assumtions about phase function)
    • transport (adding)
  • Application of boundary conditions

Uses

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

Contents


Subroutines

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")

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

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 temperature [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]

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")

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

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

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")

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

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

Broadband integrated fluxes

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

Broadband integrated fluxes

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

Broadband integrated fluxes

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

Direct-beam flux, spectral [W/m2]