# Presentation: 376968

## Local CWF Formatter Changes

**Matt Moreland**
**NWSFO HGX**
**April 2004**

## Common Forecaster Concerns

- Wave height ranges do not match what you have in the grids
- Wave heights are worded consistently too high
- Wind speeds come out too high  with 11 grids of 16 knots and 1 grid of 20 knots, formatter would output winds “AROUND 20 KNOTS”
- Chop phrasing for inland waters areas does not match the associated wind speeds

## Factors Affecting Marine Fcst (1)

- Marine forecaster edits all the winds (inland and offshore)  inland winds usually less than 15 mph in our CWA
- Model surface winds (SmartInit) not ideal yet  GFS usually too high and Eta can be too low in post-frontal situations
- Wave heights:  GWW model doesn’t work that well for us  usually edited by hand

## Factors Affecting Marine Fcst (2)

- Water temps:  can see a 25 degree or higher range in SSTs in mid-winter
- Land breeze/seabreeze interactions
- Run GFE in 2.5 km resolution to better contour the coastal effects
- Lots of verification in CWA:  2 official buoys, PORTS data, TABS data (Texas Automated Buoy System)

## Factors Affecting Marine Fcst (3)

- Editing methods vary among forecasters:  some insist on blocky edits for WaveHeights, others stick with preferred contouring
- SmartTools used to create WaveHeight grids based on surface winds  a good first guess
- HGX issues a Tide Forecast (TIDHGX)  uses TCOONs data and other sites for tide level verification

## Our Current CWF (1)

- Use WaveHeight grids solely to produce Seas (no explicit gridded display of swell)
- Have two edit areas (two bays) used in _BayAreas and _ChopAreas
- No edit areas included in BayAreasWaves, BayChopAreas, IntracoastalChopAreas, or LakeChopAreas

## Our Current CWF (2)

- May include single wind values with wind speeds up to 20 knots, and 5 knot wind ranges with speeds up to 25 knots
- Derive marine headlines from the Headline grids
- Changes detailed here have greatly improved wind speed, wave height, and inland waters chop wordings

## Two Possible Wave Height Fixes(suggested by Edward Tirado)

- Change WaveHeight sampling method from”moderatedMax” to “moderatedMinMax”
- 	 use a 6 hour sampling period
**-- OR –**
- Add WaveHeight to moderated_dict method to weed out the highest values

## moderated_dict Method

**def moderated_dict (self, parmHisto, timeRange,           componentName):**
**dict[“Wind”] = (0, 20)**
**dict[“WaveHeight”] = (0, 20)**
**return dict**
- This method will weed out highest 20% of Wind
- and WaveHeight values when data sampling
- takes place.

## Sampling with moderatedMinMax

- Found this change to be the most effective (even better than using moderated_dict)
- Works best when you add significantly more detail to the table in the wave_range method

## wave_range Method

## Changes to wave_words

- In the wave_words method, use different values for determining the average (“avg”):
- 	**min, max = self.getValue(wave, “MinMax”)**
**	****avg = self.getValue(wave, “Average”)  **# new line added
**	****avg = (min + avg) / 2     **# changed from (min + max) / 2
- Basically an average of the minimum and average WaveHeight values, rather than the average of the minimum and maximum values
- Results in a slightly lower value being passed to the table in the wave_range method  the formatter then outputs lower wave height values

## Wind Speed Fixes (1)

- Sample wind speed twice in the vector_mag_hook method:
- 	**maxWind, dir = tree.stats.get(“Wind”, timeRange, mergeMethod=“Max”)**
**     ****avgWind, dir = tree.stats.get(“Wind”, timeRange, mergeMethod=“Avg”)**
**	****maxWind = (maxWind + avgWind) / 2**
- Results in a slightly lower maxWind value used to develop phrasing in vector_mag_hook
- This is a “band-aid” approach  however after testing several different sampling combinations, this one worked very well

## Wind Speed Fixes (2)

- Changed value in **marineRounding** method from “5” to “1”  resulted in much more accurate wind speeds:
-  	def marineRounding(self, value, mode, increment, mixFlag):
-            mode = “Nearest”
- 	      ..........
- 	       return self.round(value, mode, **1**)
- Issue:  at low wind speeds this change will sometimes result in an off phrase (like “6 TO 11 KNOTS” or “7 TO 12 KNOTS”)  must correct these phrases in the _postProcessProduct method

## Wind Speed Fixes (3)

- Include wind speed in moderated_dict method to eliminate the highest values:
-    **def moderated_dict(self, parmHisto, timeRange, componentName):**
**	****      ****dict[“Wind”] = (0, 20)**
**	****      ****return dict**

## Inland Waters Phrase Changes

- Added in chop_phrase method
- Use BASE version of chop_setUp instead of the Southern Region CWF_Local one  this version was not working for us
- Amend chop_words method to get the phrasing we want

## chop_setUp method

- Set inlandWaters = self._chopAreas(tree, node)

## chop_words method (1)

- Sample wind speeds twice in this method (similar to what we did in vector_mag_hook method for wind)
- Takes an average of the maximum wind and average wind, rather than just using the max wind to determine your chop phrase
- 	def chop_words(self, tree, node):
- 		statDict = node.getStatDict()
- 		stats = self.getStats(statDict, “Wind”)
- 		.....
- 		timeRange = node.parent.getTimeRange()
- 		**maxWind, dir = tree.stats.get(“Wind”, timeRange, **
**                   ****mergeMethod = “Max”)**
**	****	****avgWind, dir = tree.stats.get(“Wind”, timeRange,**
**                   ****mergeMethod = “Avg”)**
**	****	****maxWind = (maxWind + avgWind) / 2**

## chop_words method (2)

## chop_words method (3)