############################## ### 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") ${hycType} in... #end #if(${hycType} != "" && ${alaska} == "true") ${hycType}... #end #if(${alaska}=="true") !**INSERT RIVER/STREAM OR AREA**! in !**INSERT GEO AREA**! #elseif(${wrZoneCounty}=="true") #firstBullet(${affectedCounties}) #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 #commaOrEllipsis()${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") #commaOrEllipsis()and moving ## #else #commaOrEllipsis()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}) #commaOrEllipsis()${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#commaOrEllipsis()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#commaOrEllipsis()culverts#commaOrEllipsis()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#commaOrEllipsis()urban areas#commaOrEllipsis()highways#commaOrEllipsis()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#commaOrEllipsis()country roads#commaOrEllipsis()farmland#commaOrEllipsis()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#commaOrEllipsis()streams#commaOrEllipsis()and rivers can become raging killer currents in a matter of minutes#commaOrEllipsis()even from distant rainfall. #end #if(${list.contains(${bullets}, "burnAreasCTA")}) Move away from recently burned areas. Life threatening flooding of creeks#commaOrEllipsis()roads and normally dry arroyos is likely. The heavy rains will likely trigger rockslides#commaOrEllipsis()mudslides and debris flows in steep terrain#commaOrEllipsis()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#commaOrEllipsis()rivers#commaOrEllipsis()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")