395 lines
16 KiB
Text
395 lines
16 KiB
Text
##############################
|
|
### AREAL FLOOD WARNING ######
|
|
##############################
|
|
## RECENT VERSION HISTORY:
|
|
## Mike Dangelo 2-6-2013 added satellite estimate logic
|
|
## Mike Dangelo 5-2-2013 removed redundant entry/logic for specific stream
|
|
## Mike Dangelo 9-16-2013 fixed name of bullet for specific stream and removed redundant CTA
|
|
## Mike Dangelo 09-18-2013 added code for init pos & pathcasting
|
|
## Evan Bookbinder 9-18-2013 implemented config.vm
|
|
## Mike Rega 01-18-2014 added Alaska GP changes for 14.2.1
|
|
## Mike Rega 02-26-2014 changed MND to IMMEDIATE BROADCAST
|
|
## Phil Kurimski 06-24-2014 rewrote code for storm position to account for non-thunderstorm events
|
|
## Evan Bookbinder 9-5-2014 corrected first bullet wording if hycType and urban/small stream were selected
|
|
## Mike Dangelo 3-26-2015 Mixed Case changes
|
|
## Evan Bookbinder 9-4-2015 fixed line of storms grammar
|
|
## Mike Dangelo 10-20-2015 Standard CTAs
|
|
## Evan Bookbinder 12-07-2016 Fixed inconsistencies with law enforcement and EM source text DR18713
|
|
#################################### SET SOME VARIABLES ###################################
|
|
#parse("config.vm")
|
|
##
|
|
#if(${action} == "EXT")
|
|
#set($starttime = "000000T0000Z")
|
|
#set($extend = true)
|
|
#else
|
|
#set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})})
|
|
#set($extend = false)
|
|
#end
|
|
##
|
|
#set($ic = "ER")
|
|
#set($hycType = "")
|
|
#if(${list.contains(${bullets}, "er")})
|
|
#set($ic = "ER")
|
|
#set($hycType = "")
|
|
#elseif(${list.contains(${bullets}, "sm")})
|
|
#set($ic = "SM")
|
|
#set($hycType = "Snowmelt")
|
|
#elseif(${list.contains(${bullets}, "dm")})
|
|
#set($ic = "DM")
|
|
#set($hycType = "A Levee Failure")
|
|
#elseif(${list.contains(${bullets}, "dr")})
|
|
#set($ic = "DR")
|
|
#set($hycType = "A Dam Floodgate Release")
|
|
#elseif(${list.contains(${bullets}, "rs")})
|
|
#set($ic = "RS")
|
|
#set($hycType = "Rain and Snowmelt")
|
|
#elseif(${list.contains(${bullets}, "ij")})
|
|
#set($ic = "IJ")
|
|
#set($hycType = "An Ice Jam")
|
|
#elseif(${list.contains(${bullets}, "ic")})
|
|
#set($ic = "IC")
|
|
#set($hycType = "")
|
|
#elseif(${list.contains(${bullets}, "go")})
|
|
#set($ic = "GO")
|
|
#set($hycType = "A Glacier-Dammed Lake Outburst")
|
|
#elseif(${list.contains(${bullets}, "mc")})
|
|
#set($ic = "MC")
|
|
#set($hycType = "")
|
|
#elseif(${list.contains(${bullets}, "uu")})
|
|
#set($ic = "UU")
|
|
#set($hycType = "")
|
|
#end
|
|
#if(${list.contains(${bullets}, "smallstreams")})
|
|
#if(${hycType} != "")
|
|
#set($advType = "Flood Warning for Small Streams for...")
|
|
#else
|
|
#set($advType = "Flood Warning for Small Streams in...")
|
|
#end
|
|
#elseif(${list.contains(${bullets}, "urbansmallstreams")})
|
|
#if(${hycType} != "")
|
|
#set($advType = "Flood Warning for Urban Areas and Small Streams for...")
|
|
#else
|
|
#set($advType = "Flood Warning for Urban Areas and Small Streams in...")
|
|
#end
|
|
#else
|
|
#set($advType = "Flood Warning for...")
|
|
#end
|
|
##
|
|
${WMOId} ${vtecOffice} 000000 ${BBBId}
|
|
${productId}${siteId}
|
|
|
|
BULLETIN - IMMEDIATE BROADCAST REQUESTED
|
|
#if(${productClass}=="T")
|
|
TEST...Flood Warning...TEST
|
|
#else
|
|
Flood Warning
|
|
#end
|
|
National Weather Service ${officeShort}
|
|
#backupText(${backupSite})
|
|
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
|
|
|
|
|
|
${ugcline}
|
|
/${productClass}.${action}.${vtecOffice}.FA.W.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
|
|
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
|
|
#foreach (${area} in ${areas})
|
|
#capitalize(${area.name} "FIRST")
|
|
#if(${includeStateAbbreviation}==true)
|
|
${area.stateabbr}##
|
|
#end
|
|
-##
|
|
#end
|
|
|
|
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
|
|
|
|
|
|
#if(${productClass}=="T")
|
|
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
|
|
|
|
#end
|
|
#headlineext(${officeLoc}, ${backupSite}, ${extend})
|
|
|
|
#################################
|
|
######## FIRST BULLET ###########
|
|
#################################
|
|
* ##
|
|
#if(${productClass}=="T")
|
|
THIS IS A TEST MESSAGE. ##
|
|
#end
|
|
${advType}
|
|
### modified by GP
|
|
#if(${hycType} != "" && ${alaska} != "true")
|
|
<L> ${hycType} in...</L>
|
|
#end
|
|
#if(${hycType} != "" && ${alaska} == "true")
|
|
<L> ${hycType}...</L>
|
|
#end
|
|
#if(${alaska}=="true")
|
|
!**INSERT RIVER/STREAM OR AREA**! in !**INSERT GEO AREA**!
|
|
#elseif(${wrZoneCounty}=="true")
|
|
#firstBullet(${affectedZones})
|
|
#else
|
|
#firstBullet(${areas})
|
|
#end
|
|
### GP end
|
|
|
|
#################################
|
|
######## SECOND BULLET ##########
|
|
#################################
|
|
* ##
|
|
#if(${productClass}=="T")
|
|
THIS IS A TEST MESSAGE. ##
|
|
#end
|
|
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
|
|
|
|
#set($report = "!**YOU DID NOT SELECT EITHER A /SOURCE/ BULLET OR AN /EVENT/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!")
|
|
#set($rainAmount = "")
|
|
#if(${list.contains(${bullets}, "doppler")})
|
|
#set($report = "Doppler radar indicated heavy rain that will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
|
|
#set($report = "Doppler radar indicated thunderstorms producing heavy rain which will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "dopplerGauge")})
|
|
#set($report = "Doppler radar and automated rain gauges indicated that heavy rain was falling over the area. The heavy rain will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
|
|
#set($report = "Doppler radar and automated rain gauges indicated thunderstorms with heavy rain over the area. The rain will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
|
|
#set($report = "trained weather spotters reported heavy rain in !** LOCATION **! due to thunderstorms that will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "floodOccurring")})
|
|
#set($report = "trained weather spotters reported flooding in !** LOCATION **!.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
|
|
#set($report = "trained weather spotters reported heavy rain in !** LOCATION **! that will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
|
|
#set($report = "local law enforcement reported thunderstorms with heavy rain over !** LOCATION **! that will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "floodOccurring")})
|
|
#set($report = "local law enforcement reported flooding in !** LOCATION **!.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
|
|
#set($report = "local law enforcement reported heavy rain in !** LOCATION **! that will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
|
|
#set($report = "emergency management reported thunderstorms with heavy rain in !** LOCATION **!. The heavy rain will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "floodOccurring")})
|
|
#set($report = "emergency management reported flooding in !** LOCATION **!.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
|
|
#set($report = "emergency management reported heavy rain in !** LOCATION **!. The heavy rain will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
|
|
#set($report = "the public reported thunderstorms with heavy rain in !** LOCATION **!. The heavy rain will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "floodOccurring")})
|
|
#set($report = "the public reported flooding in !** LOCATION **!.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
|
|
#set($report = "the public reported heavy rain in !** LOCATION **!. That heavy rain will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "satellite")})
|
|
#set($report = "satellite estimates indicate heavy rain in !** LOCATION **!. The heavy rain will cause flooding.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "satelliteGauge")})
|
|
#set($report = "satellite estimates and rain gauge data indicate heavy rainfall that will cause flooding in the warning area.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "onlyGauge")})
|
|
#set($report = "reporting gauges indicate !**EVENT TYPE**!." )
|
|
#end
|
|
#if(${list.contains(${bullets}, "genericFlood")})
|
|
#set($report = "!** ENTER REASON AND FORECAST FOR FLOOD **!")
|
|
#end
|
|
#if(${list.contains(${bullets}, "rain1")} )
|
|
#set($rainAmount = "Up to one inch of rain has already fallen.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "rain2")} )
|
|
#set($rainAmount = "Up to two inches of rain have already fallen.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "rain3")} )
|
|
#set($rainAmount = "Up to three inches of rain have already fallen.")
|
|
#end
|
|
#if(${list.contains(${bullets}, "rainEdit")} )
|
|
#set($rainAmount = "!** RAINFALL AMOUNTS **! inches of rain have fallen.")
|
|
#end
|
|
|
|
#################################
|
|
######## THIRD BULLET ###########
|
|
#################################
|
|
* ##
|
|
#if(${productClass}=="T")
|
|
THIS IS A TEST MESSAGE. ##
|
|
#end
|
|
############# IF TRACK IS ENABLED AND stormPosition SELECTED ###############################################
|
|
#if(${list.contains(${bullets},"stormPosition")})
|
|
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
|
|
#set($phenom="")
|
|
#set($waswere="was")
|
|
#if(${stormType} == "line" && ${list.contains(${bullets}, "thunder")})
|
|
#set($phenom="thunderstorms producing ")
|
|
#set($waswere="were")
|
|
#elseif(${list.contains(${bullets}, "thunder")})
|
|
#set($phenom="a thunderstorm producing ")
|
|
#end
|
|
, ${phenom}heavy rain ${waswere} located ##
|
|
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
|
|
#if(${movementSpeed} < ${landStationary} || ${stationary})
|
|
. Movement is stationary. ##
|
|
#else
|
|
#if(${stormType} == "line")
|
|
, and moving ##
|
|
#else
|
|
, moving ##
|
|
#end
|
|
#direction(${movementDirectionRounded}) at ${mathUtil.roundTo5(${movementSpeed})} mph. ##
|
|
#end
|
|
${rainAmount}
|
|
#else
|
|
###############IF TRACK IS NOT ENABLED OR stormPosition IS NOT SELECTED #######################################
|
|
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
|
|
, ${report} ${rainAmount}
|
|
#end
|
|
|
|
#############################################################
|
|
######## FOURTH BULLET (OPTIONAL IN FLOOD PRODUCTS) #########
|
|
#############################################################
|
|
############# IF TRACK IS ENABLED AND pathcast AND stormPosition BOTH SELECTED ###############################################
|
|
#if(${list.contains(${bullets},"pathcast")} && ${list.contains(${bullets}, "stormPosition")})
|
|
* ##
|
|
#if(${productClass}=="T")
|
|
THIS IS A TEST MESSAGE. ##
|
|
#end
|
|
#if($movementSpeed < 3 )
|
|
#pathCast("Heavy rain will continue over the following locations..." "heavy rain" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
|
|
|
|
#else
|
|
#pathCast("Heavy rain will move over the following locations..." "heavy rain" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
|
|
|
|
#end
|
|
#end
|
|
################
|
|
#if(${list.contains(${bullets}, "listofcities")})
|
|
* ##
|
|
#if(${productClass}=="T")
|
|
THIS IS A TEST MESSAGE. ##
|
|
#end
|
|
#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN
|
|
#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT
|
|
#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE
|
|
#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH!
|
|
#locationsList("Some locations that will experience flooding include..." "flooding" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
|
|
|
|
#end
|
|
|
|
########################################## END OF FOURTH BULLET ##############################
|
|
######################################
|
|
###### WHERE ADD INFO GOES ###########
|
|
######################################
|
|
#if(${list.contains(${bullets}, "addRainfall")})
|
|
Additional rainfall amounts of !** EDIT AMOUNT **! are possible in the warned area.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "drainages")})
|
|
#drainages(${riverdrainages})
|
|
|
|
#end
|
|
|
|
#if(${list.contains(${bullets}, "specificStream")})
|
|
Flood waters are moving down !**NAME OF CHANNEL**! from !**LOCATION**! to !**LOCATION**!. The flood crest is expected to reach !**LOCATION(S)**! by !**TIME(S)**!.
|
|
|
|
#end
|
|
## parse file commands here pull in mile marker and/or point marker info
|
|
## #parse("mileMarkers.vm")
|
|
## #parse("pointMarkers.vm")
|
|
|
|
#################################### END OF ADDITIONAL STUFF ###################################
|
|
######################################
|
|
####### CALL TO ACTIONS ##############
|
|
######################################
|
|
##Check to see if we've selected any calls to action. In our .xml file
|
|
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
|
|
#foreach (${bullet} in ${bullets})
|
|
#if(${bullet.endsWith("CTA")})
|
|
#set($ctaSelected = "YES")
|
|
#end
|
|
#end
|
|
##
|
|
#if(${ctaSelected} == "YES")
|
|
PRECAUTIONARY/PREPAREDNESS ACTIONS...
|
|
|
|
#end
|
|
##
|
|
#if(${list.contains(${bullets}, "TADD_CTA")})
|
|
Turn around, don't drown when encountering flooded roads. Most flood deaths occur in vehicles.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "actQuicklyCTA")})
|
|
Move to higher ground now. Act quickly to protect your life.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "childSafetyCTA")})
|
|
Keep children away from storm drains, culverts, creeks and streams. Water levels can rise rapidly and sweep children away.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "nighttimeCTA")})
|
|
Be especially cautious at night when it is harder to recognize the dangers of flooding.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "urbanCTA")})
|
|
Excessive runoff from heavy rainfall will cause flooding of small creeks and streams, urban areas, highways, streets and underpasses as well as other drainage areas and low lying spots.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "ruralCTA")})
|
|
Excessive runoff from heavy rainfall will cause flooding of small creeks and streams, country roads, farmland, and other low lying spots.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "stayAwayCTA")})
|
|
Stay away or be swept away. River banks and culverts can become unstable and unsafe.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "lowSpotsCTA")})
|
|
In hilly terrain there are hundreds of low water crossings which are potentially dangerous in heavy rain. Do not attempt to cross flooded roads. Find an alternate route.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "arroyosCTA")})
|
|
Remain alert for flooding even in locations not receiving rain. Arroyos, streams, and rivers can become raging killer currents in a matter of minutes, even from distant rainfall.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "burnAreasCTA")})
|
|
Move away from recently burned areas. Life threatening flooding of creeks, roads and normally dry arroyos is likely. The heavy rains will likely trigger rockslides, mudslides and debris flows in steep terrain, especially in and around these areas.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "camperSafetyCTA")})
|
|
Flooding is occurring or is imminent. It is important to know where you are relative to streams, rivers, or creeks which can become killers in heavy rains. Campers and hikers should avoid streams or creeks.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "reportFloodingCTA")})
|
|
Please report flooding to your local law enforcement agency when you can do so safely.
|
|
|
|
#end
|
|
#if(${list.contains(${bullets}, "warningMeansCTA")})
|
|
A Flood Warning means that flooding is imminent or occurring. All interested parties should take necessary precautions immediately.
|
|
|
|
#end
|
|
#if(${ctaSelected} == "YES")
|
|
&&
|
|
|
|
#end
|
|
#################################### END OF CTA STUFF ###################################
|
|
##########################################
|
|
########BOTTOM OF THE PRODUCT#############
|
|
##########################################
|
|
#if(${productClass}=="T")
|
|
THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
|
|
|
|
#end
|
|
#printcoords(${areaPoly}, ${list})
|
|
|
|
|
|
$$
|
|
|
|
#parse("forecasterName.vm")
|