awips2/localApps/gfe/userPython/procedures/Fire_Wx_First.py
2022-05-05 12:34:50 -05:00

132 lines
6.3 KiB
Python
Executable file

# ----------------------------------------------------------------------------
# This software is in the public domain, furnished "as is", without technical
# support, and with no warranty, express or implied, as to its usefulness for
# any purpose.
#
# Fire_Wx_First.py
#
# Author: dtomalak
# ----------------------------------------------------------------------------
MenuItems = ["Populate"]
import time
from math import *
import SmartScript
VariableList = [
("Model" , "NAM12", "radio", ["NAM12","NAM40", "GFS40"]),
]
#VariableList.append(("Extrapolate:", "Forward in Time", "radio", ["Forward in Time", "Backward in Time"]))
#VariableList.append(("Movement Speed (Kts):", "15", "numeric"))
#VariableList.append(("This is just a label", "", "label"))
#VariableList.append(("5% Sky Cover threshold at RH percentage:", 60., "scale", [44., 74.],2.0))
class Procedure (SmartScript.SmartScript):
def __init__(self, dbss):
SmartScript.SmartScript.__init__(self, dbss)
def execute(self, varDict):
self.loadWEGroup("FireWx")
fwModel = varDict["Model"]
self.saveObject("FireModel", fwModel, "ModelType")
hour = int(time.strftime('%H', time.gmtime(time.time())))
if hour > 3 and hour < 16:
starttime = 12
endtime = 61
elif hour < 3:
starttime = 0
endtime = 61
else:
starttime = 12
endtime = 73
# Clean up old data
print('Create_Fire_With_Smoke: Deleting old grids.')
tr = self.createTimeRange(starttime, endtime, mode="Zulu")
self.deleteCmd(['MaxRH', 'MinRH', 'Haines', 'MixHgt', 'TransWind', 'VentRate'],tr)
if fwModel == "NAM12" or fwModel == "NAM40":
print('Create_Fire_With_Smoke: Creating new scratch grids.')
self.createFromScratchCmd(['MaxRH', 'MinRH'], tr)
self.createFromScratchCmd(['MixHgt'], tr, 3, 1)
self.createFromScratchCmd(['TransWind'], tr, 3, 1)
self.createFromScratchCmd(['VentRate'], tr, 3, 1)
self.createFromScratchCmd(['MixHgt'], tr, 3, 1)
self.createFromScratchCmd(['Haines'], tr, 3, 1)
# self.createFromScratchCmd(['TransWindAve'], tr, 3, 1)
# self.createFromScratchCmd(['VentRateAve'], tr, 3, 1)
# self.createFromScratchCmd(['HainesAve'], tr, 3, 1)
# self.createFromScratchCmd(['HrsOfSun'], tr, 12, 12)
self.createFromScratchCmd(['LAL'], tr, 6, 6)
### self.createFromScratchCmd(['RFD'], tr, 3, 1)
else:
print('Create_Fire_With_Smoke: Creating new scratch grids.')
self.createFromScratchCmd(['MaxRH', 'MinRH'], tr)
self.createFromScratchCmd(['MixHgt'], tr, 6, 1)
self.createFromScratchCmd(['TransWind'], tr, 6, 1)
self.createFromScratchCmd(['VentRate'], tr, 6, 1)
# self.createFromScratchCmd(['MixHgtAve'], tr, 6, 1)
# self.createFromScratchCmd(['TransWindAve'], tr, 6, 1)
# self.createFromScratchCmd(['VentRateAve'], tr, 6, 1)
self.createFromScratchCmd(['Haines'], tr, 6, 1)
# self.createFromScratchCmd(['HrsOfSun'], tr, 12, 12)
self.createFromScratchCmd(['LAL'], tr, 6, 6)
### self.createFromScratchCmd(['RFD'], tr, 3, 1)
# QC the dewpoint, then populate the RH, then MinRH MaxRH
print('Create_Fire_With_Smoke: Running Td and RH tools.')
## self.callSmartTool("Td_SmartTool", "Td", None, tr, missingDataMode="skip")
## self.callSmartTool("RHTool","RH", None, tr, missingDataMode="create")
self.callSmartTool("MaxRH_Tool","MaxRH", None, tr, missingDataMode="skip")
self.callSmartTool("MinRH_Tool","MinRH", None, tr, missingDataMode="skip")
# Populate the smoke parameters
print('Create_Fire_With_Smoke: Starting Haines.')
self.callSmartTool("Haines", "Haines", None, tr, missingDataMode="skip")
print('Create_Fire_With_Smoke: Starting Mixing Hgt.')
self.callSmartTool("MixHgt_FWF", "MixHgt", None, tr, missingDataMode="skip")
print('Create_Fire_With_Smoke: Starting Transport Winds.')
self.callSmartTool("TransWind_NoVar", "TransWind", None, tr, missingDataMode="skip")
#print 'Create_Fire_With_Smoke: Starting Vent Rate.'
self.callSmartTool("VentRate", "VentRate", None, tr, missingDataMode="skip")
print('Create_Fire_With_Smoke: Starting LAL.')
self.callSmartTool("LAL_Tool", "LAL", None, tr, missingDataMode="create")
# self.callSmartTool("CalculateRFD", "RFD", None, tr, missingDataMode="create")
# Interpolate the smoke parameters to hourly grids
print('Create_Fire_With_Smoke: Interpolating Grids.')
self.interpolateCmd(["MixHgt", "VentRate", "TransWind", "Haines"], tr, "GAPS", "SYNC", interval = 1)
# Populate the afternoon average smoke parameters for the ZFP
# print 'Create_Fire_With_Smoke: Starting Average Mixing Hgt.'
# self.callSmartTool("MixHgtAve", "MixHgtAve", None, tr, missingDataMode="skip")
# print 'Create_Fire_With_Smoke: Starting Average Transport Winds.'
# self.callSmartTool("TransWindAve", "TransWindAve", None, tr, missingDataMode="skip")
# print 'Create_Fire_With_Smoke: Starting Average Vent Rate.'
# self.callSmartTool("VentRateAve", "VentRateAve", None, tr, missingDataMode="skip")
# Calculate the hours of sun
# print 'Create_Fire_With_Smoke: Starting hours of sun.'
# def execute(self, editArea, timeRange, varDict):
# new_timeRange = self.createTimeRange(06, 78, mode="Zulu")
# self.createFromScratchCmd(['HrsOfSun'], new_timeRange, 24, 24)
# self.callSmartTool("Calc_Hours_of_Sun","HrsOfSun", None, tr, missingDataMode="skip")
##############
### Added by Dergan for calculation of RFD (9/14/07) ###
##############
## dur = 10
## startt = 14
## timelength = dur + startt
## rfd_tr = self.createTimeRange(startt, timelength, "Zulu")
## self.createFromScratchCmd(['RFD'], rfd_tr, 1, 1)
## self.callSmartTool("CalculateRFD", "RFD", None, rfd_tr, varDict)
## self.createFromScratchCmd(['RFDmax'], rfd_tr, 0, timelength)
## self.callSmartTool("RFDmax", "RFDmax", None, rfd_tr, varDict)