From 325254b7a418345a15878978a40f6cbd2cebcba2 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Sun, 13 Apr 2025 21:53:11 +0000 Subject: [PATCH 01/14] mcycle branch update to top ccpp-physics --- .../GFS_phys_time_vary.fv3.F90 | 10 +-- .../GFS_phys_time_vary.fv3.meta | 15 ++++ .../Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 79 ++++++++++++++++--- 3 files changed, 90 insertions(+), 14 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 index 0c90478be..3a07b9b7e 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 @@ -714,7 +714,7 @@ subroutine GFS_phys_time_vary_timestep_init ( zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype,scolor, shdmin, shdmax, snowd, & cv, cvb, cvt, oro, oro_uf, xlat_d, xlon_d, slmsk, landfrac, ozphys, h2ophys, & do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau, tau_amf, is_initialized, & - errmsg, errflg) + cplflx, lakefrac_threshold, errmsg, errflg) implicit none @@ -722,8 +722,8 @@ subroutine GFS_phys_time_vary_timestep_init ( integer, intent(in) :: me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, & nsswr, imfdeepcnv, iccn, nscyc, ntoz, iflip integer, intent(in) :: idate(:) - real(kind_phys), intent(in) :: fhswr, fhour - logical, intent(in) :: lsswr, cal_pre, random_clds, h2o_phys, iaerclm + real(kind_phys), intent(in) :: fhswr, fhour, lakefrac_threshold + logical, intent(in) :: lsswr, cal_pre, random_clds, h2o_phys, iaerclm, cplflx real(kind_phys), intent(out) :: clstp integer, intent(in), optional :: jindx1_o3(:), jindx2_o3(:), jindx1_h(:), jindx2_h(:) real(kind_phys), intent(in), optional :: ddy_o3(:), ddy_h(:) @@ -920,13 +920,13 @@ subroutine GFS_phys_time_vary_timestep_init ( if (nscyc > 0) then if (mod(kdt,nscyc) == 1) THEN call gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, & - input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, & + input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, cplflx, & use_ufo, nst_anl, fhcyc, phour, landfrac, lakefrac, min_seaice, min_lakeice,& frac_grid, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, tsfc, & tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, & zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, & stype, scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & - xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) + lakefrac_threshold, xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) endif endif diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta index d0c5e80ec..ca57deae8 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta @@ -1173,6 +1173,21 @@ dimensions = (4) type = integer intent = in +[cplflx] + standard_name = flag_for_surface_flux_coupling + long_name = flag controlling cplflx collection (default off) + units = flag + dimensions = () + type = logical + intent = in +[lakefrac_threshold] + standard_name = lakefrac_threshold_for_enabling_lake_model + long_name = fraction of horizontal grid area occupied by lake must be greater than this value to enable a lake model + units = frac + dimensions = () + type = real + kind = kind_phys + intent = in [nsswr] standard_name = number_of_timesteps_between_shortwave_radiation_calls long_name = number of timesteps between shortwave radiation calls diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index 101977960..b2c16c5b5 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -16,13 +16,13 @@ module gcycle_mod !! This subroutine repopulates specific time-varying surface properties for !! atmospheric forecast runs. subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, & - input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, & + input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, cplflx, & use_ufo, nst_anl, fhcyc, phour, landfrac, lakefrac, min_seaice, min_lakeice, & frac_grid, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, tsfc, & tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, & zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, & stype, scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & - xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) + lakefrac_threshold, xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) ! ! use machine, only: kind_phys, kind_io8 @@ -33,9 +33,9 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, integer, intent(in) :: idate(:), ialb, isot, ivegsrc character(len = 64), intent(in) :: fn_nml character(len=*), intent(in) :: input_nml_file(:) - logical, intent(in) :: use_ufo, nst_anl, frac_grid + logical, intent(in) :: use_ufo, nst_anl, frac_grid, cplflx real(kind=kind_phys), intent(in) :: fhcyc, phour, landfrac(:), lakefrac(:), & - min_seaice, min_lakeice, & + min_seaice, min_lakeice,lakefrac_threshold, & xlat_d(:), xlon_d(:) real(kind=kind_phys), intent(inout), optional :: & smois(:,:), & @@ -103,6 +103,17 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, STCFC1 (nx*ny*max(lsoil,lsoil_lsm)), & SLCFC1 (nx*ny*max(lsoil,lsoil_lsm)) +! +! declare the variables (arrays) for cplflx, surface type dependent gcycle changes +! + real(kind=kind_io8) :: & + hice_save (nx*ny), & ! sea or lake ice thickness + fice_save (nx*ny), & ! sea or lake ice fraction + snowd_save (nx*ny), & ! water equivalent snow depth + snoalb_save (nx*ny), & ! maximum snow albedo + tisfc_save (nx*ny), & ! surface skin temperature over (sea or lake) ice + weasd_save (nx*ny) ! water equiv of acc snow depth over land and (sea or lake) ice + real (kind=kind_io8) :: min_ice(nx*ny) integer :: i_indx(nx*ny), j_indx(nx*ny) @@ -131,11 +142,25 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, sig1t = 0.0_kind_phys npts = nx*ny ! +! Some surface variables need to be updated by gcycle with coupled mode, and nsst mode dependent. A few variables are saved +! in order to be able to update them over the specific surface types only after call sfccycle +! + if ( cplflx ) then + hice_save = hice + fice_save = fice + snowd_save = snowd + snoalb_save = snoalb + tisfc_save = tisfc + weasd_save = weasd + endif + if ( nsst > 0 ) then TSFFCS = tref else TSFFCS = tsfco - end if + endif + + ! integer to real/double precision slpfcs = real(slope) vegfcs = real(vtype) @@ -251,11 +276,47 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, close (nlunit) #endif ! - if ( nsst > 0 ) then - tref = TSFFCS +! The gcycle resulted change is applied to some variables in the way of the coupled mode dependent, water surface type (ocean or lake) +! dependent and nsst mode dependent +! + if ( cplflx ) then +! In coupled mode, keep these variables the same as is (before sfccycle is called) over non-lake water and non-land + do ix=1,npts + if (lakefrac(ix) <= lakefrac_threshold .and. (slmskw(ix) > 0.0_kind_phys) ) then + hice(ix) = hice_save(ix) + fice(ix) = fice_save(ix) + snowd(ix) = snowd_save(ix) + snoalb(ix) = snoalb_save(ix) + tisfc(ix) = tisfc_save(ix) + weasd(ix) = weasd_save(ix) + endif + enddo +! In the coupled mode and when NSST is on, update tref, tsfc and tsfco over lake and land (not ocean) + if ( nsst > 0 ) then + do ix=1,npts + if ( (lakefrac(ix) > lakefrac_threshold) .or. (slmskl(ix) > 0.0_kind_phys) ) then + tref(ix) = TSFFCS(ix) + tsfc(ix) = TSFFCS(ix) + tsfco(ix) = TSFFCS(ix) + endif + enddo +! In the coupled mode and when NSST is off, update tref, tsfc and tsfco over land and lake (not ocean) + else + do ix=1,npts + if ( (lakefrac(ix) > lakefrac_threshold) .or. (slmskl(ix) > 0.0_kind_phys) ) then + tsfc(ix) = TSFFCS(ix) + tsfco(ix) = TSFFCS(ix) + endif + enddo + endif +! The same as before (this modification) in uncoupled mode else - tsfc = TSFFCS - tsfco = TSFFCS + if ( nsst > 0 ) then + tref = TSFFCS + else + tsfc = TSFFCS + tsfco = TSFFCS + endif endif ! ! real/double precision to integer From a907150c9e0466a1621a282cfb816f73a934a870 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Mon, 14 Apr 2025 16:13:03 +0000 Subject: [PATCH 02/14] update the order of cplflx and lakefrac_threshold in^Cubroutine GFS_phys_time_vary_timestep_init to ccpp-physics branch mcycle --- .../Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 index 3a07b9b7e..c3a641b13 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 @@ -702,7 +702,8 @@ end subroutine GFS_phys_time_vary_init !>\section gen_GFS_phys_time_vary_timestep_init GFS_phys_time_vary_timestep_init General Algorithm !> @{ subroutine GFS_phys_time_vary_timestep_init ( & - me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, idate, nsswr, fhswr, lsswr, fhour, & + me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, idate, cplflx, lakefrac_threshold, & + nsswr, fhswr, lsswr, fhour, & imfdeepcnv, cal_pre, random_clds, nscyc, ntoz, h2o_phys, iaerclm, iccn, clstp, & jindx1_o3, jindx2_o3, ddy_o3, ozpl, jindx1_h, jindx2_h, ddy_h, h2opl, iflip, & jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, & @@ -714,7 +715,7 @@ subroutine GFS_phys_time_vary_timestep_init ( zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype,scolor, shdmin, shdmax, snowd, & cv, cvb, cvt, oro, oro_uf, xlat_d, xlon_d, slmsk, landfrac, ozphys, h2ophys, & do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau, tau_amf, is_initialized, & - cplflx, lakefrac_threshold, errmsg, errflg) + errmsg, errflg) implicit none From 0e0fa880a4e5d0644663c5b4ac1b990b4fe1c0d6 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Tue, 15 Apr 2025 18:15:42 +0000 Subject: [PATCH 03/14] code update about one logic if it is water surface or not for branch mgcycle in gcycle.F90 --- physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index b2c16c5b5..091cc70e6 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -282,7 +282,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, if ( cplflx ) then ! In coupled mode, keep these variables the same as is (before sfccycle is called) over non-lake water and non-land do ix=1,npts - if (lakefrac(ix) <= lakefrac_threshold .and. (slmskw(ix) > 0.0_kind_phys) ) then + if (lakefrac(ix) <= lakefrac_threshold .and. (slmskw(ix) == 0.0_kind_phys) ) then hice(ix) = hice_save(ix) fice(ix) = fice_save(ix) snowd(ix) = snowd_save(ix) From 4ea8ec6ec41226a7cd924b376769191fd3176f04 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Tue, 22 Apr 2025 23:07:43 +0000 Subject: [PATCH 04/14] use oceanfrac in gcycle update to ccpp-physics branch mgcycle --- .../GFS_phys_time_vary.fv3.F90 | 10 +++++---- .../GFS_phys_time_vary.fv3.meta | 8 +++++++ .../Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 21 ++++++++++--------- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 index c3a641b13..4373e19d4 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 @@ -710,7 +710,8 @@ subroutine GFS_phys_time_vary_timestep_init ( jindx1_ci, jindx2_ci, ddy_ci, iindx1_ci, iindx2_ci, ddx_ci, in_nm, ccn_nm, fn_nml, & imap, jmap, prsl, seed0, rann, nthrds, nx, ny, nsst, tile_num, nlunit, lsoil, lsoil_lsm,& kice, ialb, isot, ivegsrc, input_nml_file, use_ufo, nst_anl, frac_grid, fhcyc, phour, & - lakefrac, min_seaice, min_lakeice, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, & + oceanfrac, lakefrac, min_seaice, min_lakeice, smc, slc, stc, smois, sh2o, tslb, tiice, & + tg3, tref, & tsfc, tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, zorli, zorll, & zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype,scolor, shdmin, shdmax, snowd, & cv, cvb, cvt, oro, oro_uf, xlat_d, xlon_d, slmsk, landfrac, ozphys, h2ophys, & @@ -754,7 +755,7 @@ subroutine GFS_phys_time_vary_timestep_init ( character(len=*), intent(in) :: fn_nml logical, intent(in) :: use_ufo, nst_anl, frac_grid real(kind_phys), intent(in) :: fhcyc, phour, lakefrac(:), min_seaice, min_lakeice, & - xlat_d(:), xlon_d(:), landfrac(:) + xlat_d(:), xlon_d(:), landfrac(:),oceanfrac(:) real(kind_phys), intent(inout) :: smc(:,:), slc(:,:), stc(:,:), tiice(:,:), tg3(:), & tsfc(:), tsfco(:), tisfc(:), hice(:), fice(:), & facsf(:), facwf(:), alvsf(:), alvwf(:), alnsf(:), alnwf(:), & @@ -921,13 +922,14 @@ subroutine GFS_phys_time_vary_timestep_init ( if (nscyc > 0) then if (mod(kdt,nscyc) == 1) THEN call gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, & - input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, cplflx, & + input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, & use_ufo, nst_anl, fhcyc, phour, landfrac, lakefrac, min_seaice, min_lakeice,& frac_grid, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, tsfc, & tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, & zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, & stype, scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & - lakefrac_threshold, xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) + cplflx, oceanfrac, lakefrac_threshold, & + xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) endif endif diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta index ca57deae8..b05fb88a6 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta @@ -1653,6 +1653,14 @@ type = real kind = kind_phys intent = in +[oceanfrac] + standard_name = sea_area_fraction + long_name = fraction of horizontal grid area occupied by ocean + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in [lakefrac] standard_name = lake_area_fraction long_name = fraction of horizontal grid area occupied by lake diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index 091cc70e6..e4dba2f5c 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -16,13 +16,14 @@ module gcycle_mod !! This subroutine repopulates specific time-varying surface properties for !! atmospheric forecast runs. subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, & - input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, cplflx, & + input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, & use_ufo, nst_anl, fhcyc, phour, landfrac, lakefrac, min_seaice, min_lakeice, & frac_grid, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, tsfc, & tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, & zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, & stype, scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & - lakefrac_threshold, xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) + cplflx, oceanfrac, lakefrac_threshold, & + xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) ! ! use machine, only: kind_phys, kind_io8 @@ -35,8 +36,8 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, character(len=*), intent(in) :: input_nml_file(:) logical, intent(in) :: use_ufo, nst_anl, frac_grid, cplflx real(kind=kind_phys), intent(in) :: fhcyc, phour, landfrac(:), lakefrac(:), & - min_seaice, min_lakeice,lakefrac_threshold, & - xlat_d(:), xlon_d(:) + min_seaice, min_lakeice,oceanfrac, & + lakefrac_threshold, xlat_d(:), xlon_d(:) real(kind=kind_phys), intent(inout), optional :: & smois(:,:), & sh2o(:,:), & @@ -280,9 +281,9 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, ! dependent and nsst mode dependent ! if ( cplflx ) then -! In coupled mode, keep these variables the same as is (before sfccycle is called) over non-lake water and non-land +! In coupled mode, keep these variables the same as is (before sfccycle is called) over ocean do ix=1,npts - if (lakefrac(ix) <= lakefrac_threshold .and. (slmskw(ix) == 0.0_kind_phys) ) then + if ( oceanfrac(ix) > 0.0_kind_phys ) then hice(ix) = hice_save(ix) fice(ix) = fice_save(ix) snowd(ix) = snowd_save(ix) @@ -291,19 +292,19 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, weasd(ix) = weasd_save(ix) endif enddo -! In the coupled mode and when NSST is on, update tref, tsfc and tsfco over lake and land (not ocean) +! In the coupled mode and when NSST is on, update tref, tsfc and tsfco over non-ocean if ( nsst > 0 ) then do ix=1,npts - if ( (lakefrac(ix) > lakefrac_threshold) .or. (slmskl(ix) > 0.0_kind_phys) ) then + if ( oceanfrac(ix) == 0.0_kind_phys ) then tref(ix) = TSFFCS(ix) tsfc(ix) = TSFFCS(ix) tsfco(ix) = TSFFCS(ix) endif enddo -! In the coupled mode and when NSST is off, update tref, tsfc and tsfco over land and lake (not ocean) +! In the coupled mode and when NSST is off, update tref, tsfc and tsfco over not ocean else do ix=1,npts - if ( (lakefrac(ix) > lakefrac_threshold) .or. (slmskl(ix) > 0.0_kind_phys) ) then + if ( oceanfrac(ix) == 0.0_kind_phys ) then tsfc(ix) = TSFFCS(ix) tsfco(ix) = TSFFCS(ix) endif From 2aa165dbf1f39634398026f23a8824857903ea45 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Thu, 1 May 2025 16:34:00 +0000 Subject: [PATCH 05/14] the use of oceanfrac update to top ccpp-physics --- .../Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 | 1 + physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 index 4373e19d4..5ff05fb33 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 @@ -921,6 +921,7 @@ subroutine GFS_phys_time_vary_timestep_init ( !> - Call gcycle() to repopulate specific time-varying surface properties for AMIP/forecast runs if (nscyc > 0) then if (mod(kdt,nscyc) == 1) THEN + write(*,*) 'GFS_phys_time_vary_timestep_init, ktd,nscyc : ',ktd,nscyc call gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, & input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, & use_ufo, nst_anl, fhcyc, phour, landfrac, lakefrac, min_seaice, min_lakeice,& diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index e4dba2f5c..42444b26f 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -283,7 +283,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, if ( cplflx ) then ! In coupled mode, keep these variables the same as is (before sfccycle is called) over ocean do ix=1,npts - if ( oceanfrac(ix) > 0.0_kind_phys ) then + if ( oceanfrac(ix) == 0.0_kind_phys ) then hice(ix) = hice_save(ix) fice(ix) = fice_save(ix) snowd(ix) = snowd_save(ix) @@ -295,7 +295,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, ! In the coupled mode and when NSST is on, update tref, tsfc and tsfco over non-ocean if ( nsst > 0 ) then do ix=1,npts - if ( oceanfrac(ix) == 0.0_kind_phys ) then + if ( oceanfrac(ix) > 0.0_kind_phys ) then tref(ix) = TSFFCS(ix) tsfc(ix) = TSFFCS(ix) tsfco(ix) = TSFFCS(ix) From fcd32a1dee45f5c7771d8266e49dde26cc8ceddf Mon Sep 17 00:00:00 2001 From: weizhong zheng Date: Fri, 2 May 2025 13:31:59 +0000 Subject: [PATCH 06/14] Noah-MP, set zero for canopy liquid and canopy ice over glacier --- physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 b/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 index a4c80362d..49f748663 100644 --- a/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 +++ b/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 @@ -1206,8 +1206,8 @@ subroutine noahmpdrv_run & snow_cover_fraction = 1.0 temperature_leaf = undefined - canopy_ice = undefined - canopy_liquid = undefined + canopy_ice = 0.0 + canopy_liquid = 0.0 vapor_pres_canopy_air = undefined temperature_canopy_air = undefined canopy_wet_fraction = undefined From dc02ac0dd4d9affeae4a638558dd47fc8812a935 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Mon, 5 May 2025 15:16:15 +0000 Subject: [PATCH 07/14] update to ccpp-physics mgcycle branch --- .../Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 | 1 - physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 index 5ff05fb33..4373e19d4 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 @@ -921,7 +921,6 @@ subroutine GFS_phys_time_vary_timestep_init ( !> - Call gcycle() to repopulate specific time-varying surface properties for AMIP/forecast runs if (nscyc > 0) then if (mod(kdt,nscyc) == 1) THEN - write(*,*) 'GFS_phys_time_vary_timestep_init, ktd,nscyc : ',ktd,nscyc call gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, & input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, & use_ufo, nst_anl, fhcyc, phour, landfrac, lakefrac, min_seaice, min_lakeice,& diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index 42444b26f..1d9f3c35d 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -36,7 +36,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, character(len=*), intent(in) :: input_nml_file(:) logical, intent(in) :: use_ufo, nst_anl, frac_grid, cplflx real(kind=kind_phys), intent(in) :: fhcyc, phour, landfrac(:), lakefrac(:), & - min_seaice, min_lakeice,oceanfrac, & + min_seaice, min_lakeice,oceanfrac(:), & lakefrac_threshold, xlat_d(:), xlon_d(:) real(kind=kind_phys), intent(inout), optional :: & smois(:,:), & From 72d44594ef12f9a6c16effa361ece12cc8cda62c Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Mon, 5 May 2025 19:27:53 +0000 Subject: [PATCH 08/14] update to ccpp-physics mgcycle branch --- physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index 1d9f3c35d..6394763cf 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -283,7 +283,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, if ( cplflx ) then ! In coupled mode, keep these variables the same as is (before sfccycle is called) over ocean do ix=1,npts - if ( oceanfrac(ix) == 0.0_kind_phys ) then + if ( oceanfrac(ix) > 0.0_kind_phys ) then hice(ix) = hice_save(ix) fice(ix) = fice_save(ix) snowd(ix) = snowd_save(ix) @@ -295,7 +295,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, ! In the coupled mode and when NSST is on, update tref, tsfc and tsfco over non-ocean if ( nsst > 0 ) then do ix=1,npts - if ( oceanfrac(ix) > 0.0_kind_phys ) then + if ( oceanfrac(ix) == 0.0_kind_phys ) then tref(ix) = TSFFCS(ix) tsfc(ix) = TSFFCS(ix) tsfco(ix) = TSFFCS(ix) From 22edccbc431b0dc3adc89789e57d13def6b67132 Mon Sep 17 00:00:00 2001 From: weizhong zheng Date: Wed, 7 May 2025 15:46:35 +0000 Subject: [PATCH 09/14] Noah-MP, modifications for snow glacier --- .../Land/Noahmp/module_sf_noahmp_glacier.F90 | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/physics/SFC_Models/Land/Noahmp/module_sf_noahmp_glacier.F90 b/physics/SFC_Models/Land/Noahmp/module_sf_noahmp_glacier.F90 index a4c862cae..5b7aa584d 100644 --- a/physics/SFC_Models/Land/Noahmp/module_sf_noahmp_glacier.F90 +++ b/physics/SFC_Models/Land/Noahmp/module_sf_noahmp_glacier.F90 @@ -2630,15 +2630,24 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in snliq ,imelt ,ficeold, & !in isnow ,dzsnso ) !inout + if(isnow < 0) & !when multi-layer call combine_glacier (nsnow ,nsoil , & !in isnow ,sh2o ,stc ,snice ,snliq , & !inout dzsnso ,sice ,snowh ,sneqv , & !inout ponding1 ,ponding2) !out + if(isnow < 0) & !when multi-layer call divide_glacier (nsnow ,nsoil , & !in isnow ,stc ,snice ,snliq ,dzsnso ) !inout end if + call snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in + qrain , & !in + isnow ,dzsnso ,snowh ,sneqv ,snice , & !inout + snliq ,sh2o ,sice ,stc , & !inout + ponding1 ,ponding2 ,fsh , & !inout + qsnbot ) !out + !set empty snow layers to zero do iz = -nsnow+1, isnow @@ -2649,16 +2658,9 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in zsnso(iz) = 0. enddo - call snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in - qrain , & !in - isnow ,dzsnso ,snowh ,sneqv ,snice , & !inout - snliq ,sh2o ,sice ,stc , & !inout - ponding1 ,ponding2 ,fsh , & !inout - qsnbot ) !out - !to obtain equilibrium state of snow in glacier region - if(sneqv > mwd .and. isnow /= 0) then ! 100 mm -> maximum water depth + if(sneqv > mwd) then ! 100 mm -> maximum water depth bdsnow = snice(0) / dzsnso(0) snoflow = (sneqv - mwd) snice(0) = snice(0) - snoflow @@ -2668,7 +2670,7 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in ! sum up snow mass for layered snow - if(isnow /= 0) then + if(isnow < 0) then sneqv = 0. snowh = 0. do iz = isnow+1,0 @@ -2744,7 +2746,7 @@ subroutine snowfall_glacier (nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in ! creating a new layer - if(isnow == 0 .and. qsnow>0. .and. snowh >= 0.05) then + if(isnow == 0 .and. qsnow>0. .and. snowh >= 0.025) then isnow = -1 newnode = 1 dzsnso(0)= snowh @@ -2902,8 +2904,8 @@ subroutine combine_glacier (nsnow ,nsoil , & !in real (kind=kind_phys) :: zwice !< total ice mass in snow real (kind=kind_phys) :: zwliq !< total liquid water in snow real (kind=kind_phys) :: dzmin(3) !< minimum of top snow layer - data dzmin /0.045, 0.05, 0.2/ -! data dzmin /0.025, 0.025, 0.1/ ! mb: change limit +! data dzmin /0.045, 0.05, 0.2/ + data dzmin /0.025, 0.025, 0.1/ ! mb: change limit !----------------------------------------------------------------------- isnow_old = isnow @@ -2913,17 +2915,29 @@ subroutine combine_glacier (nsnow ,nsoil , & !in if(j /= 0) then snliq(j+1) = snliq(j+1) + snliq(j) snice(j+1) = snice(j+1) + snice(j) + dzsnso(j+1) = dzsnso(j+1) + dzsnso(j) else if (isnow_old < -1) then snliq(j-1) = snliq(j-1) + snliq(j) snice(j-1) = snice(j-1) + snice(j) + dzsnso(j-1) = dzsnso(j-1) + dzsnso(j) else - ponding1 = ponding1 + snliq(j) ! isnow will get set to zero below - sneqv = snice(j) ! ponding will get added to ponding from - snowh = dzsnso(j) ! phasechange which should be zero here - snliq(j) = 0.0 ! because there it was only calculated - snice(j) = 0.0 ! for thin snow - dzsnso(j) = 0.0 + if(snice(j) >= 0.) then + ponding1 = snliq(j) ! isnow will get set to zero below; ponding1 will get + sneqv = snice(j) ! added to ponding from phasechange ponding should be + snowh = dzsnso(j) ! zero here because it was calculated for thin snow + else ! snice over-sublimated earlier + ponding1 = snliq(j) + snice(j) + if(ponding1 < 0.) then ! if snice and snliq sublimates remove from soil + sice(1) = max(0.0,sice(1)+ponding1/(dzsnso(1)*1000.)) + ponding1 = 0.0 + end if + sneqv = 0.0 + snowh = 0.0 + end if + snliq(j) = 0.0 + snice(j) = 0.0 + dzsnso(j) = 0.0 endif ! sh2o(1) = sh2o(1)+snliq(j)/(dzsnso(1)*1000.) ! sice(1) = sice(1)+snice(j)/(dzsnso(1)*1000.) @@ -2966,8 +2980,8 @@ subroutine combine_glacier (nsnow ,nsoil , & !in ! check the snow depth - all snow gone ! the liquid water assumes ponding on soil surface. -! if (snowh < 0.025 .and. isnow < 0 ) then ! mb: change limit - if (snowh < 0.05 .and. isnow < 0 ) then + if (snowh < 0.025 .and. isnow < 0 ) then ! mb: change limit +! if (snowh < 0.05 .and. isnow < 0 ) then isnow = 0 sneqv = zwice ponding2 = ponding2 + zwliq ! limit of isnow < 0 means input ponding @@ -3165,8 +3179,8 @@ subroutine divide_glacier (nsnow ,nsoil , & !in zwliq, zwice, tsno(1)) ! subdivide a new layer -! if (msno <= 2 .and. dz(2) > 0.20) then ! mb: change limit - if (msno <= 2 .and. dz(2) > 0.10) then + if (msno <= 2 .and. dz(2) > 0.20) then ! mb: change limit +! if (msno <= 2 .and. dz(2) > 0.10) then msno = 3 dtdz = (tsno(1) - tsno(2))/((dz(1)+dz(2))/2.) dz(2) = dz(2)/2. @@ -3293,6 +3307,7 @@ subroutine snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in sneqv = sneqv - qsnsub*dt + qsnfro*dt propor = sneqv/temp snowh = max(0.,propor * snowh) + snowh = min(max(snowh,sneqv/500.0),sneqv/50.0) ! limit adjustment to a reasonable density elseif(opt_gla == 2) then fsh = fsh - (qsnfro-qsnsub)*hsub qsnfro = 0.0 From 5b245f5796e7ce55e1603fe017e7c2283ef294ee Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Wed, 7 May 2025 16:54:24 +0000 Subject: [PATCH 10/14] tisfc and tsfco update to ccpp-physics branch mgcycle --- physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 2 -- 1 file changed, 2 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index 6394763cf..4399ccd3b 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -297,8 +297,6 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, do ix=1,npts if ( oceanfrac(ix) == 0.0_kind_phys ) then tref(ix) = TSFFCS(ix) - tsfc(ix) = TSFFCS(ix) - tsfco(ix) = TSFFCS(ix) endif enddo ! In the coupled mode and when NSST is off, update tref, tsfc and tsfco over not ocean From 3fe1f18723a43988488fa328255177e6a5f3544e Mon Sep 17 00:00:00 2001 From: weizhong zheng Date: Thu, 8 May 2025 18:12:43 +0000 Subject: [PATCH 11/14] Noah-MP, set all the undefined over the glacier to some values --- physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 | 44 ++++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 b/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 index 49f748663..a36b7a60a 100644 --- a/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 +++ b/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90 @@ -1205,34 +1205,34 @@ subroutine noahmpdrv_run & ! snow_cover_fraction = 1.0 - temperature_leaf = undefined + temperature_leaf = temperature_radiative canopy_ice = 0.0 canopy_liquid = 0.0 - vapor_pres_canopy_air = undefined - temperature_canopy_air = undefined - canopy_wet_fraction = undefined - lake_water = undefined - depth_water_table = undefined - aquifer_water = undefined - saturated_water = undefined - leaf_carbon = undefined - root_carbon = undefined - stem_carbon = undefined - wood_carbon = undefined - soil_carbon_stable = undefined - soil_carbon_fast = undefined - leaf_area_index = undefined - stem_area_index = undefined - evaporation_canopy = undefined - transpiration = undefined - aquifer_water = undefined - precip_adv_heat_total = undefined + vapor_pres_canopy_air = 2000.0 + temperature_canopy_air = temperature_radiative + canopy_wet_fraction = 0.0 + lake_water = 0.0 + depth_water_table = 0.0 + aquifer_water = 0.0 + saturated_water = 0.0 + leaf_carbon = 0.0 + root_carbon = 0.0 + stem_carbon = 0.0 + wood_carbon = 0.0 + soil_carbon_stable = 0.0 + soil_carbon_fast = 0.0 + leaf_area_index = 0.0 + stem_area_index = 0.0 + evaporation_canopy = 0.0 + transpiration = 0.0 + aquifer_water = 0.0 + precip_adv_heat_total = 0.0 soil_moisture_wtd = 0.0 recharge = 0.0 deep_recharge = 0.0 eq_soil_water_vol = soil_moisture_vol - transpiration_heat = undefined - latent_heat_canopy = undefined + transpiration_heat = 0.0 + latent_heat_canopy = 0.0 z0_total = 0.002 latent_heat_total = latent_heat_ground t2mmp(i) = temperature_bare_2m From 004131cea040a6af61231454776bcf7db98cc3f1 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Fri, 16 May 2025 04:12:04 +0000 Subject: [PATCH 12/14] update to ccpp-physics branch mgcycle --- .../UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 | 2 +- physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 index 4373e19d4..246cb320b 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 @@ -711,7 +711,7 @@ subroutine GFS_phys_time_vary_timestep_init ( imap, jmap, prsl, seed0, rann, nthrds, nx, ny, nsst, tile_num, nlunit, lsoil, lsoil_lsm,& kice, ialb, isot, ivegsrc, input_nml_file, use_ufo, nst_anl, frac_grid, fhcyc, phour, & oceanfrac, lakefrac, min_seaice, min_lakeice, smc, slc, stc, smois, sh2o, tslb, tiice, & - tg3, tref, & + tg3, tref, & tsfc, tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, zorli, zorll, & zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype,scolor, shdmin, shdmax, snowd, & cv, cvb, cvt, oro, oro_uf, xlat_d, xlon_d, slmsk, landfrac, ozphys, h2ophys, & diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index 4399ccd3b..88d86e7cd 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -144,7 +144,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, npts = nx*ny ! ! Some surface variables need to be updated by gcycle with coupled mode, and nsst mode dependent. A few variables are saved -! in order to be able to update them over the specific surface types only after call sfccycle +! in order to be able to update them over the specific surface types only after call sfccycle ! if ( cplflx ) then hice_save = hice @@ -292,14 +292,14 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, weasd(ix) = weasd_save(ix) endif enddo -! In the coupled mode and when NSST is on, update tref, tsfc and tsfco over non-ocean +! In the coupled mode and when NSST is on, update tref over non-ocean if ( nsst > 0 ) then do ix=1,npts if ( oceanfrac(ix) == 0.0_kind_phys ) then tref(ix) = TSFFCS(ix) endif enddo -! In the coupled mode and when NSST is off, update tref, tsfc and tsfco over not ocean +! In the coupled mode and when NSST is off, update tsfc and tsfco over non-ocean else do ix=1,npts if ( oceanfrac(ix) == 0.0_kind_phys ) then From 87945cba713d3df31c4ec514d2d5d291d8ae661d Mon Sep 17 00:00:00 2001 From: Ruiyu Sun Date: Thu, 22 May 2025 13:37:09 +0000 Subject: [PATCH 13/14] remove lakefrac_threshold, an unused argument passed to gcycle --- .../UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 | 6 +++--- .../UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta | 8 -------- physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 | 4 ++-- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 index 246cb320b..1c78cccb5 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90 @@ -702,7 +702,7 @@ end subroutine GFS_phys_time_vary_init !>\section gen_GFS_phys_time_vary_timestep_init GFS_phys_time_vary_timestep_init General Algorithm !> @{ subroutine GFS_phys_time_vary_timestep_init ( & - me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, idate, cplflx, lakefrac_threshold, & + me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, idate, cplflx, & nsswr, fhswr, lsswr, fhour, & imfdeepcnv, cal_pre, random_clds, nscyc, ntoz, h2o_phys, iaerclm, iccn, clstp, & jindx1_o3, jindx2_o3, ddy_o3, ozpl, jindx1_h, jindx2_h, ddy_h, h2opl, iflip, & @@ -724,7 +724,7 @@ subroutine GFS_phys_time_vary_timestep_init ( integer, intent(in) :: me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, & nsswr, imfdeepcnv, iccn, nscyc, ntoz, iflip integer, intent(in) :: idate(:) - real(kind_phys), intent(in) :: fhswr, fhour, lakefrac_threshold + real(kind_phys), intent(in) :: fhswr, fhour logical, intent(in) :: lsswr, cal_pre, random_clds, h2o_phys, iaerclm, cplflx real(kind_phys), intent(out) :: clstp integer, intent(in), optional :: jindx1_o3(:), jindx2_o3(:), jindx1_h(:), jindx2_h(:) @@ -928,7 +928,7 @@ subroutine GFS_phys_time_vary_timestep_init ( tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, & zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, & stype, scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & - cplflx, oceanfrac, lakefrac_threshold, & + cplflx, oceanfrac, & xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) endif endif diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta index b05fb88a6..14b21582b 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta @@ -1180,14 +1180,6 @@ dimensions = () type = logical intent = in -[lakefrac_threshold] - standard_name = lakefrac_threshold_for_enabling_lake_model - long_name = fraction of horizontal grid area occupied by lake must be greater than this value to enable a lake model - units = frac - dimensions = () - type = real - kind = kind_phys - intent = in [nsswr] standard_name = number_of_timesteps_between_shortwave_radiation_calls long_name = number of timesteps between shortwave radiation calls diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 index 88d86e7cd..49d6326e8 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/gcycle.F90 @@ -22,7 +22,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, & zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, & stype, scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & - cplflx, oceanfrac, lakefrac_threshold, & + cplflx, oceanfrac, & xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg) ! ! @@ -37,7 +37,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, logical, intent(in) :: use_ufo, nst_anl, frac_grid, cplflx real(kind=kind_phys), intent(in) :: fhcyc, phour, landfrac(:), lakefrac(:), & min_seaice, min_lakeice,oceanfrac(:), & - lakefrac_threshold, xlat_d(:), xlon_d(:) + xlat_d(:), xlon_d(:) real(kind=kind_phys), intent(inout), optional :: & smois(:,:), & sh2o(:,:), & From 09b2eb8b5a6a297794316e78d00cdfbceb013bb7 Mon Sep 17 00:00:00 2001 From: Ruiyu Sun Date: Fri, 23 May 2025 13:31:06 +0000 Subject: [PATCH 14/14] correct oceanfrac dimenion --- .../Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta index 14b21582b..8dba6760e 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta @@ -1649,7 +1649,7 @@ standard_name = sea_area_fraction long_name = fraction of horizontal grid area occupied by ocean units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in