diff --git a/columnphysics/icepack_itd.F90 b/columnphysics/icepack_itd.F90 index dcca779cf..30508184a 100644 --- a/columnphysics/icepack_itd.F90 +++ b/columnphysics/icepack_itd.F90 @@ -764,7 +764,9 @@ subroutine cleanup_itd (dt, ntrcr, & nbtrcr, nblyr, & tr_aero, & tr_pond_topo, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, & +#endif first_ice, & trcr_depend, trcr_base, & n_trcr_strata,nt_strata, & @@ -814,8 +816,12 @@ subroutine cleanup_itd (dt, ntrcr, & logical (kind=log_kind), intent(in) :: & tr_aero, & ! aerosol flag +#ifdef UNDEPRECATE_0LAYER tr_pond_topo, & ! topo pond flag heat_capacity ! if false, ice and snow have zero heat capacity +#else + tr_pond_topo ! topo pond flag +#endif logical (kind=log_kind), dimension(ncat), intent(inout) :: & first_ice ! For bgc and S tracers. set to true if zapping ice. @@ -972,7 +978,11 @@ subroutine cleanup_itd (dt, ntrcr, & !------------------------------------------------------------------- call zap_snow_temperature(dt, ncat, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, nblyr, & +#else + nblyr, & +#endif nslyr, aicen, & trcrn, vsnon, & dfresh, dfhocn, & @@ -1012,6 +1022,7 @@ subroutine cleanup_itd (dt, ntrcr, & if (present(fzsal)) & fzsal = fzsal + dfzsal +#ifdef UNDEPRECATE_0LAYER !---------------------------------------------------------------- ! If using zero-layer model (no heat capacity), check that the ! energy of snow and ice is correct. @@ -1024,6 +1035,7 @@ subroutine cleanup_itd (dt, ntrcr, & trcrn) if (icepack_warnings_aborted(subname)) return endif +#endif end subroutine cleanup_itd @@ -1456,7 +1468,9 @@ end subroutine zap_snow !======================================================================= subroutine zap_snow_temperature(dt, ncat, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, & +#endif nblyr, & nslyr, aicen, & trcrn, vsnon, & @@ -1476,9 +1490,10 @@ subroutine zap_snow_temperature(dt, ncat, & real (kind=dbl_kind), intent(in) :: & dt ! time step +#ifdef UNDEPRECATE_0LAYER logical (kind=log_kind), intent(in) :: & heat_capacity ! if false, ice and snow have zero heat capacity - +#endif real (kind=dbl_kind), dimension (:), intent(in) :: & aicen ! concentration of ice @@ -1540,7 +1555,11 @@ subroutine zap_snow_temperature(dt, ncat, & do k = 1, nslyr ! snow enthalpy and max temperature +#ifdef UNDEPRECATE_0LAYER if (hsn > hs_min .and. heat_capacity) then +#else + if (hsn > hs_min) then +#endif ! zqsn < 0 zqsn = trcrn(nt_qsno+k-1,n) Tmax = -zqsn*puny*rnslyr / (rhos*cp_ice*vsnon(n)) @@ -1591,6 +1610,7 @@ subroutine zap_snow_temperature(dt, ncat, & end subroutine zap_snow_temperature +#ifdef UNDEPRECATE_0LAYER !======================================================================= ! Checks that the snow and ice energy in the zero layer thermodynamics ! model still agrees with the snow and ice volume. @@ -1728,7 +1748,7 @@ subroutine zerolayer_check (ncat, nilyr, & enddo ! ncat end subroutine zerolayer_check - +#endif !======================================================================= !autodocument_start icepack_init_itd ! Initialize area fraction and thickness boundaries for the itd model diff --git a/columnphysics/icepack_mechred.F90 b/columnphysics/icepack_mechred.F90 index 54a7e9a19..c3bd2f021 100644 --- a/columnphysics/icepack_mechred.F90 +++ b/columnphysics/icepack_mechred.F90 @@ -39,8 +39,11 @@ module icepack_mechred use icepack_parameters, only: puny, Lfresh, rhoi, rhos use icepack_parameters, only: kstrength, krdg_partic, krdg_redist, mu_rdg +#ifdef UNDEPRECATE_0LAYER use icepack_parameters, only: heat_capacity, conserv_check - +#else + use icepack_parameters, only: conserv_check +#endif use icepack_tracers, only: tr_pond_topo, tr_aero, tr_iso, tr_brine, ntrcr, nbtrcr use icepack_tracers, only: nt_qice, nt_qsno, nt_fbri, nt_sice use icepack_tracers, only: nt_alvl, nt_vlvl, nt_aero, nt_isosno, nt_isoice @@ -1815,7 +1818,9 @@ subroutine icepack_step_ridge (dt, ndtd, & !tr_pond_topo,& ! if .true., use explicit topography-based ponds !tr_aero ,& ! if .true., use aerosol tracers !tr_brine !,& ! if .true., brine height differs from ice thickness +#ifdef UNDEPRECATE_0LAYER !heat_capacity ! if true, ice has nonzero heat capacity +#endif logical (kind=log_kind), dimension(:), intent(inout) :: & first_ice ! true until ice forms @@ -1906,7 +1911,11 @@ subroutine icepack_step_ridge (dt, ndtd, & n_aero, & nbtrcr, nblyr, & tr_aero, & +#ifdef UNDEPRECATE_0LAYER tr_pond_topo, heat_capacity, & +#else + tr_pond_topo, & +#endif first_ice, & trcr_depend, trcr_base, & n_trcr_strata, nt_strata, & diff --git a/columnphysics/icepack_meltpond_lvl.F90 b/columnphysics/icepack_meltpond_lvl.F90 index 11a9da1f1..5ba132692 100644 --- a/columnphysics/icepack_meltpond_lvl.F90 +++ b/columnphysics/icepack_meltpond_lvl.F90 @@ -47,8 +47,11 @@ subroutine compute_ponds_lvl(dt, nilyr, & integer (kind=int_kind), intent(in) :: & nilyr, & ! number of ice layers +#ifdef UNDEPRECATE_0LAYER ktherm ! type of thermodynamics (0 0-layer, 1 BL99, 2 mushy) - +#else + ktherm ! type of thermodynamics (-1 none, 1 BL99, 2 mushy) +#endif real (kind=dbl_kind), intent(in) :: & dt, & ! time step (s) hi_min, & ! minimum ice thickness allowed for thermo (m) diff --git a/columnphysics/icepack_meltpond_topo.F90 b/columnphysics/icepack_meltpond_topo.F90 index 5d2f339e5..3245b64a2 100644 --- a/columnphysics/icepack_meltpond_topo.F90 +++ b/columnphysics/icepack_meltpond_topo.F90 @@ -39,7 +39,11 @@ module icepack_meltpond_topo !======================================================================= subroutine compute_ponds_topo(dt, ncat, nilyr, & +#ifdef UNDEPRECATE_0LAYER ktherm, heat_capacity, & +#else + ktherm, & +#endif aice, aicen, & vice, vicen, & vsno, vsnon, & @@ -54,10 +58,11 @@ subroutine compute_ponds_topo(dt, ncat, nilyr, & nilyr, & ! number of ice layers ktherm ! type of thermodynamics (0 0-layer, 1 BL99, 2 mushy) +#ifdef UNDEPRECATE_0LAYER logical (kind=log_kind), intent(in) :: & heat_capacity ! if true, ice has nonzero heat capacity ! if false, use zero-layer thermodynamics - +#endif real (kind=dbl_kind), intent(in) :: & dt ! time step (s) @@ -164,7 +169,11 @@ subroutine compute_ponds_topo(dt, ncat, nilyr, & ! calculate pond area and depth !-------------------------------------------------------------- call pond_area(dt, ncat, nilyr, & +#ifdef UNDEPRECATE_0LAYER ktherm, heat_capacity, & +#else + ktherm, & +#endif aice, vice, vsno, & aicen, vicen, vsnon, & qicen, sicen, & @@ -297,7 +306,11 @@ end subroutine compute_ponds_topo ! Computes melt pond area, pond depth and melting rates subroutine pond_area(dt, ncat, nilyr,& +#ifdef UNDEPRECATE_0LAYER ktherm, heat_capacity, & +#else + ktherm, & +#endif aice, vice, vsno, & aicen, vicen, vsnon,& qicen, sicen, & @@ -308,12 +321,17 @@ subroutine pond_area(dt, ncat, nilyr,& integer (kind=int_kind), intent(in) :: & ncat , & ! number of thickness categories nilyr, & ! number of ice layers +#ifdef UNDEPRECATE_0LAYER ktherm ! type of thermodynamics (0 0-layer, 1 BL99, 2 mushy) +#else + ktherm ! type of thermodynamics (-1 none, 1 BL99, 2 mushy) +#endif +#ifdef UNDEPRECATE_0LAYER logical (kind=log_kind), intent(in) :: & heat_capacity ! if true, ice has nonzero heat capacity ! if false, use zero-layer thermodynamics - +#endif real (kind=dbl_kind), intent(in) :: & dt, aice, vice, vsno, Tf @@ -505,9 +523,12 @@ subroutine pond_area(dt, ncat, nilyr,& if (ktherm /= 2 .and. pressure_head > c0) then do n = 1, ncat-1 if (hicen(n) > c0) then +#ifdef UNDEPRECATE_0LAYER call permeability_phi(heat_capacity, nilyr, & - qicen(:,n), sicen(:,n), Tsfcn(n), Tf, & - perm) +#else + call permeability_phi(nilyr, & +#endif + qicen(:,n), sicen(:,n), Tsfcn(n), Tf, perm) if (icepack_warnings_aborted(subname)) return if (perm > c0) permflag = 1 drain = perm*apondn(n)*pressure_head*dt / (viscosity_dyn*hicen(n)) @@ -746,14 +767,18 @@ end subroutine calc_hpond ! determine the liquid fraction of brine in the ice and the permeability +#ifdef UNDEPRECATE_0LAYER subroutine permeability_phi(heat_capacity, nilyr, & - qicen, sicen, Tsfcn, Tf, & - perm) +#else + subroutine permeability_phi(nilyr, & +#endif + qicen, sicen, Tsfcn, Tf, perm) +#ifdef UNDEPRECATE_0LAYER logical (kind=log_kind), intent(in) :: & heat_capacity ! if true, ice has nonzero heat capacity ! if false, use zero-layer thermodynamics - +#endif integer (kind=int_kind), intent(in) :: & nilyr ! number of ice layers @@ -787,14 +812,18 @@ subroutine permeability_phi(heat_capacity, nilyr, & ! NOTE this assumes Tmlt = Si * depressT !----------------------------------------------------------------- +#ifdef UNDEPRECATE_0LAYER if (heat_capacity) then +#endif do k = 1,nilyr Tmlt = -sicen(k) * depressT Tin(k) = calculate_Tin_from_qin(qicen(k),Tmlt) enddo +#ifdef UNDEPRECATE_0LAYER else Tin(1) = (Tsfcn + Tf) / c2 - endif + endif +#endif !----------------------------------------------------------------- ! brine salinity and liquid fraction @@ -808,11 +837,15 @@ subroutine permeability_phi(heat_capacity, nilyr, & -21.8_dbl_kind * Tin(k) & - 0.919_dbl_kind * Tin(k)**2 & - 0.01878_dbl_kind * Tin(k)**3 +#ifdef UNDEPRECATE_0LAYER if (heat_capacity) then +#endif phi(k) = sicen(k)/Sbr ! liquid fraction +#ifdef UNDEPRECATE_0LAYER else phi(k) = ice_ref_salinity / Sbr ! liquid fraction endif +#endif enddo ! k else @@ -827,12 +860,15 @@ subroutine permeability_phi(heat_capacity, nilyr, & call icepack_warnings_add(subname//' topo ponds: zero brine salinity in permeability') return endif +#ifdef UNDEPRECATE_0LAYER if (heat_capacity) then +#endif phi(k) = sicen(k) / Sbr ! liquid fraction +#ifdef UNDEPRECATE_0LAYER else phi(k) = ice_ref_salinity / Sbr ! liquid fraction endif - +#endif enddo endif diff --git a/columnphysics/icepack_parameters.F90 b/columnphysics/icepack_parameters.F90 index 50aa3a47f..bd3ffee7b 100644 --- a/columnphysics/icepack_parameters.F90 +++ b/columnphysics/icepack_parameters.F90 @@ -113,8 +113,10 @@ module icepack_parameters ice_ref_salinity =4._dbl_kind,&! (ppt) ! kice is not used for mushy thermo kice = 2.03_dbl_kind ,&! thermal conductivity of fresh ice(W/m/deg) +#ifdef UNDEPRECATE_0LAYER ! kseaice is used only for zero-layer thermo kseaice = 2.00_dbl_kind ,&! thermal conductivity of sea ice (W/m/deg) +#endif ksno = 0.30_dbl_kind ,&! thermal conductivity of snow (W/m/deg) hs_min = 1.e-4_dbl_kind ,&! min snow thickness for computing zTsn (m) snowpatch = 0.02_dbl_kind ,&! parameter for fractional snow area (m) @@ -136,7 +138,11 @@ module icepack_parameters integer (kind=int_kind), public :: & ktherm = 1 ! type of thermodynamics +#ifdef UNDEPRECATE_0LAYER ! 0 = 0-layer approximation +#else + ! -1 none +#endif ! 1 = Bitz and Lipscomb 1999 ! 2 = mushy layer theory @@ -145,8 +151,10 @@ module icepack_parameters fbot_xfer_type = 'constant' ! transfer coefficient type for ice-ocean heat flux logical (kind=log_kind), public :: & +#ifdef UNDEPRECATE_0LAYER heat_capacity = .true. ,&! if true, ice has nonzero heat capacity ! if false, use zero-layer thermodynamics +#endif calc_Tsfc = .true. ,&! if true, calculate surface temperature ! if false, Tsfc is computed elsewhere and ! atmos-ice fluxes are provided to CICE @@ -434,7 +442,11 @@ subroutine icepack_init_parameters( & stefan_boltzmann_in, ice_ref_salinity_in, & Tffresh_in, Lsub_in, Lvap_in, Timelt_in, Tsmelt_in, & iceruf_in, Cf_in, Pstar_in, Cstar_in, kappav_in, & +#ifdef UNDEPRECATE_0LAYER kice_in, kseaice_in, ksno_in, & +#else + kice_in, ksno_in, & +#endif zref_in, hs_min_in, snowpatch_in, rhosi_in, sk_l_in, & saltmax_in, phi_init_in, min_salin_in, salt_loss_in, & min_bgc_in, dSin0_frazil_in, hi_ssl_in, hs_ssl_in, & @@ -456,7 +468,11 @@ subroutine icepack_init_parameters( & bgc_flux_type_in, z_tracers_in, scale_bgc_in, solve_zbgc_in, & modal_aero_in, skl_bgc_in, solve_zsal_in, grid_o_in, l_sk_in, & initbio_frac_in, grid_oS_in, l_skS_in, dEdd_algae_in, & +#ifdef UNDEPRECATE_0LAYER phi_snow_in, heat_capacity_in, T_max_in, fsal_in, & +#else + phi_snow_in, T_max_in, fsal_in, & +#endif fr_resp_in, algal_vel_in, R_dFe2dust_in, dustFe_sol_in, & op_dep_min_in, fr_graze_s_in, fr_graze_e_in, fr_mort2min_in, & fr_dFe_in, k_nitrif_in, t_iron_conv_in, max_loss_in, & @@ -510,7 +526,9 @@ subroutine icepack_init_parameters( & Tsmelt_in, & ! melting temperature, snow top surface (C) ice_ref_salinity_in, & ! (ppt) kice_in, & ! thermal conductivity of fresh ice(W/m/deg) +#ifdef UNDEPRECATE_0LAYER kseaice_in, & ! thermal conductivity of sea ice (W/m/deg) +#endif ksno_in, & ! thermal conductivity of snow (W/m/deg) hs_min_in, & ! min snow thickness for computing zTsn (m) snowpatch_in, & ! parameter for fractional snow area (m) @@ -522,7 +540,11 @@ subroutine icepack_init_parameters( & integer (kind=int_kind), intent(in), optional :: & ktherm_in ! type of thermodynamics +#ifdef UNDEPRECATE_0LAYER ! 0 = 0-layer approximation +#else + ! -1 none +#endif ! 1 = Bitz and Lipscomb 1999 ! 2 = mushy layer theory @@ -531,8 +553,10 @@ subroutine icepack_init_parameters( & fbot_xfer_type_in ! transfer coefficient type for ice-ocean heat flux logical (kind=log_kind), intent(in), optional :: & +#ifdef UNDEPRECATE_0LAYER heat_capacity_in, &! if true, ice has nonzero heat capacity ! if false, use zero-layer thermodynamics +#endif calc_Tsfc_in , &! if true, calculate surface temperature ! if false, Tsfc is computed elsewhere and ! atmos-ice fluxes are provided to CICE @@ -845,7 +869,9 @@ subroutine icepack_init_parameters( & if (present(Cstar_in) ) Cstar = Cstar_in if (present(kappav_in) ) kappav = kappav_in if (present(kice_in) ) kice = kice_in +#ifdef UNDEPRECATE_0LAYER if (present(kseaice_in) ) kseaice = kseaice_in +#endif if (present(ksno_in) ) ksno = ksno_in if (present(zref_in) ) zref = zref_in if (present(hs_min_in) ) hs_min = hs_min_in @@ -875,7 +901,9 @@ subroutine icepack_init_parameters( & if (present(ktherm_in) ) ktherm = ktherm_in if (present(conduct_in) ) conduct = conduct_in if (present(fbot_xfer_type_in) ) fbot_xfer_type = fbot_xfer_type_in +#ifdef UNDEPRECATE_0LAYER if (present(heat_capacity_in) ) heat_capacity = heat_capacity_in +#endif if (present(calc_Tsfc_in) ) calc_Tsfc = calc_Tsfc_in if (present(update_ocn_f_in) ) update_ocn_f = update_ocn_f_in if (present(dts_b_in) ) dts_b = dts_b_in @@ -1105,7 +1133,11 @@ subroutine icepack_query_parameters( & stefan_boltzmann_out, ice_ref_salinity_out, & Tffresh_out, Lsub_out, Lvap_out, Timelt_out, Tsmelt_out, & iceruf_out, Cf_out, Pstar_out, Cstar_out, kappav_out, & +#ifdef UNDEPRECATE_0LAYER kice_out, kseaice_out, ksno_out, & +#else + kice_out, ksno_out, & +#endif zref_out, hs_min_out, snowpatch_out, rhosi_out, sk_l_out, & saltmax_out, phi_init_out, min_salin_out, salt_loss_out, & min_bgc_out, dSin0_frazil_out, hi_ssl_out, hs_ssl_out, & @@ -1127,7 +1159,11 @@ subroutine icepack_query_parameters( & bgc_flux_type_out, z_tracers_out, scale_bgc_out, solve_zbgc_out, & modal_aero_out, skl_bgc_out, solve_zsal_out, grid_o_out, l_sk_out, & initbio_frac_out, grid_oS_out, l_skS_out, & +#ifdef UNDEPRECATE_0LAYER phi_snow_out, heat_capacity_out, conserv_check_out, & +#else + phi_snow_out, conserv_check_out, & +#endif fr_resp_out, algal_vel_out, R_dFe2dust_out, dustFe_sol_out, & T_max_out, fsal_out, op_dep_min_out, fr_graze_s_out, fr_graze_e_out, & fr_mort2min_out, fr_resp_s_out, fr_dFe_out, & @@ -1190,7 +1226,9 @@ subroutine icepack_query_parameters( & Tsmelt_out, & ! melting temperature, snow top surface (C) ice_ref_salinity_out, & ! (ppt) kice_out, & ! thermal conductivity of fresh ice(W/m/deg) +#ifdef UNDEPRECATE_0LAYER kseaice_out, & ! thermal conductivity of sea ice (W/m/deg) +#endif ksno_out, & ! thermal conductivity of snow (W/m/deg) hs_min_out, & ! min snow thickness for computing zTsn (m) snowpatch_out, & ! parameter for fractional snow area (m) @@ -1202,7 +1240,11 @@ subroutine icepack_query_parameters( & integer (kind=int_kind), intent(out), optional :: & ktherm_out ! type of thermodynamics +#ifdef UNDEPRECATE_0LAYER ! 0 = 0-layer approximation +#else + ! -1 none +#endif ! 1 = Bitz and Lipscomb 1999 ! 2 = mushy layer theory @@ -1211,8 +1253,10 @@ subroutine icepack_query_parameters( & fbot_xfer_type_out ! transfer coefficient type for ice-ocean heat flux logical (kind=log_kind), intent(out), optional :: & +#ifdef UNDEPRECATE_0LAYER heat_capacity_out,&! if true, ice has nonzero heat capacity ! if false, use zero-layer thermodynamics +#endif calc_Tsfc_out ,&! if true, calculate surface temperature ! if false, Tsfc is computed elsewhere and ! atmos-ice fluxes are provided to CICE @@ -1565,7 +1609,9 @@ subroutine icepack_query_parameters( & if (present(Cstar_out) ) Cstar_out = Cstar if (present(kappav_out) ) kappav_out = kappav if (present(kice_out) ) kice_out = kice +#ifdef UNDEPRECATE_0LAYER if (present(kseaice_out) ) kseaice_out = kseaice +#endif if (present(ksno_out) ) ksno_out = ksno if (present(zref_out) ) zref_out = zref if (present(hs_min_out) ) hs_min_out = hs_min @@ -1595,7 +1641,9 @@ subroutine icepack_query_parameters( & if (present(ktherm_out) ) ktherm_out = ktherm if (present(conduct_out) ) conduct_out = conduct if (present(fbot_xfer_type_out) ) fbot_xfer_type_out = fbot_xfer_type +#ifdef UNDEPRECATE_0LAYER if (present(heat_capacity_out) ) heat_capacity_out= heat_capacity +#endif if (present(calc_Tsfc_out) ) calc_Tsfc_out = calc_Tsfc if (present(update_ocn_f_out) ) update_ocn_f_out = update_ocn_f if (present(dts_b_out) ) dts_b_out = dts_b @@ -1762,7 +1810,9 @@ subroutine icepack_write_parameters(iounit) write(iounit,*) " Cstar = ",Cstar write(iounit,*) " kappav = ",kappav write(iounit,*) " kice = ",kice +#ifdef UNDEPRECATE_0LAYER write(iounit,*) " kseaice = ",kseaice +#endif write(iounit,*) " ksno = ",ksno write(iounit,*) " zref = ",zref write(iounit,*) " hs_min = ",hs_min @@ -1799,7 +1849,9 @@ subroutine icepack_write_parameters(iounit) write(iounit,*) " ktherm = ", ktherm write(iounit,*) " conduct = ", conduct write(iounit,*) " fbot_xfer_type = ", fbot_xfer_type +#ifdef UNDEPRECATE_0LAYER write(iounit,*) " heat_capacity = ", heat_capacity +#endif write(iounit,*) " calc_Tsfc = ", calc_Tsfc write(iounit,*) " update_ocn_f = ", update_ocn_f write(iounit,*) " dts_b = ", dts_b diff --git a/columnphysics/icepack_shortwave.F90 b/columnphysics/icepack_shortwave.F90 index 6c4c548db..be854823d 100644 --- a/columnphysics/icepack_shortwave.F90 +++ b/columnphysics/icepack_shortwave.F90 @@ -46,7 +46,11 @@ module icepack_shortwave use icepack_parameters, only: albocn, Timelt, snowpatch, awtvdr, awtidr, awtvdf, awtidf use icepack_parameters, only: kappav, hs_min, rhofresh, rhos, nspint, rsnw_fall, snwredist, rsnw_tmax use icepack_parameters, only: hi_ssl, hs_ssl, min_bgc, sk_l, snwlvlfac, snwgrain +#ifdef UNDEPRECATE_0LAYER use icepack_parameters, only: z_tracers, skl_bgc, calc_tsfc, shortwave, kalg, heat_capacity +#else + use icepack_parameters, only: z_tracers, skl_bgc, calc_tsfc, shortwave, kalg +#endif use icepack_parameters, only: r_ice, r_pnd, r_snw, dt_mlt, rsnw_mlt, hs0, hs1, hp1 use icepack_parameters, only: pndaspect, albedo_type, albicev, albicei, albsnowv, albsnowi, ahmax use icepack_tracers, only: ntrcr, nbtrcr_sw @@ -95,7 +99,9 @@ subroutine shortwave_ccsm3 (aicen, vicen, & vsnon, Tsfcn, & swvdr, swvdf, & swidr, swidf, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, & +#endif albedo_type, & albicev, albicei, & albsnowv, albsnowi, & @@ -138,9 +144,10 @@ subroutine shortwave_ccsm3 (aicen, vicen, & albsnowi, & ! cold snow albedo, near IR ahmax ! thickness above which ice albedo is constant (m) +#ifdef UNDEPRECATE_0LAYER logical(kind=log_kind), intent(in) :: & heat_capacity! if true, ice has nonzero heat capacity - +#endif character (len=char_len), intent(in) :: & albedo_type ! albedo parameterization, 'ccsm3' or 'constant' @@ -290,8 +297,12 @@ subroutine shortwave_ccsm3 (aicen, vicen, & ! Compute solar radiation absorbed in ice and penetrating to ocean. !----------------------------------------------------------------- +#ifdef UNDEPRECATE_0LAYER call absorbed_solar (heat_capacity, & nilyr, & +#else + call absorbed_solar (nilyr, & +#endif aicen(n), & vicen(n), & vsnon(n), & @@ -569,8 +580,12 @@ end subroutine constant_albedos ! authors William H. Lipscomb, LANL ! C. M. Bitz, UW +#ifdef UNDEPRECATE_0LAYER subroutine absorbed_solar (heat_capacity, & nilyr, aicen, & +#else + subroutine absorbed_solar (nilyr, aicen, & +#endif vicen, vsnon, & swvdr, swvdf, & swidr, swidf, & @@ -587,9 +602,10 @@ subroutine absorbed_solar (heat_capacity, & fswpenl, & Iswabs) +#ifdef UNDEPRECATE_0LAYER logical(kind=log_kind), intent(in) :: & heat_capacity ! if true, ice has nonzero heat capacity - +#endif integer (kind=int_kind), intent(in) :: & nilyr ! number of ice layers @@ -736,6 +752,7 @@ subroutine absorbed_solar (heat_capacity, & ! SW absorbed in ice interior fswint = fswpen - fswthru +#ifdef UNDEPRECATE_0LAYER !---------------------------------------------------------------- ! if zero-layer model (no heat capacity), no SW is absorbed in ice ! interior, so add to surface absorption @@ -751,7 +768,7 @@ subroutine absorbed_solar (heat_capacity, & Iswabs(1) = c0 endif ! heat_capacity - +#endif end subroutine absorbed_solar ! End ccsm3 shortwave method @@ -774,7 +791,9 @@ subroutine run_dEdd(dt, ncat, & hpndn, ipndn, & aeron, kalg, & trcrn_bgcsw, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, & +#endif tlat, tlon, & calendar_type, & days_per_year, & @@ -818,7 +837,9 @@ subroutine run_dEdd(dt, ncat, & nslyr ! number of snow layers logical(kind=log_kind), intent(in) :: & +#ifdef UNDEPRECATE_0LAYER heat_capacity,& ! if true, ice has nonzero heat capacity +#endif dEdd_algae, & ! .true. use prognostic chla in dEdd modal_aero ! .true. use modal aerosol treatment @@ -1153,7 +1174,11 @@ subroutine run_dEdd(dt, ncat, & call shortwave_dEdd(dEdd_algae, & nslyr, nilyr, & +#ifdef UNDEPRECATE_0LAYER coszen, heat_capacity, & +#else + coszen, & +#endif aicen(n), vicen(n), & hsn, fsn, & rhosnwn, rsnwn, & @@ -1240,7 +1265,11 @@ end subroutine run_dEdd ! subroutine shortwave_dEdd (dEdd_algae, & nslyr, nilyr, & +#ifdef UNDEPRECATE_0LAYER coszen, heat_capacity,& +#else + coszen, & +#endif aice, vice, & hs, fs, & rhosnw, rsnw, & @@ -1275,7 +1304,9 @@ subroutine shortwave_dEdd (dEdd_algae, & nslyr ! number of snow layers logical (kind=log_kind), intent(in) :: & +#ifdef UNDEPRECATE_0LAYER heat_capacity, & ! if true, ice has nonzero heat capacity +#endif dEdd_algae, & ! .true. use prognostic chla in dEdd modal_aero ! .true. use modal aerosol treatment @@ -1460,7 +1491,11 @@ subroutine shortwave_dEdd (dEdd_algae, & srftyp = 0 call compute_dEdd(nilyr, nslyr, klev, klevp, & zbio, dEdd_algae, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, fnidr, coszen, & +#else + fnidr, coszen, & +#endif R_ice, R_pnd, & kaer_tab, waer_tab, gaer_tab, & kaer_bc_tab, waer_bc_tab, gaer_bc_tab, & @@ -1501,7 +1536,11 @@ subroutine shortwave_dEdd (dEdd_algae, & srftyp = 1 call compute_dEdd(nilyr, nslyr, klev, klevp, & zbio, dEdd_algae, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, fnidr, coszen, & +#else + fnidr, coszen, & +#endif R_ice, R_pnd, & kaer_tab, waer_tab, gaer_tab, & kaer_bc_tab, waer_bc_tab, gaer_bc_tab, & @@ -1547,7 +1586,11 @@ subroutine shortwave_dEdd (dEdd_algae, & srftyp = 2 call compute_dEdd(nilyr, nslyr, klev, klevp, & zbio, dEdd_algae, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, fnidr, coszen, & +#else + fnidr, coszen, & +#endif R_ice, R_pnd, & kaer_tab, waer_tab, gaer_tab, & kaer_bc_tab, waer_bc_tab, gaer_bc_tab, & @@ -1666,7 +1709,11 @@ end subroutine shortwave_dEdd subroutine compute_dEdd (nilyr, nslyr, klev, klevp, & zbio, dEdd_algae, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, fnidr, coszen, & +#else + fnidr, coszen, & +#endif R_ice, R_pnd, & kaer_tab, waer_tab, gaer_tab, & kaer_bc_tab, waer_bc_tab, gaer_bc_tab, & @@ -1692,7 +1739,9 @@ subroutine compute_dEdd (nilyr, nslyr, klev, klevp, & ! (0 layer is included also) logical (kind=log_kind), intent(in) :: & +#ifdef UNDEPRECATE_0LAYER heat_capacity,& ! if true, ice has nonzero heat capacity +#endif dEdd_algae, & ! .true. use prognostic chla in dEdd modal_aero ! .true. use modal aerosol treatment @@ -3122,6 +3171,7 @@ subroutine compute_dEdd (nilyr, nslyr, klev, klevp, & endif enddo ! k +#ifdef UNDEPRECATE_0LAYER !---------------------------------------------------------------- ! if ice has zero heat capacity, no SW can be absorbed ! in the ice/snow interior, so add to surface absorption. @@ -3139,7 +3189,7 @@ subroutine compute_dEdd (nilyr, nslyr, klev, klevp, & Sswabs(1) = c0 endif ! heat_capacity - +#endif end subroutine compute_dEdd !======================================================================= @@ -4267,7 +4317,9 @@ subroutine icepack_step_radiation (dt, ncat, & hpndn, ipndn, & aeron, kalg, & trcrn_bgcsw, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, & +#endif TLAT, TLON, & calendar_type,days_per_year, & nextsw_cday, yday, & @@ -4316,7 +4368,9 @@ subroutine icepack_step_radiation (dt, ncat, & Tsfcn, & swvdr, swvdf, & swidr, swidf, & +#ifdef UNDEPRECATE_0LAYER heat_capacity, & +#endif albedo_type, & albicev, albicei, & albsnowv, albsnowi, & diff --git a/columnphysics/icepack_therm_0layer.F90 b/columnphysics/icepack_therm_0layer.F90 index 7a519f90a..9fca9363d 100644 --- a/columnphysics/icepack_therm_0layer.F90 +++ b/columnphysics/icepack_therm_0layer.F90 @@ -10,6 +10,7 @@ module icepack_therm_0layer +#ifdef UNDEPRECATE_0LAYER use icepack_kinds use icepack_parameters, only: c0, c1, p5, puny use icepack_parameters, only: kseaice, ksno @@ -334,6 +335,7 @@ subroutine zerolayer_temperature(nilyr, nslyr, & end subroutine zerolayer_temperature +#endif !======================================================================= end module icepack_therm_0layer diff --git a/columnphysics/icepack_therm_itd.F90 b/columnphysics/icepack_therm_itd.F90 index 2ff80c6b5..901d64ef6 100644 --- a/columnphysics/icepack_therm_itd.F90 +++ b/columnphysics/icepack_therm_itd.F90 @@ -25,7 +25,11 @@ module icepack_therm_itd use icepack_parameters, only: rhos, rhoi, Lfresh, ice_ref_salinity use icepack_parameters, only: phi_init, dsin0_frazil, hs_ssl, salt_loss use icepack_parameters, only: rhosi, conserv_check, rhosmin +#ifdef UNDEPRECATE_0LAYER use icepack_parameters, only: kitd, ktherm, heat_capacity +#else + use icepack_parameters, only: kitd, ktherm +#endif use icepack_parameters, only: z_tracers, solve_zsal, hfrazilmin use icepack_tracers, only: ntrcr, nbtrcr @@ -1316,7 +1320,11 @@ subroutine add_new_ice (ncat, nilyr, & ntrcr , & ! number of tracers nltrcr, & ! number of zbgc tracers n_aero, & ! number of aerosol tracers +#ifdef UNDEPRECATE_0LAYER ktherm ! type of thermodynamics (0 0-layer, 1 BL99, 2 mushy) +#else + ktherm ! type of thermodynamics (-1 none, 1 BL99, 2 mushy) +#endif real (kind=dbl_kind), dimension(0:ncat), intent(in) :: & hin_max ! category boundaries (m) @@ -2273,7 +2281,11 @@ subroutine icepack_step_therm2 (dt, ncat, nltrcr, & n_aero, & nbtrcr, nblyr, & tr_aero, & +#ifdef UNDEPRECATE_0LAYER tr_pond_topo, heat_capacity, & +#else + tr_pond_topo, & +#endif first_ice, & trcr_depend, trcr_base, & n_trcr_strata, nt_strata, & diff --git a/columnphysics/icepack_therm_shared.F90 b/columnphysics/icepack_therm_shared.F90 index 621fd1e56..d3f938dc9 100644 --- a/columnphysics/icepack_therm_shared.F90 +++ b/columnphysics/icepack_therm_shared.F90 @@ -12,7 +12,11 @@ module icepack_therm_shared use icepack_parameters, only: cp_ocn, cp_ice, rhoi, rhos, Tffresh, TTTice, qqqice use icepack_parameters, only: stefan_boltzmann, emissivity, Lfresh, Tsmelt use icepack_parameters, only: saltmax, min_salin, depressT +#ifdef UNDEPRECATE_0LAYER use icepack_parameters, only: ktherm, heat_capacity, tfrz_option +#else + use icepack_parameters, only: ktherm, tfrz_option +#endif use icepack_parameters, only: calc_Tsfc use icepack_warnings, only: warnstr, icepack_warnings_add use icepack_warnings, only: icepack_warnings_setabort, icepack_warnings_aborted @@ -245,12 +249,16 @@ subroutine icepack_init_thermo(nilyr, sprofile) ! Set l_brine to false for zero layer thermodynamics !----------------------------------------------------------------- +#ifdef UNDEPRECATE_0LAYER heat_capacity = .true. if (ktherm == 0) heat_capacity = .false. ! 0-layer thermodynamics l_brine = .false. if (saltmax > min_salin .and. heat_capacity) l_brine = .true. - +#else + l_brine = .false. + if (saltmax > min_salin) l_brine = .true. +#endif !----------------------------------------------------------------- ! Prescibe vertical profile of salinity and melting temperature. ! Note this profile is only used for BL99 thermodynamics. @@ -316,7 +324,9 @@ subroutine icepack_init_trcr(Tair, Tf, & Tsfc = Tf ! default if (calc_Tsfc) Tsfc = min(Tsmelt, Tair - Tffresh) ! deg C +#ifdef UNDEPRECATE_0LAYER if (heat_capacity) then +#endif ! ice enthalpy do k = 1, nilyr @@ -338,6 +348,7 @@ subroutine icepack_init_trcr(Tair, Tf, & qsn(k) = -rhos*(Lfresh - cp_ice*Ti) enddo ! nslyr +#ifdef UNDEPRECATE_0LAYER else ! one layer with zero heat capacity ! ice energy @@ -347,7 +358,7 @@ subroutine icepack_init_trcr(Tair, Tf, & qsn(1) = -rhos * Lfresh endif ! heat_capacity - +#endif end subroutine icepack_init_trcr !======================================================================= diff --git a/columnphysics/icepack_therm_vertical.F90 b/columnphysics/icepack_therm_vertical.F90 index 735bcef5d..6889bb4fe 100644 --- a/columnphysics/icepack_therm_vertical.F90 +++ b/columnphysics/icepack_therm_vertical.F90 @@ -23,7 +23,11 @@ module icepack_therm_vertical use icepack_parameters, only: c0, c1, p001, p5, puny use icepack_parameters, only: pi, depressT, Lvap, hs_min, cp_ice, min_salin use icepack_parameters, only: cp_ocn, rhow, rhoi, rhos, Lfresh, rhofresh, ice_ref_salinity +#ifdef UNDEPRECATE_0LAYER use icepack_parameters, only: ktherm, heat_capacity, calc_Tsfc, rsnw_fall, rsnw_tmax +#else + use icepack_parameters, only: ktherm, calc_Tsfc, rsnw_fall, rsnw_tmax +#endif use icepack_parameters, only: ustar_min, fbot_xfer_type, formdrag, calc_strair use icepack_parameters, only: rfracmin, rfracmax, dpscale, frzpnd, snwgrain, snwlvlfac use icepack_parameters, only: phi_i_mushy, floeshape, floediam, use_smliq_pnd, snwredist @@ -41,7 +45,9 @@ module icepack_therm_vertical use icepack_therm_shared, only: hi_min use icepack_therm_shared, only: adjust_enthalpy use icepack_therm_bl99, only: temperature_changes +#ifdef UNDEPRECATE_0LAYER use icepack_therm_0layer, only: zerolayer_temperature +#endif use icepack_therm_mushy, only: temperature_changes_salinity use icepack_warnings, only: warnstr, icepack_warnings_add @@ -305,8 +311,9 @@ subroutine thermo_vertical (nilyr, nslyr, & ! temperatures. !----------------------------------------------------------------- +#ifdef UNDEPRECATE_0LAYER if (heat_capacity) then ! usual case - +#endif if (ktherm == 2) then call temperature_changes_salinity(dt, & @@ -358,6 +365,7 @@ subroutine thermo_vertical (nilyr, nslyr, & endif ! ktherm +#ifdef UNDEPRECATE_0LAYER else if (calc_Tsfc) then @@ -386,7 +394,7 @@ subroutine thermo_vertical (nilyr, nslyr, & endif ! calc_Tsfc endif ! heat_capacity - +#endif ! intermediate energy for error check einter = c0 @@ -770,8 +778,10 @@ subroutine init_vertical_profile(nilyr, nslyr, & !----------------------------------------------------------------- ! Snow enthalpy and maximum allowed snow temperature +#ifdef UNDEPRECATE_0LAYER ! If heat_capacity = F, zqsn and zTsn are used only for checking ! conservation. +#endif !----------------------------------------------------------------- do k = 1, nslyr @@ -783,7 +793,11 @@ subroutine init_vertical_profile(nilyr, nslyr, & ! where 'd' denotes an error due to roundoff. !----------------------------------------------------------------- +#ifdef UNDEPRECATE_0LAYER if (hslyr > hs_min/rnslyr .and. heat_capacity) then +#else + if (hslyr > hs_min/rnslyr) then +#endif ! zqsn < 0 Tmax = -zqsn(k)*puny*rnslyr / & (rhos*cp_ice*vsnon) @@ -813,7 +827,11 @@ subroutine init_vertical_profile(nilyr, nslyr, & ! If zTsn is out of bounds, print diagnostics and exit. !----------------------------------------------------------------- +#ifdef UNDEPRECATE_0LAYER if (tsno_high .and. heat_capacity) then +#else + if (tsno_high) then +#endif do k = 1, nslyr if (hslyr > hs_min/rnslyr) then @@ -842,7 +860,11 @@ subroutine init_vertical_profile(nilyr, nslyr, & enddo ! nslyr endif ! tsno_high +#ifdef UNDEPRECATE_0LAYER if (tsno_low .and. heat_capacity) then +#else + if (tsno_low) then +#endif do k = 1, nslyr if (zTsn(k) < Tmin) then ! allowing for roundoff error @@ -910,8 +932,10 @@ subroutine init_vertical_profile(nilyr, nslyr, & !----------------------------------------------------------------- ! Compute ice enthalpy +#ifdef UNDEPRECATE_0LAYER ! If heat_capacity = F, zqin and zTin are used only for checking ! conservation. +#endif !----------------------------------------------------------------- !----------------------------------------------------------------- @@ -943,7 +967,11 @@ subroutine init_vertical_profile(nilyr, nslyr, & ! If zTin is out of bounds, print diagnostics and exit. !----------------------------------------------------------------- +#ifdef UNDEPRECATE_0LAYER if (tice_high .and. heat_capacity) then +#else + if (tice_high) then +#endif write(warnstr,*) ' ' call icepack_warnings_add(warnstr) write(warnstr,*) subname, 'Starting thermo, zTin > Tmax, layer', k @@ -979,7 +1007,11 @@ subroutine init_vertical_profile(nilyr, nslyr, & endif endif ! tice_high +#ifdef UNDEPRECATE_0LAYER if (tice_low .and. heat_capacity) then +#else + if (tice_low) then +#endif write(warnstr,*) ' ' call icepack_warnings_add(warnstr) write(warnstr,*) subname, 'Starting thermo T < Tmin, layer', k @@ -1311,7 +1343,9 @@ subroutine thickness_changes (nilyr, nslyr, & Tmlts = -zSin(nilyr) * depressT ! enthalpy of new ice growing at bottom surface +#ifdef UNDEPRECATE_0LAYER if (heat_capacity) then +#endif if (l_brine) then qbotmax = -p5*rhoi*Lfresh ! max enthalpy of ice growing at bottom qbot = -rhoi * (cp_ice * (Tmlts-Tbot) & @@ -1321,10 +1355,11 @@ subroutine thickness_changes (nilyr, nslyr, & else qbot = -rhoi * (-cp_ice * Tbot + Lfresh) endif +#ifdef UNDEPRECATE_0LAYER else ! zero layer qbot = -rhoi * Lfresh endif - +#endif dhi = ebot_gro / qbot ! dhi > 0 hqtot = dzi(nilyr)*zqin(nilyr) + dhi*qbot @@ -1669,8 +1704,9 @@ subroutine thickness_changes (nilyr, nslyr, & zi2(1) = c0 zi2(1+nilyr) = hin +#ifdef UNDEPRECATE_0LAYER if (heat_capacity) then - +#endif do k = 1, nilyr-1 zi1(k+1) = zi1(k) + dzi(k) zi2(k+1) = zi2(k) + hilyr @@ -1693,13 +1729,14 @@ subroutine thickness_changes (nilyr, nslyr, & zSin) if (icepack_warnings_aborted(subname)) return +#ifdef UNDEPRECATE_0LAYER else ! zero layer (nilyr=1) zqin(1) = -rhoi * Lfresh zqsn(1) = -rhos * Lfresh endif - +#endif if (nslyr > 1) then !----------------------------------------------------------------- @@ -3088,7 +3125,11 @@ subroutine icepack_step_therm1(dt, ncat, nilyr, nslyr, & !call ice_timer_start(timer_ponds) if (tr_pond_topo) then call compute_ponds_topo(dt, ncat, nilyr, & +#ifdef UNDEPRECATE_0LAYER ktherm, heat_capacity, & +#else + ktherm, & +#endif aice, aicen, & vice, vicen, & vsno, vsnon, & diff --git a/configuration/driver/icedrv_init.F90 b/configuration/driver/icedrv_init.F90 index 5d26dc465..7aa71361b 100644 --- a/configuration/driver/icedrv_init.F90 +++ b/configuration/driver/icedrv_init.F90 @@ -609,6 +609,12 @@ subroutine input_data 'WARNING: For consistency, set tfrz_option = mushy' endif + if (ktherm == 0) then + write (nu_diag,*) 'WARNING: ktherm = 0 zero-layer thermodynamics' + write (nu_diag,*) 'WARNING: has been deprecated' + call icedrv_system_abort(file=__FILE__,line=__LINE__) + endif + if (formdrag) then if (trim(atmbndy) == 'constant') then write (nu_diag,*) 'WARNING: atmbndy = constant not allowed with formdrag' @@ -1088,8 +1094,10 @@ subroutine init_state k , & ! vertical index it ! tracer index +#ifdef UNDEPRECATE_0LAYER logical (kind=log_kind) :: & heat_capacity ! from icepack +#endif integer (kind=int_kind) :: ntrcr logical (kind=log_kind) :: tr_iage, tr_FY, tr_lvl, tr_aero, tr_fsd, tr_iso @@ -1109,7 +1117,9 @@ subroutine init_state ! query Icepack values !----------------------------------------------------------------- +#ifdef UNDEPRECATE_0LAYER call icepack_query_parameters(heat_capacity_out=heat_capacity) +#endif call icepack_query_tracer_sizes(ntrcr_out=ntrcr) call icepack_query_tracer_flags(tr_iage_out=tr_iage, & tr_FY_out=tr_FY, tr_lvl_out=tr_lvl, tr_aero_out=tr_aero, & @@ -1149,6 +1159,7 @@ subroutine init_state call icedrv_system_abort(file=__FILE__,line=__LINE__) endif +#ifdef UNDEPRECATE_0LAYER if (.not.heat_capacity) then write (nu_diag,*) 'WARNING - Zero-layer thermodynamics' @@ -1168,7 +1179,7 @@ subroutine init_state endif endif ! heat_capacity = F - +#endif !----------------------------------------------------------------- ! Set tracer types !----------------------------------------------------------------- diff --git a/configuration/scripts/machines/env.badger_intel b/configuration/scripts/machines/env.badger_intel index 4a1e5d668..a7a327055 100755 --- a/configuration/scripts/machines/env.badger_intel +++ b/configuration/scripts/machines/env.badger_intel @@ -39,9 +39,9 @@ setenv ICE_MACHINE_MACHINFO "Penguin Intel Xeon Broadwell" setenv ICE_MACHINE_ENVNAME intel setenv ICE_MACHINE_ENVINFO "(Note: can vary) ifort 19.0.4.243 20190416, netcdf4.4.0" setenv ICE_MACHINE_MAKE gmake -setenv ICE_MACHINE_WKDIR /net/scratch3/$user/ICEPACK_RUNS +setenv ICE_MACHINE_WKDIR /net/scratch4/$user/ICEPACK_RUNS setenv ICE_MACHINE_INPUTDATA /usr/projects/climate/eclare/DATA/Consortium -setenv ICE_MACHINE_BASELINE /net/scratch3/$user/ICEPACK_BASELINE +setenv ICE_MACHINE_BASELINE /net/scratch4/$user/ICEPACK_BASELINE setenv ICE_MACHINE_SUBMIT "sbatch " #setenv ICE_MACHINE_ACCT e3sm setenv ICE_MACHINE_ACCT climatehilat diff --git a/configuration/scripts/options/set_nml.alt01 b/configuration/scripts/options/set_nml.alt01 index 26a64d94e..f9d279370 100644 --- a/configuration/scripts/options/set_nml.alt01 +++ b/configuration/scripts/options/set_nml.alt01 @@ -1,6 +1,6 @@ kcatbound = 1 kitd = 1 -ktherm = 0 +ktherm = 1 conduct = 'bubbly' shortwave = 'ccsm3' albedo_type = 'constant' diff --git a/configuration/scripts/options/set_nml.alt02 b/configuration/scripts/options/set_nml.alt02 index 8660762f2..c0f5e8b44 100644 --- a/configuration/scripts/options/set_nml.alt02 +++ b/configuration/scripts/options/set_nml.alt02 @@ -2,7 +2,7 @@ kitd = 0 tr_pond_lvl = .false. tr_pond_topo = .false. - ktherm = 0 + ktherm = 1 tfrz_option = 'linear_salt' conduct = 'bubbly' default_season = 'winter' diff --git a/doc/source/icepack_index.rst b/doc/source/icepack_index.rst index 0ffedfa10..4cde0efbf 100755 --- a/doc/source/icepack_index.rst +++ b/doc/source/icepack_index.rst @@ -7,7 +7,7 @@ Index of primary variables and parameters This index defines many of the symbols used frequently in the ice model code. Values appearing in this list are fixed or recommended; most -namelist parameters are indicated ( :math:`E_\circ`) with their default +namelist parameters are indicated ( :math:`\bullet`) with their default values. For other namelist options, see Section :ref:`tabnamelist`. All quantities in the code are expressed in MKS units (temperatures may take either Celsius or Kelvin units). @@ -202,7 +202,7 @@ either Celsius or Kelvin units). "H2_16O_ocn", "concentration of H2_16O isotope in ocean", "kg/kg" "H2_18O_ocn", "concentration of H2_18O isotope in ocean", "kg/kg" "HDO_ocn", "concentration of HDO isotope in ocean", "kg/kg" - "heat_capacity", ":math:`\bullet` if true, use salinity-dependent thermodynamics", "T" + "heat_capacity", "DEPRECATED", "" "hfrazilmin", "minimum thickness of new frazil ice", "0.05 m" "hi_min", "minimum ice thickness for thinnest ice category", "0.01 m" "hi_ssl", "ice surface scattering layer thickness", "0.05 m" @@ -250,10 +250,10 @@ either Celsius or Kelvin units). "krdg_partic", ":math:`\bullet` ridging participation function", "1" "krdg_redist", ":math:`\bullet` ridging redistribution function", "1" "krdgn", "mean ridge thickness per thickness of ridging ice", "" - "kseaice", "thermal conductivity of ice for zero-layer thermodynamics", "2.0 W/m/deg" + "kseaice", "DEPRECATED", "" "ksno", "thermal conductivity of snow", "0.30 W/m/deg" "kstrength", ":math:`\bullet` ice stength formulation (1= :cite:`Rothrock75`, 0 = :cite:`Hibler79`)", "1" - "ktherm", ":math:`\bullet` thermodynamic formulation (0 = zero-layer, 1 = :cite:`Bitz99`, 2 = mushy)", "" + "ktherm", ":math:`\bullet` thermodynamic formulation (-1 none, 1 = :cite:`Bitz99`, 2 = mushy)", "" "**L**", "", "" "l_brine", "flag for brine pocket effects", "" "l_mpond_fresh", ":math:`\bullet` if true, retain (topo) pond water until ponds drain", "" @@ -525,6 +525,17 @@ either Celsius or Kelvin units). "zTrf", "reference height for :math:`T_{ref}`, :math:`Q_{ref}`, :math:`U_{ref}`", "2. m" "zvir", "gas constant (water vapor)/gas constant (air) - 1", "0.606" + +.. + deprecation comments + ktherm=0 (zero-layer thermodynamics) is being deprecated + heat_capacity is being deprecated as part of ktherm=0 (zero-layer thermo) deprecation + "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)", "" + + .. comment tr_pond_cesm is being deprecated "tr_pond_cesm", ":math:`\bullet` if true, use CESM melt pond scheme", "" + diff --git a/doc/source/science_guide/sg_thermo.rst b/doc/source/science_guide/sg_thermo.rst index 5accdeb3b..355415a8d 100755 --- a/doc/source/science_guide/sg_thermo.rst +++ b/doc/source/science_guide/sg_thermo.rst @@ -5,9 +5,14 @@ Thermodynamics ============== -The current Icepack version includes three thermodynamics -options, the "zero-layer" thermodynamics of :cite:`Semtner76` -(``ktherm`` = 0), the Bitz and Lipscomb model :cite:`Bitz99` +.. + ktherm=0 (zero-layer thermodynamics) is being deprecated + The current Icepack version includes three thermodynamics + options, the "zero-layer" thermodynamics of :cite:`Semtner76` + (``ktherm`` = 0), the Bitz and Lipscomb model :cite:`Bitz99` + +The current Icepack version includes two thermodynamics +options, the Bitz and Lipscomb model :cite:`Bitz99` (``ktherm`` = 1) that assumes a fixed salinity profile, and a "mushy" formulation (``ktherm`` = 2) in which salinity evolves :cite:`Turner13`. For each thickness category, Icepack computes @@ -866,15 +871,16 @@ that :math:`F_{bot} + F_{side} \ge F_{frzmlt}` in the case that New temperatures ---------------- -Zero-layer thermodynamics (``ktherm`` = 0) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. comment: ktherm=0 (zero-layer thermo) is being deprecated +.. Zero-layer thermodynamics (``ktherm`` = 0) +.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -An option for zero-layer thermodynamics :cite:`Semtner76` is -available in this version of Icepack by setting the namelist parameter -``ktherm`` to 0 and changing the number of ice layers, nilyr, in -**icedrv\_domain\_size.F90** to 1. In the zero-layer case, the ice is -fresh and the thermodynamic calculations are much simpler than in the -other configurations, which we describe here. +.. An option for zero-layer thermodynamics :cite:`Semtner76` is +.. available in this version of Icepack by setting the namelist parameter +.. ``ktherm`` to 0 and changing the number of ice layers, nilyr, in +.. **icedrv\_domain\_size.F90** to 1. In the zero-layer case, the ice is +.. fresh and the thermodynamic calculations are much simpler than in the +.. other configurations, which we describe here. Bitz and Lipscomb thermodynamics (``ktherm`` = 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1299,7 +1305,8 @@ contains salt, it usually will be fully melted at a temperature below :math:`0^{\circ}C`. Equations :eq:`ice-enthalpy` and :eq:`enth-def` are equivalent except for the density used in the term representing the -energy required to bring the melt water temperature to (:math:`\rho_i` +energy required to bring the melt water temperature to :math:`0^{\circ}C` +(:math:`\rho_i` and :math:`\rho_w` in equations :eq:`ice-enthalpy` and :eq:`enth-def`, respectively). diff --git a/doc/source/user_guide/ug_case_settings.rst b/doc/source/user_guide/ug_case_settings.rst index 565eaf432..649e28efd 100755 --- a/doc/source/user_guide/ug_case_settings.rst +++ b/doc/source/user_guide/ug_case_settings.rst @@ -211,7 +211,6 @@ thermo_nml "", "``1``", "linear remapping ITD approximation", "" "``ksno``", "real", "snow thermal conductivity", "0.3" "``ktherm``", "``-1``", "thermodynamic model disabled", "1" - "", "``0``", "zero-layer thermodynamic model", "" "", "``1``", "Bitz and Lipscomb thermodynamic model", "" "", "``2``", "mushy-layer thermodynamic model", "" "``phi_c_slow_mode``", ":math:`0<\phi_c < 1`", "critical liquid fraction", "0.05" @@ -219,6 +218,10 @@ thermo_nml "``Rac_rapid_mode``", "real", "critical Rayleigh number", "10.0" "", "", "", "" +.. + ktherm=0 (zero-layer thermodynamics) is being deprecated + "", "``0``", "zero-layer thermodynamic model", "" + dynamics_nml ~~~~~~~~~~~~~~~~~~~~~~~~~