mo_optical_props_kernels Module

Kernels for arrays of optical properties:

- delta-scaling
- adding two sets of properties
- extracting subsets along the column dimension

Uses

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

Contents


Interfaces

public interface delta_scale_2str_kernel

  • public pure subroutine delta_scale_2str_f_k(ncol, nlay, ngpt, tau, ssa, g, f) bind(C, name="0")

    Delta-scale two-stream optical properties given user-provided value of (forward scattering)

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    Array sizes

    integer, intent(in) :: nlay

    Array sizes

    integer, intent(in) :: ngpt

    Array sizes

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

    Optical depth, single-scattering albedo, asymmetry parameter

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

    Optical depth, single-scattering albedo, asymmetry parameter

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

    Optical depth, single-scattering albedo, asymmetry parameter

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

    User-provided forward-scattering fraction

  • public pure subroutine delta_scale_2str_k(ncol, nlay, ngpt, tau, ssa, g) bind(C, name="0")

    Delta-scale assuming forward-scatternig fraction is the square of the asymmetry parameter i.e.

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    Array sizes

    integer, intent(in) :: nlay

    Array sizes

    integer, intent(in) :: ngpt

    Array sizes

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

    Optical depth, single-scattering albedo, asymmetry parameter

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

    Optical depth, single-scattering albedo, asymmetry parameter

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

    Optical depth, single-scattering albedo, asymmetry parameter

public interface extract_subset

Extract a subset from the first dimension (normally columns) of a 3D field. Applicable to most variables e.g. tau, ssa, g

  • public pure subroutine extract_subset_absorption_tau(ncol, nlay, ngpt, tau_in, ssa_in, colS, colE, tau_out) bind(C, name="0")

    Extract the absorption optical thickness

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    Array sizes

    integer, intent(in) :: nlay

    Array sizes

    integer, intent(in) :: ngpt

    Array sizes

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

    Optical thickness, single scattering albedo

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

    Optical thickness, single scattering albedo

    integer, intent(in) :: colS

    Starting and ending index

    integer, intent(in) :: colE

    Starting and ending index

    real(kind=wp), intent(out), dimension(colE-colS+1, nlay,ngpt):: tau_out

    absorption optical thickness subset

  • public pure subroutine extract_subset_dim1_3d(ncol, nlay, ngpt, array_in, colS, colE, array_out) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    Array sizes

    integer, intent(in) :: nlay

    Array sizes

    integer, intent(in) :: ngpt

    Array sizes

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

    Array to subset

    integer, intent(in) :: colS

    Starting and ending index

    integer, intent(in) :: colE

    Starting and ending index

    real(kind=wp), intent(out), dimension(colE-colS+1, nlay,ngpt):: array_out

    subset of the input array

  • public pure subroutine extract_subset_dim2_4d(nmom, ncol, nlay, ngpt, array_in, colS, colE, array_out) bind(C, name="0")

    Extract a subset from the second dimension (normally columns) of a 4D field. Applicable to phase function moments, where the first dimension is the moment

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: nmom

    Array sizes

    integer, intent(in) :: ncol

    Array sizes

    integer, intent(in) :: nlay

    Array sizes

    integer, intent(in) :: ngpt

    Array sizes

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

    Array to subset

    integer, intent(in) :: colS

    Starting and ending index

    integer, intent(in) :: colE

    Starting and ending index

    real(kind=wp), intent(out), dimension(nmom,colE-colS+1, nlay,ngpt):: array_out

    subset of the input array

interface

increase one absorption optical depth defined on g-points by a second value defined on bands

  • public pure subroutine inc_1scalar_by_1scalar_bybnd(ncol, nlay, ngpt, tau1, tau2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be added to original (defined on bands)

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increase absorption optical depth defined on g-points with extinction optical depth (2-stream form) defined on bands

  • public pure subroutine inc_1scalar_by_2stream_bybnd(ncol, nlay, ngpt, tau1, tau2, ssa2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be added to original (defined on bands)

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

    optical properties to be added to original (defined on bands)

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increase absorption optical depth defined on g-points with extinction optical depth (n-stream form) defined on bands

  • public pure subroutine inc_1scalar_by_nstream_bybnd(ncol, nlay, ngpt, tau1, tau2, ssa2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be added to original (defined on bands)

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

    optical properties to be added to original (defined on bands)

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increment two-stream optical properties defined on g-points with absorption optical depth defined on bands

  • public pure subroutine inc_2stream_by_1scalar_bybnd(ncol, nlay, ngpt, tau1, ssa1, tau2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be added to original (defined on bands)

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increment 2-stream optical properties defined on g-points with another set defined on bands

  • public pure subroutine inc_2stream_by_2stream_bybnd(ncol, nlay, ngpt, tau1, ssa1, g1, tau2, ssa2, g2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be added to original (defined on bands)

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

    optical properties to be added to original (defined on bands)

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

    optical properties to be added to original (defined on bands)

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increment 2-stream optical properties defined on g-points with n-stream properties set defined on bands

  • public pure subroutine inc_2stream_by_nstream_bybnd(ncol, nlay, ngpt, nmom2, tau1, ssa1, g1, tau2, ssa2, p2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

    integer, intent(in) :: nmom2

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be added to original (defined on bands)

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

    optical properties to be added to original (defined on bands)

    real(kind=wp), intent(in), dimension(nmom2, ncol,nlay,nbnd):: p2

    moments of the phase function to be added

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increment n-stream optical properties defined on g-points with absorption optical depth defined on bands

  • public pure subroutine inc_nstream_by_1scalar_bybnd(ncol, nlay, ngpt, tau1, ssa1, tau2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be added to original (defined on bands)

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increment n-stream optical properties defined on g-points with 2-stream properties set defined on bands

  • public pure subroutine inc_nstream_by_2stream_bybnd(ncol, nlay, ngpt, nmom1, tau1, ssa1, p1, tau2, ssa2, g2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

    integer, intent(in) :: nmom1

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be modified (defined on g-points)

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

    moments of the phase function be modified

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

    optical properties to be added to original (defined on bands)

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

    optical properties to be added to original (defined on bands)

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

    optical properties to be added to original (defined on bands)

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increment n-stream optical properties defined on g-points with a second set defined on bands

  • public pure subroutine inc_nstream_by_nstream_bybnd(ncol, nlay, ngpt, nmom1, nmom2, tau1, ssa1, p1, tau2, ssa2, p2, nbnd, gpt_lims) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

    integer, intent(in) :: nmom1

    array sizes

    integer, intent(in) :: nmom2

    array sizes

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

    optical properties to be modified (defined on g-points)

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

    optical properties to be modified (defined on g-points)

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

    moments of the phase function be modified

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

    optical properties to be added to original (defined on bands)

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

    optical properties to be added to original (defined on bands)

    real(kind=wp), intent(in), dimension(nmom2, ncol,nlay,nbnd):: p2

    moments of the phase function to be added

    integer, intent(in) :: nbnd

    array sizes

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

    Starting and ending gpoint for each band

interface

increase one absorption optical depth by a second value

  • public pure subroutine increment_1scalar_by_1scalar(ncol, nlay, ngpt, tau1, tau2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified

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

    optical properties to be added to original

interface

increase absorption optical depth with extinction optical depth (2-stream form)

  • public pure subroutine increment_1scalar_by_2stream(ncol, nlay, ngpt, tau1, tau2, ssa2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified

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

    optical properties to be added to original

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

    optical properties to be added to original

interface

increase absorption optical depth with extinction optical depth (n-stream form)

  • public pure subroutine increment_1scalar_by_nstream(ncol, nlay, ngpt, tau1, tau2, ssa2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified

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

    optical properties to be added to original

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

    optical properties to be added to original

interface

increment two-stream optical properties with absorption optical depth

  • public pure subroutine increment_2stream_by_1scalar(ncol, nlay, ngpt, tau1, ssa1, tau2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified

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

    optical properties to be modified

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

    optical properties to be added to original

interface

increment two-stream optical properties with a second set

  • public pure subroutine increment_2stream_by_2stream(ncol, nlay, ngpt, tau1, ssa1, g1, tau2, ssa2, g2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified

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

    optical properties to be modified

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

    optical properties to be modified

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

    optical properties to be added to original

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

    optical properties to be added to original

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

    optical properties to be added to original

interface

increment two-stream optical properties with n-stream

  • public pure subroutine increment_2stream_by_nstream(ncol, nlay, ngpt, nmom2, tau1, ssa1, g1, tau2, ssa2, p2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

    integer, intent(in) :: nmom2

    array sizes

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

    optical properties to be modified

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

    optical properties to be modified

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

    optical properties to be modified

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

    optical properties to be added to original

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

    optical properties to be added to original

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

    moments of the phase function to be added

interface

increment n-stream optical properties with absorption optical depth

  • public pure subroutine increment_nstream_by_1scalar(ncol, nlay, ngpt, tau1, ssa1, tau2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

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

    optical properties to be modified

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

    optical properties to be modified

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

    optical properties to be added to original

interface

increment n-stream optical properties with two-stream values

  • public pure subroutine increment_nstream_by_2stream(ncol, nlay, ngpt, nmom1, tau1, ssa1, p1, tau2, ssa2, g2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

    integer, intent(in) :: nmom1

    array sizes

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

    optical properties to be modified

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

    optical properties to be modified

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

    moments of the phase function be modified

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

    optical properties to be added to original

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

    optical properties to be added to original

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

    optical properties to be added to original

interface

increment one set of n-stream optical properties with another set

  • public pure subroutine increment_nstream_by_nstream(ncol, nlay, ngpt, nmom1, nmom2, tau1, ssa1, p1, tau2, ssa2, p2) bind(C, name="0")

    Arguments

    TypeIntentOptionalAttributesName
    integer, intent(in) :: ncol

    array sizes

    integer, intent(in) :: nlay

    array sizes

    integer, intent(in) :: ngpt

    array sizes

    integer, intent(in) :: nmom1

    array sizes

    integer, intent(in) :: nmom2

    array sizes

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

    optical properties to be modified

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

    optical properties to be modified

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

    moments of the phase function be modified

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

    optical properties to be added to original

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

    optical properties to be added to original

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

    moments of the phase function to be added