|
ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
|
Container holding radiation-related choices and parameters. More...
#include <ERF_RadStruct.H>

Public Member Functions | |
| void | init_params (bool two_stream_selected, int max_level, std::string pp_prefix) |
| bool | uses_two_stream_radiation () const noexcept |
| Check if two-stream radiation is active. More... | |
Static Public Member Functions | |
| static void | clamp_low (const char *key, amrex::Real &value, amrex::Real lo) |
| Read radiation options from the input parameter database. More... | |
| static void | clamp_high (const char *key, amrex::Real &value, amrex::Real hi) |
| static void | reset_nonpositive (const char *key, amrex::Real &value, amrex::Real fallback) |
Public Attributes | |
| bool | enabled = false |
| True when erf.radiation_model = TwoStream. Set by init_params from the model SolverChoice read; the erf.radiation.* sub-options are read only then. More... | |
| bool | sw_enabled = true |
| Enable shortwave (solar) radiation computation. Only used by the two-stream model. More... | |
| bool | lw_enabled = true |
| Enable longwave (thermal) radiation computation. Only used by the two-stream model. More... | |
| amrex::Real | tau_per_layer = 0.05 |
| Shortwave optical depth per layer (constant for all layers). Used in Beer-Lambert direct-beam formula. Only used by the two-stream model. More... | |
| amrex::Real | tau_lw_per_layer = 1.0 |
| Longwave optical depth per layer (constant for all layers). Used in gray-gas LW two-stream solver. Only used by the two-stream model. More... | |
| TauModel | tau_model = TauModel::PerLayer |
| Optical depth model: "per_layer" (default, fixed tau per layer) or "mass" (from the layer mass path in both bands; see TauModel). More... | |
| amrex::Real | sw_kabs_dry = 4.0e-6 |
| Mass model, SW: dry-air gray absorption coefficient [m^2/kg]. More... | |
| amrex::Real | sw_kscat_dry = 3.0e-6 |
| Mass model, SW: dry-air (Rayleigh) scattering coefficient [m^2/kg], omega = 1, g = 0. More... | |
| amrex::Real | sw_kabs_vapor = 4.0e-3 |
| Mass model, SW: water-vapor gray absorption coefficient [m^2/kg]. More... | |
| amrex::Real | sw_kext_cloud = 150.0 |
| Mass model, SW: cloud-water extinction coefficient m^2/kg. More... | |
| amrex::Real | sw_cloud_omega = 0.9999 |
| Mass model, SW: cloud-water single-scattering albedo. More... | |
| amrex::Real | sw_cloud_g = 0.85 |
| Mass model, SW: cloud-water asymmetry factor. More... | |
| bool | lw_mass_absorption_enable = false |
| Gray longwave optical depth from the layer mass path instead of the fixed tau_lw_per_layer (also selected by tau_model = mass): tau_lw(k) = rho dz (lw_kabs_dry + lw_kabs_vapor qv + lw_kabs_cloud qc) The cloud term is the Stephens (1978) emissivity, eps = 1 - exp(-a LWP) with a = 0.158 m^2/g, written as an optical depth. The column optical depth is then independent of the vertical resolution. The cloud-band, moisture-coefficient and aerosol additions still apply on top. Default false keeps tau_lw_per_layer. More... | |
| amrex::Real | lw_kabs_dry = 1.0e-4 |
| Dry-air gray LW mass absorption coefficient [m^2/kg]. More... | |
| amrex::Real | lw_kabs_vapor = 0.1 |
| Water-vapor gray LW mass absorption coefficient [m^2/kg]. More... | |
| amrex::Real | lw_kabs_cloud = 158.0 |
| Cloud-water LW mass absorption coefficient m^2/kg. More... | |
| int | verbosity = 0 |
| Debug verbosity level (0=off, 1+=debug output). Gated debug prints only emit when this is >= 1. More... | |
| std::string | diag_file = "radiation_diag.dat" |
| Output file path for radiation diagnostics CSV. Paths are relative to the simulation working directory. More... | |
| bool | diag_enable = false |
| Master switch for radiation diagnostics emission. When false, no diagnostics output (stdout/tagged/regtest/csv). Default false: a run that did not ask for the diagnostics should not write a CSV row and a stdout block on every step. The per-stream switches below stay on by default, so setting this one input to true turns the whole set on. More... | |
| bool | diag_stdout_enable = true |
| Enable human-readable stdout diagnostics block. Controls tagged [RAD][...] debug line emission (when verbosity >= 1). Default true. More... | |
| bool | diag_tagged_enable = true |
| Enable tagged [RAD][...] debug lines. Controls emission of bracketed-tag debug output. Default true. More... | |
| bool | diag_regtest_line_enable = true |
| Enable RADIATION_DIAG: line emission. Controls regtest-parsing diagnostics line. Default true. More... | |
| bool | diag_csv_enable = true |
| Enable CSV file append behavior. When false, no file writes; other enabled streams may still print. Default true. More... | |
| std::string | diag_callsite_mode = "both" |
| Call-site filtering mode: "both" (pre+post rows), "pre_only", or "post_only". More... | |
| amrex::Real | diag_dedup_tol = 1.0e-12 |
| Tolerance for time equality in duplicate guard [s]. Times within this tolerance are considered equal. Default 1e-12. More... | |
| TauProfileType | tau_profile_type = TauProfileType::Constant |
| Optical depth profile type: "constant" (default, the thickness-independent tau) or "cloud_layer" (adds height-varying cloud optical depth between cloud_base_height_m and cloud_top_height_m). More... | |
| amrex::Real | cloud_base_height_m = 500.0 |
| Cloud layer base height [m]. Only used when tau_profile_type == CloudLayer. More... | |
| amrex::Real | cloud_top_height_m = 1000.0 |
| Cloud layer top height [m]. Only used when tau_profile_type == CloudLayer. Must be >= cloud_base_height_m. More... | |
| amrex::Real | cloud_tau_per_layer = 0.5 |
| Additional optical depth per layer contributed by the cloud, added on top of the clear-sky tau_per_layer/tau_lw_per_layer background within [cloud_base_height_m, cloud_top_height_m]. Only used when tau_profile_type == CloudLayer. More... | |
| amrex::Real | cloud_fraction = 0.0 |
| Cloud fraction in [0, 1] used to blend clear-sky and cloudy-column fluxes: F = (1 - cloud_fraction) * F_clear + cloud_fraction * F_cloudy. Default 0.0 (fully clear sky), which reduces exactly to the clear-sky column regardless of tau_profile_type. More... | |
| amrex::Real | single_scattering_albedo = 0.0 |
| Clear-sky (background gas) single-scattering albedo in [0, 1] for the SW diffuse (scattering) two-stream calculation. Default 0.0 means the clear-sky column is purely absorbing, and the diffuse SW contribution from the clear-sky column is exactly zero — reducing exactly to the direct-beam-only result. Only used by the two-stream model and sw_enabled == true. More... | |
| amrex::Real | asymmetry_factor = 0.0 |
Clear-sky (background gas) scattering asymmetry factor in [-1, 1] (0 = isotropic scattering, close to 1 = strongly forward-scattering). Only meaningful when single_scattering_albedo More... | |
| amrex::Real | cloud_single_scattering_albedo = 0.0 |
| Cloud single-scattering albedo in [0, 1], used instead of single_scattering_albedo for levels where the cloud-layer optical depth enhancement applies (i.e., within [cloud_base_height_m, cloud_top_height_m] on the "cloudy" column evaluation). Default 0.0 leaves the cloud band non-scattering for SW_Cloud_Layer unless explicitly configured otherwise. Typical liquid water cloud values are close to 1 (e.g., 0.9999). Only used when tau_profile_type == CloudLayer. More... | |
| amrex::Real | cloud_asymmetry_factor = 0.0 |
| Cloud scattering asymmetry factor in [-1, 1], used instead of asymmetry_factor for levels where the cloud-layer optical depth enhancement applies. Default 0.0. Typical liquid water cloud droplet values are around 0.85 (strongly forward-scattering). Only meaningful when cloud_single_scattering_albedo > 0. More... | |
| amrex::Real | surface_albedo_sw = 0.3 |
| Shortwave surface albedo fallback [0, 1] for per-column heterogeneous-surface-property resolution. Used when per-column LSM/radiation interface albedo field is unavailable or invalid. Default 0.3 represents typical land/water reflectivity. Only used when hetero surface fields not present or disabled. More... | |
| amrex::Real | surface_albedo_sw_diffuse = -1.0 |
| Shortwave surface albedo for diffuse light [0,1]. A negative value (default) uses surface_albedo_sw for both direct and diffuse light. More... | |
| amrex::Real | surface_emissivity_lw = 0.99 |
| Longwave surface emissivity fallback [0, 1] for per-column heterogeneous-surface-property resolution. Used when per-column LSM/radiation interface emissivity field is unavailable or invalid. Default 0.99 represents typical land/water/ice emissivity (nearly blackbody). Only used when hetero surface fields not present or disabled. More... | |
| bool | seb_enable = false |
| Master switch for simplified SEB infrastructure. When false (default), no SEB MultiFabs are allocated and behavior is unchanged. More... | |
| bool | seb_use_radiation_fluxes = false |
| Take the SEB's net surface shortwave and longwave fluxes from the two-stream sweep itself (per column, absorbed fluxes positive) wherever the LSM does not expose them. When false (default) those fluxes are the LSM fields or, without an LSM, the seb_sw_flux_default and seb_lw_flux_default constants. Sensible, latent and ground heat fluxes are unaffected. More... | |
| amrex::Real | seb_sw_flux_default = 0.0 |
| Fallback SEB surface net shortwave flux [W/m^2]. More... | |
| amrex::Real | seb_lw_flux_default = 0.0 |
| Fallback SEB surface net longwave flux [W/m^2]. More... | |
| amrex::Real | seb_hfx_default = 0.0 |
| Fallback SEB sensible heat flux [W/m^2]. More... | |
| amrex::Real | seb_lh_default = 0.0 |
| Fallback SEB latent heat flux [W/m^2]. More... | |
| amrex::Real | seb_grdflx_default = 0.0 |
| Fallback SEB ground heat flux [W/m^2]. More... | |
| amrex::Real | seb_q_sfc_default = 0.0 |
| Fallback SEB surface moisture [kg/kg]. More... | |
| amrex::Real | seb_t_deep_default = 300.0 |
| Fallback SEB deep soil temperature [K]. More... | |
| amrex::Real | seb_q_deep_default = 0.0 |
| Fallback SEB deep soil moisture [kg/kg]. More... | |
| bool | seb_diagnostic_enable = false |
| Enable diagnostic SEB residual computation and reporting. When true, computes and reports SEB residual = (SW_net + LW_net) - H - LE - G. When false (default), no residual computation or new diagnostic output. Requires seb_enable=true to be meaningful; if false but seb_enable=true, auto-enables internally. Note: this is diagnostic-only; it makes no prognostic T_s or flux update. Set seb_prognostic_enable for that. More... | |
| bool | seb_prognostic_enable = false |
| Enable prognostic SEB surface temperature and moisture evolution. When true, integrates SEB residual forward in time to evolve T_s and q_s using force-restore formulation. When false (default), no prognostic update occurs. Requires seb_enable=true and seb_diagnostic_enable=true; auto-enables internally if needed. Only active when Noah-MP is NOT driving LSM fields at that level. More... | |
| amrex::Real | seb_surface_heat_capacity = 2.0e4 |
| Effective surface heat capacity [J/(m^2*K)]. Used in force-restore prognostic T_s equation: dT_s/dt = SEB_residual / C_s - (2*pi/tau)*(T_s - T_deep). Default 2.0e4 J/(m^2*K) represents a thin surface-active layer. Only used when seb_prognostic_enable=true. Validated > 0 in init_params(). More... | |
| amrex::Real | seb_restore_timescale_s = 86400.0 |
| Force-restore timescale for surface temperature [s]. Relaxation time constant toward T_deep in prognostic T_s equation. Default 86400.0 s (1 day) provides weak damping on diurnal timescales. Only used when seb_prognostic_enable=true. Validated > 0 in init_params(). More... | |
| amrex::Real | seb_moisture_layer_depth_m = 0.1 |
| Effective surface moisture layer depth [m]. Used in force-restore prognostic q_s equation: dq_s/dt = -(LE/(L_v*rho_w*d_s)) - (1/tau_q)*(q_s - q_deep). Default 0.1 m represents a thin surface-active moisture layer. Only used when seb_prognostic_enable=true. Validated > 0 in init_params(). More... | |
| amrex::Real | seb_moisture_restore_timescale_s = 86400.0 |
| Force-restore timescale for surface moisture [s]. Relaxation time constant toward q_deep in prognostic q_s equation. Default 86400.0 s (1 day) provides weak damping on diurnal timescales. Only used when seb_prognostic_enable=true. Validated > 0 in init_params(). More... | |
| amrex::Real | seb_prognostic_t_min_k = 200.0 |
| Minimum clamping bound for prognostic surface temperature [K]. After each Euler update, T_s is clamped to [seb_prognostic_t_min_k, seb_prognostic_t_max_k] to prevent instability if dt is large relative to C_s/tau. Default 200.0 K (far below realistic surface temperatures). Only used when seb_prognostic_enable=true. More... | |
| amrex::Real | seb_prognostic_t_max_k = 340.0 |
| Maximum clamping bound for prognostic surface temperature [K]. After each Euler update, T_s is clamped to [seb_prognostic_t_min_k, seb_prognostic_t_max_k]. Default 340.0 K (above typical surface temperatures, but prevents unrealistic excursions). Only used when seb_prognostic_enable=true. More... | |
| amrex::Real | seb_prognostic_q_min = 0.0 |
| Minimum clamping bound for prognostic surface moisture [kg/kg]. After each Euler update, q_s is clamped to [seb_prognostic_q_min, seb_prognostic_q_max]. Default 0.0 kg/kg prevents negative moisture. Only used when seb_prognostic_enable=true. More... | |
| amrex::Real | seb_prognostic_q_max = 1.0 |
| Maximum clamping bound for prognostic surface moisture [kg/kg]. After each Euler update, q_s is clamped to [seb_prognostic_q_min, seb_prognostic_q_max]. Default 1.0 kg/kg ensures physically meaningful moisture. Only used when seb_prognostic_enable=true. More... | |
| bool | tau_lw_dynamic_enable = false |
| Enable dynamic longwave optical depth diagnosis from moisture/clouds. When true, LW optical depth is computed per-level from qv and qc. When false (default), uses the static tau_lw_per_layer. Only used by the two-stream model and lw_enabled == true. More... | |
| bool | tau_sw_dynamic_enable = false |
| amrex::Real | tau_sw_coeff_qv = 0.0 |
| Shortwave optical depth coefficient for water vapor [dimensionless]. Dynamic SW tau = tau_sw_coeff_qv * qv + tau_sw_coeff_qc * qc + tau_per_layer. Default 0.0 means tau is purely from static tau_per_layer (no dynamic component). Only used when tau_sw_dynamic_enable == true. More... | |
| amrex::Real | tau_sw_coeff_qc = 0.0 |
| Shortwave optical depth coefficient for cloud liquid water [dimensionless]. Default 0.0. When both coefficients are 0, dynamic path still invoked but yields tau_per_layer unchanged. Only used when tau_sw_dynamic_enable == true. More... | |
| amrex::Real | tau_lw_coeff_qv = 0.0 |
| Longwave optical depth coefficient for water vapor [dimensionless]. Dynamic LW tau = tau_lw_coeff_qv * qv + tau_lw_coeff_qc * qc + tau_lw_per_layer. Default 0.0 means tau is purely from static tau_lw_per_layer (no dynamic component). Only used when tau_lw_dynamic_enable == true. More... | |
| amrex::Real | tau_lw_coeff_qc = 0.0 |
| Longwave optical depth coefficient for cloud liquid water [dimensionless]. Default 0.0. When both coefficients are 0, dynamic path still invoked but yields tau_lw_per_layer unchanged. Only used when tau_lw_dynamic_enable == true. More... | |
| bool | cloud_fraction_prog_enable = false |
| Enable prognostic cloud fraction diagnosis from RH/qc. When true, cloud fraction is computed per-level from relative humidity and cloud water. When false (default), uses the static cloud_fraction. Only used by the two-stream model. More... | |
| amrex::Real | cloud_fraction_rh_min = 0.0 |
| Minimum relative humidity threshold for cloud fraction diagnosis [0, 1]. Cloud fraction ramps from 0 at rh < cloud_fraction_rh_min to 1 at rh >= cloud_fraction_rh_max. Default 0.0 means cloud fraction depends primarily on qc content. Only used when cloud_fraction_prog_enable == true. More... | |
| amrex::Real | cloud_fraction_rh_max = 1.0 |
| Maximum relative humidity threshold for cloud fraction diagnosis [0, 1]. Must be >= cloud_fraction_rh_min. Cloud fraction saturates to 1 at this RH. Default 1.0 means cloud fraction increases linearly from rh_min to 1.0 RH. Only used when cloud_fraction_prog_enable == true. More... | |
| amrex::Real | cloud_fraction_qc_scale = 1.0e-3 |
| Cloud water [kg/kg] at which the liquid-water term alone gives a cloud fraction of 1: cf += min(1, qc / cloud_fraction_qc_scale). Default 1.0e-3 kg/kg, so a typical stratus cloud water saturates the term. Only used when cloud_fraction_prog_enable == true. More... | |
| bool | aerosol_enable = false |
| Enable prescribed bulk aerosol/turbidity optical depth. When true, aerosol optical depth is added on top of existing tau_base + cloud + dynamic-moisture contributions. When false (default), there is no aerosol contribution. Only used by the two-stream model and sw_enabled == true. More... | |
| AerosolProfileType | aerosol_profile_type = AerosolProfileType::Constant |
| Aerosol optical depth profile type: Constant, Exponential, or Table. More... | |
| amrex::Real | aerosol_tau_per_layer = 0.0 |
| Constant aerosol optical depth per layer [dimensionless]. Used for AerosolProfileType::Constant profile. Default 0.0 (no aerosol contribution). Only used when aerosol_enable == true and aerosol_profile_type == Constant. More... | |
| amrex::Real | aerosol_scale_height_m = 2000.0 |
| Scale height for exponential aerosol profile [m]. Controls decay rate: tau_aerosol(k) = aerosol_tau_surface * exp(-z(k) / scale_height). Default 2000.0 m (typical scale height for tropospheric aerosols). Only used when aerosol_enable == true and aerosol_profile_type == Exponential. More... | |
| amrex::Real | aerosol_tau_surface = 0.0 |
| Total-column aerosol optical depth at surface [dimensionless]. Used for AerosolProfileType::Exponential profile as the surface boundary condition. Default 0.0 (no aerosol contribution). Only used when aerosol_enable == true and aerosol_profile_type == Exponential. More... | |
Inputs shared with the RRTMGP interface | |
The two-stream model reads the sun, site and surface-temperature inputs under the same keys, with the same meaning, as the RRTMGP interface (Source/Radiation/RRTMGP/ERF_Radiation.H), so a deck switches between the two models by changing erf.radiation_model alone. | |
| amrex::Real | fixed_solar_zenith_angle = -9999.0 |
| erf.fixed_solar_zenith_angle: the COSINE of the solar zenith angle (mu0), as RRTMGP takes it, applied to every column when > 0. Otherwise (default) the sun follows the calendar: start_datetime sets the date and time, the position is evaluated at rad_cons_lat/lon or at the per-column latitude and longitude when the grid carries them. More... | |
| amrex::Real | fixed_total_solar_irradiance = -9999.0 |
| erf.fixed_total_solar_irradiance: top-of-atmosphere irradiance [W/m^2] when >= 0. Otherwise (default) 1360.9 W/m^2 scaled by the Earth-Sun distance factor of the date, as RRTMGP does. More... | |
| amrex::Real | rad_t_sfc = -1.0 |
| erf.rad_t_sfc: surface temperature [K] used as the longwave boundary condition wherever no land-surface model, surface layer or prognostic surface energy balance supplies one; also the initial value of the prognostic surface temperature. Required, as for RRTMGP. More... | |
| amrex::Real | rad_cons_lat = 39.809860 |
| erf.rad_cons_lat / erf.rad_cons_lon: site latitude and longitude [degrees] when the grid has no lat/lon fields (RRTMGP defaults). More... | |
| amrex::Real | rad_cons_lon = -98.555183 |
| int | rad_orbital_year = -9999 |
| erf.rad_orbital_year and the orbital overrides: negative means the year of the timestamp and the Berger (1978) values for that year. More... | |
| amrex::Real | rad_orbital_eccentricity = -9999.0 |
| amrex::Real | rad_orbital_obliquity = -9999.0 |
| amrex::Real | rad_orbital_mvelp = -9999.0 |
Container holding radiation-related choices and parameters.
Manages the runtime selection and configuration of radiation solvers.
The two-stream solver builds up from a clear-sky, no-scattering column of uniform optical depth. On top of that it offers height-varying optical depth (a cloud layer) with cloud-fraction masking, which blends clear-sky and cloudy-column fluxes, and a diffuse shortwave component from a two-stream scattering approximation parameterized by single-scattering albedo and asymmetry factor, with independent clear-sky and cloud values. Every addition is off by default, so the defaults reproduce the plain clear-sky column.
|
inlinestatic |
|
inlinestatic |
Read radiation options from the input parameter database.
| [in] | lev | AMR level index. |
| [in] | max_level | Maximum AMR level configured for the run. |
| [in] | pp_prefix | ParmParse prefix for the ERF input namespace (e.g., "erf"). |
Queries:
Sub-option queries are only performed when the two-stream model is selected.
Bring an out-of-range input back into its valid range and say so. Every erf.radiation.* value with a physical range passes through one of these, so a typo in a deck is reported instead of silently corrected.
Referenced by init_params().

|
inline |
Referenced by SolverChoice::init_params().


|
inlinestatic |
|
inlinenoexcept |
Check if two-stream radiation is active.
| bool RadChoice::aerosol_enable = false |
Enable prescribed bulk aerosol/turbidity optical depth. When true, aerosol optical depth is added on top of existing tau_base + cloud + dynamic-moisture contributions. When false (default), there is no aerosol contribution. Only used by the two-stream model and sw_enabled == true.
Referenced by init_params(), and make_two_stream_params().
| AerosolProfileType RadChoice::aerosol_profile_type = AerosolProfileType::Constant |
Aerosol optical depth profile type: Constant, Exponential, or Table.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::aerosol_scale_height_m = 2000.0 |
Scale height for exponential aerosol profile [m]. Controls decay rate: tau_aerosol(k) = aerosol_tau_surface * exp(-z(k) / scale_height). Default 2000.0 m (typical scale height for tropospheric aerosols). Only used when aerosol_enable == true and aerosol_profile_type == Exponential.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::aerosol_tau_per_layer = 0.0 |
Constant aerosol optical depth per layer [dimensionless]. Used for AerosolProfileType::Constant profile. Default 0.0 (no aerosol contribution). Only used when aerosol_enable == true and aerosol_profile_type == Constant.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::aerosol_tau_surface = 0.0 |
Total-column aerosol optical depth at surface [dimensionless]. Used for AerosolProfileType::Exponential profile as the surface boundary condition. Default 0.0 (no aerosol contribution). Only used when aerosol_enable == true and aerosol_profile_type == Exponential.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::asymmetry_factor = 0.0 |
Clear-sky (background gas) scattering asymmetry factor in [-1, 1] (0 = isotropic scattering, close to 1 = strongly forward-scattering). Only meaningful when single_scattering_albedo
0. Default 0.0.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_asymmetry_factor = 0.0 |
Cloud scattering asymmetry factor in [-1, 1], used instead of asymmetry_factor for levels where the cloud-layer optical depth enhancement applies. Default 0.0. Typical liquid water cloud droplet values are around 0.85 (strongly forward-scattering). Only meaningful when cloud_single_scattering_albedo > 0.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_base_height_m = 500.0 |
Cloud layer base height [m]. Only used when tau_profile_type == CloudLayer.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_fraction = 0.0 |
Cloud fraction in [0, 1] used to blend clear-sky and cloudy-column fluxes: F = (1 - cloud_fraction) * F_clear + cloud_fraction * F_cloudy. Default 0.0 (fully clear sky), which reduces exactly to the clear-sky column regardless of tau_profile_type.
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::cloud_fraction_prog_enable = false |
Enable prognostic cloud fraction diagnosis from RH/qc. When true, cloud fraction is computed per-level from relative humidity and cloud water. When false (default), uses the static cloud_fraction. Only used by the two-stream model.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_fraction_qc_scale = 1.0e-3 |
Cloud water [kg/kg] at which the liquid-water term alone gives a cloud fraction of 1: cf += min(1, qc / cloud_fraction_qc_scale). Default 1.0e-3 kg/kg, so a typical stratus cloud water saturates the term. Only used when cloud_fraction_prog_enable == true.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_fraction_rh_max = 1.0 |
Maximum relative humidity threshold for cloud fraction diagnosis [0, 1]. Must be >= cloud_fraction_rh_min. Cloud fraction saturates to 1 at this RH. Default 1.0 means cloud fraction increases linearly from rh_min to 1.0 RH. Only used when cloud_fraction_prog_enable == true.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_fraction_rh_min = 0.0 |
Minimum relative humidity threshold for cloud fraction diagnosis [0, 1]. Cloud fraction ramps from 0 at rh < cloud_fraction_rh_min to 1 at rh >= cloud_fraction_rh_max. Default 0.0 means cloud fraction depends primarily on qc content. Only used when cloud_fraction_prog_enable == true.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_single_scattering_albedo = 0.0 |
Cloud single-scattering albedo in [0, 1], used instead of single_scattering_albedo for levels where the cloud-layer optical depth enhancement applies (i.e., within [cloud_base_height_m, cloud_top_height_m] on the "cloudy" column evaluation). Default 0.0 leaves the cloud band non-scattering for SW_Cloud_Layer unless explicitly configured otherwise. Typical liquid water cloud values are close to 1 (e.g., 0.9999). Only used when tau_profile_type == CloudLayer.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_tau_per_layer = 0.5 |
Additional optical depth per layer contributed by the cloud, added on top of the clear-sky tau_per_layer/tau_lw_per_layer background within [cloud_base_height_m, cloud_top_height_m]. Only used when tau_profile_type == CloudLayer.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::cloud_top_height_m = 1000.0 |
Cloud layer top height [m]. Only used when tau_profile_type == CloudLayer. Must be >= cloud_base_height_m.
Referenced by init_params(), and make_two_stream_params().
| std::string RadChoice::diag_callsite_mode = "both" |
Call-site filtering mode: "both" (pre+post rows), "pre_only", or "post_only".
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::diag_csv_enable = true |
Enable CSV file append behavior. When false, no file writes; other enabled streams may still print. Default true.
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::diag_dedup_tol = 1.0e-12 |
Tolerance for time equality in duplicate guard [s]. Times within this tolerance are considered equal. Default 1e-12.
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::diag_enable = false |
Master switch for radiation diagnostics emission. When false, no diagnostics output (stdout/tagged/regtest/csv). Default false: a run that did not ask for the diagnostics should not write a CSV row and a stdout block on every step. The per-stream switches below stay on by default, so setting this one input to true turns the whole set on.
Referenced by TwoStreamRadiation::advance(), and init_params().
| std::string RadChoice::diag_file = "radiation_diag.dat" |
Output file path for radiation diagnostics CSV. Paths are relative to the simulation working directory.
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::diag_regtest_line_enable = true |
Enable RADIATION_DIAG: line emission. Controls regtest-parsing diagnostics line. Default true.
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::diag_stdout_enable = true |
Enable human-readable stdout diagnostics block. Controls tagged [RAD][...] debug line emission (when verbosity >= 1). Default true.
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::diag_tagged_enable = true |
Enable tagged [RAD][...] debug lines. Controls emission of bracketed-tag debug output. Default true.
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::enabled = false |
True when erf.radiation_model = TwoStream. Set by init_params from the model SolverChoice read; the erf.radiation.* sub-options are read only then.
Referenced by TwoStreamRadiation::active(), TwoStreamRadiation::define_level(), init_params(), and uses_two_stream_radiation().
| amrex::Real RadChoice::fixed_solar_zenith_angle = -9999.0 |
erf.fixed_solar_zenith_angle: the COSINE of the solar zenith angle (mu0), as RRTMGP takes it, applied to every column when > 0. Otherwise (default) the sun follows the calendar: start_datetime sets the date and time, the position is evaluated at rad_cons_lat/lon or at the per-column latitude and longitude when the grid carries them.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::fixed_total_solar_irradiance = -9999.0 |
erf.fixed_total_solar_irradiance: top-of-atmosphere irradiance [W/m^2] when >= 0. Otherwise (default) 1360.9 W/m^2 scaled by the Earth-Sun distance factor of the date, as RRTMGP does.
Referenced by init_params(), and make_two_stream_params().
| bool RadChoice::lw_enabled = true |
Enable longwave (thermal) radiation computation. Only used by the two-stream model.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::lw_kabs_cloud = 158.0 |
Cloud-water LW mass absorption coefficient m^2/kg.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::lw_kabs_dry = 1.0e-4 |
Dry-air gray LW mass absorption coefficient [m^2/kg].
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::lw_kabs_vapor = 0.1 |
Water-vapor gray LW mass absorption coefficient [m^2/kg].
Referenced by init_params(), and make_two_stream_params().
| bool RadChoice::lw_mass_absorption_enable = false |
Gray longwave optical depth from the layer mass path instead of the fixed tau_lw_per_layer (also selected by tau_model = mass): tau_lw(k) = rho dz (lw_kabs_dry + lw_kabs_vapor qv + lw_kabs_cloud qc) The cloud term is the Stephens (1978) emissivity, eps = 1 - exp(-a LWP) with a = 0.158 m^2/g, written as an optical depth. The column optical depth is then independent of the vertical resolution. The cloud-band, moisture-coefficient and aerosol additions still apply on top. Default false keeps tau_lw_per_layer.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::rad_cons_lat = 39.809860 |
erf.rad_cons_lat / erf.rad_cons_lon: site latitude and longitude [degrees] when the grid has no lat/lon fields (RRTMGP defaults).
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::rad_cons_lon = -98.555183 |
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::rad_orbital_eccentricity = -9999.0 |
Referenced by init_params().
| amrex::Real RadChoice::rad_orbital_mvelp = -9999.0 |
Referenced by init_params().
| amrex::Real RadChoice::rad_orbital_obliquity = -9999.0 |
Referenced by init_params().
| int RadChoice::rad_orbital_year = -9999 |
erf.rad_orbital_year and the orbital overrides: negative means the year of the timestamp and the Berger (1978) values for that year.
Referenced by init_params().
| amrex::Real RadChoice::rad_t_sfc = -1.0 |
erf.rad_t_sfc: surface temperature [K] used as the longwave boundary condition wherever no land-surface model, surface layer or prognostic surface energy balance supplies one; also the initial value of the prognostic surface temperature. Required, as for RRTMGP.
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), init_params(), and make_two_stream_params().
| bool RadChoice::seb_diagnostic_enable = false |
Enable diagnostic SEB residual computation and reporting. When true, computes and reports SEB residual = (SW_net + LW_net) - H - LE - G. When false (default), no residual computation or new diagnostic output. Requires seb_enable=true to be meaningful; if false but seb_enable=true, auto-enables internally. Note: this is diagnostic-only; it makes no prognostic T_s or flux update. Set seb_prognostic_enable for that.
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::seb_enable = false |
Master switch for simplified SEB infrastructure. When false (default), no SEB MultiFabs are allocated and behavior is unchanged.
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| amrex::Real RadChoice::seb_grdflx_default = 0.0 |
Fallback SEB ground heat flux [W/m^2].
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| amrex::Real RadChoice::seb_hfx_default = 0.0 |
Fallback SEB sensible heat flux [W/m^2].
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| amrex::Real RadChoice::seb_lh_default = 0.0 |
Fallback SEB latent heat flux [W/m^2].
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| amrex::Real RadChoice::seb_lw_flux_default = 0.0 |
Fallback SEB surface net longwave flux [W/m^2].
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| amrex::Real RadChoice::seb_moisture_layer_depth_m = 0.1 |
Effective surface moisture layer depth [m]. Used in force-restore prognostic q_s equation: dq_s/dt = -(LE/(L_v*rho_w*d_s)) - (1/tau_q)*(q_s - q_deep). Default 0.1 m represents a thin surface-active moisture layer. Only used when seb_prognostic_enable=true. Validated > 0 in init_params().
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::seb_moisture_restore_timescale_s = 86400.0 |
Force-restore timescale for surface moisture [s]. Relaxation time constant toward q_deep in prognostic q_s equation. Default 86400.0 s (1 day) provides weak damping on diurnal timescales. Only used when seb_prognostic_enable=true. Validated > 0 in init_params().
Referenced by TwoStreamRadiation::advance(), and init_params().
| bool RadChoice::seb_prognostic_enable = false |
Enable prognostic SEB surface temperature and moisture evolution. When true, integrates SEB residual forward in time to evolve T_s and q_s using force-restore formulation. When false (default), no prognostic update occurs. Requires seb_enable=true and seb_diagnostic_enable=true; auto-enables internally if needed. Only active when Noah-MP is NOT driving LSM fields at that level.
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::seb_prognostic_q_max = 1.0 |
Maximum clamping bound for prognostic surface moisture [kg/kg]. After each Euler update, q_s is clamped to [seb_prognostic_q_min, seb_prognostic_q_max]. Default 1.0 kg/kg ensures physically meaningful moisture. Only used when seb_prognostic_enable=true.
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::seb_prognostic_q_min = 0.0 |
Minimum clamping bound for prognostic surface moisture [kg/kg]. After each Euler update, q_s is clamped to [seb_prognostic_q_min, seb_prognostic_q_max]. Default 0.0 kg/kg prevents negative moisture. Only used when seb_prognostic_enable=true.
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::seb_prognostic_t_max_k = 340.0 |
Maximum clamping bound for prognostic surface temperature [K]. After each Euler update, T_s is clamped to [seb_prognostic_t_min_k, seb_prognostic_t_max_k]. Default 340.0 K (above typical surface temperatures, but prevents unrealistic excursions). Only used when seb_prognostic_enable=true.
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::seb_prognostic_t_min_k = 200.0 |
Minimum clamping bound for prognostic surface temperature [K]. After each Euler update, T_s is clamped to [seb_prognostic_t_min_k, seb_prognostic_t_max_k] to prevent instability if dt is large relative to C_s/tau. Default 200.0 K (far below realistic surface temperatures). Only used when seb_prognostic_enable=true.
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::seb_q_deep_default = 0.0 |
Fallback SEB deep soil moisture [kg/kg].
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| amrex::Real RadChoice::seb_q_sfc_default = 0.0 |
Fallback SEB surface moisture [kg/kg].
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| amrex::Real RadChoice::seb_restore_timescale_s = 86400.0 |
Force-restore timescale for surface temperature [s]. Relaxation time constant toward T_deep in prognostic T_s equation. Default 86400.0 s (1 day) provides weak damping on diurnal timescales. Only used when seb_prognostic_enable=true. Validated > 0 in init_params().
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::seb_surface_heat_capacity = 2.0e4 |
Effective surface heat capacity [J/(m^2*K)]. Used in force-restore prognostic T_s equation: dT_s/dt = SEB_residual / C_s - (2*pi/tau)*(T_s - T_deep). Default 2.0e4 J/(m^2*K) represents a thin surface-active layer. Only used when seb_prognostic_enable=true. Validated > 0 in init_params().
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::seb_sw_flux_default = 0.0 |
Fallback SEB surface net shortwave flux [W/m^2].
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| amrex::Real RadChoice::seb_t_deep_default = 300.0 |
Fallback SEB deep soil temperature [K].
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), and init_params().
| bool RadChoice::seb_use_radiation_fluxes = false |
Take the SEB's net surface shortwave and longwave fluxes from the two-stream sweep itself (per column, absorbed fluxes positive) wherever the LSM does not expose them. When false (default) those fluxes are the LSM fields or, without an LSM, the seb_sw_flux_default and seb_lw_flux_default constants. Sensible, latent and ground heat fluxes are unaffected.
Referenced by TwoStreamRadiation::advance(), and init_params().
| amrex::Real RadChoice::single_scattering_albedo = 0.0 |
Clear-sky (background gas) single-scattering albedo in [0, 1] for the SW diffuse (scattering) two-stream calculation. Default 0.0 means the clear-sky column is purely absorbing, and the diffuse SW contribution from the clear-sky column is exactly zero — reducing exactly to the direct-beam-only result. Only used by the two-stream model and sw_enabled == true.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::surface_albedo_sw = 0.3 |
Shortwave surface albedo fallback [0, 1] for per-column heterogeneous-surface-property resolution. Used when per-column LSM/radiation interface albedo field is unavailable or invalid. Default 0.3 represents typical land/water reflectivity. Only used when hetero surface fields not present or disabled.
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), init_params(), and make_two_stream_params().
| amrex::Real RadChoice::surface_albedo_sw_diffuse = -1.0 |
Shortwave surface albedo for diffuse light [0,1]. A negative value (default) uses surface_albedo_sw for both direct and diffuse light.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::surface_emissivity_lw = 0.99 |
Longwave surface emissivity fallback [0, 1] for per-column heterogeneous-surface-property resolution. Used when per-column LSM/radiation interface emissivity field is unavailable or invalid. Default 0.99 represents typical land/water/ice emissivity (nearly blackbody). Only used when hetero surface fields not present or disabled.
Referenced by TwoStreamRadiation::advance(), TwoStreamRadiation::define_level(), init_params(), and make_two_stream_params().
| amrex::Real RadChoice::sw_cloud_g = 0.85 |
Mass model, SW: cloud-water asymmetry factor.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::sw_cloud_omega = 0.9999 |
Mass model, SW: cloud-water single-scattering albedo.
Referenced by init_params(), and make_two_stream_params().
| bool RadChoice::sw_enabled = true |
Enable shortwave (solar) radiation computation. Only used by the two-stream model.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::sw_kabs_dry = 4.0e-6 |
Mass model, SW: dry-air gray absorption coefficient [m^2/kg].
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::sw_kabs_vapor = 4.0e-3 |
Mass model, SW: water-vapor gray absorption coefficient [m^2/kg].
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::sw_kext_cloud = 150.0 |
Mass model, SW: cloud-water extinction coefficient m^2/kg.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::sw_kscat_dry = 3.0e-6 |
Mass model, SW: dry-air (Rayleigh) scattering coefficient [m^2/kg], omega = 1, g = 0.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::tau_lw_coeff_qc = 0.0 |
Longwave optical depth coefficient for cloud liquid water [dimensionless]. Default 0.0. When both coefficients are 0, dynamic path still invoked but yields tau_lw_per_layer unchanged. Only used when tau_lw_dynamic_enable == true.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::tau_lw_coeff_qv = 0.0 |
Longwave optical depth coefficient for water vapor [dimensionless]. Dynamic LW tau = tau_lw_coeff_qv * qv + tau_lw_coeff_qc * qc + tau_lw_per_layer. Default 0.0 means tau is purely from static tau_lw_per_layer (no dynamic component). Only used when tau_lw_dynamic_enable == true.
Referenced by init_params(), and make_two_stream_params().
| bool RadChoice::tau_lw_dynamic_enable = false |
Enable dynamic longwave optical depth diagnosis from moisture/clouds. When true, LW optical depth is computed per-level from qv and qc. When false (default), uses the static tau_lw_per_layer. Only used by the two-stream model and lw_enabled == true.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::tau_lw_per_layer = 1.0 |
Longwave optical depth per layer (constant for all layers). Used in gray-gas LW two-stream solver. Only used by the two-stream model.
Referenced by init_params(), and make_two_stream_params().
| TauModel RadChoice::tau_model = TauModel::PerLayer |
Optical depth model: "per_layer" (default, fixed tau per layer) or "mass" (from the layer mass path in both bands; see TauModel).
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::tau_per_layer = 0.05 |
Shortwave optical depth per layer (constant for all layers). Used in Beer-Lambert direct-beam formula. Only used by the two-stream model.
Referenced by init_params(), and make_two_stream_params().
| TauProfileType RadChoice::tau_profile_type = TauProfileType::Constant |
Optical depth profile type: "constant" (default, the thickness-independent tau) or "cloud_layer" (adds height-varying cloud optical depth between cloud_base_height_m and cloud_top_height_m).
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::tau_sw_coeff_qc = 0.0 |
Shortwave optical depth coefficient for cloud liquid water [dimensionless]. Default 0.0. When both coefficients are 0, dynamic path still invoked but yields tau_per_layer unchanged. Only used when tau_sw_dynamic_enable == true.
Referenced by init_params(), and make_two_stream_params().
| amrex::Real RadChoice::tau_sw_coeff_qv = 0.0 |
Shortwave optical depth coefficient for water vapor [dimensionless]. Dynamic SW tau = tau_sw_coeff_qv * qv + tau_sw_coeff_qc * qc + tau_per_layer. Default 0.0 means tau is purely from static tau_per_layer (no dynamic component). Only used when tau_sw_dynamic_enable == true.
Referenced by init_params(), and make_two_stream_params().
| bool RadChoice::tau_sw_dynamic_enable = false |
Referenced by init_params(), and make_two_stream_params().
| int RadChoice::verbosity = 0 |
Debug verbosity level (0=off, 1+=debug output). Gated debug prints only emit when this is >= 1.
Referenced by TwoStreamRadiation::advance(), and init_params().