# Presentation: 219030

## Development of the Hurricane WRF prototype System at EMC

- <date/time>

**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

- <date/time>

**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

- Model integration

- Model hurricane output products

-       Hurricane Forecast System

- Wrf si
- Wrf real
- Wrf model

- NHC storm message
- Position domain

- Synoptic fields for many variables
- Create file for track, intensity, etc

## /emc2/wx20tr/WRFEMC/HWRF/PARX18/starthwrfenv.sh

- #!/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/superenv.scr

- #  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

***wrfsi***

***wrfreal***

***wrfmodel***

***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

## Slide 7

| Storm ID | 05E |
| --- | --- |
| Storm name | DARBY |
| YYMMDD | 040729 |
| time (UTC) | 1200 |
| Storm Lat. | 173N  (tenths) |
| Storm Lon. | 1274W (tenths) |
| Storm Heading | 295  (i.e. 25 deg. North of west) |
| Storm Movement | 062  (m/s*0.1) |
| Storm Central Pres | 960  (mb) |
| Pressure of outermost closed isobar | 1008 (mb) |
| Radial extent of outermost  closed isobar | 0278 (km) |
| Max. 10m winds | 51  (m/s) |
| Radius of Max 10m winds | 028 (km) |
| NE Quad. extent of Gales | 0241 (km) |
| SE Quad. extent of Gales | 0241 (km) |
| SW Quad. extent of Gales | 0111 (km) |
| NW Quad. extent of Gales | 0167 (km) |
| Vertical Depth of Storm | D  deep  wither D,M,S  ???? |
| NE Quad. extent of 50kt winds | 0148 (km) |
| SE Quad. extent of 50kt winds | 0111 (km) |
| SW Quad. extent of 50kt winds | 0074 (km) |
| NW Quad. extent of 50kt winds | 0130 (km) |
| NHC Forecast Period | 72   72h forecast position follows |
| NHC Forecast position of Storm Lat. | 195N (tenths) |
| NHC Forecast position of Storm Lon. | 1400W (tenths) |

## 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

## GFS..............GFDL

## 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

## /emc2/wx20tr/WRFEMC/HWRF/WRFPOST/WRFpost.scr

- #!/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

*create tracker file*

*run tracker *

*create  synoptic data*

*archive data*

## Critical atcf_unix file communicates storm information

-  **/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,

*model *

*position*

*intensity*

*structure*

## 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 !!

## Preliminary HWRF results using grads-based utilities

## HWRF intensity forecasts(no easy fix!!!)

## Additional products needed

- Requires wrf output at shorter time interval
- Puts strains on distributed software design
- New products needed??

## GFDL sfc wind & rainfall swaths

## 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