133 lines
6.3 KiB
Python
133 lines
6.3 KiB
Python
|
# ----------------------------------------------------------------------------
|
||
|
# 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)
|