1 #ifndef ERF_RAD_STRUCT_H_
2 #define ERF_RAD_STRUCT_H_
8 #include <AMReX_ParmParse.H>
9 #include <AMReX_ParallelDescriptor.H>
10 #include <AMReX_Print.H>
11 #include <AMReX_Gpu.H>
43 AMREX_ENUM(AerosolProfileType, Constant, Exponential, Table);
830 if (amrex::ParallelDescriptor::IOProcessor()) {
831 amrex::Print() <<
"WARNING: erf.radiation." << key <<
" = " << value
832 <<
" is below its minimum " <<
lo <<
"; using " <<
lo <<
"\n";
840 if (amrex::ParallelDescriptor::IOProcessor()) {
841 amrex::Print() <<
"WARNING: erf.radiation." << key <<
" = " << value
842 <<
" is above its maximum " <<
hi <<
"; using " <<
hi <<
"\n";
849 if (!std::isfinite(value) || value <= 0.0) {
850 if (amrex::ParallelDescriptor::IOProcessor()) {
851 amrex::Print() <<
"WARNING: erf.radiation." << key <<
" = " << value
852 <<
" must be positive; using " << fallback <<
"\n";
858 void init_params (
bool two_stream_selected, std::string pp_prefix)
860 amrex::ParmParse
pp(pp_prefix);
883 static const char* retired_keys[][2] = {
884 {
"radiation.solar_zenith",
885 "erf.fixed_solar_zenith_angle, which is the cosine of the angle (60 degrees is 0.5)"},
886 {
"radiation.solar_zenith_deg",
887 "erf.fixed_solar_zenith_angle, which is the cosine of the angle (60 degrees is 0.5)"},
888 {
"radiation.S0",
"erf.fixed_total_solar_irradiance"},
889 {
"radiation.earth_sun_distance_enable",
890 "nothing: leave erf.fixed_total_solar_irradiance unset and the irradiance follows the date"},
891 {
"radiation.surface_temp_k",
"erf.rad_t_sfc"},
892 {
"radiation.solar_geometry_dynamic_enable",
893 "nothing: leave erf.fixed_solar_zenith_angle unset and the sun follows start_datetime"},
894 {
"radiation.latitude_deg",
"erf.rad_cons_lat"},
895 {
"radiation.longitude_deg",
"erf.rad_cons_lon"},
896 {
"radiation.day_of_year",
"start_datetime"},
897 {
"radiation.time_zone_offset_hours",
898 "nothing: start_datetime is UTC and the longitude sets the local solar time"},
900 for (
const auto& entry : retired_keys) {
901 if (
pp.contains(entry[0])) {
902 amrex::Abort(std::string(
"erf.") + entry[0] +
" is no longer read by the "
903 "two-stream model; use " + entry[1] +
".");
909 " is the cosine of the solar zenith angle (as for RRTMGP) and cannot "
910 "exceed 1; 60 degrees is 0.5.");
914 amrex::Abort(
"erf.radiation_model = TwoStream needs erf.rad_t_sfc, the surface "
915 "temperature [K] used where no land-surface model or surface layer "
916 "supplies one (the same input RRTMGP requires).");
919 amrex::Abort(
"erf.rad_t_sfc = " + std::to_string(
rad_t_sfc) +
" must be a positive temperature [K].");
923 if (!std::isfinite(
rad_cons_lat) || rad_cons_lat < -90.0 || rad_cons_lat > 90.0) {
924 amrex::Abort(
"erf.rad_cons_lat = " + std::to_string(
rad_cons_lat) +
" must lie in [-90, 90] degrees.");
926 if (!std::isfinite(
rad_cons_lon) || rad_cons_lon < -180.0 || rad_cons_lon > 180.0) {
927 amrex::Abort(
"erf.rad_cons_lon = " + std::to_string(
rad_cons_lon) +
" must lie in [-180, 180] degrees.");
933 if (
pp.contains(
"rad_freq_in_steps") && amrex::ParallelDescriptor::IOProcessor()) {
934 amrex::Print() <<
"WARNING: erf.rad_freq_in_steps is not read by the two-stream model, "
935 "which runs every step.\n";
937 std::string tau_model_str =
"per_layer";
938 pp.query(
"radiation.tau_model", tau_model_str);
939 if (tau_model_str ==
"per_layer") {
941 }
else if (tau_model_str ==
"mass") {
947 if (amrex::ParallelDescriptor::IOProcessor()) {
948 amrex::Print() <<
"WARNING: unknown erf.radiation.tau_model '"
949 << tau_model_str <<
"'; valid values are per_layer "
950 "and mass. Using per_layer.\n";
979 std::string tau_profile_type_str =
"constant";
980 pp.query(
"radiation.tau_profile_type", tau_profile_type_str);
981 if (tau_profile_type_str ==
"constant") {
983 }
else if (tau_profile_type_str ==
"cloud_layer") {
988 if (amrex::ParallelDescriptor::IOProcessor()) {
989 amrex::Print() <<
"WARNING: unknown erf.radiation.tau_profile_type '"
990 << tau_profile_type_str <<
"'; valid values are "
991 "constant and cloud_layer. Using constant, so no "
992 "cloud layer is applied.\n";
1040 if (amrex::ParallelDescriptor::IOProcessor()) {
1041 amrex::Print() <<
"WARNING: unknown erf.radiation.diag_callsite_mode '"
1043 "pre_only and post_only. Using both.\n";
1103 std::string aerosol_profile_type_str =
"constant";
1104 pp.query(
"radiation.aerosol_profile_type", aerosol_profile_type_str);
1105 if (aerosol_profile_type_str ==
"constant") {
1107 }
else if (aerosol_profile_type_str ==
"exponential") {
1109 }
else if (aerosol_profile_type_str ==
"table") {
1114 if (amrex::ParallelDescriptor::IOProcessor()) {
1115 amrex::Print() <<
"WARNING: erf.radiation.aerosol_profile_type = table is "
1116 "not implemented and contributes no aerosol optical "
1117 "depth. Use constant or exponential.\n";
1122 if (amrex::ParallelDescriptor::IOProcessor()) {
1123 amrex::Print() <<
"WARNING: unknown erf.radiation.aerosol_profile_type '"
1124 << aerosol_profile_type_str <<
"'; valid values are "
1125 "constant and exponential. Using constant.\n";
1148 pp.query_enum_sloppy(
"radiation.seb_turbulent_flux_source",
1152 pp.query(
"radiation.seb_turbulent_flux_source", value);
1153 amrex::Abort(
"erf.radiation.seb_turbulent_flux_source must be surface_layer "
1154 "or defaults, not '" + value +
"'");
1162 if (
pp.contains(
"radiation.seb_soil_moisture_wilt") ||
1163 pp.contains(
"radiation.seb_soil_moisture_fc")) {
1164 amrex::Abort(
"erf.radiation.seb_soil_type sets the wilting point and field "
1165 "capacity from Noah-MP's soil table; do not also give "
1166 "seb_soil_moisture_wilt or seb_soil_moisture_fc");
1170 amrex::Abort(
"erf.radiation.seb_soil_type = " + std::to_string(
seb_soil_type) +
1171 " is not a Noah-MP soil category with a field capacity above its "
1172 "wilting point (1-19, not 14, water; see ERF_NoahMPSoilTable.H)");
1182 if (veg ==
nullptr) {
1183 amrex::Abort(
"erf.radiation.seb_vegetation_type = " + std::to_string(
seb_vegetation_type) +
1184 " is not a Noah-MP MODIS land-use category (1-20; see "
1185 "ERF_NoahMPVegetationTable.H)");
1189 if (!(veg->
z0 > 0.0)) {
1190 amrex::Abort(
"erf.radiation.seb_vegetation_type = " + std::to_string(
seb_vegetation_type) +
1191 " has no vegetation in Noah-MP's table (Z0MVT = 0, LAI 0 all year). "
1192 "For bare land leave seb_vegetation_type at 0: the soil's resistance "
1193 "and roughness (Z0SOIL) then apply.");
1196 amrex::Abort(
"erf.radiation.seb_vegetation_type needs "
1197 "erf.radiation.seb_surface_layer_uses_moisture = true and "
1198 "erf.radiation.seb_soil_type (the bare-soil resistance uses the "
1199 "soil's porosity and Clapp-Hornberger b)");
1203 amrex::Abort(
"erf.radiation.seb_vegetation_fraction must be in [0, 1]; got " +
1206 if (
pp.contains(
"radiation.seb_leaf_area_index")) {
1208 amrex::Abort(
"erf.radiation.seb_leaf_area_index must be >= 0; got " +
1215 amrex::ParmParse pp_top;
1217 if (!pp_top.query(
"start_datetime", start) ||
1219 amrex::Abort(
"erf.radiation.seb_vegetation_type: give "
1220 "erf.radiation.seb_leaf_area_index, or a valid start_datetime "
1221 "(YYYY-MM-DD HH:MM:SS) so that it can be taken from the table");
1225 if (amrex::ParallelDescriptor::IOProcessor()) {
1226 amrex::Print() <<
"NOTE: erf.radiation.seb_leaf_area_index = "
1229 <<
", fixed for the run.\n";
1263 if (amrex::ParallelDescriptor::IOProcessor()) {
1264 amrex::Print() <<
"NOTE: erf.radiation.seb_prognostic_enable = true "
1265 "also enables seb_enable and "
1266 "seb_diagnostic_enable, which it depends on.\n";
1293 amrex::Abort(
"erf.radiation.seb_surface_layer_uses_skin = true needs "
1294 "erf.radiation.seb_prognostic_enable = true: without it the "
1295 "skin temperature does not evolve");
1298 amrex::Abort(
"erf.radiation.seb_surface_layer_uses_skin = true needs "
1299 "erf.radiation.seb_turbulent_flux_source = surface_layer: the "
1300 "balance must remove the heat flux the surface layer computes "
1309 pp.contains(
"radiation.seb_soil_moisture_fc")) {
1313 amrex::Abort(
"erf.radiation.seb_soil_moisture_wilt and seb_soil_moisture_fc must "
1314 "satisfy 0 <= wilt < fc <= 1 (volumetric water contents); got wilt = " +
1322 (
pp.contains(
"radiation.seb_soil_moisture_wilt") ||
1323 pp.contains(
"radiation.seb_soil_moisture_fc"))) {
1324 amrex::Abort(
"erf.radiation.seb_soil_moisture_wilt and seb_soil_moisture_fc are used "
1325 "only with erf.radiation.seb_surface_layer_uses_moisture = true");
1328 (
pp.contains(
"radiation.seb_vegetation_fraction") ||
1329 pp.contains(
"radiation.seb_leaf_area_index"))) {
1330 amrex::Abort(
"erf.radiation.seb_vegetation_fraction and seb_leaf_area_index are used "
1331 "only with erf.radiation.seb_vegetation_type");
1336 amrex::Abort(
"erf.radiation.seb_surface_layer_uses_moisture = true needs "
1337 "erf.radiation.seb_surface_layer_uses_skin = true: the surface "
1338 "mixing ratio is the saturation value at the balance's skin "
1342 amrex::ParallelDescriptor::IOProcessor()) {
1343 amrex::Print() <<
"NOTE: erf.radiation.seb_surface_layer_uses_moisture: the soil "
1344 "starts at or below the wilting point (seb_q_sfc_default = "
1348 ?
"no transpiration, and the bare soil's pore air is nearly "
1349 "dry (Noah-MP's relative humidity exp(psi g / (R_v T))), so it "
1350 "hardly evaporates and may take up vapour."
1351 :
"no evaporation at all.")
1352 <<
" Set seb_q_sfc_default (and seb_q_deep_default, which q_s "
1353 "restores to) to the soil's water content if that is not meant.\n";
1358 amrex::ParallelDescriptor::IOProcessor()) {
1359 amrex::Print() <<
"NOTE: erf.radiation.seb_surface_layer_uses_moisture: "
1362 <<
"), and q_s restores toward it over seb_moisture_restore_timescale_s"
1364 " Set seb_q_deep_default to the deep soil's water content if that "
1373 amrex::ParallelDescriptor::IOProcessor()) {
1374 amrex::Print() <<
"WARNING: erf.radiation.seb_grdflx_default = " <<
seb_grdflx_default
1375 <<
" with seb_prognostic_enable: the force-restore term already "
1376 "carries the ground heat flux, so this counts it twice.\n";
1383 if (!(std::isfinite(value) && value > 0.0)) {
1384 amrex::Abort(std::string(
"erf.radiation.") +
name +
" must be > 0; got " +
1385 std::to_string(value));
1404 "erf.radiation.seb_*: the land roughness from Noah-MP's tables is not positive");
1414 const bool given =
pp.contains(
"radiation.seb_surface_heat_capacity");
1416 if (amrex::ParallelDescriptor::IOProcessor()) {
1417 amrex::Print() <<
"NOTE: erf.radiation.seb_surface_heat_capacity = "
1419 << (given ?
" as given; Noah-MP soil category " :
1420 ", from Noah-MP soil category ")
1422 <<
" (heat capacity " << c <<
" J/m^3/K, conductivity " << lambda
1424 << (given ?
" gives " + std::to_string(
derived) : std::string())
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(m_cloud_chamber_config.active, "Cloud Chamber: initializer reached without a parsed configuration")
Noah-MP's soil parameters by soil category, for the two-stream surface energy balance (erf....
constexpr amrex::Real noahmp_soil_roughness
Definition: ERF_NoahMPSoilTable.H:42
const NoahMPSoilParams * noahmp_soil_params(int category) noexcept
The parameters of STAS soil category category (1-19), as Noah-MP reads them.
Definition: ERF_NoahMPSoilTable.H:49
constexpr amrex::Real noahmp_soil_heat_capacity
Definition: ERF_NoahMPSoilTable.H:35
Noah-MP's canopy-resistance parameters, roughness length and monthly leaf area index by land-use cate...
amrex::Real noahmp_leaf_area_index(const NoahMPVegetationParams ¶ms, amrex::Real day, amrex::Real days_in_year, bool southern) noexcept
Leaf area index of params on day of year day, interpolated between the monthly values as Noah-MP does...
Definition: ERF_NoahMPVegetationTable.H:98
const NoahMPVegetationParams * noahmp_vegetation_params(int category) noexcept
The parameters of MODIS land-use category category (1-20), as Noah-MP reads them.
Definition: ERF_NoahMPVegetationTable.H:41
bool noahmp_day_of_year(const std::string &datetime, amrex::Real &day, amrex::Real &days_in_year)
The day of the year, as Noah-MP counts it, of a date "YYYY-MM-DD[ HH:MM[:SS]]" (ERF's start_datetime)...
Definition: ERF_NoahMPVegetationTable.H:130
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:105
AMREX_ENUM(TauProfileType, Constant, CloudLayer)
Optical depth profile type for the two-stream solver.
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Simplified SEB – the two-stream model's surface energy balance, as pure functions.
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real seb_soil_thermal_conductivity(amrex::Real theta, amrex::Real theta_sat, amrex::Real quartz)
Thermal conductivity of unfrozen soil [W/m/K], Noah-MP's Johansen form (SoilThermalPropertyMod): soli...
Definition: ERF_SimplifiedSEB.H:352
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real seb_force_restore_heat_capacity(amrex::Real lambda, amrex::Real c, amrex::Real tau)
Surface heat capacity [J/m^2/K] of the force-restore balance for a soil of volumetric heat capacity c...
Definition: ERF_SimplifiedSEB.H:374
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real seb_soil_heat_capacity(amrex::Real theta, amrex::Real theta_sat, amrex::Real c_soil)
Volumetric heat capacity of unfrozen soil [J/m^3/K], as Noah-MP forms it (SoilThermalPropertyMod): wa...
Definition: ERF_SimplifiedSEB.H:338
Definition: ERF_SurfaceLayer.H:60
@ theta
Definition: ERF_Kessler.H:26
@ tmp
Definition: ERF_AdvanceWSM6.cpp:116
Definition: ERF_Derive.cpp:172
Definition: ERF_NoahMPSoilTable.H:20
amrex::Real smc_ref
REFSMC reference soil moisture, field capacity [m^3/m^3].
Definition: ERF_NoahMPSoilTable.H:24
amrex::Real smc_wilt
WLTSMC wilting point [m^3/m^3].
Definition: ERF_NoahMPSoilTable.H:27
amrex::Real smc_max
MAXSMC saturated soil moisture (porosity) [m^3/m^3].
Definition: ERF_NoahMPSoilTable.H:23
amrex::Real quartz
QTZ quartz fraction [1].
Definition: ERF_NoahMPSoilTable.H:28
Definition: ERF_NoahMPVegetationTable.H:23
amrex::Real z0
Z0MVT momentum roughness length of the vegetation [m].
Definition: ERF_NoahMPVegetationTable.H:29
Container holding radiation-related choices and parameters.
Definition: ERF_RadStruct.H:86
amrex::Real lw_kabs_dry
Dry-air gray LW mass absorption coefficient [m^2/kg].
Definition: ERF_RadStruct.H:204
bool aerosol_enable
Enable prescribed bulk aerosol/turbidity optical depth. When true, aerosol optical depth is added on ...
Definition: ERF_RadStruct.H:700
TauModel tau_model
Optical depth model: "per_layer" (default, fixed tau per layer) or "mass" (from the layer mass path i...
Definition: ERF_RadStruct.H:171
amrex::Real sw_kabs_vapor
Mass model, SW: water-vapor gray absorption coefficient [m^2/kg].
Definition: ERF_RadStruct.H:180
amrex::Real cloud_top_height_m
Cloud layer top height [m]. Only used when tau_profile_type == CloudLayer. Must be >= cloud_base_heig...
Definition: ERF_RadStruct.H:292
static void reset_nonpositive(const char *key, amrex::Real &value, amrex::Real fallback)
Definition: ERF_RadStruct.H:847
amrex::Real aerosol_tau_surface
Total-column aerosol optical depth at surface [dimensionless]. Used for AerosolProfileType::Exponenti...
Definition: ERF_RadStruct.H:732
int rad_orbital_year
erf.rad_orbital_year and the orbital overrides: negative means the year of the timestamp and the Berg...
Definition: ERF_RadStruct.H:161
amrex::Real fixed_solar_zenith_angle
erf.fixed_solar_zenith_angle: the COSINE of the solar zenith angle (mu0), as RRTMGP takes it,...
Definition: ERF_RadStruct.H:136
bool sw_enabled
Enable shortwave (solar) radiation computation. Only used by the two-stream model.
Definition: ERF_RadStruct.H:98
amrex::Real cloud_asymmetry_factor
Cloud scattering asymmetry factor in [-1, 1], used instead of asymmetry_factor for levels where the c...
Definition: ERF_RadStruct.H:347
int seb_vegetation_type
Noah-MP land-use category (modified IGBP MODIS, 1-20 except the unvegetated 15, 16 and 17,...
Definition: ERF_RadStruct.H:471
std::string diag_file
Output file path for radiation diagnostics CSV. Paths are relative to the simulation working director...
Definition: ERF_RadStruct.H:222
static void clamp_high(const char *key, amrex::Real &value, amrex::Real hi)
Definition: ERF_RadStruct.H:837
amrex::Real tau_lw_per_layer
Longwave optical depth per layer (constant for all layers). Used in gray-gas LW two-stream solver....
Definition: ERF_RadStruct.H:118
amrex::Real surface_albedo_sw
Shortwave surface albedo fallback [0, 1] for per-column heterogeneous-surface-property resolution....
Definition: ERF_RadStruct.H:356
amrex::Real surface_emissivity_lw
Longwave surface emissivity fallback [0, 1] for per-column heterogeneous-surface-property resolution....
Definition: ERF_RadStruct.H:371
amrex::Real rad_orbital_mvelp
Definition: ERF_RadStruct.H:164
amrex::Real seb_grdflx_default
Fallback SEB ground heat flux [W/m^2]. The force-restore restoring term already represents the flux i...
Definition: ERF_RadStruct.H:512
amrex::Real diag_dedup_tol
Tolerance for time equality in duplicate guard [s]. Times within this tolerance are considered equal....
Definition: ERF_RadStruct.H:273
amrex::Real seb_restore_timescale_s
Force-restore timescale for surface temperature [s]. Relaxation time constant toward T_deep in progno...
Definition: ERF_RadStruct.H:569
std::string diag_callsite_mode
Call-site filtering mode: "both" (pre+post rows), "pre_only", or "post_only".
Definition: ERF_RadStruct.H:266
bool diag_regtest_line_enable
Enable RADIATION_DIAG: line emission. Controls regtest-parsing diagnostics line. Default true.
Definition: ERF_RadStruct.H:253
amrex::Real sw_kext_cloud
Mass model, SW: cloud-water extinction coefficient m^2/kg.
Definition: ERF_RadStruct.H:183
amrex::Real tau_sw_coeff_qv
Shortwave optical depth coefficient for water vapor [dimensionless]. Dynamic SW tau = tau_sw_coeff_qv...
Definition: ERF_RadStruct.H:636
amrex::Real fixed_total_solar_irradiance
erf.fixed_total_solar_irradiance: top-of-atmosphere irradiance [W/m^2] when >= 0. Otherwise (default)...
Definition: ERF_RadStruct.H:143
bool tau_lw_dynamic_enable
Enable dynamic longwave optical depth diagnosis from moisture/clouds. When true, LW optical depth is ...
Definition: ERF_RadStruct.H:627
amrex::Real seb_lh_default
Fallback SEB latent heat flux [W/m^2].
Definition: ERF_RadStruct.H:505
void init_params(bool two_stream_selected, std::string pp_prefix)
Definition: ERF_RadStruct.H:858
amrex::Real seb_moisture_restore_timescale_s
Force-restore timescale for surface moisture [s]. Relaxation time constant toward q_deep in prognosti...
Definition: ERF_RadStruct.H:585
amrex::Real seb_lw_flux_default
Fallback SEB surface net longwave flux [W/m^2].
Definition: ERF_RadStruct.H:397
amrex::Real tau_sw_coeff_qc
Shortwave optical depth coefficient for cloud liquid water [dimensionless]. Default 0....
Definition: ERF_RadStruct.H:644
amrex::Real aerosol_tau_per_layer
Constant aerosol optical depth per layer [dimensionless]. Used for AerosolProfileType::Constant profi...
Definition: ERF_RadStruct.H:716
bool seb_surface_layer_uses_skin
Two-way coupling with the zlo surface layer: the surface layer takes its land surface temperature fro...
Definition: ERF_RadStruct.H:413
amrex::Real seb_q_sfc_default
Fallback SEB surface moisture, and the initial value of the prognostic one. With seb_prognostic_enabl...
Definition: ERF_RadStruct.H:520
amrex::Real rad_orbital_eccentricity
Definition: ERF_RadStruct.H:162
amrex::Real single_scattering_albedo
Clear-sky (background gas) single-scattering albedo in [0, 1] for the SW diffuse (scattering) two-str...
Definition: ERF_RadStruct.H:318
bool diag_csv_enable
Enable CSV file append behavior. When false, no file writes; other enabled streams may still print....
Definition: ERF_RadStruct.H:260
bool tau_sw_dynamic_enable
Definition: ERF_RadStruct.H:628
bool uses_two_stream_radiation() const noexcept
Check if two-stream radiation is active.
Definition: ERF_RadStruct.H:1458
amrex::Real seb_t_deep_default
Fallback SEB deep soil temperature [K].
Definition: ERF_RadStruct.H:525
AerosolProfileType aerosol_profile_type
Aerosol optical depth profile type: Constant, Exponential, or Table.
Definition: ERF_RadStruct.H:709
amrex::Real seb_prognostic_t_max_k
Maximum clamping bound for prognostic surface temperature [K]. After each Euler update,...
Definition: ERF_RadStruct.H:602
amrex::Real rad_t_sfc
erf.rad_t_sfc: surface temperature [K] used as the longwave boundary condition wherever no land-surfa...
Definition: ERF_RadStruct.H:151
bool seb_prognostic_enable
Enable prognostic SEB surface temperature and moisture evolution. When true, integrates SEB residual ...
Definition: ERF_RadStruct.H:550
bool seb_use_radiation_fluxes
Take the SEB's net surface shortwave and longwave fluxes from the two-stream sweep itself (per column...
Definition: ERF_RadStruct.H:387
amrex::Real seb_prognostic_t_min_k
Minimum clamping bound for prognostic surface temperature [K]. After each Euler update,...
Definition: ERF_RadStruct.H:594
amrex::Real tau_lw_coeff_qc
Longwave optical depth coefficient for cloud liquid water [dimensionless]. Default 0....
Definition: ERF_RadStruct.H:660
amrex::Real rad_orbital_obliquity
Definition: ERF_RadStruct.H:163
amrex::Real cloud_fraction
Cloud fraction in [0, 1] used to blend clear-sky and cloudy-column fluxes: F = (1 - cloud_fraction) *...
Definition: ERF_RadStruct.H:308
amrex::Real cloud_single_scattering_albedo
Cloud single-scattering albedo in [0, 1], used instead of single_scattering_albedo for levels where t...
Definition: ERF_RadStruct.H:338
amrex::Real lw_kabs_cloud
Cloud-water LW mass absorption coefficient m^2/kg.
Definition: ERF_RadStruct.H:210
amrex::Real sw_cloud_omega
Mass model, SW: cloud-water single-scattering albedo.
Definition: ERF_RadStruct.H:186
amrex::Real sw_kscat_dry
Mass model, SW: dry-air (Rayleigh) scattering coefficient [m^2/kg], omega = 1, g = 0.
Definition: ERF_RadStruct.H:177
amrex::Real sw_kabs_dry
Mass model, SW: dry-air gray absorption coefficient [m^2/kg].
Definition: ERF_RadStruct.H:174
amrex::Real seb_soil_moisture_wilt
Wilting point [m^3/m^3]: at or below it the soil-water factor is 0, so the vegetation does not transp...
Definition: ERF_RadStruct.H:439
amrex::Real seb_leaf_area_index
Leaf area index [m^2/m^2] of the vegetated fraction (seb_vegetation_type; giving it otherwise stops a...
Definition: ERF_RadStruct.H:486
amrex::Real asymmetry_factor
Clear-sky (background gas) scattering asymmetry factor in [-1, 1] (0 = isotropic scattering,...
Definition: ERF_RadStruct.H:326
static void clamp_low(const char *key, amrex::Real &value, amrex::Real lo)
Read radiation options from the input parameter database.
Definition: ERF_RadStruct.H:827
bool seb_surface_layer_uses_moisture
Two-way coupling of moisture as well: the surface layer takes its land surface mixing ratio from the ...
Definition: ERF_RadStruct.H:430
amrex::Real cloud_fraction_qc_scale
Cloud water [kg/kg] at which the liquid-water term alone gives a cloud fraction of 1: cf += min(1,...
Definition: ERF_RadStruct.H:692
bool cloud_fraction_prog_enable
Enable prognostic cloud fraction diagnosis from RH/qc. When true, cloud fraction is computed per-leve...
Definition: ERF_RadStruct.H:668
amrex::Real seb_prognostic_q_max
Maximum clamping bound for prognostic surface moisture [kg/kg]. After each Euler update,...
Definition: ERF_RadStruct.H:618
bool lw_enabled
Enable longwave (thermal) radiation computation. Only used by the two-stream model.
Definition: ERF_RadStruct.H:104
int seb_soil_type
Noah-MP soil category (STAS, 1-19, not 14 (water), as in NoahmpTable.TBL; see ERF_NoahMPSoilTable....
Definition: ERF_RadStruct.H:459
amrex::Real seb_soil_moisture_fc
Field capacity [m^3/m^3]: at or above it the soil-water factor is 1, so without seb_soil_type the sur...
Definition: ERF_RadStruct.H:447
amrex::Real surface_albedo_sw_diffuse
Shortwave surface albedo for diffuse light [0,1]. A negative value (default) uses surface_albedo_sw f...
Definition: ERF_RadStruct.H:362
amrex::Real cloud_base_height_m
Cloud layer base height [m]. Only used when tau_profile_type == CloudLayer.
Definition: ERF_RadStruct.H:286
amrex::Real lw_kabs_vapor
Water-vapor gray LW mass absorption coefficient [m^2/kg].
Definition: ERF_RadStruct.H:207
amrex::Real tau_per_layer
Shortwave optical depth per layer (constant for all layers). Used in Beer-Lambert direct-beam formula...
Definition: ERF_RadStruct.H:111
amrex::Real seb_moisture_layer_depth_m
Effective surface moisture layer depth [m]. Used in force-restore prognostic q_s equation: dq_s/dt = ...
Definition: ERF_RadStruct.H:577
amrex::Real seb_vegetation_fraction
Vegetated fraction of the surface [0, 1] (seb_vegetation_type; giving it otherwise stops at start-up)...
Definition: ERF_RadStruct.H:477
SEBTurbulentFluxSource seb_turbulent_flux_source
Source of the SEB's sensible and latent heat fluxes when no land-surface model supplies them: "surfac...
Definition: ERF_RadStruct.H:404
amrex::Real tau_lw_coeff_qv
Longwave optical depth coefficient for water vapor [dimensionless]. Dynamic LW tau = tau_lw_coeff_qv ...
Definition: ERF_RadStruct.H:652
amrex::Real seb_hfx_default
Fallback SEB sensible heat flux [W/m^2].
Definition: ERF_RadStruct.H:500
amrex::Real cloud_fraction_rh_max
Maximum relative humidity threshold for cloud fraction diagnosis [0, 1]. Must be >= cloud_fraction_rh...
Definition: ERF_RadStruct.H:684
amrex::Real sw_cloud_g
Mass model, SW: cloud-water asymmetry factor.
Definition: ERF_RadStruct.H:189
amrex::Real rad_cons_lon
Definition: ERF_RadStruct.H:155
bool lw_mass_absorption_enable
Gray longwave optical depth from the layer mass path instead of the fixed tau_lw_per_layer (also sele...
Definition: ERF_RadStruct.H:201
amrex::Real cloud_tau_per_layer
Additional optical depth per layer contributed by the cloud, added on top of the clear-sky tau_per_la...
Definition: ERF_RadStruct.H:300
amrex::Real aerosol_scale_height_m
Scale height for exponential aerosol profile [m]. Controls decay rate: tau_aerosol(k) = aerosol_tau_s...
Definition: ERF_RadStruct.H:724
amrex::Real seb_land_roughness
Land roughness length [m] the coupled surface layer takes when erf.most.z0 is not given (derived,...
Definition: ERF_RadStruct.H:495
bool diag_tagged_enable
Enable tagged [RAD][...] debug lines. Controls emission of bracketed-tag debug output....
Definition: ERF_RadStruct.H:246
amrex::Real seb_q_deep_default
Deep soil moisture the prognostic q_s restores to, in q_s's units (see seb_q_sfc_default).
Definition: ERF_RadStruct.H:531
amrex::Real rad_cons_lat
erf.rad_cons_lat / erf.rad_cons_lon: site latitude and longitude [degrees] when the grid has no lat/l...
Definition: ERF_RadStruct.H:154
amrex::Real seb_sw_flux_default
Fallback SEB surface net shortwave flux [W/m^2].
Definition: ERF_RadStruct.H:392
bool diag_enable
Master switch for radiation diagnostics emission. When false, no diagnostics output (stdout/tagged/re...
Definition: ERF_RadStruct.H:232
amrex::Real seb_prognostic_q_min
Minimum clamping bound for prognostic surface moisture [kg/kg]. After each Euler update,...
Definition: ERF_RadStruct.H:610
amrex::Real cloud_fraction_rh_min
Minimum relative humidity threshold for cloud fraction diagnosis [0, 1]. Cloud fraction ramps from 0 ...
Definition: ERF_RadStruct.H:676
bool seb_enable
Master switch for simplified SEB infrastructure. When false (default), no SEB MultiFabs are allocated...
Definition: ERF_RadStruct.H:377
bool diag_stdout_enable
Enable human-readable stdout diagnostics block. Controls tagged [RAD][...] debug line emission (when ...
Definition: ERF_RadStruct.H:239
bool enabled
True when erf.radiation_model = TwoStream. Set by init_params from the model SolverChoice read; the e...
Definition: ERF_RadStruct.H:92
int verbosity
Debug verbosity level (0=off, 1+=debug output). Gated debug prints only emit when this is >= 1.
Definition: ERF_RadStruct.H:216
amrex::Real seb_surface_heat_capacity
Effective surface heat capacity [J/(m^2*K)]. Used in force-restore prognostic T_s equation: dT_s/dt =...
Definition: ERF_RadStruct.H:561
TauProfileType tau_profile_type
Optical depth profile type: "constant" (default, the thickness-independent tau) or "cloud_layer" (add...
Definition: ERF_RadStruct.H:280
bool seb_diagnostic_enable
Enable diagnostic SEB residual computation and reporting. When true, computes and reports SEB residua...
Definition: ERF_RadStruct.H:541