From b7b0c1f11dd4fa459366c7ebb5f8ec6d43ab667e Mon Sep 17 00:00:00 2001 From: ClaraDraper-NOAA Date: Wed, 5 Feb 2025 21:26:48 +0000 Subject: [PATCH 1/2] Cleaned up land-increment namelist and script variable names. --- .../global_cycle/C192.gsi_lndincsoilnoahmp.sh | 5 +- .../C192.gsitile_lndincsoilnoahmp.sh | 5 +- .../C192.jedi_lndincsoilnoahmp.sh | 7 +-- reg_tests/global_cycle/C768.lndincsnow.sh | 6 +- sorc/global_cycle.fd/cycle.f90 | 58 +++++++++---------- ush/global_cycle.sh | 27 +++++---- ush/global_cycle_driver.sh | 17 +++--- 7 files changed, 59 insertions(+), 66 deletions(-) diff --git a/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh b/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh index f87cab334..6270dad6b 100755 --- a/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh +++ b/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh @@ -37,9 +37,8 @@ export DONST="NO" export use_ufo=.true. export DO_SFCCYCLE=".FALSE." -export DO_LNDINC=".TRUE." -export DO_SOI_INC=".true." -export GCYCLE_INTERP_LNDINC=".true." +export GCYCLE_DO_SOILINCR=".true." +export GCYCLE_INTERP_LANDINCR=".true." export LSOIL_INCR=3 export VERBOSE=YES diff --git a/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh b/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh index 2a315f62b..3e40999b3 100755 --- a/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh +++ b/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh @@ -37,9 +37,8 @@ export DONST="NO" export use_ufo=.true. export DO_SFCCYCLE=".FALSE." -export DO_LNDINC=".TRUE." -export DO_SOI_INC=".true." -export GCYCLE_INTERP_LNDINC=".false." +export GCYCLE_DO_SOILINCR=".true." +export GCYCLE_INTERP_LANDINCR=".false." export LSOIL_INCR=3 export VERBOSE=YES diff --git a/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh b/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh index c6d076ba1..f754cc7e5 100755 --- a/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh +++ b/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh @@ -39,10 +39,9 @@ export DONST="NO" export use_ufo=.true. export DO_SFCCYCLE=".FALSE." -export DO_LNDINC=".TRUE." -export DO_SOI_INC=".true." -export GCYCLE_INTERP_LNDINC=".false." -export SOI_INC_FNAME="soil_sfcincr_jedi" +export GCYCLE_DO_SOILINCR=".true." +export GCYCLE_INTERP_LANDINCR=".false." +export SOILINCR_FNAME="soil_sfcincr_jedi" export LSOIL_INCR=3 export VERBOSE=YES diff --git a/reg_tests/global_cycle/C768.lndincsnow.sh b/reg_tests/global_cycle/C768.lndincsnow.sh index 4e7c7476b..118f5335b 100755 --- a/reg_tests/global_cycle/C768.lndincsnow.sh +++ b/reg_tests/global_cycle/C768.lndincsnow.sh @@ -31,9 +31,8 @@ export FNSNOA=$COMIN/gdas.t00z.snogrb_t1534.3072.1536 export FNACNA=$COMIN/gdas.t00z.seaice.5min.blend.grb export NST_FILE=$COMIN/gdas.t00z.dtfanl.nc -export DO_SNO_INC=.true. # must be lower-case. -export DO_SOI_INC=.false. -export GCYCLE_INTERP_LNDINC=.false. +export GCYCLE_DO_SNOWINCR=.true. # must be lower-case. +export GCYCLE_INTERP_LANDINCR=.false. export JCAP=1534 export LONB=3072 export LATB=1536 @@ -42,7 +41,6 @@ export DONST="NO" export use_ufo=.true. export DO_SFCCYCLE=".FALSE." -export DO_LNDINC=".TRUE." export VERBOSE=YES export CYCLVARS=FSNOL=99999.,FSNOS=99999., diff --git a/sorc/global_cycle.fd/cycle.f90 b/sorc/global_cycle.fd/cycle.f90 index e208ccaed..6431dca62 100644 --- a/sorc/global_cycle.fd/cycle.f90 +++ b/sorc/global_cycle.fd/cycle.f90 @@ -9,7 +9,7 @@ !! !! There are three main options (which can be called in combination): !! 1. Update the surface fields with sfccylce (do_sfccycle = .true.) -!! 2. Update the land states with increments read in from file (do_lndinc = .true.) +!! 2. Update the land states with increments read in from file (do_landincr = .true.) !! Can read in either a GSI-output increment file and regrid it, !! or (preferred) a file on the native model grid ( either produced !! by JEDI, or pre- regridded from a GSI-output file) @@ -62,12 +62,12 @@ !! terrain. !! -DONST Call routines to process NSST records. !! -DO_SFCCYCLE Call sfccycle routine to update surface fields -!! -DO_LNDINC Call routines to add land increments to sfc restarts -!! (includes do_soi_inc and/or do_sno_inc) -!! -DO_SOI_INC Apply increments to soil states. Requires DO_LNDINC=.true. -!! -DO_SNO_INC Apply increments to snow states. Requires DO_LNDINC=.true. +!! -DO_LANDINCR Call routines to add land increments to sfc restarts +!! (includes do_soilincr and/or do_snowincr) +!! -DO_SOILINCR Apply increments to soil states. Requires DO_LANDINCR=.true. +!! -DO_SNOWINCR Apply increments to snow states. Requires DO_LANDINCR=.true. !! (NOTE: oudated, coded here for Noah LSM only). -!! -INTERP_LNDINC Land increment is on Gaussian grid (from GSI) and should +!! -INTERP_LANDINCR Land increment is on Gaussian grid (from GSI) and should !! be regridded to the native model grid !! -LSOIL_INCR Number of soil layers (from top) to apply soil increments to. !! LSOIL_INCR is currently set to 3 by default. @@ -110,12 +110,12 @@ PROGRAM SFC_DRV INTEGER :: ISOT, IVEGSRC, LENSFC, ZSEA1_MM, ZSEA2_MM, IERR INTEGER :: NPROCS, MYRANK, NUM_THREADS, NUM_PARTHDS, MAX_TASKS REAL :: FH, DELTSFC, ZSEA1, ZSEA2 - LOGICAL :: USE_UFO, DO_NSST, DO_LNDINC, DO_SFCCYCLE, FRAC_GRID + LOGICAL :: USE_UFO, DO_NSST, DO_LANDINCR, DO_SFCCYCLE, FRAC_GRID ! NAMELIST/NAMCYC/ IDIM,JDIM,LSOIL,LUGB,IY,IM,ID,IH,FH,& DELTSFC,IALB,USE_UFO,DONST, & DO_SFCCYCLE,ISOT,IVEGSRC,ZSEA1_MM, & - ZSEA2_MM, MAX_TASKS, DO_LNDINC, FRAC_GRID + ZSEA2_MM, MAX_TASKS, DO_LANDINCR, FRAC_GRID ! DATA IDIM,JDIM,LSOIL/96,96,4/ DATA IY,IM,ID,IH,FH/1997,8,2,0,0./ @@ -137,7 +137,7 @@ PROGRAM SFC_DRV USE_UFO = .FALSE. DONST = "NO" - DO_LNDINC = .FALSE. + DO_LANDINCR = .FALSE. DO_SFCCYCLE = .TRUE. FRAC_GRID = .FALSE. @@ -179,7 +179,7 @@ PROGRAM SFC_DRV CALL SFCDRV(LUGB,IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & IY,IM,ID,IH,FH,IALB, & - USE_UFO,DO_NSST,DO_SFCCYCLE,DO_LNDINC, & + USE_UFO,DO_NSST,DO_SFCCYCLE,DO_LANDINCR, & FRAC_GRID,ZSEA1,ZSEA2,ISOT,IVEGSRC,MYRANK) PRINT* @@ -294,7 +294,7 @@ END PROGRAM SFC_DRV !! differences between the filtered and unfiltered terrain. !! @param[in] DO_NSST When true, process NSST records. !! @param[in] DO_SFCCYCLE Call sfccycle routine to update surface fields - !! @param[in] DO_LNDINC Read in land increment files, and add increments to + !! @param[in] DO_LANDINCR Read in land increment files, and add increments to !! requested states. !! @param[in] FRAC_GRID When true, run with fractional grid. !! @param[in] ZSEA1 When running NSST model, this is the lower bound @@ -307,7 +307,7 @@ END PROGRAM SFC_DRV !! @author Mark Iredell, George Gayno SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & IY,IM,ID,IH,FH,IALB, & - USE_UFO,DO_NSST,DO_SFCCYCLE,DO_LNDINC,& + USE_UFO,DO_NSST,DO_SFCCYCLE,DO_LANDINCR,& FRAC_GRID,ZSEA1,ZSEA2,ISOT,IVEGSRC,MYRANK) ! USE READ_WRITE_DATA @@ -328,7 +328,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & INTEGER, INTENT(IN) :: ISOT, IVEGSRC, MYRANK LOGICAL, INTENT(IN) :: USE_UFO, DO_NSST,DO_SFCCYCLE - LOGICAL, INTENT(IN) :: DO_LNDINC, FRAC_GRID + LOGICAL, INTENT(IN) :: DO_LANDINCR, FRAC_GRID REAL, INTENT(IN) :: FH, DELTSFC, ZSEA1, ZSEA2 @@ -387,7 +387,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & INTEGER, DIMENSION(LENSFC) :: STC_UPDATED, SLC_UPDATED REAL, DIMENSION(LENSFC,LSOIL) :: STCINC, SLCINC - LOGICAL :: FILE_EXISTS, DO_SOI_INC, INTERP_LNDINC, DO_SNO_INC + LOGICAL :: FILE_EXISTS, DO_SOILINCR, INTERP_LANDINCR, DO_SNOWINCR CHARACTER(LEN=3) :: RANKCH INTEGER :: lsoil_incr @@ -396,13 +396,13 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ! increments. !-------------------------------------------------------------------------------- - NAMELIST/NAMSFCD/ NST_FILE, lsoil_incr, DO_SNO_INC, DO_SOI_INC, INTERP_LNDINC + NAMELIST/NAMSFCD/ NST_FILE, lsoil_incr, DO_SNOWINCR, DO_SOILINCR, INTERP_LANDINCR DATA NST_FILE/'NULL'/ - DO_SNO_INC = .FALSE. - DO_SOI_INC = .FALSE. - INTERP_LNDINC = .FALSE. + DO_SNOWINCR = .FALSE. + DO_SOILINCR = .FALSE. + INTERP_LANDINCR = .FALSE. lsoil_incr = 3 !default @@ -475,16 +475,16 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ALLOCATE(SICFCS_FG(LENSFC)) ENDIF -IF (DO_LNDINC) THEN +IF (DO_LANDINCR) THEN ! identify variables to be updated, and allocate arrays. - IF (DO_SOI_INC ) THEN + IF (DO_SOILINCR ) THEN PRINT* PRINT*," APPLYING SOIL INCREMENTS" ALLOCATE(STC_BCK(LENSFC, LSOIL), SMC_BCK(LENSFC, LSOIL), SLC_BCK(LENSFC,LSOIL)) ALLOCATE(LANDINC_MASK_FG(LENSFC)) ENDIF ! FOR NOW, CODE SO CAN DO BOTH, BUT MIGHT NEED TO THINK ABOUT THIS SOME MORE. - IF (DO_SNO_INC) THEN + IF (DO_SNOWINCR) THEN ! ideally, would check here that sfcsub snow DA update is not also requested ! but latter is controlled by fnsol, which is read in within that routine. ! should be done at script level. @@ -522,7 +522,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & call MPI_ABORT(MPI_COMM_WORLD, 18, IERR) ENDIF - IF ( (IS_NOAHMP .OR. INTERP_LNDINC) .AND. DO_SNO_INC) THEN + IF ( (IS_NOAHMP .OR. INTERP_LANDINCR) .AND. DO_SNOWINCR) THEN print *, 'FATAL ERROR: Snow increment update does not work with NOAH_MP/with interp' call MPI_ABORT(MPI_COMM_WORLD, 29, IERR) ENDIF @@ -560,7 +560,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ENDIF ! CALCULATE MASK FOR LAND INCREMENTS - IF (DO_LNDINC) & + IF (DO_LANDINCR) & CALL CALCULATE_LANDINC_MASK(SWEFCS, VETFCS, SOTFCS, & LENSFC,VEG_TYPE_LANDICE, LANDINC_MASK) @@ -686,11 +686,11 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ! READ IN AND APPLY LAND INCREMENTS !-------------------------------------------------------------------------------- - IF (DO_LNDINC) THEN + IF (DO_LANDINCR) THEN ! SNOW INCREMENTS ! do snow first, as temperature updates will use snow analaysis - IF (DO_SNO_INC) THEN + IF (DO_SNOWINCR) THEN ! updates are made to snow depth only over land (and not-land ice). ! SWE is then updated from the snow depth analysis, using the model ! forecast density @@ -734,7 +734,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & !re-calculate soilsnow mask if snow has been updated. LANDINC_MASK_FG = LANDINC_MASK - IF (DO_SFCCYCLE .OR. DO_SNO_INC) THEN + IF (DO_SFCCYCLE .OR. DO_SNOWINCR) THEN CALL CALCULATE_LANDINC_MASK(SWEFCS, VETFCS, SOTFCS, LENSFC, & VEG_TYPE_LANDICE, LANDINC_MASK) ENDIF @@ -745,8 +745,8 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & SLC_BCK = SLCFCS ! SOIL INCREMENTS - IF ( DO_SOI_INC ) THEN - IF ( INTERP_LNDINC ) THEN + IF ( DO_SOILINCR ) THEN + IF ( INTERP_LANDINCR ) THEN !-------------------------------------------------------------------------------- ! read increments in @@ -777,7 +777,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & CALL WRITE_DATA(LENSFC,IDIM,JDIM,LSOIL,DO_NSST,.true.,NSST, & STCINC=STCINC,SLCINC=SLCINC) - ELSE ! if interp_lndinc + ELSE ! if interp_landincr !-------------------------------------------------------------------------------- ! read increments in diff --git a/ush/global_cycle.sh b/ush/global_cycle.sh index 4d67163de..2d03cb18a 100755 --- a/ush/global_cycle.sh +++ b/ush/global_cycle.sh @@ -140,10 +140,9 @@ # between the filtered and unfiltered terrain. Default is true. # DONST Process NST records when using NST model. Default is 'no'. # DO_SFCCYCLE Call sfcsub routine -# DO_LNDINC Call routines to add snow and /or soil increments -# DO_SOI_INC Call routine to add soil increments -# DO_SNO_INC Call routine to add snow inrcements -# GCYCLE_INTERP_LNDIC Flag to regrid input land increment from Gaus to native model +# GCYCLE_DO_SOILINCR Call routine to add soil increments +# GCYCLE_DO_SNOWINCR Call routine to add snow inrcements +# GCYCLE_INTERP_LANDINCR Flag to regrid input land increment from Gaus to native model # grid inside gcycle # # zsea1/zsea2 When running with NST model, this is the lower/upper bound @@ -269,13 +268,13 @@ CYCLVARS=${CYCLVARS:-""} use_ufo=${use_ufo:-.true.} DONST=${DONST:-"NO"} DO_SFCCYCLE=${DO_SFCCYCLE:-.true.} -DO_LNDINC=${DO_LNDINC:-.false.} -DO_SOI_INC=${DO_SOI_INC:-.false.} -DO_SNO_INC=${DO_SNO_INC:-.false.} -if [ "$DO_SOI_INC" == ".true." ] || [ "$DO_SNO_INC" == ".true." ] ; then - DO_LNDINC=".true." +DO_LANDINCR=${DO_LANDINCR:-.false.} +GCYCLE_DO_SOILINCR=${GCYCLE_DO_SOILINCR:-.false.} +GCYCLE_DO_SNOWINCR=${GCYCLE_DO_SNOWINCR:-.false.} +if [ "$GCYCLE_DO_SOILINCR" == ".true." ] || [ "$GCYCLE_DO_SNOWINCR" == ".true." ] ; then + DO_LANDINCR=".true." fi -GCYCLE_INTERP_LNDINC=${GCYCLE_INTERP_LNDINC:-.false.} +GCYCLE_INTERP_LANDINCR=${GCYCLE_INTERP_LANDINCR:-.false.} zsea1=${zsea1:-0} zsea2=${zsea2:-0} MAX_TASKS_CY=${MAX_TASKS_CY:-99999} @@ -386,7 +385,7 @@ cat << EOF > fort.36 idim=$CRES, jdim=$CRES, lsoil=$LSOIL, iy=$iy, im=$im, id=$id, ih=$ih, fh=$FHOUR, deltsfc=$DELTSFC,ialb=$IALB,use_ufo=$use_ufo,donst="$DONST", - do_sfccycle=$DO_SFCCYCLE,do_lndinc=$DO_LNDINC,isot=$ISOT,ivegsrc=$IVEGSRC, + do_sfccycle=$DO_SFCCYCLE,do_landincr=$DO_LANDINCR,isot=$ISOT,ivegsrc=$IVEGSRC, zsea1_mm=$zsea1,zsea2_mm=$zsea2,MAX_TASKS=$MAX_TASKS_CY, frac_grid=$FRAC_GRID / @@ -396,9 +395,9 @@ EOF cat << EOF > fort.37 &NAMSFCD NST_FILE="$NST_FILE", - DO_SOI_INC=$DO_SOI_INC, - DO_SNO_INC=$DO_SNO_INC, - INTERP_LNDINC=$GCYCLE_INTERP_LNDINC, + DO_SOILINCR=$GCYCLE_DO_SOILINCR, + DO_SNOWINCR=$GCYCLE_DO_SNOWINCR, + INTERP_LANDINCR=$GCYCLE_INTERP_LANDINCR, lsoil_incr=$LSOIL_INCR, / EOF diff --git a/ush/global_cycle_driver.sh b/ush/global_cycle_driver.sh index 7f1fccf66..2059e0a0d 100755 --- a/ush/global_cycle_driver.sh +++ b/ush/global_cycle_driver.sh @@ -52,11 +52,10 @@ else fi export DO_SFCCYLE=${DO_SFCCYCLE:-".true."} -export DO_LNDINC=${DO_LNDINC:-".false."} -export DO_SOI_INC=${DO_SOI_INC:-".false."} -export DO_SNO_INC=${DO_SNO_INC:-".false."} -export GCYCLE_INTERP_LNDINC=${GCYCLE_INTERP_LNDINC:-".false."} -SOI_INC_FNAME=${SOI_INC_FNAME:-"soil_xainc"} +export GCYCLE_DO_SOILINCR=${GCYCLE_DO_SOILINCR:-".false."} +export GCYCLE_DO_SNOWINCR=${GCYCLE_DO_SNOWINCR:-".false."} +export GCYCLE_INTERP_LANDINCR=${GCYCLE_INTERP_LANDINCR:-".false."} +SOILINCR_FNAME=${SOILINCR_FNAME:-"soil_xainc"} export FRAC_GRID=${FRAC_GRID:-".false."} CRES=$(echo $CASE | cut -c 2-) @@ -96,15 +95,15 @@ for n in $(seq 1 $ntiles); do ln -fs $FIXorog/${CASE}/C${CRES}.mx${OCNRES}_oro_data.tile${n}.nc $DATA/fnorog.00$n fi - if [[ "$DO_SNO_INC" == ".true." ]] ; then + if [[ "$GCYCLE_DO_SNOWINCR" == ".true." ]] ; then ln -fs $COMIN/$PDY.${cyc}0000.xainc.tile${n}.nc $DATA/snow_xainc.00$n fi - if [ "$DO_SOI_INC" == ".true." ] && [ "$GCYCLE_INTERP_LNDINC" == ".false." ] ; then - ln -fs $COMIN/${SOI_INC_FNAME}.00${n} $DATA/soil_xainc.00$n + if [ "$GCYCLE_DO_SOILINCR" == ".true." ] && [ "$GCYCLE_INTERP_LANDINCR" == ".false." ] ; then + ln -fs $COMIN/${SOILINCR_FNAME}.00${n} $DATA/soil_xainc.00$n fi - if [ "$DO_SOI_INC" == ".true." ] && [ "$GCYCLE_INTERP_LNDINC" == ".true." ] ; then + if [ "$GCYCLE_DO_SOILINCR" == ".true." ] && [ "$GCYCLE_INTERP_LANDINCR" == ".true." ] ; then ln -fs $COMIN/sfcincr_gsi.00$n $DATA/sfcincr_gsi.00$n fi done From 0d1b2eafa577f4098d83ec1dc93ed6d9f0be81e5 Mon Sep 17 00:00:00 2001 From: ClaraDraper-NOAA Date: Thu, 6 Feb 2025 21:56:42 +0000 Subject: [PATCH 2/2] Cleaned up DO_LANDINCR calculation. --- ush/global_cycle.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ush/global_cycle.sh b/ush/global_cycle.sh index 2d03cb18a..389e9a585 100755 --- a/ush/global_cycle.sh +++ b/ush/global_cycle.sh @@ -268,11 +268,12 @@ CYCLVARS=${CYCLVARS:-""} use_ufo=${use_ufo:-.true.} DONST=${DONST:-"NO"} DO_SFCCYCLE=${DO_SFCCYCLE:-.true.} -DO_LANDINCR=${DO_LANDINCR:-.false.} GCYCLE_DO_SOILINCR=${GCYCLE_DO_SOILINCR:-.false.} GCYCLE_DO_SNOWINCR=${GCYCLE_DO_SNOWINCR:-.false.} if [ "$GCYCLE_DO_SOILINCR" == ".true." ] || [ "$GCYCLE_DO_SNOWINCR" == ".true." ] ; then DO_LANDINCR=".true." +else + DO_LANDINCR=".false." fi GCYCLE_INTERP_LANDINCR=${GCYCLE_INTERP_LANDINCR:-.false.} zsea1=${zsea1:-0}