From 8aa2f36742929f6207ef2ba774f7e30c6c185c22 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunke Date: Thu, 28 Jul 2022 14:01:21 -0600 Subject: [PATCH] deprecate old ridging participation and redistribution functions --- columnphysics/icepack_mechred.F90 | 144 ++++++++++++++++---- columnphysics/icepack_parameters.F90 | 83 +++++++---- configuration/driver/icedrv_init.F90 | 18 +++ configuration/scripts/icepack_in | 2 - configuration/scripts/options/set_nml.alt04 | 2 - configuration/scripts/options/set_nml.dyn | 2 - doc/source/icepack_index.rst | 14 +- doc/source/science_guide/sg_mechanical.rst | 2 + doc/source/user_guide/ug_case_settings.rst | 8 +- 9 files changed, 214 insertions(+), 61 deletions(-) diff --git a/columnphysics/icepack_mechred.F90 b/columnphysics/icepack_mechred.F90 index c3bd2f021..e8c4dc4b6 100644 --- a/columnphysics/icepack_mechred.F90 +++ b/columnphysics/icepack_mechred.F90 @@ -38,7 +38,11 @@ module icepack_mechred use icepack_parameters, only: p05, p15, p25, p333, p5 use icepack_parameters, only: puny, Lfresh, rhoi, rhos +#ifdef UNDEPRECATE_KRDG0 use icepack_parameters, only: kstrength, krdg_partic, krdg_redist, mu_rdg +#else + use icepack_parameters, only: kstrength, mu_rdg +#endif #ifdef UNDEPRECATE_0LAYER use icepack_parameters, only: heat_capacity, conserv_check #else @@ -71,16 +75,24 @@ module icepack_mechred exp_argmax = 100.0_dbl_kind, & ! maximum argument of exponential for underflow Cs = p25 , & ! fraction of shear energy contrbtng to ridging fsnowrdg = p5 , & ! snow fraction that survives in ridging - Gstar = p15 , & ! max value of G(h) that participates - ! (krdg_partic = 0) - astar = p05 , & ! e-folding scale for G(h) participation -!echmod astar = p1 , & ! e-folding scale for G(h) participation - ! (krdg_partic = 1) - maxraft= c1 , & ! max value of hrmin - hi = max thickness - ! of ice that rafts (m) - Hstar = c25 ! determines mean thickness of ridged ice (m) - ! (krdg_redist = 0) - ! Flato & Hibler (1995) have Hstar = 100 +#ifdef UNDEPRECATE_KRDG0 + Gstar = p15 , & ! max value of G(h) that participates + ! (krdg_partic = 0) + astar = p05 , & ! e-folding scale for G(h) participation +!echmod astar = p1 , & ! e-folding scale for G(h) participation + ! (krdg_partic = 1) + maxraft= c1 , & ! max value of hrmin - hi = max thickness + ! of ice that rafts (m) + Hstar = c25 ! determines mean thickness of ridged ice (m) + ! (krdg_redist = 0) + ! Flato & Hibler (1995) have Hstar = 100 +#else + astar = p05 , & ! e-folding scale for G(h) participation +!echmod astar = p1 , & ! e-folding scale for G(h) participation + ! (krdg_partic = 1) + maxraft= c1 ! max value of hrmin - hi = max thickness + ! of ice that rafts (m) +#endif !======================================================================= @@ -104,7 +116,9 @@ subroutine ridge_ice (dt, ndtd, & trcr_depend, trcr_base, & n_trcr_strata, & nt_strata, & +#ifdef UNDEPRECATE_KRDG0 krdg_partic, krdg_redist,& +#endif mu_rdg, tr_brine, & dardg1dt, dardg2dt, & dvirdgdt, opening, & @@ -159,10 +173,11 @@ subroutine ridge_ice (dt, ndtd, & integer (kind=int_kind), dimension (:,:), intent(in) :: & nt_strata ! indices of underlying tracer layers +#ifdef UNDEPRECATE_KRDG0 integer (kind=int_kind), intent(in) :: & krdg_partic, & ! selects participation function krdg_redist ! selects redistribution function - +#endif logical (kind=log_kind), intent(in) :: & closing_flag, &! flag if closing is valid tr_brine ! if .true., brine height differs from ice thickness @@ -234,8 +249,12 @@ subroutine ridge_ice (dt, ndtd, & real (kind=dbl_kind), dimension (ncat) :: & hrmin , & ! minimum ridge thickness +#ifdef UNDEPRECATE_KRDG0 hrmax , & ! maximum ridge thickness (krdg_redist = 0) - hrexp , & ! ridge e-folding thickness (krdg_redist = 1) + hrexp , & ! ridge e-folding thickness (krdg_redist = 1) +#else + hrexp , & ! ridge e-folding thickness +#endif krdg , & ! mean ridge thickness/thickness of ridging ice ardg1n , & ! area of ice ridged ardg2n , & ! area of new ridges @@ -362,7 +381,7 @@ subroutine ridge_ice (dt, ndtd, & vbrin, vbri_init) if (icepack_warnings_aborted(subname)) return - endif + endif rdg_iteration: do niter = 1, nitermax @@ -373,10 +392,15 @@ subroutine ridge_ice (dt, ndtd, & call ridge_itd (ncat, aice0, & aicen, vicen, & +#ifdef UNDEPRECATE_KRDG0 krdg_partic, krdg_redist, & mu_rdg, & aksum, apartic, & hrmin, hrmax, & +#else + mu_rdg, aksum, & + apartic, hrmin, & +#endif hrexp, krdg, & aparticn, krdgn, & mraftn) @@ -392,9 +416,14 @@ subroutine ridge_ice (dt, ndtd, & vicen, vsnon, & aice0, trcr_depend, & trcr_base, n_trcr_strata,& +#ifdef UNDEPRECATE_KRDG0 nt_strata, krdg_redist, & aksum, apartic, & hrmin, hrmax, & +#else + nt_strata, aksum, & + apartic, hrmin, & +#endif hrexp, krdg, & closing_net, opning, & ardg1, ardg2, & @@ -769,12 +798,20 @@ end subroutine ridge_prep ! Compute the thickness distribution of the ice and open water ! participating in ridging and of the resulting ridges. ! +#ifdef UNDEPRECATE_KRDG0 ! This version includes new options for ridging participation and ! redistribution. ! The new participation scheme (krdg_partic = 1) improves stability ! by increasing the time scale for large changes in ice strength. -! The new exponential redistribution function (krdg_redist = 1) improves -! agreement between ITDs of modeled and observed ridges. +! The new exponential redistribution function (krdg_redist = 1) improves +! agreement between ITDs of modeled and observed ridges. +#else +! This version uses a participation function that improves stability +! by increasing the time scale for large changes in ice strength, and +! an exponential redistribution function that improves the +! agreement between ITDs of modeled and observed ridges, following +! Lipscomb et al., JGR 2007. +#endif ! ! author: William H. Lipscomb, LANL ! @@ -783,10 +820,15 @@ end subroutine ridge_prep subroutine ridge_itd (ncat, aice0, & aicen, vicen, & +#ifdef UNDEPRECATE_KRDG0 krdg_partic, krdg_redist, & mu_rdg, & aksum, apartic, & hrmin, hrmax, & +#else + mu_rdg, aksum, & + apartic, hrmin, & +#endif hrexp, krdg, & aparticn, krdgn, & mraft) @@ -802,10 +844,11 @@ subroutine ridge_itd (ncat, aice0, & aicen , & ! concentration of ice vicen ! volume per unit area of ice (m) +#ifdef UNDEPRECATE_KRDG0 integer (kind=int_kind), intent(in) :: & krdg_partic , & ! selects participation function krdg_redist ! selects redistribution function - +#endif real (kind=dbl_kind), intent(out):: & aksum ! ratio of area removed to area ridged @@ -815,8 +858,12 @@ subroutine ridge_itd (ncat, aice0, & real (kind=dbl_kind), dimension (:), intent(out) :: & hrmin , & ! minimum ridge thickness +#ifdef UNDEPRECATE_KRDG0 hrmax , & ! maximum ridge thickness (krdg_redist = 0) hrexp , & ! ridge e-folding thickness (krdg_redist = 1) +#else + hrexp , & ! ridge e-folding thickness +#endif krdg ! mean ridge thickness/thickness of ridging ice ! diagnostic, category values @@ -833,7 +880,9 @@ subroutine ridge_itd (ncat, aice0, & n ! thickness category index real (kind=dbl_kind), parameter :: & +#ifdef UNDEPRECATE_KRDG0 Gstari = c1/Gstar, & +#endif astari = c1/astar real (kind=dbl_kind), dimension(-1:ncat) :: & @@ -866,7 +915,9 @@ subroutine ridge_itd (ncat, aice0, & do n = 1, ncat apartic(n) = c0 hrmin (n) = c0 +#ifdef UNDEPRECATE_KRDG0 hrmax (n) = c0 +#endif hrexp (n) = c0 krdg (n) = c1 @@ -906,6 +957,7 @@ subroutine ridge_itd (ncat, aice0, & ! !----------------------------------------------------------------- +#ifdef UNDEPRECATE_KRDG0 if (krdg_partic == 0) then ! Thornike et al. 1975 formulation !----------------------------------------------------------------- @@ -925,7 +977,7 @@ subroutine ridge_itd (ncat, aice0, & enddo ! n elseif (krdg_partic==1) then ! exponential dependence on G(h) - +#endif !----------------------------------------------------------------- ! b(h) = exp(-G(h)/astar) ! apartic(n) = [exp(-G(n-1)/astar - exp(-G(n)/astar] / [1-exp(-1/astar)]. @@ -941,17 +993,24 @@ subroutine ridge_itd (ncat, aice0, & apartic(n) = Gsum(n-1) - Gsum(n) enddo ! n +#ifdef UNDEPRECATE_KRDG0 endif ! krdg_partic +#endif !----------------------------------------------------------------- ! Compute variables related to ITD of ridged ice: ! ! krdg = mean ridge thickness / thickness of ridging ice ! hrmin = min ridge thickness +#ifdef UNDEPRECATE_KRDG0 ! hrmax = max ridge thickness (krdg_redist = 0) ! hrexp = ridge e-folding scale (krdg_redist = 1) +#else + ! hrexp = ridge e-folding scale +#endif !---------------------------------------------------------------- +#ifdef UNDEPRECATE_KRDG0 if (krdg_redist == 0) then ! Hibler 1980 formulation !----------------------------------------------------------------- @@ -979,8 +1038,8 @@ subroutine ridge_itd (ncat, aice0, & endif enddo ! n - else ! krdg_redist = 1; exponential redistribution - + else ! krdg_redist = 1; exponential redistribution #endif +#endif !----------------------------------------------------------------- ! The ridge ITD is a negative exponential: ! @@ -996,6 +1055,7 @@ subroutine ridge_itd (ncat, aice0, & ! Also, assume that hrexp = mu_rdg*sqrt(hi). ! The parameter mu_rdg is tuned to give e-folding scales mostly ! in the range 2-4 m as observed by upward-looking sonar. +#ifdef UNDEPRECATE_KRDG0 ! ! Values of mu_rdg in the right column give ice strengths ! roughly equal to values of Hstar in the left column @@ -1007,6 +1067,7 @@ subroutine ridge_itd (ncat, aice0, & ! 50 4.0 ! 75 5.0 ! 100 6.0 +#endif !----------------------------------------------------------------- do n = 1, ncat @@ -1027,7 +1088,9 @@ subroutine ridge_itd (ncat, aice0, & endif enddo +#ifdef UNDEPRECATE_KRDG0 endif ! krdg_redist +#endif !---------------------------------------------------------------- ! Compute aksum = net ice area removed / total area participating. @@ -1079,9 +1142,14 @@ subroutine ridge_shift (ntrcr, dt, & vicen, vsnon, & aice0, trcr_depend, & trcr_base, n_trcr_strata, & +#ifdef UNDEPRECATE_KRDG0 nt_strata, krdg_redist, & aksum, apartic, & hrmin, hrmax, & +#else + nt_strata, aksum, & + apartic, hrmin, & +#endif hrexp, krdg, & closing_net, opning, & ardg1, ardg2, & @@ -1098,8 +1166,12 @@ subroutine ridge_shift (ntrcr, dt, & ncat , & ! number of thickness categories nslyr , & ! number of snow layers ntrcr , & ! number of tracers in use +#ifdef UNDEPRECATE_KRDG0 n_aero, & ! number of aerosol tracers krdg_redist ! selects redistribution function +#else + n_aero ! number of aerosol tracers +#endif real (kind=dbl_kind), intent(in) :: & dt ! time step (s) @@ -1138,8 +1210,12 @@ subroutine ridge_shift (ntrcr, dt, & real (kind=dbl_kind), dimension (:), intent(in) :: & hrmin , & ! minimum ridge thickness +#ifdef UNDEPRECATE_KRDG0 hrmax , & ! maximum ridge thickness (krdg_redist = 0) - hrexp , & ! ridge e-folding thickness (krdg_redist = 1) + hrexp , & ! ridge e-folding thickness (krdg_redist = 1) +#else + hrexp , & ! ridge e-folding thickness +#endif krdg ! mean ridge thickness/thickness of ridging ice real (kind=dbl_kind), intent(inout) :: & @@ -1204,8 +1280,10 @@ subroutine ridge_shift (ntrcr, dt, & ardg2n , & ! area of new ridges virdgn , & ! ridging ice volume vsrdgn , & ! ridging snow volume +#ifdef UNDEPRECATE_KRDG0 dhr , & ! hrmax - hrmin dhr2 , & ! hrmax^2 - hrmin^2 +#endif farea , & ! fraction of new ridge area going to nr fvol ! fraction of new ridge volume going to nr @@ -1394,6 +1472,7 @@ subroutine ridge_shift (ntrcr, dt, & * trcrn(nt_hpnd,n) endif +#ifdef UNDEPRECATE_KRDG0 !----------------------------------------------------------------- ! Compute quantities used to apportion ice among categories ! in the nr loop below @@ -1401,7 +1480,7 @@ subroutine ridge_shift (ntrcr, dt, & dhr = hrmax(n) - hrmin(n) dhr2 = hrmax(n) * hrmax(n) - hrmin(n) * hrmin(n) - +#endif !----------------------------------------------------------------- ! Increment energy needed to melt snow in ocean. ! Note that esnow_mlt < 0; the ocean must cool to melt snow. @@ -1443,6 +1522,7 @@ subroutine ridge_shift (ntrcr, dt, & do nr = 1, ncat +#ifdef UNDEPRECATE_KRDG0 if (krdg_redist == 0) then ! Hibler 1980 formulation !----------------------------------------------------------------- @@ -1463,7 +1543,7 @@ subroutine ridge_shift (ntrcr, dt, & fvol = (hR*hR - hL*hL) / dhr2 else ! krdg_redist = 1; 2005 exponential formulation - +#endif !----------------------------------------------------------------- ! Compute the fraction of ridged ice area and volume going to ! thickness category nr. @@ -1512,7 +1592,9 @@ subroutine ridge_shift (ntrcr, dt, & endif endif +#ifdef UNDEPRECATE_KRDG0 endif ! krdg_redist +#endif !----------------------------------------------------------------- ! Transfer ice area, ice volume, and snow volume to category nr. @@ -1635,8 +1717,12 @@ subroutine icepack_ice_strength (ncat, & real (kind=dbl_kind), dimension (ncat) :: & hrmin , & ! minimum ridge thickness +#ifdef UNDEPRECATE_KRDG0 hrmax , & ! maximum ridge thickness (krdg_redist = 0) - hrexp , & ! ridge e-folding thickness (krdg_redist = 1) + hrexp , & ! ridge e-folding thickness (krdg_redist = 1) +#else + hrexp , & ! ridge e-folding thickness +#endif krdg ! mean ridge thickness/thickness of ridging ice integer (kind=int_kind) :: & @@ -1661,10 +1747,15 @@ subroutine icepack_ice_strength (ncat, & call ridge_itd (ncat, aice0, & aicen, vicen, & +#ifdef UNDEPRECATE_KRDG0 krdg_partic, krdg_redist, & mu_rdg, & aksum, apartic, & hrmin, hrmax, & +#else + mu_rdg, aksum, & + apartic, hrmin, & +#endif hrexp, krdg) if (icepack_warnings_aborted(subname)) return @@ -1673,6 +1764,7 @@ subroutine icepack_ice_strength (ncat, & ! as in Rothrock (1975) !----------------------------------------------------------------- +#ifdef UNDEPRECATE_KRDG0 if (krdg_redist==0) then ! Hibler 1980 formulation do n = 1, ncat @@ -1686,7 +1778,7 @@ subroutine icepack_ice_strength (ncat, & enddo ! n elseif (krdg_redist==1) then ! exponential formulation - +#endif do n = 1, ncat if (aicen(n) > puny .and. apartic(n) > c0) then hi = vicen(n) / aicen(n) @@ -1698,7 +1790,9 @@ subroutine icepack_ice_strength (ncat, & endif enddo ! n +#ifdef UNDEPRECATE_KRDG0 endif ! krdg_redist +#endif strength = Cf * Cp * strength / aksum ! Cp = (g/2)*(rhow-rhoi)*(rhoi/rhow) @@ -1880,7 +1974,9 @@ subroutine icepack_step_ridge (dt, ndtd, & trcr_base, & n_trcr_strata, & nt_strata, & +#ifdef UNDEPRECATE_KRDG0 krdg_partic, krdg_redist, & +#endif mu_rdg, tr_brine, & dardg1dt, dardg2dt, & dvirdgdt, opening, & diff --git a/columnphysics/icepack_parameters.F90 b/columnphysics/icepack_parameters.F90 index bd3ffee7b..005ae3d3a 100644 --- a/columnphysics/icepack_parameters.F90 +++ b/columnphysics/icepack_parameters.F90 @@ -219,13 +219,17 @@ module icepack_parameters !----------------------------------------------------------------------- integer (kind=int_kind), public :: & ! defined in namelist +#ifdef UNDEPRECATE_KRDG0 kstrength = 1, & ! 0 for simple Hibler (1979) formulation ! 1 for Rothrock (1975) pressure formulation krdg_partic = 1, & ! 0 for Thorndike et al. (1975) formulation ! 1 for exponential participation function krdg_redist = 1 ! 0 for Hibler (1980) formulation ! 1 for exponential redistribution function - +#else + kstrength = 1 ! 0 for simple Hibler (1979) formulation + ! 1 for Rothrock (1975) pressure formulation +#endif real (kind=dbl_kind), public :: & Cf = 17._dbl_kind ,&! ratio of ridging work to PE change in ridging Pstar = 2.75e4_dbl_kind ,&! constant in Hibler strength formula @@ -236,9 +240,12 @@ module icepack_parameters thickness_ocn_layer1 = 2.0_dbl_kind,&! thickness of first ocean level (m) iceruf_ocn = 0.03_dbl_kind ,&! under-ice roughness (m) gravit = 9.80616_dbl_kind ,&! gravitational acceleration (m/s^2) +#ifdef UNDEPRECATE_KRDG0 mu_rdg = 3.0_dbl_kind ! e-folding scale of ridged ice, krdg_partic=1 (m^0.5) ! (krdg_redist = 1) - +#else + mu_rdg = 3.0_dbl_kind ! e-folding scale of ridged ice (m^0.5) +#endif logical (kind=log_kind), public :: & calc_dragio = .false. ! if true, calculate dragio from iceruf_ocn and thickness_ocn_layer1 @@ -459,7 +466,11 @@ subroutine icepack_init_parameters( & phi_i_mushy_in, shortwave_in, albedo_type_in, albsnowi_in, & albicev_in, albicei_in, albsnowv_in, & ahmax_in, R_ice_in, R_pnd_in, R_snw_in, dT_mlt_in, rsnw_mlt_in, & +#ifdef UNDEPRECATE_KRDG0 kalg_in, kstrength_in, krdg_partic_in, krdg_redist_in, mu_rdg_in, & +#else + kalg_in, kstrength_in, mu_rdg_in, & +#endif atmbndy_in, calc_strair_in, formdrag_in, highfreq_in, natmiter_in, & atmiter_conv_in, calc_dragio_in, & tfrz_option_in, kitd_in, kcatbound_in, hs0_in, frzpnd_in, & @@ -633,9 +644,9 @@ subroutine icepack_init_parameters( & !----------------------------------------------------------------------- real(kind=dbl_kind), intent(in), optional :: & - Cf_in, & ! ratio of ridging work to PE change in ridging - Pstar_in, & ! constant in Hibler strength formula - Cstar_in, & ! constant in Hibler strength formula + Cf_in, & ! ratio of ridging work to PE change in ridging + Pstar_in, & ! constant in Hibler strength formula + Cstar_in, & ! constant in Hibler strength formula dragio_in, & ! ice-ocn drag coefficient thickness_ocn_layer1_in, & ! thickness of first ocean level (m) iceruf_ocn_in, & ! under-ice roughness (m) @@ -643,16 +654,23 @@ subroutine icepack_init_parameters( & iceruf_in ! ice surface roughness (m) integer (kind=int_kind), intent(in), optional :: & ! defined in namelist - kstrength_in , & ! 0 for simple Hibler (1979) formulation - ! 1 for Rothrock (1975) pressure formulation - krdg_partic_in, & ! 0 for Thorndike et al. (1975) formulation - ! 1 for exponential participation function - krdg_redist_in ! 0 for Hibler (1980) formulation - ! 1 for exponential redistribution function +#ifdef UNDEPRECATE_KRDG0 + kstrength_in , & ! 0 for simple Hibler (1979) formulation + ! 1 for Rothrock (1975) pressure formulation + krdg_partic_in, & ! 0 for Thorndike et al. (1975) formulation + ! 1 for exponential participation function + krdg_redist_in ! 0 for Hibler (1980) formulation + ! 1 for exponential redistribution function +#else + kstrength_in ! 0 for simple Hibler (1979) formulation + ! 1 for Rothrock (1975) pressure formulation +#endif real (kind=dbl_kind), intent(in), optional :: & - mu_rdg_in ! gives e-folding scale of ridged ice (m^.5) - ! (krdg_redist = 1) + mu_rdg_in ! gives e-folding scale of ridged ice (m^.5) +#ifdef UNDEPRECATE_KRDG0 + ! (krdg_redist = 1) +#endif logical (kind=log_kind), intent(in), optional :: & calc_dragio_in ! if true, calculate dragio from iceruf_ocn and thickness_ocn_layer1 @@ -928,8 +946,10 @@ subroutine icepack_init_parameters( & if (present(rsnw_mlt_in) ) rsnw_mlt = rsnw_mlt_in if (present(kalg_in) ) kalg = kalg_in if (present(kstrength_in) ) kstrength = kstrength_in +#ifdef UNDEPRECATE_KRDG0 if (present(krdg_partic_in) ) krdg_partic = krdg_partic_in if (present(krdg_redist_in) ) krdg_redist = krdg_redist_in +#endif if (present(mu_rdg_in) ) mu_rdg = mu_rdg_in if (present(atmbndy_in) ) atmbndy = atmbndy_in if (present(calc_strair_in) ) calc_strair = calc_strair_in @@ -1150,7 +1170,11 @@ subroutine icepack_query_parameters( & albedo_type_out, albicev_out, albicei_out, albsnowv_out, & albsnowi_out, ahmax_out, R_ice_out, R_pnd_out, R_snw_out, dT_mlt_out, & rsnw_mlt_out, dEdd_algae_out, & +#ifdef UNDEPRECATE_KRDG0 kalg_out, kstrength_out, krdg_partic_out, krdg_redist_out, mu_rdg_out, & +#else + kalg_out, kstrength_out, mu_rdg_out, & +#endif atmbndy_out, calc_strair_out, formdrag_out, highfreq_out, natmiter_out, & atmiter_conv_out, calc_dragio_out, & tfrz_option_out, kitd_out, kcatbound_out, hs0_out, frzpnd_out, & @@ -1333,9 +1357,9 @@ subroutine icepack_query_parameters( & !----------------------------------------------------------------------- real(kind=dbl_kind), intent(out), optional :: & - Cf_out, & ! ratio of ridging work to PE change in ridging - Pstar_out, & ! constant in Hibler strength formula - Cstar_out, & ! constant in Hibler strength formula + Cf_out, & ! ratio of ridging work to PE change in ridging + Pstar_out, & ! constant in Hibler strength formula + Cstar_out, & ! constant in Hibler strength formula dragio_out, & ! ice-ocn drag coefficient thickness_ocn_layer1_out, & ! thickness of first ocean level (m) iceruf_ocn_out, & ! under-ice roughness (m) @@ -1343,16 +1367,23 @@ subroutine icepack_query_parameters( & iceruf_out ! ice surface roughness (m) integer (kind=int_kind), intent(out), optional :: & ! defined in namelist - kstrength_out , & ! 0 for simple Hibler (1979) formulation - ! 1 for Rothrock (1975) pressure formulation - krdg_partic_out, & ! 0 for Thorndike et al. (1975) formulation - ! 1 for exponential participation function - krdg_redist_out ! 0 for Hibler (1980) formulation - ! 1 for exponential redistribution function +#ifdef UNDEPRECATE_KRDG0 + kstrength_out , & ! 0 for simple Hibler (1979) formulation + ! 1 for Rothrock (1975) pressure formulation + krdg_partic_out, & ! 0 for Thorndike et al. (1975) formulation + ! 1 for exponential participation function + krdg_redist_out ! 0 for Hibler (1980) formulation + ! 1 for exponential redistribution function +#else + kstrength_out ! 0 for simple Hibler (1979) formulation + ! 1 for Rothrock (1975) pressure formulation +#endif real (kind=dbl_kind), intent(out), optional :: & - mu_rdg_out ! gives e-folding scale of ridged ice (m^.5) - ! (krdg_redist = 1) + mu_rdg_out ! gives e-folding scale of ridged ice (m^.5) +#ifdef UNDEPRECATE_KRDG0 + ! (krdg_redist = 1) +#endif logical (kind=log_kind), intent(out), optional :: & calc_dragio_out ! if true, compute dragio from iceruf_ocn and thickness_ocn_layer1 @@ -1668,8 +1699,10 @@ subroutine icepack_query_parameters( & if (present(rsnw_mlt_out) ) rsnw_mlt_out = rsnw_mlt if (present(kalg_out) ) kalg_out = kalg if (present(kstrength_out) ) kstrength_out = kstrength +#ifdef UNDEPRECATE_KRDG0 if (present(krdg_partic_out) ) krdg_partic_out = krdg_partic if (present(krdg_redist_out) ) krdg_redist_out = krdg_redist +#endif if (present(mu_rdg_out) ) mu_rdg_out = mu_rdg if (present(atmbndy_out) ) atmbndy_out = atmbndy if (present(calc_strair_out) ) calc_strair_out = calc_strair @@ -1876,8 +1909,10 @@ subroutine icepack_write_parameters(iounit) write(iounit,*) " rsnw_mlt = ", rsnw_mlt write(iounit,*) " kalg = ", kalg write(iounit,*) " kstrength = ", kstrength +#ifdef UNDEPRECATE_KRDG0 write(iounit,*) " krdg_partic = ", krdg_partic write(iounit,*) " krdg_redist = ", krdg_redist +#endif write(iounit,*) " mu_rdg = ", mu_rdg write(iounit,*) " atmbndy = ", atmbndy write(iounit,*) " calc_strair = ", calc_strair diff --git a/configuration/driver/icedrv_init.F90 b/configuration/driver/icedrv_init.F90 index be5b619a2..602c90ad2 100644 --- a/configuration/driver/icedrv_init.F90 +++ b/configuration/driver/icedrv_init.F90 @@ -93,7 +93,11 @@ subroutine input_data rsnw_fall, rsnw_tmax, rhosnew, rhosmin, rhosmax, & windmin, drhosdwind, snwlvlfac +#ifdef UNDEPRECATE_KRDG0 integer (kind=int_kind) :: ktherm, kstrength, krdg_partic, krdg_redist, & +#else + integer (kind=int_kind) :: ktherm, kstrength, & +#endif natmiter, kitd, kcatbound character (len=char_len) :: shortwave, albedo_type, conduct, fbot_xfer_type, & @@ -143,8 +147,12 @@ subroutine input_data floediam, hfrazilmin namelist /dynamics_nml/ & +#ifdef UNDEPRECATE_KRDG0 kstrength, krdg_partic, krdg_redist, mu_rdg, & Cf +#else + kstrength, mu_rdg, Cf +#endif namelist /shortwave_nml/ & shortwave, albedo_type, & @@ -199,8 +207,12 @@ subroutine input_data atmiter_conv_out = atmiter_conv, calc_dragio_out=calc_dragio, & albedo_type_out=albedo_type, R_ice_out=R_ice, R_pnd_out=R_pnd, & R_snw_out=R_snw, dT_mlt_out=dT_mlt, rsnw_mlt_out=rsnw_mlt, & +#ifdef UNDEPRECATE_KRDG0 kstrength_out=kstrength, krdg_partic_out=krdg_partic, & krdg_redist_out=krdg_redist, mu_rdg_out=mu_rdg, & +#else + kstrength_out=kstrength, mu_rdg_out=mu_rdg, & +#endif atmbndy_out=atmbndy, calc_strair_out=calc_strair, & formdrag_out=formdrag, highfreq_out=highfreq, & emissivity_out=emissivity, & @@ -654,11 +666,13 @@ subroutine input_data kcatbound write(nu_diag,1020) ' ndtd = ', ndtd write(nu_diag,1020) ' kstrength = ', kstrength +#ifdef UNDEPRECATE_KRDG0 write(nu_diag,1020) ' krdg_partic = ', & krdg_partic write(nu_diag,1020) ' krdg_redist = ', & krdg_redist if (krdg_redist == 1) & +#endif write(nu_diag,1000) ' mu_rdg = ', mu_rdg if (kstrength == 1) & write(nu_diag,1000) ' Cf = ', Cf @@ -938,8 +952,12 @@ subroutine input_data atmiter_conv_in = atmiter_conv, calc_dragio_in=calc_dragio, & albedo_type_in=albedo_type, R_ice_in=R_ice, R_pnd_in=R_pnd, & R_snw_in=R_snw, dT_mlt_in=dT_mlt, rsnw_mlt_in=rsnw_mlt, & +#ifdef UNDEPRECATE_KRDG0 kstrength_in=kstrength, krdg_partic_in=krdg_partic, & krdg_redist_in=krdg_redist, mu_rdg_in=mu_rdg, & +#else + kstrength_in=kstrength, mu_rdg_in=mu_rdg, & +#endif atmbndy_in=atmbndy, calc_strair_in=calc_strair, & formdrag_in=formdrag, highfreq_in=highfreq, & emissivity_in=emissivity, & diff --git a/configuration/scripts/icepack_in b/configuration/scripts/icepack_in index dad73618e..6835d2338 100644 --- a/configuration/scripts/icepack_in +++ b/configuration/scripts/icepack_in @@ -133,8 +133,6 @@ &dynamics_nml kstrength = 1 - krdg_partic = 1 - krdg_redist = 1 mu_rdg = 3 Cf = 17. / diff --git a/configuration/scripts/options/set_nml.alt04 b/configuration/scripts/options/set_nml.alt04 index a112b235c..9307ef12d 100644 --- a/configuration/scripts/options/set_nml.alt04 +++ b/configuration/scripts/options/set_nml.alt04 @@ -11,8 +11,6 @@ sw_dtemp = 0.02d0 tfrz_option = 'linear_salt' conduct = 'bubbly' - krdg_partic = 0 - krdg_redist = 0 calc_Tsfc = .true. highfreq = .true. update_ocn_f = .true. diff --git a/configuration/scripts/options/set_nml.dyn b/configuration/scripts/options/set_nml.dyn index f95f0c60e..844d41f58 100644 --- a/configuration/scripts/options/set_nml.dyn +++ b/configuration/scripts/options/set_nml.dyn @@ -1,7 +1,5 @@ ndtd = 2 kstrength = 0 -krdg_partic = 0 -krdg_redist = 0 formdrag = .false. atmbndy = 'constant' highfreq = .false. diff --git a/doc/source/icepack_index.rst b/doc/source/icepack_index.rst index 84a533d2d..7cbac541d 100755 --- a/doc/source/icepack_index.rst +++ b/doc/source/icepack_index.rst @@ -197,7 +197,7 @@ either Celsius or Kelvin units). "**G**", "", "" "gravit", "gravitational acceleration", "9.80616 m/s\ :math:`^2`" "grow_net", "specific biogeochemistry growth rate per grid cell", "s :math:`^{-1}`" - "Gstar", "piecewise-linear ridging participation function parameter", "0.15" + "Gstar", "DEPRECATED", "" "**H**", "", "" "H2_16O_ocn", "concentration of H2_16O isotope in ocean", "kg/kg" "H2_18O_ocn", "concentration of H2_18O isotope in ocean", "kg/kg" @@ -221,7 +221,7 @@ either Celsius or Kelvin units). "hs0", ":math:`\bullet` snow depth at which transition to ice occurs (dEdd)", "0.03 m" "hs1", ":math:`\bullet` snow depth of transition to pond ice", "0.03 m" "hs_ssl", "snow surface scattering layer thickness", "0.04 m" - "Hstar", "determines mean thickness of ridged ice", "25. m" + "Hstar", "DEPRECATED", "" "**I**", "", "" "i0vis","fraction of penetrating visible solar radiation", "0.70" "ice_ic", ":math:`\bullet` choice of initial conditions", "" @@ -247,8 +247,8 @@ either Celsius or Kelvin units). "kg_to_g", "kg to g conversion factor", "1000." "kice", "thermal conductivity of fresh ice (:cite:`Bitz99`)", "2.03 W/m/deg" "kitd", ":math:`\bullet` type of itd conversions (0 = delta function, 1 = linear remap)", "1" - "krdg_partic", ":math:`\bullet` ridging participation function", "1" - "krdg_redist", ":math:`\bullet` ridging redistribution function", "1" + "krdg_partic", "DEPRECATED", "" + "krdg_redist", "DEPRECATED", "" "krdgn", "mean ridge thickness per thickness of ridging ice", "" "kseaice", "DEPRECATED", "" "ksno", "thermal conductivity of snow", "0.30 W/m/deg" @@ -533,6 +533,10 @@ either Celsius or Kelvin units). "heat_capacity", ":math:`\bullet` if true, use salinity-dependent thermodynamics", "T" "kseaice", "thermal conductivity of ice for zero-layer thermodynamics", "2.0 W/m/deg" "ktherm", ":math:`\bullet` thermodynamic formulation (0 = zero-layer, 1 = :cite:`Bitz99`, 2 = mushy)", "" - + old ridging participation and redistribution functions are being deprecated + "krdg_partic", ":math:`\bullet` ridging participation function", "1" + "krdg_redist", ":math:`\bullet` ridging redistribution function", "1" + "Gstar", "piecewise-linear ridging participation function parameter", "0.15" + "Hstar", "determines mean thickness of ridged ice", "25. m" diff --git a/doc/source/science_guide/sg_mechanical.rst b/doc/source/science_guide/sg_mechanical.rst index 8bae15b03..d626905c3 100755 --- a/doc/source/science_guide/sg_mechanical.rst +++ b/doc/source/science_guide/sg_mechanical.rst @@ -16,6 +16,8 @@ ice and is applied after horizontal transport. When the ice is converging, enough ice ridges to ensure that the ice area does not exceed the grid cell area. +*Note that the older ridging and participation functions (``krdg_partic`` = 0 and ``krdg_redist`` = 0) have been deprecated.* + First we specify the participation function: the thickness distribution :math:`a_P(h) = b(h) \, g(h)` of the ice participating in ridging. (We use "ridging" as shorthand for all forms of mechanical redistribution, diff --git a/doc/source/user_guide/ug_case_settings.rst b/doc/source/user_guide/ug_case_settings.rst index 6b1075eb8..730223c11 100755 --- a/doc/source/user_guide/ug_case_settings.rst +++ b/doc/source/user_guide/ug_case_settings.rst @@ -230,12 +230,16 @@ dynamics_nml "``Cf``", "real", "ratio of ridging work to PE change in ridging", "17.0" "``kstrength``", "``0``", "ice strength formulation :cite:`Hibler79`", "1" "", "``1``", "ice strength formulation :cite:`Rothrock75`", "" + "``mu_rdg``", "real", "e-folding scale of ridged ice in m^0.5", "3.0" + "", "", "", "" + +.. + krdg_partic=0 and krdg_redist=0 are being deprecated. + Both flags are being removed using their values = 1 as the default. "``krdg_partic``", "``0``", "old ridging participation function", "1" "", "``1``", "new ridging participation function", "" "``krdg_redist``", "``0``", "old ridging redistribution function", "1" "", "``1``", "new ridging redistribution function", "" - "``mu_rdg``", "real", "e-folding scale of ridged ice for ``krdg_partic`` = 1 in m^0.5", "3.0" - "", "", "", "" shortwave_nml ~~~~~~~~~~~~~~~~~~~~~~~~~