rdb_ice_optics Module

CSIM4 (non-delta-Eddington) branch of ice_optics_SIS2 (SIS_optics.F90:371-409, Apache-2.0) — snow/ice albedo + the Beer’s-law vertical partition of absorbed shortwave into the surface, snow, per-layer ice, and transmitted-to-ocean terms.

The delta-Eddington branch (SIS_optics.F90 do_deltaEdd, spectral direct/diffuse albedo bands) is deliberately NOT ported — CSIM4 is SIS2’s non-delta-Eddington default and the only branch this PR needs.

Everything pure + !$acc routine seq: called from inside the per-column do concurrent driver in rdb_ice_column.


Uses

  • module~~rdb_ice_optics~~UsesGraph module~rdb_ice_optics rdb_ice_optics module~rdb_constants rdb_constants module~rdb_ice_optics->module~rdb_constants module~rdb_ice_enthalpy rdb_ice_enthalpy module~rdb_ice_optics->module~rdb_ice_enthalpy pic_types pic_types module~rdb_constants->pic_types module~rdb_ice_enthalpy->module~rdb_constants

Used by

  • module~~rdb_ice_optics~~UsedByGraph module~rdb_ice_optics rdb_ice_optics module~rdb_ice_column rdb_ice_column module~rdb_ice_column->module~rdb_ice_optics module~rdb_ice_basal_flux rdb_ice_basal_flux module~rdb_ice_basal_flux->module~rdb_ice_column module~rdb_ice_state rdb_ice_state module~rdb_ice_basal_flux->module~rdb_ice_state module~rdb_ice_evp rdb_ice_evp module~rdb_ice_evp->module~rdb_ice_column module~rdb_ice_evp->module~rdb_ice_state module~rdb_ice_frazil_uptake rdb_ice_frazil_uptake module~rdb_ice_frazil_uptake->module~rdb_ice_column module~rdb_ice_frazil_uptake->module~rdb_ice_state module~rdb_ice_init rdb_ice_init module~rdb_ice_init->module~rdb_ice_column module~rdb_ice_init->module~rdb_ice_state module~rdb_ice_state->module~rdb_ice_column module~rdb_ice_thermo_driver rdb_ice_thermo_driver module~rdb_ice_thermo_driver->module~rdb_ice_column module~rdb_ice_thermo_driver->module~rdb_ice_state module~rdb_ice_transport rdb_ice_transport module~rdb_ice_transport->module~rdb_ice_column module~rdb_ice_transport->module~rdb_ice_state module~rdb_ice_itd rdb_ice_itd module~rdb_ice_transport->module~rdb_ice_itd module~rdb_ocean_halo_state rdb_ocean_halo_state module~rdb_ice_transport->module~rdb_ocean_halo_state module~rdb_ocean_console_stats rdb_ocean_console_stats module~rdb_ocean_console_stats->module~rdb_ice_column module~rdb_ocean_diag_fills rdb_ocean_diag_fills module~rdb_ocean_diag_fills->module~rdb_ice_column module~rdb_ocean_state rdb_ocean_state module~rdb_ocean_diag_fills->module~rdb_ocean_state module~rdb_config rdb_config module~rdb_config->module~rdb_ice_init module~rdb_driver rdb_driver module~rdb_driver->module~rdb_ocean_console_stats module~rdb_driver->module~rdb_config module~rdb_ocean_dyn rdb_ocean_dyn module~rdb_driver->module~rdb_ocean_dyn module~rdb_ocean_engine rdb_ocean_engine module~rdb_driver->module~rdb_ocean_engine module~rdb_driver->module~rdb_ocean_state module~rdb_ice_atm_forcing rdb_ice_atm_forcing module~rdb_ice_atm_forcing->module~rdb_ice_state module~rdb_ice_itd->module~rdb_ice_state module~rdb_ice_ocean_coupler rdb_ice_ocean_coupler module~rdb_ice_ocean_coupler->module~rdb_ice_state module~rdb_ice_ocean_coupler->module~rdb_ocean_halo_state module~rdb_ice_snow rdb_ice_snow module~rdb_ice_snow->module~rdb_ice_state module~rdb_ocean_api rdb_ocean_api module~rdb_ocean_api->module~rdb_ocean_diag_fills module~rdb_ocean_api->module~rdb_config module~rdb_ocean_diag_derived rdb_ocean_diag_derived module~rdb_ocean_api->module~rdb_ocean_diag_derived module~rdb_ocean_api->module~rdb_ocean_dyn module~rdb_ocean_api->module~rdb_ocean_engine module~rdb_handle rdb_handle module~rdb_ocean_api->module~rdb_handle module~rdb_ocean_diag_derived->module~rdb_ocean_diag_fills module~rdb_ocean_diag_derived->module~rdb_ocean_state module~rdb_ocean_dyn->module~rdb_ocean_console_stats module~rdb_ocean_dyn->module~rdb_ocean_halo_state module~rdb_ocean_engine->module~rdb_ice_basal_flux module~rdb_ocean_engine->module~rdb_ice_evp module~rdb_ocean_engine->module~rdb_ice_frazil_uptake module~rdb_ocean_engine->module~rdb_ice_init module~rdb_ocean_engine->module~rdb_ice_thermo_driver module~rdb_ocean_engine->module~rdb_ice_transport module~rdb_ocean_engine->module~rdb_ocean_diag_fills module~rdb_ocean_engine->module~rdb_config module~rdb_ocean_engine->module~rdb_ice_atm_forcing module~rdb_ocean_engine->module~rdb_ice_itd module~rdb_ocean_engine->module~rdb_ice_ocean_coupler module~rdb_ocean_engine->module~rdb_ice_snow module~rdb_ocean_engine->module~rdb_ocean_diag_derived module~rdb_ocean_engine->module~rdb_ocean_dyn module~rdb_ocean_engine->module~rdb_ocean_halo_state module~rdb_ocean_engine->module~rdb_ocean_state module~rdb_decomp rdb_decomp module~rdb_ocean_engine->module~rdb_decomp module~rdb_ocean_data_forcing rdb_ocean_data_forcing module~rdb_ocean_engine->module~rdb_ocean_data_forcing module~rdb_ocean_data_input rdb_ocean_data_input module~rdb_ocean_engine->module~rdb_ocean_data_input module~rdb_ocean_setup rdb_ocean_setup module~rdb_ocean_engine->module~rdb_ocean_setup module~rdb_ocean_stability_audit rdb_ocean_stability_audit module~rdb_ocean_engine->module~rdb_ocean_stability_audit module~rdb_state rdb_state module~rdb_ocean_engine->module~rdb_state module~rdb_ocean_halo_state->module~rdb_ice_state module~rdb_ocean_state->module~rdb_ice_state module~rdb_ocean_state->module~rdb_config module~rdb_ocean_state->module~rdb_ocean_dyn module~rdb_ocean_state->module~rdb_decomp module~rdb_ocean_state->module~rdb_ocean_data_forcing module~rdb_ocean_state->module~rdb_ocean_data_input module~rdb_ocean_z_init rdb_ocean_z_init module~rdb_ocean_state->module~rdb_ocean_z_init module~rdb_config_schema rdb_config_schema module~rdb_config_schema->module~rdb_config module~rdb_decomp->module~rdb_config module~rdb_handle->module~rdb_config module~rdb_handle->module~rdb_ocean_engine module~rdb_handle->module~rdb_ocean_state module~rdb_ocean_data_forcing->module~rdb_config module~rdb_ocean_data_forcing->module~rdb_ocean_halo_state module~rdb_ocean_data_forcing->module~rdb_ocean_data_input module~rdb_ocean_data_input->module~rdb_config module~rdb_ocean_setup->module~rdb_config module~rdb_ocean_setup->module~rdb_ocean_dyn module~rdb_ocean_setup->module~rdb_ocean_halo_state module~rdb_ocean_setup->module~rdb_ocean_state module~rdb_ocean_setup->module~rdb_decomp module~rdb_ocean_stability_audit->module~rdb_config module~rdb_ocean_z_init->module~rdb_config module~rdb_state->module~rdb_config module~rdb_halo rdb_halo module~rdb_halo->module~rdb_decomp module~rdb_ocean_fold_exchange rdb_ocean_fold_exchange module~rdb_ocean_fold_exchange->module~rdb_decomp module~rdb_ocean_halo rdb_ocean_halo module~rdb_ocean_halo->module~rdb_decomp module~rdb_ocean_restart_io rdb_ocean_restart_io module~rdb_ocean_restart_io->module~rdb_decomp

Variables

Type Visibility Attributes Name Initial
real(kind=wp), public, parameter :: ICE_ALB_ICE = 0.5826_wp

Cold bare-ice albedo (non-slab default) — SIS2 ICE_ALBEDO.

real(kind=wp), public, parameter :: ICE_ALB_SNOW = 0.85_wp

Cold-snow albedo — SIS2 SNOW_ALBEDO.

real(kind=wp), public, parameter :: ICE_OPT_DEP_ICE = 0.67_wp

E-folding optical depth of penetrating SW in ice (m) — SIS2 ICE_OPTICAL_DEPTH.

real(kind=wp), public, parameter :: ICE_PEN_ICE = 0.3_wp

Fraction of absorbed SW that penetrates below the surface skin for bare ice — SIS2 ICE_SW_PEN_FRAC.

real(kind=wp), public, parameter :: ICE_SNOW_PATCH = 0.02_wp

Thin-snow masking depth (m) — inline 0.02 at SIS_optics.F90:373; kept as a named constant here.

real(kind=wp), public, parameter :: ICE_T_RANGE_MELT = 1.0_wp

Temperature range (degC) over which the melting-albedo reduction ramps in — SIS2 T_RANGE_MELT.


Subroutines

public pure subroutine ice_optics_csim4(nk, hs, hi, ts, sal_ice_top, albedo, abs_sfc, abs_snow, abs_ice_lay, abs_ocn, abs_int, pen)

CSIM4 albedo + Beer’s-law vertical SW partition (SIS_optics.F90:371-409). Exact port; inline literals 0.1235/0.075 (melt-albedo reductions) and 5.0/0.5 (thin-ice atan ramp) and 0.06 (thin-ice albedo floor) stay inline per SIS2 (SIS_optics.F90:378-384).

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nk

Number of ice layers (declared first — decl-order).

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

Snow thickness (m).

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

Ice thickness (m).

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

Skin/surface temperature stand-in (degC).

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

Bulk salinity of the top ice layer (PSU) — sets the melt-onset freezing temperature.

real(kind=wp), intent(out) :: albedo

Combined snow+ice broadband albedo (nondim).

real(kind=wp), intent(out) :: abs_sfc

Fraction of absorbed SW deposited at the surface skin.

real(kind=wp), intent(out) :: abs_snow

Fraction of absorbed SW deposited in the snow (always 0 in the CSIM4 branch — SIS2 keeps the term for symmetry with the delta-Eddington branch).

real(kind=wp), intent(out) :: abs_ice_lay(nk)

Fraction of absorbed SW deposited per ice layer, TOP-DOWN (abs_ice_lay(1) = top ice layer).

real(kind=wp), intent(out) :: abs_ocn

Fraction of absorbed SW transmitted through to the ocean.

real(kind=wp), intent(out) :: abs_int

Fraction of absorbed SW deposited in the ice interior (pen - sw_frac_top after the Beer’s-law drain).

real(kind=wp), intent(out) :: pen

Fraction of the total (post-albedo) SW that penetrates below the surface skin.