diff --git a/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh b/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh deleted file mode 100755 index 34c5c5980..000000000 --- a/reg_tests/global_cycle/C192.gsi_lndincsoilnoahmp.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/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 GCYCLE_DO_SOILINCR=".true." -export GCYCLE_INTERP_LANDINCR=".true." -export LSOIL_INCR=3 - -export VERBOSE=YES -export CYCLVARS=FSNOL=-2.,FSNOS=99999., - -export PGMOUT='out' -export PGMERR='err' - -$HOMEgfs/ush/global_cycle_driver.sh - -iret=$? - -cd $DATA - -cat $PGMOUT -cat $PGMERR - -if [ $iret -ne 0 ]; then - set +x - echo "<<< C192 GSI based LANDINC SOIL NOAHMP CYCLE TEST FAILED. >>>" - exit $iret -fi - -test_failed=0 - -for files in *tile*.nc -do - if [ -f $files ]; then - echo CHECK $files - $NCCMP -dmfqS $files $HOMEreg/baseline_data/c192.gsi_lndincsoilnoahmp/$files - iret=$? - if [ $iret -ne 0 ]; then - test_failed=1 - fi - fi -done - -for files in *gaussian_interp* -do - if [ -f $files ]; then - echo CHECK $files - $NCCMP -dmfqS $files $HOMEreg/baseline_data/c192.gsi_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 based LANDINC SOIL-NOAHMP CYCLE TEST FAILED. >>>" - echo "**********************************************" - if [ "$UPDATE_BASELINE" = "TRUE" ]; then - $HOMEgfs/reg_tests/update_baseline.sh $HOMEreg "c192.gsi_lndincsoilnoahmp" $commit_num - fi -else - echo - echo "*****************************************" - echo "<<< C192 GSI based LANDINC SOIL-NOAHMP CYCLE TEST PASSED. >>>" - echo "*****************************************" -fi - -exit diff --git a/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh b/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh index 54721f93c..8c79fc891 100755 --- a/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh +++ b/reg_tests/global_cycle/C192.gsitile_lndincsoilnoahmp.sh @@ -38,7 +38,6 @@ export use_ufo=.true. export DO_SFCCYCLE=".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 c1a196c11..5ecdb768a 100755 --- a/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh +++ b/reg_tests/global_cycle/C192.jedi_lndincsoilnoahmp.sh @@ -40,7 +40,6 @@ export use_ufo=.true. export DO_SFCCYCLE=".FALSE." export GCYCLE_DO_SOILINCR=".true." -export GCYCLE_INTERP_LANDINCR=".false." export SOILINCR_FNAME="soil_sfcincr_jedi" export LSOIL_INCR=3 diff --git a/reg_tests/global_cycle/C768.lndincsnow.sh b/reg_tests/global_cycle/C768.lndincsnow.sh index 389b849ea..b7d374b72 100755 --- a/reg_tests/global_cycle/C768.lndincsnow.sh +++ b/reg_tests/global_cycle/C768.lndincsnow.sh @@ -32,7 +32,6 @@ export FNACNA=$COMIN/gdas.t00z.seaice.5min.blend.grb export NST_FILE=$COMIN/gdas.t00z.dtfanl.nc export GCYCLE_DO_SNOWINCR=.true. # must be lower-case. -export GCYCLE_INTERP_LANDINCR=.false. export JCAP=1534 export LONB=3072 export LATB=1536 diff --git a/reg_tests/global_cycle/driver.hercules.sh b/reg_tests/global_cycle/driver.hercules.sh index 23ef21fbf..df3824416 100755 --- a/reg_tests/global_cycle/driver.hercules.sh +++ b/reg_tests/global_cycle/driver.hercules.sh @@ -64,37 +64,31 @@ TEST1=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_C LOG_FILE=consistency.log02 export DATA="${DATA_DIR}/test2" export COMOUT=$DATA -TEST2=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c192.gsi_lndincsoilnoahmp \ - -o $LOG_FILE -e $LOG_FILE ./C192.gsi_lndincsoilnoahmp.sh) +TEST2=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c768.lndincsnow \ + -o $LOG_FILE -e $LOG_FILE ./C768.lndincsnow.sh) LOG_FILE=consistency.log03 export DATA="${DATA_DIR}/test3" export COMOUT=$DATA -TEST3=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c768.lndincsnow \ - -o $LOG_FILE -e $LOG_FILE ./C768.lndincsnow.sh) +TEST3=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c48.noahmp.coupled \ + -o $LOG_FILE -e $LOG_FILE ./C48.noahmp.coupled.sh) LOG_FILE=consistency.log04 export DATA="${DATA_DIR}/test4" export COMOUT=$DATA -TEST4=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c48.noahmp.coupled \ - -o $LOG_FILE -e $LOG_FILE ./C48.noahmp.coupled.sh) +TEST4=$(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.log05 export DATA="${DATA_DIR}/test5" 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 \ +TEST5=$(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:$TEST6 << EOF + afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << 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 acfe7cac8..3adf50aa9 100755 --- a/reg_tests/global_cycle/driver.jet.sh +++ b/reg_tests/global_cycle/driver.jet.sh @@ -64,37 +64,31 @@ TEST1=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_C LOG_FILE=consistency.log02 export DATA="${DATA_DIR}/test2" export COMOUT=$DATA -TEST2=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c192.gsi_lndincsoilnoahmp \ - --partition=xjet -o $LOG_FILE -e $LOG_FILE ./C192.gsi_lndincsoilnoahmp.sh) +TEST2=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c768.lndincsnow \ + --partition=xjet -o $LOG_FILE -e $LOG_FILE ./C768.lndincsnow.sh) LOG_FILE=consistency.log03 export DATA="${DATA_DIR}/test3" export COMOUT=$DATA -TEST3=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c768.lndincsnow \ - --partition=xjet -o $LOG_FILE -e $LOG_FILE ./C768.lndincsnow.sh) +TEST3=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c48.noahmp.coupled \ + --partition=xjet -o $LOG_FILE -e $LOG_FILE ./C48.noahmp.coupled.sh) LOG_FILE=consistency.log04 export DATA="${DATA_DIR}/test4" export COMOUT=$DATA -TEST4=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c48.noahmp.coupled \ - --partition=xjet -o $LOG_FILE -e $LOG_FILE ./C48.noahmp.coupled.sh) +TEST4=$(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.log05 export DATA="${DATA_DIR}/test5" 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 \ +TEST5=$(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:$TEST6 << EOF + afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << 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 871e9ae5d..48786c965 100755 --- a/reg_tests/global_cycle/driver.orion.sh +++ b/reg_tests/global_cycle/driver.orion.sh @@ -64,37 +64,31 @@ TEST1=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_C LOG_FILE=consistency.log02 export DATA="${DATA_DIR}/test2" export COMOUT=$DATA -TEST2=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c192.gsi_lndincsoilnoahmp \ - -o $LOG_FILE -e $LOG_FILE ./C192.gsi_lndincsoilnoahmp.sh) +TEST2=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c768.lndincsnow \ + -o $LOG_FILE -e $LOG_FILE ./C768.lndincsnow.sh) LOG_FILE=consistency.log03 export DATA="${DATA_DIR}/test3" export COMOUT=$DATA -TEST3=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c768.lndincsnow \ - -o $LOG_FILE -e $LOG_FILE ./C768.lndincsnow.sh) +TEST3=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c48.noahmp.coupled \ + -o $LOG_FILE -e $LOG_FILE ./C48.noahmp.coupled.sh) LOG_FILE=consistency.log04 export DATA="${DATA_DIR}/test4" export COMOUT=$DATA -TEST4=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c48.noahmp.coupled \ - -o $LOG_FILE -e $LOG_FILE ./C48.noahmp.coupled.sh) +TEST4=$(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.log05 export DATA="${DATA_DIR}/test5" 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 \ +TEST5=$(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:$TEST6 << EOF + afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << EOF #!/bin/bash grep -a '<<<' ${LOG_FILE}* > summary.log EOF diff --git a/reg_tests/global_cycle/driver.ursa.sh b/reg_tests/global_cycle/driver.ursa.sh index 2ed6a5157..6f6c3cd58 100755 --- a/reg_tests/global_cycle/driver.ursa.sh +++ b/reg_tests/global_cycle/driver.ursa.sh @@ -64,37 +64,31 @@ TEST1=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_C LOG_FILE=consistency.log02 export DATA="${DATA_DIR}/test2" export COMOUT=$DATA -TEST2=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c192.gsi_lndincsoilnoahmp \ - -o $LOG_FILE -e $LOG_FILE ./C192.gsi_lndincsoilnoahmp.sh) +TEST2=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c768.lndincsnow \ + -o $LOG_FILE -e $LOG_FILE ./C768.lndincsnow.sh) LOG_FILE=consistency.log03 export DATA="${DATA_DIR}/test3" export COMOUT=$DATA -TEST3=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c768.lndincsnow \ - -o $LOG_FILE -e $LOG_FILE ./C768.lndincsnow.sh) +TEST3=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c48.noahmp.coupled \ + -o $LOG_FILE -e $LOG_FILE ./C48.noahmp.coupled.sh) LOG_FILE=consistency.log04 export DATA="${DATA_DIR}/test4" export COMOUT=$DATA -TEST4=$(sbatch --parsable --ntasks-per-node=6 --nodes=1 -t 0:05:00 -A $PROJECT_CODE -q $QUEUE -J c48.noahmp.coupled \ - -o $LOG_FILE -e $LOG_FILE ./C48.noahmp.coupled.sh) +TEST4=$(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.log05 export DATA="${DATA_DIR}/test5" 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 \ +TEST5=$(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:$TEST6 << EOF + afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << 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 76184ed8f..3494247d1 100755 --- a/reg_tests/global_cycle/driver.wcoss2.sh +++ b/reg_tests/global_cycle/driver.wcoss2.sh @@ -68,30 +68,25 @@ TEST1=$(qsub -V -o ${LOG_FILE}01 -e ${LOG_FILE}01 -q $QUEUE -A $PROJECT_CODE -l export DATA="${DATA_DIR}/test2" export COMOUT=$DATA TEST2=$(qsub -V -o ${LOG_FILE}02 -e ${LOG_FILE}02 -q $QUEUE -A $PROJECT_CODE -l walltime=00:05:00 \ - -N c192.gsi_lndincsoilnoahmp -l select=1:ncpus=12:mem=8GB $PWD/C192.gsi_lndincsoilnoahmp.sh) + -N c768.lndincsnow -l select=1:ncpus=12:mem=8GB $PWD/C768.lndincsnow.sh) export DATA="${DATA_DIR}/test3" export COMOUT=$DATA TEST3=$(qsub -V -o ${LOG_FILE}03 -e ${LOG_FILE}03 -q $QUEUE -A $PROJECT_CODE -l walltime=00:05:00 \ - -N c768.lndincsnow -l select=1:ncpus=12:mem=8GB $PWD/C768.lndincsnow.sh) + -N c48.noahmp.coupled -l select=1:ncpus=12:mem=8GB $PWD/C48.noahmp.coupled.sh) export DATA="${DATA_DIR}/test4" export COMOUT=$DATA TEST4=$(qsub -V -o ${LOG_FILE}04 -e ${LOG_FILE}04 -q $QUEUE -A $PROJECT_CODE -l walltime=00:05:00 \ - -N c48.noahmp.coupled -l select=1:ncpus=12:mem=8GB $PWD/C48.noahmp.coupled.sh) + -N c192.jedi_lndincsoilnoahmp -l select=1:ncpus=12:mem=8GB $PWD/C192.jedi_lndincsoilnoahmp.sh) export DATA="${DATA_DIR}/test5" 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:$TEST6 << EOF + -N cycle_summary -l select=1:ncpus=1:mem=100MB -W depend=afterok:$TEST1:$TEST2:$TEST3:$TEST4:$TEST5 << 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 84d2eaca8..97a0e9715 100644 --- a/sorc/global_cycle.fd/cycle.F90 +++ b/sorc/global_cycle.fd/cycle.F90 @@ -26,25 +26,20 @@ !! used to flag points that flipped from ice to open water. !! To invoke this option, set DONST=.true. and NST_FILE="NULL". !! -!! INPUT FILES: +!! INPUT/OUTPUT FILES: !! - fngrid.$NNN The cubed-sphere grid file (contains !! grid point latitude and longitdue). !! - fnorog.$NNN The cubed-sphere orography file (contains !! land mask and orography). -!! - fnbgsi.$NNN The cubed-sphere input sfc/nsst restart -!! file. +!! - sfc_data_cycle.$NNN The cubed-sphere sfc/nsst restart file +!! (read and written in place). !! - $NST_FILE Gaussian GSI file which contains NSST !! TREF increments -!! - $sfcincr_gsi.$NNN Gaussian GSI file which contains soil state -!! increments !! - 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. -!! !! NOTE: $NNN corresponds to (mpi rank + 1) !! !! NAMELIST VARIABLE DEFINITIONS: @@ -67,8 +62,6 @@ !! -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_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. !! Extra cautions are needed on layer#3 across permafrost regions due to @@ -132,10 +125,11 @@ PROGRAM SFC_DRV NUM_THREADS = NUM_PARTHDS() - PRINT* - PRINT*,"STARTING CYCLE PROGRAM ON RANK ", MYRANK - PRINT*,"RUNNING WITH ", NPROCS, "TASKS" - PRINT*,"AND WITH ", NUM_THREADS, " THREADS." + if (myrank==0) then + PRINT* + PRINT*,"RUNNING WITH ", NPROCS, "TASKS" + PRINT*,"AND WITH ", NUM_THREADS, " THREADS." + endif USE_UFO = .FALSE. DONST = "NO" @@ -144,9 +138,6 @@ PROGRAM SFC_DRV FRAC_GRID = .FALSE. COUPLED = .FALSE. - PRINT* - PRINT*,"READ NAMCYC NAMELIST." - CALL BAOPENR(36, "fort.36", IERR) IF (IERR /= 0) THEN PRINT*,'FATAL ERROR READING FORT.36 NAMELIST. IERR: ', IERR @@ -160,8 +151,6 @@ PROGRAM SFC_DRV !IF (MYRANK==0) WRITE(6,NAMCYC) IF (MAX_TASKS < 99999 .AND. MYRANK > (MAX_TASKS - 1)) THEN - PRINT*,"USER SPECIFIED MAX NUMBER OF TASKS: ", MAX_TASKS - PRINT*,"WILL NOT RUN CYCLE PROGRAM ON RANK: ", MYRANK GOTO 333 ENDIF @@ -176,7 +165,6 @@ PROGRAM SFC_DRV DO_NSST=.FALSE. ENDIF - PRINT* IF (MYRANK==0) PRINT*,"LUGB,IDIM,JDIM,ISOT,IVEGSRC,LSOIL,DELTSFC,IY,IM,ID,IH,FH: ", & LUGB,IDIM,JDIM,ISOT,IVEGSRC,LSOIL,DELTSFC,IY,IM,ID,IH,FH IF (MYRANK==0) PRINT*,"DO_LANDINCR,FRAC_GRID,COUPLED: ", DO_LANDINCR,FRAC_GRID,COUPLED @@ -185,10 +173,6 @@ PROGRAM SFC_DRV IY,IM,ID,IH,FH,IALB, & USE_UFO,DO_NSST,DO_SFCCYCLE,DO_LANDINCR, & FRAC_GRID,COUPLED,ZSEA1,ZSEA2,ISOT,IVEGSRC,MYRANK) - - PRINT* - PRINT*,'CYCLE PROGRAM COMPLETED NORMALLY ON RANK: ', MYRANK - 333 CONTINUE CALL MPI_BARRIER(MPI_COMM_WORLD, IERR) @@ -398,22 +382,22 @@ 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_SOILINCR, INTERP_LANDINCR, DO_SNOWINCR + LOGICAL :: FILE_EXISTS, DO_SOILINCR, DO_SNOWINCR CHARACTER(LEN=3) :: RANKCH INTEGER :: lsoil_incr + INTEGER :: NCID ! NetCDF file ID for sfc_data_cycle file !-------------------------------------------------------------------------------- ! NST_FILE is the path/name of the gaussian GSI file which contains NSST ! increments. !-------------------------------------------------------------------------------- - NAMELIST/NAMSFCD/ NST_FILE, lsoil_incr, DO_SNOWINCR, DO_SOILINCR, INTERP_LANDINCR + NAMELIST/NAMSFCD/ NST_FILE, lsoil_incr, DO_SNOWINCR, DO_SOILINCR DATA NST_FILE/'NULL'/ DO_SNOWINCR = .FALSE. DO_SOILINCR = .FALSE. - INTERP_LANDINCR = .FALSE. lsoil_incr = 3 !default SIG1T = 0.0 ! Not a dead start! @@ -431,8 +415,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & CALL MPI_ABORT(MPI_COMM_WORLD, 31, IERR) ENDIF - PRINT* - PRINT*,'IN ROUTINE SFCDRV,IDIM=',IDIM,'JDIM=',JDIM,'FH=',FH + IF (MYRANK==0) PRINT*,'IN ROUTINE SFCDRV,IDIM=',IDIM,'JDIM=',JDIM,'FH=',FH !-------------------------------------------------------------------------------- ! READ THE OROGRAPHY AND GRID POINT LAT/LONS FOR THE CUBED-SPHERE TILE. @@ -443,7 +426,6 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ALLOCATE(LANDFRAC(LENSFC)) ALLOCATE(LAKEFRAC(LENSFC)) IF(FRAC_GRID .OR. COUPLED) THEN - PRINT*,'- RUNNING WITH FRACTIONAL GRID.' CALL READ_LAT_LON_OROG(RLA,RLO,OROG,OROG_UF,TILE_NUM,IDIM,JDIM,LENSFC,& LANDFRAC=LANDFRAC,LAKEFRAC=LAKEFRAC) ELSE @@ -465,8 +447,6 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & J_INDEX = RESHAPE(IDUM, (/LENSFC/) ) IF (DO_NSST) THEN - PRINT* - PRINT*,"WILL PROCESS NSST RECORDS." ALLOCATE(NSST%C_0(LENSFC)) ALLOCATE(NSST%C_D(LENSFC)) ALLOCATE(NSST%D_CONV(LENSFC)) @@ -501,8 +481,6 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & IF (DO_LANDINCR) THEN ! identify variables to be updated, and allocate arrays. 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 @@ -511,8 +489,6 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ! 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" ALLOCATE(SND_BCK(LENSFC), SND_INC(LENSFC), SWE_BCK(LENSFC)) ENDIF ! set-up land mask info @@ -528,7 +504,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,IS_NOAHMP=IS_NOAHMP, & + CALL READ_DATA(LSOIL,LENSFC,DO_NSST,NCID_OUT=NCID,IS_NOAHMP=IS_NOAHMP, & TSFFCS=TSFFCS,SMCFCS=SMCFCS, & SWEFCS=SWEFCS,STCFCS=STCFCS,TG3FCS=TG3FCS,ZORFCS=ZORFCS, & CVFCS=CVFCS, CVBFCS=CVBFCS,CVTFCS=CVTFCS,ALBFCS=ALBFCS, & @@ -545,7 +521,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & call MPI_ABORT(MPI_COMM_WORLD, 18, IERR) ENDIF - IF ( (IS_NOAHMP .OR. INTERP_LANDINCR) .AND. DO_SNOWINCR) THEN + IF ( IS_NOAHMP .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 @@ -556,10 +532,7 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & LSM=LSM_NOAH ENDIF - IF (USE_UFO) THEN - PRINT* - PRINT*,'USE UNFILTERED OROGRAPHY.' - ELSE + IF (.NOT. USE_UFO) THEN OROG_UF = 0.0 ENDIF @@ -574,13 +547,9 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & IF (DO_NSST) THEN IF (.NOT. DO_SFCCYCLE ) THEN - PRINT* - PRINT*,"FIRST GUESS MASK ADJUSTED BY IFD RECORD" SLIFCS_FG = SLIFCS WHERE(NINT(NSST%IFD) == 3) SLIFCS_FG = 2.0 ELSE - PRINT* - PRINT*,"SAVE FIRST GUESS MASK" SLIFCS_FG = SLIFCS ENDIF ENDIF @@ -654,8 +623,6 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & SOCFCS=0 ! Soil color. Not used yet. num_threads = num_parthds() - PRINT* - PRINT*,"CALL SFCCYCLE TO UPDATE SURFACE FIELDS." CALL SFCCYCLE(LUGB,LENSFC,LSOIL,SIG1T,DELTSFC, & IY,IM,ID,IH,FH,RLA,RLO, & SLMASKL,SLMASKW, OROG, OROG_UF, USE_UFO, DO_NSST, & @@ -680,8 +647,6 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & IF (DO_NSST) THEN IF (NST_FILE == "NULL") THEN - PRINT* - PRINT*,"NO GSI FILE. ADJUST IFD FOR FORMER ICE POINTS." DO I = 1, LENSFC IF (SICFCS_FG(I) > 0.0 .AND. SICFCS(I) == 0) THEN NSST%IFD(I) = 3.0 @@ -689,8 +654,6 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ENDDO NSST%TFINC = 0.0 ELSE - PRINT* - PRINT*,"ADJUST TREF FROM GSI INCREMENT" ! ! Get tf climatology at the time ! @@ -746,20 +709,20 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ! SNOW INCREMENTS ! do snow first, as temperature updates will use snow analaysis 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 - - ! make sure incr. files exist - WRITE(RANKCH, '(I3.3)') (MYRANK+1) - FNAME_INC = "snow_xainc." // RANKCH - - 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(FNAME_INC) - call MPI_ABORT(MPI_COMM_WORLD, 10, IERR) - ENDIF + ! 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) + FNAME_INC = "snow_xainc." // RANKCH + + 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(FNAME_INC) + call MPI_ABORT(MPI_COMM_WORLD, 10, IERR) + ENDIF !-------------------------------------------------------------------------------- ! read increments in @@ -801,59 +764,24 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & ! SOIL INCREMENTS IF ( DO_SOILINCR ) THEN - IF ( INTERP_LANDINCR ) 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 READ_GSI_DATA(FNAME_INC, 'LND', LSOIL=LSOIL) - - !-------------------------------------------------------------------------------- - ! interpolate increments to cubed sphere tiles - !-------------------------------------------------------------------------------- - CALL GAUSSIAN_TO_FV3_INTERP(LSOIL_INCR,RLA,RLO,& - STCINC,SLCINC,LANDINC_MASK,LENSFC,LSOIL,IDIM,JDIM,LSM,MYRANK) - - !-------------------------------------------------------------------------------- - ! save interpolated increments - !-------------------------------------------------------------------------------- - - CALL WRITE_DATA(LENSFC,IDIM,JDIM,LSOIL,DO_NSST,.true.,NSST, & - STCINC=STCINC,SLCINC=SLCINC) - - ELSE ! if interp_landincr - - !-------------------------------------------------------------------------------- - ! read increments in - !-------------------------------------------------------------------------------- - ! make sure incr. files exist - WRITE(RANKCH, '(I3.3)') (MYRANK+1) - FNAME_INC = "soil_xainc." // RANKCH - - 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 + !-------------------------------------------------------------------------------- + ! 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.,FNAME_INC=FNAME_INC, & - LSOIL_INCR=LSOIL_INCR, 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 soil increments + CALL READ_DATA(LSOIL,LENSFC,.false.,FNAME_INC=FNAME_INC, & + LSOIL_INCR=LSOIL_INCR, IS_NOAHMP=IS_NOAHMP, & + STCINC=STCINC,SLCINC=SLCINC) !-------------------------------------------------------------------------------- ! add increments to state vars @@ -894,20 +822,20 @@ SUBROUTINE SFCDRV(LUGB, IDIM,JDIM,LENSFC,LSOIL,DELTSFC, & IF (DO_LANDINCR) THEN - CALL WRITE_DATA(LENSFC,IDIM,JDIM,LSOIL,DO_NSST,.false.,NSST,VEGFCS=VEGFCS, & + CALL WRITE_DATA(NCID,LENSFC,IDIM,JDIM,LSOIL,DO_NSST,NSST,VEGFCS=VEGFCS, & SWEFCS=SWEFCS,SWDFCS=SNDFCS,SLCFCS=SLCFCS,SMCFCS=SMCFCS,STCFCS=STCFCS,& SICFCS=SICFCS,SIHFCS=SIHFCS) ELSEIF (LSM==LSM_NOAHMP .OR. COUPLED) THEN - CALL WRITE_DATA(LENSFC,IDIM,JDIM,LSOIL,DO_NSST,.false.,NSST,SLIFCS=SLIFCS,VEGFCS=VEGFCS, & + CALL WRITE_DATA(NCID,LENSFC,IDIM,JDIM,LSOIL,.true.,NSST,SLIFCS=SLIFCS,VEGFCS=VEGFCS, & SLCFCS=SLCFCS,SMCFCS=SMCFCS,STCFCS=STCFCS,& SICFCS=SICFCS,SIHFCS=SIHFCS,SITFCS=SITFCS) ELSEIF (LSM==LSM_NOAH) THEN - CALL WRITE_DATA(LENSFC,IDIM,JDIM,LSOIL, & - DO_NSST,.false.,NSST,SLIFCS=SLIFCS,TSFFCS=TSFFCS,VEGFCS=VEGFCS, & + CALL WRITE_DATA(NCID,LENSFC,IDIM,JDIM,LSOIL, & + DO_NSST,NSST,SLIFCS=SLIFCS,TSFFCS=TSFFCS,VEGFCS=VEGFCS, & SWEFCS=SWEFCS,TG3FCS=TG3FCS,ZORFCS=ZORFCS, & ALBFCS=ALBFCS,ALFFCS=ALFFCS,CNPFCS=CNPFCS, & F10M=F10M,T2M=T2M,Q2M=Q2M,VETFCS=VETFCS, & @@ -1053,8 +981,6 @@ SUBROUTINE ADJUST_NSST(RLA,RLO,SLMSK_TILE,SLMSK_FG_TILE,SKINT_TILE,& KGDS_GAUS(12) = 255 ! OCT 29 - RESERVED KGDS_GAUS(20) = 255 ! OCT 5 - NOT USED, SET TO 255 - PRINT* - PRINT*,'ADJUST NSST USING GSI INCREMENTS ON GAUSSIAN GRID' !---------------------------------------------------------------------- ! CALL GDSWZD TO COMPUTE THE LAT/LON OF EACH GSI GAUSSIAN GRID POINT. @@ -1125,10 +1051,6 @@ SUBROUTINE ADJUST_NSST(RLA,RLO,SLMSK_TILE,SLMSK_FG_TILE,SKINT_TILE,& GAUS_RES_KM = 360.0 / IDIM_GAUS * 111.0 MAX_SEARCH = CEILING(500.0/GAUS_RES_KM) - PRINT* - PRINT*,'MAXIMUM SEARCH IS ',MAX_SEARCH, ' GAUSSIAN POINTS.' - PRINT* - ! ! Initialize variables for counts statitics to be zeros ! @@ -1397,14 +1319,6 @@ SUBROUTINE ADJUST_NSST(RLA,RLO,SLMSK_TILE,SLMSK_FG_TILE,SKINT_TILE,& ENDDO IJ_LOOP - write(*,'(a)') 'statistics of grids number processed for tile : ' - write(*,'(a,I8)') ' nintp = ',nintp - write(*,'(a,4I8)') 'nset_thaw,nset_thaw_s,nset_thaw_i,nset_thaw_c =',nset_thaw,nset_thaw_s,nset_thaw_i,nset_thaw_c - write(*,'(a,I8)') ' nsearched = ',nsearched - write(*,'(a,3I6)') ' nfill,nfill_tice,nfill_clm = ',nfill,nfill_tice,nfill_clm - write(*,'(a,I8)') ' nice = ',nice - write(*,'(a,I8)') ' nland = ',nland - DEALLOCATE(ID1, ID2, JDC, S2C, mask_tile, mask_fg_tile) END SUBROUTINE ADJUST_NSST @@ -1702,7 +1616,6 @@ subroutine tf_thaw_set(tf_ij,mask_ij,itile,jtile,tice,tclm,tf_thaw,nx,ny, & if (mask(iii,jjj) == 0) then tf_thaw = tf(iii,jjj) nset_thaw_s = nset_thaw_s + 1 - write(*,'(a,I4,2F9.3)') 'nset_thaw_s,tf(iii,jjj),tclm : ',nset_thaw_s,tf(iii,jjj),tclm go to 100 endif ! tile mask is open water @@ -1718,11 +1631,9 @@ subroutine tf_thaw_set(tf_ij,mask_ij,itile,jtile,tice,tclm,tf_thaw,nx,ny, & if (is_ice) then tf_thaw = tice nset_thaw_i = nset_thaw_i + 1 - write(*,'(a,I4,F9.3)') 'nset_thaw_i,tf_ice : ',nset_thaw_i,tice else tf_thaw = 0.8*tice+0.2*tclm nset_thaw_c = nset_thaw_c + 1 - write(*,'(a,I4,2F9.3)') 'nset_thaw_c,tf_ice,tclm : ',nset_thaw_c,tice,tclm endif endif @@ -1882,8 +1793,6 @@ subroutine get_tf_clm_ta(tf_clm_ta,tf_clm_trend,xlats,xlons,nlat,nlon,mon1,mon2, ! tf_clm_trend(:,:) = (tf_clm2(:,:)-tf_clm1(:,:))/120.0 - write(*,'(a,2f9.3)') 'tf_clm_ta, min, max : ',minval(tf_clm_ta),maxval(tf_clm_ta) - write(*,'(a,2f9.3)') 'tf_clm_trend, min, max : ',minval(tf_clm_trend),maxval(tf_clm_trend) end subroutine get_tf_clm_ta !> Get salinity climatology at the valid time on the target grid. @@ -1986,7 +1895,6 @@ subroutine get_sal_clm_ta(sal_clm_ta,xlats,xlons,nlat,nlon,mon1,mon2,wei1,wei2) ! sal_clim at the analysis time ! sal_clm_ta(:,:) = wei1*sal_clm1(:,:)+wei2*sal_clm2(:,:) - write(*,'(a,2f9.3)') 'sal_clm_ta, min, max : ',minval(sal_clm_ta),maxval(sal_clm_ta) end subroutine get_sal_clm_ta !> Interpolate lon/lat grid data to the fv3 native grid (tf_lalo => tf_tile). Does not @@ -2031,9 +1939,6 @@ subroutine intp_tile(tf_lalo,dlats_lalo,dlons_lalo,jdim_lalo,idim_lalo, & integer, allocatable, dimension(:,:) :: id1,id2,jdc real, allocatable, dimension(:,:,:) :: agrid,s2c - print* - print*,'interpolate from lat/lon grids to any one grid with known lat/lon' - xlats_lalo = dlats_lalo*deg2rad xlons_lalo = dlons_lalo*deg2rad @@ -2146,8 +2051,6 @@ subroutine get_tim_wei(iy,im,id,ih,mon1,mon2,wei1,wei2) if( mon2 == 13 ) mon2=1 - write(*,'(a,2i4,3f9.3)') 'mon1,mon2,rjday,wei1,wei2=',mon1,mon2,rjday,wei1,wei2 - end subroutine get_tim_wei !> Compute the freezing point of water as a function of salinity. diff --git a/sorc/global_cycle.fd/read_write_data.f90 b/sorc/global_cycle.fd/read_write_data.f90 index c945c5a2c..4813305fc 100644 --- a/sorc/global_cycle.fd/read_write_data.f90 +++ b/sorc/global_cycle.fd/read_write_data.f90 @@ -65,8 +65,9 @@ MODULE READ_WRITE_DATA CONTAINS !> Update surface records - and nsst records if selected - - !! on a single cubed-sphere tile to a pre-existing model - !! restart file (in netcdf). + !! on a single cubed-sphere tile. Writes to a pre-existing model + !! restart file (in netcdf) that was opened by read_data. Closes + !! the file after writing. !! !! @note The model restart files contain an additional snow field - !! snow cover (snocvr). That field is required for bit identical @@ -74,12 +75,12 @@ MODULE READ_WRITE_DATA !! compute it as an initialization step. Because this program does not !! contain the snow cover algorithm, it will let the model compute it. !! + !! @param[in] ncid NetCDF file id (from read_data). + !! @param[in] lensfc Total number of points on a tile. !! @param[in] idim 'i' dimension of a tile. !! @param[in] jdim 'j' dimension of a tile. - !! @param[in] lensfc Total number of points on a tile. !! @param[in] lsoil Number of soil layers. !! @param[in] do_nsst When true, nsst fields were processed. - !! @param[in] inc_file When true, write out increments to files !! @param[in] nsst Data structure containing nsst fields. !! @param[in] slifcs Land-sea mask. !! @param[in] tsffcs Skin temperature. @@ -115,30 +116,27 @@ MODULE READ_WRITE_DATA !! @param[in] slcfcs Liquid portion of volumetric soil moisture. !! @param[in] smcfcs Total volumetric soil moisture. !! @param[in] stcfcs Soil temperature. - !! @param[in] stcinc Soil temperature increments on the cubed-sphere tiles - !! @param[in] slcinc Liquid soil moisture increments on the cubed-sphere tiles !! !! @author George Gayno NOAA/EMC - subroutine write_data(lensfc,idim,jdim,lsoil, & - do_nsst,inc_file,nsst,slifcs,tsffcs,vegfcs,swefcs, & + subroutine write_data(ncid,lensfc,idim,jdim,lsoil, & + do_nsst,nsst,slifcs,tsffcs,vegfcs,swefcs, & tg3fcs,zorfcs,albfcs,alffcs, & cnpfcs,f10m,t2m,q2m,vetfcs, & sotfcs,ustar,fmm,fhh,sicfcs, & sihfcs,sitfcs,tprcp,srflag, & swdfcs,vmnfcs,vmxfcs,slpfcs, & - absfcs,slcfcs,smcfcs,stcfcs, & - stcinc, slcinc) + absfcs,slcfcs,smcfcs,stcfcs) use mpi implicit none + integer, intent(in) :: ncid integer, intent(in) :: lensfc, lsoil integer, intent(in) :: idim, jdim logical, intent(in) :: do_nsst - logical, intent(in) :: inc_file real, intent(in), optional :: slifcs(lensfc),tsffcs(lensfc) real, intent(in), optional :: swefcs(lensfc),tg3fcs(lensfc) @@ -155,34 +153,17 @@ subroutine write_data(lensfc,idim,jdim,lsoil, & real, intent(in), optional :: vmxfcs(lensfc), slpfcs(lensfc) real, intent(in), optional :: absfcs(lensfc), slcfcs(lensfc,lsoil) real, intent(in), optional :: smcfcs(lensfc,lsoil), stcfcs(lensfc,lsoil) - real, intent(in), optional :: stcinc(lensfc,lsoil) - real, intent(in), optional :: slcinc(lensfc,lsoil) type(nsst_data), intent(in) :: nsst - integer :: dim_x, dim_y, dim_soil, dim_time, dims_3d(3) + integer :: dim_x, dim_y, dim_time, dims_3d(3) real :: dum2d(idim,jdim), dum3d(idim,jdim,lsoil) - - character(len=50) :: fnbgso - character(len=3) :: rankch - - integer :: myrank, error, ncid, id_var - integer :: varid_stc, varid_slc - - call mpi_comm_rank(mpi_comm_world, myrank, error) - write(rankch, '(i3.3)') (myrank+1) - - if (.NOT.(inc_file)) then - - fnbgso = "./fnbgso." // rankch + integer :: error, id_var print* - print*,"update OUTPUT SFC DATA TO: ",trim(fnbgso) - - ERROR=NF90_OPEN(TRIM(fnbgso),NF90_WRITE,NCID) - CALL NETCDF_ERR(ERROR, 'OPENING FILE: '//TRIM(fnbgso) ) + print*,"WRITE UPDATED SFC DATA" if(present(slifcs)) then error=nf90_inq_varid(ncid, "slmsk", id_var) @@ -482,47 +463,6 @@ subroutine write_data(lensfc,idim,jdim,lsoil, & call remove_checksum(ncid, id_var) endif - else - - fnbgso = "./gaussian_interp." // rankch - print* - print*,"Write increments onto cubed sphere tiles to: ", trim(fnbgso) - - error=nf90_create(trim(fnbgso),NF90_64BIT_OFFSET,ncid) - CALL netcdf_err(error, 'OPENING FILE: '//trim(fnbgso) ) - - ! Define dimensions in the file. - error = nf90_def_dim(ncid, "xaxis_1", idim, dim_x) - call netcdf_err(error, 'defining xaxis_1') - - error = nf90_def_dim(ncid, "yaxis_1", jdim, dim_y) - call netcdf_err(error, 'defining yaxis_1') - - error = nf90_def_dim(ncid, "soil_levels",lsoil, dim_soil) - call netcdf_err(error, 'defining soil_levels') - - ! Define variables in the file. - error=nf90_def_var(ncid, "slc_inc", NF90_DOUBLE, & - (/dim_x,dim_y,dim_soil/),varid_slc) - call netcdf_err(error, 'defining slc_inc'); - - error=nf90_def_var(ncid, "stc_inc", NF90_DOUBLE, & - (/dim_x,dim_y,dim_soil/),varid_stc) - call netcdf_err(error, 'defining stc_inc'); - - error = nf90_enddef(ncid) - - ! Put variables in the file. - dum3d = reshape(stcinc, (/idim,jdim,lsoil/)) - error = nf90_put_var( ncid, varid_stc, dum3d) - call netcdf_err(error, 'writing stc_inc record' ) - - dum3d = reshape(slcinc, (/idim,jdim,lsoil/)) - error = nf90_put_var( ncid, varid_slc, dum3d) - call netcdf_err(error, 'writing slc_inc record' ) - - endif - if(do_nsst) then error=nf90_inq_varid(ncid, "tref", id_var) @@ -1040,13 +980,18 @@ SUBROUTINE READ_GSI_DATA(GSI_FILE, FILE_TYPE, LSOIL) END SUBROUTINE READ_GSI_DATA !> Read the first guess surface records and nsst records (if - !! selected) for a single cubed-sphere tile. + !! selected) for a single cubed-sphere tile. Opens the file + !! sfc_data_cycle.$NNN in read/write mode and returns the + !! file handle for subsequent writing by write_data. + !! If FNAME_INC is provided, reads from that increment file + !! in read-only mode instead. !! !! @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[out] NCID_OUT NetCDF file id (returned for main sfc file only). !! @param[out] IS_NOAHMP When true, process for the Noah-MP LSM. - !! @param[in] FNAME_INC Name of the increment file. + !! @param[in] FNAME_INC Name of the increment file (optional). !! @param[out] TSFFCS Skin Temperature. !! @param[out] SMCFCS Total volumetric soil moisture. !! @param[out] SWEFCS Snow water equivalent. @@ -1091,7 +1036,7 @@ 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,IS_NOAHMP, & + SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,NCID_OUT,IS_NOAHMP, & FNAME_INC, & TSFFCS,SMCFCS,SWEFCS,STCFCS, & TG3FCS,ZORFCS, & @@ -1111,9 +1056,10 @@ SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,IS_NOAHMP, & INTEGER, INTENT(IN) :: LSOIL, LENSFC LOGICAL, INTENT(IN) :: DO_NSST + INTEGER, OPTIONAL, INTENT(OUT) :: NCID_OUT - CHARACTER(LEN=50), OPTIONAL, INTENT(IN) :: FNAME_INC - INTEGER, OPTIONAL, INTENT(IN) :: LSOIL_INCR + CHARACTER(LEN=50), OPTIONAL, INTENT(IN) :: FNAME_INC + INTEGER, OPTIONAL, INTENT(IN) :: LSOIL_INCR LOGICAL, OPTIONAL, INTENT(OUT) :: IS_NOAHMP @@ -1151,25 +1097,31 @@ SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,IS_NOAHMP, & INTEGER :: ID_VAR, IERR, TEST, K LOGICAL :: JEDI_INCR_FILE + LOGICAL :: IS_INCREMENT_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) - WRITE(RANKCH, '(I3.3)') (MYRANK+1) + CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYRANK, ERROR) + WRITE(RANKCH, '(I3.3)') (MYRANK+1) - FNAME = "./fnbgsi." // RANKCH +! Determine if reading from increment file or main sfc data file + IF (PRESENT(FNAME_INC)) THEN + FNAME = FNAME_INC + IS_INCREMENT_FILE = .TRUE. + PRINT* + PRINT*, "READ INCREMENT DATA FROM: "//TRIM(FNAME) + ERROR=NF90_OPEN(TRIM(FNAME),NF90_NOWRITE,NCID) + CALL NETCDF_ERR(ERROR, 'OPENING FILE: '//TRIM(FNAME) ) + ELSE + FNAME = "./sfc_data_cycle." // RANKCH + IS_INCREMENT_FILE = .FALSE. + PRINT* + PRINT*, "READ/WRITE SFC DATA FROM: "//TRIM(FNAME) + ERROR=NF90_OPEN(TRIM(FNAME),NF90_WRITE,NCID) + CALL NETCDF_ERR(ERROR, 'OPENING FILE: '//TRIM(FNAME) ) + IF (PRESENT(NCID_OUT)) NCID_OUT = NCID ENDIF - PRINT* - PRINT*, "READ INPUT SFC DATA FROM: "//TRIM(FNAME) - - ERROR=NF90_OPEN(TRIM(FNAME),NF90_NOWRITE,NCID) - CALL NETCDF_ERR(ERROR, 'OPENING FILE: '//TRIM(FNAME) ) - ! Use the coordinate names to test whether this is ! a JEDI increment file @@ -1685,7 +1637,10 @@ SUBROUTINE READ_DATA(LSOIL,LENSFC,DO_NSST,IS_NOAHMP, & ZSOIL(4) = -2.0 ENDIF - ERROR = NF90_CLOSE(NCID) +! Close file only if reading increment file (main sfc file stays open for write) + IF (IS_INCREMENT_FILE) THEN + ERROR = NF90_CLOSE(NCID) + ENDIF END SUBROUTINE READ_DATA diff --git a/ush/global_cycle.sh b/ush/global_cycle.sh index 1d0f642f6..83051fd36 100755 --- a/ush/global_cycle.sh +++ b/ush/global_cycle.sh @@ -138,8 +138,6 @@ # DO_SFCCYCLE Call sfcsub routine # 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 # of depth of sea temperature. In whole mm. @@ -271,7 +269,6 @@ if [ "$GCYCLE_DO_SOILINCR" == ".true." ] || [ "$GCYCLE_DO_SNOWINCR" == ".true." else DO_LANDINCR=".false." fi -GCYCLE_INTERP_LANDINCR=${GCYCLE_INTERP_LANDINCR:-.false.} zsea1=${zsea1:-0} zsea2=${zsea2:-0} MAX_TASKS_CY=${MAX_TASKS_CY:-99999} @@ -393,7 +390,6 @@ cat << EOF > fort.37 NST_FILE="$NST_FILE", 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 7aa13e086..5695a5c3a 100755 --- a/ush/global_cycle_driver.sh +++ b/ush/global_cycle_driver.sh @@ -57,7 +57,6 @@ fi export DO_SFCCYLE=${DO_SFCCYCLE:-".true."} 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."} @@ -77,19 +76,14 @@ export DATA=${DATA:-$pwd/rundir$$} rm -fr $DATA mkdir -p $DATA -# Make a copy of the input restart file as fnbgso. For fractional grids, -# only a few fields will be updated by sfcsub.F. Only these records -# will be overwritten in fnbgso. - for n in $(seq 1 $ntiles); do - ln -fs $COMIN/$PDY.${cyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.00$n # Make a copy of the input restart file in the working directory. # global_cycle will update the required records for noah-mp. cp $COMIN/$PDY.${cyc}0000.sfc_data.tile${n}.nc $COMOUT/$PDY.${cyc}0000.sfcanl_data.tile${n}.nc chmod 644 $COMOUT/$PDY.${cyc}0000.sfcanl_data.tile${n}.nc - ln -fs $COMOUT/$PDY.${cyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.00$n + ln -fs $COMOUT/$PDY.${cyc}0000.sfcanl_data.tile${n}.nc $DATA/sfc_data_cycle.00$n ln -fs $FIXorog/${CASE}/C${CRES}_grid.tile${n}.nc $DATA/fngrid.00$n if (( OCNRES > 9999 ));then @@ -102,13 +96,10 @@ for n in $(seq 1 $ntiles); do ln -fs $COMIN/$PDY.${cyc}0000.xainc.tile${n}.nc $DATA/snow_xainc.00$n fi - if [ "$GCYCLE_DO_SOILINCR" == ".true." ] && [ "$GCYCLE_INTERP_LANDINCR" == ".false." ] ; then + if [[ "$GCYCLE_DO_SOILINCR" == ".true." ]] ; then ln -fs $COMIN/${SOILINCR_FNAME}.00${n} $DATA/soil_xainc.00$n fi - if [ "$GCYCLE_DO_SOILINCR" == ".true." ] && [ "$GCYCLE_INTERP_LANDINCR" == ".true." ] ; then - ln -fs $COMIN/sfcincr_gsi.00$n $DATA/sfcincr_gsi.00$n - fi done $CYCLESH