190 likes | 442 Views
Development of the Hurricane WRF prototype System at EMC Robert E. Tuleya EMC/NCEP/NOAA/SAIC With HWRF team HWRF tutorial NCEP October 26-27, 2004. OUTLINE. What is a Hurricane Forecast system?? Design of the prototype system for HWRF Important forecast files and information
E N D
Development of the Hurricane WRF prototype System at EMC Robert E. Tuleya EMC/NCEP/NOAA/SAIC With HWRF team HWRF tutorial NCEP October 26-27, 2004
OUTLINE • What is a Hurricane Forecast system?? • Design of the prototype system for HWRF • Important forecast files and information • 2004 preliminary HWRF forecasts • Future plans
Hurricane Forecast System Storm information NHC storm message Position domain model initial & boundary conditions Wrf si Wrf real Wrf model Model integration Model hurricane output products Synoptic fields for many variables Create file for track, intensity, etc
#!/bin/ksh YYMMDDHH=`date '+%y%m%d%H'` YYMMDDTD=`date '+%y%m%d'` YYTD=`date '+%y'` MMTD=`date '+%m'` DDTD=`date '+%d'` TOMORROW=`expr $YYMMDDTD + 1` TODAY=$YYMMDDTD cd /emc2/wx20tr/WRFEMC/HWRF/PARX18 if [ "$#" -eq 0 ] then echo running from operational ncep/nhc request message file echo make sure operational host model forecast files are available cp -p /com/hur/prod/inpdata/message1 storm1 elif [ "$#" -eq 2 ] then echo running from $user supplied nhc request message file cp /emc2/wx20tr/WRFEMC/HWRF/PARX18/$1.$2.message1 storm1 elif [ "$#" -eq 1 ] then echo requires 2 arguments: storm yymmddhh; exit elif [ "$#" -gt 2 ] then echo requires 2 arguments: storm yymmddhh; exit fi cat storm1 # set HWRF variables needed for prototype runs STORM=`cat storm1 | cut -c10-19` STORMID=`cat storm1 | cut -c6-8` CYC=`cat storm1 | cut -c27-28` YY=`cat storm1 | cut -c20-21` MM=`cat storm1 | cut -c22-23` DD=`cat storm1 | cut -c24-25` YYMMDD=`cat storm1 | cut -c20-25` TOMORROWF=`expr $YYMMDD + 0` TODAYF=$YYMMDD LATT=`cat storm1 | cut -c32-34` LONT=`cat storm1 | cut -c37-40` LATF=`cat storm1 | cut -c117-120` LONF=`cat storm1 | cut -c123-126` echo 'storm varibles for HWRF' echo $STORM $STORMID $YY $MM $DD $CYC $LATT $LONT $LATF $LONF # center domain 10deg west of storm center if no 72hr fcst if [ $LONF -lt 0 ] then echo 'missing longitude forecast' LONF=`expr $LONT + 200` fi CENT=`expr $LONT + $LONF` CENTAVG=`expr $CENT / 2` echo $LONT $LONF $CENT $CENTAVG CENLO=`expr -$CENTAVG / 10` echo 'center longitude of grid ' $CENLO if [ "$#" -eq 0 ] then # reset longitude if storm1 mesage is old if [ $TODAYF -ne $TODAY ] then echo storm card different day echo $TODAYF 'is forecast day '$TODAY 'is today' YY=$YYTD MM=$MMTD DD=$DDTD STORM='ATL60' CENLO=-60 fi if [ $CYC -ne '00' ] then echo storm card not 00UTC CYC='00' STORM='ATL60' CENLO=-60 fi fi CENLA=22.5 CENLA=25 echo 'domain center' $CENLA $CENLO MODIN=AVN # put environmenta variables into super script... /emc2/wx20tr/WRFEMC/HWRF/PARX18/starthwrfenv.sh
# put environmenta variables into super script... cat << eor > superenv.scr # @ step_name = wrfsi # @ output = /ptmp/wx20tr/supersi.out # @ error = /ptmp/wx20tr/supersi.err # @ notification = never ## ## DOMAIN YR MO D C LAT LON MODEL ## = = = = = = = = # @ arguments = $STORM 20$YY $MM $DD $CYC $CENLA $CENLO $MODIN ## # @ wall_clock_limit = 01:30:00 # @ job_type = serial # @ node_usage=not_shared # @ class = dev # @ executable = /emc2/wx20tr/WRFEMC/HWRF/NMMSI/PARX18/wrfsi.scr # @ queue # @ dependency = (wrfsi == 0) # @ step_name = real # @ output = /ptmp/wx20tr/superreal.out # @ error = /ptmp/wx20tr/superreal.err # @ notification = never # @ wall_clock_limit = 01:00:00 # @ job_type = parallel # @ total_tasks = 1 # @ node_usage=not_shared # @ blocking=unlimited # @ arguments = $STORM 20$YY $MM $DD $CYC # @ class = dev # @ network.MPI = csss,shared,us # @ executable = /emc2/wx20tr/WRFEMC/HWRF/PARX18/real_nmm.scr # @ queue # @ dependency = (real == 0) # @ step_name = wrfmodel # @ output = /ptmp/wx20tr/supernmm.out # @ error = /ptmp/wx20tr/supernmm.err # @ notification = never # @ wall_clock_limit = 03:00:00 # @ job_type = parallel # @ total_tasks = 61 # @ node_usage=shared # @ blocking=unlimited # @ arguments = $STORM 20$YY $MM $DD $CYC # @ class = dev # @ network.MPI = csss,shared,us # @ executable = /emc2/wx20tr/WRFEMC/HWRF/PARX18/wrf_nmm.scr # @ queue # @ dependency = (wrfmodel == 0) # @ step_name = wrfpost # @ output = /ptmp/wx20tr/superpost.out # @ error = /ptmp/wx20tr/superpost.err # @ notification = never # @ wall_clock_limit = 00:60:00 # @ job_type = parallel # @ total_tasks = 1 # @ node_usage=not_shared # @ blocking=unlimited # @ class = dev # @ network.MPI = csss,shared,us # @ arguments = $STORM 20$YY $MM $DD $CYC $CENLA $CENLO # @ executable = /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/WRFpost.scr # @ queue eor # cat superenv.scr llsubmit superenv.scr /emc2/wx20tr/WRFEMC/HWRF/PARX18/superenv.scr wrfsi wrfmodel wrfreal wrfpost
Storm information • Independent of objective analysis • Request by NHC to NCEP to run model • Enables bogussing and grid positioning • Current position, wind distribution etc. • File name coined ‘vitals or storm message’ • e.g. /com/hur/prod/inpdata/message1 NHC 05E DARBY 040729 1200 173N 1274W 295 062 0960 1008 0278 51 028 0241 0241 0111 0167 D 0148 0111 0074 0130 72 195N 1400W
HWRF features • Uses WRF NMM dynamic core • Initial condition options • Current or historical cases • GFS or GFDL initial conditions • Physics options • Eta model physics • Transitioning to GFDL(GFS) physics
Additional HWRF features • Requires grib input of initial conditions • Uses wrf binary and netcdf files • Rotated-E NMM grid … a bit awkward • WRF SI…a slow, big, generalized interpolator • Netcdf WRF output on native model grid • HWRF post • Uses EMC post utilities to interpolate to ‘A’ grid on pressure levels • Creates synoptic fields at ~ model resolution • EMC post output grids in grib format • Creates ‘atcf_unix’ file to track storm location, intensity, and extent • Attempt to use grads-based analysis tools • More output products to be developed
#!/bin/ksh ##@ output = out.post_wrf #@ error = err.post_wrf #@ job_type = parallel ##@ class = dev #@ class = 1 #@ total_tasks = 1 #@ blocking = unlimited ##@ node = 1 #@ wall_clock_limit = 00:60:00 #@ preferences = Feature == "dev" #@ network.MPI = csss,shared,us #@ queue set -x export MP_SHARED_MEMORY=yes export MP_LABELIO=yes export tmmark=tm00 export DOMAIN=${1} export YEAR=${2} export MONTH=${3} export DATE=${4} export CYCLE=${5} export CENLA=${6} export CENLO=${7} STORM=$DOMAIN MM=$MONTH DD=$DATE CYC=$CYCLE COMPATH=/ptmp/$user/$STORM.${YEAR}${MM}${DD}${CYC} export WRFROOT=wrfout_d01_ cd $TMPDIR/$user/ export OUTDIR=$COMPATH export YYYYMMDDHH=${YEAR}${MM}${DD}${CYC} for hr in 00 06 12 18 24 30 36 42 48\ 54 60 66 72 78 84 90 96 do # create wrf output file name MF=`/nwprod/util/exec/ndate $hr $YYYYMMDDHH | cut -c5-6` DF=`/nwprod/util/exec/ndate $hr $YYYYMMDDHH | cut -c7-8` HF=`/nwprod/util/exec/ndate $hr $YYYYMMDDHH | cut -c9-10` hour=${DF}T${HF} echo $DF $MF $CYC $COMPATH >> $COMPATH/wrfposttest.out export tmmark=$hour cat > itag <<EOF $OUTDIR/${WRFROOT}${YEAR}-$MF-$hour:00:00 netcdf $YEAR-$MF-$hour:00:00 NMM EOF # #----------------------------------------------------------------------- # Run etapost. rm fort.* ln -sf /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/wrf_cntrl.parmtrack fort.14 ln -sf /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/griddef.out fort.110 poe /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/wrfpost.x_ncare < itag >> $OUTDIR/outpost_wrf #---------------------------------------------------------------------- # End of output job fhour=`ls WRFPRS??.???? | cut -c7-8` echo $fhour mv WRFPRS??.???? $OUTDIR/WRFPRS${fhour}.grib done # now extract needed grib varibles and interpolate them onto lat-lon grid /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/interp_wrfine.sh # run tracker /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/runtrak.sh # now interpolate synoptic hourly data to lat-lon grib files... /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/interp_wrfhrly.sh # ftp important data to lnx55 hwrf site... ftp -v lnx55 <<eor passive binary prompt lcd $OUTDIR mkdir /work/hwrf/$STORM.${YEAR}${MM}${DD}${CYC} cd /work/hwrf/$STORM.${YEAR}${MM}${DD}${CYC} mput trak.hwrf* mput wrf.latlon.${YEAR}${MM}${DD}${CYC}* bye eor ## end of ftp # save wrf files to archive... htar -cvf /hpssuser/g01/wx20tr/$STORM.${YEAR}${MM}${DD}${CYC} $OUTDIR/wrf.latlon.* $OUTDIR/wrfout* $OUTDIR/wrfbdy_d01 $OUTDIR/wrfinput_d01 $OUTDIR/trak.hwrf* exit /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/WRFpost.scr create tracker file run tracker create synoptic data archive data
Critical atcf_unix file communicates storm information model • /tpcprd/atcf_unix/aal092004.dat • AL, 09, 2004091200, 03, GFDL, 0, 182N, 796W, 158, 903 • AL, 09, 2004091200, 03, GFDL, 6, 186N, 804W, 141, 909 • AL, 09, 2004091200, 03, GFDL, 12, 190N, 813W, 130, 922 • AL, 09, 2004091200, 03, GFDL, 18, 194N, 822W, 127, 924 • AL, 09, 2004091200, 03, GFDL, 24, 200N, 828W, 129, 921 • AL, 09, 2004091200, 03, GFDL, 30, 207N, 835W, 131, 923 • AL, 09, 2004091200, 03, GFDL, 36, 216N, 842W, 130, 921 • AL, 09, 2004091200, 03, GFDL, 42, 224N, 848W, 130, 924 • AL, 09, 2004091200, 03, GFDT, 000, 183N, 797W, 112, 960, XX, 34, NEQ, 0190, 0119, 0089, 0118 • AL, 09, 2004091200, 03, GFDT, 000, 183N, 797W, 112, 960, XX, 50, NEQ, 0074, 0071, 0064, 0066 • AL, 09, 2004091200, 03, GFDT, 000, 183N, 797W, 112, 960, XX, 64, NEQ, 0056, 0055, 0048, 0050 • AL, 09, 2004091200, 03, GFDT, 012, 191N, 814W, 117, 961, XX, 34, NEQ, 0316, 0315, 0194, 0311 • AL, 09, 2004091200, 03, GFDT, 012, 191N, 814W, 117, 961, XX, 50, NEQ, 0128, 0104, 0109, 0137 • AL, 09, 2004091200, 03, UKM, 0, 181N, 798W, 0 • AL, 09, 2004091200, 03, UKM, 12, 187N, 809W, 0 • AL, 09, 2004091200, 03, UKM, 24, 197N, 821W, 0 • AL, 09, 2004091200, 03, UKM, 36, 212N, 831W, 0 • AL, 09, 2004091200, 03, UKM, 48, 226N, 840W, 0 • AL, 09, 2004091200, 01, CARQ, 0, 182N, 796W, 145, 910, XX, 34, NEQ, 150, 100, 100, 150, 1007, 240, 15, 0, 0, L, 0, X, 285, 7, IVAN , D, • AL, 09, 2004091200, 01, CARQ, 0, 182N, 796W, 145, 910, XX, 50, NEQ, 90, 75, 60, 90, 1007, 240, 15, 0, 0, L, 0, X, 285, 7, IVAN , D, • AL, 09, 2004091200, 01, CARQ, 0, 182N, 796W, 145, 910, XX, 64, NEQ, 60, 30, 30, 60, 1007, 240, 15, 0, 0, L, 0, X, 285, 7, IVA , D, • AL, 09, 2004091200, 03, SHIP, 12, 192N, 812W, 146, 0, , 0, , 0, 0, 0, 0, • AL, 09, 2004091200, 03, SHIP, 24, 206N, 824W, 139, 0, , 0, , 0, 0, 0, 0, • AL, 09, 2004091200, 03, SHIP, 36, 222N, 834W, 131, 0, , 0, , 0, 0, 0, 0, • AL, 09, 2004091200, 03, SHIP, 48, 238N, 842W, 131, 0, , 0, , 0, 0, 0, 0, structure position intensity
Tracker software to create storm temporal forecast information • May be part of model run or done in post in/out of house • ‘tracker’ becoming a misnomer since intensity and storm structure also analyzed • Usually requires temporal data near surface, 850mb and 500mb • Usually multi-variable analysis…vorticity, U, V, T, etc. • EMC uses scheme by Tim Marchok (GFDL)
2004 preliminary HWRF forecasts • Run at least one storm per day (00utc) • >120 uniform resolution cases • ~20km resolution with 42 GFDL levels • System found to be quite robust with few if any non-user failures • Started with eta-physics, GFS initial condition • A work in progress !!
Additional products needed • Requires wrf output at shorter time interval • Puts strains on distributed software design • New products needed??
Summary & Plans • An active start for HWRF ! • Migrate to improved initial condition • Migrate to GFDL-type physics + microphysics • Begin forecast verification & analysis • Compare with GFDL and other models • Initiate moveable, nested HWRF