diff --git a/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh b/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh index bd16365a3..f87cab334 100755 --- a/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh +++ b/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh @@ -38,7 +38,9 @@ export use_ufo=.true. export DO_SFCCYCLE=".FALSE." export DO_LNDINC=".TRUE." -export DO_SOI_INC_GSI=".true." +export DO_SOI_INC=".true." +export GCYCLE_INTERP_LNDINC=".true." +export LSOIL_INCR=3 export VERBOSE=YES export CYCLVARS=FSNOL=-2.,FSNOS=99999., @@ -86,7 +88,7 @@ if [ $test_failed -ne 0 ]; then echo "<<< C192 GSI based LANDINC SOIL-NOAHMP CYCLE TEST FAILED. >>>" echo "**********************************************" if [ "$UPDATE_BASELINE" = "TRUE" ]; then - $HOMEgfs/reg_tests/update_baseline.sh $HOMEreg "c192.lndincsoilnoahmp" $commit_num + $HOMEgfs/reg_tests/update_baseline.sh $HOMEreg "c192.gsi_lndincsoilnoahmp" $commit_num fi else echo diff --git a/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh b/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh new file mode 100755 index 000000000..2a315f62b --- /dev/null +++ b/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +#------------------------------------------------------------------ +# Run global_cycle for a C192 case to test the ingest and +# application of soil moisture and temperature increments +# from the GSI, into Noah-MP restarts. +# Compare output to a baseline set of files using the 'nccmp' +# utility. +#------------------------------------------------------------------ + +set -x + +NCCMP=${NCCMP:-$(which nccmp)} + +export MAX_TASKS_CY=6 + +export HOMEgfs=$NWPROD + +export FIXgfs=$HOMEreg/fix + +export CYCLEXEC=$HOMEgfs/exec/global_cycle + +export CDATE=2019073000 +export FHOUR=00 +export DELTSFC=6 + +export CASE=C192 +export OCNRES=99999 + +export COMIN=$HOMEreg/input_data_noahmp + +export JCAP=1534 +export LONB=3072 +export LATB=1536 + +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 LSOIL_INCR=3 + +export VERBOSE=YES +export CYCLVARS=FSNOL=-2.,FSNOS=99999., + +$HOMEgfs/ush/global_cycle_driver.sh + +iret=$? +if [ $iret -ne 0 ]; then + set +x + echo "<<< C192 GSI-TILE based LANDINC SOIL NOAHMP CYCLE TEST FAILED. >>>" + exit $iret +fi + +test_failed=0 + +cd $DATA +for files in *tile*.nc +do + if [ -f $files ]; then + echo CHECK $files + $NCCMP -dmfqS $files $HOMEreg/baseline_data/c192.gsitile_lndincsoilnoahmp/$files + iret=$? + if [ $iret -ne 0 ]; then + test_failed=1 + fi + fi +done + +set +x +if [ $test_failed -ne 0 ]; then + echo + echo "**********************************************" + echo "<<< C192 GSI-TILE based LANDINC SOIL-NOAHMP CYCLE TEST FAILED. >>>" + echo "**********************************************" + if [ "$UPDATE_BASELINE" = "TRUE" ]; then + $HOMEgfs/reg_tests/update_baseline.sh $HOMEreg "c192.gsitile_lndincsoilnoahmp" $commit_num + fi +else + echo + echo "*****************************************" + echo "<<< C192 GSI-TILE based LANDINC SOIL-NOAHMP CYCLE TEST PASSED. >>>" + echo "*****************************************" +fi + +exit diff --git a/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh b/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh index ebbc868e7..c6d076ba1 100755 --- a/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh +++ b/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh @@ -40,7 +40,10 @@ export use_ufo=.true. export DO_SFCCYCLE=".FALSE." export DO_LNDINC=".TRUE." -export DO_SOI_INC_JEDI=".true." +export DO_SOI_INC=".true." +export GCYCLE_INTERP_LNDINC=".false." +export SOI_INC_FNAME="soil_sfcincr_jedi" +export LSOIL_INCR=3 export VERBOSE=YES export CYCLVARS=FSNOL=-2.,FSNOS=99999., diff --git a/reg_tests/global_cycle/C768.lndincsnow.sh b/reg_tests/global_cycle/C768.lndincsnow.sh index a32239d5e..4e7c7476b 100755 --- a/reg_tests/global_cycle/C768.lndincsnow.sh +++ b/reg_tests/global_cycle/C768.lndincsnow.sh @@ -31,8 +31,9 @@ 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_JEDI=.true. # must be lower-case. -export DO_SOI_INC_JEDI=.false. +export DO_SNO_INC=.true. # must be lower-case. +export DO_SOI_INC=.false. +export GCYCLE_INTERP_LNDINC=.false. export JCAP=1534 export LONB=3072 export LATB=1536 diff --git a/reg_tests/global_cycle/driver.hera.sh b/reg_tests/global_cycle/driver.hera.sh index bb2d87fc8..206a325f4 100755 --- a/reg_tests/global_cycle/driver.hera.sh +++ b/reg_tests/global_cycle/driver.hera.sh @@ -85,10 +85,16 @@ export COMOUT=$DATA TEST5=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c192.jedi_lndincsoilnoahmp \ -o $LOG_FILE -e $LOG_FILE ./C192.jedi_lndincsoilnoahmp.sh) +LOG_FILE=consistency.log06 +export DATA="${DATA_DIR}/test6" +export COMOUT=$DATA +TEST6=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J C192.gsitile_lndincsoilnoahmp \ + -o $LOG_FILE -e $LOG_FILE ./C192.gsitile_lndincsoilnoahmp.sh) + LOG_FILE=consistency.log sbatch --nodes=1 -t 0:01:00 -A $PROJECT_CODE -J chgres_summary -o $LOG_FILE -e $LOG_FILE \ --open-mode=append -q $QUEUE -d\ - afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << EOF + afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5:$TEST6 << EOF #!/bin/bash grep -a '<<<' ${LOG_FILE}* > summary.log EOF diff --git a/reg_tests/global_cycle/driver.hercules.sh b/reg_tests/global_cycle/driver.hercules.sh index f6d5abccd..04b5f5db6 100755 --- a/reg_tests/global_cycle/driver.hercules.sh +++ b/reg_tests/global_cycle/driver.hercules.sh @@ -85,10 +85,16 @@ export COMOUT=$DATA TEST5=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c192.jedi_lndincsoilnoahmp \ -o $LOG_FILE -e $LOG_FILE ./C192.jedi_lndincsoilnoahmp.sh) +LOG_FILE=consistency.log06 +export DATA="${DATA_DIR}/test6" +export COMOUT=$DATA +TEST6=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J C192.gsitile_lndincsoilnoahmp \ + -o $LOG_FILE -e $LOG_FILE ./C192.gsitile_lndincsoilnoahmp.sh) + LOG_FILE=consistency.log sbatch --nodes=1 -t 0:01:00 -A $PROJECT_CODE -J chgres_summary -o $LOG_FILE -e $LOG_FILE \ --open-mode=append -q $QUEUE -d\ - afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << EOF + afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5:$TEST6 << EOF #!/bin/bash grep -a '<<<' ${LOG_FILE}* > summary.log EOF diff --git a/reg_tests/global_cycle/driver.jet.sh b/reg_tests/global_cycle/driver.jet.sh index f7e2b55eb..2a811c00b 100755 --- a/reg_tests/global_cycle/driver.jet.sh +++ b/reg_tests/global_cycle/driver.jet.sh @@ -85,10 +85,16 @@ export COMOUT=$DATA TEST5=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c192.jedi_lndincsoilnoahmp \ -o $LOG_FILE -e $LOG_FILE ./C192.jedi_lndincsoilnoahmp.sh) +LOG_FILE=consistency.log06 +export DATA="${DATA_DIR}/test6" +export COMOUT=$DATA +TEST6=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J C192.gsitile_lndincsoilnoahmp \ + --partition=xjet -o $LOG_FILE -e $LOG_FILE ./C192.gsitile_lndincsoilnoahmp.sh) + LOG_FILE=consistency.log sbatch --partition=xjet --nodes=1 -t 0:01:00 -A $PROJECT_CODE -J summary -o $LOG_FILE -e $LOG_FILE \ --open-mode=append -q $QUEUE -d\ - afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << EOF + afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5:$TEST6 << EOF #!/bin/bash grep -a '<<<' ${LOG_FILE}* > ./summary.log EOF diff --git a/reg_tests/global_cycle/driver.orion.sh b/reg_tests/global_cycle/driver.orion.sh index f5cf0361d..d4a765343 100755 --- a/reg_tests/global_cycle/driver.orion.sh +++ b/reg_tests/global_cycle/driver.orion.sh @@ -83,10 +83,16 @@ export COMOUT=$DATA TEST5=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c192.jedi_lndincsoilnoahmp \ -o $LOG_FILE -e $LOG_FILE ./C192.jedi_lndincsoilnoahmp.sh) +LOG_FILE=consistency.log06 +export DATA="${DATA_DIR}/test6" +export COMOUT=$DATA +TEST6=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J C192.gsitile_lndincsoilnoahmp \ + -o $LOG_FILE -e $LOG_FILE ./C192.gsitile_lndincsoilnoahmp.sh) + LOG_FILE=consistency.log sbatch --nodes=1 -t 0:01:00 -A $PROJECT_CODE -J chgres_summary -o $LOG_FILE -e $LOG_FILE \ --open-mode=append -q $QUEUE -d\ - afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << EOF + afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5:$TEST6 << EOF #!/bin/bash grep -a '<<<' ${LOG_FILE}* > summary.log EOF diff --git a/reg_tests/global_cycle/driver.wcoss2.sh b/reg_tests/global_cycle/driver.wcoss2.sh index 9a8f4deac..2da826570 100755 --- a/reg_tests/global_cycle/driver.wcoss2.sh +++ b/reg_tests/global_cycle/driver.wcoss2.sh @@ -86,8 +86,13 @@ export COMOUT=$DATA TEST5=$(qsub -V -o ${LOG_FILE}05 -e ${LOG_FILE}05 -q $QUEUE -A $PROJECT_CODE -l walltime=00:05:00 \ -N c192.jedi_lndincsoilnoahmp -l select=1:ncpus=12:mem=8GB $PWD/C192.jedi_lndincsoilnoahmp.sh) +export DATA="${DATA_DIR}/test6" +export COMOUT=$DATA +TEST6=$(qsub -V -o ${LOG_FILE}06 -e ${LOG_FILE}06 -q $QUEUE -A $PROJECT_CODE -l walltime=00:05:00 \ + -N c192.gsitile_lndincsoilnoahmp -l select=1:ncpus=12:mem=8GB $PWD/C192.gsitile_lndincsoilnoahmp.sh) + qsub -V -o ${LOG_FILE} -e ${LOG_FILE} -q $QUEUE -A $PROJECT_CODE -l walltime=00:01:00 \ - -N cycle_summary -l select=1:ncpus=1:mem=100MB -W depend=afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << EOF + -N cycle_summary -l select=1:ncpus=1:mem=100MB -W depend=afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5:$TEST6 << EOF #!/bin/bash cd $reg_dir grep -a '<<<' ${LOG_FILE}?? | grep -v echo > summary.log diff --git a/sorc/global_cycle.fd/cycle.f90 b/sorc/global_cycle.fd/cycle.f90 index b85bc2b4d..e208ccaed 100644 --- a/sorc/global_cycle.fd/cycle.f90 +++ b/sorc/global_cycle.fd/cycle.f90 @@ -10,16 +10,9 @@ !! 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.) -!! Designed to work with either: -!! 2a. A land increment file created by the GSI on the Gaussian -!! grid. The increments are interpolated here to the model grid, using the -!! same method as for the NST increments. This is currently implemented for -!! applying soil temperature increments calculated from the EnKF -!! assimilation of T2m (but this is not a requirement - any -!! GSI-generated soil temperature increment file can be applied here). -!! 2b. A land increment file created by JEDI, on the native model grid -!! (cube sphere tiles). This is currently implemented for snow depth -!! updates for the Noah model. +!! 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) !! 3. Update the NSST field, several options: !! !! 3a. Update the NSST TREF field using @@ -44,12 +37,10 @@ !! TREF increments !! - $sfcincr_gsi.$NNN Gaussian GSI file which contains soil state !! increments -!! - snow_xainc.$NNN The cubed-sphere snow increment file (contains -!! increments calculated by JEDI on the native -!! model grid). -!! - soil_xainc.$NNN The cubed-sphere soil increment file (contains -!! soil temperature and soil moisture increments -!! calculated by JEDI on the native model grid). +!! - snow_xainc.$NNN The cubed-sphere snow increment file (on +!! the native model grid). +!! - soil_xainc.$NNN The cubed-sphere soil increment file (on the +!! native model grid). !! !! OUTPUT FILES: !! - fnbgso.$NNN The updated sfc/nsst restart file. @@ -69,15 +60,15 @@ !! - USE_UFO Adjust sst and soil substrate temperature for !! differences between the filtered and unfiltered !! terrain. -!! -DONST Process NSST records. +!! -DONST Call routines to process NSST records. !! -DO_SFCCYCLE Call sfccycle routine to update surface fields -!! -DO_LNDINC Read in land increment files, and add increments to -!! relevant states. -!! NOTE: We do not have a GSI snow analysis -!! -DO_SOI_INC_GSI Do land increments to soil states on Gaussian grids. -!! -DO_SOI_INC_JEDI Do land increments to soil states on cubed-sphere tiles. -!! -DO_SNO_INC_JEDI Do land increments to snow states on cubed-sphere tiles -!! (Noah land model only). +!! -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. +!! (NOTE: oudated, coded here for Noah LSM only). +!! -INTERP_LNDINC 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. !! Extra cautions are needed on layer#3 across permafrost regions due to @@ -324,7 +315,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & USE MPI USE LAND_INCREMENTS, ONLY: GAUSSIAN_TO_FV3_INTERP, & ADD_INCREMENT_SOIL, & - ADD_JEDI_INCREMENT_SNOW, & + ADD_INCREMENT_SNOW, & CALCULATE_LANDINC_MASK, & APPLY_LAND_DA_ADJUSTMENTS_SOIL, & APPLY_LAND_DA_ADJUSTMENTS_SND, & @@ -346,7 +337,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & CHARACTER(LEN=5) :: TILE_NUM CHARACTER(LEN=500) :: NST_FILE - CHARACTER(LEN=500) :: GSI_SOI_FILE,JEDI_SOI_FILE,JEDI_SNO_FILE + CHARACTER(LEN=50) :: FNAME_INC CHARACTER(LEN=4) :: INPUT_NML_FILE(SZ_NML) INTEGER :: I, IERR @@ -394,9 +385,9 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & real, dimension(lensfc) :: tf_clm_tile,tf_trd_tile,sal_clm_tile INTEGER :: veg_type_landice INTEGER, DIMENSION(LENSFC) :: STC_UPDATED, SLC_UPDATED - REAL, DIMENSION(LENSFC,LSOIL) :: STCINC, SLCINC + REAL, DIMENSION(LENSFC,LSOIL) :: STCINC, SLCINC - LOGICAL :: FILE_EXISTS, DO_SOI_INC_GSI, DO_SOI_INC_JEDI, DO_SNO_INC_JEDI + LOGICAL :: FILE_EXISTS, DO_SOI_INC, INTERP_LNDINC, DO_SNO_INC CHARACTER(LEN=3) :: RANKCH INTEGER :: lsoil_incr @@ -405,13 +396,13 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ! increments. !-------------------------------------------------------------------------------- - NAMELIST/NAMSFCD/ NST_FILE, lsoil_incr, DO_SNO_INC_JEDI, DO_SOI_INC_JEDI, DO_SOI_INC_GSI + NAMELIST/NAMSFCD/ NST_FILE, lsoil_incr, DO_SNO_INC, DO_SOI_INC, INTERP_LNDINC DATA NST_FILE/'NULL'/ - DO_SNO_INC_JEDI = .FALSE. - DO_SOI_INC_GSI = .FALSE. - DO_SOI_INC_JEDI = .FALSE. + DO_SNO_INC = .FALSE. + DO_SOI_INC = .FALSE. + INTERP_LNDINC = .FALSE. lsoil_incr = 3 !default @@ -486,24 +477,19 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & IF (DO_LNDINC) THEN ! identify variables to be updated, and allocate arrays. - IF (DO_SOI_INC_GSI .and. DO_SOI_INC_JEDI) THEN + IF (DO_SOI_INC ) THEN PRINT* - PRINT*, 'FATAL ERROR: Can not do gsi and jedi soil updates at the same time, choose one!' - CALL MPI_ABORT(MPI_COMM_WORLD, 15, IERR) - ENDIF - IF (DO_SOI_INC_GSI .or. DO_SOI_INC_JEDI) THEN - PRINT* - PRINT*," APPLYING SOIL INCREMENTS FROM GSI OR JEDI" + 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_JEDI) THEN + IF (DO_SNO_INC) 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. PRINT* - PRINT*," APPLYING SNOW INCREMENTS FROM JEDI" + PRINT*," APPLYING SNOW INCREMENTS" ALLOCATE(SND_BCK(LENSFC), SND_INC(LENSFC), SWE_BCK(LENSFC)) ENDIF ! set-up land mask info @@ -519,7 +505,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ! READ THE INPUT SURFACE DATA ON THE CUBED-SPHERE TILE. !-------------------------------------------------------------------------------- - CALL READ_DATA(LSOIL,LENSFC,DO_NSST,DO_SNO_INC_JEDI,DO_SOI_INC_JEDI,.false.,IS_NOAHMP=IS_NOAHMP, & + CALL READ_DATA(LSOIL,LENSFC,DO_NSST,IS_NOAHMP=IS_NOAHMP, & TSFFCS=TSFFCS,SMCFCS=SMCFCS, & SWEFCS=SWEFCS,STCFCS=STCFCS,TG3FCS=TG3FCS,ZORFCS=ZORFCS, & CVFCS=CVFCS, CVBFCS=CVBFCS,CVTFCS=CVTFCS,ALBFCS=ALBFCS, & @@ -536,8 +522,8 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & call MPI_ABORT(MPI_COMM_WORLD, 18, IERR) ENDIF - IF (IS_NOAHMP .AND. DO_SNO_INC_JEDI) THEN - print *, 'FATAL ERROR: Snow increment update does not work with NOAH_MP.' + IF ( (IS_NOAHMP .OR. INTERP_LNDINC) .AND. DO_SNO_INC) THEN + print *, 'FATAL ERROR: Snow increment update does not work with NOAH_MP/with interp' call MPI_ABORT(MPI_COMM_WORLD, 29, IERR) ENDIF @@ -697,26 +683,26 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ENDIF !-------------------------------------------------------------------------------- -! READ IN AND APPLY LAND INCREMENTS FROM THE GSI/JEDI +! READ IN AND APPLY LAND INCREMENTS !-------------------------------------------------------------------------------- IF (DO_LNDINC) THEN ! SNOW INCREMENTS ! do snow first, as temperature updates will use snow analaysis - IF (DO_SNO_INC_JEDI) THEN + IF (DO_SNO_INC) 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 ! make sure incr. files exist WRITE(RANKCH, '(I3.3)') (MYRANK+1) - JEDI_SNO_FILE = "snow_xainc." // RANKCH + FNAME_INC = "snow_xainc." // RANKCH - INQUIRE(FILE=trim(JEDI_SNO_FILE), EXIST=file_exists) + INQUIRE(FILE=trim(FNAME_INC), EXIST=file_exists) IF (.not. file_exists) then print *, 'FATAL ERROR: snow increment (fv3 grid) update requested, & - but file does not exist : ', trim(jedi_sno_file) + but file does not exist : ', trim(FNAME_INC) call MPI_ABORT(MPI_COMM_WORLD, 10, IERR) ENDIF @@ -724,8 +710,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ! read increments in !-------------------------------------------------------------------------------- - ! Only coded for DA on native model grid (would always be the case for cycling DA) - CALL READ_DATA(LSOIL,LENSFC,.false.,.true.,.false.,.true.,SNDFCS=SND_INC) + CALL READ_DATA(LSOIL,LENSFC,.false.,FNAME_INC=FNAME_INC,SNDFCS=SND_INC) !-------------------------------------------------------------------------------- ! add increments to state vars @@ -735,7 +720,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & SND_BCK = SNDFCS SWE_BCK = SWEFCS - CALL ADD_JEDI_INCREMENT_SNOW(SND_INC,LANDINC_MASK,LENSFC,SNDFCS) + CALL ADD_INCREMENT_SNOW(SND_INC,LANDINC_MASK,LENSFC,SNDFCS) !-------------------------------------------------------------------------------- ! make any necessary adjustments to dependent variables @@ -744,12 +729,12 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & CALL APPLY_LAND_DA_ADJUSTMENTS_SND(LSM, LENSFC, LANDINC_MASK, SWE_BCK, SND_BCK, & SNDFCS, SWEFCS) - ENDIF ! jedi snow increments + ENDIF ! snow increments !re-calculate soilsnow mask if snow has been updated. LANDINC_MASK_FG = LANDINC_MASK - IF (DO_SFCCYCLE .OR. DO_SNO_INC_JEDI) THEN + IF (DO_SFCCYCLE .OR. DO_SNO_INC) THEN CALL CALCULATE_LANDINC_MASK(SWEFCS, VETFCS, SOTFCS, LENSFC, & VEG_TYPE_LANDICE, LANDINC_MASK) ENDIF @@ -760,62 +745,59 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & SLC_BCK = SLCFCS ! SOIL INCREMENTS - IF (DO_SOI_INC_GSI) THEN - - !-------------------------------------------------------------------------------- - ! read increments in - !-------------------------------------------------------------------------------- - ! make sure incr. files exist - WRITE(RANKCH, '(I3.3)') (MYRANK+1) - GSI_SOI_FILE = "sfcincr_gsi." // RANKCH - - INQUIRE(FILE=trim(GSI_SOI_FILE), EXIST=file_exists) - IF (.not. file_exists) then - print *, 'FATAL ERROR: gsi soil increment (gaussian grid) update requested, & - but file does not exist : ', trim(gsi_soi_file) - call MPI_ABORT(MPI_COMM_WORLD, 10, IERR) - ENDIF - - CALL READ_GSI_DATA(GSI_SOI_FILE, 'LND', LSOIL=LSOIL) - - !-------------------------------------------------------------------------------- - ! interpolate increments to cubed sphere tiles - !-------------------------------------------------------------------------------- + IF ( DO_SOI_INC ) THEN + IF ( INTERP_LNDINC ) THEN + + !-------------------------------------------------------------------------------- + ! read increments in + !-------------------------------------------------------------------------------- + ! make sure incr. files exist + WRITE(RANKCH, '(I3.3)') (MYRANK+1) + FNAME_INC = "sfcincr_gsi." // RANKCH + + INQUIRE(FILE=trim(FNAME_INC), EXIST=file_exists) + IF (.not. file_exists) then + print *, 'FATAL ERROR: gsi soil increment (gaussian grid) update requested, & + but file does not exist : ', trim(FNAME_INC) + call MPI_ABORT(MPI_COMM_WORLD, 10, IERR) + ENDIF - CALL GAUSSIAN_TO_FV3_INTERP(LSOIL_INCR,RLA,RLO,& - STCINC,SLCINC,LANDINC_MASK,LENSFC,LSOIL,IDIM,JDIM,LSM,MYRANK) + CALL READ_GSI_DATA(FNAME_INC, 'LND', LSOIL=LSOIL) - !-------------------------------------------------------------------------------- - ! save interpolated increments - !-------------------------------------------------------------------------------- - CALL WRITE_DATA(LENSFC,IDIM,JDIM,LSOIL,DO_NSST,.true.,NSST, & - STCINC=STCINC,SLCINC=SLCINC) + !-------------------------------------------------------------------------------- + ! interpolate increments to cubed sphere tiles + !-------------------------------------------------------------------------------- - ENDIF ! end reading and interpolating gsi soil increments + CALL GAUSSIAN_TO_FV3_INTERP(LSOIL_INCR,RLA,RLO,& + STCINC,SLCINC,LANDINC_MASK,LENSFC,LSOIL,IDIM,JDIM,LSM,MYRANK) - IF (DO_SOI_INC_JEDI) THEN + !-------------------------------------------------------------------------------- + ! save interpolated increments + !-------------------------------------------------------------------------------- + CALL WRITE_DATA(LENSFC,IDIM,JDIM,LSOIL,DO_NSST,.true.,NSST, & + STCINC=STCINC,SLCINC=SLCINC) - !-------------------------------------------------------------------------------- - ! read increments in - !-------------------------------------------------------------------------------- - ! make sure incr. files exist - WRITE(RANKCH, '(I3.3)') (MYRANK+1) - JEDI_SOI_FILE = "soil_xainc." // RANKCH + ELSE ! if interp_lndinc - INQUIRE(FILE=trim(JEDI_SOI_FILE), EXIST=file_exists) - IF (.not. file_exists) then - print *, 'FATAL ERROR: soil increment (fv3 grid) update requested, but file & - does not exist: ', trim(jedi_soi_file) - call MPI_ABORT(MPI_COMM_WORLD, 10, IERR) - ENDIF + !-------------------------------------------------------------------------------- + ! read increments in + !-------------------------------------------------------------------------------- + ! make sure incr. files exist + WRITE(RANKCH, '(I3.3)') (MYRANK+1) + FNAME_INC = "soil_xainc." // RANKCH - CALL READ_DATA(LSOIL,LENSFC,.false.,.false.,.true., & - .true.,IS_NOAHMP=IS_NOAHMP, & - STCINC=STCINC,SLCINC=SLCINC) + INQUIRE(FILE=trim(FNAME_INC), EXIST=file_exists) + IF (.not. file_exists) then + print *, 'FATAL ERROR: soil increment (fv3 grid) update requested, but file & + does not exist: ', trim(FNAME_INC) + call MPI_ABORT(MPI_COMM_WORLD, 10, IERR) + ENDIF - ENDIF ! end reading jedi soil increments + CALL READ_DATA(LSOIL,LENSFC,.false.,FNAME_INC=FNAME_INC, & + LSOIL_INCR=LSOIL_INCR, IS_NOAHMP=IS_NOAHMP, & + STCINC=STCINC,SLCINC=SLCINC) - IF (DO_SOI_INC_GSI .or. DO_SOI_INC_JEDI) THEN + ENDIF ! end reading soil increments !-------------------------------------------------------------------------------- ! add increments to state vars diff --git a/sorc/global_cycle.fd/land_increments.f90 b/sorc/global_cycle.fd/land_increments.f90 index 3cff0c163..0d7297b59 100644 --- a/sorc/global_cycle.fd/land_increments.f90 +++ b/sorc/global_cycle.fd/land_increments.f90 @@ -8,7 +8,7 @@ module land_increments public gaussian_to_fv3_interp public add_increment_soil - public add_jedi_increment_snow + public add_increment_snow public calculate_landinc_mask public apply_land_da_adjustments_soil public apply_land_da_adjustments_snd @@ -441,7 +441,7 @@ end subroutine add_increment_soil !! !! @author Clara Draper. @date August 2021 -subroutine add_jedi_increment_snow(snd_inc,mask,lensfc,snd) +subroutine add_increment_snow(snd_inc,mask,lensfc,snd) implicit none @@ -459,7 +459,7 @@ subroutine add_jedi_increment_snow(snd_inc,mask,lensfc,snd) endif enddo -end subroutine add_jedi_increment_snow +end subroutine add_increment_snow !> Calculate soil mask for land on model grid. !! Output is 1 - soil, 2 - snow-covered, 0 - land ice, -1 not land. diff --git a/sorc/global_cycle.fd/read_write_data.f90 b/sorc/global_cycle.fd/read_write_data.f90 index 5221f840e..4eac568af 100644 --- a/sorc/global_cycle.fd/read_write_data.f90 +++ b/sorc/global_cycle.fd/read_write_data.f90 @@ -1035,11 +1035,6 @@ END SUBROUTINE READ_GSI_DATA !! @param[in] LSOIL Number of soil layers. !! @param[in] LENSFC Total number of points on a tile. !! @param[in] DO_NSST When true, nsst fields are read. - !! @param[in] DO_SNO_INC_JEDI When true, read in snow increment file - !! @param[in] DO_SOI_INC_JEDI When true, read in soil increment file - !! @param[in] INC_FILE When true, read from an increment file. - !! False reads from a restart file. - !! increments are on the cubed-sphere tiles !! @param[out] IS_NOAHMP When true, process for the Noah-MP LSM. !! @param[out] TSFFCS Skin Temperature. !! @param[out] SMCFCS Total volumetric soil moisture. @@ -1084,8 +1079,8 @@ END SUBROUTINE READ_GSI_DATA !! @author George Gayno NOAA/EMC !! @author Yuan Xue: add capability to read soil related increments on the !! cubed-sphere tiles directly - SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,DO_SNO_INC_JEDI,& - DO_SOI_INC_JEDI,INC_FILE,IS_NOAHMP, & + SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,IS_NOAHMP, & + FNAME_INC, & TSFFCS,SMCFCS,SWEFCS,STCFCS, & TG3FCS,ZORFCS, & CVFCS,CVBFCS,CVTFCS,ALBFCS, & @@ -1095,7 +1090,7 @@ SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,DO_SNO_INC_JEDI,& SIHFCS,SICFCS,SITFCS, & TPRCP,SRFLAG,SNDFCS, & VMNFCS,VMXFCS,SLCFCS, & - STCINC,SLCINC, & + STCINC,SLCINC,LSOIL_INCR, & SLPFCS,ABSFCS,T2M,Q2M,SLMASK, & ZSOIL,NSST) USE MPI @@ -1103,8 +1098,10 @@ SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,DO_SNO_INC_JEDI,& IMPLICIT NONE INTEGER, INTENT(IN) :: LSOIL, LENSFC - LOGICAL, INTENT(IN) :: DO_NSST, INC_FILE - LOGICAL, INTENT(IN) :: DO_SNO_INC_JEDI, DO_SOI_INC_JEDI + LOGICAL, INTENT(IN) :: DO_NSST + + CHARACTER(LEN=50), OPTIONAL, INTENT(IN) :: FNAME_INC + INTEGER, OPTIONAL, INTENT(IN) :: LSOIL_INCR LOGICAL, OPTIONAL, INTENT(OUT) :: IS_NOAHMP @@ -1132,57 +1129,65 @@ SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,DO_SNO_INC_JEDI,& TYPE(NSST_DATA), OPTIONAL :: NSST ! intent(out) will crash ! because subtypes are allocated in main. - - CHARACTER(LEN=50) :: FNBGSI CHARACTER(LEN=3) :: RANKCH + CHARACTER(LEN=50) :: FNAME + CHARACTER(LEN=1) :: K_CH + CHARACTER(LEN=10) :: INCVAR INTEGER :: ERROR, ERROR2, NCID, MYRANK INTEGER :: IDIM, JDIM, ID_DIM - INTEGER :: ID_VAR, IERR + INTEGER :: ID_VAR, IERR, TEST, K + + LOGICAL :: JEDI_INCR_FILE REAL(KIND=8), ALLOCATABLE :: DUMMY(:,:), DUMMY3D(:,:,:) + + IF (PRESENT(FNAME_INC)) THEN + FNAME = FNAME_INC + ELSE + CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYRANK, ERROR) - CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYRANK, ERROR) + WRITE(RANKCH, '(I3.3)') (MYRANK+1) - WRITE(RANKCH, '(I3.3)') (MYRANK+1) - - IF ((INC_FILE) .and. (DO_SNO_INC_JEDI)) THEN - FNBGSI = "./snow_xainc." // RANKCH - ELSEIF ((INC_FILE) .and. (DO_SOI_INC_JEDI)) THEN - FNBGSI = "./soil_xainc." // RANKCH - ELSE - FNBGSI = "./fnbgsi." // RANKCH + FNAME = "./fnbgsi." // RANKCH ENDIF PRINT* - PRINT*, "READ INPUT SFC DATA FROM: "//TRIM(FNBGSI) + PRINT*, "READ INPUT SFC DATA FROM: "//TRIM(FNAME) - ERROR=NF90_OPEN(TRIM(FNBGSI),NF90_NOWRITE,NCID) - CALL NETCDF_ERR(ERROR, 'OPENING FILE: '//TRIM(FNBGSI) ) + ERROR=NF90_OPEN(TRIM(FNAME),NF90_NOWRITE,NCID) + CALL NETCDF_ERR(ERROR, 'OPENING FILE: '//TRIM(FNAME) ) - IF ((INC_FILE) .and. (DO_SOI_INC_JEDI)) THEN +! Use the coordinate names to test whether this is +! a JEDI increment file + + TEST=NF90_INQ_DIMID(NCID, 'xaxis_1', ID_DIM) + + IF ( TEST == NF90_NOERR ) THEN + JEDI_INCR_FILE=.FALSE. - ERROR=NF90_INQ_DIMID(NCID, 'grid_xt', ID_DIM) - CALL NETCDF_ERR(ERROR, 'READING grid_xt' ) - ERROR=NF90_INQUIRE_DIMENSION(NCID,ID_DIM,LEN=IDIM) - CALL NETCDF_ERR(ERROR, 'READING grid_xt' ) + ERROR=NF90_INQ_DIMID(NCID, 'xaxis_1', ID_DIM) + CALL NETCDF_ERR(ERROR, 'READING xaxis_1' ) + ERROR=NF90_INQUIRE_DIMENSION(NCID,ID_DIM,LEN=IDIM) + CALL NETCDF_ERR(ERROR, 'READING xaxis_1' ) - ERROR=NF90_INQ_DIMID(NCID, 'grid_yt', ID_DIM) - CALL NETCDF_ERR(ERROR, 'READING grid_yt' ) - ERROR=NF90_INQUIRE_DIMENSION(NCID,ID_DIM,LEN=JDIM) - CALL NETCDF_ERR(ERROR, 'READING grid_yt' ) + ERROR=NF90_INQ_DIMID(NCID, 'yaxis_1', ID_DIM) + CALL NETCDF_ERR(ERROR, 'READING yaxis_1' ) + ERROR=NF90_INQUIRE_DIMENSION(NCID,ID_DIM,LEN=JDIM) + CALL NETCDF_ERR(ERROR, 'READING yaxis_1' ) ELSE + JEDI_INCR_FILE=.TRUE. - ERROR=NF90_INQ_DIMID(NCID, 'xaxis_1', ID_DIM) - CALL NETCDF_ERR(ERROR, 'READING xaxis_1' ) - ERROR=NF90_INQUIRE_DIMENSION(NCID,ID_DIM,LEN=IDIM) - CALL NETCDF_ERR(ERROR, 'READING xaxis_1' ) + ERROR=NF90_INQ_DIMID(NCID, 'grid_xt', ID_DIM) + CALL NETCDF_ERR(ERROR, 'READING grid_xt' ) + ERROR=NF90_INQUIRE_DIMENSION(NCID,ID_DIM,LEN=IDIM) + CALL NETCDF_ERR(ERROR, 'READING grid_xt' ) - ERROR=NF90_INQ_DIMID(NCID, 'yaxis_1', ID_DIM) - CALL NETCDF_ERR(ERROR, 'READING yaxis_1' ) - ERROR=NF90_INQUIRE_DIMENSION(NCID,ID_DIM,LEN=JDIM) - CALL NETCDF_ERR(ERROR, 'READING yaxis_1' ) + ERROR=NF90_INQ_DIMID(NCID, 'grid_yt', ID_DIM) + CALL NETCDF_ERR(ERROR, 'READING grid_yt' ) + ERROR=NF90_INQUIRE_DIMENSION(NCID,ID_DIM,LEN=JDIM) + CALL NETCDF_ERR(ERROR, 'READING grid_yt' ) ENDIF @@ -1565,7 +1570,6 @@ SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,DO_SNO_INC_JEDI,& END IF NSST_READ - DEALLOCATE(DUMMY) ALLOCATE(DUMMY3D(IDIM,JDIM,LSOIL)) @@ -1592,23 +1596,57 @@ SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,DO_SNO_INC_JEDI,& CALL NETCDF_ERR(ERROR, 'READING stc' ) STCFCS = RESHAPE(DUMMY3D, (/LENSFC,LSOIL/)) ENDIF + +! use dimension to control this one + IF (JEDI_INCR_FILE) THEN + IF (PRESENT(SLCINC)) THEN + ERROR=NF90_INQ_VARID(NCID, "soill", ID_VAR) + CALL NETCDF_ERR(ERROR, 'READING soill ID' ) + ERROR=NF90_GET_VAR(NCID, ID_VAR, dummy3d) + CALL NETCDF_ERR(ERROR, 'READING slc increments' ) + SLCINC = RESHAPE(DUMMY3D, (/LENSFC,LSOIL/)) + ENDIF + + IF (PRESENT(STCINC)) THEN + ERROR=NF90_INQ_VARID(NCID, "soilt", ID_VAR) + CALL NETCDF_ERR(ERROR, 'READING soilt ID' ) + ERROR=NF90_GET_VAR(NCID, ID_VAR, dummy3d) + CALL NETCDF_ERR(ERROR, 'READING stc increments' ) + STCINC = RESHAPE(DUMMY3D, (/LENSFC,LSOIL/)) + ENDIF + ELSE + ! THIS IS A REGRIDDED GSI FILE + IF (PRESENT(STCINC)) THEN + DO K = 1, LSOIL_INCR + WRITE(K_CH, '(I1)') K - IF (PRESENT(SLCINC)) THEN - ERROR=NF90_INQ_VARID(NCID, "soill", ID_VAR) - CALL NETCDF_ERR(ERROR, 'READING soill ID' ) - ERROR=NF90_GET_VAR(NCID, ID_VAR, dummy3d) - CALL NETCDF_ERR(ERROR, 'READING slc increments' ) - SLCINC = RESHAPE(DUMMY3D, (/LENSFC,LSOIL/)) - ENDIF + INCVAR = "soilt"//K_CH//"_inc" + print *, "reading", INCVAR + ERROR=NF90_INQ_VARID(NCID,trim(INCVAR), ID_VAR) + CALL NETCDF_ERR(ERROR, 'READING soilt*_inc ID') + ERROR=NF90_GET_VAR(NCID, ID_VAR, dummy) + CALL NETCDF_ERR(ERROR, 'READING soilt*_inc increments') - IF (PRESENT(STCINC)) THEN - ERROR=NF90_INQ_VARID(NCID, "soilt", ID_VAR) - CALL NETCDF_ERR(ERROR, 'READING soilt ID' ) - ERROR=NF90_GET_VAR(NCID, ID_VAR, dummy3d) - CALL NETCDF_ERR(ERROR, 'READING stc increments' ) - STCINC = RESHAPE(DUMMY3D, (/LENSFC,LSOIL/)) - ENDIF + STCINC(:,K) = RESHAPE(dummy, (/LENSFC/)) + ENDDO + ENDIF + IF (PRESENT(SLCINC)) THEN + DO K = 1, LSOIL_INCR + WRITE(K_CH, '(I1)') K + + INCVAR = "slc"//K_CH//"_inc" + print *, "reading", trim(INCVAR) + ERROR=NF90_INQ_VARID(NCID, trim(INCVAR), ID_VAR) + CALL NETCDF_ERR(ERROR, 'READING slc*_inc ID') + ERROR=NF90_GET_VAR(NCID, ID_VAR, dummy) + CALL NETCDF_ERR(ERROR, 'READING slc*_inc increments') + SLCINC(:,K) = RESHAPE(dummy, (/LENSFC/)) + ENDDO + ENDIF + ENDIF + + DEALLOCATE(DUMMY) DEALLOCATE(DUMMY3D) ! cloud fields not in warm restart files. set to zero? diff --git a/tests/global_cycle/ftst_read_increments.F90 b/tests/global_cycle/ftst_read_increments.F90 index 151673508..4175456ed 100644 --- a/tests/global_cycle/ftst_read_increments.F90 +++ b/tests/global_cycle/ftst_read_increments.F90 @@ -58,6 +58,9 @@ program read_increments real:: slc_inc_expected_values_tile5(NUM_VALUES) real:: slc_inc_expected_values_tile6(NUM_VALUES) + CHARACTER(LEN=50) :: FNAME_INC + CHARACTER(LEN=3) :: RANKCH + !expected values were extracted from MATLAB, which directly reads in xainc file !each tile is examined separately here data stc_inc_expected_values_tile1 / 3.1428, 2.9983, 2.9786, 2.9634 / @@ -94,7 +97,10 @@ program read_increments call rename("soil_sfcincr_jedi.005", "soil_xainc.005") call rename("soil_sfcincr_jedi.006", "soil_xainc.006") - call read_data(lsoil,lensfc,.false.,.false.,.true.,.true.,STCINC=STCINC,SLCINC=SLCINC) + WRITE(RANKCH, '(I3.3)') (MY_RANK+1) + FNAME_INC = "soil_xainc." // RANKCH + + call read_data(lsoil,lensfc,.false.,FNAME_INC=FNAME_INC,STCINC=STCINC,SLCINC=SLCINC) if (my_rank .eq. 0) then do l = 1,4 diff --git a/ush/global_cycle.sh b/ush/global_cycle.sh index e28690bd8..4d67163de 100755 --- a/ush/global_cycle.sh +++ b/ush/global_cycle.sh @@ -140,10 +140,12 @@ # 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 routine to update snow/soil states with increment files -# DO_SOI_INC_GSI Call routine to update soil states with gsi(gaussian) increment files -# DO_SNO_INC_JEDI Call routine to update snow states with jedi increment files -# DO_SOI_INC_JEDI Call routine to update soil states with jedi increment files +# 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 +# grid inside gcycle +# # zsea1/zsea2 When running with NST model, this is the lower/upper bound # of depth of sea temperature. In whole mm. # MAX_TASKS_CY Normally, program should be run with a number of mpi tasks @@ -255,6 +257,7 @@ LATB_CASE=$((2*CRES)) DELTSFC=${DELTSFC:-0} LSOIL=${LSOIL:-4} +LSOIL_INCR=${LSOIL_INCR:-2} FSMCL2=${FSMCL2:-60} FSLPL=${FSLPL:-99999.} FSOTL=${FSOTL:-99999.} @@ -267,9 +270,12 @@ use_ufo=${use_ufo:-.true.} DONST=${DONST:-"NO"} DO_SFCCYCLE=${DO_SFCCYCLE:-.true.} DO_LNDINC=${DO_LNDINC:-.false.} -DO_SOI_INC_GSI=${DO_SOI_INC_GSI:-.false.} -DO_SNO_INC_JEDI=${DO_SNO_INC_JEDI:-.false.} -DO_SOI_INC_JEDI=${DO_SOI_INC_JEDI:-.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." +fi +GCYCLE_INTERP_LNDINC=${GCYCLE_INTERP_LNDINC:-.false.} zsea1=${zsea1:-0} zsea2=${zsea2:-0} MAX_TASKS_CY=${MAX_TASKS_CY:-99999} @@ -386,13 +392,14 @@ cat << EOF > fort.36 / EOF + cat << EOF > fort.37 &NAMSFCD NST_FILE="$NST_FILE", - DO_SOI_INC_GSI=$DO_SOI_INC_GSI, - DO_SNO_INC_JEDI=$DO_SNO_INC_JEDI, - DO_SOI_INC_JEDI=$DO_SOI_INC_JEDI, - lsoil_incr=3, + DO_SOI_INC=$DO_SOI_INC, + DO_SNO_INC=$DO_SNO_INC, + INTERP_LNDINC=$GCYCLE_INTERP_LNDINC, + lsoil_incr=$LSOIL_INCR, / EOF diff --git a/ush/global_cycle_driver.sh b/ush/global_cycle_driver.sh index a22915d53..7f1fccf66 100755 --- a/ush/global_cycle_driver.sh +++ b/ush/global_cycle_driver.sh @@ -53,9 +53,10 @@ fi export DO_SFCCYLE=${DO_SFCCYCLE:-".true."} export DO_LNDINC=${DO_LNDINC:-".false."} -export DO_SOI_INC_GSI=${DO_SOI_INC_GSI:-".false."} -export DO_SNO_INC_JEDI=${DO_SNO_INC_JEDI:-".false."} -export DO_SOI_INC_JEDI=${DO_SOI_INC_JEDI:-".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 FRAC_GRID=${FRAC_GRID:-".false."} CRES=$(echo $CASE | cut -c 2-) @@ -95,15 +96,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_JEDI" == ".true." ]] ; then + if [[ "$DO_SNO_INC" == ".true." ]] ; then ln -fs $COMIN/$PDY.${cyc}0000.xainc.tile${n}.nc $DATA/snow_xainc.00$n fi - if [[ "$DO_SOI_INC_JEDI" == ".true." ]] ; then - ln -fs $COMIN/soil_sfcincr_jedi.00$n $DATA/soil_xainc.00$n + if [ "$DO_SOI_INC" == ".true." ] && [ "$GCYCLE_INTERP_LNDINC" == ".false." ] ; then + ln -fs $COMIN/${SOI_INC_FNAME}.00${n} $DATA/soil_xainc.00$n fi - if [[ "$DO_SOI_INC_GSI" == ".true." ]] ; then + if [ "$DO_SOI_INC" == ".true." ] && [ "$GCYCLE_INTERP_LNDINC" == ".true." ] ; then ln -fs $COMIN/sfcincr_gsi.00$n $DATA/sfcincr_gsi.00$n fi done