|
| 1 | +#! /bin/csh -f |
| 2 | + |
| 3 | +#--------------------------------------- |
| 4 | +# Script to Generate ERA-I Nudging data |
| 5 | +#--------------------------------------- |
| 6 | + |
| 7 | +#=================================================================== |
| 8 | +# CONFIGRATION SECTION: |
| 9 | +#=================================================================== |
| 10 | + |
| 11 | +# Set a REFERENCE (Starting) Date and the numbe rof days to process |
| 12 | +#------------------------------------------------------------------- |
| 13 | +set RUNNUM = 01 |
| 14 | +set REF_DATE = '20090403' |
| 15 | +set NUM_DAYS = 240 |
| 16 | + |
| 17 | +# Set INPUT/OUTPUT/TMP directories, |
| 18 | +#----------------------------------- |
| 19 | +set NAMELIST = './Config/Config_makeIC-'$RUNNUM'.nl' |
| 20 | +set MYLOGDIR = './LOG/LOG_001.'$RUNNUM'/' |
| 21 | +set MYTMPDIR = './TMP/TMP_001.'$RUNNUM'/' |
| 22 | +set MYOUTDIR = '/glade/scratch/USER/inputdata/nudging/ERAI_fv09/' |
| 23 | +set INPUTDIR = '/glade2/collections/rda/data/ds627.0/' |
| 24 | + |
| 25 | + |
| 26 | +# Set Clean option |
| 27 | +#------------------------ |
| 28 | +set TMP_clean = 'True' |
| 29 | + |
| 30 | +# Set Processing options |
| 31 | +#------------------------ |
| 32 | +set CASE = 'ERAI_fv09' |
| 33 | +set DYCORE = 'fv' |
| 34 | +set PRECISION = 'float' |
| 35 | +set VORT_DIV_TO_UV = 'True' |
| 36 | +set SST_MASK = 'False' |
| 37 | +set ICE_MASK = 'False' |
| 38 | +set OUTPUT_PHIS = 'True' |
| 39 | +set REGRID_ALL = 'False' |
| 40 | +set ADJUST_STATE_FROM_TOPO = 'True' |
| 41 | + |
| 42 | +# Set files containig OUTPUT Grid structure and topography |
| 43 | +#--------------------------------------------------------- |
| 44 | +set fname_grid_info = '/glade/p/cesm/cseg/inputdata/atm/cam/inic/fv/cami-mam3_0000-01-01_0.9x1.25_L30_c100618.nc' |
| 45 | +set fname_phis_output = '/glade/p/cesmdata/cseg/inputdata/atm/cam/topo/fv_0.9x1.25_nc3000_Nsw042_Nrs008_Co060_Fi001_ZR_160505.nc' |
| 46 | +set ftype_phis_output = 'FV_TOPOGRAPHY' |
| 47 | + |
| 48 | +# Set INPUT filename format, type of file, and number of time records per file |
| 49 | +#------------------------------------------------------------------------------ |
| 50 | +set fname = ( none none none none none none ) |
| 51 | +set ftype = ( none none none none none none ) |
| 52 | +set ftime = ( none none none none none none ) |
| 53 | +set hoursec = ( 00000 21600 43200 64800 ) |
| 54 | +set hourstr = ( 00 06 12 18 ) |
| 55 | + |
| 56 | +set fname[1] = "ei.oper.an.ml/YYYYMM/ei.oper.an.ml.regn128sc.YYYYMMDDHH" |
| 57 | +set ftype[1] = "Era_Interim_627.0_sc" |
| 58 | +set ftime[1] = "1X" |
| 59 | +##set fname[2] = "ei.oper.an.sfc/YYYYMM/ei.oper.an.sfc.regn128sc.YYYYMMDDHH" |
| 60 | +##set ftype[2] = "Era_Interim_627.0_sc" |
| 61 | +##set ftime[2] = "1X" |
| 62 | + |
| 63 | +# Set the OUTPUT fileds and the index of the file containing them |
| 64 | +#------------------------------------------------------------------ |
| 65 | +set fields = ( U US V VS T Q PS ) |
| 66 | +set field_findex = ( 1 1 1 1 1 1 1 ) |
| 67 | + |
| 68 | +# Set the index of the file containing the INPUT topography |
| 69 | +#------------------------------------------------------------------ |
| 70 | +set phis_findex = 1 |
| 71 | + |
| 72 | + |
| 73 | +#=================================================================== |
| 74 | +# PROCESSING SECTION: |
| 75 | +# Loop over range of times, |
| 76 | +# generate inpute namelist for each time, |
| 77 | +# then generate the desired Nudging data |
| 78 | +#=================================================================== |
| 79 | + |
| 80 | +# Construct the fields string |
| 81 | +#----------------------------- |
| 82 | +set fieldstr = $fields[1] |
| 83 | +set jj = $field_findex[1] |
| 84 | +@ jj = $jj - 1 |
| 85 | +set findexstr = $jj |
| 86 | +set ii = 1 |
| 87 | +set fnum = $#fields |
| 88 | +while( $ii < $fnum ) |
| 89 | + @ ii = $ii + 1 |
| 90 | + set jj = $field_findex[$ii] |
| 91 | + @ jj = $jj - 1 |
| 92 | + set fieldstr = `echo $fieldstr','$fields[$ii]` |
| 93 | + set findexstr = `echo $findexstr','$jj` |
| 94 | +end |
| 95 | + |
| 96 | +set jj = $phis_findex |
| 97 | +@ jj = $jj - 1 |
| 98 | +set phisstr = $jj |
| 99 | + |
| 100 | +# Build NCL fortran library |
| 101 | +#--------------------------- |
| 102 | +#/usr/local/bin/WRAPIT MAKEIC.stub MAKEIC.f90 |
| 103 | +#/contrib/ncl-6.1.0/bin/WRAPIT MAKEIC.stub MAKEIC.f90 |
| 104 | +WRAPIT MAKEIC.stub MAKEIC.f90 |
| 105 | + |
| 106 | +# |
| 107 | +# Loop over range of times to process |
| 108 | +# For the first time true, force |
| 109 | +# generation of ESMF weight datasets |
| 110 | +#===================================== |
| 111 | +set NDAYS = 0 |
| 112 | +while ( $NDAYS < $NUM_DAYS ) |
| 113 | + |
| 114 | + # Set current time values |
| 115 | + #------------------------ |
| 116 | + set Yearstr = "`date --date=$REF_DATE+${NDAYS}day +%Y`" |
| 117 | + set Monstr = "`date --date=$REF_DATE+${NDAYS}day +%m`" |
| 118 | + set Daystr = "`date --date=$REF_DATE+${NDAYS}day +%d`" |
| 119 | + echo $Yearstr ' / ' $Monstr ' / ' $Daystr |
| 120 | + |
| 121 | + # Loop over the hourly values (4X daily) |
| 122 | + #======================================== |
| 123 | + foreach hnum ( 1 2 3 4 ) |
| 124 | + |
| 125 | + # Set Values dependend upon $hnum, clean |
| 126 | + # up TMP files at the end of each DAY |
| 127 | + #---------------------------------------------------------------------- |
| 128 | + set datestr = $Yearstr$Monstr$Daystr$hoursec[$hnum] |
| 129 | + set LOGFILE = $MYLOGDIR'/LogNCL.'$Yearstr$Monstr$Daystr$hoursec[$hnum] |
| 130 | + if( $hnum == 4 ) then |
| 131 | + set TMP_clean = 'True' |
| 132 | + else |
| 133 | + set TMP_clean = 'False' |
| 134 | + endif |
| 135 | + |
| 136 | + # Create Namelist file for current time |
| 137 | + #---------------------------------------- |
| 138 | + echo ' ' > $NAMELIST |
| 139 | + echo '! Generated Namelist for maekIC_se.ncl ' >> $NAMELIST |
| 140 | + echo '!------------------- ' >> $NAMELIST |
| 141 | + echo '&makeic_nl' >> $NAMELIST |
| 142 | + echo ' MYTMPDIR="'$MYTMPDIR'"' >> $NAMELIST |
| 143 | + echo ' MYOUTDIR="'$MYOUTDIR'"' >> $NAMELIST |
| 144 | + echo ' INPUTDIR="'$INPUTDIR'"' >> $NAMELIST |
| 145 | + echo ' ' >> $NAMELIST |
| 146 | + echo ' TMP_clean ="'$TMP_clean'"' >> $NAMELIST |
| 147 | + echo ' ' >> $NAMELIST |
| 148 | + echo ' REF_DATE ="'$REF_DATE'"' >> $NAMELIST |
| 149 | + echo ' CASE ="'$CASE'"' >> $NAMELIST |
| 150 | + echo ' DYCORE ="'$DYCORE'"' >> $NAMELIST |
| 151 | + echo ' PRECISION ="'$PRECISION'"' >> $NAMELIST |
| 152 | + echo ' VORT_DIV_TO_UV ="'$VORT_DIV_TO_UV'"' >> $NAMELIST |
| 153 | + echo ' SST_MASK ="'$SST_MASK'"' >> $NAMELIST |
| 154 | + echo ' ICE_MASK ="'$ICE_MASK'"' >> $NAMELIST |
| 155 | + echo ' OUTPUT_PHIS ="'$OUTPUT_PHIS'"' >> $NAMELIST |
| 156 | + echo ' REGRID_ALL ="'$REGRID_ALL'"' >> $NAMELIST |
| 157 | + echo ' ADJUST_STATE_FROM_TOPO="'$ADJUST_STATE_FROM_TOPO'"'>> $NAMELIST |
| 158 | + echo ' ' >> $NAMELIST |
| 159 | + echo ' fname_phis_output ="'$fname_phis_output'"' >> $NAMELIST |
| 160 | + echo ' ftype_phis_output ="'$ftype_phis_output'"' >> $NAMELIST |
| 161 | + echo ' fname_grid_info ="'$fname_grid_info'"' >> $NAMELIST |
| 162 | + echo ' ' >> $NAMELIST |
| 163 | + echo ' fields ="'$fieldstr'"' >> $NAMELIST |
| 164 | + echo ' source_files ="'$findexstr'"' >> $NAMELIST |
| 165 | + echo ' fname_phis_in='$phisstr >> $NAMELIST |
| 166 | + echo ' ' >> $NAMELIST |
| 167 | + set ii = 0 |
| 168 | + set fnum = $#fname |
| 169 | + while( $ii < $fnum ) |
| 170 | + set jj = $ii |
| 171 | + @ ii = $ii + 1 |
| 172 | + set file = $fname[$ii] |
| 173 | + set file = `echo $file | sed 's/YYYY/'$Yearstr'/g'` |
| 174 | + set file = `echo $file | sed 's/MM/'$Monstr'/g'` |
| 175 | + set file = `echo $file | sed 's/DD/'$Daystr'/g'` |
| 176 | + if( $ftime[$ii] == "4X" ) then |
| 177 | + set file = `echo $file | sed 's/HH/'$hourstr[1]'/'` |
| 178 | + set file = `echo $file | sed 's/HH/'$hourstr[4]'/'` |
| 179 | + else |
| 180 | + set file = `echo $file | sed 's/HH/'$hourstr[$hnum]'/g'` |
| 181 | + endif |
| 182 | + echo " fname$jj="'"'$file'"' >> $NAMELIST |
| 183 | + end |
| 184 | + echo ' ' >> $NAMELIST |
| 185 | + set ii = 0 |
| 186 | + set fnum = $#fname |
| 187 | + while( $ii < $fnum ) |
| 188 | + set jj = $ii |
| 189 | + @ ii = $ii + 1 |
| 190 | + echo " ftype$jj="'"'$ftype[$ii]'"' >> $NAMELIST |
| 191 | + end |
| 192 | + echo ' ' >> $NAMELIST |
| 193 | + set ii = 0 |
| 194 | + set fnum = $#fname |
| 195 | + while( $ii < $fnum ) |
| 196 | + set jj = $ii |
| 197 | + @ ii = $ii + 1 |
| 198 | + if( $fname[$ii] == "none" ) then |
| 199 | + echo " fdate$jj="'"-1"' >> $NAMELIST |
| 200 | + else |
| 201 | + echo " fdate$jj="'"'$datestr'"' >> $NAMELIST |
| 202 | + endif |
| 203 | + end |
| 204 | + echo "/" >> $NAMELIST |
| 205 | + |
| 206 | + # Execute NCL program to process the data |
| 207 | + #---------------------------------------- |
| 208 | + cat $NAMELIST >& $LOGFILE.cfg |
| 209 | + ncl makeIC.ncl NameNumber=$RUNNUM >& $LOGFILE |
| 210 | + |
| 211 | + # End Loop over the hourly values (4X daily) |
| 212 | + #=========================================== |
| 213 | + end # foreach hnum ( 1 2 3 4 ) |
| 214 | + |
| 215 | +# End loop over time |
| 216 | +#======================= |
| 217 | +@ NDAYS = $NDAYS + 1 |
| 218 | +end # while ( $NDAYS < $NUM_DAYS ) |
| 219 | + |
0 commit comments