#!/bin/csh -f # +-======-+ # Copyright (c) 2003-2007 United States Government as represented by # the Admistrator of the National Aeronautics and Space Administration. # All Rights Reserved. # # THIS OPEN SOURCE AGREEMENT ("AGREEMENT") DEFINES THE RIGHTS OF USE, # REPRODUCTION, DISTRIBUTION, MODIFICATION AND REDISTRIBUTION OF CERTAIN # COMPUTER SOFTWARE ORIGINALLY RELEASED BY THE UNITED STATES GOVERNMENT AS # REPRESENTED BY THE GOVERNMENT AGENCY LISTED BELOW ("GOVERNMENT AGENCY"). # THE UNITED STATES GOVERNMENT, AS REPRESENTED BY GOVERNMENT AGENCY, IS AN # INTENDED THIRD-PARTY BENEFICIARY OF ALL SUBSEQUENT DISTRIBUTIONS OR # REDISTRIBUTIONS OF THE SUBJECT SOFTWARE. ANYONE WHO USES, REPRODUCES, # DISTRIBUTES, MODIFIES OR REDISTRIBUTES THE SUBJECT SOFTWARE, AS DEFINED # HEREIN, OR ANY PART THEREOF, IS, BY THAT ACTION, ACCEPTING IN FULL THE # RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN THIS AGREEMENT. # # Government Agency: National Aeronautics and Space Administration # Government Agency Original Software Designation: GSC-15354-1 # Government Agency Original Software Title: GEOS-5 GCM Modeling Software # User Registration Requested. Please Visit http://opensource.gsfc.nasa.gov # Government Agency Point of Contact for Original Software: # Dale Hithon, SRA Assistant, (301) 286-2691 # # +-======-+ ####################################################################### # Batch Parameters for Run Job ####################################################################### #PBS -l walltime=@RUN_T #PBS -l @RUN_FP #PBS -N @RUN_FN #PBS -q @RUN_Q #@BATCH_GROUP ####################################################################### # System Environment Variables ####################################################################### umask 022 limit stacksize unlimited @SETENVS ####################################################################### # Architecture Specific Environment Variables ####################################################################### setenv ARCH `uname` setenv SITE @SITE setenv GEOSBIN @GEOSBIN setenv GEOSUTIL @GEOSUTIL setenv RUN_CMD "@RUN_CMD" source $GEOSBIN/g5_modules setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${BASEDIR}/${ARCH}/lib ####################################################################### # Experiment Specific Environment Variables ####################################################################### setenv EXPID @EXPID setenv EXPDIR @EXPDIR setenv HOMDIR @HOMDIR setenv G6DEV /discover/nobackup/projects/gmao/g6dev/ltakacs ####################################################################### # Set Forecast Run Parameters ####################################################################### set date = `echo &DATE 000000` set HEARTBEAT = &HEARTBEAT set AGCM_IM = &AGCM_IM set AGCM_JM = &AGCM_JM set NX = &NX set NY = &NY set NFMAX = &NFMAX set ANA = &ANA ####################################################################### # Create Forecast Sub-Directory ####################################################################### @ NFCST = 1 while( $NFCST <= $NFMAX ) set date0 = $date[1] set time0 = $date[2] set hour = `echo $time0 | cut -c1-2` set fdate = ${date0}_${hour}z setenv FCSTDIR $EXPDIR/forecasts/$fdate setenv SCRDIR $FCSTDIR/scratch if (! -e $SCRDIR ) mkdir -p $SCRDIR cd $SCRDIR /bin/rm -rf * set date = `$GEOSUTIL/post/tick $date0 $time0 -10800` set nymd0 = $date[1] set nhms0 = $date[2] set hour = `echo $nhms0 | cut -c1-2` ################################################################## ###### Create STRIP Utility for File Modifications ###### (Removes formatted BLANK spaces) ################################################################## set FILE = strip /bin/rm $FILE cat << EOF > $FILE #!/bin/ksh /bin/mv \$1 \$1.tmp touch \$1 while read line do echo \$line >> \$1 done < \$1.tmp exit EOF chmod +x $FILE ####################################################################### # Set Model Resolution Parameters ####################################################################### set AGCM_LM = `grep AGCM_LM: $HOMDIR/AGCM.rc | cut -d':' -f2` set OGCM_IM = `grep OGCM_IM: $HOMDIR/AGCM.rc | cut -d':' -f2` set OGCM_JM = `grep OGCM_JM: $HOMDIR/AGCM.rc | cut -d':' -f2` set AGCM_IM0 = `echo $AGCM_IM | awk '{printf "%4.4i", $1}'` set AGCM_JM0 = `echo $AGCM_JM | awk '{printf "%4.4i", $1}'` set HRSLV = ${AGCM_IM}x${AGCM_JM} set HRSLV0 = ${AGCM_IM0}x${AGCM_JM0} # Set ATMOS and OCEAN Horizontal Resolution Tags # ---------------------------------------------- set AGCM_IM_Tag = `echo $AGCM_IM | awk '{printf "%4.4i", $1}'` set AGCM_JM_Tag = `echo $AGCM_JM | awk '{printf "%4.4i", $1}'` set OGCM_IM_Tag = `echo $OGCM_IM | awk '{printf "%4.4i", $1}'` set OGCM_JM_Tag = `echo $OGCM_JM | awk '{printf "%4.4i", $1}'` >>>FVLATLON<<>>FVCUBED<<>>DATAOCEAN<<>>COUPLED<< cap_restart /bin/cp CAP.rc CAP.rc.orig # Replace Original Horizontal Resolution with 1/4-deg # --------------------------------------------------- ./strip AGCM.rc set oldstring = `cat AGCM.rc | grep AGCM_IM:` set newstring = "AGCM_IM: $AGCM_IM" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep AGCM_JM:` set newstring = "AGCM_JM: $AGCM_JM" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep NX:` set newstring = "NX: $NX" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep NY:` set newstring = "NY: $NY" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep AGCM_GRIDNAME:` >>>FVLATLON<<>>FVCUBED<< AGCM.rc # Initialize Regular REPLAY Options for Forecasts # ----------------------------------------------- /bin/mv AGCM.rc AGCM.tmp /bin/rm -f sedfile touch sedfile cat >> sedfile << EOF s?# REPLAY_MODE:?@ REPLAY_MODE:?g s?# REPLAY_FILE:?@ REPLAY_FILE:?g s?# REPLAY_SHUTOFF:?@ REPLAY_SHUTOFF:?g s?# REPLAY_DAMPBEG:?@ REPLAY_DAMPBEG:?g s?# REPLAY_DAMPEND:?@ REPLAY_DAMPEND:?g s?# REPLAY_O3:?@ REPLAY_O3:?g EOF sed -f sedfile AGCM.tmp > AGCM.rc set oldstring = `cat AGCM.rc | grep "@ REPLAY_MODE: Regular"` set newstring = " REPLAY_MODE: Regular" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e 's?'"$oldstring?$newstring?g"'' > AGCM.rc set oldstring = `cat AGCM.rc | grep "@ REPLAY_FILE: /discover/nobackup/projects/gmao/g6dev/ltakacs/MERRA/ana"` if( $ANA == 'GMAO' ) set newstring = " REPLAY_FILE: /discover/nobackup/projects/gmao/g6dev/ltakacs/e572_fp/ana/Y%y4/M%m2/e572_fp.ana.eta.%y4%m2%d2_%h2z.nc4" if( $ANA == 'GMAO' ) set newstring = " REPLAY_FILE: /discover/nobackup/projects/gmao/g6dev/ltakacs/e5110_fp/ana/Y%y4/M%m2/e5110_fp.ana.eta.%y4%m2%d2_%h2z.nc4" if( $ANA == 'NCEP' ) set newstring = " REPLAY_FILE: /discover/nobackup/projects/gmao/g6dev/ltakacs/gdas1/Y%y4/M%m2/gg2eta.%y4%m2%d2_%h2z.nc4" if( $ANA == 'ECMWF' ) set newstring = " REPLAY_FILE: /discover/nobackup/projects/gmao/g6dev/ltakacs/ecmwf/Y%y4/M%m2/ec_prs2eta.%y4%m2%d2_%h2z.nc4" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep "@ REPLAY_SHUTOFF: 21600"` set newstring = " REPLAY_SHUTOFF: 21600" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc if( $ANA == 'ECMWF' ) then set oldstring = `cat AGCM.rc | grep "@ REPLAY_DAMPBEG:"` set newstring = " REPLAY_DAMPBEG: 1000.0" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep "@ REPLAY_DAMPEND:"` set newstring = " REPLAY_DAMPEND: 5000.0" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep "@ REPLAY_O3:"` set newstring = " REPLAY_O3: NO" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc else if( $ANA == 'NCEP' ) then set oldstring = `cat AGCM.rc | grep "@ REPLAY_DAMPBEG:"` set newstring = " REPLAY_DAMPBEG: 200.0" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep "@ REPLAY_DAMPEND:"` set newstring = " REPLAY_DAMPEND: 5000.0" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc else if( $ANA == 'GMAO' ) then set oldstring = `cat AGCM.rc | grep "@ REPLAY_DAMPBEG:"` set newstring = " REPLAY_DAMPBEG: 100.0" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc set oldstring = `cat AGCM.rc | grep "@ REPLAY_DAMPEND:"` set newstring = " REPLAY_DAMPEND: 5000.0" /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc endif /bin/mv AGCM.rc AGCM.tmp /bin/rm -f sedfile touch sedfile cat >> sedfile << EOF s?@ REPLAY_MODE:?# REPLAY_MODE:?g s?@ REPLAY_FILE:?# REPLAY_FILE:?g s?@ REPLAY_SHUTOFF:?# REPLAY_SHUTOFF:?g s?@ REPLAY_DAMPBEG:?# REPLAY_DAMPBEG:?g s?@ REPLAY_DAMPEND:?# REPLAY_DAMPEND:?g s?@ REPLAY_O3:?# REPLAY_O3:?g EOF sed -f sedfile AGCM.tmp > AGCM.rc ####################################################################### # Create Forecast History RC Files ####################################################################### set FILE = HISTORY.rc /bin/rm -f $FILE cat << _EOF_ > $FILE EXPID: G5$ANA EXPDSC: G5${ANA}_based_on_${EXPID} COLLECTIONS: 'geosgcm_fcst' 'geosgcm_surf' 'geosgcm_iau_eta' 'geosgcm_iau_prs' :: geosgcm_fcst.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_fcst.archive: '%c/Y%y4', geosgcm_fcst.format: 'CFIO', geosgcm_fcst.frequency: 060000, geosgcm_fcst.duration: 000000, geosgcm_fcst.resolution: 1152 721, geosgcm_fcst.vscale: 100.0, geosgcm_fcst.vunit: 'hPa', geosgcm_fcst.vvars: 'log(PLE)' , 'DYN' , geosgcm_fcst.levels: 1000 850 700 500 400 300 250 200 150 100, geosgcm_fcst.fields: 'PHIS' , 'AGCM' , 'SLP' , 'DYN' , 'U' , 'DYN' , 'V' , 'DYN' , 'T' , 'DYN' , 'PS' , 'DYN' , 'ZLE' , 'DYN' , 'H' , 'OMEGA' , 'DYN' , 'Q' , 'MOIST' , 'QV' , 'RH2' , 'MOIST' , 'RH' , :: geosgcm_surf.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_surf.archive: '%c/Y%y4', geosgcm_surf.format: 'CFIO', geosgcm_surf.mode: 'time-averaged', geosgcm_surf.frequency: 030000, geosgcm_surf.duration: 000000, geosgcm_surf.resolution: 1152 721, geosgcm_surf.fields: 'PHIS' , 'AGCM' , 'SLP' , 'DYN' , 'PS' , 'DYN' , 'DMDTDYN' , 'DYN' , 'TQV' , 'AGCM' , 'TQL' , 'AGCM' , 'TQI' , 'AGCM' , 'TPREC' , 'MOIST' , 'EVAP' , 'SURFACE' , 'TS' , 'SURFACE' , :: geosgcm_iau_prs.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_iau_prs.archive: '%c/Y%y4', geosgcm_iau_prs.format: 'CFIO', geosgcm_iau_prs.ref_date: ${date0}, geosgcm_iau_prs.ref_time: 000000, geosgcm_iau_prs.end_date: ${date0}, geosgcm_iau_prs.end_time: 000000, geosgcm_iau_prs.frequency: 060000, geosgcm_iau_prs.resolution: 1152 721, geosgcm_iau_prs.vscale: 100.0, geosgcm_iau_prs.vunit: 'hPa', geosgcm_iau_prs.vvars: 'log(PLE)' , 'DYN' , geosgcm_iau_prs.levels: 1000 975 950 925 900 875 850 825 800 775 750 725 700 650 600 550 500 450 400 350 300 250 200 150 100 70 50 40 30 20 10 7 5 4 3 2 1 0.7 0.5 0.4 0.3 0.2 0.1 0.07 0.05 0.04 0.03 0.02, geosgcm_iau_prs.fields: 'DMDTANA' , 'DYN' , 'DPDTANA' , 'DUDT_ANA' , 'AGCM' , 'DUDTANA' , 'DVDT_ANA' , 'AGCM' , 'DVDTANA' , 'DTDT_ANA' , 'AGCM' , 'DTDTANA' , 'DQVDT_ANA' , 'AGCM' , 'DQDTANA' , :: geosgcm_iau_eta.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_iau_eta.archive: '%c/Y%y4', geosgcm_iau_eta.format: 'CFIO', geosgcm_iau_eta.ref_date: ${date0}, geosgcm_iau_eta.ref_time: 000000, geosgcm_iau_eta.end_date: ${date0}, geosgcm_iau_eta.end_time: 000000, geosgcm_iau_eta.frequency: 060000, geosgcm_iau_eta.resolution: 1152 721, geosgcm_iau_eta.fields: 'DMDTANA' , 'DYN' , 'DPDTANA' , 'DUDT_ANA' , 'AGCM' , 'DUDTANA' , 'DVDT_ANA' , 'AGCM' , 'DVDTANA' , 'DTDT_ANA' , 'AGCM' , 'DTDTANA' , 'DQVDT_ANA' , 'AGCM' , 'DQDTANA' , 'PHIS' , 'AGCM' , 'PS' , 'DYN' , 'DELP' , 'DYN' , :: _EOF_ ####################################################################### # Create HISTORY Collection Directories ####################################################################### set collections = '' foreach line ("`cat HISTORY.rc`") set firstword = `echo $line | awk '{print $1}'` set firstchar = `echo $firstword | cut -c1` set secondword = `echo $line | awk '{print $2}'` if ( $firstword == "::" ) goto done if ( $firstchar != "#" ) then set collection = `echo $firstword | sed -e "s/'//g"` set collections = `echo $collections $collection` if ( $secondword == :: ) goto done endif if ( $firstword == COLLECTIONS: ) then set collections = `echo $secondword | sed -e "s/'//g"` endif end done: ####################################################################### # Link Boundary Datasets ####################################################################### setenv BCSDIR @BCSDIR setenv SSTDIR @SSTDIR setenv CHMDIR @CHMDIR setenv BCSTAG ${ATMOStag}_${OCEANtag} setenv DATELINE DC set FILE = linkbcs /bin/rm -f $FILE cat << _EOF_ > $FILE #!/bin/csh -f /bin/mkdir -p ExtData /bin/ln -sf $CHMDIR/* ExtData >>>DATAOCEAN<<>>DATAOCEAN<<>>DATAOCEAN<<>>DATAOCEAN<<>>FVCUBED<<>>FVCUBED<<>>FVCUBED<<>>DATAOCEAN<<> $FILE >>>DATAOCEAN<<> $FILE >>>DATAOCEAN<<> $FILE chmod +x linkbcs /bin/cp linkbcs $EXPDIR ####################################################################### # Get C2L History weights/index file for Cubed-Sphere ####################################################################### set C_NPX = `echo $AGCM_IM | awk '{printf "%5.5i", $1}'` set C_NPY = `echo $AGCM_JM | awk '{printf "%5.5i", $1}'` set H_NPX = `echo @HIST_IM | awk '{printf "%5.5i", $1}'` set H_NPY = `echo @HIST_JM | awk '{printf "%5.5i", $1}'` set c2l_file = "${C_NPX}x${C_NPY}_c2l_${H_NPX}x${H_NPY}.bin" if (-e $BCSDIR/@BCSRES/${c2l_file}) /bin/ln -s $BCSDIR/@BCSRES/${c2l_file} . ############################################################################## # Get Executable and RESTARTS # Note: MERRA Restarts must be Pre-Fetched, Regridded, and Locally Stored ############################################################################## /bin/cp $EXPDIR/GEOSgcm.x . set rst_types = `cat AGCM.rc | grep "RESTART_FILE" | cut -d ":" -f1 | cut -d "_" -f1-2` set chk_types = `cat AGCM.rc | grep "CHECKPOINT_FILE" | cut -d ":" -f1 | cut -d "_" -f1-2` set rst_files = `cat AGCM.rc | grep "RESTART_FILE" | cut -d ":" -f2` set chk_files = `cat AGCM.rc | grep "CHECKPOINT_FILE" | cut -d ":" -f2` # Remove possible bootstrap parameter (+/-) # ----------------------------------------- set dummy = `echo $rst_files` set rst_files = '' foreach rst ( $dummy ) set length = `echo $rst | awk '{print length($0)}'` set bit = `echo $rst | cut -c1` if( "$bit" == "+" | \ "$bit" == "-" ) set rst = `echo $rst | cut -c2-$length` set rst_files = `echo $rst_files $rst` end # Copy Restarts to Scratch Directory # ---------------------------------- set year = `echo $nymd0 | cut -c1-4` set month = `echo $nymd0 | cut -c5-6` #bin/ln -s $G6DEV/MERRA/restarts/Ganymed-4_0/Ganymed-4_0_Reynolds/$HRSLV/Y${year}/M${month}/*${nymd0}_${hour}z.bin* . /bin/ln -s $G6DEV/g5ecmwfR/rs/Y${year}/M${month}/*${nymd0}_${hour}z.* . $GEOSBIN/stripname d5_merra_jan98. $GEOSBIN/stripname .${nymd0}_${hour}z.\* ####################################################################### # Create Binary Tile File from ASCII ####################################################################### # Link Boundary Conditions for Appropriate Date # --------------------------------------------- set year = `echo $date0 | cut -b1-4` setenv YEAR $year ./linkbcs if (! -e tile.bin) then $GEOSBIN/binarytile.x tile.data tile.bin endif ################################################################## ###### ###### Perform REPLAY Forecast of Model Run ###### ################################################################## /bin/cp CAP.rc.orig CAP.rc ./strip CAP.rc set oldstring = `cat CAP.rc | grep JOB_SGMT:` set newstring = "JOB_SGMT: 00000005 030000" /bin/mv CAP.rc CAP.tmp cat CAP.tmp | sed -e "s?$oldstring?$newstring?g" > CAP.rc set oldstring = `cat CAP.rc | grep HEARTBEAT_DT:` set newstring = "HEARTBEAT_DT: $HEARTBEAT" /bin/mv CAP.rc CAP.tmp cat CAP.tmp | sed -e "s?$oldstring?$newstring?g" > CAP.rc @ NPES = $NX * $NY $RUN_CMD $NPES ./GEOSgcm.x ####################################################################### # Move HISTORY Files to Holding Directory ####################################################################### foreach collection ( $collections ) /bin/mv `/bin/ls -1 *.${collection}.*` $FCSTDIR end ####################################################################### # Create STATS ####################################################################### set nymd = $date0 set yyyymm = `echo $nymd | cut -b1-6` mkdir -p $EXPDIR/forecasts/G5${ANA}.stats.$yyyymm cd $EXPDIR/forecasts/G5${ANA}.stats.$yyyymm set year0 = `echo $nymd | cut -b1-4` set month0 = `echo $nymd | cut -b5-6` set fcst_files = `/bin/ls -1 $EXPDIR/forecasts/${nymd}_00z/G5${ANA}*geosgcm_fcst*nc4` set anal_files = '' @ n = 1 while ($n <= 6) set year = `echo $nymd | cut -b1-4` set month = `echo $nymd | cut -b5-6` # G5NCEP # ------ if( $ANA == "NCEP" ) then if( $month0 == "06" ) then set next = `/bin/ls -1 /discover/nobackup/projects/gmao/g6dev/ltakacs/gfs/gfs.1x125_14_levels.${nymd}*nc4` endif if( $month0 == "12" ) then set next = `/bin/ls -1 /discover/nobackup/projects/gmao/g6dev/ltakacs/gdas1/Y$year/M$month/i.1x125_ncep_26_levels.${nymd}*nc4` endif endif # G5ECMWF # ------- if( $ANA == "ECMWF" ) then set next = `/bin/ls -1 /discover/nobackup/projects/gmao/g6dev/ltakacs/ecmwf/Y$year/M$month/ecmwf.inst3_3d_wxm_Np.${nymd}*nc4` endif # G5GMAO # ------ if( $ANA == "GMAO" ) then set next = `/bin/ls -1 /discover/nobackup/projects/gmao/g6dev/ltakacs/e5110_fp/diag/Y$year/M$month/e5110_fp.inst3_3d_asm_Np.${nymd}*nc4` endif set anal_files = `echo $anal_files $next` set date = `$GEOSUTIL/post/tick $nymd 0 86400` set nymd = $date[1] @ n = $n + 1 end $GEOSUTIL/post/stats.x -fcst $fcst_files \ -ana $anal_files \ -cli $SHARE/gmao_ops/verification/stats/merrasc.197901-200812.clim_00z.144x91.data.nc \ $SHARE/gmao_ops/verification/stats/merrasc.197901-200812.clim_06z.144x91.data.nc \ $SHARE/gmao_ops/verification/stats/merrasc.197901-200812.clim_12z.144x91.data.nc \ $SHARE/gmao_ops/verification/stats/merrasc.197901-200812.clim_18z.144x91.data.nc \ -tag $EXPID -nfreq 060000 -rc $GEOSUTIL/post/stats.rc ####################################################################### # Update Forecast Counter ####################################################################### @ NFCST = $NFCST + 1 set date = `$GEOSUTIL/post/tick $date0 $time0 86400` end