From 95d55daffc411635f07581a026fe298f9f246f19 Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Tue, 6 Feb 2024 08:40:18 -0500 Subject: [PATCH 1/8] Permit running with a global slab ocean --- gsmphys/som_mlm.F90 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gsmphys/som_mlm.F90 b/gsmphys/som_mlm.F90 index 5b005f21..4314af3b 100644 --- a/gsmphys/som_mlm.F90 +++ b/gsmphys/som_mlm.F90 @@ -35,9 +35,8 @@ module module_ocean ! public ocean_init, update_ocean ! - real (kind=kind_phys) :: maxlat, width_buffer, minmld, & + real (kind=kind_phys) :: width_buffer, minmld, & cpwater, rhowater, omega, grav - parameter(maxlat = 60.) ! determine the maximum latitude band for SOM/MLM parameter(minmld = 10.) ! minimum mixed layer depth parameter(width_buffer = 15.) ! the width of a buffer band where SST is determined by both SOM/MLM ! and climatology (or climatology plus initial anomaly) @@ -66,8 +65,8 @@ module module_ocean ! real(kind=kind_phys) :: eps_day = 10. ! damping time scale of ocean current (days) real(kind=kind_phys) :: sst_restore_tscale = 3. ! restoring time scale for sst (day) real(kind=kind_phys) :: mld_restore_tscale = 1. ! restoring time scale for mld (day) - real(kind=kind_phys) :: start_lat = -30. ! latitude starting from? Note that this value should not be smaller than -60. - real(kind=kind_phys) :: end_lat = 30. ! latitude ending with? Note that this value should not be bigger than 60. + real(kind=kind_phys) :: start_lat = -30. ! latitude starting from? Note that this value should not be smaller than -maxlat. + real(kind=kind_phys) :: end_lat = 30. ! latitude ending with? Note that this value should not be bigger than maxlat. real(kind=kind_phys) :: tday1 = 3. ! real(kind=kind_phys) :: tday2 = 10. ! real(kind=kind_phys) :: sst_restore_tscale1= 3. ! restoring time scale for sst during the period from 1 to tday1 @@ -78,13 +77,14 @@ module module_ocean ! ! climatological SST plus initial anomaly logical :: use_tvar_restore_sst = .false.! using time varying restoring time scale for sst logical :: use_tvar_restore_mld = .false.! using time varying restoring time scale for mld + real(kind=kind_phys) :: maxlat = 60. ! maximum latitudinal extent of the SOM/MLM; for most physical results, set <= 60.0 namelist /ocean_nml/ & ocean_option, mld_option, mld_obs_ratio, stress_ratio, restore_method, & use_old_mlm, use_rain_flux, use_qflux, do_mld_restore, const_mld, Gam, & eps_day, sst_restore_tscale, mld_restore_tscale, start_lat, end_lat, & tday1, tday2, sst_restore_tscale1, sst_restore_tscale2, mld_restore_tscale1, & - mld_restore_tscale2, use_tvar_restore_sst, use_tvar_restore_mld + mld_restore_tscale2, use_tvar_restore_sst, use_tvar_restore_mld, maxlat ! ================= contains @@ -149,11 +149,11 @@ subroutine ocean_init & #endif if (start_lat < -maxlat) then - write(*,*) 'start_lat should not be smaller than -60.' + write(*,*) 'start_lat should not be smaller than', -maxlat call abort endif if (end_lat > maxlat) then - write(*,*) 'end_lat should not be larger than 60.' + write(*,*) 'end_lat should not be larger than', maxlat call abort endif From f35704e0aa05b6c6d3730e09efe57a845ff4540d Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Tue, 6 Feb 2024 16:03:32 -0500 Subject: [PATCH 2/8] Add option to disable quasi-sea-ice Also update comment for maxlat option in SOM --- GFS_layer/GFS_driver.F90 | 3 +- GFS_layer/GFS_typedefs.F90 | 17 +++++++++++ gsmphys/physparam.f | 5 +++- gsmphys/rad_initialize.f | 15 ++++++---- gsmphys/radiation_surface.f | 59 ++++++++++++++++++++++++++++++------- gsmphys/som_mlm.F90 | 3 +- 6 files changed, 83 insertions(+), 19 deletions(-) diff --git a/GFS_layer/GFS_driver.F90 b/GFS_layer/GFS_driver.F90 index cf3f5f24..0867781f 100644 --- a/GFS_layer/GFS_driver.F90 +++ b/GFS_layer/GFS_driver.F90 @@ -206,7 +206,8 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, & si = (Init_parm%ak + Init_parm%bk * p_ref - Init_parm%ak(Model%levr+1)) & / (p_ref - Init_parm%ak(Model%levr+1)) call rad_initialize (si, Model%levr, Model%ictm, Model%isol, & - Model%ico2, Model%iaer, Model%ialb, Model%iems, & + Model%ico2, Model%iaer, Model%ialb, & + Model%disable_radiation_quasi_sea_ice, Model%iems, & Model%ntcw, Model%num_p2d, Model%num_p3d, & Model%npdf3d, Model%ntoz, & Model%iovr_sw, Model%iovr_lw, Model%isubc_sw, & diff --git a/GFS_layer/GFS_typedefs.F90 b/GFS_layer/GFS_typedefs.F90 index 6a91b8a2..d7f8110b 100644 --- a/GFS_layer/GFS_typedefs.F90 +++ b/GFS_layer/GFS_typedefs.F90 @@ -516,6 +516,13 @@ module GFS_typedefs integer :: ico2 !< prescribed global mean value (old opernl) integer :: ialb !< use climatology alb, based on sfc type !< 1 => use modis based alb + + logical :: disable_radiation_quasi_sea_ice + !< flag to disable + !< radiation code treating ocean grid + !< cells with temperature below + !< freezing as sea ice + integer :: iems !< use fixed value of 1.0 integer :: iaer !< default aerosol effect in sw only integer :: iovr_sw !< sw: max-random overlap clouds @@ -2137,6 +2144,13 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: ico2 = 0 !< prescribed global mean value (old opernl) integer :: ialb = 0 !< use climatology alb, based on sfc type !< 1 => use modis based alb + + logical :: disable_radiation_quasi_sea_ice = .false. + !< flag to disable + !< radiation code treating ocean grid + !< cells with temperature below + !< freezing as sea ice + integer :: iems = 0 !< use fixed value of 1.0 integer :: iaer = 1 !< default aerosol effect in sw only integer :: iovr_sw = 1 !< sw: max-random overlap clouds @@ -2452,6 +2466,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & cplflx, cplwav, lsidea, & !--- radiation parameters fhswr, fhlwr, levr, nfxr, aero_in, iflip, isol, ico2, ialb, & + disable_radiation_quasi_sea_ice, & isot, iems, iaer, iovr_sw, iovr_lw, ictm, isubc_sw, & isubc_lw, crick_proof, ccnorm, lwhtr, swhtr, nkld, & fixed_date, fixed_solhr, fixed_sollat, daily_mean, sollat, & @@ -2615,6 +2630,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%isol = isol Model%ico2 = ico2 Model%ialb = ialb + Model%disable_radiation_quasi_sea_ice = disable_radiation_quasi_sea_ice Model%iems = iems Model%iaer = iaer Model%iovr_sw = iovr_sw @@ -3310,6 +3326,7 @@ subroutine control_print(Model) print *, ' isol : ', Model%isol print *, ' ico2 : ', Model%ico2 print *, ' ialb : ', Model%ialb + print *, ' disable_radiation_quasi_sea_ice: ', Model%disable_radiation_quasi_sea_ice print *, ' iems : ', Model%iems print *, ' iaer : ', Model%iaer print *, ' iovr_sw : ', Model%iovr_sw diff --git a/gsmphys/physparam.f b/gsmphys/physparam.f index 7e5ac8a6..e7aa40ff 100755 --- a/gsmphys/physparam.f +++ b/gsmphys/physparam.f @@ -270,7 +270,10 @@ module physparam ! !> surface albedo scheme control flag !!\n =0:vegetation type based climatological albedo scheme !!\n =1:seasonal albedo derived from MODIS measurements - integer, save :: ialbflg = 0 + integer, save :: ialbflg = 0 +!> flag to disable radiation code treating ocean grid cells with +!!\n temperature below freezing as sea ice + logical, save :: ldisable_radiation_quasi_sea_ice = .false. !> surface emissivity scheme control flag !!\n =0:black-body surface emissivity(=1.0) !!\n =1:vegetation type based climatology emissivity(<1.0) diff --git a/gsmphys/rad_initialize.f b/gsmphys/rad_initialize.f index dc0f4814..122330c6 100644 --- a/gsmphys/rad_initialize.f +++ b/gsmphys/rad_initialize.f @@ -2,7 +2,8 @@ subroutine rad_initialize & !................................... ! --- inputs: - & ( si,levr,ictm,isol,ico2,iaer,ialb,iems,ntcw, num_p2d, & + & ( si,levr,ictm,isol,ico2,iaer,ialb, & + & disable_radiation_quasi_sea_ice,iems,ntcw, num_p2d, & & num_p3d,npdf3d,ntoz,iovr_sw,iovr_lw,isubc_sw,isubc_lw, & & crick_proof,ccnorm,norad_precip, & & idate,iflip,me ) @@ -107,7 +108,7 @@ subroutine rad_initialize & & iaermdl, laswflg, lalwflg, lavoflg, icldflg, icmphys,& & iovrsw , iovrlw , lcrick , lcnorm , lnoprec, & & ialbflg, iemsflg, isubcsw, isubclw, ivflip , ipsd0, & - & kind_phys + & kind_phys, ldisable_radiation_quasi_sea_ice use module_radiation_driver, only : radinit ! @@ -120,8 +121,8 @@ subroutine rad_initialize & real (kind=kind_phys), intent(in) :: si(levr+1) - logical, intent(in) :: crick_proof, ccnorm, norad_precip - + logical, intent(in) :: crick_proof, ccnorm, norad_precip, & + & disable_radiation_quasi_sea_ice ! --- output: ( none ) ! --- local: @@ -184,6 +185,7 @@ subroutine rad_initialize & isubclw = isubc_lw ! sub-column cloud approx flag in lw radiation ialbflg= ialb ! surface albedo control flag + ldisable_radiation_quasi_sea_ice = disable_radiation_quasi_sea_ice ! flag to disable treating below freezing ocean grid cells as sea ice iemsflg= iems ! surface emissivity control flag ivflip = iflip ! vertical index direction control flag @@ -198,7 +200,10 @@ subroutine rad_initialize & print *,' In rad_initialize, before calling radinit' print *,' si =',si print *,' levr=',levr,' ictm=',ictm,' isol=',isol,' ico2=',ico2,& - & ' iaer=',iaer,' ialb=',ialb,' iems=',iems,' ntcw=',ntcw + & ' iaer=',iaer,' ialb=',ialb, & + & ' disable_radiation_quasi_sea_ice=', & + & disable_radiation_quasi_sea_ice, & + & ' iems=',iems,' ntcw=',ntcw print *,' np3d=',num_p3d,' ntoz=',ntoz,' iovr_sw=',iovr_sw, & & ' iovr_lw=',iovr_lw,' isubc_sw=',isubc_sw, & & ' isubc_lw=',isubc_lw,' iflip=',iflip,' me=',me diff --git a/gsmphys/radiation_surface.f b/gsmphys/radiation_surface.f index 759bc82b..11b6bd57 100644 --- a/gsmphys/radiation_surface.f +++ b/gsmphys/radiation_surface.f @@ -85,7 +85,8 @@ module module_radiation_surface ! !........................................! ! use physparam, only : ialbflg, iemsflg, semis_file, & - & kind_phys + & kind_phys, & + & ldisable_radiation_quasi_sea_ice use physcons, only : con_t0c, con_ttp, con_pi, con_tice use module_iounitdef, only : NIRADSF ! @@ -207,6 +208,21 @@ subroutine sfc_init & stop endif ! end if_ialbflg_block +!! \n physparam::ldisable_radiation_quasi_sea_ice +!! - = .false.: use a sea-ice-like albedo and emissivity for below +!! freezing ocean grid cells. +!! - = .true.: treat all ocean grid cells as if they were +!! above freezing when determing the albedo and emissivity + if ( ldisable_radiation_quasi_sea_ice ) then + if ( me == 0 ) then + print *, '- Disabling radiation quasi-sea-ice' + endif + else + if ( me == 0 ) then + print *, '- Enabling radiation quasi-sea-ice' + endif + endif + !> - Initialization of surface emissivity section !! \n physparam::iemsflg !! - = 0: fixed SFC emissivity at 1.0 @@ -424,7 +440,13 @@ subroutine setalb & argh = min(0.50, max(.025, 0.01*zorlf(i))) hrgh = min(f_one, max(0.20, 1.0577-1.1538e-3*hprif(i) ) ) fsno0 = asnow / (argh + asnow) * hrgh - if (nint(slmsk(i))==0 .and. tsknf(i)>con_tice) fsno0 = f_zero + + if (nint(slmsk(i))==0 .and. + & (tsknf(i)>con_tice .or. + & ldisable_radiation_quasi_sea_ice)) then + fsno0 = f_zero + endif + fsno1 = f_one - fsno0 flnd0 = min(f_one, facsf(i)+facwf(i)) fsea0 = max(f_zero, f_one-flnd0) @@ -434,7 +456,8 @@ subroutine setalb & !> - Calculate diffused sea surface albedo - if (tsknf(i) >= 271.5) then + if (tsknf(i) >= 271.5 .or. + & ldisable_radiation_quasi_sea_ice) then asevd = 0.06 asend = 0.06 elseif (tsknf(i) < 271.1) then @@ -486,7 +509,8 @@ subroutine setalb & rfcs = 2.14 / (f_one + 1.48*coszf(i)) rfcw = rfcs - if (tsknf(i) >= con_t0c) then + if (tsknf(i) >= con_t0c .or. + & ldisable_radiation_quasi_sea_ice) then asevb = max(asevd, 0.026/(coszf(i)**1.7+0.065) & & + 0.15 * (coszf(i)-0.1) * (coszf(i)-0.5) & & * (coszf(i)-f_one)) @@ -525,7 +549,11 @@ subroutine setalb & fsno0 = sncovr(i) - if (nint(slmsk(i))==0 .and. tsknf(i)>con_tice) fsno0 = f_zero + if (nint(slmsk(i))==0 .and. + & (tsknf(i)>con_tice .or. + & ldisable_radiation_quasi_sea_ice)) then + fsno0 = f_zero + endif if (nint(slmsk(i)) == 2) then asnow = 0.02*snowf(i) @@ -543,7 +571,8 @@ subroutine setalb & !> - Calculate diffused sea surface albedo. - if (tsknf(i) >= 271.5) then + if (tsknf(i) >= 271.5 .or. + & ldisable_radiation_quasi_sea_ice) then asevd = 0.06 asend = 0.06 elseif (tsknf(i) < 271.1) then @@ -602,7 +631,8 @@ subroutine setalb & ! & - 2.02*coszf(i)*coszf(i)*coszf(i) rfcs = 1.775/(1.0+1.55*coszf(i)) - if (tsknf(i) >= con_t0c) then + if (tsknf(i) >= con_t0c .or. + & ldisable_radiation_quasi_sea_ice) then asevb = max(asevd, 0.026/(coszf(i)**1.7+0.065) & & + 0.15 * (coszf(i)-0.1) * (coszf(i)-0.5) & & * (coszf(i)-f_one)) @@ -652,7 +682,8 @@ subroutine setalb & !> - Calculate diffused sea surface albedo. - if (tsknf(i) >= 271.5) then + if (tsknf(i) >= 271.5 .or. + & ldisable_radiation_quasi_sea_ice) then asevd = 0.06 asend = 0.06 elseif (tsknf(i) < 271.1) then @@ -708,7 +739,8 @@ subroutine setalb & ! & - 2.02*coszf(i)*coszf(i)*coszf(i) rfcs = 1.775/(1.0+1.55*coszf(i)) - if (tsknf(i) >= con_t0c) then + if (tsknf(i) >= con_t0c .or. + & ldisable_radiation_quasi_sea_ice) then asevb = max(asevd, 0.026/(coszf(i)**1.7+0.065) & & + 0.15 * (coszf(i)-0.1) * (coszf(i)-0.5) & & * (coszf(i)-f_one)) @@ -930,8 +962,13 @@ subroutine setemis & argh = min(0.50, max(.025, 0.01*zorlf(i))) hrgh = min(f_one, max(0.20, 1.0577-1.1538e-3*hprif(i) ) ) fsno0 = asnow / (argh + asnow) * hrgh - if (nint(slmsk(i)) == 0 .and. tsknf(i) > 271.2) & - & fsno0=f_zero + + if (nint(slmsk(i)) == 0 .and. + & (tsknf(i) > 271.2 .or. + & ldisable_radiation_quasi_sea_ice)) then + fsno0=f_zero + endif + fsno1 = f_one - fsno0 sfcemis(i) = sfcemis(i)*fsno1 + emsref(8)*fsno0 endif diff --git a/gsmphys/som_mlm.F90 b/gsmphys/som_mlm.F90 index 4314af3b..eae5896f 100644 --- a/gsmphys/som_mlm.F90 +++ b/gsmphys/som_mlm.F90 @@ -77,7 +77,8 @@ module module_ocean ! ! climatological SST plus initial anomaly logical :: use_tvar_restore_sst = .false.! using time varying restoring time scale for sst logical :: use_tvar_restore_mld = .false.! using time varying restoring time scale for mld - real(kind=kind_phys) :: maxlat = 60. ! maximum latitudinal extent of the SOM/MLM; for most physical results, set <= 60.0 + real(kind=kind_phys) :: maxlat = 60. ! maximum latitudinal extent of the SOM/MLM; generally set to be <= 60, though + ! can be useful to set to 90 in some circumstances namelist /ocean_nml/ & ocean_option, mld_option, mld_obs_ratio, stress_ratio, restore_method, & From 234566f78b5a9f6cab78aca26e617f6675754621 Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Thu, 8 Feb 2024 11:47:42 -0500 Subject: [PATCH 3/8] A couple further refinements - Add a prescribed_mixed_layer_depth diagnostic, which outputs exactly the mixed layer depth that was prescribed at all grid points, regardless of surface type. - Reset the slab ocean or mixed layer model properties at every timestep at all non-ocean grid cells. This is required to more cleanly handle the transition from sea ice to ocean in global slab ocean simulations. --- FV3GFS/FV3GFS_io.F90 | 12 ++++++++++++ gsmphys/som_mlm.F90 | 21 +++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/FV3GFS/FV3GFS_io.F90 b/FV3GFS/FV3GFS_io.F90 index 80bc91d4..1b596863 100644 --- a/FV3GFS/FV3GFS_io.F90 +++ b/FV3GFS/FV3GFS_io.F90 @@ -3093,6 +3093,18 @@ subroutine register_diag_manager_controlled_diagnostics(Time, Sfcprop, IntDiag, Diag_diag_manager_controlled(index)%data(nb)%var2 => Sfcprop(nb)%mld(:) enddo + index = index + 1 + Diag_diag_manager_controlled(index)%axes = 2 + Diag_diag_manager_controlled(index)%name = 'prescribed_mixed_layer_depth' + Diag_diag_manager_controlled(index)%desc = 'prescribed ocean mixed layer depth' + Diag_diag_manager_controlled(index)%unit = 'm' + Diag_diag_manager_controlled(index)%mod_name = 'gfs_phys' + Diag_diag_manager_controlled(index)%coarse_graining_method = AREA_WEIGHTED + allocate (Diag_diag_manager_controlled(index)%data(nblks)) + do nb = 1,nblks + Diag_diag_manager_controlled(index)%data(nb)%var2 => Sfcprop(nb)%mldclim(:) + enddo + index = index + 1 Diag_diag_manager_controlled(index)%axes = 2 Diag_diag_manager_controlled(index)%name = 'prescribed_qflux' diff --git a/gsmphys/som_mlm.F90 b/gsmphys/som_mlm.F90 index eae5896f..86428579 100644 --- a/gsmphys/som_mlm.F90 +++ b/gsmphys/som_mlm.F90 @@ -296,6 +296,27 @@ subroutine update_ocean & enddo endif endif + + ! Reset the slab ocean temperature or mixed layer ocean properties in + ! any non-ocean grid cells. This is required in the (rare) instances + ! when one is running with the SOM/MLM with a latitudinal extent such + ! that grid cells transition from ocean to sea ice and back. + where (islmsk .ne. 0) + ts_som = tsfc + endwhere + + if (ocean_option == "MLM") then + where(islmsk .ne. 0) + tml = tsfc + tml0 = tsfc + mld = mldclim + mld0 = mld + huml = 0. + hvml = 0. + tmoml = tsfc - 5. + tmoml0 = tmoml + endwhere + endif ! if (use_rain_flux) then do i=1,im From bfd2d6b99395f3087c4eed0b7fab0bf8d769991e Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Wed, 14 Feb 2024 14:23:38 -0500 Subject: [PATCH 4/8] Initialize ocean to con_tice instead of previous timestep temperature --- gsmphys/som_mlm.F90 | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/gsmphys/som_mlm.F90 b/gsmphys/som_mlm.F90 index 86428579..b9cd7ad4 100644 --- a/gsmphys/som_mlm.F90 +++ b/gsmphys/som_mlm.F90 @@ -26,6 +26,7 @@ module module_ocean ! !........................................! ! + use physcons, only: con_tice use physparam, only : kind_phys use GFS_typedefs, only : GFS_control_type, GFS_grid_type ! use constants_mod, only : omega, grav @@ -298,22 +299,22 @@ subroutine update_ocean & endif ! Reset the slab ocean temperature or mixed layer ocean properties in - ! any non-ocean grid cells. This is required in the (rare) instances + ! any sea ice grid cells. This is required in the (rare) instances ! when one is running with the SOM/MLM with a latitudinal extent such ! that grid cells transition from ocean to sea ice and back. - where (islmsk .ne. 0) - ts_som = tsfc + where (islmsk .eq. 2) + ts_som = con_tice endwhere if (ocean_option == "MLM") then - where(islmsk .ne. 0) - tml = tsfc - tml0 = tsfc + where(islmsk .eq. 2) + tml = con_tice + tml0 = con_tice mld = mldclim mld0 = mld huml = 0. hvml = 0. - tmoml = tsfc - 5. + tmoml = con_tice - 5. tmoml0 = tmoml endwhere endif From 383ee3bfb92600e20497cad330eead99a31d62a9 Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Wed, 14 Feb 2024 14:30:05 -0500 Subject: [PATCH 5/8] Harmonize formatting --- gsmphys/som_mlm.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gsmphys/som_mlm.F90 b/gsmphys/som_mlm.F90 index b9cd7ad4..30b5e80d 100644 --- a/gsmphys/som_mlm.F90 +++ b/gsmphys/som_mlm.F90 @@ -26,7 +26,7 @@ module module_ocean ! !........................................! ! - use physcons, only: con_tice + use physcons, only : con_tice use physparam, only : kind_phys use GFS_typedefs, only : GFS_control_type, GFS_grid_type ! use constants_mod, only : omega, grav From 48a24fe1c1a4df1dae6fcf2c2f7092ecc6b6ada7 Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Wed, 28 Feb 2024 14:27:16 +0000 Subject: [PATCH 6/8] Improve comment on added ocean_nml.maxlat parameter --- gsmphys/som_mlm.F90 | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gsmphys/som_mlm.F90 b/gsmphys/som_mlm.F90 index 30b5e80d..dc28402c 100644 --- a/gsmphys/som_mlm.F90 +++ b/gsmphys/som_mlm.F90 @@ -78,8 +78,13 @@ module module_ocean ! ! climatological SST plus initial anomaly logical :: use_tvar_restore_sst = .false.! using time varying restoring time scale for sst logical :: use_tvar_restore_mld = .false.! using time varying restoring time scale for mld - real(kind=kind_phys) :: maxlat = 60. ! maximum latitudinal extent of the SOM/MLM; generally set to be <= 60, though - ! can be useful to set to 90 in some circumstances + real(kind=kind_phys) :: maxlat = 60. ! maximum latitudinal extent of the SOM/MLM. Generally set to <= 60, though + ! it can be useful to set to > 60 if the desired start_lat and end_lat are + ! poleward of 60 degrees. If set to > 60, it is recommended to also set + ! gfs_physics_nml.disable_radiation_quasi_sea_ice to .true. to prevent + ! an unphysical quasi-ice-albedo feedback from occuring. Set to 90 along + ! with ocean_nml.start_lat = -90 and ocean_nml.end_lat = 90 to enable + ! running with a global slab ocean. namelist /ocean_nml/ & ocean_option, mld_option, mld_obs_ratio, stress_ratio, restore_method, & From 47e783f61a8ba0e7842285dccd746a8ccc5262f5 Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Wed, 28 Feb 2024 14:34:09 +0000 Subject: [PATCH 7/8] Use more generic word than 'slab' --- gsmphys/som_mlm.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gsmphys/som_mlm.F90 b/gsmphys/som_mlm.F90 index dc28402c..e0904243 100644 --- a/gsmphys/som_mlm.F90 +++ b/gsmphys/som_mlm.F90 @@ -84,7 +84,7 @@ module module_ocean ! ! gfs_physics_nml.disable_radiation_quasi_sea_ice to .true. to prevent ! an unphysical quasi-ice-albedo feedback from occuring. Set to 90 along ! with ocean_nml.start_lat = -90 and ocean_nml.end_lat = 90 to enable - ! running with a global slab ocean. + ! running with a global interactive ocean. namelist /ocean_nml/ & ocean_option, mld_option, mld_obs_ratio, stress_ratio, restore_method, & From 992580c7df8be67d0f2dd98d31f4e8805daf3683 Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Wed, 28 Feb 2024 14:46:55 +0000 Subject: [PATCH 8/8] typo: occuring -> occurring --- gsmphys/som_mlm.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gsmphys/som_mlm.F90 b/gsmphys/som_mlm.F90 index e0904243..9fc57724 100644 --- a/gsmphys/som_mlm.F90 +++ b/gsmphys/som_mlm.F90 @@ -82,7 +82,7 @@ module module_ocean ! ! it can be useful to set to > 60 if the desired start_lat and end_lat are ! poleward of 60 degrees. If set to > 60, it is recommended to also set ! gfs_physics_nml.disable_radiation_quasi_sea_ice to .true. to prevent - ! an unphysical quasi-ice-albedo feedback from occuring. Set to 90 along + ! an unphysical quasi-ice-albedo feedback from occurring. Set to 90 along ! with ocean_nml.start_lat = -90 and ocean_nml.end_lat = 90 to enable ! running with a global interactive ocean.