Merge tag 'OB_15.1.1-16' into omaha_15.1.1
15.1.1-16 Former-commit-id: be04bc4173d6097f54100f1b033770fa96376689
This commit is contained in:
commit
d0b6d48b74
42 changed files with 1035 additions and 950 deletions
|
@ -69,7 +69,7 @@ copyVizShutdownUtilIfNecessary
|
||||||
deleteOldCaveDiskCaches &
|
deleteOldCaveDiskCaches &
|
||||||
|
|
||||||
# Enable core dumps
|
# Enable core dumps
|
||||||
ulimit -c unlimited
|
ulimit -c unlimited >> /dev/null 2>&1
|
||||||
|
|
||||||
export LD_LIBRARY_PATH=${JAVA_INSTALL}/lib:${PYTHON_INSTALL}/lib:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=${JAVA_INSTALL}/lib:${PYTHON_INSTALL}/lib:$LD_LIBRARY_PATH
|
||||||
export LD_PRELOAD=libpython.so
|
export LD_PRELOAD=libpython.so
|
||||||
|
@ -207,14 +207,14 @@ deleteOldCaveLogs &
|
||||||
|
|
||||||
curTime=`date +%Y%m%d_%H%M%S`
|
curTime=`date +%Y%m%d_%H%M%S`
|
||||||
|
|
||||||
|
pid=$!
|
||||||
|
export LOGFILE_STARTUP_SHUTDOWN="${LOGDIR}/${PROGRAM_NAME}_${pid}_${curTime}_pid_%PID%_startup-shutdown.log"
|
||||||
|
|
||||||
# At this point fork so that log files can be set up with the process pid and
|
# At this point fork so that log files can be set up with the process pid and
|
||||||
# this process can log the exit status of cave.
|
# this process can log the exit status of cave.
|
||||||
(
|
(
|
||||||
export pid=`/bin/bash -c 'echo $PPID'`
|
|
||||||
|
|
||||||
# we include the PID of the launching process along with
|
# we include the PID of the launching process along with
|
||||||
# a %PID% placeholder to be replaced with the "real" PID
|
# a %PID% placeholder to be replaced with the "real" PID
|
||||||
LOGFILE_STARTUP_SHUTDOWN="${LOGDIR}/${PROGRAM_NAME}_${pid}_${curTime}_pid_%PID%_startup-shutdown.log"
|
|
||||||
export LOGFILE_CAVE="${LOGDIR}/${PROGRAM_NAME}_${curTime}_pid_%PID%_logs.log"
|
export LOGFILE_CAVE="${LOGDIR}/${PROGRAM_NAME}_${curTime}_pid_%PID%_logs.log"
|
||||||
export LOGFILE_CONSOLE="${LOGDIR}/${PROGRAM_NAME}_${curTime}_pid_%PID%_console.log"
|
export LOGFILE_CONSOLE="${LOGDIR}/${PROGRAM_NAME}_${curTime}_pid_%PID%_console.log"
|
||||||
export LOGFILE_PERFORMANCE="${LOGDIR}/${PROGRAM_NAME}_${curTime}_pid_%PID%_perf.log"
|
export LOGFILE_PERFORMANCE="${LOGDIR}/${PROGRAM_NAME}_${curTime}_pid_%PID%_perf.log"
|
||||||
|
@ -260,7 +260,5 @@ curTime=`date +%Y%m%d_%H%M%S`
|
||||||
) &
|
) &
|
||||||
|
|
||||||
pid=$!
|
pid=$!
|
||||||
LOGFILE_STARTUP_SHUTDOWN="${LOGDIR}/${PROGRAM_NAME}_${pid}_${curTime}_pid_%PID%_startup-shutdown.log"
|
|
||||||
logExitStatus $pid $LOGFILE_STARTUP_SHUTDOWN
|
logExitStatus $pid $LOGFILE_STARTUP_SHUTDOWN
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,12 +19,15 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.viz.aviation.observer;
|
package com.raytheon.viz.aviation.observer;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXB;
|
||||||
|
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.events.SelectionAdapter;
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
import org.eclipse.swt.events.SelectionEvent;
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
@ -38,6 +41,7 @@ import org.eclipse.swt.widgets.Layout;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
import org.eclipse.swt.widgets.Spinner;
|
import org.eclipse.swt.widgets.Spinner;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.localization.IPathManager;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
|
@ -51,6 +55,9 @@ import com.raytheon.uf.viz.core.requests.ThriftClient;
|
||||||
import com.raytheon.viz.aviation.AviationDialog;
|
import com.raytheon.viz.aviation.AviationDialog;
|
||||||
import com.raytheon.viz.aviation.editor.EditorTafTabComp;
|
import com.raytheon.viz.aviation.editor.EditorTafTabComp;
|
||||||
import com.raytheon.viz.aviation.resource.ResourceConfigMgr;
|
import com.raytheon.viz.aviation.resource.ResourceConfigMgr;
|
||||||
|
import com.raytheon.viz.aviation.xml.AviationForecasterConfig;
|
||||||
|
import com.raytheon.viz.aviation.xml.ForecasterConfig;
|
||||||
|
import com.raytheon.viz.avnconfig.AvnConfigFileUtil;
|
||||||
import com.raytheon.viz.avnconfig.IStatusSettable;
|
import com.raytheon.viz.avnconfig.IStatusSettable;
|
||||||
import com.raytheon.viz.avnconfig.ITafSiteConfig;
|
import com.raytheon.viz.avnconfig.ITafSiteConfig;
|
||||||
import com.raytheon.viz.avnconfig.TafSiteConfigFactory;
|
import com.raytheon.viz.avnconfig.TafSiteConfigFactory;
|
||||||
|
@ -71,6 +78,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||||
* 09OCT2012 1229 rferrel Make dialog non-blocking.
|
* 09OCT2012 1229 rferrel Make dialog non-blocking.
|
||||||
* 0yJUN2013 1981 mpduff Set user on the request.
|
* 0yJUN2013 1981 mpduff Set user on the request.
|
||||||
* 06May2014 3091 rferrel Use OUP authorization to bring up send dialog.
|
* 06May2014 3091 rferrel Use OUP authorization to bring up send dialog.
|
||||||
|
* 20May2015 4510 rferrel Added {@link #getForecasterId()}.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -83,6 +91,11 @@ public class SendDialog extends CaveSWTDialog {
|
||||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(SendDialog.class);
|
.getHandler(SendDialog.class);
|
||||||
|
|
||||||
|
/** Site file to use to find user's forecater id. */
|
||||||
|
private final String FORECAST_CONFIG_FILE = "aviation"
|
||||||
|
+ IPathManager.SEPARATOR + "avnwatch" + IPathManager.SEPARATOR
|
||||||
|
+ "aviationForecasterConfig.xml";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expression to find time stamp in a TAF.
|
* Expression to find time stamp in a TAF.
|
||||||
*/
|
*/
|
||||||
|
@ -347,12 +360,16 @@ public class SendDialog extends CaveSWTDialog {
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private void sendAction() {
|
private void sendAction() {
|
||||||
|
// Forecaster ID
|
||||||
|
String forecasterId = getForecasterId();
|
||||||
|
if (forecasterId == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
TafQueueRequest request = new TafQueueRequest();
|
TafQueueRequest request = new TafQueueRequest();
|
||||||
request.setType(Type.CREATE);
|
request.setType(Type.CREATE);
|
||||||
request.setUser(UserController.getUserObject());
|
request.setUser(UserController.getUserObject());
|
||||||
|
|
||||||
// Forecaster ID
|
|
||||||
String forecasterId = forecasterLabel.getText();
|
|
||||||
Calendar xmitTime = Calendar.getInstance();
|
Calendar xmitTime = Calendar.getInstance();
|
||||||
xmitTime.setTimeZone(TimeZone.getTimeZone("GMT"));
|
xmitTime.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||||
xmitTime.set(Calendar.HOUR_OF_DAY, hourSpnr.getSelection());
|
xmitTime.set(Calendar.HOUR_OF_DAY, hourSpnr.getSelection());
|
||||||
|
@ -507,4 +524,49 @@ public class SendDialog extends CaveSWTDialog {
|
||||||
|
|
||||||
return type + "A";
|
return type + "A";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine forcaster's id for the user. When none found return the
|
||||||
|
* {@link #DEFAULT_ID}. This string will be in the VFT product.
|
||||||
|
*
|
||||||
|
* @return forecasterId - padded to 3 character so an id of 1 will return
|
||||||
|
* 001
|
||||||
|
*/
|
||||||
|
private String getForecasterId() {
|
||||||
|
File f = AvnConfigFileUtil.getStaticFile(FORECAST_CONFIG_FILE);
|
||||||
|
ArrayList<ForecasterConfig> fcList = null;
|
||||||
|
String forecasterName = AviationDialog.getForecaster();
|
||||||
|
|
||||||
|
if (f == null) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
|
"Cannot send the TAF. Unable to load, "
|
||||||
|
+ FORECAST_CONFIG_FILE
|
||||||
|
+ ", unable to obtain forecaster's ID. ");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
fcList = JAXB.unmarshal(f, AviationForecasterConfig.class)
|
||||||
|
.getForecasterConfig();
|
||||||
|
} catch (RuntimeException ex) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
|
"Cannot send the TAF. Unable to parse, "
|
||||||
|
+ FORECAST_CONFIG_FILE
|
||||||
|
+ ", unable to obtain forecaster's ID. ", ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fcList != null) && !fcList.isEmpty()) {
|
||||||
|
for (ForecasterConfig fc : fcList) {
|
||||||
|
if (forecasterName.equals(fc.getName())) {
|
||||||
|
return fc.getFormattedId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
|
"Cannot send the TAF. No forecaster ID for " + forecasterName
|
||||||
|
+ " in " + FORECAST_CONFIG_FILE + ".");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.viz.aviation.xml;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Aviation Forecaster Configuration
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* 2/7/2008 817 grichard Initial Creation.
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author grichard
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@XmlRootElement(name = "aviationForecasterConfig")
|
||||||
|
@XmlAccessorType(XmlAccessType.NONE)
|
||||||
|
public class AviationForecasterConfig implements ISerializableObject {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The aviation forecaster configuration.
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "forecaster")
|
||||||
|
private ArrayList<ForecasterConfig> forecasterConfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method that gets the aviation forecaster configuration
|
||||||
|
*
|
||||||
|
* @return forecasterConfig
|
||||||
|
*/
|
||||||
|
public ArrayList<ForecasterConfig> getForecasterConfig() {
|
||||||
|
return forecasterConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method that sets the aviation forecaster configuration
|
||||||
|
*
|
||||||
|
* @param forecasterConfig
|
||||||
|
* -- the aviation forecaster configuration
|
||||||
|
*/
|
||||||
|
public void setForecasterConfig(ArrayList<ForecasterConfig> forecasterConfig) {
|
||||||
|
this.forecasterConfig = forecasterConfig;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.viz.aviation.xml;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forecaster Configuration class
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* 2/6/2008 817 grichard Initial creation
|
||||||
|
* 5/20/2015 4510 rferrel Added {@link #getFormattedId()}.
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author grichard
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@XmlAccessorType
|
||||||
|
public class ForecasterConfig {
|
||||||
|
/**
|
||||||
|
* The forecaster's id number
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "id")
|
||||||
|
private int forecasterId = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The forecaster's name
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "name")
|
||||||
|
private String forecasterName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The forecaster's transmit privilege
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "xmit")
|
||||||
|
private String xmitPrivilege;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getters and setters
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return forecasterName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getXmitPrivilege() {
|
||||||
|
return Boolean.parseBoolean(xmitPrivilege);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return forecasterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This formats the id to a 3 character string needed for generating the VFT
|
||||||
|
* products.
|
||||||
|
*
|
||||||
|
* @return formattedId
|
||||||
|
*/
|
||||||
|
public String getFormattedId() {
|
||||||
|
return String.format("%1$03d", forecasterId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.forecasterName = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setXmit(boolean privilege) {
|
||||||
|
this.xmitPrivilege = Boolean.toString(privilege);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.forecasterId = id;
|
||||||
|
}
|
||||||
|
}
|
|
@ -61,7 +61,8 @@ import com.raytheon.viz.avnconfig.AvnConfigConstants.RuleType;
|
||||||
* Sep 27, 2011 10958 rferrel Added checks for required fields in
|
* Sep 27, 2011 10958 rferrel Added checks for required fields in
|
||||||
* configuration files.
|
* configuration files.
|
||||||
* Aug 07, 2014 3502 bclement changes to StringUtil.split()
|
* Aug 07, 2014 3502 bclement changes to StringUtil.split()
|
||||||
*
|
* Jun 02, 2015 17533 yteng changes to getRules() to retrieve
|
||||||
|
* all rules
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author avarani
|
* @author avarani
|
||||||
|
@ -354,17 +355,18 @@ public class AvnConfiguration {
|
||||||
HierarchicalINIConfiguration config = new HierarchicalINIConfiguration(
|
HierarchicalINIConfiguration config = new HierarchicalINIConfiguration(
|
||||||
file);
|
file);
|
||||||
config.setDelimiterParsingDisabled(true);
|
config.setDelimiterParsingDisabled(true);
|
||||||
String aRules = config.getString("rules.active");
|
|
||||||
if (aRules == null || aRules.trim().isEmpty()) {
|
String[] activeRules = config.getStringArray("rules.active");
|
||||||
|
if (activeRules == null || activeRules.length == 0) {
|
||||||
throw new ConfigurationException(file.getName()
|
throw new ConfigurationException(file.getName()
|
||||||
+ ", no list of active rules");
|
+ ", no list of active rules");
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] activeRules = StringUtil.split(
|
|
||||||
config.getString("rules.active"), ',');
|
|
||||||
|
|
||||||
for (String activeRule : activeRules) {
|
for (String activeRule : activeRules) {
|
||||||
String key = "rule_" + activeRule;
|
if (activeRule.trim().equals("")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String key = "rule_" + activeRule.trim();
|
||||||
String method = config.getString(key + ".method");
|
String method = config.getString(key + ".method");
|
||||||
|
|
||||||
if (method == null) {
|
if (method == null) {
|
||||||
|
|
|
@ -89,7 +89,7 @@ class Procedure (SmartScript.SmartScript):
|
||||||
("How Long Do You Want To Run NWPS:" , 102, "scale", [12, 102], 3),
|
("How Long Do You Want To Run NWPS:" , 102, "scale", [12, 102], 3),
|
||||||
#("NWPS Model Winds:", "ForecastWindGrids", "radio", ["ForecastWindGrids"]),
|
#("NWPS Model Winds:", "ForecastWindGrids", "radio", ["ForecastWindGrids"]),
|
||||||
("Model Start Time:", buttonList[4], "radio", buttonList),
|
("Model Start Time:", buttonList[4], "radio", buttonList),
|
||||||
("Local or NCEP:", "Local", "radio", ["Local","NCEP"]),
|
("Local, NCEP, or Both:", "Both", "radio", ["Local","NCEP","Both"]),
|
||||||
("Model Core:", "SWAN", "radio", ["SWAN","NWW","UNSWAN"]),
|
("Model Core:", "SWAN", "radio", ["SWAN","NWW","UNSWAN"]),
|
||||||
("Send Output to Web:", "Yes", "radio", ["Yes","No"]),
|
("Send Output to Web:", "Yes", "radio", ["Yes","No"]),
|
||||||
("Plot Output Only (No Web):", "No", "radio", ["Yes","No"]),
|
("Plot Output Only (No Web):", "No", "radio", ["Yes","No"]),
|
||||||
|
@ -112,7 +112,7 @@ class Procedure (SmartScript.SmartScript):
|
||||||
fcst_length = processVarList.varDict()["How Long Do You Want To Run NWPS:"]
|
fcst_length = processVarList.varDict()["How Long Do You Want To Run NWPS:"]
|
||||||
wind="ForecastWindGrids"
|
wind="ForecastWindGrids"
|
||||||
modelstarttime = processVarList.varDict()["Model Start Time:"]
|
modelstarttime = processVarList.varDict()["Model Start Time:"]
|
||||||
wheretorun = processVarList.varDict()["Local or NCEP:"]
|
wheretorun = processVarList.varDict()["Local, NCEP, or Both:"]
|
||||||
model = processVarList.varDict()["Model Core:"]
|
model = processVarList.varDict()["Model Core:"]
|
||||||
web = processVarList.varDict()["Send Output to Web:"]
|
web = processVarList.varDict()["Send Output to Web:"]
|
||||||
plot = processVarList.varDict()["Plot Output Only (No Web):"]
|
plot = processVarList.varDict()["Plot Output Only (No Web):"]
|
||||||
|
|
|
@ -16,9 +16,12 @@
|
||||||
# Aug 13, 2014: To rename SurgeHtPlustTide to InundationMax and incorporate InundationTiming. PS
|
# Aug 13, 2014: To rename SurgeHtPlustTide to InundationMax and incorporate InundationTiming. PS
|
||||||
# Sept 17, 2014: To finalize changes and clean up for 2015initial Baseline Check in.
|
# Sept 17, 2014: To finalize changes and clean up for 2015initial Baseline Check in.
|
||||||
#
|
#
|
||||||
# Last Modified: Sept 18, 2014: Added code to pull grids from NHC via ISC if PHISH not
|
# Sept 18, 2014: Added code to pull grids from NHC via ISC if PHISH not
|
||||||
# Available on time. Left inactive (commented out) for the moment until that can be fully tested later
|
# Available on time. Left inactive (commented out) for the moment until that can be fully tested later
|
||||||
# in 2014 or in 2015.
|
# in 2014 or in 2015.
|
||||||
|
#
|
||||||
|
# Last Modified: May 22, 2015 (LEFebvre/Santos): Added option to create null grids and manual grids when
|
||||||
|
# PSURGE not available. Added checks for current guidance for PHISH and ISC options.
|
||||||
#
|
#
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# The MenuItems list defines the GFE menu item(s) under which the
|
# The MenuItems list defines the GFE menu item(s) under which the
|
||||||
|
@ -43,7 +46,11 @@ VariableList = [("DEFAULT: Typical. Should only be changed in coordination with
|
||||||
"Higher (40% Exceedance; for well-behaved systems within 6 hours of the event)",
|
"Higher (40% Exceedance; for well-behaved systems within 6 hours of the event)",
|
||||||
"Highest (50% Exceedance; for well-behaved systems at time of the event)"]),
|
"Highest (50% Exceedance; for well-behaved systems at time of the event)"]),
|
||||||
("Grid Smoothing?", "Yes", "radio", ["Yes","No"]),
|
("Grid Smoothing?", "Yes", "radio", ["Yes","No"]),
|
||||||
("Make grids from PHISH\n or ISC?\n", "PHISH", "radio", ["PHISH", "ISC"]),
|
("Make grids from \nPHISH, ISC, or Manually?", "PHISH", "radio", ["PHISH", "ISC", "Manually"]),
|
||||||
|
("Manual Inundation settings:", "", "label"),
|
||||||
|
("Inundation Height:", 1.0, "scale", [0.0, 2.5], 0.5),
|
||||||
|
("Start Hour for Inundation Timing", 0, "scale", [0.0, 72.0], 6.0),
|
||||||
|
("End Hour for Inundation Timing", 6, "scale", [0.0, 78.0], 6.0),
|
||||||
]
|
]
|
||||||
|
|
||||||
class Procedure (SmartScript.SmartScript):
|
class Procedure (SmartScript.SmartScript):
|
||||||
|
@ -62,6 +69,13 @@ class Procedure (SmartScript.SmartScript):
|
||||||
trList.append(tr)
|
trList.append(tr)
|
||||||
|
|
||||||
return trList
|
return trList
|
||||||
|
|
||||||
|
def baseGuidanceTime(self):
|
||||||
|
startTime = int((self._gmtime().unixTime() - (2 * 3600)) / (6 * 3600)) * (6 * 3600)
|
||||||
|
print "BASETIME IS: ", startTime
|
||||||
|
|
||||||
|
return startTime
|
||||||
|
|
||||||
|
|
||||||
def getAvgTopoGrid(self, topodb):
|
def getAvgTopoGrid(self, topodb):
|
||||||
|
|
||||||
|
@ -105,7 +119,6 @@ class Procedure (SmartScript.SmartScript):
|
||||||
cTime = int(self._gmtime().unixTime()/ 3600) * 3600
|
cTime = int(self._gmtime().unixTime()/ 3600) * 3600
|
||||||
startTime = AbsTime.AbsTime(cTime)
|
startTime = AbsTime.AbsTime(cTime)
|
||||||
endTime = startTime + (hours * 3600)
|
endTime = startTime + (hours * 3600)
|
||||||
threatTR = TimeRange.TimeRange(startTime, endTime)
|
|
||||||
timeRange = TimeRange.TimeRange(startTime, endTime)
|
timeRange = TimeRange.TimeRange(startTime, endTime)
|
||||||
|
|
||||||
return timeRange
|
return timeRange
|
||||||
|
@ -132,25 +145,34 @@ class Procedure (SmartScript.SmartScript):
|
||||||
modelIDList.sort()
|
modelIDList.sort()
|
||||||
|
|
||||||
if len(modelIDList) == 0:
|
if len(modelIDList) == 0:
|
||||||
self.statusBarMsg("No pSurge data found in your inventory.", "S")
|
self.statusBarMsg("No pSurge databases found in your inventory.", "S")
|
||||||
return None, None, None
|
return None
|
||||||
|
|
||||||
# the last one is the latest
|
|
||||||
# modelIDList[-1]
|
|
||||||
surgeModel = modelIDList[-1]
|
surgeModel = modelIDList[-1]
|
||||||
|
|
||||||
weName = "Surge" + pctStr + "Pct"
|
weName = "Surge" + pctStr + "Pct"
|
||||||
trList = self.getWEInventory(dbName, weName, level)
|
trList = self.getWEInventory(dbName, weName, level)
|
||||||
|
|
||||||
|
if len(trList) == 0:
|
||||||
|
self.statusBarMsg("No grids were found in the latest database " + str(surgeModel), "A")
|
||||||
|
return None
|
||||||
|
|
||||||
|
#baseTime = self.getBaseGuidanceTime() + (6 * 3600) # model data will be offset 6 hours
|
||||||
|
baseTime = self.baseGuidanceTime() + (6 * 3600) # model data will be offset 6 hours
|
||||||
|
|
||||||
|
if baseTime > trList[0].startTime().unixTime():
|
||||||
|
self.statusBarMsg("TPCSurgeProb database is not current. Aborting", "A")
|
||||||
|
return None
|
||||||
|
|
||||||
#print "Retreiving ", weName, " at ", level
|
#print "Retreiving ", weName, " at ", level
|
||||||
for tr in trList:
|
for tr in trList:
|
||||||
grid = self.getGrids(dbName, weName, level, tr, mode="Max")
|
grid = self.getGrids(dbName, weName, level, tr, mode="Max")
|
||||||
#maxGrid = maximum(grid, -100.0) # calculate the max as we go
|
|
||||||
|
|
||||||
surgeVal = grid.copy()
|
surgeVal = grid.copy()
|
||||||
mask = surgeVal>-100
|
mask = surgeVal > -100
|
||||||
grid = np.where(mask,surgeVal*3.28, -80.0)
|
grid = np.where(mask,surgeVal*3.28, -80.0)
|
||||||
# print dir(grid)
|
|
||||||
return grid # convert meters to feet
|
return grid # convert meters to feet
|
||||||
|
|
||||||
def makePhishGrid(self, pctStr, level, smoothThreatGrid):
|
def makePhishGrid(self, pctStr, level, smoothThreatGrid):
|
||||||
|
@ -347,7 +369,7 @@ class Procedure (SmartScript.SmartScript):
|
||||||
# factors of less than 3 are useless or dangerous
|
# factors of less than 3 are useless or dangerous
|
||||||
if factor < 3:
|
if factor < 3:
|
||||||
return grid
|
return grid
|
||||||
st = time.time()
|
|
||||||
half = int(factor)/ 2
|
half = int(factor)/ 2
|
||||||
sg = np.zeros(grid.shape,"f8")
|
sg = np.zeros(grid.shape,"f8")
|
||||||
count = np.zeros(grid.shape,"f8")
|
count = np.zeros(grid.shape,"f8")
|
||||||
|
@ -384,18 +406,16 @@ class Procedure (SmartScript.SmartScript):
|
||||||
# Copies the specified weather elements in elementList into the Fcst database.
|
# Copies the specified weather elements in elementList into the Fcst database.
|
||||||
def copyISCGridstoFcst(self, elementList):
|
def copyISCGridstoFcst(self, elementList):
|
||||||
|
|
||||||
# First delete the existing grids so there's no confusion
|
# Initialize all the grids we plan to return
|
||||||
cTime = int(self._gmtime().unixTime()/ 3600) * 3600
|
|
||||||
startTime = AbsTime.AbsTime(cTime - 24*3600)
|
surgePctGrid = None
|
||||||
endTime = startTime + 240*3600
|
surgePctGridMSL = None
|
||||||
timeRange = TimeRange.TimeRange(startTime, endTime)
|
surgePctGridMLLW = None
|
||||||
|
surgePctGridMHHW = None
|
||||||
|
surgePctGridNAVD = None
|
||||||
|
|
||||||
|
baseTime = self.baseGuidanceTime()
|
||||||
|
|
||||||
for elem in elementList:
|
|
||||||
if elem == "InundationTiming":
|
|
||||||
#print "Deleting: ", elem
|
|
||||||
self.deleteCmd([elem], timeRange)
|
|
||||||
|
|
||||||
for weName in elementList:
|
for weName in elementList:
|
||||||
iscWeName = weName + "nc"
|
iscWeName = weName + "nc"
|
||||||
# get the inventory for the ISC grids
|
# get the inventory for the ISC grids
|
||||||
|
@ -403,12 +423,23 @@ class Procedure (SmartScript.SmartScript):
|
||||||
trList = self.getWEInventory("ISC", iscWeName, "SFC")
|
trList = self.getWEInventory("ISC", iscWeName, "SFC")
|
||||||
except:
|
except:
|
||||||
self.statusBarMsg("No grids found in ISC database for " + iscWeName, "S")
|
self.statusBarMsg("No grids found in ISC database for " + iscWeName, "S")
|
||||||
continue
|
return None, None, None, None, None
|
||||||
|
|
||||||
if len(trList) == 0:
|
if len(trList) == 0:
|
||||||
self.statusBarMsg("No grids found in ISC database for " + iscWeName, "S")
|
self.statusBarMsg("No grids found in ISC database for " + iscWeName, "S")
|
||||||
continue
|
return None, None, None, None, None
|
||||||
|
|
||||||
|
# Make sure that the ISC grids are current
|
||||||
|
if baseTime > trList[0].startTime().unixTime():
|
||||||
|
#if trList[0].startTime().unixTime() != baseTime:
|
||||||
|
self.statusBarMsg("ISC grids for element " + weName + " are not current. Aborting.", "S")
|
||||||
|
return None, None, None, None, None
|
||||||
|
|
||||||
|
# If we made it this far, delete the existing grids so there's no confusion
|
||||||
|
if weName == "InundationTiming":
|
||||||
|
timeRange = TimeRange.allTimes()
|
||||||
|
self.deleteCmd(["InundationTiming"], timeRange)
|
||||||
|
|
||||||
# Fetch the ISC grid and create the same grid in the Fcst database
|
# Fetch the ISC grid and create the same grid in the Fcst database
|
||||||
for tr in trList:
|
for tr in trList:
|
||||||
grid = self.getGrids("ISC", iscWeName, "SFC", tr)
|
grid = self.getGrids("ISC", iscWeName, "SFC", tr)
|
||||||
|
@ -423,22 +454,45 @@ class Procedure (SmartScript.SmartScript):
|
||||||
elif iscWeName == "SurgeHtPlusTideMHHWnc":
|
elif iscWeName == "SurgeHtPlusTideMHHWnc":
|
||||||
surgePctGridMHHW = grid
|
surgePctGridMHHW = grid
|
||||||
elif iscWeName == "SurgeHtPlusTideNAVDnc":
|
elif iscWeName == "SurgeHtPlusTideNAVDnc":
|
||||||
surgePctGridNAVD = grid
|
surgePctGridNAVD = grid
|
||||||
|
|
||||||
return surgePctGrid,surgePctGridMSL,surgePctGridMLLW,surgePctGridMHHW,surgePctGridNAVD
|
return surgePctGrid,surgePctGridMSL,surgePctGridMLLW,surgePctGridMHHW,surgePctGridNAVD
|
||||||
|
|
||||||
def execute(self, varDict):
|
# Make a list of timeRanges that will be used to make InundationTiming grids
|
||||||
|
def makeTimingTRs(self, baseTime):
|
||||||
|
# Make the inundation timing grids
|
||||||
|
trList = []
|
||||||
|
for t in range(0, 78, 6):
|
||||||
|
start = baseTime + t * 3600
|
||||||
|
end = baseTime + (t + 6) * 3600
|
||||||
|
tr = TimeRange.TimeRange(AbsTime.AbsTime(start), AbsTime.AbsTime(end))
|
||||||
|
trList.append(tr)
|
||||||
|
|
||||||
|
return trList
|
||||||
|
|
||||||
|
def getTimingGrids(self):
|
||||||
|
|
||||||
|
baseTime = self.baseGuidanceTime()
|
||||||
|
gridList = []
|
||||||
|
trList = self.makeTimingTRs(baseTime)
|
||||||
|
|
||||||
|
for tr in trList:
|
||||||
|
timingGrid = np.zeros(self.getGridShape())
|
||||||
|
gridList.append(timingGrid)
|
||||||
|
|
||||||
|
return trList, gridList
|
||||||
|
|
||||||
|
def execute(self, varDict, editArea):
|
||||||
|
|
||||||
# List of elements
|
# List of elements
|
||||||
# See if we should copy from ISC. If so, do the copy and exit
|
# See if we should copy from ISC. If so, do the copy and exit
|
||||||
smoothThreatGrid = varDict["Grid Smoothing?"]
|
smoothThreatGrid = varDict["Grid Smoothing?"]
|
||||||
PHISHorISC = varDict["Make grids from PHISH\n or ISC?\n"]
|
makeOption = varDict["Make grids from \nPHISH, ISC, or Manually?"]
|
||||||
#PHISHorISC = "PHISH"
|
|
||||||
topodb = "NED"
|
topodb = "NED"
|
||||||
#topodb = varDict["Topographic Database?"]
|
#topodb = varDict["Topographic Database?"]
|
||||||
|
|
||||||
editArea = self.getEditArea("StormSurgeWW_EditArea")
|
stormSurgeEditArea = self.getEditArea("StormSurgeWW_EditArea")
|
||||||
ssea = self.encodeEditArea(editArea)
|
ssea = self.encodeEditArea(stormSurgeEditArea)
|
||||||
|
|
||||||
Topo = self.getAvgTopoGrid(topodb)
|
Topo = self.getAvgTopoGrid(topodb)
|
||||||
|
|
||||||
|
@ -450,7 +504,7 @@ class Procedure (SmartScript.SmartScript):
|
||||||
|
|
||||||
#print "pctStr is: ", pctStr
|
#print "pctStr is: ", pctStr
|
||||||
|
|
||||||
if PHISHorISC == "PHISH":
|
if makeOption == "PHISH":
|
||||||
|
|
||||||
#initialize grids to zero
|
#initialize grids to zero
|
||||||
surgePctGrid = self._empty
|
surgePctGrid = self._empty
|
||||||
|
@ -459,6 +513,10 @@ class Procedure (SmartScript.SmartScript):
|
||||||
# Now get the psurge
|
# Now get the psurge
|
||||||
surgePctGrid = self.getExceedanceHeight(pctStr, "FHAG0")
|
surgePctGrid = self.getExceedanceHeight(pctStr, "FHAG0")
|
||||||
surgePctGridNAVD = self.getExceedanceHeight(pctStr, "SFC")
|
surgePctGridNAVD = self.getExceedanceHeight(pctStr, "SFC")
|
||||||
|
|
||||||
|
if surgePctGrid is None or surgePctGridNAVD is None:
|
||||||
|
return
|
||||||
|
|
||||||
#print "retrieved my grids"
|
#print "retrieved my grids"
|
||||||
#
|
#
|
||||||
# The following lines are the gridded vdatum corrections.
|
# The following lines are the gridded vdatum corrections.
|
||||||
|
@ -489,12 +547,54 @@ class Procedure (SmartScript.SmartScript):
|
||||||
|
|
||||||
self.makePhishGrid(pctStr, "FHAG0", smoothThreatGrid)
|
self.makePhishGrid(pctStr, "FHAG0", smoothThreatGrid)
|
||||||
|
|
||||||
else:
|
elif makeOption == "ISC":
|
||||||
|
|
||||||
elementList = ["InundationMax","InundationTiming", "SurgeHtPlusTideMSL","SurgeHtPlusTideMLLW",
|
elementList = ["InundationMax","InundationTiming", "SurgeHtPlusTideMSL","SurgeHtPlusTideMLLW",
|
||||||
"SurgeHtPlusTideNAVD","SurgeHtPlusTideMHHW"]
|
"SurgeHtPlusTideNAVD","SurgeHtPlusTideMHHW"]
|
||||||
surgePctGrid,surgePctGridMSL,surgePctGridMLLW,surgePctGridMHHW,surgePctGridNAVD = self.copyISCGridstoFcst(elementList)
|
surgePctGrid,surgePctGridMSL,surgePctGridMLLW,surgePctGridMHHW,surgePctGridNAVD = self.copyISCGridstoFcst(elementList)
|
||||||
|
if surgePctGrid is None or surgePctGridMSL is None or surgePctGridMLLW is None or \
|
||||||
|
surgePctGridMHHW is None or surgePctGridNAVD is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
elif makeOption == "Manually":
|
||||||
|
inundationHeight = float(varDict["Inundation Height:"])
|
||||||
|
inunStartHour = float(varDict["Start Hour for Inundation Timing"])
|
||||||
|
inunEndHour = float(varDict["End Hour for Inundation Timing"])
|
||||||
|
|
||||||
|
selectedMask = self.encodeEditArea(editArea)
|
||||||
|
if not selectedMask.any():
|
||||||
|
self.statusBarMsg("Please define an area over which to assign the inundation values.", "S")
|
||||||
|
return
|
||||||
|
|
||||||
|
modifyMask = selectedMask & ssea
|
||||||
|
if not modifyMask.any():
|
||||||
|
self.statusBarMsg("Please define an area that intersects the StormSurgeEditArea to assign the inundation values.", "S")
|
||||||
|
return # Calculate the intersection of the SSEditArea and selected editAre
|
||||||
|
|
||||||
|
if inunStartHour >= inunEndHour:
|
||||||
|
self.statusBarMsg("Please define the end hour after the start hour.", "S")
|
||||||
|
return
|
||||||
|
|
||||||
|
timeRange = TimeRange.allTimes()
|
||||||
|
self.deleteCmd(["InundationTiming"], timeRange)
|
||||||
|
# make the InundationMax grid
|
||||||
|
surgePctGrid = np.zeros(self.getGridShape())
|
||||||
|
surgePctGrid[modifyMask] = inundationHeight
|
||||||
|
# Make the timing grids
|
||||||
|
baseTime = self.baseGuidanceTime()
|
||||||
|
# trList = self.makeTimingTRs(baseTime)
|
||||||
|
trList, timingGrids = self.getTimingGrids()
|
||||||
|
print "TRLIST IS: ", trList
|
||||||
|
for i in range(len(trList)):
|
||||||
|
# only modify grid in the specified time range
|
||||||
|
start = trList[i].startTime().unixTime()
|
||||||
|
end = trList[i].endTime().unixTime()
|
||||||
|
|
||||||
|
if (start - baseTime) / 3600 >= inunStartHour and (end - baseTime) / 3600 <= inunEndHour:
|
||||||
|
timingGrids[i][modifyMask] = inundationHeight # populate where needed
|
||||||
|
|
||||||
|
self.createGrid("Fcst", "InundationTiming", "SCALAR", timingGrids[i], trList[i])
|
||||||
|
|
||||||
threatWEName = "StormSurgeThreat"
|
threatWEName = "StormSurgeThreat"
|
||||||
|
|
||||||
threatKeys = self.getDiscreteKeys(threatWEName)
|
threatKeys = self.getDiscreteKeys(threatWEName)
|
||||||
|
@ -510,12 +610,7 @@ class Procedure (SmartScript.SmartScript):
|
||||||
threshDict = {} # a dict to store thresholds from the UI
|
threshDict = {} # a dict to store thresholds from the UI
|
||||||
|
|
||||||
for key in keyMap.keys():
|
for key in keyMap.keys():
|
||||||
# if not key in varDict.keys(): # This should never happen
|
|
||||||
# print "Error in mapping UI keys to DISCRETE keys."
|
|
||||||
# print "Please fix the keyMap dictionary."
|
|
||||||
# return
|
|
||||||
|
|
||||||
#threshDict[keyMap[key]] = varDict[key]
|
|
||||||
if keyMap[key] == "Extreme":
|
if keyMap[key] == "Extreme":
|
||||||
threshDict[keyMap[key]] = 9
|
threshDict[keyMap[key]] = 9
|
||||||
elif keyMap[key] == "High":
|
elif keyMap[key] == "High":
|
||||||
|
@ -527,6 +622,36 @@ class Procedure (SmartScript.SmartScript):
|
||||||
|
|
||||||
#print "threshDict[keyMap[key]]: ", keyMap[key], threshDict[keyMap[key]]
|
#print "threshDict[keyMap[key]]: ", keyMap[key], threshDict[keyMap[key]]
|
||||||
|
|
||||||
|
# make a timeRange - 6 hours long
|
||||||
|
elementList = ["StormSurgeThreat","InundationMax","SurgeHtPlusTideMSL","SurgeHtPlusTideMLLW","SurgeHtPlusTideNAVD","SurgeHtPlusTideMHHW"]
|
||||||
|
|
||||||
|
# make a new timeRange that will be used to create new grids
|
||||||
|
timeRange = self.makeNewTimeRange(6)
|
||||||
|
|
||||||
|
# Remove old guidance grids and replace them with the new grids
|
||||||
|
# Delete the old grids first
|
||||||
|
cTime = int(self._gmtime().unixTime()/ 3600) * 3600
|
||||||
|
startTime = AbsTime.AbsTime(cTime - 24*3600)
|
||||||
|
endTime = startTime + 240*3600
|
||||||
|
deleteTimeRange = TimeRange.TimeRange(startTime, endTime)
|
||||||
|
|
||||||
|
for elem in elementList:
|
||||||
|
self.deleteCmd([elem], deleteTimeRange)
|
||||||
|
|
||||||
|
# display the D2D grid for debugging purposes only
|
||||||
|
self.createGrid("Fcst", "InundationMax", "SCALAR", surgePctGrid,
|
||||||
|
timeRange, precision=2)
|
||||||
|
|
||||||
|
if makeOption != "Manually":
|
||||||
|
self.createGrid("Fcst", "SurgeHtPlusTideMSL", "SCALAR", surgePctGridMSL,
|
||||||
|
timeRange, precision=2)
|
||||||
|
self.createGrid("Fcst", "SurgeHtPlusTideMLLW", "SCALAR", surgePctGridMLLW,
|
||||||
|
timeRange, precision=2)
|
||||||
|
self.createGrid("Fcst", "SurgeHtPlusTideNAVD", "SCALAR", surgePctGridNAVD,
|
||||||
|
timeRange, precision=2)
|
||||||
|
self.createGrid("Fcst", "SurgeHtPlusTideMHHW", "SCALAR", surgePctGridMHHW,
|
||||||
|
timeRange, precision=2)
|
||||||
|
|
||||||
# make a grid of zeros. This will be the CoastalThreat grid
|
# make a grid of zeros. This will be the CoastalThreat grid
|
||||||
coastalThreat = np.zeros(self.getTopo().shape)
|
coastalThreat = np.zeros(self.getTopo().shape)
|
||||||
|
|
||||||
|
@ -541,35 +666,7 @@ class Procedure (SmartScript.SmartScript):
|
||||||
thresh = threshDict[key]
|
thresh = threshDict[key]
|
||||||
keyIndex = self.getIndex(key, threatKeys)
|
keyIndex = self.getIndex(key, threatKeys)
|
||||||
coastalThreat = np.where(ssea & np.greater_equal(surgePctGrid, thresh), keyIndex,
|
coastalThreat = np.where(ssea & np.greater_equal(surgePctGrid, thresh), keyIndex,
|
||||||
coastalThreat)
|
coastalThreat)
|
||||||
|
|
||||||
# make a timeRange - 6 hours long
|
|
||||||
elementList = ["StormSurgeThreat","InundationMax","SurgeHtPlusTideMSL","SurgeHtPlusTideMLLW","SurgeHtPlusTideNAVD","SurgeHtPlusTideMHHW"]
|
|
||||||
|
|
||||||
cTime = int(self._gmtime().unixTime()/ 3600) * 3600
|
|
||||||
startTime = AbsTime.AbsTime(cTime - 24*3600)
|
|
||||||
endTime = startTime + 240*3600
|
|
||||||
timeRange = TimeRange.TimeRange(startTime, endTime)
|
|
||||||
#print "time range to delete is: ", timeRange
|
|
||||||
|
|
||||||
for elem in elementList:
|
|
||||||
#print "Deleting: ", elem
|
|
||||||
self.deleteCmd([elem], timeRange)
|
|
||||||
|
|
||||||
timeRange = self.makeNewTimeRange(6)
|
|
||||||
|
|
||||||
# display the D2D grid for debugging purposes only
|
|
||||||
self.createGrid("Fcst", "InundationMax", "SCALAR", surgePctGrid,
|
|
||||||
timeRange, precision=2)
|
|
||||||
self.createGrid("Fcst", "SurgeHtPlusTideMSL", "SCALAR", surgePctGridMSL,
|
|
||||||
timeRange, precision=2)
|
|
||||||
self.createGrid("Fcst", "SurgeHtPlusTideMLLW", "SCALAR", surgePctGridMLLW,
|
|
||||||
timeRange, precision=2)
|
|
||||||
self.createGrid("Fcst", "SurgeHtPlusTideNAVD", "SCALAR", surgePctGridNAVD,
|
|
||||||
timeRange, precision=2)
|
|
||||||
self.createGrid("Fcst", "SurgeHtPlusTideMHHW", "SCALAR", surgePctGridMHHW,
|
|
||||||
timeRange, precision=2)
|
|
||||||
|
|
||||||
|
|
||||||
# create the CoastalThreat Grid
|
# create the CoastalThreat Grid
|
||||||
self.createGrid("Fcst", threatWEName, "DISCRETE",
|
self.createGrid("Fcst", threatWEName, "DISCRETE",
|
||||||
|
|
|
@ -276,7 +276,7 @@ def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode,
|
||||||
logger.warning("Unable to determine PID: defaulting to upper case")
|
logger.warning("Unable to determine PID: defaulting to upper case")
|
||||||
else:
|
else:
|
||||||
from com.raytheon.uf.common.dataplugin.text.db import MixedCaseProductSupport
|
from com.raytheon.uf.common.dataplugin.text.db import MixedCaseProductSupport
|
||||||
mixedCase = MixedCaseProductSupport.isMixedCase(pid)
|
mixedCase = MixedCaseProductSupport.isMixedCase(str(pid))
|
||||||
|
|
||||||
if mixedCase:
|
if mixedCase:
|
||||||
outForecasts = outForecasts + forecast
|
outForecasts = outForecasts + forecast
|
||||||
|
|
|
@ -412,10 +412,10 @@ Listen to NOAA Weather Radio or local media for further information.""",
|
||||||
|
|
||||||
def ctaHTY(self):
|
def ctaHTY(self):
|
||||||
return [
|
return [
|
||||||
"""Take extra precautions...if you work or spend time outside. When possible...reschedule strenuous activities to early morning or evening. Know the signs and symptoms of heat exhaustion and heat stroke. Wear light weight and loose fitting clothing when possible and drink plenty of water.\n\n
|
"""A Heat Advisory means that a period of hot temperatures is expected. The combination of hot temperatures and high humidity will combine to create a situation in which heat illnesses are possible. Drink plenty of fluids...stay in an air-conditioned room...stay out of the sun...and check up on relatives and neighbors.\n\n
|
||||||
To reduce risk during outdoor work...the occupational safety and health administration recommends scheduling frequent rest breaks in shaded or air conditioned environments. Anyone overcome by heat should be moved to a cool and shaded location. Heat stroke is an emergency...call 9 1 1.\n\n
|
Take extra precautions...if you work or spend time outside. When possible...reschedule strenuous activities to early morning or evening. Know the signs and symptoms of heat exhaustion and heat stroke. Wear light weight and loose fitting clothing when possible and drink plenty of water.\n\n
|
||||||
A Heat Advisory means that a period of hot temperatures is expected. The combination of hot temperatures and high humidity will combine to create a situation in which heat illnesses are possible. Drink plenty of fluids...stay in an air-conditioned room...stay out of the sun...and check up on relatives and neighbors.""",
|
To reduce risk during outdoor work...the occupational safety and health administration recommends scheduling frequent rest breaks in shaded or air conditioned environments. Anyone overcome by heat should be moved to a cool and shaded location. Heat stroke is an emergency...call 9 1 1.""",
|
||||||
]
|
]
|
||||||
|
|
||||||
def ctaHUA(self):
|
def ctaHUA(self):
|
||||||
return [
|
return [
|
||||||
|
|
|
@ -132,6 +132,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
||||||
* Aug 21, 2014 DR 17313 jgerth Implements ImageProvider
|
* Aug 21, 2014 DR 17313 jgerth Implements ImageProvider
|
||||||
* Oct 07, 2014 3668 bclement Renamed requestJob to requestRunner
|
* Oct 07, 2014 3668 bclement Renamed requestJob to requestRunner
|
||||||
* Dec 09, 2014 5056 jing Added data access interfaces
|
* Dec 09, 2014 5056 jing Added data access interfaces
|
||||||
|
* May 11, 2015 4384 dgilling Add arrow style preference for minimum
|
||||||
|
* magnitude.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -511,6 +513,12 @@ public abstract class AbstractGridResource<T extends AbstractResourceData>
|
||||||
} else {
|
} else {
|
||||||
config.setArrowScaler(new LogArrowScaler(-1 * scale));
|
config.setArrowScaler(new LogArrowScaler(-1 * scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double minMagnitude = ((ArrowPreferences) stylePreferences)
|
||||||
|
.getMinimumMagnitude();
|
||||||
|
if (!Double.isNaN(minMagnitude)) {
|
||||||
|
config.setMinimumMagnitude(minMagnitude);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
config.setLinearArrowScaleFactor(1.0);
|
config.setLinearArrowScaleFactor(1.0);
|
||||||
}
|
}
|
||||||
|
@ -969,6 +977,7 @@ public abstract class AbstractGridResource<T extends AbstractResourceData>
|
||||||
return new ArrayList<PluginDataObject>(list);
|
return new ArrayList<PluginDataObject>(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Collection<DrawableImage> getImages(IGraphicsTarget target,
|
public Collection<DrawableImage> getImages(IGraphicsTarget target,
|
||||||
PaintProperties paintProps) throws VizException {
|
PaintProperties paintProps) throws VizException {
|
||||||
if (getCapability(DisplayTypeCapability.class).getDisplayType() != DisplayType.IMAGE) {
|
if (getCapability(DisplayTypeCapability.class).getDisplayType() != DisplayType.IMAGE) {
|
||||||
|
|
|
@ -672,11 +672,15 @@ public class Disagg6Hr {
|
||||||
/* j = num of rows */
|
/* j = num of rows */
|
||||||
QPEgrids = new double[6][disagg_maxy][disagg_maxx];
|
QPEgrids = new double[6][disagg_maxy][disagg_maxx];
|
||||||
|
|
||||||
for (j = 0; j < disagg_maxx; j++) {
|
for (k = 0; k < 6; k++){
|
||||||
QPEgrids[k][i][j] = -9.0;
|
for (i = 0; i < disagg_maxy; i++){
|
||||||
|
for (j = 0; j < disagg_maxx; j++) {
|
||||||
|
QPEgrids[k][i][j] = -9.0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -19,15 +19,9 @@
|
||||||
further_licensing_information.
|
further_licensing_information.
|
||||||
-->
|
-->
|
||||||
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<contribute xsi:type="menuItem" menuText="Cloud Cover" key="CCP" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Prob Visibility < 1 mile" key="Visc1" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Cloud Cover Anl Uncertainty" key="CCPerranl" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Prob Visibility < 3 miles" key="Visc2" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Visibility" key="Vis" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Prob Ceiling Hgt < 500 ft" key="Cigc1" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Visibility Anl Uncertainty" key="Viserranl" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Prob Ceiling Hgt < 1000 ft" key="Cigc2" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Turbulence" key="TURB" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Prob Ceiling Hgt < 3000 ft" key="Cigc3" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Turbulence Index" key="TPFI" indentText="false" />
|
|
||||||
<contribute xsi:type="menuItem" menuText="Icing Probability" key="ICPRB" indentText="false" />
|
|
||||||
<contribute xsi:type="menuItem" menuText="Icing Potential" key="ICNG" indentText="false" />
|
|
||||||
<contribute xsi:type="menuItem" menuText="Icing Severity" key="ICSEV" indentText="false" />
|
|
||||||
<contribute xsi:type="menuItem" menuText="Supercooled Large Droplet Threat" key="SIPD" indentText="false" />
|
|
||||||
<contribute xsi:type="menuItem" menuText="Supercooled Large Droplet (SLD) Probability" key="SLDP" indentText="true" />
|
|
||||||
</menuTemplate>
|
</menuTemplate>
|
||||||
|
|
|
@ -19,44 +19,59 @@
|
||||||
further_licensing_information.
|
further_licensing_information.
|
||||||
-->
|
-->
|
||||||
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<contribute xsi:type="menuItem" menuText="Period1"
|
<contribute xsi:type="toolbarSubMenu" menuText="nwpsCG1">
|
||||||
key="Period1" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Sig Wave Hgt"
|
||||||
<contribute xsi:type="menuItem" menuText="Period2"
|
key="HTSGW" indentText="false" />
|
||||||
key="Period2" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Swell Hgt" key="SWELL"
|
||||||
<contribute xsi:type="menuItem" menuText="Period3"
|
indentText="false" />
|
||||||
key="Period3" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Prim Wave Dir"
|
||||||
<contribute xsi:type="menuItem" menuText="Period4"
|
key="dirPW" indentText="false" />
|
||||||
key="Period4" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Prim Wave Pd"
|
||||||
<contribute xsi:type="menuItem" menuText="Period5"
|
key="PERPW" indentText="false" />
|
||||||
key="Period5" indentText="false" />
|
</contribute>
|
||||||
<contribute xsi:type="menuItem" menuText="Period6"
|
|
||||||
key="Period6" indentText="false" />
|
<contribute xsi:type="toolbarSubMenu" menuText="nwpsTrkngCG0">
|
||||||
<contribute xsi:type="menuItem" menuText="Period7"
|
<contribute xsi:type="menuItem" menuText="Period1"
|
||||||
key="Period7" indentText="false" />
|
key="Period1" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Period8"
|
<contribute xsi:type="menuItem" menuText="Period2"
|
||||||
key="Period8" indentText="false" />
|
key="Period2" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Period9"
|
<contribute xsi:type="menuItem" menuText="Period3"
|
||||||
key="Period9" indentText="false" />
|
key="Period3" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Period10"
|
<contribute xsi:type="menuItem" menuText="Period4"
|
||||||
key="Period10" indentText="false" />
|
key="Period4" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave1"
|
<contribute xsi:type="menuItem" menuText="Period5"
|
||||||
key="Wave1" indentText="false" />
|
key="Period5" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave2"
|
<contribute xsi:type="menuItem" menuText="Period6"
|
||||||
key="Wave2" indentText="false" />
|
key="Period6" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave3"
|
<contribute xsi:type="menuItem" menuText="Period7"
|
||||||
key="Wave3" indentText="false" />
|
key="Period7" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave4"
|
<contribute xsi:type="menuItem" menuText="Period8"
|
||||||
key="Wave4" indentText="false" />
|
key="Period8" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave5"
|
<contribute xsi:type="menuItem" menuText="Period9"
|
||||||
key="Wave5" indentText="false" />
|
key="Period9" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave6"
|
<contribute xsi:type="menuItem" menuText="Period10"
|
||||||
key="Wave6" indentText="false" />
|
key="Period10" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave7"
|
<contribute xsi:type="menuItem" menuText="Wave1"
|
||||||
key="Wave7" indentText="false" />
|
key="Wave1" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave8"
|
<contribute xsi:type="menuItem" menuText="Wave2"
|
||||||
key="Wave8" indentText="false" />
|
key="Wave2" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave9"
|
<contribute xsi:type="menuItem" menuText="Wave3"
|
||||||
key="Wave9" indentText="false" />
|
key="Wave3" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Wave10"
|
<contribute xsi:type="menuItem" menuText="Wave4"
|
||||||
key="Wave10" indentText="false" />
|
key="Wave4" indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="Wave5"
|
||||||
|
key="Wave5" indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="Wave6"
|
||||||
|
key="Wave6" indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="Wave7"
|
||||||
|
key="Wave7" indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="Wave8"
|
||||||
|
key="Wave8" indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="Wave9"
|
||||||
|
key="Wave9" indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="Wave10"
|
||||||
|
key="Wave10" indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="Swell Hgt"
|
||||||
|
key="SWELL" indentText="false" />
|
||||||
|
</contribute>
|
||||||
</menuTemplate>
|
</menuTemplate>
|
|
@ -19,15 +19,15 @@
|
||||||
further_licensing_information.
|
further_licensing_information.
|
||||||
-->
|
-->
|
||||||
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<contribute xsi:type="menuItem" menuText="Cloud Cover" key="CCP" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Cloud Cover" key="CCP" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Cloud Cover Anl Uncertainty" key="CCPerranl" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Cloud Cover Anl Uncertainty" key="CCPerranl" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Visibility" key="Vis" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Visibility" key="Vis" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Visibility Anl Uncertainty" key="Viserranl" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Visibility Anl Uncertainty" key="Viserranl" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Turbulence" key="TURB" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Turbulence" key="TURB" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Turbulence Index" key="TPFI" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Turbulence Index" key="TPFI" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Icing Probability" key="ICPRB" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Icing Probability" key="ICPRB" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Icing Potential" key="ICNG" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Icing Potential" key="ICNG" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Icing Severity" key="ICSEV" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Icing Severity" key="ICSEV" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Supercooled Large Droplet Threat" key="SIPD" indentText="false" />
|
<contribute xsi:type="menuItem" menuText="Supercooled Large Droplet Threat" key="SIPD" indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Supercooled Large Droplet (SLD) Probability" key="SLDP" indentText="true" />
|
<contribute xsi:type="menuItem" menuText="Supercooled Large Droplet (SLD) Probability" key="SLDP" indentText="false" />
|
||||||
</menuTemplate>
|
</menuTemplate>
|
||||||
|
|
|
@ -94,6 +94,22 @@
|
||||||
indentText="false" />
|
indentText="false" />
|
||||||
<contribute xsi:type="menuItem" menuText="Secondary" key="Secondary"
|
<contribute xsi:type="menuItem" menuText="Secondary" key="Secondary"
|
||||||
indentText="false" />
|
indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="Tertiary" key="Tertiary"
|
||||||
|
indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="OSEQD-4" key="OSEQD-4"
|
||||||
|
indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="OSEQD-5" key="OSEQD-5"
|
||||||
|
indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="OSEQD-6" key="OSEQD-6"
|
||||||
|
indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="OSEQD-7" key="OSEQD-7"
|
||||||
|
indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="OSEQD-8" key="OSEQD-8"
|
||||||
|
indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="OSEQD-9" key="OSEQD-9"
|
||||||
|
indentText="false" />
|
||||||
|
<contribute xsi:type="menuItem" menuText="OSEQD-10" key="OSEQD-10"
|
||||||
|
indentText="false" />
|
||||||
<contribute xsi:type="menuItem" textLookup="LevelMapping"
|
<contribute xsi:type="menuItem" textLookup="LevelMapping"
|
||||||
key="0BSS" indentText="false" />
|
key="0BSS" indentText="false" />
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,12 @@
|
||||||
# This script creates sequences for the tables in the events schema
|
# This script creates sequences for the tables in the events schema
|
||||||
|
|
||||||
STATS_MAX_VAL=$(psql -U awips -d metadata -t -c "select max(id)+1 from events.stats;")
|
STATS_MAX_VAL=$(psql -U awips -d metadata -t -c "select max(id)+1 from events.stats;")
|
||||||
NOTIFICATION_MAX_VAL=$(psql -U awips -d metadata -t -c "select max(id)+1 from events.notification;")
|
#Since events.notification will only exist at sites running datadelivery, check for table first to avoid ERRORs
|
||||||
|
if [ `psql -U awips -d metadata -tAc "select exists (select 1 from information_schema.tables where table_schema='events' and table_name='notification');"` = 't' ]; then
|
||||||
|
NOTIFICATION_MAX_VAL=$(psql -U awips -d metadata -t -c "select max(id)+1 from events.notification;")
|
||||||
|
else
|
||||||
|
NOTIFICATION_MAX_VAL=0
|
||||||
|
fi
|
||||||
AGGREGATE_MAX_VAL=$(psql -U awips -d metadata -t -c "select max(id)+1 from events.aggregate;")
|
AGGREGATE_MAX_VAL=$(psql -U awips -d metadata -t -c "select max(id)+1 from events.aggregate;")
|
||||||
|
|
||||||
if [ -z $STATS_MAX_VAL ]
|
if [ -z $STATS_MAX_VAL ]
|
||||||
|
@ -23,6 +28,8 @@ fi
|
||||||
|
|
||||||
psql -U awips -d metadata -c \
|
psql -U awips -d metadata -c \
|
||||||
"CREATE SEQUENCE stats_seq START WITH $STATS_MAX_VAL; \
|
"CREATE SEQUENCE stats_seq START WITH $STATS_MAX_VAL; \
|
||||||
CREATE SEQUENCE notification_seq START WITH $NOTIFICATION_MAX_VAL; \
|
|
||||||
CREATE SEQUENCE aggregate_seq START WITH $AGGREGATE_MAX_VAL;"
|
CREATE SEQUENCE aggregate_seq START WITH $AGGREGATE_MAX_VAL;"
|
||||||
|
|
||||||
|
if [ $NOTIFICATION_MAX_VAL != 0 ]; then
|
||||||
|
psql -U awips -d metadata -c "CREATE SEQUENCE notification_seq START WITH $NOTIFICATION_MAX_VAL;"
|
||||||
|
fi
|
||||||
|
|
|
@ -11,7 +11,9 @@ function addNewTafColumns {
|
||||||
echo "ALTER TABLE taf ADD COLUMN corindicator_temp boolean NOT NULL DEFAULT false;" >> $SQL_FILE
|
echo "ALTER TABLE taf ADD COLUMN corindicator_temp boolean NOT NULL DEFAULT false;" >> $SQL_FILE
|
||||||
echo "ALTER TABLE taf ADD COLUMN amdindicator_temp boolean NOT NULL DEFAULT false;" >> $SQL_FILE
|
echo "ALTER TABLE taf ADD COLUMN amdindicator_temp boolean NOT NULL DEFAULT false;" >> $SQL_FILE
|
||||||
echo "UPDATE taf set corindicator_temp = true where corindicator = 'COR';" >> $SQL_FILE
|
echo "UPDATE taf set corindicator_temp = true where corindicator = 'COR';" >> $SQL_FILE
|
||||||
|
echo "UPDATE taf set corindicator_temp = true where corindicator = 'true';" >> $SQL_FILE
|
||||||
echo "UPDATE taf set amdindicator_temp = true where amdindicator = 'AMD';" >> $SQL_FILE
|
echo "UPDATE taf set amdindicator_temp = true where amdindicator = 'AMD';" >> $SQL_FILE
|
||||||
|
echo "UPDATE taf set amdindicator_temp = true where amdindicator = 'true';" >> $SQL_FILE
|
||||||
|
|
||||||
${PSQL} -U awips -d metadata -f $SQL_FILE
|
${PSQL} -U awips -d metadata -f $SQL_FILE
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
|
@ -33,7 +35,7 @@ function deleteTafData {
|
||||||
temp="_temp"
|
temp="_temp"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
query="SELECT distinct b.id FROM taf a, taf b WHERE (a.reftime = b.reftime AND a.stationid = b.stationid AND a.corindicator$temp = b.corindicator$temp AND a.amdindicator$temp = b.amdindicator$temp AND a.issue_timestring = b.issue_timestring AND a.inserttime < b.inserttime) or (b.reftime isnull) or (b.stationid isnull) or (b.issue_timestring isnull)"
|
query="SELECT distinct b.id FROM taf a, taf b WHERE (a.reftime = b.reftime AND a.stationid = b.stationid AND a.corindicator$temp = b.corindicator$temp AND a.amdindicator$temp = b.amdindicator$temp AND a.issue_timestring = b.issue_timestring AND ((a.inserttime < b.inserttime) or (a.inserttime = b.inserttime and a.id < b.id))) or (b.reftime isnull) or (b.stationid isnull) or (b.issue_timestring isnull)"
|
||||||
|
|
||||||
echo " INFO: Finding taf entries to delete"
|
echo " INFO: Finding taf entries to delete"
|
||||||
result=(`${PSQL} -U awips -d metadata -t -A -c "$query"`)
|
result=(`${PSQL} -U awips -d metadata -t -A -c "$query"`)
|
||||||
|
@ -51,10 +53,10 @@ function deleteTafData {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# handle cascade tables
|
# handle cascade tables
|
||||||
query="SELECT distinct id from taf_change_groups where parentid in ($taf_ids)"
|
echo "SELECT distinct id from taf_change_groups where parentid in ($taf_ids)" > $SQL_FILE
|
||||||
|
|
||||||
echo " INFO: Finding cascaded taf_change_group entries"
|
echo " INFO: Finding cascaded taf_change_group entries"
|
||||||
result=(`${PSQL} -U awips -d metadata -t -A -c "$query"`)
|
result=(`${PSQL} -U awips -d metadata -t -A -f $SQL_FILE`)
|
||||||
|
|
||||||
numEntries="${#result[@]}"
|
numEntries="${#result[@]}"
|
||||||
|
|
||||||
|
|
|
@ -196,9 +196,9 @@ public final class TPCWatchSrv extends AbstractWatchNotifierSrv {
|
||||||
// if we are not in practice mode
|
// if we are not in practice mode
|
||||||
if (!practiceMode) {
|
if (!practiceMode) {
|
||||||
|
|
||||||
// if xxxId ends with a digit (i.e. its a national TCV)
|
// if xxxId does NOT end with a digit (i.e. its NOT a national TCV)
|
||||||
String xxxId = record.getXxxid();
|
String xxxId = record.getXxxid();
|
||||||
if (Character.isDigit(xxxId.charAt(xxxId.length() - 1))) {
|
if (!Character.isDigit(xxxId.charAt(xxxId.length() - 1))) {
|
||||||
|
|
||||||
// build the full 9-letter PIL
|
// build the full 9-letter PIL
|
||||||
String fullPil = SiteMap.getInstance().mapICAOToCCC(
|
String fullPil = SiteMap.getInstance().mapICAOToCCC(
|
||||||
|
|
|
@ -99,7 +99,6 @@
|
||||||
<alias base="RUC130">ruc130</alias>
|
<alias base="RUC130">ruc130</alias>
|
||||||
<alias base="RTMA25">rtmaNDFD</alias>
|
<alias base="RTMA25">rtmaNDFD</alias>
|
||||||
<alias base="URMA25">urmaNDFD</alias>
|
<alias base="URMA25">urmaNDFD</alias>
|
||||||
<alias base="AK-RTMA">aKrtmaNDFD</alias>
|
|
||||||
<alias base="NamDNG5">NamDNG5</alias>
|
<alias base="NamDNG5">NamDNG5</alias>
|
||||||
<alias base="GlobalWave">GlobalWave</alias>
|
<alias base="GlobalWave">GlobalWave</alias>
|
||||||
<alias base="AKwave10">AKwave10</alias>
|
<alias base="AKwave10">AKwave10</alias>
|
||||||
|
@ -141,12 +140,11 @@
|
||||||
<alias base="SREF216">sref216</alias>
|
<alias base="SREF216">sref216</alias>
|
||||||
<alias base="SREF243">sref243</alias>
|
<alias base="SREF243">sref243</alias>
|
||||||
<alias base="RTGSST">RTGSST235</alias>
|
<alias base="RTGSST">RTGSST235</alias>
|
||||||
<alias base="GFSGuide">gfsGuide232</alias>
|
<alias base="GFSGuide">gfsGuide232</alias>
|
||||||
<alias base="AK-RTMA">aKrtmaNDFD</alias>
|
<alias base="AK-RTMA3">OCONUSrtmaNDFD</alias>
|
||||||
<alias base="AK-RTMA3">aKrtmaNDFD</alias>
|
<alias base="HI-RTMA">OCONUSrtmaNDFD</alias>
|
||||||
<alias base="HI-RTMA">HIrtmaNDFD</alias>
|
<alias base="PR-RTMA">OCONUSrtmaNDFD</alias>
|
||||||
<alias base="PR-RTMA">PRrtmaNDFD</alias>
|
<alias base="Guam-RTMA">OCONUSrtmaNDFD</alias>
|
||||||
<alias base="Guam-RTMA">rtmaNDFD</alias>
|
|
||||||
<alias base="RTGSSTHR">rtgssthr173</alias>
|
<alias base="RTGSSTHR">rtgssthr173</alias>
|
||||||
<alias base="RFCqpf">qpf218</alias>
|
<alias base="RFCqpf">qpf218</alias>
|
||||||
<alias base="HPCqpf">hpc_qpf218</alias>
|
<alias base="HPCqpf">hpc_qpf218</alias>
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
Jul 03, 2014 DR 14068 mfoster Added parameters for 3km AK-RTMA
|
Jul 03, 2014 DR 14068 mfoster Added parameters for 3km AK-RTMA
|
||||||
Dec 15, 2014 DR 14024 jwatson Added parameters for 2.5km GFSLAMPGrid
|
Dec 15, 2014 DR 14024 jwatson Added parameters for 2.5km GFSLAMPGrid
|
||||||
Feb 24, 2015 DR 16671 byin Added HPBL for RUC13
|
Feb 24, 2015 DR 16671 byin Added HPBL for RUC13
|
||||||
|
May 21, 2015 DR 17515 bhunder Added parameters for URMA25
|
||||||
-->
|
-->
|
||||||
<aliasList caseSensitive="true" namespace="gfeParamName">
|
<aliasList caseSensitive="true" namespace="gfeParamName">
|
||||||
<alias base="AV">av</alias>
|
<alias base="AV">av</alias>
|
||||||
|
@ -74,6 +75,7 @@
|
||||||
<alias base="SWELL">swell</alias>
|
<alias base="SWELL">swell</alias>
|
||||||
<alias base="SWPER">swper</alias>
|
<alias base="SWPER">swper</alias>
|
||||||
<alias base="TCC">tcc</alias>
|
<alias base="TCC">tcc</alias>
|
||||||
|
<alias base="TCCerranl">tccerranl</alias>
|
||||||
<alias base="ThP">thp</alias>
|
<alias base="ThP">thp</alias>
|
||||||
<alias base="TKE">tke</alias>
|
<alias base="TKE">tke</alias>
|
||||||
<alias base="TP12hr">tp12hr</alias>
|
<alias base="TP12hr">tp12hr</alias>
|
||||||
|
@ -333,7 +335,6 @@
|
||||||
<alias base="tp6c6">tp6c6</alias>
|
<alias base="tp6c6">tp6c6</alias>
|
||||||
<alias base="tp6c7">tp6c7</alias>
|
<alias base="tp6c7">tp6c7</alias>
|
||||||
<alias base="tp6c8">tp6c8</alias>
|
<alias base="tp6c8">tp6c8</alias>
|
||||||
<alias base="TCCerranl">tccerranl</alias>
|
|
||||||
<alias base="TP6mean">tpmean6</alias>
|
<alias base="TP6mean">tpmean6</alias>
|
||||||
<alias base="TP6sprd">tpsprd6</alias>
|
<alias base="TP6sprd">tpsprd6</alias>
|
||||||
<alias base="TP-ECMWF">tpecmwf</alias>
|
<alias base="TP-ECMWF">tpecmwf</alias>
|
||||||
|
|
|
@ -64,7 +64,10 @@
|
||||||
# being off
|
# being off
|
||||||
# 04/20/2015 #4414 dgilling Add missing NWPSTrkngCG0 weather elements.
|
# 04/20/2015 #4414 dgilling Add missing NWPSTrkngCG0 weather elements.
|
||||||
# 05/12/2015 #17144 bhunder Added RTMA model
|
# 05/12/2015 #17144 bhunder Added RTMA model
|
||||||
########################################################################
|
# 05/29/2015 17496 ryu Changed parm definitions for Wave1-10 and Period1-10.
|
||||||
|
#
|
||||||
|
# 05/29/2015 #17144 bhunder Added weather Params for URMA25 and OCONUS RTMA
|
||||||
|
####################################################################################################
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
# USEFUL DEFINES
|
# USEFUL DEFINES
|
||||||
|
@ -223,16 +226,16 @@ Wave_9 = ("Wave_9", VECTOR, "ft", "Wave_9", 50.0, 0.0, 2, NO)
|
||||||
Wave_10 = ("Wave_10", VECTOR, "ft", "Wave_10", 50.0, 0.0, 2, NO)
|
Wave_10 = ("Wave_10", VECTOR, "ft", "Wave_10", 50.0, 0.0, 2, NO)
|
||||||
|
|
||||||
#Fcst Grids - for partitioned wave groups
|
#Fcst Grids - for partitioned wave groups
|
||||||
Wave1 = ("Wave1", VECTOR, "ft", "WAVE1", 50.0, 0.0, 1, NO)
|
Wave1 = ("Wave1", VECTOR, "ft", "WAVE1", 50.0, 0.0, 0, NO)
|
||||||
Wave2 = ("Wave2", VECTOR, "ft", "WAVE2", 50.0, 0.0, 1, NO)
|
Wave2 = ("Wave2", VECTOR, "ft", "WAVE2", 50.0, 0.0, 0, NO)
|
||||||
Wave3 = ("Wave3", VECTOR, "ft", "WAVE3", 50.0, 0.0, 1, NO)
|
Wave3 = ("Wave3", VECTOR, "ft", "WAVE3", 50.0, 0.0, 0, NO)
|
||||||
Wave4 = ("Wave4", VECTOR, "ft", "WAVE4", 50.0, 0.0, 1, NO)
|
Wave4 = ("Wave4", VECTOR, "ft", "WAVE4", 50.0, 0.0, 0, NO)
|
||||||
Wave5 = ("Wave5", VECTOR, "ft", "WAVE5", 50.0, 0.0, 1, NO)
|
Wave5 = ("Wave5", VECTOR, "ft", "WAVE5", 50.0, 0.0, 0, NO)
|
||||||
Wave6 = ("Wave6", VECTOR, "ft", "WAVE6", 50.0, 0.0, 1, NO)
|
Wave6 = ("Wave6", VECTOR, "ft", "WAVE6", 50.0, 0.0, 0, NO)
|
||||||
Wave7 = ("Wave7", VECTOR, "ft", "Wave7", 50.0, 0.0, 0, NO)
|
Wave7 = ("Wave7", VECTOR, "ft", "Wave7", 50.0, 0.0, 0, NO)
|
||||||
Wave8 = ("Wave8", VECTOR, "ft", "Wave8", 35.0, 0.0, 0, NO)
|
Wave8 = ("Wave8", VECTOR, "ft", "Wave8", 50.0, 0.0, 0, NO)
|
||||||
Wave9 = ("Wave9", VECTOR, "ft", "Wave9", 35.0, 0.0, 0, NO)
|
Wave9 = ("Wave9", VECTOR, "ft", "Wave9", 50.0, 0.0, 0, NO)
|
||||||
Wave10 = ("Wave10", VECTOR, "ft", "Wave10", 35.0, 0.0, 0, NO)
|
Wave10 = ("Wave10", VECTOR, "ft", "Wave10", 50.0, 0.0, 0, NO)
|
||||||
|
|
||||||
#Smart Init Grids - for partitioned wave groups
|
#Smart Init Grids - for partitioned wave groups
|
||||||
Period_1 = ("Period_1", SCALAR, "sec", "Period_1", 30.0, 1.0, 0, NO)
|
Period_1 = ("Period_1", SCALAR, "sec", "Period_1", 30.0, 1.0, 0, NO)
|
||||||
|
@ -247,16 +250,16 @@ Period_9 = ("Period_9", SCALAR, "sec", "Period_9", 30.0, 0.0, 0, NO)
|
||||||
Period_10 = ("Period_10", SCALAR, "sec", "Period_10", 30.0, 0.0, 0, NO)
|
Period_10 = ("Period_10", SCALAR, "sec", "Period_10", 30.0, 0.0, 0, NO)
|
||||||
|
|
||||||
#Fcst Grids - for partitioned wave groups
|
#Fcst Grids - for partitioned wave groups
|
||||||
Period1 = ("Period1", SCALAR, "sec", "Period1", 25.0, 0.0, 1, NO)
|
Period1 = ("Period1", SCALAR, "sec", "Period1", 30.0, 0.0, 0, NO)
|
||||||
Period2 = ("Period2", SCALAR, "sec", "Period2", 25.0, 0.0, 1, NO)
|
Period2 = ("Period2", SCALAR, "sec", "Period2", 30.0, 0.0, 0, NO)
|
||||||
Period3 = ("Period3", SCALAR, "sec", "Period3", 25.0, 0.0, 1, NO)
|
Period3 = ("Period3", SCALAR, "sec", "Period3", 30.0, 0.0, 0, NO)
|
||||||
Period4 = ("Period4", SCALAR, "sec", "Period4", 25.0, 0.0, 1, NO)
|
Period4 = ("Period4", SCALAR, "sec", "Period4", 30.0, 0.0, 0, NO)
|
||||||
Period5 = ("Period5", SCALAR, "sec", "Period5", 25.0, 0.0, 1, NO)
|
Period5 = ("Period5", SCALAR, "sec", "Period5", 30.0, 0.0, 0, NO)
|
||||||
Period6 = ("Period6", SCALAR, "sec", "Period6", 25.0, 0.0, 1, NO)
|
Period6 = ("Period6", SCALAR, "sec", "Period6", 30.0, 0.0, 0, NO)
|
||||||
Period7 = ("Period7", SCALAR, "sec", "Period7", 25.0, 0.0, 0, NO)
|
Period7 = ("Period7", SCALAR, "sec", "Period7", 30.0, 0.0, 0, NO)
|
||||||
Period8 = ("Period8", SCALAR, "sec", "Period8", 25.0, 0.0, 0, NO)
|
Period8 = ("Period8", SCALAR, "sec", "Period8", 30.0, 0.0, 0, NO)
|
||||||
Period9 = ("Period9", SCALAR, "sec", "Period9", 25.0, 0.0, 0, NO)
|
Period9 = ("Period9", SCALAR, "sec", "Period9", 30.0, 0.0, 0, NO)
|
||||||
Period10 = ("Period10", SCALAR, "sec", "Period10", 25.0, 0.0, 0, NO)
|
Period10 = ("Period10", SCALAR, "sec", "Period10", 30.0, 0.0, 0, NO)
|
||||||
|
|
||||||
# Fire Weather Weather Elements
|
# Fire Weather Weather Elements
|
||||||
LAL = ("LAL", SCALAR, "cat", "Lightning Activity Level", 6.0, 1.0, 0, NO)
|
LAL = ("LAL", SCALAR, "cat", "Lightning Activity Level", 6.0, 1.0, 0, NO)
|
||||||
|
@ -301,12 +304,14 @@ Radar = ("Radar", SCALAR, "dbz", "Radar Reflectivity", 80.0, -20.0, 0, NO)
|
||||||
# RTMA parms
|
# RTMA parms
|
||||||
QPE = ("QPE", SCALAR, "in", "QPE", 5.0, 0.0, 2, YES)
|
QPE = ("QPE", SCALAR, "in", "QPE", 5.0, 0.0, 2, YES)
|
||||||
#if SID in ALASKA_SITES: - not sure if this needs to be like that
|
#if SID in ALASKA_SITES: - not sure if this needs to be like that
|
||||||
if SID in ALASKA_SITES or SID in ["HFO", "SJU"]:
|
if SID in ALASKA_SITES or SID in ["HFO", "SJU", "GUM"]:
|
||||||
TUnc = ("TUnc", SCALAR, "F", "Temperature Anl Uncertainty", 20.0, 0.0, 0, NO)
|
TUnc = ("TUnc", SCALAR, "F", "Temperature Anl Uncertainty", 20.0, 0.0, 0, NO)
|
||||||
TdUnc = ("TdUnc", SCALAR, "F", "Dewpoint Anl Uncertainty", 25.0, 0.0, 0, NO)
|
TdUnc = ("TdUnc", SCALAR, "F", "Dewpoint Anl Uncertainty", 25.0, 0.0, 0, NO)
|
||||||
else:
|
else:
|
||||||
TUnc = ("TUnc", SCALAR, "F", "Temperature Anl Uncertainty", 10.0, 0.0, 0, NO)
|
TUnc = ("TUnc", SCALAR, "F", "Temperature Anl Uncertainty", 10.0, 0.0, 0, NO)
|
||||||
TdUnc = ("TdUnc", SCALAR, "F", "Dewpoint Anl Uncertainty", 15.0, 0.0, 0, NO)
|
TdUnc = ("TdUnc", SCALAR, "F", "Dewpoint Anl Uncertainty", 15.0, 0.0, 0, NO)
|
||||||
|
# DR17144
|
||||||
|
SkyUnc = ("SkyUnc", SCALAR, "%", "Sky Condition Uncertainty", 100.0, 0.0, 0, NO)
|
||||||
WSpdUnc = ("WSpdUnc", SCALAR, "kts", "WSpd Anl Uncertainty", 12.0, 0.0, 0, NO)
|
WSpdUnc = ("WSpdUnc", SCALAR, "kts", "WSpd Anl Uncertainty", 12.0, 0.0, 0, NO)
|
||||||
WDirUnc = ("WDirUnc", SCALAR, "deg", "WDir Anl Uncertainty", 10.0, 0.0, 0, NO)
|
WDirUnc = ("WDirUnc", SCALAR, "deg", "WDir Anl Uncertainty", 10.0, 0.0, 0, NO)
|
||||||
VisUnc = ("VisUnc", SCALAR, "SM", "Vsby Anl Uncertainty", 10.0, 0.0, 2, NO)
|
VisUnc = ("VisUnc", SCALAR, "SM", "Vsby Anl Uncertainty", 10.0, 0.0, 2, NO)
|
||||||
|
@ -314,8 +319,6 @@ VisUnc = ("VisUnc", SCALAR, "SM", "Vsby Anl Uncertainty", 10.0, 0.0, 2, NO)
|
||||||
PressUnc = ("PressUnc", SCALAR, "Pa", "Press Anl Uncertainty", 110000.0, 0.0, 2, NO)
|
PressUnc = ("PressUnc", SCALAR, "Pa", "Press Anl Uncertainty", 110000.0, 0.0, 2, NO)
|
||||||
Pressure = ("Pressure", SCALAR, "Pa", "Pressure", 110000.0, 0.0, 2, NO)
|
Pressure = ("Pressure", SCALAR, "Pa", "Pressure", 110000.0, 0.0, 2, NO)
|
||||||
WGustUnc = ("WGustUnc", SCALAR, "kts", "WGust Anl Uncertainty", 12.0, 0.0, 0, NO)
|
WGustUnc = ("WGustUnc", SCALAR, "kts", "WGust Anl Uncertainty", 12.0, 0.0, 0, NO)
|
||||||
# DR 17144
|
|
||||||
SkyUnc = ("SkyUnc", SCALAR, "%", "Sky Uncertainty", 100.0, 0.0, 0, NO)
|
|
||||||
|
|
||||||
# NamDNG5 parms
|
# NamDNG5 parms
|
||||||
QPF3 = ("QPF3", SCALAR, "in", "3HR QPF", 3.0, 0.0, 2, YES)
|
QPF3 = ("QPF3", SCALAR, "in", "3HR QPF", 3.0, 0.0, 2, YES)
|
||||||
|
@ -1122,6 +1125,7 @@ OPCTAFBNW = ('OPCTAFBNW', GRID, '', NO, NO, 2, 0)
|
||||||
OPCTAFBSW = ('OPCTAFBSW', GRID, '', NO, NO, 2, 0)
|
OPCTAFBSW = ('OPCTAFBSW', GRID, '', NO, NO, 2, 0)
|
||||||
MOSGuide = ('MOSGuide', GRID, '', NO, NO, 2, 0)
|
MOSGuide = ('MOSGuide', GRID, '', NO, NO, 2, 0)
|
||||||
RTMA = ('RTMA', GRID, '', YES, NO, 1, 36)
|
RTMA = ('RTMA', GRID, '', YES, NO, 1, 36)
|
||||||
|
URMA25 = ('URMA25', GRID, '', YES, NO, 1, 36) ####DR17144
|
||||||
NamDNG5 = ('NamDNG5', GRID, '', NO, NO, 2, 0)
|
NamDNG5 = ('NamDNG5', GRID, '', NO, NO, 2, 0)
|
||||||
TPCProb = ('TPCProb', GRID, '', NO, NO, 30, 0)
|
TPCProb = ('TPCProb', GRID, '', NO, NO, 30, 0)
|
||||||
SREF = ('SREF', GRID, '', NO, NO, 3, 0)
|
SREF = ('SREF', GRID, '', NO, NO, 3, 0)
|
||||||
|
@ -1260,7 +1264,6 @@ elif SID == "GUM":
|
||||||
'RTOFS-Guam',
|
'RTOFS-Guam',
|
||||||
'WPHwave10',
|
'WPHwave10',
|
||||||
'GLOBHwave',
|
'GLOBHwave',
|
||||||
('Guam-RTMA','RTMA'),
|
|
||||||
('nwpsCG1', 'nwpsCG1'),
|
('nwpsCG1', 'nwpsCG1'),
|
||||||
('nwpsTrkngCG0', 'nwpsTrkngCG0'),
|
('nwpsTrkngCG0', 'nwpsTrkngCG0'),
|
||||||
('GFS20-PAC', 'GFS20'),
|
('GFS20-PAC', 'GFS20'),
|
||||||
|
@ -1327,6 +1330,7 @@ elif SID in CONUS_EAST_SITES:
|
||||||
'NPHwave4',
|
'NPHwave4',
|
||||||
'WPHwave10',
|
'WPHwave10',
|
||||||
'GLOBHwave',
|
'GLOBHwave',
|
||||||
|
#########DR17144
|
||||||
'URMA25',
|
'URMA25',
|
||||||
('GFS215', 'GFS20'),
|
('GFS215', 'GFS20'),
|
||||||
'ETSS',
|
'ETSS',
|
||||||
|
@ -1404,6 +1408,7 @@ else: #######DCS3501 WEST_CONUS
|
||||||
'NPHwave4',
|
'NPHwave4',
|
||||||
'WPHwave10',
|
'WPHwave10',
|
||||||
'GLOBHwave',
|
'GLOBHwave',
|
||||||
|
############DR17144
|
||||||
'URMA25',
|
'URMA25',
|
||||||
('GFS215', 'GFS20'),
|
('GFS215', 'GFS20'),
|
||||||
'ETSS',
|
'ETSS',
|
||||||
|
@ -1569,7 +1574,7 @@ elif SID in ALASKA_SITES:
|
||||||
# "OPCTAFBNW" : ['OPCTAFBNW'],
|
# "OPCTAFBNW" : ['OPCTAFBNW'],
|
||||||
"nwpsCG1" : ['nwpsCG1'],
|
"nwpsCG1" : ['nwpsCG1'],
|
||||||
"nwpsTrkngCG0" : ['nwpsTrkngCG0'],
|
"nwpsTrkngCG0" : ['nwpsTrkngCG0'],
|
||||||
"RTMA": ['RTMA'],
|
"RTMA" : ['RTMA'],
|
||||||
"NamDNG5" : ["NamDNG5"],
|
"NamDNG5" : ["NamDNG5"],
|
||||||
"AKMOSGuide" : ['MOSGuide'],
|
"AKMOSGuide" : ['MOSGuide'],
|
||||||
"ETSS" : ["ETSS"],
|
"ETSS" : ["ETSS"],
|
||||||
|
@ -1587,7 +1592,7 @@ elif SID == "HFO":
|
||||||
# "EPwave10" : ["EPwEave10"],
|
# "EPwave10" : ["EPwEave10"],
|
||||||
# "GWW" : ["GWW"],
|
# "GWW" : ["GWW"],
|
||||||
# "gfsLR" : ["gfsLR"],
|
# "gfsLR" : ["gfsLR"],
|
||||||
"RTMA": ['RTMA'],
|
"RTMA" : ['RTMA'],
|
||||||
"NamDNG5" : ["NamDNG5"],
|
"NamDNG5" : ["NamDNG5"],
|
||||||
"MOSGuide" : ['MOSGuide'],
|
"MOSGuide" : ['MOSGuide'],
|
||||||
"nwpsCG1" : ['nwpsCG1'],
|
"nwpsCG1" : ['nwpsCG1'],
|
||||||
|
@ -1621,7 +1626,7 @@ elif SID == "SJU":
|
||||||
# "OPCTAFBE" : ['OPCTAFBE'],
|
# "OPCTAFBE" : ['OPCTAFBE'],
|
||||||
# "GlobalWave" : ["GlobalWave"],
|
# "GlobalWave" : ["GlobalWave"],
|
||||||
# "EPwave10" : ["EPwEave10"],
|
# "EPwave10" : ["EPwEave10"],
|
||||||
"RTMA": ['RTMA'],
|
"RTMA" : ['RTMA'],
|
||||||
"NamDNG5" : ["NamDNG5"],
|
"NamDNG5" : ["NamDNG5"],
|
||||||
"ESTOFS" : ["ESTOFS"],
|
"ESTOFS" : ["ESTOFS"],
|
||||||
"nwpsCG1" : ['nwpsCG1'],
|
"nwpsCG1" : ['nwpsCG1'],
|
||||||
|
@ -1635,7 +1640,7 @@ elif SID == "GUM":
|
||||||
# "GWW" : ["GWW"],
|
# "GWW" : ["GWW"],
|
||||||
# "gfsLR" : ["gfsLR"],
|
# "gfsLR" : ["gfsLR"],
|
||||||
# "GlobalWave" : ["GlobalWave"],
|
# "GlobalWave" : ["GlobalWave"],
|
||||||
"RTMA": ['RTMA'],
|
"RTMA" : ['RTMA'],
|
||||||
"nwpsCG1" : ['nwpsCG1'],
|
"nwpsCG1" : ['nwpsCG1'],
|
||||||
"nwpsTrkngCG0" : ['nwpsTrkngCG0'],
|
"nwpsTrkngCG0" : ['nwpsTrkngCG0'],
|
||||||
}
|
}
|
||||||
|
@ -1657,7 +1662,9 @@ else:
|
||||||
"DGEX" : ['DGEX'],
|
"DGEX" : ['DGEX'],
|
||||||
"MOSGuide" : ['MOSGuide'],
|
"MOSGuide" : ['MOSGuide'],
|
||||||
"HPCGuide" : ['HPCGuide'],
|
"HPCGuide" : ['HPCGuide'],
|
||||||
"RTMA": ['RTMA'],
|
"RTMA" : ['RTMA'],
|
||||||
|
#######DR17144
|
||||||
|
"URMA25" : ['URMA25'],
|
||||||
"NamDNG5" : ["NamDNG5"],
|
"NamDNG5" : ["NamDNG5"],
|
||||||
"SREF" : ["SREF"],
|
"SREF" : ["SREF"],
|
||||||
"HRRR" : ['HRRR'],
|
"HRRR" : ['HRRR'],
|
||||||
|
@ -1724,6 +1731,7 @@ D2DAccumulativeElements= {
|
||||||
"HIRESWarw": ["tp"],
|
"HIRESWarw": ["tp"],
|
||||||
"HIRESWnmm": ["tp"],
|
"HIRESWnmm": ["tp"],
|
||||||
"RTMA": ["tp"],
|
"RTMA": ["tp"],
|
||||||
|
"URMA25": ["tp"],
|
||||||
"HPCERP": ["tpHPCndfd"],
|
"HPCERP": ["tpHPCndfd"],
|
||||||
#DR20634 "SPC": ["tp"],
|
#DR20634 "SPC": ["tp"],
|
||||||
|
|
||||||
|
@ -1816,6 +1824,7 @@ localParms = localHIRESWarwParms = localHIRESWnmmParms = [] #######DCS3501
|
||||||
#DR20634 localParms = localSPCParms = []
|
#DR20634 localParms = localSPCParms = []
|
||||||
localHPCGuideParms = []
|
localHPCGuideParms = []
|
||||||
localRTMAParms = []
|
localRTMAParms = []
|
||||||
|
localURMA25Parms = [] ###DR17144
|
||||||
localNamDNG5Parms = []
|
localNamDNG5Parms = []
|
||||||
localSREFParms = []
|
localSREFParms = []
|
||||||
localTPCProbParms = []
|
localTPCProbParms = []
|
||||||
|
@ -1895,6 +1904,7 @@ if not BASELINE and siteImport('localConfig'):
|
||||||
localHPCGuideParms = getattr(localConfig, 'parmsHPCGuide',
|
localHPCGuideParms = getattr(localConfig, 'parmsHPCGuide',
|
||||||
localHPCGuideParms)
|
localHPCGuideParms)
|
||||||
localRTMAParms = getattr(localConfig, 'parmsRTMA', localRTMAParms)
|
localRTMAParms = getattr(localConfig, 'parmsRTMA', localRTMAParms)
|
||||||
|
localURMA25Parms = getattr(localConfig, 'parmsURMA25', localURMA25Parms) ###DR17144
|
||||||
localNamDNG5Parms = getattr(localConfig, 'parmsNamDNG5', localNamDNG5Parms)
|
localNamDNG5Parms = getattr(localConfig, 'parmsNamDNG5', localNamDNG5Parms)
|
||||||
localTPCProbParms = getattr(localConfig, 'parmsTPCProb', localTPCProbParms)
|
localTPCProbParms = getattr(localConfig, 'parmsTPCProb', localTPCProbParms)
|
||||||
localAKwave10Parms = getattr(localConfig, 'parmsAKwave10', localAKwave10Parms)
|
localAKwave10Parms = getattr(localConfig, 'parmsAKwave10', localAKwave10Parms)
|
||||||
|
@ -1982,8 +1992,8 @@ OFFICIALDBS = [([Temp, Td, Wind, NWPSwind, Weather, Sky, FzLevel, SnowLevel], TC
|
||||||
([PoP, Ttrend, RHtrend, Wind20ft, WindGust], TC1),
|
([PoP, Ttrend, RHtrend, Wind20ft, WindGust], TC1),
|
||||||
([MinT], MinTTC), ([MaxT], MaxTTC),
|
([MinT], MinTTC), ([MaxT], MaxTTC),
|
||||||
([MinRH], MinRHTC), ([MaxRH], MaxRHTC),
|
([MinRH], MinRHTC), ([MaxRH], MaxRHTC),
|
||||||
([WaveHeight, SurfHeight, Swell, Swell2, Period], TC3NG),
|
# ([WaveHeight, SurfHeight, Swell, Swell2, Period], TC3NG), DR 17496 - this is appended below
|
||||||
([WindWaveHeight, SwanSwell, Wave1, Wave2, Wave3, Wave4, Wave5, Wave6, Wave7, Wave8, Wave9, Wave10, Period1, Period2, Period3, Period4, Period5, Period6, Period7, Period8, Period9, Period10], TC3NG),
|
([SwanSwell, Wave1, Wave2, Wave3, Wave4, Wave5, Wave6, Wave7, Wave8, Wave9, Wave10, Period1, Period3, Period4, Period5, Period6, Period7, Period8, Period9, Period10], TC3NG),
|
||||||
([VentRate, LAL, Haines, MixHgt, FreeWind, TransWind], TC1),
|
([VentRate, LAL, Haines, MixHgt, FreeWind, TransWind], TC1),
|
||||||
([DSI, Stability, MarineLayer], TC1),
|
([DSI, Stability, MarineLayer], TC1),
|
||||||
([HrsOfSun, InvBurnOffTemp], LT24),
|
([HrsOfSun, InvBurnOffTemp], LT24),
|
||||||
|
@ -2005,6 +2015,13 @@ OFFICIALDBS = [([Temp, Td, Wind, NWPSwind, Weather, Sky, FzLevel, SnowLevel], TC
|
||||||
([ApparentT, HeatIndex, WindChill, UWaveDir, VWaveDir, LkSfcT, SnowMap, WaveDir, SnowRatio, StormTotalQPF], TC1),
|
([ApparentT, HeatIndex, WindChill, UWaveDir, VWaveDir, LkSfcT, SnowMap, WaveDir, SnowRatio, StormTotalQPF], TC1),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Add wind/wave paramters based of site ID - DR 17496
|
||||||
|
if SID in GreatLake_SITES:
|
||||||
|
OFFICIALDBS.append(([WaveHeight, WindWaveHeight, SurfHeight, Swell, Swell2, Period, Period2], TC1))
|
||||||
|
else:
|
||||||
|
OFFICIALDBS.append(([WaveHeight, WindWaveHeight, SurfHeight, Swell, Swell2, Period, Period2], TC3NG))
|
||||||
|
# End addition for DR 17496
|
||||||
|
|
||||||
# NWPS
|
# NWPS
|
||||||
nwpsCG1_MODEL = [([SwanSwell, Period, WaveHeight, WindWaveHeight, Wind], TC3NG)]
|
nwpsCG1_MODEL = [([SwanSwell, Period, WaveHeight, WindWaveHeight, Wind], TC3NG)]
|
||||||
|
|
||||||
|
@ -2068,17 +2085,22 @@ TPCTCM_MODEL = [([HiWind], TC3)]
|
||||||
# RTMA database parameter groupings
|
# RTMA database parameter groupings
|
||||||
#if SID in ALASKA_SITES: - not sure if this is right
|
#if SID in ALASKA_SITES: - not sure if this is right
|
||||||
# DCS17288/DR17144
|
# DCS17288/DR17144
|
||||||
if SID in ALASKA_SITES or SID in ["HFO", "SJU"]:
|
if SID in ALASKA_SITES or SID in ["HFO", "SJU", "GUM"]:
|
||||||
RTMAPARMS = [([Temp,Td,RH,Wind,Vis,Pressure,WindGust],TC1),
|
RTMAPARMS = [([Temp,Td,RH,Wind,Vis,Pressure,WindGust],TC1),
|
||||||
([MinT],MinTTC), ([MaxT],MaxTTC),
|
([MinT],MinTTC), ([MaxT],MaxTTC),
|
||||||
([MinRH],MinRHTC), ([MaxRH],MaxRHTC),
|
([MinRH],MinRHTC), ([MaxRH],MaxRHTC),
|
||||||
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc,SkyUnc],TC1)]
|
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc],TC1)]
|
||||||
else:
|
else:
|
||||||
RTMAPARMS = [([Temp,Td,RH,Wind,QPE,Sky,Vis,Pressure,WindGust],TC1),
|
RTMAPARMS = [([Temp,Td,RH,Wind,QPE,Sky,Vis,Pressure,WindGust],TC1),
|
||||||
([MinT],MinTTC), ([MaxT],MaxTTC),
|
([MinT],MinTTC), ([MaxT],MaxTTC),
|
||||||
([MinRH],MinRHTC), ([MaxRH],MaxRHTC),
|
([MinRH],MinRHTC), ([MaxRH],MaxRHTC),
|
||||||
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc,SkyUnc],TC1)]
|
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc,SkyUnc],TC1)]
|
||||||
|
|
||||||
|
URMA25PARMS = [([Temp,Td,RH,Wind,QPE,Sky,Vis,Pressure,WindGust],TC1),
|
||||||
|
([MinT],MinTTC), ([MaxT],MaxTTC),
|
||||||
|
([MinRH],MinRHTC), ([MaxRH],MaxRHTC),
|
||||||
|
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc,SkyUnc],TC1)]
|
||||||
|
|
||||||
# NamDNG5 database parameter groupings
|
# NamDNG5 database parameter groupings
|
||||||
NamDNG5PARMS = [([Temp, Td, RH, Wind, Sky, WindGust, Vis], TC3),
|
NamDNG5PARMS = [([Temp, Td, RH, Wind, Sky, WindGust, Vis], TC3),
|
||||||
([MixHgt, TransWind, SnowLevel], TC3),
|
([MixHgt, TransWind, SnowLevel], TC3),
|
||||||
|
@ -2163,6 +2185,7 @@ DATABASES = [(Official, OFFICIALDBS + localParms),
|
||||||
(MSAS, MSASPARMS + localMSASParms),
|
(MSAS, MSASPARMS + localMSASParms),
|
||||||
(GLERL, GLERLPARMS + localGLERLParms),
|
(GLERL, GLERLPARMS + localGLERLParms),
|
||||||
(RTMA, RTMAPARMS + localRTMAParms),
|
(RTMA, RTMAPARMS + localRTMAParms),
|
||||||
|
(URMA25, URMA25PARMS + localURMA25Parms), ####DR17144
|
||||||
(NamDNG5, NamDNG5PARMS + localNamDNG5Parms),
|
(NamDNG5, NamDNG5PARMS + localNamDNG5Parms),
|
||||||
(TPCProb, TPCProbPARMS + localTPCProbParms),
|
(TPCProb, TPCProbPARMS + localTPCProbParms),
|
||||||
(ENPwave, ENPwave_parms + localENPwaveParms),
|
(ENPwave, ENPwave_parms + localENPwaveParms),
|
||||||
|
|
|
@ -1,280 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<gridParamInfo xmlns:ns2="group">
|
|
||||||
<valtimeMINUSreftime>
|
|
||||||
<fcst>0</fcst>
|
|
||||||
<fcst>3600</fcst>
|
|
||||||
</valtimeMINUSreftime>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>dpterranl</short_name>
|
|
||||||
<long_name>Dewpoint Temperature error analysis</long_name>
|
|
||||||
<units>K</units>
|
|
||||||
<udunits>degree_Kelvin</udunits>
|
|
||||||
<uiname>TdErrorAnalysis</uiname>
|
|
||||||
<valid_range>-330.0</valid_range>
|
|
||||||
<valid_range>330.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 2</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG2</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>staticSpacing</short_name>
|
|
||||||
<long_name>Grid spacing</long_name>
|
|
||||||
<units>meters</units>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>vw</short_name>
|
|
||||||
<long_name>v-component of wind</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>vWind</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>staticCoriolis</short_name>
|
|
||||||
<long_name>Coriolis parameter</long_name>
|
|
||||||
<units>/s</units>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wd</short_name>
|
|
||||||
<long_name>Wind direction (from which blowing)</long_name>
|
|
||||||
<units>deg</units>
|
|
||||||
<udunits>degrees</udunits>
|
|
||||||
<uiname>windDir</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>360.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wderranl</short_name>
|
|
||||||
<long_name>wind dir uncertainty</long_name>
|
|
||||||
<units>deg</units>
|
|
||||||
<udunits>degrees</udunits>
|
|
||||||
<uiname>WDerranlind</uiname>
|
|
||||||
<valid_range>-360.0</valid_range>
|
|
||||||
<valid_range>360.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wserranl</short_name>
|
|
||||||
<long_name>wind speed uncertainty</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>WSerranlind</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>ws</short_name>
|
|
||||||
<long_name>Wind Speed</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>windSpeed</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>dpt</short_name>
|
|
||||||
<long_name>Dewpoint Temperature</long_name>
|
|
||||||
<units>K</units>
|
|
||||||
<udunits>degree_Kelvin</udunits>
|
|
||||||
<uiname>Td</uiname>
|
|
||||||
<valid_range>180.0</valid_range>
|
|
||||||
<valid_range>330.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 2</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG2</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>staticTopo</short_name>
|
|
||||||
<long_name>Topography</long_name>
|
|
||||||
<units>meters</units>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>uw</short_name>
|
|
||||||
<long_name>u-component of wind</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>uWind</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>t</short_name>
|
|
||||||
<long_name>Temperature</long_name>
|
|
||||||
<units>K</units>
|
|
||||||
<udunits>degree_Kelvin</udunits>
|
|
||||||
<uiname>T</uiname>
|
|
||||||
<valid_range>180.0</valid_range>
|
|
||||||
<valid_range>330.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 2</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG2</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>terranl</short_name>
|
|
||||||
<long_name>Temperature error analysis</long_name>
|
|
||||||
<units>K</units>
|
|
||||||
<udunits>degree_Kelvin</udunits>
|
|
||||||
<uiname>ErrorAnalysisT</uiname>
|
|
||||||
<valid_range>-330.0</valid_range>
|
|
||||||
<valid_range>330.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 2</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG2</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>p</short_name>
|
|
||||||
<long_name>pressure</long_name>
|
|
||||||
<units>Pa</units>
|
|
||||||
<udunits>pascal</udunits>
|
|
||||||
<uiname>atmP</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>110000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>perranl</short_name>
|
|
||||||
<long_name>pressure uncertainty</long_name>
|
|
||||||
<units>Pa</units>
|
|
||||||
<udunits>pascal</udunits>
|
|
||||||
<uiname>atmPerranlind</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>110000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>vis</short_name>
|
|
||||||
<long_name>visibility</long_name>
|
|
||||||
<units>m</units>
|
|
||||||
<udunits>meters</udunits>
|
|
||||||
<uiname>Vis</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>100000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>viserranl</short_name>
|
|
||||||
<long_name>visibility uncertainty</long_name>
|
|
||||||
<units>m</units>
|
|
||||||
<udunits>meters</udunits>
|
|
||||||
<uiname>Viserranlind</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>100000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>tcc</short_name>
|
|
||||||
<long_name>Total Cloud Covery</long_name>
|
|
||||||
<units>%</units>
|
|
||||||
<udunits>percent</udunits>
|
|
||||||
<uiname>toalCldCvr</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>100.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>0</n3D>
|
|
||||||
<levelsDesc>EA</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>EA</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wgs</short_name>
|
|
||||||
<long_name>Wind Gust Speed</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>windGustspeed</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wgserranl</short_name>
|
|
||||||
<long_name>wind speed uncertainty</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>WGSerranlind</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
</gridParamInfo>
|
|
|
@ -262,20 +262,4 @@
|
||||||
<level>SFC</level>
|
<level>SFC</level>
|
||||||
</levels>
|
</levels>
|
||||||
</gridParameterInfo>
|
</gridParameterInfo>
|
||||||
</gridParamInfo>
|
</gridParamInfo>
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>tcc</short_name>
|
|
||||||
<long_name>Total Cloud Cover</long_name>
|
|
||||||
<units>%</units>
|
|
||||||
<udunits>percent</udunits>
|
|
||||||
<uiname>totalCloudCover</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>100.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>0</n3D>
|
|
||||||
<levelsDesc>EA</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>EA</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
</gridParamInfo>
|
|
|
@ -1,280 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<gridParamInfo xmlns:ns2="group">
|
|
||||||
<valtimeMINUSreftime>
|
|
||||||
<fcst>0</fcst>
|
|
||||||
<fcst>3600</fcst>
|
|
||||||
</valtimeMINUSreftime>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>dpterranl</short_name>
|
|
||||||
<long_name>Dewpoint Temperature error analysis</long_name>
|
|
||||||
<units>K</units>
|
|
||||||
<udunits>degree_Kelvin</udunits>
|
|
||||||
<uiname>TdErrorAnalysis</uiname>
|
|
||||||
<valid_range>-330.0</valid_range>
|
|
||||||
<valid_range>330.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 2</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG2</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>staticSpacing</short_name>
|
|
||||||
<long_name>Grid spacing</long_name>
|
|
||||||
<units>meters</units>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>vw</short_name>
|
|
||||||
<long_name>v-component of wind</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>vWind</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>staticCoriolis</short_name>
|
|
||||||
<long_name>Coriolis parameter</long_name>
|
|
||||||
<units>/s</units>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wd</short_name>
|
|
||||||
<long_name>Wind direction (from which blowing)</long_name>
|
|
||||||
<units>deg</units>
|
|
||||||
<udunits>degrees</udunits>
|
|
||||||
<uiname>windDir</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>360.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wderranl</short_name>
|
|
||||||
<long_name>wind dir uncertainty</long_name>
|
|
||||||
<units>deg</units>
|
|
||||||
<udunits>degrees</udunits>
|
|
||||||
<uiname>WDerranlind</uiname>
|
|
||||||
<valid_range>-360.0</valid_range>
|
|
||||||
<valid_range>360.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wserranl</short_name>
|
|
||||||
<long_name>wind speed uncertainty</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>WSerranlind</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>ws</short_name>
|
|
||||||
<long_name>Wind Speed</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>windSpeed</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>dpt</short_name>
|
|
||||||
<long_name>Dewpoint Temperature</long_name>
|
|
||||||
<units>K</units>
|
|
||||||
<udunits>degree_Kelvin</udunits>
|
|
||||||
<uiname>Td</uiname>
|
|
||||||
<valid_range>180.0</valid_range>
|
|
||||||
<valid_range>330.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 2</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG2</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>staticTopo</short_name>
|
|
||||||
<long_name>Topography</long_name>
|
|
||||||
<units>meters</units>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>uw</short_name>
|
|
||||||
<long_name>u-component of wind</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>uWind</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>t</short_name>
|
|
||||||
<long_name>Temperature</long_name>
|
|
||||||
<units>K</units>
|
|
||||||
<udunits>degree_Kelvin</udunits>
|
|
||||||
<uiname>T</uiname>
|
|
||||||
<valid_range>180.0</valid_range>
|
|
||||||
<valid_range>330.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 2</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG2</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>terranl</short_name>
|
|
||||||
<long_name>Temperature error analysis</long_name>
|
|
||||||
<units>K</units>
|
|
||||||
<udunits>degree_Kelvin</udunits>
|
|
||||||
<uiname>ErrorAnalysisT</uiname>
|
|
||||||
<valid_range>-330.0</valid_range>
|
|
||||||
<valid_range>330.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 2</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG2</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>vis</short_name>
|
|
||||||
<long_name>visibility</long_name>
|
|
||||||
<units>m</units>
|
|
||||||
<udunits>meters</udunits>
|
|
||||||
<uiname>Vis</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>100000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>viserranl</short_name>
|
|
||||||
<long_name>visibility uncertainty</long_name>
|
|
||||||
<units>m</units>
|
|
||||||
<udunits>meters</udunits>
|
|
||||||
<uiname>Viserranlind</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>100000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>tcc</short_name>
|
|
||||||
<long_name>Total Cloud Cover</long_name>
|
|
||||||
<units>%</units>
|
|
||||||
<udunits>percent</udunits>
|
|
||||||
<uiname>totalCloudCover</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>100.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>0</n3D>
|
|
||||||
<levelsDesc>EA</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>EA</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wgs</short_name>
|
|
||||||
<long_name>Wind Gust Speed</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>windGustSpeed</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>wgserranl</short_name>
|
|
||||||
<long_name>wind speed uncertainty</long_name>
|
|
||||||
<units>m/s</units>
|
|
||||||
<udunits>meter/sec</udunits>
|
|
||||||
<uiname>WGSerranlind</uiname>
|
|
||||||
<valid_range>-150.0</valid_range>
|
|
||||||
<valid_range>150.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>FHAG 10</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>FHAG10</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>p</short_name>
|
|
||||||
<long_name>pressure</long_name>
|
|
||||||
<units>mPa</units>
|
|
||||||
<udunits>pascal</udunits>
|
|
||||||
<uiname>atmP</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>110000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
|
||||||
<short_name>perranl</short_name>
|
|
||||||
<long_name>pressure uncertainty</long_name>
|
|
||||||
<units>Pa</units>
|
|
||||||
<udunits>pascal</udunits>
|
|
||||||
<uiname>atmPerranlind</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>110000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>1</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
</gridParamInfo>
|
|
|
@ -209,7 +209,7 @@
|
||||||
<uiname>primaryWaveDir</uiname>
|
<uiname>primaryWaveDir</uiname>
|
||||||
<valid_range>0.0</valid_range>
|
<valid_range>0.0</valid_range>
|
||||||
<valid_range>360.0</valid_range>
|
<valid_range>360.0</valid_range>
|
||||||
<fillValue>-99999.0</fillValue>
|
<fillValue>-999.0</fillValue>
|
||||||
<n3D>1</n3D>
|
<n3D>1</n3D>
|
||||||
<levelsDesc>SFC</levelsDesc>
|
<levelsDesc>SFC</levelsDesc>
|
||||||
<levels>
|
<levels>
|
||||||
|
|
|
@ -102,18 +102,18 @@
|
||||||
</gridParameterInfo>
|
</gridParameterInfo>
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||||
<short_name>tccerranl</short_name>
|
<short_name>tccerranl</short_name>
|
||||||
<long_name>Total Cloud Cover error analysis</long_name>
|
<long_name>Total Cloud cover uncertainty</long_name>
|
||||||
<units>%</units>
|
<units>%</units>
|
||||||
<udunits>percent</udunits>
|
<udunits>percent</udunits>
|
||||||
<uiname>ErrorAnalysisCloud</uiname>
|
<uiname>TCerranlind</uiname>
|
||||||
<valid_range>0.0</valid_range>
|
<valid_range>0.0</valid_range>
|
||||||
<valid_range>100.0</valid_range>
|
<valid_range>100.0</valid_range>
|
||||||
<fillValue>-99999.0</fillValue>
|
<fillValue>-99999.0</fillValue>
|
||||||
<n3D>0</n3D>
|
|
||||||
<levelsDesc>EA</levelsDesc>
|
<levelsDesc>EA</levelsDesc>
|
||||||
<levels>
|
<levels>
|
||||||
<level>EA</level>
|
<level>EA</level>
|
||||||
</levels>
|
</levels>
|
||||||
|
<n3D>0</n3D>
|
||||||
</gridParameterInfo>
|
</gridParameterInfo>
|
||||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||||
<short_name>tp</short_name>
|
<short_name>tp</short_name>
|
||||||
|
|
|
@ -85,21 +85,6 @@
|
||||||
<units>m</units>
|
<units>m</units>
|
||||||
<fillValue>-99999.0</fillValue>
|
<fillValue>-99999.0</fillValue>
|
||||||
</gridParameterInfo>
|
</gridParameterInfo>
|
||||||
<gridParameterInfo xsi:type="parameterInfo">
|
|
||||||
<short_name>tp6hr</short_name>
|
|
||||||
<long_name>total precipitation</long_name>
|
|
||||||
<units>mm</units>
|
|
||||||
<udunits>millimeter</udunits>
|
|
||||||
<uiname>totPrecip</uiname>
|
|
||||||
<valid_range>0.0</valid_range>
|
|
||||||
<valid_range>1000.0</valid_range>
|
|
||||||
<fillValue>-99999.0</fillValue>
|
|
||||||
<n3D>0</n3D>
|
|
||||||
<levelsDesc>SFC</levelsDesc>
|
|
||||||
<levels>
|
|
||||||
<level>SFC</level>
|
|
||||||
</levels>
|
|
||||||
</gridParameterInfo>
|
|
||||||
<gridParameterInfo xsi:type="parameterInfo">
|
<gridParameterInfo xsi:type="parameterInfo">
|
||||||
<short_name>dpterranl</short_name>
|
<short_name>dpterranl</short_name>
|
||||||
<long_name>Dewpoint Temperature error analysis</long_name>
|
<long_name>Dewpoint Temperature error analysis</long_name>
|
||||||
|
@ -145,12 +130,26 @@
|
||||||
<valid_range>0.0</valid_range>
|
<valid_range>0.0</valid_range>
|
||||||
<valid_range>100.0</valid_range>
|
<valid_range>100.0</valid_range>
|
||||||
<fillValue>-99999.0</fillValue>
|
<fillValue>-99999.0</fillValue>
|
||||||
<n3D>0</n3D>
|
|
||||||
<levelsDesc>EA</levelsDesc>
|
<levelsDesc>EA</levelsDesc>
|
||||||
<levels>
|
<levels>
|
||||||
<level>EA</level>
|
<level>EA</level>
|
||||||
</levels>
|
</levels>
|
||||||
<levels>EA</levels>
|
<n3D>0</n3D>
|
||||||
|
</gridParameterInfo>
|
||||||
|
<gridParameterInfo xsi:type="parameterInfo">
|
||||||
|
<short_name>tccerranl</short_name>
|
||||||
|
<long_name>Total Cloud cover uncertainty</long_name>
|
||||||
|
<units>%</units>
|
||||||
|
<udunits>percent</udunits>
|
||||||
|
<uiname>TCerranlind</uiname>
|
||||||
|
<valid_range>0.0</valid_range>
|
||||||
|
<valid_range>100.0</valid_range>
|
||||||
|
<fillValue>-99999.0</fillValue>
|
||||||
|
<levelsDesc>EA</levelsDesc>
|
||||||
|
<levels>
|
||||||
|
<level>EA</level>
|
||||||
|
</levels>
|
||||||
|
<n3D>0</n3D>
|
||||||
</gridParameterInfo>
|
</gridParameterInfo>
|
||||||
<gridParameterInfo xsi:type="parameterInfo">
|
<gridParameterInfo xsi:type="parameterInfo">
|
||||||
<short_name>dpt</short_name>
|
<short_name>dpt</short_name>
|
||||||
|
@ -323,4 +322,19 @@
|
||||||
</levels>
|
</levels>
|
||||||
<n3D>1</n3D>
|
<n3D>1</n3D>
|
||||||
</gridParameterInfo>
|
</gridParameterInfo>
|
||||||
|
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||||
|
<short_name>tp6hr</short_name>
|
||||||
|
<long_name>total precipitation 6hr</long_name>
|
||||||
|
<units>mm</units>
|
||||||
|
<udunits>millimeter</udunits>
|
||||||
|
<uiname>totPrecip6hr</uiname>
|
||||||
|
<valid_range>0.0</valid_range>
|
||||||
|
<valid_range>1000.0</valid_range>
|
||||||
|
<fillValue>-99999.0</fillValue>
|
||||||
|
<n3D>0</n3D>
|
||||||
|
<levelsDesc>SFC</levelsDesc>
|
||||||
|
<levels>
|
||||||
|
<level>SFC</level>
|
||||||
|
</levels>
|
||||||
|
</gridParameterInfo>
|
||||||
</gridParamInfo>
|
</gridParamInfo>
|
|
@ -35,7 +35,7 @@ class RTMAForecaster(Forecaster):
|
||||||
direc=wind_FHAG10[1]
|
direc=wind_FHAG10[1]
|
||||||
newmag=self.convertMsecToKts(mag)
|
newmag=self.convertMsecToKts(mag)
|
||||||
return (newmag,direc)
|
return (newmag,direc)
|
||||||
|
|
||||||
def calcWindGust(self, wgs_FHAG10):
|
def calcWindGust(self, wgs_FHAG10):
|
||||||
newmag=self.convertMsecToKts(wgs_FHAG10)
|
newmag=self.convertMsecToKts(wgs_FHAG10)
|
||||||
return newmag
|
return newmag
|
||||||
|
@ -52,12 +52,6 @@ class RTMAForecaster(Forecaster):
|
||||||
grid = tcc_EA
|
grid = tcc_EA
|
||||||
return clip(grid, 0, 100)
|
return clip(grid, 0, 100)
|
||||||
##--------------------------------------------------------------------------
|
##--------------------------------------------------------------------------
|
||||||
## Sky Analysis Uncertainty
|
|
||||||
##--------------------------------------------------------------------------
|
|
||||||
def calcSkyUnc(self, tccerranl_EA):
|
|
||||||
grid = tccerranl_EA
|
|
||||||
return clip(grid, 0, 100)
|
|
||||||
##--------------------------------------------------------------------------
|
|
||||||
## T - change K to F
|
## T - change K to F
|
||||||
##--------------------------------------------------------------------------
|
##--------------------------------------------------------------------------
|
||||||
def calcT(self, t_FHAG2):
|
def calcT(self, t_FHAG2):
|
||||||
|
@ -119,6 +113,13 @@ class RTMAForecaster(Forecaster):
|
||||||
def calcPressUnc(self, perranl_SFC):
|
def calcPressUnc(self, perranl_SFC):
|
||||||
return perranl_SFC
|
return perranl_SFC
|
||||||
##--------------------------------------------------------------------------
|
##--------------------------------------------------------------------------
|
||||||
|
## Sky Analysis Uncertainty
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcSkyUnc(self, tccerranl_EA):
|
||||||
|
grid = tccerranl_EA
|
||||||
|
return clip(grid, 0, 100)
|
||||||
|
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
## Wind Analysis Uncertainty - change m/s to kts
|
## Wind Analysis Uncertainty - change m/s to kts
|
||||||
##--------------------------------------------------------------------------
|
##--------------------------------------------------------------------------
|
||||||
def calcWSpdUnc(self, wserranl_FHAG10):
|
def calcWSpdUnc(self, wserranl_FHAG10):
|
||||||
|
@ -127,10 +128,12 @@ class RTMAForecaster(Forecaster):
|
||||||
return newmag
|
return newmag
|
||||||
|
|
||||||
def calcWDirUnc(self, wderranl_FHAG10):
|
def calcWDirUnc(self, wderranl_FHAG10):
|
||||||
return wderranl_FHAG10
|
return wderranl_FHAG10
|
||||||
|
|
||||||
def calcWGustUnc(self, wgserranl_FHAG10):
|
def calcWGustUnc(self, wgserranl_FHAG10):
|
||||||
return wgserranl_FHAG10
|
mag = wgserranl_FHAG10
|
||||||
|
newmag=self.convertMsecToKts(mag)
|
||||||
|
return newmag
|
||||||
##--------------------------------------------------------------------------
|
##--------------------------------------------------------------------------
|
||||||
## Visibility
|
## Visibility
|
||||||
##--------------------------------------------------------------------------
|
##--------------------------------------------------------------------------
|
||||||
|
|
|
@ -0,0 +1,166 @@
|
||||||
|
##
|
||||||
|
# This software was developed and / or modified by Raytheon Company,
|
||||||
|
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
#
|
||||||
|
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
# This software product contains export-restricted data whose
|
||||||
|
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
# to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
# an export license or other authorization.
|
||||||
|
#
|
||||||
|
# Contractor Name: Raytheon Company
|
||||||
|
# Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
# Mail Stop B8
|
||||||
|
# Omaha, NE 68106
|
||||||
|
# 402.291.0100
|
||||||
|
#
|
||||||
|
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
# further licensing information.
|
||||||
|
##
|
||||||
|
from Init import *
|
||||||
|
#
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Smart Init to transform URMA25 D2D grids into corresponding GFE URMA25 grids
|
||||||
|
##
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
class URMA25Forecaster(Forecaster):
|
||||||
|
def __init__(self):
|
||||||
|
Forecaster.__init__(self, "URMA25", "URMA25")
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Wind - change m/s to kts
|
||||||
|
##-------------------------------------------
|
||||||
|
def calcWind(self, wind_FHAG10):
|
||||||
|
mag=wind_FHAG10[0]
|
||||||
|
direc=wind_FHAG10[1]
|
||||||
|
newmag=self.convertMsecToKts(mag)
|
||||||
|
return (newmag,direc)
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## QPE - change mm to inches and clip greater than 1000mm
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcQPE(self, tp6hr_SFC):
|
||||||
|
grid = where(greater(tp6hr_SFC, 1000), 0.0, tp6hr_SFC / 25.4)
|
||||||
|
return clip(grid, 0, 10) # clip at zero and 10 inches
|
||||||
|
|
||||||
|
#==========================================================================
|
||||||
|
#
|
||||||
|
# QPF6 - sums up all QPF grids within each 6 hour period
|
||||||
|
#
|
||||||
|
## def calcQPE06(self, QPE, QPE06, ctime):
|
||||||
|
## modelhour = time.gmtime(ctime[0])
|
||||||
|
## forecastHR = modelhour[3]
|
||||||
|
## if forecastHR in [0, 6, 12, 18]:
|
||||||
|
## QPE06 = 0
|
||||||
|
## if QPE06 is None:
|
||||||
|
## QPE06 = 0
|
||||||
|
## QPE06 = QPE06 + QPE
|
||||||
|
## return QPE06
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Sky
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcSky(self, tcc_EA):
|
||||||
|
grid = tcc_EA
|
||||||
|
return clip(grid, 0, 100)
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## T - change K to F
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcT(self, t_FHAG2):
|
||||||
|
return self.KtoF(t_FHAG2)
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Td - change K to F
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcTd(self,dpt_FHAG2):
|
||||||
|
return self.KtoF(dpt_FHAG2)
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## MaxT and MinT - max and min of hourly Ts
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcMaxT(self, T, MaxT):
|
||||||
|
if MaxT is None:
|
||||||
|
return T
|
||||||
|
return maximum(MaxT, T)
|
||||||
|
|
||||||
|
def calcMinT(self, T, MinT):
|
||||||
|
if MinT is None:
|
||||||
|
return T
|
||||||
|
return minimum(MinT, T)
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Surface Pressure
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcPressure(self, p_SFC):
|
||||||
|
return p_SFC
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Pressure Analysis Uncertainty
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcPressUnc(self, perranl_SFC):
|
||||||
|
return perranl_SFC
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## RH - calculated from T and Td, rather than from input specific humidity
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcRH(self, T, Td):
|
||||||
|
Vt=self.vaprtf(T)
|
||||||
|
Vd=self.vaprtf(Td)
|
||||||
|
return ( (Vd / Vt) * 100.0)
|
||||||
|
|
||||||
|
def vaprtf(self,tf):
|
||||||
|
tc=(tf-32.0)*5.0/9.0
|
||||||
|
vapr=6.112*exp((17.67*tc)/(tc+243.5))
|
||||||
|
return vapr
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## MaxRH and MinRH - max and min of hourly RHs
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcMaxRH(self, RH, MaxRH):
|
||||||
|
if MaxRH is None:
|
||||||
|
return RH
|
||||||
|
return maximum(MaxRH, RH)
|
||||||
|
|
||||||
|
def calcMinRH(self, RH, MinRH):
|
||||||
|
if MinRH is None:
|
||||||
|
return RH
|
||||||
|
return minimum(MinRH, RH)
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## T Analysis Uncertainty - change K to F
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcTUnc(self, terranl_FHAG2):
|
||||||
|
return terranl_FHAG2 * 1.8
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Td Analysis Uncertainty - change K to F
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcTdUnc(self,dpterranl_FHAG2):
|
||||||
|
return dpterranl_FHAG2 * 1.8
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Wind Analysis Uncertainty - change m/s to kts
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcWSpdUnc(self, wserranl_FHAG10):
|
||||||
|
mag = wserranl_FHAG10
|
||||||
|
newmag=self.convertMsecToKts(mag)
|
||||||
|
return newmag
|
||||||
|
|
||||||
|
def calcWDirUnc(self, wderranl_FHAG10):
|
||||||
|
return wderranl_FHAG10
|
||||||
|
|
||||||
|
def calcWGustUnc(self, wgserranl_FHAG10):
|
||||||
|
mag = wgserranl_FHAG10
|
||||||
|
newmag=self.convertMsecToKts(mag)
|
||||||
|
return newmag
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Sky Analysis Uncertainty
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcSkyUnc(self, tccerranl_EA):
|
||||||
|
grid = tccerranl_EA
|
||||||
|
return clip(grid, 0, 100)
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Visibility
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcVis(self, vis_SFC):
|
||||||
|
return self.convertMtoSM(vis_SFC)
|
||||||
|
|
||||||
|
def calcVisUnc(self, viserranl_SFC):
|
||||||
|
return self.convertMtoSM(viserranl_SFC)
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
## Gust Wind - change m/s to kts
|
||||||
|
##--------------------------------------------------------------------------
|
||||||
|
def calcWindGust(self, wgs_FHAG10):
|
||||||
|
newmag=self.convertMsecToKts(wgs_FHAG10)
|
||||||
|
return(newmag)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
URMA25Forecaster().run()
|
|
@ -17,8 +17,21 @@ class nwpsCG1Forecaster(Forecaster):
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
nwpsCG1Forecaster().run()
|
nwpsCG1Forecaster().run()
|
||||||
|
chkfile = "/tmp/nwps/CG1"
|
||||||
|
chkfiledir = "/tmp/nwps"
|
||||||
|
try:
|
||||||
|
os.makedirs(chkfiledir)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
if not os.path.isfile(chkfile):
|
||||||
|
open(chkfile, 'a').close()
|
||||||
|
os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "SWAN WAVE GRIDS ARE NOW IN GFE"')
|
||||||
|
filemodtime = os.stat(chkfile).st_mtime
|
||||||
|
twominutesago = time.time() - 120
|
||||||
|
if (twominutesago - filemodtime) > 0:
|
||||||
|
os.utime(chkfile, None)
|
||||||
|
os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "SWAN WAVE GRIDS ARE NOW IN GFE"')
|
||||||
|
|
||||||
os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "SWAN WAVE GRIDS ARE NOW IN GFE"')
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -57,8 +57,20 @@ class nwpsTrkngCG0Forecaster(Forecaster):
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
nwpsTrkngCG0Forecaster().run()
|
nwpsTrkngCG0Forecaster().run()
|
||||||
|
chkfile = "/tmp/nwps/CGTrack"
|
||||||
os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "TRACKING WAVE GRIDS ARE NOW IN GFE"')
|
chkfiledir = "/tmp/nwps"
|
||||||
|
try:
|
||||||
|
os.makedirs(chkfiledir)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
if not os.path.isfile(chkfile):
|
||||||
|
open(chkfile, 'a').close()
|
||||||
|
os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "TRACKING WAVE GRIDS ARE NOW IN GFE"')
|
||||||
|
filemodtime = os.stat(chkfile).st_mtime
|
||||||
|
twominutesago = time.time() - 120
|
||||||
|
if (twominutesago - filemodtime) > 0:
|
||||||
|
os.utime(chkfile, None)
|
||||||
|
os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "TRACKING WAVE GRIDS ARE NOW IN GFE"')
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Version 2015.2.12-1
|
# Version 2015.5.21-0
|
||||||
|
|
||||||
import GenericHazards
|
import GenericHazards
|
||||||
import string, time, os, re, types, copy, LogStream, collections
|
import string, time, os, re, types, copy, LogStream, collections
|
||||||
|
@ -23,7 +23,7 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
||||||
Definition["database"] = "Official" # Source database
|
Definition["database"] = "Official" # Source database
|
||||||
Definition["debug"] = 1
|
Definition["debug"] = 1
|
||||||
Definition["mapNameForCombinations"] = "Zones_<site>"
|
Definition["mapNameForCombinations"] = "Zones_<site>"
|
||||||
Definition["defaultEditAreas"] = "Combinations_HLS_<site>"
|
Definition["defaultEditAreas"] = ""
|
||||||
Definition["showZoneCombiner"] = 0 # 1 to cause zone combiner to display
|
Definition["showZoneCombiner"] = 0 # 1 to cause zone combiner to display
|
||||||
|
|
||||||
Definition["productName"] = "Local Statement"
|
Definition["productName"] = "Local Statement"
|
||||||
|
@ -1560,7 +1560,7 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
||||||
self._stormTypeName = self._stormType + " " + self._stormName
|
self._stormTypeName = self._stormType + " " + self._stormName
|
||||||
self._decodeStormInfo(stormDict)
|
self._decodeStormInfo(stormDict)
|
||||||
# Storm movement in mph and the stated movement trend
|
# Storm movement in mph and the stated movement trend
|
||||||
self._stormMovementTrend = self._expandBearings("Moving " + stormDict.get("StormMotion",""))
|
self._stormMovementTrend = self._expandBearings("Movement " + stormDict.get("StormMotion",""))
|
||||||
# Storm intensity in mph and the stated intensity trend.
|
# Storm intensity in mph and the stated intensity trend.
|
||||||
self._stormIntensityTrend = "Storm Intensity " + stormDict.get("StormIntensity","")
|
self._stormIntensityTrend = "Storm Intensity " + stormDict.get("StormIntensity","")
|
||||||
|
|
||||||
|
@ -1654,8 +1654,7 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
||||||
summarySearch = re.search("(?is)SUMMARY OF (.+?)\.{3}.+?" +
|
summarySearch = re.search("(?is)SUMMARY OF (.+?)\.{3}.+?" +
|
||||||
"LOCATION\.{3}(.+?[NS]) +(.+?[WE]).+?" +
|
"LOCATION\.{3}(.+?[NS]) +(.+?[WE]).+?" +
|
||||||
"(ABOUT .+?)MAXIMUM SUSTAINED WIND.+?" +
|
"(ABOUT .+?)MAXIMUM SUSTAINED WIND.+?" +
|
||||||
"(\d+ MPH).+?PRESENT MOVEMENT\.{3}" +
|
"(\d+ MPH).+?", tcp)
|
||||||
"(.+?)\.{3}", tcp)
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
# If we found the NHC summary section
|
# If we found the NHC summary section
|
||||||
|
@ -1668,7 +1667,17 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
||||||
dict["StormLon"] = summarySearch.group(3).strip()
|
dict["StormLon"] = summarySearch.group(3).strip()
|
||||||
dict["StormReference"] = summarySearch.group(4).strip()
|
dict["StormReference"] = summarySearch.group(4).strip()
|
||||||
dict["StormIntensity"] = summarySearch.group(5).strip()
|
dict["StormIntensity"] = summarySearch.group(5).strip()
|
||||||
dict["StormMotion"] = summarySearch.group(6).strip()
|
|
||||||
|
haveStormMotion = True
|
||||||
|
if tcp.find("PRESENT MOVEMENT...STATIONARY") != -1:
|
||||||
|
dict["StormMotion"] = "STATIONARY"
|
||||||
|
else:
|
||||||
|
summarySearch = re.search("PRESENT MOVEMENT\.{3}(.+?)\.{3}", tcp)
|
||||||
|
|
||||||
|
if summarySearch is not None:
|
||||||
|
dict["StormMotion"] = summarySearch.group(1).strip()
|
||||||
|
else:
|
||||||
|
haveStormMotion = False
|
||||||
|
|
||||||
#================================================================
|
#================================================================
|
||||||
# Use the remaining summary groups to contruct a paragraph
|
# Use the remaining summary groups to contruct a paragraph
|
||||||
|
@ -1731,9 +1740,10 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
||||||
#----------------------------------------------------------------
|
#----------------------------------------------------------------
|
||||||
# Now add the storm motion
|
# Now add the storm motion
|
||||||
|
|
||||||
dict["StormCenter"] = "%s THE STORM MOTION WAS %s." % \
|
if haveStormMotion:
|
||||||
(dict["StormCenter"],
|
dict["StormCenter"] = "%s THE STORM MOTION WAS %s." % \
|
||||||
self._removeKM(dict["StormMotion"]))
|
(dict["StormCenter"],
|
||||||
|
self._removeKM(dict["StormMotion"]))
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Version 2015.2.13-0
|
# Version 2015.5.22-0
|
||||||
|
|
||||||
import GenericHazards
|
import GenericHazards
|
||||||
import JsonSupport
|
import JsonSupport
|
||||||
|
@ -19,7 +19,6 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
||||||
Definition["displayName"] = "None"
|
Definition["displayName"] = "None"
|
||||||
Definition["outputFile"] = "{prddir}/TEXT/TCV.txt"
|
Definition["outputFile"] = "{prddir}/TEXT/TCV.txt"
|
||||||
Definition["database"] = "Official" # Source database
|
Definition["database"] = "Official" # Source database
|
||||||
Definition["debug"] = 1
|
|
||||||
Definition["mapNameForCombinations"] = "Zones_<site>"
|
Definition["mapNameForCombinations"] = "Zones_<site>"
|
||||||
Definition["defaultEditAreas"] = "Combinations_TCV_<site>"
|
Definition["defaultEditAreas"] = "Combinations_TCV_<site>"
|
||||||
Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display
|
Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display
|
||||||
|
@ -1490,13 +1489,10 @@ class SectionCommon():
|
||||||
if self._tr is not None:
|
if self._tr is not None:
|
||||||
specialStatements = self._specialImpactsStatements()
|
specialStatements = self._specialImpactsStatements()
|
||||||
if self._tr in specialStatements.keys():
|
if self._tr in specialStatements.keys():
|
||||||
if self._tr == "default":
|
if self._tr == "recovery" and not self.isThreatInAllAdvisories:
|
||||||
return specialStatements[self._tr][maxThreat]
|
return []
|
||||||
else:
|
else:
|
||||||
if self._tr == "recovery" and not self.isThreatInAllAdvisories:
|
return specialStatements[self._tr]
|
||||||
return []
|
|
||||||
else:
|
|
||||||
return specialStatements[self._tr]
|
|
||||||
|
|
||||||
import TCVDictionary
|
import TCVDictionary
|
||||||
potentialImpactStatements = TCVDictionary.PotentialImpactStatements
|
potentialImpactStatements = TCVDictionary.PotentialImpactStatements
|
||||||
|
@ -1507,19 +1503,27 @@ class SectionCommon():
|
||||||
|
|
||||||
segment, vtecRecords = productSegment
|
segment, vtecRecords = productSegment
|
||||||
|
|
||||||
self._textProduct.debug_print("zone number = %s, elementName = %s, maxThreat = %s" %
|
self._textProduct.debug_print("zone number = %s, elementName = %s, maxThreat = %s, tr = %s" %
|
||||||
(segment, elementName, maxThreat), 1)
|
(segment, elementName, maxThreat, self._tr), 1)
|
||||||
|
|
||||||
if segment in tcv_AreaDictionary:
|
if segment in tcv_AreaDictionary:
|
||||||
potentialImpactStatements = tcv_AreaDictionary[segment]["potentialImpactsStatements"]
|
potentialImpactStatements = tcv_AreaDictionary[segment]["potentialImpactsStatements"]
|
||||||
|
|
||||||
# Check for any overrides
|
# Check for any overrides
|
||||||
try:
|
try:
|
||||||
statements = potentialImpactStatements[elementName][maxThreat]
|
statements = potentialImpactStatements[elementName][maxThreat]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return statements
|
# If this is the "default" case
|
||||||
|
if self._tr == "default" and len(statements) > 0:
|
||||||
|
|
||||||
|
if elementName in ["Wind", "Storm Surge"]:
|
||||||
|
if statements[0].find("If realized, ") == -1:
|
||||||
|
statements[0] = "If realized, " + statements[0] + \
|
||||||
|
statements[0][1:]
|
||||||
|
|
||||||
|
return statements
|
||||||
|
|
||||||
# Specific hazard sections can override this to provide special impacts statements
|
# Specific hazard sections can override this to provide special impacts statements
|
||||||
def _specialImpactsStatements(self):
|
def _specialImpactsStatements(self):
|
||||||
|
@ -1687,29 +1691,6 @@ class WindSection(SectionCommon):
|
||||||
],
|
],
|
||||||
"recovery": ["Little to no additional wind impacts expected. Community officials are now assessing the extent of actual wind impacts accordingly.",
|
"recovery": ["Little to no additional wind impacts expected. Community officials are now assessing the extent of actual wind impacts accordingly.",
|
||||||
],
|
],
|
||||||
"default": {"Extreme": ["If realized, major hurricane force wind can cause structural damage to sturdy buildings, some with complete roof and wall failures. Complete destruction of mobile homes. Damage greatly accentuated by large airborne projectiles. Locations may be uninhabitable for weeks or months.",
|
|
||||||
"Numerous large trees snapped or uprooted along with fences and roadway signs blown over.",
|
|
||||||
"Many roads impassable from large debris, and more within urban or heavily wooded places. Many bridges, causeways, and access routes impassable.",
|
|
||||||
"Widespread power and communication outages.",
|
|
||||||
],
|
|
||||||
"High": ["If realized, hurricane force wind can cause considerable roof damage to sturdy buildings, with some having window, door, and garage door failures leading to structural damage. Mobile homes severely damaged, with some destroyed. Damage accentuated by airborne projectiles. Locations may be uninhabitable for weeks.",
|
|
||||||
"Many large trees snapped or uprooted along with fences and roadway signs blown over.",
|
|
||||||
"Some roads impassable from large debris, and more within urban or heavily wooded places. Several bridges, causeways, and access routes impassable.",
|
|
||||||
"Large areas with power and communications outages.",
|
|
||||||
],
|
|
||||||
"Mod": ["If realized, strong tropical storm force wind can cause some damage to roofing and siding materials, along with damage to porches, awnings, carports, and sheds. A few buildings experiencing window, door, and garage door failures. Mobile homes damaged, especially if unanchored. Unsecured lightweight objects become dangerous projectiles.",
|
|
||||||
"Several large trees snapped or uprooted, but with greater numbers in places where trees are shallow rooted. Several fences and roadway signs blown over.",
|
|
||||||
"Some roads impassable from large debris, and more within urban or heavily wooded places. A few bridges, causeways, and access routes connecting barrier islands impassable.",
|
|
||||||
"Scattered power and communications outages, but more prevalent in areas with above ground lines.",
|
|
||||||
],
|
|
||||||
"Elevated": ["If realized, tropical storm force wind can cause damage to porches, awnings, carports, sheds, and unanchored mobile homes. Unsecured lightweight objects blown about.",
|
|
||||||
"Many large tree limbs broken off. A few trees snapped or uprooted, but with greater numbers in places where trees are shallow rooted. Some fences and roadway signs blown over.",
|
|
||||||
"A few roads impassable from debris, particularly within urban or heavily wooded places. Hazardous driving conditions on bridges and other elevated roadways.",
|
|
||||||
"Scattered power and communications outages.",
|
|
||||||
],
|
|
||||||
"None": ["Little to no potential impacts from wind.",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
### Supporting functions
|
### Supporting functions
|
||||||
|
@ -1878,29 +1859,6 @@ class StormSurgeSection(SectionCommon):
|
||||||
],
|
],
|
||||||
"recovery": ["Little to no additional surge impacts expected. Community officials are now assessing the extent of actual surge impacts accordingly.",
|
"recovery": ["Little to no additional surge impacts expected. Community officials are now assessing the extent of actual surge impacts accordingly.",
|
||||||
],
|
],
|
||||||
"default": {"Extreme": ["If realized, extreme storm surge flooding can cause widespread deep inundation accentuated by powerful battering waves. Structural damage to buildings, with many washing away. Damage greatly compounded from considerable floating debris. Locations may be uninhabitable for an extended period.",
|
|
||||||
"Near-shore escape routes and secondary roads washed out or severely flooded. Flood control systems and barriers may become stressed.",
|
|
||||||
"Extreme beach erosion. New shoreline cuts possible.",
|
|
||||||
"Massive damage to marinas, docks, boardwalks, and piers. Numerous small craft broken away from moorings with many lifted onshore and stranded.",
|
|
||||||
],
|
|
||||||
"High": ["If realized, major storm surge flooding can cause large areas of deep inundation accentuated by battering waves. Structural damage to buildings, with several washing away. Damage compounded by floating debris. Locations may be uninhabitable for an extended period.",
|
|
||||||
"Large sections of near-shore escape routes and secondary roads washed out or severely flooded. Flood control systems and barriers may become stressed.",
|
|
||||||
"Severe beach erosion with significant dune loss.",
|
|
||||||
"Major damage to marinas, docks, boardwalks, and piers. Many small craft broken away from moorings, especially in unprotected anchorages with some lifted onshore and stranded.",
|
|
||||||
],
|
|
||||||
"Mod": ["If realized, moderate storm surge flooding can cause areas of inundation accentuated by large waves. Damage to several buildings, mainly near the coast.",
|
|
||||||
"Sections of near-shore escape routes and secondary roads become weakened or washed out, especially in usually vulnerable low spots.",
|
|
||||||
"Major beach erosion with heavy surf breaching dunes. Strong and numerous rip currents.",
|
|
||||||
"Moderate damage to marinas, docks, boardwalks, and piers. Several small craft broken away from moorings, especially in unprotected anchorages.",
|
|
||||||
],
|
|
||||||
"Elevated": ["If realized, minor to moderate storm surge flooding can cause localized inundation mainly along immediate shorelines and in low-lying spots, or in areas farther inland near where higher surge waters move ashore.",
|
|
||||||
"Sections of near-shore roads and parking lots become overspread with surge water. Driving conditions dangerous in places where surge water covers the road.",
|
|
||||||
"Moderate beach erosion. Heavy surf also breaching dunes, mainly in usually vulnerable locations. Strong rip currents.",
|
|
||||||
"Minor to locally moderate damage to marinas, docks, boardwalks, and piers. A few small craft broken away from moorings.",
|
|
||||||
],
|
|
||||||
"None": ["Little to no potential impacts from storm surge.",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def _potentialImpactsSummary(self, segmentDict, productSegmentGroup, productSegment):
|
def _potentialImpactsSummary(self, segmentDict, productSegmentGroup, productSegment):
|
||||||
|
@ -2039,25 +1997,6 @@ class FloodingRainSection(SectionCommon):
|
||||||
],
|
],
|
||||||
"recovery": ["For additional information on impacts being caused by flooding rain, refer to the local hazardous weather outlook or hurricane local statement.",
|
"recovery": ["For additional information on impacts being caused by flooding rain, refer to the local hazardous weather outlook or hurricane local statement.",
|
||||||
],
|
],
|
||||||
"default": {"Extreme": ["If realized, extreme rainfall flooding may prompt numerous evacuations and rescues.",
|
|
||||||
"Rivers and tributaries may overwhelmingly overflow their banks in many places with deep moving water. Small streams, creeks, canals, arroyos, and ditches may become raging rivers. In mountain areas, deadly runoff may rage down valleys while increasing susceptibility to rockslides and mudslides. Flood control systems and barriers may become stressed.",
|
|
||||||
"Flood waters can enter numerous structures within multiple communities, some structures becoming uninhabitable or washed away. Numerous places where flood waters may cover escape routes. Streets and parking lots become rivers of raging water with underpasses submerged. Driving conditions become very dangerous. Numerous road and bridge closures with some weakened or washed out.",
|
|
||||||
],
|
|
||||||
"High": ["If realized, major rainfall flooding may prompt many evacuations and rescues.",
|
|
||||||
"Rivers and tributaries may rapidly overflow their banks in multiple places. Small streams, creeks, canals, arroyos, and ditches may become dangerous rivers. In mountain areas, destructive runoff may run quickly down valleys while increasing susceptibility to rockslides and mudslides. Flood control systems and barriers may become stressed.",
|
|
||||||
"Flood waters can enter many structures within multiple communities, some structures becoming uninhabitable or washed away. Many places where flood waters may cover escape routes. Streets and parking lots become rivers of moving water with underpasses submerged. Driving conditions become dangerous. Many road and bridge closures with some weakened or washed out.",
|
|
||||||
],
|
|
||||||
"Mod": ["If realized, moderate rainfall flooding may prompt several evacuations and rescues.",
|
|
||||||
"Rivers and tributaries may quickly become swollen with swifter currents and overspill their banks in a few places, especially in usually vulnerable spots. Small streams, creeks, canals, arroyos, and ditches overflow.",
|
|
||||||
"Flood waters can enter some structures or weaken foundations. Several places may experience expanded areas of rapid inundation at underpasses, low-lying spots, and poor drainage areas. Some streets and parking lots take on moving water as storm drains and retention ponds overflow. Driving conditions become hazardous. Some road and bridge closures.",
|
|
||||||
],
|
|
||||||
"Elevated": ["If realized, localized rainfall flooding may prompt a few evacuations.",
|
|
||||||
"Rivers and tributaries may quickly rise with swifter currents. Small streams, creeks, canals, arroyos, and ditches may become swollen and overflow in spots.",
|
|
||||||
"Flood waters can enter a few structures, especially in usually vulnerable spots. A few places where rapid ponding of water occurs at underpasses, low-lying spots, and poor drainage areas. Several storm drains and retention ponds become near-full and begin to overflow. Some brief road and bridge closures.",
|
|
||||||
],
|
|
||||||
"None": ["Little to no potential impacts from flooding rain.",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class TornadoSection(SectionCommon):
|
class TornadoSection(SectionCommon):
|
||||||
|
@ -2159,25 +2098,6 @@ class TornadoSection(SectionCommon):
|
||||||
],
|
],
|
||||||
"recovery": ["For additional information on impacts being caused by tropical tornadoes, refer to the local hazardous weather outlook or hurricane local statement.",
|
"recovery": ["For additional information on impacts being caused by tropical tornadoes, refer to the local hazardous weather outlook or hurricane local statement.",
|
||||||
],
|
],
|
||||||
"default": {"Extreme": ["The occurrence of an outbreak of tornadoes can greatly hinder the execution of other emergency activities during tropical events.",
|
|
||||||
"If realized, many places may experience tornado damage, with several spots of immense destruction, power loss, and communications failures.",
|
|
||||||
"Locations could realize sturdy buildings demolished, structures upon weak foundations swept away, mobile homes obliterated, large trees twisted and snapped with some debarked, vehicles lifted off the ground and thrown with distance, and small boats destroyed. Large and deadly projectiles can add considerably to the toll.",
|
|
||||||
],
|
|
||||||
"High": ["The occurrence of numerous tornadoes can greatly hinder the execution of other emergency activities during tropical events.",
|
|
||||||
"If realized, many places may experience tornado damage with a few spots of immense destruction, power loss, and communications failures.",
|
|
||||||
"Locations could realize roof and wall failures of sturdy buildings with some being leveled, structures upon weak foundations blown away, mobile homes obliterated, large trees twisted and snapped with forested trees uprooted, vehicles lifted off the ground and thrown, and small boats destroyed. Large and deadly projectiles can add to the toll.",
|
|
||||||
],
|
|
||||||
"Mod": ["The occurrence of scattered tornadoes can hinder the execution of other emergency activities during tropical events.",
|
|
||||||
"If realized, several places may experience tornado damage with a few spots of considerable damage, power loss, and communications failures.",
|
|
||||||
"Locations could realize roofs torn off frame houses, mobile homes demolished, boxcars overturned, large trees snapped or uprooted, vehicles tumbled, and small boats tossed about. Dangerous projectiles can add to the toll.",
|
|
||||||
],
|
|
||||||
"Elevated": ["The occurrence of isolated tornadoes can hinder the execution of other emergency activities during tropical events.",
|
|
||||||
"If realized, a few places may experience tornado damage, along with power and communications disruptions.",
|
|
||||||
"Locations could realize roofs peeled off buildings, chimneys toppled, mobile homes pushed off foundations or overturned, large tree tops and branches snapped off, shallow-rooted trees knocked over, moving vehicles blown off roads, and small boats pulled from moorings.",
|
|
||||||
],
|
|
||||||
"None": ["Little to no potential impacts from tropical tornadoes.",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2751,7 +2671,7 @@ class StormSurgeSectionStats(SectionCommonStats):
|
||||||
(str(phishStartTime), str(phishEndTime)), 1)
|
(str(phishStartTime), str(phishEndTime)), 1)
|
||||||
|
|
||||||
if curPhish is not None and possibleStop != 2:
|
if curPhish is not None and possibleStop != 2:
|
||||||
if curPhish >= 1:
|
if curPhish >= 0.5:
|
||||||
if phishStartTime is None:
|
if phishStartTime is None:
|
||||||
phishStartTime = tr.startTime()
|
phishStartTime = tr.startTime()
|
||||||
possibleStop = 0
|
possibleStop = 0
|
||||||
|
|
|
@ -2,4 +2,5 @@ source.. = src/
|
||||||
output.. = bin/
|
output.. = bin/
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
.,\
|
.,\
|
||||||
res/
|
res/,\
|
||||||
|
utility/
|
||||||
|
|
|
@ -56,8 +56,9 @@ import com.raytheon.uf.edex.decodertools.core.IDecoderConstants;
|
||||||
* 20071109 391 jkorman Factored out time constants.
|
* 20071109 391 jkorman Factored out time constants.
|
||||||
* Sep 18, 2014 #3627 mapeters Convert units using {@link UnitConverter}.
|
* Sep 18, 2014 #3627 mapeters Convert units using {@link UnitConverter}.
|
||||||
* Sep 26, 2014 #3629 mapeters Replaced static imports.
|
* Sep 26, 2014 #3629 mapeters Replaced static imports.
|
||||||
* Sep 30, 2014 3629 mapeters Replaced {@link AbstractSfcObsDecoder#matchElement()}
|
* Sep 30, 2014 #3629 mapeters Replaced {@link AbstractSfcObsDecoder#matchElement()}
|
||||||
* calls, added HUMIDITY_PATTERN.
|
* calls, added HUMIDITY_PATTERN.
|
||||||
|
* May 26, 2015 #4525 mapeters Fix pressure unit conversion.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -79,7 +80,7 @@ public class SynopticGroups {
|
||||||
private static final UnitConverter cToK = SI.CELSIUS
|
private static final UnitConverter cToK = SI.CELSIUS
|
||||||
.getConverterTo(SI.KELVIN);
|
.getConverterTo(SI.KELVIN);
|
||||||
|
|
||||||
private static final UnitConverter hPaToPa = SI.HECTO(SI.PASCAL)
|
private static final UnitConverter daPaToPa = SI.DEKA(SI.PASCAL)
|
||||||
.getConverterTo(SI.PASCAL);
|
.getConverterTo(SI.PASCAL);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -188,7 +189,7 @@ public class SynopticGroups {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// No default specified!
|
// No default specified!
|
||||||
} // end.switch
|
} // end.switch
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -214,13 +215,14 @@ public class SynopticGroups {
|
||||||
Integer val = AbstractSfcObsDecoder.getInt(groupData, 1, 5);
|
Integer val = AbstractSfcObsDecoder.getInt(groupData, 1, 5);
|
||||||
if ((val != null) && (val >= 0)) {
|
if ((val != null) && (val >= 0)) {
|
||||||
decodedItem = new DataItem("stationPressure");
|
decodedItem = new DataItem("stationPressure");
|
||||||
// RULE : If the value is between 0 and 100, assume the
|
/*
|
||||||
// value
|
* RULE : If the value is between 0 and 1000 daPa, add 10000
|
||||||
// is above 1000 hPa i.e. 0132 --> 1013.2 hPa --> 101320 Pa
|
* daPa (e.g. 0132 = 10132 daPa).
|
||||||
|
*/
|
||||||
if (val < 1000) {
|
if (val < 1000) {
|
||||||
decodedItem.setDataValue(hPaToPa.convert(val) + 100000);
|
decodedItem.setDataValue(daPaToPa.convert(val + 10000));
|
||||||
} else {
|
} else {
|
||||||
decodedItem.setDataValue(hPaToPa.convert(val));
|
decodedItem.setDataValue(daPaToPa.convert(val));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -248,13 +250,14 @@ public class SynopticGroups {
|
||||||
Integer val = AbstractSfcObsDecoder.getInt(groupData, 1, 5);
|
Integer val = AbstractSfcObsDecoder.getInt(groupData, 1, 5);
|
||||||
if ((val != null) && (val >= 0)) {
|
if ((val != null) && (val >= 0)) {
|
||||||
decodedItem = new DataItem("seaLevelPressure");
|
decodedItem = new DataItem("seaLevelPressure");
|
||||||
// RULE : If the value is between 0 and 100, assume the
|
/*
|
||||||
// value
|
* RULE : If the value is between 0 and 1000 daPa, add 10000
|
||||||
// is above 1000 hPa i.e. 0132 --> 1013.2 hPa --> 101320 Pa
|
* daPa (e.g. 0132 = 10132 daPa).
|
||||||
|
*/
|
||||||
if (val < 1000) {
|
if (val < 1000) {
|
||||||
decodedItem.setDataValue(hPaToPa.convert(val) + 100000);
|
decodedItem.setDataValue(daPaToPa.convert(val + 10000));
|
||||||
} else {
|
} else {
|
||||||
decodedItem.setDataValue(hPaToPa.convert(val));
|
decodedItem.setDataValue(daPaToPa.convert(val));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -282,7 +285,7 @@ public class SynopticGroups {
|
||||||
Integer val = AbstractSfcObsDecoder.getInt(groupData, 2, 5);
|
Integer val = AbstractSfcObsDecoder.getInt(groupData, 2, 5);
|
||||||
if ((val != null) && (val >= 0)) {
|
if ((val != null) && (val >= 0)) {
|
||||||
decodedItem = new DataItem("3HRChange");
|
decodedItem = new DataItem("3HRChange");
|
||||||
decodedItem.setDataValue(hPaToPa.convert(val));
|
decodedItem.setDataValue(daPaToPa.convert(val));
|
||||||
decodedItem.setDataPeriod(3 * TimeUtil.SECONDS_PER_HOUR);
|
decodedItem.setDataPeriod(3 * TimeUtil.SECONDS_PER_HOUR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,7 @@ import com.raytheon.uf.edex.decodertools.core.IDecoderConstants;
|
||||||
* unused duration field, made patterns constant.
|
* unused duration field, made patterns constant.
|
||||||
* Sep 26, 2014 #3629 mapeters Replaced static imports.
|
* Sep 26, 2014 #3629 mapeters Replaced static imports.
|
||||||
* Sep 30, 2014 #3629 mapeters Conformed to changes in ISynoptic constants.
|
* Sep 30, 2014 #3629 mapeters Conformed to changes in ISynoptic constants.
|
||||||
|
* May 26, 2015 #4525 mapeters Fix pressure unit conversion.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -97,7 +98,7 @@ public class SynopticSec3Decoder extends AbstractSectionDecoder {
|
||||||
|
|
||||||
private Double windGust912 = null;
|
private Double windGust912 = null;
|
||||||
|
|
||||||
private static final UnitConverter hPaToPa = SI.HECTO(SI.PASCAL)
|
private static final UnitConverter daPaToPa = SI.DEKA(SI.PASCAL)
|
||||||
.getConverterTo(SI.PASCAL);
|
.getConverterTo(SI.PASCAL);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -116,6 +117,7 @@ public class SynopticSec3Decoder extends AbstractSectionDecoder {
|
||||||
* @throws DecoderException
|
* @throws DecoderException
|
||||||
* Thrown when an relevant error has occurred.
|
* Thrown when an relevant error has occurred.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void decode(ReportParser reportParser) throws DecoderException {
|
public void decode(ReportParser reportParser) throws DecoderException {
|
||||||
|
|
||||||
int iSubW = decoderParent.getISubw();
|
int iSubW = decoderParent.getISubw();
|
||||||
|
@ -162,8 +164,7 @@ public class SynopticSec3Decoder extends AbstractSectionDecoder {
|
||||||
closeGroup(3);
|
closeGroup(3);
|
||||||
} else if ("4".equals(element.substring(0, 1)) && doGroup(4)) {
|
} else if ("4".equals(element.substring(0, 1)) && doGroup(4)) {
|
||||||
closeGroup(4);
|
closeGroup(4);
|
||||||
} else if (P589.matcher(element).find()
|
} else if (P589.matcher(element).find() && doGroup(5)) {
|
||||||
&& doGroup(5)) {
|
|
||||||
int sign = 0;
|
int sign = 0;
|
||||||
if (element.charAt(1) == '8') {
|
if (element.charAt(1) == '8') {
|
||||||
sign = 1;
|
sign = 1;
|
||||||
|
@ -173,8 +174,7 @@ public class SynopticSec3Decoder extends AbstractSectionDecoder {
|
||||||
Integer val = AbstractSfcObsDecoder.getInt(element, 2, 5);
|
Integer val = AbstractSfcObsDecoder.getInt(element, 2, 5);
|
||||||
if ((val != null) && (val >= 0)) {
|
if ((val != null) && (val >= 0)) {
|
||||||
pressure24 = new DataItem("24HRChange");
|
pressure24 = new DataItem("24HRChange");
|
||||||
pressure24.setDataValue(hPaToPa.convert(val
|
pressure24.setDataValue(daPaToPa.convert(val * sign));
|
||||||
* sign));
|
|
||||||
pressure24.setDataPeriod(TimeUtil.SECONDS_PER_DAY);
|
pressure24.setDataPeriod(TimeUtil.SECONDS_PER_DAY);
|
||||||
}
|
}
|
||||||
closeGroup(5);
|
closeGroup(5);
|
||||||
|
@ -221,6 +221,7 @@ public class SynopticSec3Decoder extends AbstractSectionDecoder {
|
||||||
* An ObsCommon to receive the decoded data.
|
* An ObsCommon to receive the decoded data.
|
||||||
* @return The populated receiver object.
|
* @return The populated receiver object.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public ObsCommon getDecodedData(ObsCommon receiver) {
|
public ObsCommon getDecodedData(ObsCommon receiver) {
|
||||||
|
|
||||||
if (maxTemperature != null) {
|
if (maxTemperature != null) {
|
||||||
|
|
|
@ -143,4 +143,23 @@
|
||||||
<scale>0.20</scale>
|
<scale>0.20</scale>
|
||||||
</arrowStyle>
|
</arrowStyle>
|
||||||
</styleRule>
|
</styleRule>
|
||||||
|
|
||||||
|
<styleRule>
|
||||||
|
<paramLevelMatches>
|
||||||
|
<creatingEntity>nwpsTrkngCG0</creatingEntity>
|
||||||
|
<parameter>Wave1</parameter>
|
||||||
|
<parameter>Wave2</parameter>
|
||||||
|
<parameter>Wave3</parameter>
|
||||||
|
<parameter>Wave4</parameter>
|
||||||
|
<parameter>Wave5</parameter>
|
||||||
|
<parameter>Wave6</parameter>
|
||||||
|
<parameter>Wave7</parameter>
|
||||||
|
<parameter>Wave8</parameter>
|
||||||
|
<parameter>Wave9</parameter>
|
||||||
|
<parameter>Wave10</parameter>
|
||||||
|
</paramLevelMatches>
|
||||||
|
<arrowStyle>
|
||||||
|
<minimumMagnitude>1.00</minimumMagnitude>
|
||||||
|
</arrowStyle>
|
||||||
|
</styleRule>
|
||||||
</styleRuleset>
|
</styleRuleset>
|
||||||
|
|
|
@ -2,4 +2,5 @@ source.. = src/
|
||||||
output.. = bin/
|
output.. = bin/
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
.,\
|
.,\
|
||||||
res/
|
res/,\
|
||||||
|
utility/
|
||||||
|
|
|
@ -53,6 +53,9 @@
|
||||||
<permission id="com.raytheon.localization.site/cave_static/gfe/comboData">
|
<permission id="com.raytheon.localization.site/cave_static/gfe/comboData">
|
||||||
</permission>
|
</permission>
|
||||||
|
|
||||||
|
<permission id="com.raytheon.localization.site/cave_static/gfe/tcvAdvisories">
|
||||||
|
</permission>
|
||||||
|
|
||||||
<permission id="com.raytheon.localization.site/cave_static/gfe">
|
<permission id="com.raytheon.localization.site/cave_static/gfe">
|
||||||
</permission>
|
</permission>
|
||||||
|
|
||||||
|
@ -129,6 +132,7 @@
|
||||||
<userPermission>com.raytheon.localization.site/common_static/hydro</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/hydro</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/common_static/gfe</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/gfe</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/cave_static/gfe/comboData</userPermission>
|
<userPermission>com.raytheon.localization.site/cave_static/gfe/comboData</userPermission>
|
||||||
|
<userPermission>com.raytheon.localization.site/cave_static/gfe/tcvAdvisories</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/cave_static/gfe</userPermission>
|
<userPermission>com.raytheon.localization.site/cave_static/gfe</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/common_static/isc</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/isc</userPermission>
|
||||||
<userPermission>com.raytheon.localization.user/common_static/gfe</userPermission>
|
<userPermission>com.raytheon.localization.user/common_static/gfe</userPermission>
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
NWPSLOCAL="/awips2/GFESuite/nwps"
|
NWPSLOCAL="/awips2/GFESuite/nwps"
|
||||||
|
#
|
||||||
|
# The following two variables need to be set to your regional LDM. This is the same
|
||||||
|
# ldm servers you can reach from your ldad. If you do not know this info contact your
|
||||||
|
# regional folks. This is how the input files for NWPS run requests will be routed to
|
||||||
|
# NCO/WCOSS when that option is chosen from the GUI.
|
||||||
|
#
|
||||||
|
LDMSERVER1="srh-ls-cpnrs1.srh.noaa.gov"
|
||||||
|
LDMSERVER2="srh-ls-cpnrs2.srh.noaa.gov"
|
||||||
|
|
||||||
if [ ! -e ${NWPSLOCAL}/input ]
|
if [ ! -e ${NWPSLOCAL}/input ]
|
||||||
then
|
then
|
||||||
|
@ -187,15 +195,55 @@ touch $flagfile
|
||||||
chmod 666 $textfile.gz
|
chmod 666 $textfile.gz
|
||||||
chmod 666 $flagfile
|
chmod 666 $flagfile
|
||||||
|
|
||||||
if [ $WHERETORUN == "Local" ]
|
if [ $WHERETORUN == "Both" ]
|
||||||
then
|
then
|
||||||
|
|
||||||
logit " "
|
logit " "
|
||||||
logit "RUNNING IN WORKSTATION"
|
logit "RUNNING IN WORKSTATION"
|
||||||
logit " "
|
logit " "
|
||||||
logit "### ROUTING 3 WIND FILES NEEDED BY SWAN THROUGH LDAD TO LOCAL WORKSTATION:"
|
logit "### ROUTING 3 WIND FILES NEEDED BY SWAN THROUGH LDAD TO LOCAL WORKSTATION:"
|
||||||
|
|
||||||
ssh ldad@ls1 mkdir -p ${DIR}
|
ssh ldad@ls1 mkdir -p ${DIR}
|
||||||
|
scp ${SCPARGS} $Output_File ldad@ls1:${DIR} | tee -a $logfile
|
||||||
|
scp ${SCPARGS} $textfile.gz ldad@ls1:${DIR} | tee -a $logfile
|
||||||
|
scp ${SCPARGS} $flagfile ldad@ls1:${DIR} | tee -a $logfile
|
||||||
|
|
||||||
|
logit " "
|
||||||
|
#########################################################################
|
||||||
|
logit "##################################################################"
|
||||||
|
logit "### SENDING WIND FILES TO NWPS SYSTEM VIA LDAD TO TRIGGER NEW RUN"
|
||||||
|
logit "### Start Time is: $(date)"
|
||||||
|
logit "##################################################################"
|
||||||
|
logit " "
|
||||||
|
|
||||||
|
logit "Runtime Parameters are: $RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD"
|
||||||
|
|
||||||
|
ssh ${SSHARGS} ldad@ls1 echo "$RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD > /data/ldad/nwps/input/inp_args" 2>&1 | tee -a $logfile
|
||||||
|
|
||||||
|
logit " "
|
||||||
|
logit "RUNNING IN NCEP"
|
||||||
|
logit " "
|
||||||
|
echo "$RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD" > ${NWPSLOCAL}/wcoss/${siteid}_inp_args.ctl
|
||||||
|
|
||||||
|
chmod 666 ${NWPSLOCAL}/wcoss/${siteid}_inp_args.ctl
|
||||||
|
|
||||||
|
cd ${NWPSLOCAL}/wcoss/
|
||||||
|
NWPSWINDGRID="NWPSWINDGRID_${siteid}_$(date +%Y%m%d%H%M)_$$.tar.gz"
|
||||||
|
tar cvfz ${NWPSWINDGRID} ${siteid}_inp_args.ctl ${siteid}_domain_setup.cfg ${wcoss_textfile}
|
||||||
|
scp ${NWPSWINDGRID} ldad@ls1:/tmp/
|
||||||
|
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h ${LDMSERVER1} -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a $logfile
|
||||||
|
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h ${LDMSERVER2} -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a $logfile
|
||||||
|
ssh ldad@ls1 rm -fv /tmp/${NWPSWINDGRID}
|
||||||
|
|
||||||
|
elif [ $WHERETORUN == "Local" ]
|
||||||
|
then
|
||||||
|
|
||||||
|
logit " "
|
||||||
|
logit "RUNNING IN WORKSTATION"
|
||||||
|
logit " "
|
||||||
|
logit "### ROUTING 3 WIND FILES NEEDED BY SWAN THROUGH LDAD TO LOCAL WORKSTATION:"
|
||||||
|
|
||||||
|
ssh ldad@ls1 mkdir -p ${DIR}
|
||||||
scp ${SCPARGS} $Output_File ldad@ls1:${DIR} | tee -a $logfile
|
scp ${SCPARGS} $Output_File ldad@ls1:${DIR} | tee -a $logfile
|
||||||
scp ${SCPARGS} $textfile.gz ldad@ls1:${DIR} | tee -a $logfile
|
scp ${SCPARGS} $textfile.gz ldad@ls1:${DIR} | tee -a $logfile
|
||||||
scp ${SCPARGS} $flagfile ldad@ls1:${DIR} | tee -a $logfile
|
scp ${SCPARGS} $flagfile ldad@ls1:${DIR} | tee -a $logfile
|
||||||
|
@ -215,7 +263,7 @@ then
|
||||||
else
|
else
|
||||||
|
|
||||||
logit " "
|
logit " "
|
||||||
logit "RUNNING IN NCEP"
|
logit "RUNNING IN NCEP"
|
||||||
logit " "
|
logit " "
|
||||||
echo "$RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD" > ${NWPSLOCAL}/wcoss/${siteid}_inp_args.ctl
|
echo "$RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD" > ${NWPSLOCAL}/wcoss/${siteid}_inp_args.ctl
|
||||||
|
|
||||||
|
@ -224,9 +272,9 @@ else
|
||||||
cd ${NWPSLOCAL}/wcoss/
|
cd ${NWPSLOCAL}/wcoss/
|
||||||
NWPSWINDGRID="NWPSWINDGRID_${siteid}_$(date +%Y%m%d%H%M)_$$.tar.gz"
|
NWPSWINDGRID="NWPSWINDGRID_${siteid}_$(date +%Y%m%d%H%M)_$$.tar.gz"
|
||||||
tar cvfz ${NWPSWINDGRID} ${siteid}_inp_args.ctl ${siteid}_domain_setup.cfg ${wcoss_textfile}
|
tar cvfz ${NWPSWINDGRID} ${siteid}_inp_args.ctl ${siteid}_domain_setup.cfg ${wcoss_textfile}
|
||||||
scp ${NWPSWINDGRID} ldad@ls1:/tmp/
|
scp ${NWPSWINDGRID} ldad@ls1:/tmp/
|
||||||
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h srh-ls-cpnrs1.srh.noaa.gov -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a $logfile
|
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h ${LDMSERVER1} -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a $logfile
|
||||||
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h srh-ls-cpnrs2.srh.noaa.gov -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a $logfile
|
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h ${LDMSERVER2} -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a $logfile
|
||||||
ssh ldad@ls1 rm -fv /tmp/${NWPSWINDGRID}
|
ssh ldad@ls1 rm -fv /tmp/${NWPSWINDGRID}
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
<!--
|
||||||
|
The xmit tag is no longer used and can be removed. Permissions are now determined using CAVE's
|
||||||
|
AWIPS User Administration under Component "Official User Product in the Official User Product Users Tab
|
||||||
|
assigning the Defined Roles/Permissions "awips.oup". Note if user ALL is defined then everyone has the permission.
|
||||||
|
-->
|
||||||
|
<aviationForecasterConfig>
|
||||||
|
<forecaster>
|
||||||
|
<id>001</id>
|
||||||
|
<name>Amanda</name>
|
||||||
|
<xmit>true</xmit>
|
||||||
|
</forecaster>
|
||||||
|
<forecaster>
|
||||||
|
<id>002</id>
|
||||||
|
<name>Bailing</name>
|
||||||
|
<xmit>true</xmit>
|
||||||
|
</forecaster>
|
||||||
|
<forecaster>
|
||||||
|
<id>003</id>
|
||||||
|
<name>Belinda</name>
|
||||||
|
<xmit>true</xmit>
|
||||||
|
</forecaster>
|
||||||
|
<forecaster>
|
||||||
|
<id>004</id>
|
||||||
|
<name>George</name>
|
||||||
|
<xmit>true</xmit>
|
||||||
|
</forecaster>
|
||||||
|
<forecaster>
|
||||||
|
<id>005</id>
|
||||||
|
<name>Mark</name>
|
||||||
|
<xmit>true</xmit>
|
||||||
|
</forecaster>
|
||||||
|
<forecaster>
|
||||||
|
<id>006</id>
|
||||||
|
<name>Matt</name>
|
||||||
|
<xmit>true</xmit>
|
||||||
|
</forecaster>
|
||||||
|
<forecaster>
|
||||||
|
<id>007</id>
|
||||||
|
<name>Mike</name>
|
||||||
|
<xmit>true</xmit>
|
||||||
|
</forecaster>
|
||||||
|
</aviationForecasterConfig>
|
|
@ -796,8 +796,8 @@ NGRID ^(Y.C[A-MZ][05789][0-9]) (KWBY) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]
|
||||||
FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
|
FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
|
||||||
|
|
||||||
# MRMS
|
# MRMS
|
||||||
NGRID ^(YAU[CDLMPQS][0-2][0-9]) (KWNR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
#NGRID ^(YAU[CDLMPQS][0-2][0-9]) (KWNR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
||||||
FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
|
# FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
|
||||||
|
|
||||||
# RTMA 2.5km
|
# RTMA 2.5km
|
||||||
NGRID ^(L.IA98) (KWBR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
NGRID ^(L.IA98) (KWBR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
||||||
|
@ -810,6 +810,7 @@ NGRID ^(MHU...) (KNHC) (..)(..)(..)
|
||||||
# ETSS-AK
|
# ETSS-AK
|
||||||
NGRID ^(MHR...) (KNHC) (..)(..)(..)
|
NGRID ^(MHR...) (KNHC) (..)(..)(..)
|
||||||
FILE -overwrite -log -close -edex /data_store/grib2/(\3:yyyy)(\3:mm)\3/\4/ETSS/NDFD-AK/\1_\2_\3\4\5_(seq).grib2.%Y%m%d%H
|
FILE -overwrite -log -close -edex /data_store/grib2/(\3:yyyy)(\3:mm)\3/\4/ETSS/NDFD-AK/\1_\2_\3\4\5_(seq).grib2.%Y%m%d%H
|
||||||
|
|
||||||
#NGRID ^(YAU[CDLMPQS][0-2][0-9]) (KWNR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
#NGRID ^(YAU[CDLMPQS][0-2][0-9]) (KWNR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
||||||
# FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
|
# FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
|
||||||
|
|
||||||
|
@ -820,3 +821,4 @@ NGRID ^(MHR...) (KNHC) (..)(..)(..)
|
||||||
|
|
||||||
NGRID ^([YZ][BCE-HMO-Y][BEFN][A-Z][0-9][0-9]) KWBC (..)(..)(..) [^!]*!(grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
NGRID ^([YZ][BCE-HMO-Y][BEFN][A-Z][0-9][0-9]) KWBC (..)(..)(..) [^!]*!(grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
||||||
FILE -overwrite -log -close -edex /data_store/grib2/(\2:yyyy)(\2:mm)\2/\3/\6/GRID\7/\9Z_\(10)_\(11)_\1_KWBC_\2\3\4_(seq).\5.%Y%m%d%H
|
FILE -overwrite -log -close -edex /data_store/grib2/(\2:yyyy)(\2:mm)\2/\3/\6/GRID\7/\9Z_\(10)_\(11)_\1_KWBC_\2\3\4_(seq).\5.%Y%m%d%H
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue