mo_gas_optics_rrtmgp_kernels Module

Numeric calculations for gas optics. Absorption and Rayleigh optical depths, Planck source functions.

  • Interpolation coefficients are computed, then used in subsequent routines.
  • All applications will call compute_tau_absorption(); compute_tau_rayleigh() and/or compute_Planck_source() will be called depending on the configuration of the k-distribution.
  • The details of the interpolation scheme are not particaulrly important as long as arrays including tables are passed consisently between kernels.

Uses

    • mo_rte_util_array
    • mo_rte_kind
  • module~~mo_gas_optics_rrtmgp_kernels~~UsesGraph module~mo_gas_optics_rrtmgp_kernels mo_gas_optics_rrtmgp_kernels mo_rte_util_array mo_rte_util_array module~mo_gas_optics_rrtmgp_kernels->mo_rte_util_array mo_rte_kind mo_rte_kind module~mo_gas_optics_rrtmgp_kernels->mo_rte_kind

Contents


Subroutines

public subroutine compute_Planck_source(ncol, nlay, nbnd, ngpt, nflav, neta, npres, ntemp, nPlanckTemp, tlay, tlev, tsfc, sfc_lay, fmajor, jeta, tropo, jtemp, jpress, gpoint_bands, band_lims_gpt, pfracin, temp_ref_min, totplnk_delta, totplnk, gpoint_flavor, sfc_src, lay_src, lev_src, sfc_source_Jac) bind(C, name="0")

Arguments

TypeIntentOptionalAttributesName
integer, intent(in) :: ncol

input dimensions

integer, intent(in) :: nlay

input dimensions

integer, intent(in) :: nbnd

input dimensions

integer, intent(in) :: ngpt

input dimensions

integer, intent(in) :: nflav

table dimensions

integer, intent(in) :: neta

table dimensions

integer, intent(in) :: npres

table dimensions

integer, intent(in) :: ntemp

table dimensions

integer, intent(in) :: nPlanckTemp

table dimensions

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

temperature at layer centers (K)

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

temperature at interfaces (K)

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

surface temperture

integer, intent(in) :: sfc_lay

index into surface layer

real(kind=wp), intent(in), dimension(2,2,2,ncol,nlay,nflav):: fmajor

interpolation weights for major gases - computed in interpolation()

integer, intent(in), dimension(2, ncol,nlay,nflav):: jeta

interpolation indexes in eta - computed in interpolation()

logical(kind=wl), intent(in), dimension( ncol,nlay):: tropo

use upper- or lower-atmospheric tables?

integer, intent(in), dimension( ncol,nlay):: jtemp

interpolation indexes in temperature and pressure - computed in interpolation()

integer, intent(in), dimension( ncol,nlay):: jpress

interpolation indexes in temperature and pressure - computed in interpolation()

integer, intent(in), dimension(ngpt):: gpoint_bands

band to which each g-point belongs

integer, intent(in), dimension(2, nbnd):: band_lims_gpt

start and end g-point for each band

real(kind=wp), intent(in), dimension(ntemp,neta,npres+1,ngpt):: pfracin

Fraction of the Planck function in each g-point

real(kind=wp), intent(in) :: temp_ref_min

interpolation constants

real(kind=wp), intent(in) :: totplnk_delta

interpolation constants

real(kind=wp), intent(in), dimension(nPlanckTemp,nbnd):: totplnk

Total Planck function by band at each temperature

integer, intent(in), dimension(2,ngpt):: gpoint_flavor

major gas flavor (pair) by upper/lower, g-point

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

Planck emission from the surface

real(kind=wp), intent(out), dimension(ncol,nlay, ngpt):: lay_src

Planck emission from layer centers

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

Planck emission from layer boundaries

real(kind=wp), intent(out), dimension(ncol, ngpt):: sfc_source_Jac

Jacobian (derivative) of the surface Planck source with respect to surface temperature

public subroutine compute_tau_absorption(ncol, nlay, nbnd, ngpt, ngas, nflav, neta, npres, ntemp, nminorlower, nminorklower, nminorupper, nminorkupper, idx_h2o, gpoint_flavor, band_lims_gpt, kmajor, kminor_lower, kminor_upper, minor_limits_gpt_lower, minor_limits_gpt_upper, minor_scales_with_density_lower, minor_scales_with_density_upper, scale_by_complement_lower, scale_by_complement_upper, idx_minor_lower, idx_minor_upper, idx_minor_scaling_lower, idx_minor_scaling_upper, kminor_start_lower, kminor_start_upper, tropo, col_mix, fmajor, fminor, play, tlay, col_gas, jeta, jtemp, jpress, tau) bind(C, name="0")

Compute minor and major species optical depth using pre-computed interpolation coefficients (jeta,jtemp,jpress) and weights (fmajor, fminor)

Arguments

TypeIntentOptionalAttributesName
integer, intent(in) :: ncol

array sizes

integer, intent(in) :: nlay

array sizes

integer, intent(in) :: nbnd

array sizes

integer, intent(in) :: ngpt

array sizes

integer, intent(in) :: ngas

tables sizes

integer, intent(in) :: nflav

tables sizes

integer, intent(in) :: neta

tables sizes

integer, intent(in) :: npres

tables sizes

integer, intent(in) :: ntemp

tables sizes

integer, intent(in) :: nminorlower

table sizes

integer, intent(in) :: nminorklower

table sizes

integer, intent(in) :: nminorupper

table sizes

integer, intent(in) :: nminorkupper

table sizes

integer, intent(in) :: idx_h2o

index of water vapor in col_gas

integer, intent(in), dimension(2,ngpt):: gpoint_flavor

major gas flavor (pair) by upper/lower, g-point

integer, intent(in), dimension(2,nbnd):: band_lims_gpt

beginning and ending g-point for each band

real(kind=wp), intent(in), dimension(ntemp,neta,npres+1,ngpt):: kmajor

absorption coefficient table - major gases

real(kind=wp), intent(in), dimension(ntemp,neta,nminorklower):: kminor_lower

absorption coefficient table - minor gases, lower atmosphere

real(kind=wp), intent(in), dimension(ntemp,neta,nminorkupper):: kminor_upper

absorption coefficient table - minor gases, upper atmosphere

integer, intent(in), dimension(2,nminorlower):: minor_limits_gpt_lower

beginning and ending g-point for each minor gas

integer, intent(in), dimension(2,nminorupper):: minor_limits_gpt_upper
logical(kind=wl), intent(in), dimension( nminorlower):: minor_scales_with_density_lower

generic treatment of minor gases - scales with density (e.g. continuum, collision-induced absorption)?

logical(kind=wl), intent(in), dimension( nminorupper):: minor_scales_with_density_upper
logical(kind=wl), intent(in), dimension( nminorlower):: scale_by_complement_lower

generic treatment of minor gases - scale by density (e.g. self-continuum) or complement?

logical(kind=wl), intent(in), dimension( nminorupper):: scale_by_complement_upper
integer, intent(in), dimension( nminorlower):: idx_minor_lower

index of each minor gas in col_gas

integer, intent(in), dimension( nminorupper):: idx_minor_upper
integer, intent(in), dimension( nminorlower):: idx_minor_scaling_lower

for this minor gas, index of the "scaling gas" in col_gas

integer, intent(in), dimension( nminorupper):: idx_minor_scaling_upper
integer, intent(in), dimension( nminorlower):: kminor_start_lower

starting g-point index in minor gas absorption table

integer, intent(in), dimension( nminorupper):: kminor_start_upper
logical(kind=wl), intent(in), dimension(ncol,nlay):: tropo

use upper- or lower-atmospheric tables?

real(kind=wp), intent(in), dimension(2, ncol,nlay,nflav ):: col_mix

combination of major species's column amounts - computed in interpolation()

real(kind=wp), intent(in), dimension(2,2,2,ncol,nlay,nflav ):: fmajor

interpolation weights for major gases - computed in interpolation()

real(kind=wp), intent(in), dimension(2,2, ncol,nlay,nflav ):: fminor

interpolation weights for minor gases - computed in interpolation()

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

input temperature and pressure

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

input temperature and pressure

real(kind=wp), intent(in), dimension( ncol,nlay,0:ngas):: col_gas

input column gas amount (molecules/cm^2)

integer, intent(in), dimension(2, ncol,nlay,nflav ):: jeta

interpolation indexes in eta - computed in interpolation()

integer, intent(in), dimension( ncol,nlay ):: jtemp

interpolation indexes in temperature - computed in interpolation()

integer, intent(in), dimension( ncol,nlay ):: jpress

interpolation indexes in pressure - computed in interpolation()

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

aborption optional depth

public subroutine compute_tau_rayleigh(ncol, nlay, nbnd, ngpt, ngas, nflav, neta, npres, ntemp, gpoint_flavor, band_lims_gpt, krayl, idx_h2o, col_dry, col_gas, fminor, jeta, tropo, jtemp, tau_rayleigh) bind(C, name="0")

Arguments

TypeIntentOptionalAttributesName
integer, intent(in) :: ncol

input dimensions

integer, intent(in) :: nlay

input dimensions

integer, intent(in) :: nbnd

input dimensions

integer, intent(in) :: ngpt

input dimensions

integer, intent(in) :: ngas

table dimensions

integer, intent(in) :: nflav

table dimensions

integer, intent(in) :: neta

table dimensions

integer, intent(in) :: npres

table dimensions

integer, intent(in) :: ntemp

table dimensions

integer, intent(in), dimension(2,ngpt):: gpoint_flavor

major gas flavor (pair) by upper/lower, g-point

integer, intent(in), dimension(2,nbnd):: band_lims_gpt

start and end g-point for each band

real(kind=wp), intent(in), dimension(ntemp,neta,ngpt,2):: krayl

Rayleigh scattering coefficients

integer, intent(in) :: idx_h2o

index of water vapor in col_gas

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

column amount of dry air

real(kind=wp), intent(in), dimension(ncol,nlay,0:ngas):: col_gas

input column gas amount (molecules/cm^2)

real(kind=wp), intent(in), dimension(2,2,ncol,nlay,nflav):: fminor

interpolation weights for major gases - computed in interpolation()

integer, intent(in), dimension(2, ncol,nlay,nflav):: jeta

interpolation indexes in eta - computed in interpolation()

logical(kind=wl), intent(in), dimension(ncol,nlay):: tropo

use upper- or lower-atmospheric tables?

integer, intent(in), dimension(ncol,nlay):: jtemp

interpolation indexes in temperature - computed in interpolation()

real(kind=wp), intent(out), dimension(ncol,nlay,ngpt):: tau_rayleigh

Rayleigh optical depth

public subroutine interpolation(ncol, nlay, ngas, nflav, neta, npres, ntemp, flavor, press_ref_log, temp_ref, press_ref_log_delta, temp_ref_min, temp_ref_delta, press_ref_trop_log, vmr_ref, play, tlay, col_gas, jtemp, fmajor, fminor, col_mix, tropo, jeta, jpress) bind(C, name="0")

Compute interpolation coefficients for calculations of major optical depths, minor optical depths, Rayleigh, and Planck fractions

Arguments

TypeIntentOptionalAttributesName
integer, intent(in) :: ncol

physical domain size

integer, intent(in) :: nlay

physical domain size

integer, intent(in) :: ngas

k-distribution table dimensions

integer, intent(in) :: nflav

k-distribution table dimensions

integer, intent(in) :: neta

k-distribution table dimensions

integer, intent(in) :: npres

k-distribution table dimensions

integer, intent(in) :: ntemp

k-distribution table dimensions

integer, intent(in), dimension(2,nflav):: flavor

index into vmr_ref of major gases for each flavor

real(kind=wp), intent(in), dimension(npres):: press_ref_log

log of pressure dimension in RRTMGP tables

real(kind=wp), intent(in), dimension(ntemp):: temp_ref

temperature dimension in RRTMGP tables

real(kind=wp), intent(in) :: press_ref_log_delta

constants related to RRTMGP tables

real(kind=wp), intent(in) :: temp_ref_min

constants related to RRTMGP tables

real(kind=wp), intent(in) :: temp_ref_delta

constants related to RRTMGP tables

real(kind=wp), intent(in) :: press_ref_trop_log

constants related to RRTMGP tables

real(kind=wp), intent(in), dimension(2,0:ngas,ntemp):: vmr_ref

reference volume mixing ratios used in compute "binary species parameter" eta

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

input pressure (Pa?) and temperature (K)

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

input pressure (Pa?) and temperature (K)

real(kind=wp), intent(in), dimension(ncol,nlay,0:ngas):: col_gas

input column gas amount - molecules/cm^2

integer, intent(out), dimension(ncol,nlay):: jtemp

temperature and pressure interpolation indexes

real(kind=wp), intent(out), dimension(2,2,2,ncol,nlay,nflav):: fmajor

Interpolation weights in pressure, eta, strat/trop

real(kind=wp), intent(out), dimension(2,2, ncol,nlay,nflav):: fminor

Interpolation fraction in eta, strat/trop

real(kind=wp), intent(out), dimension(2, ncol,nlay,nflav):: col_mix

combination of major species's column amounts (first index is strat/trop)

logical(kind=wl), intent(out), dimension(ncol,nlay):: tropo

use lower (or upper) atmosphere tables

integer, intent(out), dimension(2, ncol,nlay,nflav):: jeta

Index for binary species interpolation

integer, intent(out), dimension(ncol,nlay):: jpress

temperature and pressure interpolation indexes