radiation_config Module


Uses

  • module~~radiation_config~2~~UsesGraph module~radiation_config~2 radiation_config module~radiation_general_cloud_optics_data radiation_general_cloud_optics_data module~radiation_config~2->module~radiation_general_cloud_optics_data module~radiation_cloud_cover radiation_cloud_cover module~radiation_config~2->module~radiation_cloud_cover module~radiation_pdf_sampler~2 radiation_pdf_sampler module~radiation_config~2->module~radiation_pdf_sampler~2 module~parkind1~2 PARKIND1 module~radiation_config~2->module~parkind1~2 module~radiation_aerosol_optics_data~2 radiation_aerosol_optics_data module~radiation_config~2->module~radiation_aerosol_optics_data~2 module~radiation_cloud_optics_data~2 radiation_cloud_optics_data module~radiation_config~2->module~radiation_cloud_optics_data~2 module~radiation_ecckd~2 radiation_ecckd module~radiation_config~2->module~radiation_ecckd~2 module~radiation_general_cloud_optics_data->module~parkind1~2 module~radiation_cloud_cover->module~parkind1~2 module~radiation_pdf_sampler~2->module~parkind1~2 module~radiation_aerosol_optics_data~2->module~parkind1~2 module~radiation_io~2 radiation_io module~radiation_aerosol_optics_data~2->module~radiation_io~2 module~radiation_cloud_optics_data~2->module~parkind1~2 module~radiation_ecckd~2->module~parkind1~2 module~radiation_ecckd_gas radiation_ecckd_gas module~radiation_ecckd~2->module~radiation_ecckd_gas module~radiation_gas_constants radiation_gas_constants module~radiation_ecckd~2->module~radiation_gas_constants module~radiation_spectral_definition~2 radiation_spectral_definition module~radiation_ecckd~2->module~radiation_spectral_definition~2 module~yomlun_ifsaux YOMLUN_IFSAUX module~radiation_io~2->module~yomlun_ifsaux module~radiation_ecckd_gas->module~parkind1~2 module~radiation_ecckd_gas->module~radiation_gas_constants module~radiation_gas_constants->module~parkind1~2 module~radiation_spectral_definition~2->module~parkind1~2 module~yomlun_ifsaux->module~parkind1~2

Contents


Variables

Type Visibility Attributes Name Initial
character(len=*), public, parameter :: SolverName(0:4) = (/'Cloudless   ', 'Homogeneous ', 'McICA       ', 'SPARTACUS   ', 'Tripleclouds'/)
character(len=*), public, parameter :: EntrapmentName(0:4) = ['Zero       ', 'Edge-only  ', 'Explicit   ', 'Non-fractal', 'Maximum    ']
character(len=*), public, parameter :: EncroachmentName(0:4) = ['Zero    ', 'Minimum ', 'Fractal ', 'Computed', 'Maximum ']
character(len=*), public, parameter :: GasModelName(0:2) = (/'Monochromatic', 'RRTMG-IFS    ', 'ECCKD        '/)
character(len=*), public, parameter :: LiquidModelName(0:2) = (/'Monochromatic', 'SOCRATES     ', 'Slingo       '/)
character(len=*), public, parameter :: IceModelName(0:5) = (/'Monochromatic', 'Fu-IFS       ', 'Baran        ', 'Baran2016    ', 'Baran2017    ', 'Yi           '/)
character(len=*), public, parameter :: PdfShapeName(0:1) = (/'Lognormal', 'Gamma    '/)
integer, public, parameter :: NMaxAerosolTypes = 256
integer, public, parameter :: NMaxCloudTypes = 12
integer, public, parameter :: NMaxAlbedoIntervals = 256
integer, public, parameter :: NPrintStringLen = 60

Enumerations

enum, bind(c)

Enumerators

enumerator:: ISolverCloudless = 0
enumerator:: ISolverHomogeneous = 1
enumerator:: ISolverMcICA = 2
enumerator:: ISolverSpartacus = 3
enumerator:: ISolverTripleclouds = 4

enum, bind(c)

Enumerators

enumerator:: IEntrapmentZero = 0
enumerator:: IEntrapmentEdgeOnly = 1
enumerator:: IEntrapmentExplicit = 2
enumerator:: IEntrapmentExplicitNonFractal = 3
enumerator:: IEntrapmentMaximum = 4

enum, bind(c)

Enumerators

enumerator:: IGasModelMonochromatic = 0
enumerator:: IGasModelIFSRRTMG = 1
enumerator:: IGasModelECCKD = 2

enum, bind(c)

Enumerators

enumerator:: ILiquidModelMonochromatic = 0
enumerator:: ILiquidModelSOCRATES = 1
enumerator:: ILiquidModelSlingo = 2

enum, bind(c)

Enumerators

enumerator:: IIceModelMonochromatic = 0
enumerator:: IIceModelFu = 1
enumerator:: IIceModelBaran = 2
enumerator:: IIceModelBaran2016 = 3
enumerator:: IIceModelBaran2017 = 4
enumerator:: IIceModelYi = 5

enum, bind(c)

Enumerators

enumerator:: IPdfShapeLognormal = 0
enumerator:: IPdfShapeGamma = 1

Derived Types

type, public ::  config_type

Components

Type Visibility Attributes Name Initial
logical, public :: use_spectral_solar_scaling = .false.
character(len=511), public :: directory_name = '.'
logical, public :: use_general_cloud_optics = .true.
logical, public :: use_general_aerosol_optics = .true.
real(kind=jprb), public :: cloud_fraction_threshold = 1.0e-6_jprb
real(kind=jprb), public :: cloud_mixing_ratio_threshold = 1.0e-9_jprb
integer, public :: i_overlap_scheme = IOverlapExponentialRandom
logical, public :: use_beta_overlap = .false.
logical, public :: use_vectorizable_generator = .false.
integer, public :: i_cloud_pdf_shape = IPdfShapeGamma
real(kind=jprb), public :: cloud_inhom_decorr_scaling = 0.5_jprb
real(kind=jprb), public :: clear_to_thick_fraction = 0.0_jprb
real(kind=jprb), public :: overhead_sun_factor = 0.0_jprb
real(kind=jprb), public :: min_gas_od_lw = 1.0e-15_jprb
real(kind=jprb), public :: min_gas_od_sw = 0.0_jprb
real(kind=jprb), public :: max_gas_od_3d = 8.0_jprb
real(kind=jprb), public :: max_cloud_od = 16.0_jprb
logical, public :: do_lw_cloud_scattering = .true.
logical, public :: do_lw_aerosol_scattering = .true.
integer, public :: nregions = 3
integer, public :: i_solver_sw = ISolverMcICA
integer, public :: i_solver_lw = ISolverMcICA
logical, public :: do_sw_delta_scaling_with_gases = .false.
integer, public :: i_gas_model = IGasModelIFSRRTMG
real(kind=jprb), public :: mono_lw_wavelength = -1.0_jprb
real(kind=jprb), public :: mono_lw_total_od = 0.0_jprb
real(kind=jprb), public :: mono_sw_total_od = 0.0_jprb
real(kind=jprb), public :: mono_sw_single_scattering_albedo = 0.999999_jprb
real(kind=jprb), public :: mono_sw_asymmetry_factor = 0.86_jprb
real(kind=jprb), public :: mono_lw_single_scattering_albedo = 0.538_jprb
real(kind=jprb), public :: mono_lw_asymmetry_factor = 0.925_jprb
integer, public :: i_liq_model = ILiquidModelSOCRATES
integer, public :: i_ice_model = IIceModelBaran
logical, public :: do_nearest_spectral_sw_albedo = .false.
logical, public :: do_nearest_spectral_lw_emiss = .false.
real(kind=jprb), public :: sw_albedo_wavelength_bound(NMaxAlbedoIntervals-1) = -1.0_jprb
real(kind=jprb), public :: lw_emiss_wavelength_bound(NMaxAlbedoIntervals-1) = -1.0_jprb
integer, public :: i_sw_albedo_index(NMaxAlbedoIntervals) = 0
integer, public :: i_lw_emiss_index(NMaxAlbedoIntervals) = 0
logical, public :: do_lw = .true.
logical, public :: do_sw = .true.
logical, public :: do_clear = .true.
logical, public :: do_sw_direct = .true.
logical, public :: do_3d_effects = .true.
character(len=511), public :: cloud_type_name(NMaxCloudTypes) = ["", "", "", "", "", "", "", "", "", "", "", ""]
logical, public :: use_thick_cloud_spectral_averaging(NMaxCloudTypes) = [.true., .true., .true., .true., .true., .true., .true., .true., .true., .true., .true., .true.]
integer, public :: i_3d_sw_entrapment = IEntrapmentExplicit
logical, public :: do_3d_lw_multilayer_effects = .false.
logical, public :: do_lw_side_emissivity = .true.
real(kind=jprb), public :: max_3d_transfer_rate = 10.0_jprb
real(kind=jprb), public :: min_cloud_effective_size = 100.0_jprb
real(kind=jprb), public :: overhang_factor = 0.0_jprb
logical, public :: use_expm_everywhere = .false.
logical, public :: use_aerosols = .false.
integer, public :: n_aerosol_types = 0
integer, public :: i_aerosol_type_map(NMaxAerosolTypes)
logical, public :: do_save_radiative_properties = .false.
logical, public :: do_save_spectral_flux = .false.
logical, public :: do_surface_sw_spectral_flux = .true.
logical, public :: do_lw_derivatives = .false.
logical, public :: do_save_gpoint_flux = .false.
logical, public :: do_setup_ifsrrtm = .true.
logical, public :: do_fu_lw_ice_optics_bug = .false.
integer, public :: iverbosesetup = 2
integer, public :: iverbose = 1
logical, public :: do_canopy_fluxes_sw = .false.
logical, public :: do_canopy_fluxes_lw = .false.
logical, public :: use_canopy_full_spectrum_sw = .false.
logical, public :: use_canopy_full_spectrum_lw = .false.
logical, public :: do_canopy_gases_sw = .false.
logical, public :: do_canopy_gases_lw = .false.
character(len=511), public :: ice_optics_override_file_name = ''
character(len=511), public :: liq_optics_override_file_name = ''
character(len=511), public :: aerosol_optics_override_file_name = ''
character(len=511), public :: gas_optics_sw_override_file_name = ''
character(len=511), public :: gas_optics_lw_override_file_name = ''
character(len=511), public :: cloud_pdf_override_file_name = ''
logical, public :: do_cloud_aerosol_per_sw_g_point = .true.
logical, public :: do_cloud_aerosol_per_lw_g_point = .true.
logical, public :: do_weighted_surface_mapping = .true.
logical, public :: is_consolidated = .false.
real(kind=jprb), public, allocatable, dimension(:,:) :: g_frac_sw
real(kind=jprb), public, allocatable, dimension(:,:) :: g_frac_lw
integer, public, allocatable, dimension(:) :: i_albedo_from_band_sw
integer, public, allocatable, dimension(:) :: i_emiss_from_band_lw
real(kind=jprb), public, allocatable, dimension(:,:) :: sw_albedo_weights
real(kind=jprb), public, allocatable, dimension(:,:) :: lw_emiss_weights
integer, public, allocatable, dimension(:) :: i_band_from_g_lw
integer, public, allocatable, dimension(:) :: i_band_from_g_sw
integer, public, allocatable, dimension(:) :: i_g_from_reordered_g_lw
integer, public, allocatable, dimension(:) :: i_g_from_reordered_g_sw
integer, public, allocatable, dimension(:) :: i_band_from_reordered_g_lw
integer, public, allocatable, dimension(:) :: i_band_from_reordered_g_sw
integer, public, pointer, dimension(:) :: i_spec_from_reordered_g_lw
integer, public, pointer, dimension(:) :: i_spec_from_reordered_g_sw
integer, public :: n_canopy_bands_sw = 1
integer, public :: n_canopy_bands_lw = 1
type(ckd_model_type), public :: gas_optics_sw
type(ckd_model_type), public :: gas_optics_lw
type(cloud_optics_type), public :: cloud_optics
integer, public :: n_cloud_types = 2
type(general_cloud_optics_type), public, allocatable :: cloud_optics_sw(:)
type(general_cloud_optics_type), public, allocatable :: cloud_optics_lw(:)
type(aerosol_optics_type), public :: aerosol_optics
type(pdf_sampler_type), public :: pdf_sampler
character(len=511), public :: ice_optics_file_name
character(len=511), public :: liq_optics_file_name
character(len=511), public :: aerosol_optics_file_name
character(len=511), public :: gas_optics_sw_file_name
character(len=511), public :: gas_optics_lw_file_name
character(len=511), public :: cloud_pdf_file_name
integer, public :: n_g_sw = 0
integer, public :: n_g_lw = 0
integer, public :: n_bands_sw = 0
integer, public :: n_bands_lw = 0
integer, public :: n_spec_sw = 0
integer, public :: n_spec_lw = 0
integer, public :: n_wav_frac_sw = 0
integer, public :: n_wav_frac_lw = 0
integer, public :: n_g_lw_if_scattering = 0
integer, public :: n_bands_lw_if_scattering = 0
logical, public :: is_homogeneous = .false.
logical, public :: do_clouds = .true.

Type-Bound Procedures

procedure , public :: read => read_config_from_namelist Subroutine
procedure , public :: consolidate => consolidate_config Subroutine
procedure , public :: set => set_config Subroutine
procedure , public :: print => print_config Subroutine
procedure , public :: get_sw_weights Subroutine
procedure , public :: define_sw_albedo_intervals Subroutine
procedure , public :: define_lw_emiss_intervals Subroutine
procedure , public :: set_aerosol_wavelength_mono Subroutine
procedure , public :: consolidate_sw_albedo_intervals Subroutine
procedure , public :: consolidate_lw_emiss_intervals Subroutine

Subroutines

public subroutine read_config_from_namelist(this, file_name, unit, is_success)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(inout) :: this
character, intent(in), optional :: file_name
integer, intent(in), optional :: unit
logical, intent(out), optional :: is_success

public subroutine consolidate_config(this)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(inout) :: this

public subroutine set_config(config, directory_name, do_lw, do_sw, do_lw_aerosol_scattering, do_lw_cloud_scattering, do_sw_direct)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(inout) :: config
character(len=*), intent(in), optional :: directory_name
logical, intent(in), optional :: do_lw
logical, intent(in), optional :: do_sw
logical, intent(in), optional :: do_lw_aerosol_scattering
logical, intent(in), optional :: do_lw_cloud_scattering
logical, intent(in), optional :: do_sw_direct

public subroutine print_config(this, iverbose)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(in) :: this
integer, intent(in), optional :: iverbose

public subroutine get_sw_weights(this, wavelength1, wavelength2, nweights, iband, weight, weighting_name)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(in) :: this
real(kind=jprb), intent(in) :: wavelength1
real(kind=jprb), intent(in) :: wavelength2
integer, intent(out) :: nweights
integer, intent(out) :: iband(:)
real(kind=jprb), intent(out) :: weight(:)
character(len=*), intent(in), optional :: weighting_name

public subroutine define_sw_albedo_intervals(this, ninterval, wavelength_bound, i_intervals, do_nearest)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(inout) :: this
integer, intent(in) :: ninterval
real(kind=jprb), intent(in) :: wavelength_bound(ninterval-1)
integer, intent(in) :: i_intervals(ninterval)
logical, intent(in), optional :: do_nearest

public subroutine define_lw_emiss_intervals(this, ninterval, wavelength_bound, i_intervals, do_nearest)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(inout) :: this
integer, intent(in) :: ninterval
real(kind=jprb), intent(in) :: wavelength_bound(ninterval-1)
integer, intent(in) :: i_intervals(ninterval)
logical, intent(in), optional :: do_nearest

public subroutine set_aerosol_wavelength_mono(this, wavelength_mono)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(inout) :: this
real(kind=jprb), intent(in) :: wavelength_mono(:)

public subroutine consolidate_sw_albedo_intervals(this)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(inout) :: this

public subroutine consolidate_lw_emiss_intervals(this)

Arguments

Type IntentOptional Attributes Name
class(config_type), intent(inout) :: this

public subroutine get_enum_code(str, enum_str, var_name, icode)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: str
character(len=*), intent(in) :: enum_str(0:)
character(len=*), intent(in) :: var_name
integer, intent(out) :: icode

public subroutine print_logical(message_str, name, val)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: message_str
character(len=*), intent(in) :: name
logical, intent(in) :: val

public subroutine print_integer(message_str, name, val)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: message_str
character(len=*), intent(in) :: name
integer, intent(in) :: val

public subroutine print_real(message_str, name, val)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: message_str
character(len=*), intent(in) :: name
real(kind=jprb), intent(in) :: val

public subroutine print_enum(message_str, enum_str, name, val)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: message_str
character(len=*), intent(in) :: enum_str(0:)
character(len=*), intent(in) :: name
integer, intent(in) :: val