Title: Local CWF Formatter Changes
1Local CWF Formatter Changes
- Matt Moreland
- NWSFO HGX
- April 2004
2Common 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
3Factors 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 doesnt work that well
for us ? usually edited by hand
4Factors 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)
5Factors 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
6Our 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
7Our 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
8Two Possible Wave Height Fixes(suggested by
Edward Tirado)
- Change WaveHeight sampling method
frommoderatedMax to moderatedMinMax - ? use a 6 hour sampling period
-
- -- OR
- Add WaveHeight to moderated_dict method to weed
out the highest values
9moderated_dict Method
def moderated_dict (self, parmHisto, timeRange,
componentName) dictWind (0,
20) dictWaveHeight (0, 20) return
dict This method will weed out highest 20 of
Wind and WaveHeight values when data sampling
takes place.
10Sampling 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
11wave_range Method
12Changes 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
13Wind Speed Fixes (1)
- Sample wind speed twice in the vector_mag_hook
method - maxWind, dir tree.stats.get(Wind, timeRange,
mergeMethodMax) - avgWind, dir tree.stats.get(Wind,
timeRange, mergeMethodAvg) - 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
14Wind 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
15Wind Speed Fixes (3)
- Include wind speed in moderated_dict method to
eliminate the highest values -
- def moderated_dict(self, parmHisto, timeRange,
componentName) - dictWind (0, 20)
- return dict
16Inland 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
17chop_setUp method
Set inlandWaters self._chopAreas(tree, node)
18chop_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
19chop_words method (2)
20chop_words method (3)