Merge branch 'omaha_13.3.1' into development
Conflicts: edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/reference/MapManager.java edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/notify/GfeIngestNotificationFilter.java edexOsgi/com.raytheon.uf.common.time/src/com/raytheon/uf/common/time/util/TimeUtil.java Former-commit-id:5ec1c01d3a
[formerly736bb45741
] [formerly140765a43e
] [formerly437a04011a
[formerly140765a43e
[formerly 4a7059ac9b104116fef4d0dab9a0108fb61b5a5c]]] Former-commit-id:437a04011a
Former-commit-id: 0f6adbe76d6a5926e99d6caab1841fd3e7bd7349 [formerly0b48e96314
] Former-commit-id:7b27767d7e
This commit is contained in:
commit
47c7f66f2b
190 changed files with 5293 additions and 2987 deletions
|
@ -128,5 +128,5 @@
|
|||
</lineProperty>
|
||||
</Line>
|
||||
</linePropertyMap>
|
||||
<dataPageProperty severePotentialPage="10" convectiveInitiationPage="9" meanWindPage="8" stormRelativePage="7" mixingHeightPage="6" opcDataPage="5" thermodynamicDataPage="4" parcelDataPage="3" summary2Page="2" summary1Page="1"/>
|
||||
<dataPageProperty numberPagePerDisplay="1" severePotentialPage="10" convectiveInitiationPage="9" meanWindPage="8" stormRelativePage="7" mixingHeightPage="6" opcDataPage="5" thermodynamicDataPage="4" parcelDataPage="3" summary2Page="2" summary1Page="1"/>
|
||||
</NsharpConfigStore>
|
||||
|
|
|
@ -100,6 +100,7 @@ import com.raytheon.viz.gfe.core.parm.vcparm.VCModuleJobPool;
|
|||
* use in PngWriter
|
||||
* 01/22/2013 #1515 dgilling Increase default size of VCModule thread pool
|
||||
* to decrease UI hang-ups waiting for results.
|
||||
* 03/20/2013 #1774 randerso Code cleanup
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -243,7 +244,7 @@ public abstract class AbstractParmManager implements IParmManager {
|
|||
|
||||
protected DatabaseID productDB;
|
||||
|
||||
protected List<DatabaseID> availableDatabases;
|
||||
protected Set<DatabaseID> availableDatabases;
|
||||
|
||||
protected final DatabaseID mutableDb;
|
||||
|
||||
|
@ -320,26 +321,16 @@ public abstract class AbstractParmManager implements IParmManager {
|
|||
|
||||
dbCategories = Arrays.asList(prefs.getStringArray("dbTypes"));
|
||||
|
||||
this.availableDatabases = getDatabaseInventory();
|
||||
this.availableDatabases = new HashSet<DatabaseID>(
|
||||
getDatabaseInventory());
|
||||
|
||||
this.dbInvChangeListener = new AbstractGFENotificationObserver<DBInvChangeNotification>(
|
||||
DBInvChangeNotification.class) {
|
||||
|
||||
@Override
|
||||
public void notify(DBInvChangeNotification notificationMessage) {
|
||||
|
||||
List<DatabaseID> newInventory;
|
||||
List<DatabaseID> additions = new ArrayList<DatabaseID>();
|
||||
List<DatabaseID> deletions = new ArrayList<DatabaseID>();
|
||||
|
||||
newInventory = filterDbIds(notificationMessage.getInventory());
|
||||
additions.addAll(newInventory);
|
||||
additions.removeAll(availableDatabases);
|
||||
deletions.addAll(availableDatabases);
|
||||
deletions.removeAll(newInventory);
|
||||
availableDatabases = newInventory;
|
||||
|
||||
updatedDatabaseList(availableDatabases, deletions, additions);
|
||||
updatedDatabaseList(notificationMessage.getDeletions(),
|
||||
notificationMessage.getAdditions());
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -1862,15 +1853,16 @@ public abstract class AbstractParmManager implements IParmManager {
|
|||
* The list of available parms is updated based on the list of additions and
|
||||
* deletions.
|
||||
*
|
||||
* @param newList
|
||||
* The full inventory, including new additions and deletions
|
||||
* @param deletions
|
||||
* The items being removed from the inventory
|
||||
* @param additions
|
||||
* The items being added from the inventory
|
||||
*/
|
||||
public void updatedDatabaseList(List<DatabaseID> newList,
|
||||
List<DatabaseID> deletions, List<DatabaseID> additions) {
|
||||
public void updatedDatabaseList(List<DatabaseID> deletions,
|
||||
List<DatabaseID> additions) {
|
||||
availableDatabases.addAll(additions);
|
||||
availableDatabases.removeAll(deletions);
|
||||
|
||||
List<ParmID> toDelete = new ArrayList<ParmID>();
|
||||
|
||||
for (DatabaseID dbId : deletions) {
|
||||
|
|
|
@ -60,6 +60,7 @@ import com.raytheon.uf.common.dataplugin.gfe.slice.VectorGridSlice;
|
|||
import com.raytheon.uf.common.dataplugin.gfe.slice.WeatherGridSlice;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.weather.WeatherKey;
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.viz.gfe.Activator;
|
||||
import com.raytheon.viz.gfe.core.DataManager;
|
||||
import com.raytheon.viz.gfe.core.griddata.DiscreteGridData;
|
||||
|
@ -82,6 +83,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 02/04/2008 chammack Initial Creation
|
||||
* 03/20/2013 #1774 randerso Use TimeUtil constants
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -106,10 +108,10 @@ public class MockParmManager extends AbstractParmManager {
|
|||
"CST6CDT");
|
||||
|
||||
private static final TimeConstraints TC1 = new TimeConstraints(
|
||||
TimeConstraints.HOUR, TimeConstraints.HOUR, 0);
|
||||
TimeUtil.SECONDS_PER_HOUR, TimeUtil.SECONDS_PER_HOUR, 0);
|
||||
|
||||
private static final TimeConstraints TC2 = new TimeConstraints(
|
||||
13 * TimeConstraints.HOUR, TimeConstraints.DAY, 13);
|
||||
13 * TimeUtil.SECONDS_PER_HOUR, TimeUtil.SECONDS_PER_DAY, 13);
|
||||
|
||||
protected Set<Parm> fullParmSet;
|
||||
|
||||
|
@ -662,6 +664,7 @@ public class MockParmManager extends AbstractParmManager {
|
|||
return gloc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Parm getParmInExpr(final String exprName, boolean enableTopo) {
|
||||
return getParmInExpr(exprName, enableTopo, dataManager
|
||||
.getSpatialDisplayManager().getActivatedParm());
|
||||
|
@ -795,10 +798,12 @@ public class MockParmManager extends AbstractParmManager {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DatabaseID> getIscDatabases() {
|
||||
return new ArrayList<DatabaseID>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParmID getISCParmID(ParmID pid) {
|
||||
return new ParmID();
|
||||
}
|
||||
|
|
|
@ -111,6 +111,8 @@ import com.raytheon.viz.ui.cmenu.AbstractRightClickAction;
|
|||
* 11/30/2012 #1328 mschenke Made GFE use descriptor for time matching
|
||||
* and time storage and manipulation
|
||||
* 01/22/2013 #1518 randerso Removed use of Map with Parms as keys
|
||||
* 03/28/2013 #1838 randerso Fixed selected time range when Select Grids When
|
||||
* Stepping is enabled. Cleaned up deprecated warnings.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -563,8 +565,7 @@ public class GridCanvas extends Canvas implements IMessageClient {
|
|||
List<String> popUpActions = new ArrayList<String>(0);
|
||||
if (gmEditActions.length > 0) {
|
||||
// Only show tools this parm supports
|
||||
String[] parmTools = DataManager
|
||||
.getCurrentInstance()
|
||||
String[] parmTools = dataMgr
|
||||
.getSmartToolInterface().listTools(parm);
|
||||
List<String> parmToolList = Arrays
|
||||
.asList(parmTools);
|
||||
|
@ -815,8 +816,7 @@ public class GridCanvas extends Canvas implements IMessageClient {
|
|||
grid = null;
|
||||
}
|
||||
grid.changeValidTime(lastDestinationTR, false);
|
||||
grid.updateHistoryToModified(DataManager.getCurrentInstance()
|
||||
.getWsId());
|
||||
grid.updateHistoryToModified(dataMgr.getWsId());
|
||||
|
||||
newGrids.add(grid);
|
||||
|
||||
|
@ -924,8 +924,6 @@ public class GridCanvas extends Canvas implements IMessageClient {
|
|||
Date clickTime = gridManager.getUtil().pixelToDate(e.x);
|
||||
GridID clickGridID = new GridID(parm, clickTime);
|
||||
|
||||
gridManager.setSelectedTime(clickTime);
|
||||
|
||||
// make it active, make it inactive depending upon okToEdit
|
||||
try {
|
||||
if (clickGridID.grid() != null && clickGridID.grid().isOkToEdit()) {
|
||||
|
@ -967,6 +965,8 @@ public class GridCanvas extends Canvas implements IMessageClient {
|
|||
statusHandler.handle(Priority.PROBLEM, "Error activating parm "
|
||||
+ parm.getParmID().compositeNameUI(), e1);
|
||||
}
|
||||
|
||||
gridManager.setSelectedTime(clickTime);
|
||||
}
|
||||
|
||||
private void resize() {
|
||||
|
|
|
@ -30,15 +30,16 @@ import org.junit.Test;
|
|||
import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.config.ProjectionData;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.config.ProjectionData.ProjectionType;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GFERecord.GridType;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridParmInfo;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.TimeConstraints;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GFERecord.GridType;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.grid.Grid2DBit;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.grid.Grid2DFloat;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.slice.ScalarGridSlice;
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.viz.gfe.core.parm.MockParm;
|
||||
import com.raytheon.viz.gfe.core.wxvalue.ScalarWxValue;
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
|
@ -55,6 +56,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 26, 2008 rbell Initial creation
|
||||
* Mar 20, 2013 #1774 randerso Use TimeUtil constants
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -106,8 +108,8 @@ public class ScalarGridDataTest {
|
|||
new Point(4, 4), new Coordinate(45, 30), new Coordinate(9, 9),
|
||||
"CST6CDT");
|
||||
|
||||
TimeConstraints testTC1 = new TimeConstraints(TimeConstraints.HOUR,
|
||||
TimeConstraints.HOUR, 0);
|
||||
TimeConstraints testTC1 = new TimeConstraints(
|
||||
TimeUtil.SECONDS_PER_HOUR, TimeUtil.SECONDS_PER_HOUR, 0);
|
||||
|
||||
GridParmInfo testGPI1 = new GridParmInfo(testPID1, testGL1,
|
||||
GridType.SCALAR, "F", "Temperature", -20f, 80f, 2, false,
|
||||
|
|
|
@ -29,15 +29,16 @@ import org.junit.Test;
|
|||
import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.config.ProjectionData;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.config.ProjectionData.ProjectionType;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GFERecord.GridType;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridParmInfo;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.TimeConstraints;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GFERecord.GridType;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.grid.Grid2DBit;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.grid.Grid2DFloat;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.slice.VectorGridSlice;
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.viz.gfe.core.parm.MockParm;
|
||||
import com.raytheon.viz.gfe.core.wxvalue.VectorWxValue;
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
|
@ -53,7 +54,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 26, 2008 rbell Initial creation
|
||||
* Mar 26, 2008 rbell Initial creation
|
||||
* Mar 20, 2013 #1774 randerso Use TimeUtil constants
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -66,8 +68,8 @@ public class VectorGridDataTest {
|
|||
private final float testFA1[] = new float[145 * 145];
|
||||
{
|
||||
for (int i = 0; i < 145 * 145; i++) {
|
||||
this.testFA1[i] = (float) (i + (i / (Math.pow(10.0, (i + "")
|
||||
.length()))));
|
||||
this.testFA1[i] = (float) (i + (i / (Math.pow(10.0,
|
||||
(i + "").length()))));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,7 +106,7 @@ public class VectorGridDataTest {
|
|||
"CST6CDT");
|
||||
|
||||
private final TimeConstraints testTC1 = new TimeConstraints(
|
||||
TimeConstraints.HOUR, TimeConstraints.HOUR, 0);
|
||||
TimeUtil.SECONDS_PER_HOUR, TimeUtil.SECONDS_PER_HOUR, 0);
|
||||
|
||||
private final GridParmInfo testGPI1 = new GridParmInfo(this.testPID1,
|
||||
this.testGL1, GridType.VECTOR, "F", "Temperature", -20f, 80f, 2,
|
||||
|
|
|
@ -42,6 +42,7 @@ import com.raytheon.uf.common.dataplugin.gfe.grid.Grid2DFloat;
|
|||
import com.raytheon.uf.common.dataplugin.gfe.slice.IGridSlice;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.slice.ScalarGridSlice;
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.viz.gfe.GFEOperationFailedException;
|
||||
import com.raytheon.viz.gfe.core.DataManager;
|
||||
import com.raytheon.viz.gfe.core.griddata.AbstractGridData;
|
||||
|
@ -64,6 +65,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 02/21/2008 chammack Initial Creation
|
||||
* 03/20/2013 #1774 randerso Use TimeUtil constants
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -84,7 +86,7 @@ public class TestParm {
|
|||
"CST6CDT");
|
||||
|
||||
private static final TimeConstraints TC1 = new TimeConstraints(
|
||||
TimeConstraints.HOUR, TimeConstraints.HOUR, 0);
|
||||
TimeUtil.SECONDS_PER_HOUR, TimeUtil.SECONDS_PER_HOUR, 0);
|
||||
|
||||
private static GridParmInfo gpi;
|
||||
|
||||
|
@ -136,7 +138,7 @@ public class TestParm {
|
|||
"CST6CDT");
|
||||
|
||||
private final TimeConstraints testTC1 = new TimeConstraints(
|
||||
TimeConstraints.HOUR, TimeConstraints.HOUR, 0);
|
||||
TimeUtil.SECONDS_PER_HOUR, TimeUtil.SECONDS_PER_HOUR, 0);
|
||||
|
||||
private final GridParmInfo testGPI1 = new GridParmInfo(this.testPID1,
|
||||
this.testGL1, GridType.SCALAR, "F", "Temperature", -20f, 80f, 2,
|
||||
|
|
|
@ -170,6 +170,16 @@ public abstract class AbstractVizPerspectiveManager implements
|
|||
try {
|
||||
mgr.activateDefaultTool(((AbstractEditor) part)
|
||||
.getDefaultTool());
|
||||
if (mgr.getToolManager().getSelectedModalTools()
|
||||
.isEmpty()) {
|
||||
// Hack due to tool activation not sending whether
|
||||
// it should be activated or deactivated and is just
|
||||
// toggling instead. TODO: Make AbstractModalTool
|
||||
// required command parameter for activate or
|
||||
// deactivate
|
||||
mgr.activateDefaultTool(((AbstractEditor) part)
|
||||
.getDefaultTool());
|
||||
}
|
||||
} catch (VizException e) {
|
||||
statusHandler.handle(Priority.SIGNIFICANT,
|
||||
"Error activating tool set", e);
|
||||
|
|
|
@ -32,9 +32,7 @@ import org.eclipse.ui.commands.ICommandService;
|
|||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.core.Activator;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.uf.viz.core.status.StatusConstants;
|
||||
|
||||
/**
|
||||
* Defines a Tool Manager, which handles the tool registrations and activations
|
||||
|
@ -112,19 +110,28 @@ public class ModalToolManager {
|
|||
*/
|
||||
public synchronized void activateToolSet(String defaultTool)
|
||||
throws VizException {
|
||||
try {
|
||||
ICommandService service = (ICommandService) PlatformUI
|
||||
.getWorkbench().getService(ICommandService.class);
|
||||
if (defaultTool != null) {
|
||||
Command c = service.getCommand(defaultTool);
|
||||
c.executeWithChecks(new ExecutionEvent(c,
|
||||
new HashMap<Object, Object>(), null, null));
|
||||
boolean found = false;
|
||||
for (AbstractModalTool tool : toolMap.values()) {
|
||||
if (tool != null && tool.commandId.equals(defaultTool)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.CRITICAL,
|
||||
"Error loading tool set", e);
|
||||
}
|
||||
if (!found) {
|
||||
try {
|
||||
ICommandService service = (ICommandService) PlatformUI
|
||||
.getWorkbench().getService(ICommandService.class);
|
||||
if (defaultTool != null) {
|
||||
Command c = service.getCommand(defaultTool);
|
||||
c.executeWithChecks(new ExecutionEvent(c,
|
||||
new HashMap<Object, Object>(), null, null));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.CRITICAL,
|
||||
"Error loading tool set", e);
|
||||
|
||||
throw new VizException("Error loading tool set", e);
|
||||
throw new VizException("Error loading tool set", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -134,7 +134,8 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* setPolygonLocked(true) below conSelected() is called in corSelected(),
|
||||
* and removed it from updateListSelected().
|
||||
* Feb 18, 2013 #1633 rferrel Changed checkFollowupSelection to use SimulatedTime.
|
||||
*
|
||||
* Mar 28, 2013 DR 15974 D. Friedman Do not track removed GIDs.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -1587,7 +1588,6 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
warngenLayer.getStormTrackState().endTime = null;
|
||||
WarningAction action = WarningAction.valueOf(data.getAct());
|
||||
warngenLayer.setWarningAction(action);
|
||||
warngenLayer.initRemovedGids();
|
||||
if (action == WarningAction.CON) {
|
||||
oldWarning = conSelected(data);
|
||||
} else if (action == WarningAction.COR) {
|
||||
|
|
|
@ -160,6 +160,10 @@ import com.vividsolutions.jts.io.WKTReader;
|
|||
* 12/18/2012 DR 15571 Qinglu Lin Resolved coordinate issue in TML line caused by clicking Restart button.
|
||||
* 01/24/2013 DR 15723 Qinglu Lin Added initRemovedGids() and updated updateWarnedAreas() to prevent the removed
|
||||
* counties from being re-hatched.
|
||||
* 03/06/2013 DR 15831 D. Friedman Use area inclusion filter in followups.
|
||||
* 03/28/2013 DR 15973 Qinglu Lin Added adjustVertex() and applied it invalid polygon.
|
||||
* 03/28/2013 DR 15974 D. Friedman Preserve the set of selected counties when recreating the polygon from the
|
||||
* hatched area and remember marked counties outside the polygon on followup.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -278,7 +282,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
|
||||
try {
|
||||
Polygon hatched = polygonUtil.hatchWarningArea(
|
||||
warningPolygon, warningArea);
|
||||
warningPolygon,
|
||||
removeCounties(warningArea,
|
||||
state.getFipsOutsidePolygon()));
|
||||
if (hatched != null) {
|
||||
// DR 15559
|
||||
Coordinate[] coords = hatched.getCoordinates();
|
||||
|
@ -287,7 +293,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
GeometryFactory gf = new GeometryFactory();
|
||||
LinearRing lr = gf.createLinearRing(coords);
|
||||
hatchedArea = gf.createPolygon(lr, null);
|
||||
hatchedWarningArea = createWarnedArea(latLonToLocal(hatchedArea));
|
||||
if (! hatchedArea.isValid())
|
||||
hatchedArea = adjustVertex(hatchedArea);
|
||||
hatchedWarningArea = createWarnedArea(
|
||||
latLonToLocal(hatchedArea),
|
||||
latLonToLocal(warningArea));
|
||||
} else {
|
||||
this.hatchedArea = null;
|
||||
this.hatchedWarningArea = null;
|
||||
|
@ -387,8 +397,6 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
|
||||
private WarningAction warningAction = WarningAction.NEW;
|
||||
|
||||
private final Set<String> removedGids = new HashSet<String>();
|
||||
|
||||
static {
|
||||
for (int i = 0; i < 128; i++) {
|
||||
if (i % 32 == 0) {
|
||||
|
@ -1059,11 +1067,15 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
public void setOldWarningPolygon(AbstractWarningRecord record) {
|
||||
if (record != null) {
|
||||
state.setOldWarningPolygon((Polygon) record.getGeometry().clone());
|
||||
state.setOldWarningArea(getWarningAreaFromPolygon(
|
||||
state.getOldWarningPolygon(), record));
|
||||
Geometry oldArea = getWarningAreaFromPolygon(
|
||||
state.getOldWarningPolygon(), record);
|
||||
if (oldArea.getUserData() instanceof Set)
|
||||
state.setFipsOutsidePolygon((Set<String>) oldArea.getUserData());
|
||||
state.setOldWarningArea(oldArea);
|
||||
} else {
|
||||
state.setOldWarningArea(null);
|
||||
state.setOldWarningPolygon(null);
|
||||
state.setFipsOutsidePolygon(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1114,7 +1126,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
Map<String, String[]> countyMap = FipsUtil
|
||||
.parseCountyHeader(activeTableRecord.getUgcZone());
|
||||
// get area with precalculated area
|
||||
activeTableRecord.setGeometry(getArea(area, countyMap));
|
||||
activeTableRecord.setGeometry(getArea(area, countyMap, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1154,35 +1166,59 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
|
||||
/**
|
||||
* Give the intersection area and polygon, build the area for the county map
|
||||
* Given the intersection area and polygon, build the area for the county
|
||||
* map
|
||||
*
|
||||
* @param area
|
||||
* @param polygon
|
||||
* @param countyMap
|
||||
* @return
|
||||
* @param includeAllEntries
|
||||
* if true, ensure all entries in countyMap are represented in
|
||||
* the result even if not in {@code area}.
|
||||
* @return the resulting area. If includeAllEntries is true and there are
|
||||
* areas in countyMap not inside {@code area}, the user data will be
|
||||
* set to a Set of the FIPS IDs (or equivalent) of those outside
|
||||
* areas.
|
||||
*/
|
||||
private Geometry getArea(Geometry area, Map<String, String[]> countyMap) {
|
||||
private Geometry getArea(Geometry area, Map<String, String[]> countyMap,
|
||||
boolean includeAllEntries) {
|
||||
if (area == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Now remove counties not present in warning
|
||||
|
||||
Set<String> idsOutsidePolygon = null;
|
||||
Set<String> fipsOutsidePolygon = null;
|
||||
if (includeAllEntries) {
|
||||
idsOutsidePolygon = new HashSet<String>();
|
||||
for (Map.Entry<String, String[]> entry : countyMap.entrySet()) {
|
||||
String state = entry.getKey();
|
||||
for (String id : entry.getValue()) {
|
||||
idsOutsidePolygon.add(state + '-' + id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<Geometry> geoms = new ArrayList<Geometry>();
|
||||
GeometryUtil.buildGeometryList(geoms, area);
|
||||
List<Geometry> newList = new ArrayList<Geometry>();
|
||||
boolean isMarineZone = configuration.getGeospatialConfig()
|
||||
.getAreaSource().equalsIgnoreCase(MARINE);
|
||||
for (Geometry geom : geoms) {
|
||||
CountyUserData data = (CountyUserData) geom.getUserData();
|
||||
|
||||
String fips = null;
|
||||
String[] ids = null;
|
||||
if (configuration.getGeospatialConfig().getAreaSource()
|
||||
.equalsIgnoreCase(MARINE)) {
|
||||
if (isMarineZone) {
|
||||
fips = String.valueOf(data.entry.attributes.get(configuration
|
||||
.getHatchedAreaSource().getFipsField()));
|
||||
if (countyMap.containsKey(fips.substring(0, 2))) {
|
||||
ids = countyMap.get(fips.substring(0, 2));
|
||||
for (String id : ids) {
|
||||
if (fips.endsWith(id)) {
|
||||
if (idsOutsidePolygon != null) {
|
||||
idsOutsidePolygon.remove(fips.substring(0, 2) + '-' + id);
|
||||
}
|
||||
newList.add(geom);
|
||||
break;
|
||||
}
|
||||
|
@ -1199,6 +1235,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
.getFipsField()));
|
||||
for (String id : ids) {
|
||||
if (fips.endsWith(id)) {
|
||||
if (idsOutsidePolygon != null) {
|
||||
idsOutsidePolygon.remove(stateAbbr + '-' + id);
|
||||
}
|
||||
newList.add(geom);
|
||||
break;
|
||||
}
|
||||
|
@ -1206,8 +1245,39 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
}
|
||||
}
|
||||
return area.getFactory().createGeometryCollection(
|
||||
|
||||
if (includeAllEntries && !idsOutsidePolygon.isEmpty()) {
|
||||
if (geoData != null) {
|
||||
fipsOutsidePolygon = new HashSet<String>();
|
||||
for (GeospatialData f : geoData.features) {
|
||||
CountyUserData data = (CountyUserData) f.geometry
|
||||
.getUserData();
|
||||
String fips = String.valueOf(data.entry.attributes
|
||||
.get(configuration.getHatchedAreaSource()
|
||||
.getFipsField()));
|
||||
String key;
|
||||
if (isMarineZone) {
|
||||
key = fips.substring(0, 2) + '-' + fips.substring(3);
|
||||
} else {
|
||||
String stateAbbr = String.valueOf(data.entry.attributes
|
||||
.get(configuration.getHatchedAreaSource()
|
||||
.getAreaNotationField()));
|
||||
key = stateAbbr + '-' + fips.substring(2);
|
||||
}
|
||||
if (idsOutsidePolygon.contains(key)) {
|
||||
newList.add((Geometry) f.geometry.clone());
|
||||
fipsOutsidePolygon.add(getFips(f));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Geometry result = area.getFactory().createGeometryCollection(
|
||||
newList.toArray(new Geometry[newList.size()]));
|
||||
if (fipsOutsidePolygon != null)
|
||||
result.setUserData(fipsOutsidePolygon);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1219,7 +1289,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
* @return
|
||||
*/
|
||||
private Geometry getArea(Polygon polygon, Map<String, String[]> countyMap) {
|
||||
return getArea(buildArea(polygon), countyMap);
|
||||
return getArea(buildArea(polygon), countyMap, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1250,6 +1320,10 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
}
|
||||
|
||||
public void updateWarnedAreas(boolean snapHatchedAreaToPolygon) throws VizException {
|
||||
updateWarnedAreas(snapHatchedAreaToPolygon, false);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param snapHatchedAreaToPolygon
|
||||
|
@ -1257,7 +1331,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
* eliminated.
|
||||
* @throws VizException
|
||||
*/
|
||||
public void updateWarnedAreas(boolean snapHatchedAreaToPolygon)
|
||||
public void updateWarnedAreas(boolean snapHatchedAreaToPolygon, boolean preservedSelection)
|
||||
throws VizException {
|
||||
if (getPolygon() == null) {
|
||||
return;
|
||||
|
@ -1268,7 +1342,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
Geometry warningArea = state.getWarningArea();
|
||||
Geometry warningPolygon = state.getWarningPolygon();
|
||||
Geometry newWarningArea = createWarnedArea(latLonToLocal((snapHatchedAreaToPolygon || warningArea == null) ? warningPolygon
|
||||
: warningArea));
|
||||
: warningArea),
|
||||
preservedSelection && warningArea != null ? latLonToLocal(warningArea) : null);
|
||||
updateWarnedAreaState(newWarningArea, snapHatchedAreaToPolygon);
|
||||
|
||||
System.out.println("determining hatchedArea took "
|
||||
|
@ -1279,26 +1354,63 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
* Creates a warning area based on the hatched area in local coordinates
|
||||
*
|
||||
* @param hatchedArea
|
||||
* @param preservedSelection
|
||||
* if not null, the result contains all entities in this Geometry
|
||||
* even if they do not intersect hatchedArea or do not pass the
|
||||
* inclusion filter
|
||||
* @return
|
||||
*/
|
||||
private Geometry createWarnedArea(Geometry hatchedArea) {
|
||||
private Geometry createWarnedArea(Geometry hatchedArea, Geometry preservedSelection) {
|
||||
Geometry oldWarningPolygon = latLonToLocal(state.getOldWarningPolygon());
|
||||
Geometry oldWarningArea = latLonToLocal(state.getOldWarningArea());
|
||||
Geometry newHatchedArea = null;
|
||||
|
||||
Set<String> selectedFips = null;
|
||||
List<Geometry> selectedGeoms = null;
|
||||
if (preservedSelection != null)
|
||||
selectedFips = getAllFipsInArea(preservedSelection);
|
||||
|
||||
// Loop through each of our counties returned from the query
|
||||
for (GeospatialData f : geoData.features) {
|
||||
// get the geometry of the county and make sure it intersects
|
||||
// with our hatched area
|
||||
PreparedGeometry prepGeom = (PreparedGeometry) f.attributes
|
||||
.get(GeospatialDataList.LOCAL_PREP_GEOM);
|
||||
Geometry geom = (Geometry) f.attributes
|
||||
.get(GeospatialDataList.LOCAL_GEOM);
|
||||
Geometry intersection = null;
|
||||
try {
|
||||
// Get intersection between county and hatched boundary
|
||||
intersection = GeometryUtil.intersection(hatchedArea, prepGeom);
|
||||
if (oldWarningArea != null) {
|
||||
intersection = GeometryUtil.intersection(intersection, oldWarningArea);
|
||||
}
|
||||
if (intersection.isEmpty()) {
|
||||
continue;
|
||||
if (selectedFips == null
|
||||
|| !selectedFips.contains(getFips(f))) {
|
||||
continue;
|
||||
} else if (! selectedFips.isEmpty()) {
|
||||
/*
|
||||
* Add whatever part of the area was previously hatched
|
||||
* despite being outside the new polygon.
|
||||
*/
|
||||
if (selectedGeoms == null) {
|
||||
selectedGeoms = new ArrayList<Geometry>();
|
||||
GeometryUtil.buildGeometryList(selectedGeoms, preservedSelection);
|
||||
}
|
||||
intersection = null;
|
||||
String prefix = GeometryUtil.getPrefix(f.geometry.getUserData());
|
||||
for (Geometry g : selectedGeoms) {
|
||||
if (g.getUserData() != null) {
|
||||
if (prefix.equals(GeometryUtil.getPrefix(g.getUserData()))) {
|
||||
intersection = intersection == null ? g :
|
||||
GeometryUtil.union(intersection, g);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (intersection == null) {
|
||||
// This part of the area was not previously selected.
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
continue;
|
||||
|
@ -1306,33 +1418,15 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
|
||||
try {
|
||||
double ratio = intersection.getArea() / geom.getArea();
|
||||
double ratioInPercent = ratio * 100.;
|
||||
Double areaOfGeom = (Double) f.attributes.get(AREA);
|
||||
double areaInKmSqOfIntersection = meterSqToKmSq
|
||||
.convert(areaOfGeom * ratio);
|
||||
|
||||
boolean includeArea = false;
|
||||
if (getConfiguration().getHatchedAreaSource()
|
||||
.getInclusionAndOr().equalsIgnoreCase("AND")) {
|
||||
if ((ratioInPercent >= getConfiguration()
|
||||
.getHatchedAreaSource().getInclusionPercent())
|
||||
&& (areaInKmSqOfIntersection > getConfiguration()
|
||||
.getHatchedAreaSource().getInclusionArea())) {
|
||||
includeArea = true;
|
||||
}
|
||||
} else {
|
||||
if ((ratioInPercent >= getConfiguration()
|
||||
.getHatchedAreaSource().getInclusionPercent())
|
||||
|| (areaInKmSqOfIntersection > getConfiguration()
|
||||
.getHatchedAreaSource().getInclusionArea())) {
|
||||
includeArea = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (includeArea
|
||||
&& (oldWarningPolygon == null || prepGeom
|
||||
.intersects(oldWarningPolygon))) {
|
||||
boolean include;
|
||||
if (selectedFips != null)
|
||||
include = selectedFips.contains(getFips(f));
|
||||
else
|
||||
include = filterArea(f, intersection, true)
|
||||
&& (oldWarningPolygon == null
|
||||
|| prepGeom.intersects(oldWarningPolygon)
|
||||
|| isOldAreaOutsidePolygon(f));
|
||||
if (include) {
|
||||
if (newHatchedArea == null) {
|
||||
newHatchedArea = intersection;
|
||||
} else {
|
||||
|
@ -1397,31 +1491,51 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
state.resetMarked();
|
||||
} else if (warningPolygon != null) {
|
||||
// want intersection of warningPolygon and oldWarningArea
|
||||
Set<String> selectedGids = new HashSet<String>(
|
||||
Arrays.asList(GeometryUtil.getGID(newHatchedArea)));
|
||||
Geometry selectedArea = newHatchedArea;
|
||||
newHatchedArea = GeometryUtil.intersection(warningPolygon,
|
||||
oldWarningArea);
|
||||
if (removedGids.size() > 0) {
|
||||
Set<String> newGids = new HashSet<String>(
|
||||
Arrays.asList(GeometryUtil.getGID(newHatchedArea)));
|
||||
if (!selectedGids.equals(newGids)) {
|
||||
// Remove areas with gid in removedGids
|
||||
List<Geometry> areas = new ArrayList<Geometry>(
|
||||
newHatchedArea.getNumGeometries());
|
||||
Set<String> seenGids = new HashSet<String>();
|
||||
for (int n = 0; n < newHatchedArea.getNumGeometries(); ++n) {
|
||||
Geometry newArea = newHatchedArea.getGeometryN(n);
|
||||
String[] gids = GeometryUtil.getGID(newArea);
|
||||
boolean flag = false;
|
||||
for (String gid : gids) {
|
||||
if (removedGids.contains(gid)) {
|
||||
if (! selectedGids.contains(gid)) {
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!flag) {
|
||||
areas.add(newArea);
|
||||
seenGids.addAll(Arrays.asList(gids));
|
||||
}
|
||||
}
|
||||
if (areas.size() != newHatchedArea.getNumGeometries()) {
|
||||
// Areas were removed, recreate newHatchedArea
|
||||
newHatchedArea = GeometryUtil.union(areas
|
||||
.toArray(new Geometry[0]));
|
||||
selectedGids.removeAll(seenGids);
|
||||
if (!selectedGids.isEmpty()) {
|
||||
for (int n = 0; n < selectedArea.getNumGeometries(); ++n) {
|
||||
Geometry area = selectedArea.getGeometryN(n);
|
||||
String[] gids = GeometryUtil.getGID(area);
|
||||
boolean flag = false;
|
||||
for (String gid : gids) {
|
||||
if (selectedGids.contains(gid)) {
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (flag)
|
||||
areas.add(area);
|
||||
}
|
||||
}
|
||||
newHatchedArea = GeometryUtil.union(areas
|
||||
.toArray(new Geometry[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1470,6 +1584,94 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
warningAreaChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/** Determine if the given area of the reference area passes the
|
||||
* inclusion filter. Subroutine of {@link #filterArea}.
|
||||
* @param areaToConsider
|
||||
* @param wholeArea
|
||||
* @param areaInMetersSq
|
||||
* @param anyAmountOfArea
|
||||
* @return
|
||||
*/
|
||||
private boolean filterCheck(Geometry areaToConsider, Geometry wholeArea,
|
||||
double areaInMetersSq) {
|
||||
double ratio = areaToConsider.getArea() / wholeArea.getArea();
|
||||
double ratioInPercent = ratio * 100.;
|
||||
double areaInKmSqOfIntersection = meterSqToKmSq.convert(areaInMetersSq
|
||||
* ratio);
|
||||
|
||||
boolean percentOk = ratioInPercent >= getConfiguration()
|
||||
.getHatchedAreaSource().getInclusionPercent();
|
||||
boolean areaOk = areaInKmSqOfIntersection > getConfiguration()
|
||||
.getHatchedAreaSource().getInclusionArea();
|
||||
return getConfiguration().getHatchedAreaSource().getInclusionAndOr()
|
||||
.equalsIgnoreCase("AND") ?
|
||||
percentOk && areaOk : percentOk || areaOk;
|
||||
}
|
||||
|
||||
/** Determine if a feature should be included based on how much of it
|
||||
* is hatched and the configured inclusion criteria.
|
||||
* @param feature
|
||||
* @param featureAreaToConsider the portion of the feature that is hatched
|
||||
* @param localCoordinates if true, use local CRS; otherwise, use lat/lon
|
||||
* @param anyAmountOfArea if true, ignore the configured criteria and
|
||||
* include the feature if event a small amount is hatched.
|
||||
* @return true if the feature should be included
|
||||
*/
|
||||
private boolean filterArea(GeospatialData feature, Geometry featureAreaToConsider, boolean localCRS) {
|
||||
Geometry geom = localCRS ?
|
||||
(Geometry) feature.attributes.get(GeospatialDataList.LOCAL_GEOM) :
|
||||
feature.geometry;
|
||||
double areaOfGeom = (Double) feature.attributes.get(AREA);
|
||||
|
||||
if (filterCheck(featureAreaToConsider, geom, areaOfGeom))
|
||||
return true;
|
||||
else if (state.getOldWarningArea() != null) {
|
||||
/*
|
||||
* Second chance: If the county slipped by the filter in the initial
|
||||
* warning, allow it now as long as the hatched area is (nearly) the
|
||||
* same as the hatched area in the initial warning.
|
||||
*
|
||||
* This test assumes that the followup filter is not more permissive
|
||||
* that the initial warning filter. OTOH, if the followup filter is
|
||||
* more permissive, this test is not really necessary.
|
||||
*/
|
||||
Geometry oldWarningArea = state.getOldWarningArea();
|
||||
if (localCRS)
|
||||
oldWarningArea = latLonToLocal(oldWarningArea);
|
||||
List<Geometry> geoms = new ArrayList<Geometry>();
|
||||
GeometryUtil.buildGeometryList(geoms, oldWarningArea);
|
||||
Geometry oldSelectedArea = null;
|
||||
String prefix = GeometryUtil.getPrefix(feature.geometry.getUserData());
|
||||
for (Geometry g : geoms) {
|
||||
if (g.getUserData() != null) {
|
||||
if (prefix.equals(GeometryUtil.getPrefix(g.getUserData()))) {
|
||||
oldSelectedArea = oldSelectedArea == null ? g :
|
||||
GeometryUtil.union(oldSelectedArea, g);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (oldSelectedArea != null) {
|
||||
double ratioOfOldArea = featureAreaToConsider.getArea() /
|
||||
oldSelectedArea.getArea();
|
||||
/*
|
||||
* Ideally, we would only allow the exact same area, but due to
|
||||
* possible loss of precision in all of the calculations, we
|
||||
* allow >= 0.999.
|
||||
*/
|
||||
return ratioOfOldArea >= .999
|
||||
&& !filterCheck(oldSelectedArea, geom, areaOfGeom);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isOldAreaOutsidePolygon(GeospatialData f) {
|
||||
Set<String> fipsOutsidePolygon = state.getFipsOutsidePolygon();
|
||||
if (fipsOutsidePolygon != null)
|
||||
return fipsOutsidePolygon.contains(getFips(f));
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Warned area to shade in lat/lon space
|
||||
|
@ -1888,7 +2090,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
state.setWarningPolygon(warnPolygon);
|
||||
state.setWarningArea(getWarningAreaFromPolygon(
|
||||
state.getWarningPolygon(), record));
|
||||
updateWarnedAreas(true);
|
||||
updateWarnedAreas(true, true);
|
||||
}
|
||||
|
||||
private DataTime recordFrameTime(AbstractWarningRecord warnRecord) {
|
||||
|
@ -2266,9 +2468,6 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
|
||||
state.setWarningArea(tmp);
|
||||
for (String gid : gids) {
|
||||
removedGids.add(gid);
|
||||
}
|
||||
} else {
|
||||
String featureFips = getFips(f);
|
||||
Collection<GeospatialData> dataWithFips = getDataWithFips(featureFips);
|
||||
|
@ -2277,7 +2476,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
Set<String> fipsIds = getAllFipsInArea(oldWarningArea);
|
||||
if (fipsIds.contains(featureFips) == false) {
|
||||
break;
|
||||
} else if (oldWarningPolygon.contains(point) == true) {
|
||||
} else if (oldWarningPolygon.contains(point) == true
|
||||
|| isOldAreaOutsidePolygon(f)) {
|
||||
// Get intersecting parts for each geom with
|
||||
// matching fips
|
||||
List<Geometry> fipsParts = new ArrayList<Geometry>(
|
||||
|
@ -2294,10 +2494,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
geom = GeometryUtil.intersection(
|
||||
warningPolygon, geom);
|
||||
}
|
||||
state.setWarningArea(GeometryUtil.union(
|
||||
state.getWarningArea(), geom));
|
||||
for (String gid : gids) {
|
||||
removedGids.remove(gid);
|
||||
if (filterArea(f, geom, false)) {
|
||||
state.setWarningArea(GeometryUtil.union(
|
||||
state.getWarningArea(), geom));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -2335,6 +2534,23 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
.getFipsField());
|
||||
}
|
||||
|
||||
private String getFips(Geometry g) {
|
||||
Object o = g.getUserData();
|
||||
if (o != null) {
|
||||
return getFips(((CountyUserData) o).entry);
|
||||
} else {
|
||||
for (int n = 0; n < g.getNumGeometries(); ++n) {
|
||||
Geometry g2 = g.getGeometryN(n);
|
||||
if (g != g2) {
|
||||
String fips = getFips(g2);
|
||||
if (fips != null)
|
||||
return fips;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void warningAreaChanged() {
|
||||
state.snappedToArea = false;
|
||||
if (areaHatcher != null) {
|
||||
|
@ -2363,13 +2579,20 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
|
||||
private Geometry removeCounty(Geometry warningArea, String fipsToRemove) {
|
||||
Set<String> set = new HashSet<String>();
|
||||
set.add(fipsToRemove);
|
||||
return removeCounties(warningArea, set);
|
||||
}
|
||||
|
||||
private Geometry removeCounties(Geometry warningArea, Set<String> fipsToRemove) {
|
||||
if (fipsToRemove == null || fipsToRemove.isEmpty())
|
||||
return warningArea;
|
||||
List<Geometry> toKeep = new ArrayList<Geometry>(
|
||||
warningArea.getNumGeometries());
|
||||
for (int n = 0; n < warningArea.getNumGeometries(); ++n) {
|
||||
Geometry area = warningArea.getGeometryN(n);
|
||||
CountyUserData userData = (CountyUserData) area.getUserData();
|
||||
String areaFips = getFips(userData.entry);
|
||||
if (fipsToRemove.equals(areaFips) == false) {
|
||||
String areaFips = getFips(area);
|
||||
if (fipsToRemove.contains(areaFips) == false) {
|
||||
toKeep.add(area);
|
||||
}
|
||||
}
|
||||
|
@ -2571,7 +2794,113 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
this.warningAction = warningAction;
|
||||
}
|
||||
|
||||
public void initRemovedGids() {
|
||||
removedGids.clear();
|
||||
/**
|
||||
* Adjust the location of vertexes that cause polygon self-crossing.
|
||||
*/
|
||||
private Polygon adjustVertex(Polygon p) {
|
||||
GeometryFactory gf = new GeometryFactory();
|
||||
LinearRing lr;
|
||||
Coordinate coord[] = p.getCoordinates();
|
||||
int length = coord.length;
|
||||
Coordinate intersectCoord = null;
|
||||
int index[] = new int[6];
|
||||
LineSegment ls1, ls2;
|
||||
double d[] = new double[6];
|
||||
int indexOfTheOtherEnd[] = new int[2];
|
||||
boolean isPolygonValid = false;
|
||||
outerLoop: for (int skippedSegment = 1; skippedSegment < length - 3; skippedSegment++) {
|
||||
for (int i = 0; i < length - 1; i++) {
|
||||
index[0] = i;
|
||||
index[1] = index[0] + 1;
|
||||
index[2] = index[1] + skippedSegment;
|
||||
if (index[2] >= length)
|
||||
index[2] = index[2] - length + 1;
|
||||
index[3] = index[2] + 1;
|
||||
if (index[3] >= length)
|
||||
index[3] = index[3] - length + 1;
|
||||
ls1 = new LineSegment(coord[index[0]],coord[index[1]]);
|
||||
ls2 = new LineSegment(coord[index[2]],coord[index[3]]);
|
||||
intersectCoord = ls1.intersection(ls2);
|
||||
if (intersectCoord != null) {
|
||||
for (int j = 0; j < index.length-2; j++) {
|
||||
d[j] = calculateDistance(intersectCoord,coord[index[j]]);
|
||||
}
|
||||
if (d[0] < d[1]) {
|
||||
index[4] = index[0];
|
||||
d[4] = d[0];
|
||||
indexOfTheOtherEnd[0] = index[1];
|
||||
} else {
|
||||
index[4] = index[1];
|
||||
d[4] = d[1];
|
||||
indexOfTheOtherEnd[0] = index[0];
|
||||
}
|
||||
if (d[2] < d[3]) {
|
||||
index[5] = index[2];
|
||||
d[5] = d[2];
|
||||
indexOfTheOtherEnd[1] = index[3];
|
||||
} else {
|
||||
index[5] = index[3];
|
||||
d[5] = d[3];
|
||||
indexOfTheOtherEnd[1] = index[2];
|
||||
}
|
||||
// index of the vertex on a line segment (line segment A), which will be moved along line segment A.
|
||||
int replaceIndex;
|
||||
// index of the vertex at the other end of line segment A.
|
||||
int theOtherIndex;
|
||||
if (d[4] < d[5]) {
|
||||
replaceIndex = index[4];
|
||||
theOtherIndex = indexOfTheOtherEnd[0];
|
||||
} else {
|
||||
replaceIndex= index[5];
|
||||
theOtherIndex = indexOfTheOtherEnd[1];
|
||||
}
|
||||
// move the bad vertex, which is on line segment A and has the shortest distance to intersectCoord,
|
||||
// along line segment A to the other side of line segment B which intersects with line segment A.
|
||||
double delta;
|
||||
double min = 0.00001;
|
||||
if (Math.abs(intersectCoord.x - coord[replaceIndex].x) < min) {
|
||||
// move the bad vertex along a vertical line segment.
|
||||
delta = intersectCoord.y - coord[theOtherIndex].y;
|
||||
coord[replaceIndex].y += 0.01 * (delta / Math.abs(delta));
|
||||
} else if (Math.abs(intersectCoord.y - coord[replaceIndex].y) < min) {
|
||||
// move the bad vertex along a horizontal line segment.
|
||||
delta = intersectCoord.x - coord[theOtherIndex].x;
|
||||
coord[replaceIndex].x += 0.01 * (delta / Math.abs(delta));
|
||||
} else {
|
||||
// move the bad vertex along a line segment which is neither vertical nor horizontal.
|
||||
double slope = computeSlope(coord, replaceIndex, theOtherIndex);
|
||||
delta = coord[theOtherIndex].y - intersectCoord.y;
|
||||
coord[replaceIndex].y = intersectCoord.y + 0.005 * (delta / Math.abs(delta));
|
||||
coord[replaceIndex].x = (coord[replaceIndex].y - coord[theOtherIndex].y) / slope
|
||||
+ coord[theOtherIndex].x;
|
||||
}
|
||||
PolygonUtil.round(coord, 2);
|
||||
if (replaceIndex == 0)
|
||||
coord[length-1] = new Coordinate(coord[replaceIndex]);
|
||||
else if (replaceIndex == length - 1)
|
||||
coord[0] = new Coordinate(coord[replaceIndex]);
|
||||
lr = gf.createLinearRing(coord);
|
||||
p = gf.createPolygon(lr, null);
|
||||
isPolygonValid = p.isValid();
|
||||
if (isPolygonValid)
|
||||
break outerLoop;
|
||||
}
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
private double calculateDistance(Coordinate c1, Coordinate c2) {
|
||||
return Math.sqrt(Math.pow(c1.x - c2.x, 2) + Math.pow(c1.y - c2.y, 2));
|
||||
}
|
||||
|
||||
public double computeSlope(Coordinate[] coords, int i, int j) {
|
||||
double min = 1.0E-08;
|
||||
double dx = coords[i].x-coords[j].x;
|
||||
double slope = 0.0;
|
||||
if (Math.abs(dx)>min) {
|
||||
slope = (coords[i].y-coords[j].y)/dx;
|
||||
}
|
||||
return slope;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* AddVertexAction, DeleteVertextAction and MoveElementAction inner classes.
|
||||
* Jan 30, 2013 15439 Qinglu Lin Code were added to prevent nullPointException from occurring
|
||||
* when c2 is null for "case SINGLE_POINT" in move().
|
||||
* Mar 28, 2013 DR 15974 D. Friedman Do not track removed GIDs.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -360,7 +361,6 @@ public class WarngenUIManager extends InputAdapter {
|
|||
}
|
||||
|
||||
private void move(int x, int y) {
|
||||
warngenLayer.initRemovedGids();
|
||||
IDisplayPaneContainer container = warngenLayer.getResourceContainer();
|
||||
WarngenUIState state = warngenLayer.getWarngenState();
|
||||
|
||||
|
@ -416,7 +416,6 @@ public class WarngenUIManager extends InputAdapter {
|
|||
return;
|
||||
}
|
||||
|
||||
warngenLayer.initRemovedGids();
|
||||
Coordinate[] coords = warngenLayer.getPolygon().getCoordinates();
|
||||
|
||||
int idx = StormTrackUIManager.getCoordinateIndex(warngenLayer,
|
||||
|
@ -519,7 +518,6 @@ public class WarngenUIManager extends InputAdapter {
|
|||
private class MoveElementAction extends AbstractRightClickAction {
|
||||
@Override
|
||||
public void run() {
|
||||
warngenLayer.initRemovedGids();
|
||||
moveType = MoveType.ALL_POINTS;
|
||||
movePointIndex = StormTrackUIManager.getCoordinateIndex(
|
||||
warngenLayer, warngenLayer.getPolygon().getCoordinates(),
|
||||
|
@ -549,7 +547,6 @@ public class WarngenUIManager extends InputAdapter {
|
|||
return;
|
||||
}
|
||||
|
||||
warngenLayer.initRemovedGids();
|
||||
Coordinate c = new Coordinate(lastMouseX, lastMouseY);
|
||||
Polygon poly = warngenLayer.getPolygon();
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* 12/06/2012 DR 15559 Qinglu Lin Added computeSlope(), computeCoordinate(),
|
||||
* and adjustPolygon().
|
||||
* Feb 15, 2013 1624 jsanchez Fix NullPointerException in removeDuplicateCoordinate.
|
||||
* 03/28/2013 DR 15974 D. Friedman Track marked areas outside polygon.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -77,6 +78,8 @@ public class WarngenUIState {
|
|||
|
||||
public FollowupData followupData = null;
|
||||
|
||||
private Set<String> fipsOutsidePolygon = null;
|
||||
|
||||
/**
|
||||
* Get the warning area in lat/lon projection
|
||||
*
|
||||
|
@ -326,6 +329,14 @@ public class WarngenUIState {
|
|||
this.warningPolygon = removeDuplicateCoordinate(warningPolygon);
|
||||
}
|
||||
|
||||
public Set<String> getFipsOutsidePolygon() {
|
||||
return fipsOutsidePolygon;
|
||||
}
|
||||
|
||||
public void setFipsOutsidePolygon(Set<String> gidsOutsidePolygon) {
|
||||
this.fipsOutsidePolygon = gidsOutsidePolygon;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
warningPolygon = null;
|
||||
clear2();
|
||||
|
@ -344,6 +355,7 @@ public class WarngenUIState {
|
|||
warningArea = null;
|
||||
markedWarningArea = null;
|
||||
markedWarningPolygon = null;
|
||||
fipsOutsidePolygon = null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -34,7 +34,6 @@ import java.util.regex.Pattern;
|
|||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfigManager;
|
||||
import com.raytheon.edex.plugin.gfe.db.dao.GFEDao;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.server.GridParmManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.D2DGridDatabase;
|
||||
|
@ -47,6 +46,7 @@ import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory;
|
|||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.server.message.ServerResponse;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.server.notify.GridUpdateNotification;
|
||||
import com.raytheon.uf.common.message.WsId;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
|
@ -70,6 +70,8 @@ import com.raytheon.uf.edex.site.SiteAwareRegistry;
|
|||
* D2DParmIdCache toGfeIngestNotificationFilter.
|
||||
* Added code to match wind components and send
|
||||
* GridUpdateNotifications.
|
||||
* Mar 20, 2013 #1774 randerso Changde to use GFDD2DDao
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bphillip
|
||||
|
@ -308,7 +310,6 @@ public class D2DParmIdCache {
|
|||
"Building D2DParmIdCache for " + siteID + "...");
|
||||
IFPServerConfig config = IFPServerConfigManager
|
||||
.getServerConfig(siteID);
|
||||
GFEDao dao = new GFEDao();
|
||||
Set<ParmID> parmIds = new HashSet<ParmID>();
|
||||
long start = System.currentTimeMillis();
|
||||
List<String> d2dModels = config.getD2dModels();
|
||||
|
@ -318,8 +319,8 @@ public class D2DParmIdCache {
|
|||
if ((d2dModelName != null) && (gfeModel != null)) {
|
||||
List<DatabaseID> dbIds = null;
|
||||
try {
|
||||
dbIds = dao.getD2DDatabaseIdsFromDb(d2dModelName,
|
||||
gfeModel, siteID);
|
||||
dbIds = D2DGridDatabase.getD2DDatabaseIdsFromDb(config,
|
||||
d2dModelName);
|
||||
} catch (DataAccessLayerException e) {
|
||||
throw new PluginException(
|
||||
"Unable to get D2D Database Ids from database!",
|
||||
|
@ -333,9 +334,14 @@ public class D2DParmIdCache {
|
|||
|
||||
for (int i = 0; i < versions; i++) {
|
||||
try {
|
||||
parmIds.addAll(dao.getD2DParmIdsFromDb(
|
||||
d2dModelName, dbIds.get(i)));
|
||||
} catch (DataAccessLayerException e) {
|
||||
D2DGridDatabase db = (D2DGridDatabase) GridParmManager
|
||||
.getDb(dbIds.get(i));
|
||||
ServerResponse<List<ParmID>> sr = db
|
||||
.getParmList();
|
||||
if (sr.isOkay()) {
|
||||
parmIds.addAll(sr.getPayload());
|
||||
}
|
||||
} catch (GfeException e) {
|
||||
throw new PluginException(
|
||||
"Error adding parmIds to D2DParmIdCache!!",
|
||||
e);
|
||||
|
|
|
@ -34,13 +34,13 @@ import com.google.common.util.concurrent.MoreExecutors;
|
|||
import com.raytheon.edex.plugin.gfe.cache.d2dparms.D2DParmIdCache;
|
||||
import com.raytheon.edex.plugin.gfe.cache.gridlocations.GridLocationCache;
|
||||
import com.raytheon.edex.plugin.gfe.cache.ifpparms.IFPParmIdCache;
|
||||
import com.raytheon.edex.plugin.gfe.db.dao.GFEDao;
|
||||
import com.raytheon.edex.plugin.gfe.db.dao.IscSendRecordDao;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeMissingConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.isc.IRTManager;
|
||||
import com.raytheon.edex.plugin.gfe.reference.MapManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.GridParmManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.D2DGridDatabase;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabaseManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.GridDatabase;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.NetCDFDatabaseManager;
|
||||
|
@ -85,6 +85,7 @@ import com.raytheon.uf.edex.site.notify.SendSiteActivationNotifications;
|
|||
* Feb 15, 2013 1638 mschenke Moved sending of site notification messages to edex plugin
|
||||
* Feb 28, 2013 #1447 dgilling Enable active table fetching on site
|
||||
* activation.
|
||||
* Mar 20, 2013 #1774 randerso Changed to use GFED2DDao
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -426,7 +427,6 @@ public class GFESiteActivation implements ISiteActivationListener {
|
|||
if (LockState.SUCCESSFUL.equals(ct.getLockState())) {
|
||||
boolean clearTime = false;
|
||||
try {
|
||||
GFEDao dao = new GFEDao();
|
||||
List<String> d2dModels = configRef.getD2dModels();
|
||||
List<List<String>> idsByVersion = new ArrayList<List<String>>(
|
||||
5);
|
||||
|
@ -441,10 +441,9 @@ public class GFESiteActivation implements ISiteActivationListener {
|
|||
.desiredDbVersions(new DatabaseID(
|
||||
siteID, DataType.GRID, "",
|
||||
gfeModel));
|
||||
List<DatabaseID> dbIds = dao
|
||||
.getD2DDatabaseIdsFromDb(
|
||||
d2dModelName, gfeModel,
|
||||
siteID, versions);
|
||||
List<DatabaseID> dbIds = D2DGridDatabase
|
||||
.getD2DDatabaseIdsFromDb(configRef,
|
||||
d2dModelName, versions);
|
||||
|
||||
while (versions > idsByVersion.size()) {
|
||||
idsByVersion.add(new ArrayList<String>(
|
||||
|
|
|
@ -0,0 +1,419 @@
|
|||
/**
|
||||
* 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.edex.plugin.gfe.db.dao;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.hibernate.Query;
|
||||
import org.hibernate.SQLQuery;
|
||||
import org.hibernate.Session;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfigManager;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.util.GridTranslator;
|
||||
import com.raytheon.uf.common.comm.CommunicationException;
|
||||
import com.raytheon.uf.common.dataplugin.PluginException;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridParmInfo;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridConstants;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridInfoConstants;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridRecord;
|
||||
import com.raytheon.uf.common.dataplugin.level.Level;
|
||||
import com.raytheon.uf.common.dataplugin.level.LevelFactory;
|
||||
import com.raytheon.uf.common.parameter.mapping.ParameterMapper;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.mapping.MultipleMappingException;
|
||||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
||||
import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
||||
import com.raytheon.uf.edex.plugin.grid.dao.GridDao;
|
||||
|
||||
/**
|
||||
* Data access object for manipulating GFE Records
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 03/20/13 #1774 randerso Refactored out of GFEDao
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author randerso
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
// **********************************************************************
|
||||
// TODO: this was moved out of GFEDao and needs to be cleaned up to better
|
||||
// use the inherited GridDao functionality and hibernate instead of
|
||||
// SQL/HQL queries. Some parts of the queries could be pushed up to
|
||||
// GridDao
|
||||
// **********************************************************************
|
||||
public class GFED2DDao extends GridDao {
|
||||
private static final String FCST_TIME = "dataTime.fcstTime";
|
||||
|
||||
private static final String REF_TIME = "dataTime.refTime";
|
||||
|
||||
// hibernate query to find grid info record for the given datasetId and
|
||||
// parameter
|
||||
private static final String SQL_D2D_GRID_PARM_QUERY = "select parameter_abbreviation, id "
|
||||
+ "FROM grid_info WHERE "
|
||||
+ GridInfoConstants.DATASET_ID
|
||||
+ " = :"
|
||||
+ GridInfoConstants.DATASET_ID
|
||||
+ " AND "
|
||||
+ "level_id = :level_id AND "
|
||||
+ "(lower(parameter_abbreviation) = :abbrev OR lower(parameter_abbreviation) like :hourAbbrev)";
|
||||
|
||||
// hibernate query to find the times for the GridRecord for the given
|
||||
// info.id, id returned to allow easy lookup of the record associated with
|
||||
// the time
|
||||
private static final String HQL_D2D_GRID_TIME_QUERY = "select dataTime.fcstTime, id from GridRecord "
|
||||
+ "where "
|
||||
+ GridConstants.INFO_ID
|
||||
+ " = :info_id AND dataTime.refTime = :refTime order by dataTime.fcstTime";
|
||||
|
||||
private static final Pattern WIND_PATTERN = Pattern.compile("wind");
|
||||
|
||||
public GFED2DDao() throws PluginException {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a list of available forecast times
|
||||
*
|
||||
* @param dbId
|
||||
* The database ID to get the times for
|
||||
* @return The list of forecast times associated with the specified
|
||||
* DatabaseID
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur while querying the metadata database
|
||||
*/
|
||||
public List<Integer> getD2DForecastTimes(DatabaseID dbId)
|
||||
throws DataAccessLayerException {
|
||||
DatabaseQuery query = new DatabaseQuery(GridRecord.class.getName());
|
||||
query.addDistinctParameter(FCST_TIME);
|
||||
try {
|
||||
IFPServerConfig config = IFPServerConfigManager
|
||||
.getServerConfig(dbId.getSiteId());
|
||||
query.addQueryParam(GridConstants.DATASET_ID,
|
||||
config.d2dModelNameMapping(dbId.getModelName()));
|
||||
} catch (GfeConfigurationException e) {
|
||||
throw new DataAccessLayerException(
|
||||
"Error occurred looking up model name mapping", e);
|
||||
}
|
||||
query.addQueryParam(REF_TIME, dbId.getModelTimeAsDate());
|
||||
query.addOrder(FCST_TIME, true);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Integer> vals = (List<Integer>) this.queryByCriteria(query);
|
||||
return vals;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a GridRecord from the grib metadata database based on a ParmID,
|
||||
* TimeRange, and GridParmInfo.
|
||||
*
|
||||
* @param id
|
||||
* The parmID of the desired GridRecord
|
||||
* @param forecastTime
|
||||
* The foreCast time of the desired GridRecord, null for any
|
||||
* record
|
||||
* @param info
|
||||
* The GridParmInfo for the requested d2d grid.
|
||||
* @return The GridRecord from the grib metadata database
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur while querying the metadata database
|
||||
*/
|
||||
public GridRecord getD2DGrid(ParmID id, Integer forecastTime,
|
||||
GridParmInfo info) throws DataAccessLayerException {
|
||||
Session s = null;
|
||||
|
||||
try {
|
||||
s = getHibernateTemplate().getSessionFactory().openSession();
|
||||
// TODO: clean up so we only make one db query
|
||||
SortedMap<Integer, Integer> rawTimes = queryByD2DParmId(id, s);
|
||||
|
||||
// if forecastTime is null just pick one,
|
||||
// this is for static data since all times are the same
|
||||
if (forecastTime == null) {
|
||||
forecastTime = rawTimes.keySet().iterator().next();
|
||||
}
|
||||
|
||||
GridRecord retVal = (GridRecord) s.get(GridRecord.class,
|
||||
rawTimes.get(forecastTime));
|
||||
retVal.setPluginName(GridConstants.GRID);
|
||||
return retVal;
|
||||
|
||||
} finally {
|
||||
if (s != null) {
|
||||
try {
|
||||
s.close();
|
||||
} catch (Exception e) {
|
||||
statusHandler.error(
|
||||
"Error occurred closing database session", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a SortedMap of DataTime and GridRecord ids from the grib metadata
|
||||
* database which match the given ParmID. Session passed to allow reuse
|
||||
* across multiple calls.
|
||||
*
|
||||
* @param id
|
||||
* The ParmID to search with
|
||||
* @param s
|
||||
* The database session to use
|
||||
* @return The list of GridRecords from the grib metadata database which
|
||||
* match the given ParmID
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur while querying the metadata database
|
||||
*/
|
||||
public SortedMap<Integer, Integer> queryByD2DParmId(ParmID id, Session s)
|
||||
throws DataAccessLayerException {
|
||||
String levelName = GridTranslator.getLevelName(id.getParmLevel());
|
||||
|
||||
double[] levelValues = GridTranslator.getLevelValue(id.getParmLevel());
|
||||
boolean levelOnePresent = (levelValues[0] != Level
|
||||
.getInvalidLevelValue());
|
||||
boolean levelTwoPresent = (levelValues[1] != Level
|
||||
.getInvalidLevelValue());
|
||||
Level level = null;
|
||||
|
||||
// to have a level 2, must have a level one
|
||||
try {
|
||||
if (levelOnePresent && levelTwoPresent) {
|
||||
level = LevelFactory.getInstance().getLevel(levelName,
|
||||
levelValues[0], levelValues[1]);
|
||||
} else if (levelOnePresent) {
|
||||
level = LevelFactory.getInstance().getLevel(levelName,
|
||||
levelValues[0]);
|
||||
} else {
|
||||
level = LevelFactory.getInstance().getLevel(levelName, 0.0);
|
||||
}
|
||||
} catch (CommunicationException e) {
|
||||
logger.error(e.getLocalizedMessage(), e);
|
||||
}
|
||||
if (level == null) {
|
||||
logger.warn("Unable to query D2D parms, ParmID " + id
|
||||
+ " does not map to a level");
|
||||
return new TreeMap<Integer, Integer>();
|
||||
}
|
||||
|
||||
SQLQuery modelQuery = s.createSQLQuery(SQL_D2D_GRID_PARM_QUERY);
|
||||
modelQuery.setLong("level_id", level.getId());
|
||||
DatabaseID dbId = id.getDbId();
|
||||
|
||||
try {
|
||||
IFPServerConfig config = IFPServerConfigManager
|
||||
.getServerConfig(dbId.getSiteId());
|
||||
modelQuery.setString(GridInfoConstants.DATASET_ID,
|
||||
config.d2dModelNameMapping(dbId.getModelName()));
|
||||
} catch (GfeConfigurationException e) {
|
||||
throw new DataAccessLayerException(
|
||||
"Error occurred looking up model name mapping", e);
|
||||
}
|
||||
|
||||
String abbreviation = null;
|
||||
try {
|
||||
abbreviation = ParameterMapper.getInstance().lookupBaseName(
|
||||
id.getParmName(), "gfeParamName");
|
||||
} catch (MultipleMappingException e) {
|
||||
statusHandler.handle(Priority.WARN, e.getLocalizedMessage(), e);
|
||||
abbreviation = e.getArbitraryMapping();
|
||||
}
|
||||
|
||||
abbreviation = abbreviation.toLowerCase();
|
||||
modelQuery.setString("abbrev", abbreviation);
|
||||
modelQuery.setString("hourAbbrev", abbreviation + "%hr");
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Object[]> results = modelQuery.list();
|
||||
|
||||
Integer modelId = null;
|
||||
if (results.size() == 0) {
|
||||
return new TreeMap<Integer, Integer>();
|
||||
} else if (results.size() > 1) {
|
||||
// hours matched, take hour with least number that matches exact
|
||||
// param
|
||||
Pattern p = Pattern.compile("^" + abbreviation + "(\\d+)hr$");
|
||||
int lowestHr = -1;
|
||||
for (Object[] rows : results) {
|
||||
String param = ((String) rows[0]).toLowerCase();
|
||||
if (param.equals(abbreviation) && (lowestHr < 0)) {
|
||||
modelId = (Integer) rows[1];
|
||||
} else {
|
||||
Matcher matcher = p.matcher(param);
|
||||
if (matcher.matches()) {
|
||||
int hr = Integer.parseInt(matcher.group(1));
|
||||
if ((lowestHr < 0) || (hr < lowestHr)) {
|
||||
modelId = (Integer) rows[1];
|
||||
lowestHr = hr;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
modelId = (Integer) (results.get(0))[1];
|
||||
}
|
||||
|
||||
Query timeQuery = s.createQuery(HQL_D2D_GRID_TIME_QUERY);
|
||||
timeQuery.setInteger("info_id", modelId);
|
||||
timeQuery.setParameter("refTime", dbId.getModelTimeAsDate());
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Object[]> timeResults = timeQuery.list();
|
||||
|
||||
if (timeResults.isEmpty()) {
|
||||
return new TreeMap<Integer, Integer>();
|
||||
}
|
||||
|
||||
SortedMap<Integer, Integer> dataTimes = new TreeMap<Integer, Integer>();
|
||||
for (Object[] rows : timeResults) {
|
||||
dataTimes.put((Integer) rows[0], (Integer) rows[1]);
|
||||
}
|
||||
return dataTimes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the available Forecast Hours by D2D parm id.
|
||||
*
|
||||
* @param id
|
||||
* @return the list of forecast hours
|
||||
* @throws DataAccessLayerException
|
||||
*/
|
||||
public List<Integer> queryFcstHourByD2DParmId(ParmID id)
|
||||
throws DataAccessLayerException {
|
||||
List<Integer> timeList = new ArrayList<Integer>();
|
||||
Session s = null;
|
||||
try {
|
||||
s = getHibernateTemplate().getSessionFactory().openSession();
|
||||
|
||||
if (id.getParmName().equalsIgnoreCase("wind")) {
|
||||
String idString = id.toString();
|
||||
Matcher idWindMatcher = WIND_PATTERN.matcher(idString);
|
||||
|
||||
ParmID uWindId = new ParmID(idWindMatcher.replaceAll("uW"));
|
||||
SortedMap<Integer, Integer> results = queryByD2DParmId(uWindId,
|
||||
s);
|
||||
List<Integer> uTimeList = new ArrayList<Integer>(results.size());
|
||||
for (Integer o : results.keySet()) {
|
||||
uTimeList.add(o);
|
||||
}
|
||||
|
||||
ParmID vWindId = new ParmID(idWindMatcher.replaceAll("vW"));
|
||||
results = queryByD2DParmId(vWindId, s);
|
||||
Set<Integer> vTimeList = new HashSet<Integer>(results.size(), 1);
|
||||
for (Integer o : results.keySet()) {
|
||||
vTimeList.add(o);
|
||||
}
|
||||
|
||||
for (Integer tr : uTimeList) {
|
||||
if (vTimeList.contains(tr)) {
|
||||
timeList.add(tr);
|
||||
}
|
||||
}
|
||||
|
||||
if (!timeList.isEmpty()) {
|
||||
return timeList;
|
||||
}
|
||||
|
||||
ParmID sWindId = new ParmID(idWindMatcher.replaceAll("ws"));
|
||||
results = queryByD2DParmId(sWindId, s);
|
||||
List<Integer> sTimeList = new ArrayList<Integer>(results.size());
|
||||
for (Integer o : results.keySet()) {
|
||||
sTimeList.add(o);
|
||||
}
|
||||
|
||||
ParmID dWindId = new ParmID(idWindMatcher.replaceAll("wd"));
|
||||
results = queryByD2DParmId(dWindId, s);
|
||||
Set<Integer> dTimeList = new HashSet<Integer>(results.size(), 1);
|
||||
for (Integer o : results.keySet()) {
|
||||
dTimeList.add(o);
|
||||
}
|
||||
|
||||
for (Integer tr : sTimeList) {
|
||||
if (dTimeList.contains(tr)) {
|
||||
timeList.add(tr);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
SortedMap<Integer, Integer> results = queryByD2DParmId(id, s);
|
||||
for (Integer o : results.keySet()) {
|
||||
timeList.add(o);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (s != null) {
|
||||
try {
|
||||
s.close();
|
||||
} catch (Exception e) {
|
||||
statusHandler.error(
|
||||
"Error occurred closing database session", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return timeList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves model run times for the n most recent model runs of a given
|
||||
* d2dModelName
|
||||
*
|
||||
* @param d2dModelName
|
||||
* @param maxRecords
|
||||
* @return
|
||||
* @throws DataAccessLayerException
|
||||
*/
|
||||
public List<Date> getD2DModelRunTimes(String d2dModelName, int maxRecords)
|
||||
throws DataAccessLayerException {
|
||||
DatabaseQuery query = new DatabaseQuery(GridRecord.class.getName());
|
||||
query.addDistinctParameter(REF_TIME);
|
||||
query.addQueryParam(GridConstants.DATASET_ID, d2dModelName);
|
||||
query.addOrder(REF_TIME, false);
|
||||
if (maxRecords > 0) {
|
||||
query.setMaxResults(maxRecords);
|
||||
}
|
||||
List<?> result = this.queryByCriteria(query);
|
||||
|
||||
List<Date> inventory = new ArrayList<Date>(result.size());
|
||||
for (Object obj : result) {
|
||||
// convert returned "Dates" (actually java.sql.TimeStamps) to actual
|
||||
// java.util.Dates so equals comparisons work correctly
|
||||
Date date = new Date(((Date) obj).getTime());
|
||||
inventory.add(date);
|
||||
}
|
||||
|
||||
return inventory;
|
||||
}
|
||||
}
|
|
@ -27,18 +27,13 @@ import java.util.Calendar;
|
|||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.hibernate.Query;
|
||||
import org.hibernate.SQLQuery;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.Transaction;
|
||||
import org.hibernate.criterion.DetachedCriteria;
|
||||
|
@ -49,44 +44,27 @@ import org.springframework.transaction.support.TransactionCallbackWithoutResult;
|
|||
|
||||
import com.raytheon.edex.db.dao.DefaultPluginDao;
|
||||
import com.raytheon.edex.plugin.gfe.config.GFESiteActivation;
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfigManager;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.server.GridParmManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.D2DGridDatabase;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.GridDatabase;
|
||||
import com.raytheon.edex.plugin.gfe.util.GridTranslator;
|
||||
import com.raytheon.edex.plugin.gfe.util.SendNotifications;
|
||||
import com.raytheon.uf.common.comm.CommunicationException;
|
||||
import com.raytheon.uf.common.dataplugin.PluginDataObject;
|
||||
import com.raytheon.uf.common.dataplugin.PluginException;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID.DataType;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GFERecord;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridParmInfo;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.server.notify.GridUpdateNotification;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.server.notify.LockNotification;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.util.GfeUtil;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridConstants;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridInfoConstants;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridRecord;
|
||||
import com.raytheon.uf.common.dataplugin.level.Level;
|
||||
import com.raytheon.uf.common.dataplugin.level.LevelFactory;
|
||||
import com.raytheon.uf.common.dataplugin.persist.IPersistable;
|
||||
import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject;
|
||||
import com.raytheon.uf.common.dataquery.db.QueryResult;
|
||||
import com.raytheon.uf.common.datastorage.DataStoreFactory;
|
||||
import com.raytheon.uf.common.datastorage.IDataStore;
|
||||
import com.raytheon.uf.common.parameter.mapping.ParameterMapper;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.DataTime;
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.uf.common.util.Pair;
|
||||
import com.raytheon.uf.common.util.mapping.MultipleMappingException;
|
||||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
||||
import com.raytheon.uf.edex.database.purge.PurgeLogger;
|
||||
import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
||||
|
@ -112,7 +90,8 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
|||
* 01/21/12 #1504 randerso Back ported change to use ParameterMapper into 13.1.2
|
||||
* 02/10/13 #1603 randerso Eliminated unnecessary conversion from lists to arrays
|
||||
* 02/12/13 #1608 randerso Changed to use explicit deletes for groups and datasets
|
||||
* 03/15/13 #1795 njensen Added updatePublishTime()
|
||||
* 03/15/13 #1795 njensen Added updatePublishTime()
|
||||
* 03/21/13 #1774 randerso Moved D2D routines into {@link com.raytheon.edex.plugin.gfe.db.dao.GFED2DDao}
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -120,25 +99,6 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
|||
* @version 1.0
|
||||
*/
|
||||
public class GFEDao extends DefaultPluginDao {
|
||||
// hibernate query to find grid info record for the given datasetId and
|
||||
// parameter
|
||||
private String SQL_D2D_GRID_PARM_QUERY = "select parameter_abbreviation, id "
|
||||
+ "FROM grid_info WHERE "
|
||||
+ GridInfoConstants.DATASET_ID
|
||||
+ " = :"
|
||||
+ GridInfoConstants.DATASET_ID
|
||||
+ " AND "
|
||||
+ "level_id = :level_id AND "
|
||||
+ "(lower(parameter_abbreviation) = :abbrev OR lower(parameter_abbreviation) like :hourAbbrev)";
|
||||
|
||||
// hibernate query to find the times for the GridRecord for the given
|
||||
// info.id, id returned to allow easy lookup of the record associated with
|
||||
// the time
|
||||
private static final String HQL_D2D_GRID_TIME_QUERY = "select dataTime, id from GridRecord "
|
||||
+ "where "
|
||||
+ GridConstants.INFO_ID
|
||||
+ " = :info_id AND dataTime.refTime = :refTime order by dataTime.fcstTime";
|
||||
|
||||
private static final Pattern WIND_PATTERN = Pattern.compile("wind");
|
||||
|
||||
public GFEDao() throws PluginException {
|
||||
|
@ -596,348 +556,6 @@ public class GFEDao extends DefaultPluginDao {
|
|||
return history;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a list of valid times for a specified ParmID from the grib
|
||||
* metadata database. The valid time is constructed by adding the forecast
|
||||
* time to the reference time.
|
||||
*
|
||||
* @param id
|
||||
* The parmID to get the times for
|
||||
* @return The list of times associated with the specified ParmID
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur while querying the metadata database
|
||||
*/
|
||||
public List<TimeRange> getD2DTimes(ParmID id)
|
||||
throws DataAccessLayerException {
|
||||
return queryTimeByD2DParmId(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a list of available forecast times
|
||||
*
|
||||
* @param dbId
|
||||
* The database ID to get the times for
|
||||
* @return The list of forecast times associated with the specified
|
||||
* DatabaseID
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur while querying the metadata database
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<Integer> getD2DForecastTimes(DatabaseID dbId)
|
||||
throws DataAccessLayerException {
|
||||
DatabaseQuery query = new DatabaseQuery(GridRecord.class.getName());
|
||||
query.addDistinctParameter("dataTime.fcstTime");
|
||||
try {
|
||||
IFPServerConfig config = IFPServerConfigManager
|
||||
.getServerConfig(dbId.getSiteId());
|
||||
query.addQueryParam(GridConstants.DATASET_ID,
|
||||
config.d2dModelNameMapping(dbId.getModelName()));
|
||||
} catch (GfeConfigurationException e) {
|
||||
throw new DataAccessLayerException(
|
||||
"Error occurred looking up model name mapping", e);
|
||||
}
|
||||
query.addQueryParam("dataTime.refTime", dbId.getModelTimeAsDate());
|
||||
query.addOrder("dataTime.fcstTime", true);
|
||||
List<?> vals = this.queryByCriteria(query);
|
||||
return (List<Integer>) vals;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a GridRecord from the grib metadata database based on a ParmID,
|
||||
* TimeRange, and GridParmInfo.
|
||||
*
|
||||
* @param id
|
||||
* The parmID of the desired GridRecord
|
||||
* @param timeRange
|
||||
* The timeRange of the desired GridRecord
|
||||
* @param info
|
||||
* The GridParmInfo for the requested d2d grid.
|
||||
* @return The GridRecord from the grib metadata database
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur while querying the metadata database
|
||||
*/
|
||||
public GridRecord getD2DGrid(ParmID id, TimeRange timeRange,
|
||||
GridParmInfo info) throws DataAccessLayerException {
|
||||
Session s = null;
|
||||
|
||||
try {
|
||||
s = getHibernateTemplate().getSessionFactory().openSession();
|
||||
// TODO: clean up so we only make one db query
|
||||
SortedMap<DataTime, Integer> rawTimes = queryByD2DParmId(id, s);
|
||||
List<TimeRange> gribTimes = new ArrayList<TimeRange>();
|
||||
for (DataTime dt : rawTimes.keySet()) {
|
||||
gribTimes.add(dt.getValidPeriod());
|
||||
}
|
||||
|
||||
try {
|
||||
if (isMos(id)) {
|
||||
for (Map.Entry<DataTime, Integer> timeEntry : rawTimes
|
||||
.entrySet()) {
|
||||
TimeRange gribTime = timeEntry.getKey()
|
||||
.getValidPeriod();
|
||||
TimeRange time = info.getTimeConstraints()
|
||||
.constraintTime(gribTime.getEnd());
|
||||
if (timeRange.getEnd().equals(time.getEnd())
|
||||
|| !info.getTimeConstraints().anyConstraints()) {
|
||||
GridRecord retVal = (GridRecord) s.get(
|
||||
GridRecord.class, timeEntry.getValue());
|
||||
retVal.setPluginName(GridConstants.GRID);
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
} else if (D2DGridDatabase.isNonAccumDuration(id, gribTimes)) {
|
||||
for (Map.Entry<DataTime, Integer> timeEntry : rawTimes
|
||||
.entrySet()) {
|
||||
TimeRange gribTime = timeEntry.getKey()
|
||||
.getValidPeriod();
|
||||
if (timeRange.getStart().equals(gribTime.getEnd())
|
||||
|| timeRange.equals(gribTime)) {
|
||||
GridRecord retVal = (GridRecord) s.get(
|
||||
GridRecord.class, timeEntry.getValue());
|
||||
retVal.setPluginName(GridConstants.GRID);
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (Map.Entry<DataTime, Integer> timeEntry : rawTimes
|
||||
.entrySet()) {
|
||||
TimeRange gribTime = timeEntry.getKey()
|
||||
.getValidPeriod();
|
||||
TimeRange time = info.getTimeConstraints()
|
||||
.constraintTime(gribTime.getStart());
|
||||
if ((timeRange.getStart().equals(time.getStart()) || !info
|
||||
.getTimeConstraints().anyConstraints())) {
|
||||
GridRecord retVal = (GridRecord) s.get(
|
||||
GridRecord.class, timeEntry.getValue());
|
||||
retVal.setPluginName(GridConstants.GRID);
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (GfeConfigurationException e) {
|
||||
throw new DataAccessLayerException(
|
||||
"Error getting configuration for "
|
||||
+ id.getDbId().getSiteId(), e);
|
||||
}
|
||||
} finally {
|
||||
if (s != null) {
|
||||
try {
|
||||
s.close();
|
||||
} catch (Exception e) {
|
||||
statusHandler.error(
|
||||
"Error occurred closing database session", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a SortedMap of DataTime and GridRecord ids from the grib metadata
|
||||
* database which match the given ParmID. Session passed to allow reuse
|
||||
* across multiple calls.
|
||||
*
|
||||
* @param id
|
||||
* The ParmID to search with
|
||||
* @param s
|
||||
* The database session to use
|
||||
* @return The list of GridRecords from the grib metadata database which
|
||||
* match the given ParmID
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur while querying the metadata database
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public SortedMap<DataTime, Integer> queryByD2DParmId(ParmID id, Session s)
|
||||
throws DataAccessLayerException {
|
||||
String levelName = GridTranslator.getLevelName(id.getParmLevel());
|
||||
|
||||
double[] levelValues = GridTranslator.getLevelValue(id.getParmLevel());
|
||||
boolean levelOnePresent = (levelValues[0] != Level
|
||||
.getInvalidLevelValue());
|
||||
boolean levelTwoPresent = (levelValues[1] != Level
|
||||
.getInvalidLevelValue());
|
||||
Level level = null;
|
||||
|
||||
// to have a level 2, must have a level one
|
||||
try {
|
||||
if (levelOnePresent && levelTwoPresent) {
|
||||
level = LevelFactory.getInstance().getLevel(levelName,
|
||||
levelValues[0], levelValues[1]);
|
||||
} else if (levelOnePresent) {
|
||||
level = LevelFactory.getInstance().getLevel(levelName,
|
||||
levelValues[0]);
|
||||
} else {
|
||||
level = LevelFactory.getInstance().getLevel(levelName, 0.0);
|
||||
}
|
||||
} catch (CommunicationException e) {
|
||||
logger.error(e.getLocalizedMessage(), e);
|
||||
}
|
||||
if (level == null) {
|
||||
logger.warn("Unable to query D2D parms, ParmID " + id
|
||||
+ " does not map to a level");
|
||||
return new TreeMap<DataTime, Integer>();
|
||||
}
|
||||
|
||||
SQLQuery modelQuery = s.createSQLQuery(SQL_D2D_GRID_PARM_QUERY);
|
||||
modelQuery.setLong("level_id", level.getId());
|
||||
DatabaseID dbId = id.getDbId();
|
||||
|
||||
try {
|
||||
IFPServerConfig config = IFPServerConfigManager
|
||||
.getServerConfig(dbId.getSiteId());
|
||||
modelQuery.setString(GridInfoConstants.DATASET_ID,
|
||||
config.d2dModelNameMapping(dbId.getModelName()));
|
||||
} catch (GfeConfigurationException e) {
|
||||
throw new DataAccessLayerException(
|
||||
"Error occurred looking up model name mapping", e);
|
||||
}
|
||||
|
||||
String abbreviation = null;
|
||||
try {
|
||||
abbreviation = ParameterMapper.getInstance().lookupBaseName(
|
||||
id.getParmName(), "gfeParamName");
|
||||
} catch (MultipleMappingException e) {
|
||||
statusHandler.handle(Priority.WARN, e.getLocalizedMessage(), e);
|
||||
abbreviation = e.getArbitraryMapping();
|
||||
}
|
||||
|
||||
abbreviation = abbreviation.toLowerCase();
|
||||
modelQuery.setString("abbrev", abbreviation);
|
||||
modelQuery.setString("hourAbbrev", abbreviation + "%hr");
|
||||
List<?> results = modelQuery.list();
|
||||
Integer modelId = null;
|
||||
if (results.size() == 0) {
|
||||
return new TreeMap<DataTime, Integer>();
|
||||
} else if (results.size() > 1) {
|
||||
// hours matched, take hour with least number that matches exact
|
||||
// param
|
||||
Pattern p = Pattern.compile("^" + abbreviation + "(\\d+)hr$");
|
||||
int lowestHr = -1;
|
||||
for (Object[] rows : (List<Object[]>) results) {
|
||||
String param = ((String) rows[0]).toLowerCase();
|
||||
if (param.equals(abbreviation) && (lowestHr < 0)) {
|
||||
modelId = (Integer) rows[1];
|
||||
} else {
|
||||
Matcher matcher = p.matcher(param);
|
||||
if (matcher.matches()) {
|
||||
int hr = Integer.parseInt(matcher.group(1));
|
||||
if ((lowestHr < 0) || (hr < lowestHr)) {
|
||||
modelId = (Integer) rows[1];
|
||||
lowestHr = hr;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
modelId = (Integer) ((Object[]) results.get(0))[1];
|
||||
}
|
||||
|
||||
Query timeQuery = s.createQuery(HQL_D2D_GRID_TIME_QUERY);
|
||||
timeQuery.setInteger("info_id", modelId);
|
||||
timeQuery.setParameter("refTime", dbId.getModelTimeAsDate());
|
||||
List<Object[]> timeResults = timeQuery.list();
|
||||
if (timeResults.isEmpty()) {
|
||||
return new TreeMap<DataTime, Integer>();
|
||||
}
|
||||
|
||||
SortedMap<DataTime, Integer> dataTimes = new TreeMap<DataTime, Integer>();
|
||||
for (Object[] rows : timeResults) {
|
||||
dataTimes.put((DataTime) rows[0], (Integer) rows[1]);
|
||||
}
|
||||
return dataTimes;
|
||||
}
|
||||
|
||||
public List<TimeRange> queryTimeByD2DParmId(ParmID id)
|
||||
throws DataAccessLayerException {
|
||||
List<TimeRange> timeList = new ArrayList<TimeRange>();
|
||||
Session s = null;
|
||||
try {
|
||||
s = getHibernateTemplate().getSessionFactory().openSession();
|
||||
|
||||
if (id.getParmName().equalsIgnoreCase("wind")) {
|
||||
String idString = id.toString();
|
||||
Matcher idWindMatcher = WIND_PATTERN.matcher(idString);
|
||||
|
||||
ParmID uWindId = new ParmID(idWindMatcher.replaceAll("uW"));
|
||||
SortedMap<DataTime, Integer> results = queryByD2DParmId(
|
||||
uWindId, s);
|
||||
List<TimeRange> uTimeList = new ArrayList<TimeRange>(
|
||||
results.size());
|
||||
for (DataTime o : results.keySet()) {
|
||||
uTimeList.add(new TimeRange(o.getValidPeriod().getStart(),
|
||||
3600 * 1000));
|
||||
}
|
||||
|
||||
ParmID vWindId = new ParmID(idWindMatcher.replaceAll("vW"));
|
||||
results = queryByD2DParmId(vWindId, s);
|
||||
Set<TimeRange> vTimeList = new HashSet<TimeRange>(
|
||||
results.size(), 1);
|
||||
for (DataTime o : results.keySet()) {
|
||||
vTimeList.add(new TimeRange(o.getValidPeriod().getStart(),
|
||||
3600 * 1000));
|
||||
}
|
||||
|
||||
for (TimeRange tr : uTimeList) {
|
||||
if (vTimeList.contains(tr)) {
|
||||
timeList.add(new TimeRange(tr.getStart(), tr.getStart()));
|
||||
}
|
||||
}
|
||||
|
||||
if (!timeList.isEmpty()) {
|
||||
return timeList;
|
||||
}
|
||||
|
||||
ParmID sWindId = new ParmID(idWindMatcher.replaceAll("ws"));
|
||||
results = queryByD2DParmId(sWindId, s);
|
||||
List<TimeRange> sTimeList = new ArrayList<TimeRange>(
|
||||
results.size());
|
||||
for (DataTime o : results.keySet()) {
|
||||
sTimeList.add(new TimeRange(o.getValidPeriod().getStart(),
|
||||
3600 * 1000));
|
||||
}
|
||||
|
||||
ParmID dWindId = new ParmID(idWindMatcher.replaceAll("wd"));
|
||||
results = queryByD2DParmId(dWindId, s);
|
||||
Set<TimeRange> dTimeList = new HashSet<TimeRange>(
|
||||
results.size(), 1);
|
||||
for (DataTime o : results.keySet()) {
|
||||
dTimeList.add(new TimeRange(o.getValidPeriod().getStart(),
|
||||
3600 * 1000));
|
||||
}
|
||||
|
||||
for (TimeRange tr : sTimeList) {
|
||||
if (dTimeList.contains(tr)) {
|
||||
timeList.add(new TimeRange(tr.getStart(), tr.getStart()));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
SortedMap<DataTime, Integer> results = queryByD2DParmId(id, s);
|
||||
if (isMos(id)) {
|
||||
for (DataTime o : results.keySet()) {
|
||||
timeList.add(new TimeRange(o.getValidPeriod().getEnd(),
|
||||
o.getValidPeriod().getDuration()));
|
||||
}
|
||||
} else {
|
||||
for (DataTime o : results.keySet()) {
|
||||
timeList.add(o.getValidPeriod());
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (s != null) {
|
||||
try {
|
||||
s.close();
|
||||
} catch (Exception e) {
|
||||
statusHandler.error(
|
||||
"Error occurred closing database session", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return timeList;
|
||||
}
|
||||
|
||||
public void purgeGFEGrids(final DatabaseID dbId) {
|
||||
txTemplate.execute(new TransactionCallbackWithoutResult() {
|
||||
@Override
|
||||
|
@ -959,107 +577,6 @@ public class GFEDao extends DefaultPluginDao {
|
|||
});
|
||||
}
|
||||
|
||||
public List<DatabaseID> getD2DDatabaseIdsFromDb(String d2dModelName,
|
||||
String gfeModel, String siteID) throws DataAccessLayerException {
|
||||
return getD2DDatabaseIdsFromDb(d2dModelName, gfeModel, siteID, -1);
|
||||
}
|
||||
|
||||
public List<DatabaseID> getD2DDatabaseIdsFromDb(String d2dModelName,
|
||||
String gfeModel, String siteID, int maxRecords)
|
||||
throws DataAccessLayerException {
|
||||
List<DatabaseID> dbInventory = new ArrayList<DatabaseID>();
|
||||
|
||||
DatabaseQuery query = new DatabaseQuery(GridRecord.class.getName());
|
||||
query.addDistinctParameter("dataTime.refTime");
|
||||
query.addQueryParam(GridConstants.DATASET_ID, d2dModelName);
|
||||
query.addOrder("dataTime.refTime", false);
|
||||
if (maxRecords > 0) {
|
||||
query.setMaxResults(maxRecords);
|
||||
}
|
||||
List<?> result = this.queryByCriteria(query);
|
||||
|
||||
for (Object obj : result) {
|
||||
DatabaseID dbId = null;
|
||||
dbId = new DatabaseID(siteID, DataType.GRID, "D2D", gfeModel,
|
||||
(Date) obj);
|
||||
try {
|
||||
GridDatabase db = GridParmManager.getDb(dbId);
|
||||
if ((db != null) && !dbInventory.contains(dbId)) {
|
||||
dbInventory.add(dbId);
|
||||
}
|
||||
} catch (GfeException e) {
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
e);
|
||||
}
|
||||
}
|
||||
return dbInventory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the latest (or newest) model run for the given site and model
|
||||
* name.
|
||||
*
|
||||
* @param d2dModel
|
||||
* A GridModel object that contains the D2D model name.
|
||||
* @param gfeModel
|
||||
* The GFE model name that corresponds to d2dModel.
|
||||
* @param siteID
|
||||
* The site to retrieve the data for.
|
||||
* @return The DatabaseID of the newest D2D model, or null if no models can
|
||||
* be found.
|
||||
* @throws DataAccessLayerException
|
||||
*/
|
||||
public DatabaseID getLatestD2DDatabaseIdsFromDb(String d2dModelName,
|
||||
String gfeModel, String siteID) throws DataAccessLayerException {
|
||||
List<DatabaseID> dbIds = getD2DDatabaseIdsFromDb(d2dModelName,
|
||||
gfeModel, siteID, 1);
|
||||
if (!dbIds.isEmpty()) {
|
||||
return dbIds.get(0);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Set<ParmID> getD2DParmIdsFromDb(String d2dModelName, DatabaseID dbId)
|
||||
throws DataAccessLayerException {
|
||||
|
||||
Set<ParmID> parmIds = new HashSet<ParmID>();
|
||||
|
||||
DatabaseQuery query = new DatabaseQuery(GridRecord.class.getName());
|
||||
query.addDistinctParameter(GridConstants.PARAMETER_ABBREVIATION);
|
||||
query.addDistinctParameter(GridConstants.MASTER_LEVEL_NAME);
|
||||
query.addDistinctParameter(GridConstants.LEVEL_ONE);
|
||||
query.addDistinctParameter(GridConstants.LEVEL_TWO);
|
||||
query.addQueryParam(GridConstants.DATASET_ID, d2dModelName);
|
||||
query.addQueryParam(
|
||||
"dataTime.refTime",
|
||||
TimeUtil.formatDate(dbId.getModelTimeAsDate()).replaceAll("_",
|
||||
" "));
|
||||
|
||||
List<?> result = this.queryByCriteria(query);
|
||||
|
||||
for (Object obj : result) {
|
||||
Object[] objArr = (Object[]) obj;
|
||||
String levelName = GridTranslator.getShortLevelName(
|
||||
(String) objArr[1], (Double) objArr[2], (Double) objArr[3]);
|
||||
if (!levelName.equals(LevelFactory.UNKNOWN_LEVEL)) {
|
||||
String abbrev = (String) objArr[0];
|
||||
try {
|
||||
abbrev = ParameterMapper.getInstance().lookupAlias(abbrev,
|
||||
"gfeParamName");
|
||||
} catch (MultipleMappingException e) {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
e.getLocalizedMessage(), e);
|
||||
abbrev = e.getArbitraryMapping();
|
||||
}
|
||||
ParmID newParmId = new ParmID(abbrev, dbId, levelName);
|
||||
parmIds.add(newParmId);
|
||||
}
|
||||
|
||||
}
|
||||
return parmIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes GridParmInfo from the HDF5 file and any data associated with that
|
||||
* info
|
||||
|
@ -1136,12 +653,6 @@ public class GFEDao extends DefaultPluginDao {
|
|||
}
|
||||
}
|
||||
|
||||
public static boolean isMos(ParmID id) {
|
||||
return id.getDbId().getModelName().equals("MOSGuide")
|
||||
&& (id.getParmName().startsWith("mxt") || id.getParmName()
|
||||
.startsWith("mnt"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the publish times in the database of all provided
|
||||
* GridDataHistories. Does not alter the publish times in memory.
|
||||
|
|
|
@ -30,6 +30,8 @@ import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 04/08/08 #875 bphillip Initial Creation
|
||||
* 03/28/13 #1837 dgilling Implement missing constructors from
|
||||
* super-class.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -40,6 +42,10 @@ public class GfeConfigurationException extends GfeException {
|
|||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public GfeConfigurationException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param aCause
|
||||
*/
|
||||
|
@ -58,4 +64,7 @@ public class GfeConfigurationException extends GfeException {
|
|||
super(aCause, anException);
|
||||
}
|
||||
|
||||
public GfeConfigurationException(Throwable anException) {
|
||||
super(anException);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
/**
|
||||
* 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.edex.plugin.gfe.exception;
|
||||
|
||||
/**
|
||||
* Exception thrown when a database table referenced in localMaps.py cannot be
|
||||
* located in the maps database.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 28, 2013 dgilling Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author dgilling
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class MissingLocalMapsException extends GfeConfigurationException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public MissingLocalMapsException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public MissingLocalMapsException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public MissingLocalMapsException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public MissingLocalMapsException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
|
@ -20,8 +20,11 @@
|
|||
package com.raytheon.edex.plugin.gfe.paraminfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
|
@ -31,6 +34,7 @@ import javax.xml.bind.annotation.XmlElements;
|
|||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -41,7 +45,9 @@ import com.raytheon.uf.common.time.TimeRange;
|
|||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 24, 2010 #6372 bphillip Initial creation
|
||||
* Jun 24, 2010 #6372 bphillip Initial creation
|
||||
* Mar 20, 2013 #1774 randerso Added getParmNames,
|
||||
* changed getAvailableTimes to match A1
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -108,12 +114,21 @@ public class GridParamInfo {
|
|||
}
|
||||
|
||||
public List<TimeRange> getAvailableTimes(Date refTime) {
|
||||
List<TimeRange> availTimes = new ArrayList<TimeRange>();
|
||||
for (int i = 1; i < times.size(); i++) {
|
||||
availTimes.add(new TimeRange(refTime.getTime() + times.get(i - 1)
|
||||
* 1000, refTime.getTime() + times.get(i) * 1000));
|
||||
List<TimeRange> availTimes = new ArrayList<TimeRange>(times.size());
|
||||
for (Integer fcstHour : times) {
|
||||
availTimes.add(new TimeRange(new Date(refTime.getTime() + fcstHour
|
||||
* TimeUtil.MILLIS_PER_SECOND), TimeUtil.MILLIS_PER_HOUR));
|
||||
}
|
||||
return availTimes;
|
||||
}
|
||||
|
||||
public Collection<String> getParmNames() {
|
||||
List<ParameterInfo> paramInfoList = this.getGridParamInfo();
|
||||
Set<String> parmNames = new HashSet<String>();
|
||||
for (ParameterInfo info : paramInfoList) {
|
||||
parmNames.add(info.getShort_name());
|
||||
}
|
||||
|
||||
return parmNames;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,8 +56,10 @@ import com.raytheon.uf.common.util.mapping.MultipleMappingException;
|
|||
* Jan 25, 2012 DR 14305 ryu Read site parameterInfo files
|
||||
* Sep 12, 2012 #1117 dgilling Implement method to retrieve all
|
||||
* parm names for a given model.
|
||||
* Feb 15, 2013 1598 bsteffen Make GridParamInfoLookup filter on
|
||||
* extension.
|
||||
* Feb 15, 2013 1598 bsteffen Make GridParamInfoLookup filter on
|
||||
* extension.
|
||||
* Mar 20, 2013 #1774 randerso Added getModelInfo,
|
||||
* added Dflt if no levels specified
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -94,7 +96,14 @@ public class GridParamInfoLookup {
|
|||
init();
|
||||
}
|
||||
|
||||
private GridParamInfo getGridParamInfo(String mappedModel) {
|
||||
/**
|
||||
* Gets the model information based on the specified model
|
||||
*
|
||||
* @param mappedModel
|
||||
* The model name
|
||||
* @return The parameter information or null if none found
|
||||
*/
|
||||
public GridParamInfo getGridParamInfo(String mappedModel) {
|
||||
String paramInfoName = null;
|
||||
try {
|
||||
paramInfoName = DatasetIdMapper.getInstance().lookupAliasOrNull(
|
||||
|
@ -211,5 +220,17 @@ public class GridParamInfoLookup {
|
|||
"Error unmarshalling grid parameter information", e);
|
||||
}
|
||||
}
|
||||
|
||||
for (GridParamInfo gridParamInfo : modelParamMap.values()) {
|
||||
for (String parmName : gridParamInfo.getParmNames()) {
|
||||
ParameterInfo parameterInfo = gridParamInfo
|
||||
.getParameterInfo(parmName);
|
||||
|
||||
// add Dflt level if no other levels defined
|
||||
if (parameterInfo.getLevels().isEmpty()) {
|
||||
parameterInfo.getLevels().add("Dflt");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
* Jun 24, 2010 bphillip Initial creation
|
||||
* Sep 12, 2012 #1117 dgilling Create field to hold list of
|
||||
* valid levels for each parameter.
|
||||
* Mar 20, 2013 #1774 randerso Added getMinVal and getMaxVal
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -53,6 +54,13 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
public class ParameterInfo {
|
||||
|
||||
// The netCDF convention is MINFLOAT to MAXFLOAT.
|
||||
// But we can't use it or GFE will attempt to create
|
||||
// billions and billions of contours.
|
||||
public static final float MIN_VALUE = 0f;
|
||||
|
||||
public static final float MAX_VALUE = 10000f;
|
||||
|
||||
@XmlElement
|
||||
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
private String short_name;
|
||||
|
@ -190,6 +198,28 @@ public class ParameterInfo {
|
|||
this.valid_range = valid_range;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the minimum valid value
|
||||
*/
|
||||
public float getMinVal() {
|
||||
float min = MIN_VALUE;
|
||||
if (valid_range != null && valid_range.length == 2) {
|
||||
min = valid_range[0];
|
||||
}
|
||||
return min;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the maximum valid value
|
||||
*/
|
||||
public float getMaxVal() {
|
||||
float min = MAX_VALUE;
|
||||
if (valid_range != null && valid_range.length == 2) {
|
||||
min = valid_range[1];
|
||||
}
|
||||
return min;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the fillValue
|
||||
*/
|
||||
|
|
|
@ -46,10 +46,10 @@ import org.opengis.filter.Filter;
|
|||
import org.opengis.filter.FilterFactory2;
|
||||
import org.opengis.geometry.BoundingBox;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.exception.MissingLocalMapsException;
|
||||
import com.raytheon.uf.common.dataquery.db.QueryResult;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.edex.core.EDEXUtil;
|
||||
import com.raytheon.uf.edex.database.tasks.SqlQueryTask;
|
||||
import com.vividsolutions.jts.geom.Geometry;
|
||||
|
@ -68,6 +68,8 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Sep 18, 2012 #1091 randerso Initial creation
|
||||
* Mar 28, 2013 #1837 dgilling Change error handling in
|
||||
* getLastUpdated().
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -172,11 +174,16 @@ public class DbShapeSource {
|
|||
|
||||
/**
|
||||
* @throws IOException
|
||||
* @throws MissingLocalMapsException
|
||||
*
|
||||
*/
|
||||
public void open() throws IOException {
|
||||
public void open() throws IOException, MissingLocalMapsException {
|
||||
DataStore dataStore = getDataStore();
|
||||
schema = dataStore.getSchema(this.tableName);
|
||||
try {
|
||||
schema = dataStore.getSchema(this.tableName);
|
||||
} catch (IOException e) {
|
||||
throw new MissingLocalMapsException(e);
|
||||
}
|
||||
|
||||
shapeField = schema.getGeometryDescriptor().getLocalName();
|
||||
featureCollection = null;
|
||||
|
@ -247,7 +254,8 @@ public class DbShapeSource {
|
|||
return featureIterator.next();
|
||||
}
|
||||
|
||||
public synchronized ShapeType getShapeType() throws IOException {
|
||||
public synchronized ShapeType getShapeType() throws IOException,
|
||||
MissingLocalMapsException {
|
||||
if (this.type == null) {
|
||||
boolean closeIt = false;
|
||||
if (schema == null) {
|
||||
|
@ -418,6 +426,9 @@ public class DbShapeSource {
|
|||
} catch (IOException e) {
|
||||
statusHandler.error(
|
||||
"IOException reading " + dbShape.getTableName(), e);
|
||||
} catch (MissingLocalMapsException e) {
|
||||
statusHandler.error("Could not locate " + dbShape.getTableName()
|
||||
+ " in the maps database.", e);
|
||||
} finally {
|
||||
try {
|
||||
if (dbShape != null) {
|
||||
|
@ -431,18 +442,17 @@ public class DbShapeSource {
|
|||
System.out.println("Took " + (System.currentTimeMillis() - t0) + " ms");
|
||||
}
|
||||
|
||||
public Date getLastUpdated() {
|
||||
Date retVal = new Date();
|
||||
public Date getLastUpdated() throws MissingLocalMapsException {
|
||||
String sqlQuery = "SELECT import_time FROM " + SCHEMA_NAME
|
||||
+ ".map_version WHERE table_name = '" + this.tableName + "';";
|
||||
try {
|
||||
SqlQueryTask task = new SqlQueryTask(sqlQuery, DB_NAME);
|
||||
QueryResult result = task.execute();
|
||||
retVal = (Date) result.getRowColumnValue(0, 0);
|
||||
return (Date) result.getRowColumnValue(0, 0);
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||
// statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
// e);
|
||||
throw new MissingLocalMapsException(e);
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ import org.opengis.metadata.spatial.PixelOrientation;
|
|||
import org.opengis.referencing.operation.MathTransform;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.edex.plugin.gfe.exception.MissingLocalMapsException;
|
||||
import com.raytheon.edex.plugin.gfe.reference.DbShapeSource.ShapeType;
|
||||
import com.raytheon.edex.plugin.gfe.textproducts.AreaDictionaryMaker;
|
||||
import com.raytheon.edex.plugin.gfe.textproducts.CombinationsFileMaker;
|
||||
|
@ -74,6 +75,7 @@ import com.raytheon.uf.common.status.UFStatus;
|
|||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.FileUtil;
|
||||
import com.raytheon.uf.common.util.file.FilenameFilters;
|
||||
import com.raytheon.uf.edex.core.EDEXUtil;
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
import com.vividsolutions.jts.geom.Geometry;
|
||||
import com.vividsolutions.jts.geom.GeometryFactory;
|
||||
|
@ -98,6 +100,9 @@ import com.vividsolutions.jts.simplify.TopologyPreservingSimplifier;
|
|||
* Oct 13, 2008 #1607 njensen Added genCombinationsFiles()
|
||||
* Sep 18, 2012 #1091 randerso Changed to use Maps.py and localMaps.py
|
||||
* Mar 14, 2013 1794 djohnson Consolidate common FilenameFilter implementations.
|
||||
* Mar 28, 2013 #1837 dgilling Better error reporting if a map table
|
||||
* from localMaps.py could not be found,
|
||||
* warnings clean up.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -245,28 +250,21 @@ public class MapManager {
|
|||
/**
|
||||
* @param maps
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
/**
|
||||
* Searches the parent directory of a provided list of shape files to
|
||||
* determine whether or not they contain a file that is newer than any files
|
||||
* in a specified directory.
|
||||
*
|
||||
* @param maps
|
||||
* An array of shape files.
|
||||
* @param directory
|
||||
* A directory containing the resultant edit areas from the shape
|
||||
* files.
|
||||
* @return True, if any file in the parent folder of any of the shape files
|
||||
* is newer than anything in the specified directory. Else, false.
|
||||
*/
|
||||
private boolean updateNeeded(List<DbShapeSource> maps,
|
||||
final String directory) {
|
||||
// calc newest file inside maps.directory()
|
||||
long newestSource = Long.MIN_VALUE;
|
||||
List<DbShapeSource> failedMaps = new ArrayList<DbShapeSource>();
|
||||
for (DbShapeSource map : maps) {
|
||||
newestSource = Math.max(newestSource, map.getLastUpdated()
|
||||
.getTime());
|
||||
try {
|
||||
newestSource = Math.max(newestSource, map.getLastUpdated()
|
||||
.getTime());
|
||||
} catch (MissingLocalMapsException e) {
|
||||
reportMissingLocalMap(map, "retrieving last update time", e);
|
||||
failedMaps.add(map);
|
||||
}
|
||||
}
|
||||
maps.removeAll(failedMaps);
|
||||
|
||||
// Determine time of last modification of Maps.py, serverConfig,
|
||||
// localConfig, localMaps, and siteConfig.
|
||||
|
@ -385,6 +383,10 @@ public class MapManager {
|
|||
}
|
||||
|
||||
makeReferenceData(m);
|
||||
} catch (MissingLocalMapsException e) {
|
||||
String error = reportMissingLocalMap(m, "retrieving map data",
|
||||
e);
|
||||
_mapErrors.add(error);
|
||||
} catch (Exception e) {
|
||||
String error = "********* EDIT AREA GENERATION ERROR - MakeReferenceData *********\n"
|
||||
+ "Error in generating edit areas, map #"
|
||||
|
@ -575,8 +577,8 @@ public class MapManager {
|
|||
// old one, write a warning to the log.
|
||||
ReferenceData other = null;
|
||||
try {
|
||||
other = (ReferenceData) SerializationUtil
|
||||
.jaxbUnmarshalFromXmlFile(path);
|
||||
other = SerializationUtil.jaxbUnmarshalFromXmlFile(
|
||||
ReferenceData.class, path);
|
||||
} catch (Exception e) {
|
||||
statusHandler.error("Error reading edit area file "
|
||||
+ path.getAbsolutePath(), e);
|
||||
|
@ -962,4 +964,23 @@ public class MapManager {
|
|||
|
||||
return s;
|
||||
}
|
||||
|
||||
private String reportMissingLocalMap(DbShapeSource missingMap,
|
||||
String operation, MissingLocalMapsException e) {
|
||||
String errorLog = "Error in " + operation + " for map named ["
|
||||
+ missingMap.getDisplayName() + "]: Could not find table ["
|
||||
+ missingMap.getTableName() + "] in maps database.";
|
||||
statusHandler.error(errorLog, e);
|
||||
|
||||
String errorUser = errorLog
|
||||
+ " Edit areas for this map will not be generated."
|
||||
+ " Check site ["
|
||||
+ _config.getSiteID().get(0)
|
||||
+ "] localMaps.py configuration and verify all necessary shape files have been imported.";
|
||||
EDEXUtil.sendMessageAlertViz(Priority.ERROR,
|
||||
"com.raytheon.edex.plugin.gfe", "GFE", "GFE", errorUser,
|
||||
errorUser, null);
|
||||
|
||||
return errorLog;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,6 +91,8 @@ import com.raytheon.uf.edex.database.purge.PurgeLogger;
|
|||
* smartInit hdf5 data
|
||||
* 03/07/13 #1773 njensen Logged commitGrid() times
|
||||
* 03/15/13 #1795 njensen Sped up commitGrid()
|
||||
* 03/20/2013 #1774 randerso Removed dead method, changed to use new
|
||||
* D2DGridDatabase constructor
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -356,48 +358,6 @@ public class GridParmManager {
|
|||
return sr;
|
||||
}
|
||||
|
||||
public static ServerResponse<String> getD2DGridData(
|
||||
List<GetGridRequest> requests) {
|
||||
|
||||
ServerResponse<String> retVal = new ServerResponse<String>();
|
||||
|
||||
// Get the grid data
|
||||
ServerResponse<List<IGridSlice>> sr = getGridData(requests);
|
||||
retVal.addMessages(sr);
|
||||
if (!sr.isOkay()) {
|
||||
return retVal;
|
||||
}
|
||||
|
||||
// // Now store it off in a temp location so the client can get to it
|
||||
// for (IGridSlice slice : sr.getPayload()) {
|
||||
// try {
|
||||
// GridDatabase db = getDb(requests.get(0).getParmId().getDbId());
|
||||
// if (db instanceof D2DGridDatabase) {
|
||||
// File tempDir = GfeUtil.getTempHDF5Dir(
|
||||
// GridDatabase.gfeBaseDataDir, requests.get(0)
|
||||
// .getParmId());
|
||||
// if (!tempDir.exists()) {
|
||||
// tempDir.mkdirs();
|
||||
// }
|
||||
// db.saveGridToHdf5(slice, GfeUtil.getTempHDF5File(
|
||||
// GridDatabase.gfeBaseDataDir, requests.get(0)
|
||||
// .getParmId()), GfeUtil.getHDF5Group(
|
||||
// requests.get(0).getParmId(), slice.getValidTime()));
|
||||
// } else {
|
||||
// retVal
|
||||
// .addMessage("Cannot save temp grids for non-D2D grid databases.");
|
||||
// return retVal;
|
||||
// }
|
||||
// } catch (GfeException e) {
|
||||
// sr.addMessage("Unable to get DB: "
|
||||
// + requests.get(0).getParmId().getDbId());
|
||||
// return retVal;
|
||||
// }
|
||||
// }
|
||||
return retVal;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* * Request to commit data to the official database. The changes are
|
||||
* returned through the calling argument "changes".
|
||||
|
@ -1197,7 +1157,12 @@ public class GridParmManager {
|
|||
IFPServerConfig serverConfig = IFPServerConfigManager
|
||||
.getServerConfig(siteId);
|
||||
try {
|
||||
db = new D2DGridDatabase(serverConfig, dbId);
|
||||
// this is still necessary on other JVMs from where
|
||||
// ingested
|
||||
String d2dModelName = serverConfig
|
||||
.d2dModelNameMapping(modelName);
|
||||
db = new D2DGridDatabase(serverConfig, d2dModelName,
|
||||
dbId.getModelTimeAsDate());
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage());
|
||||
|
@ -1363,10 +1328,9 @@ public class GridParmManager {
|
|||
private static void createDbNotification(String siteID,
|
||||
List<DatabaseID> dbs, List<DatabaseID> additions,
|
||||
List<DatabaseID> deletions) {
|
||||
DBInvChangeNotification notify = new DBInvChangeNotification(dbs,
|
||||
additions, deletions, siteID);
|
||||
|
||||
if (!additions.isEmpty() || !deletions.isEmpty()) {
|
||||
DBInvChangeNotification notify = new DBInvChangeNotification(dbs,
|
||||
additions, deletions, siteID);
|
||||
SendNotifications.send(notify);
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -94,7 +94,6 @@ import com.raytheon.uf.edex.core.dataplugin.PluginRegistry;
|
|||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
||||
import com.raytheon.uf.edex.database.plugin.PluginFactory;
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
import com.vividsolutions.jts.io.WKTReader;
|
||||
|
||||
/**
|
||||
* GFE Grid database containing IFP Grid data.
|
||||
|
@ -115,6 +114,7 @@ import com.vividsolutions.jts.io.WKTReader;
|
|||
* 02/12/13 #1608 randerso Changed to explicitly call deleteGroups
|
||||
* 03/07/13 #1737 njensen Logged getGridData times
|
||||
* 03/15/13 #1795 njensen Added updatePublishTime()
|
||||
* 03/20/13 #1774 randerso Cleanup code to use proper constructors
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -1191,6 +1191,7 @@ public class IFPGridDatabase extends GridDatabase {
|
|||
"Unable to update grid history!!", e);
|
||||
}
|
||||
return sr;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1591,77 +1592,79 @@ public class IFPGridDatabase extends GridDatabase {
|
|||
protected GridParmInfo populateGpi(Map<String, Object> dataAttributes)
|
||||
throws Exception {
|
||||
|
||||
GridParmInfo gpi = new GridParmInfo();
|
||||
TimeConstraints tc = new TimeConstraints();
|
||||
GridLocation location = new GridLocation();
|
||||
ProjectionData pd = new ProjectionData();
|
||||
|
||||
pd.setProjectionID((String) dataAttributes
|
||||
.get("gridLoc.projection.projectionID"));
|
||||
pd.setProjectionType(ProjectionType.valueOf((String) dataAttributes
|
||||
.get("gridLoc.projection.projectionType")));
|
||||
pd.setLatLonLL(new Coordinate((Float) dataAttributes
|
||||
.get("gridLoc.projection.latLonLL.x"), (Float) dataAttributes
|
||||
.get("gridLoc.projection.latLonLL.y")));
|
||||
pd.setLatLonUR(new Coordinate((Float) dataAttributes
|
||||
.get("gridLoc.projection.latLonUR.x"), (Float) dataAttributes
|
||||
.get("gridLoc.projection.latLonUR.y")));
|
||||
pd.setLatLonOrigin(new Coordinate((Float) dataAttributes
|
||||
.get("gridLoc.projection.latLonOrigin.x"),
|
||||
(Float) dataAttributes.get("gridLoc.projection.latLonOrigin.y")));
|
||||
pd.setStdParallelOne((Float) dataAttributes
|
||||
.get("gridLoc.projection.stdParallelOne"));
|
||||
pd.setStdParallelTwo((Float) dataAttributes
|
||||
.get("gridLoc.projection.stdParallelTwo"));
|
||||
pd.setGridPointLL(new Point((Integer) dataAttributes
|
||||
.get("gridLoc.projection.gridPointLL.x"),
|
||||
String projID = (String) dataAttributes
|
||||
.get("gridLoc.projection.projectionID");
|
||||
ProjectionType projType = ProjectionType
|
||||
.valueOf((String) dataAttributes
|
||||
.get("gridLoc.projection.projectionType"));
|
||||
Coordinate latLonLL = new Coordinate(
|
||||
(Float) dataAttributes.get("gridLoc.projection.latLonLL.x"),
|
||||
(Float) dataAttributes.get("gridLoc.projection.latLonLL.y"));
|
||||
Coordinate latLonUR = new Coordinate(
|
||||
(Float) dataAttributes.get("gridLoc.projection.latLonUR.x"),
|
||||
(Float) dataAttributes.get("gridLoc.projection.latLonUR.y"));
|
||||
Coordinate latLonOrig = new Coordinate(
|
||||
(Float) dataAttributes.get("gridLoc.projection.latLonOrigin.x"),
|
||||
(Float) dataAttributes.get("gridLoc.projection.latLonOrigin.y"));
|
||||
Float stdPar1 = (Float) dataAttributes
|
||||
.get("gridLoc.projection.stdParallelOne");
|
||||
Float stdPar2 = (Float) dataAttributes
|
||||
.get("gridLoc.projection.stdParallelTwo");
|
||||
Point gridLL = new Point(
|
||||
(Integer) dataAttributes
|
||||
.get("gridLoc.projection.gridPointLL.y")));
|
||||
pd.setGridPointUR(new Point((Integer) dataAttributes
|
||||
.get("gridLoc.projection.gridPointUR.x"),
|
||||
.get("gridLoc.projection.gridPointLL.x"),
|
||||
(Integer) dataAttributes
|
||||
.get("gridLoc.projection.gridPointUR.y")));
|
||||
pd.setLatIntersect((Float) dataAttributes
|
||||
.get("gridLoc.projection.latIntersect"));
|
||||
pd.setLonCenter((Float) dataAttributes
|
||||
.get("gridLoc.projection.lonCenter"));
|
||||
pd.setLonOrigin((Float) dataAttributes
|
||||
.get("gridLoc.projection.lonOrigin"));
|
||||
.get("gridLoc.projection.gridPointLL.y"));
|
||||
Point gridUR = new Point(
|
||||
(Integer) dataAttributes
|
||||
.get("gridLoc.projection.gridPointUR.x"),
|
||||
(Integer) dataAttributes
|
||||
.get("gridLoc.projection.gridPointUR.y"));
|
||||
Float latInt = (Float) dataAttributes
|
||||
.get("gridLoc.projection.latIntersect");
|
||||
Float lonCenter = (Float) dataAttributes
|
||||
.get("gridLoc.projection.lonCenter");
|
||||
Float lonOrig = (Float) dataAttributes
|
||||
.get("gridLoc.projection.lonOrigin");
|
||||
ProjectionData proj = new ProjectionData(projID, projType, latLonLL,
|
||||
latLonUR, latLonOrig, stdPar1, stdPar2, gridLL, gridUR, latInt,
|
||||
lonCenter, lonOrig);
|
||||
|
||||
location.setSiteId((String) dataAttributes.get("gridLoc.siteID"));
|
||||
location.setNx((Integer) dataAttributes.get("gridLoc.nx"));
|
||||
location.setNy((Integer) dataAttributes.get("gridLoc.ny"));
|
||||
location.setTimeZone((String) dataAttributes.get("gridLoc.timeZone"));
|
||||
location.setOrigin(new Coordinate((Float) dataAttributes
|
||||
.get("gridLoc.origin.x"), (Float) dataAttributes
|
||||
.get("gridLoc.origin.y")));
|
||||
location.setExtent(new Coordinate((Float) dataAttributes
|
||||
.get("gridLoc.extent.x"), (Float) dataAttributes
|
||||
.get("gridLoc.extent.y")));
|
||||
location.setGeometry(new WKTReader().read((String) dataAttributes
|
||||
.get("gridLoc.geometry")));
|
||||
location.setCrsWKT((String) dataAttributes.get("gridLoc.crs"));
|
||||
location.setProjection(pd);
|
||||
String id = (String) dataAttributes.get("gridLoc.siteID");
|
||||
int nx = (Integer) dataAttributes.get("gridLoc.nx");
|
||||
int ny = (Integer) dataAttributes.get("gridLoc.ny");
|
||||
Coordinate domainOrigin = new Coordinate(
|
||||
(Float) dataAttributes.get("gridLoc.origin.x"),
|
||||
(Float) dataAttributes.get("gridLoc.origin.y"));
|
||||
Coordinate domainExtent = new Coordinate(
|
||||
(Float) dataAttributes.get("gridLoc.extent.x"),
|
||||
(Float) dataAttributes.get("gridLoc.extent.y"));
|
||||
String timeZone = (String) dataAttributes.get("gridLoc.timeZone");
|
||||
GridLocation gridLoc = new GridLocation(id, proj, new Point(nx, ny),
|
||||
domainOrigin, domainExtent, timeZone);
|
||||
|
||||
tc.setDuration((Integer) dataAttributes.get("timeConstraints.duration"));
|
||||
tc.setRepeatInterval((Integer) dataAttributes
|
||||
.get("timeConstraints.repeatInterval"));
|
||||
tc.setStartTime((Integer) dataAttributes
|
||||
.get("timeConstraints.startTime"));
|
||||
int duration = (Integer) dataAttributes.get("timeConstraints.duration");
|
||||
int repeatInterval = (Integer) dataAttributes
|
||||
.get("timeConstraints.repeatInterval");
|
||||
int startTime = (Integer) dataAttributes
|
||||
.get("timeConstraints.startTime");
|
||||
TimeConstraints timeConstraints = new TimeConstraints(duration,
|
||||
repeatInterval, startTime);
|
||||
|
||||
gpi.setParmID(new ParmID((String) dataAttributes.get("parmID")));
|
||||
gpi.setGridType(GridType.valueOf((String) dataAttributes
|
||||
.get("gridType")));
|
||||
gpi.setDescriptiveName((String) dataAttributes.get("descriptiveName"));
|
||||
gpi.setUnitString((String) dataAttributes.get("unitString"));
|
||||
gpi.setMaxValue((Float) dataAttributes.get("maxValue"));
|
||||
gpi.setMinValue((Float) dataAttributes.get("minValue"));
|
||||
gpi.setPrecision((Integer) dataAttributes.get("precision"));
|
||||
gpi.setRateParm((Boolean) dataAttributes.get("rateParm"));
|
||||
gpi.setTimeIndependentParm((Boolean) dataAttributes
|
||||
.get("timeIndependentParm"));
|
||||
gpi.setTimeConstraints(tc);
|
||||
gpi.setGridLoc(location);
|
||||
ParmID parmId = new ParmID((String) dataAttributes.get("parmID"));
|
||||
GridType gridType = GridType.valueOf((String) dataAttributes
|
||||
.get("gridType"));
|
||||
String descriptiveName = (String) dataAttributes.get("descriptiveName");
|
||||
String unit = (String) dataAttributes.get("unitString");
|
||||
Float minValue = (Float) dataAttributes.get("minValue");
|
||||
Float maxValue = (Float) dataAttributes.get("maxValue");
|
||||
int precision = (Integer) dataAttributes.get("precision");
|
||||
boolean timeIndependentParm = (Boolean) dataAttributes
|
||||
.get("timeIndependentParm");
|
||||
boolean rateParm = (Boolean) dataAttributes.get("rateParm");
|
||||
GridParmInfo gpi = new GridParmInfo(parmId, gridLoc, gridType, unit,
|
||||
descriptiveName, minValue, maxValue, precision,
|
||||
timeIndependentParm, timeConstraints, rateParm);
|
||||
|
||||
return gpi;
|
||||
}
|
||||
|
|
|
@ -35,35 +35,33 @@ import com.raytheon.edex.plugin.gfe.config.IFPServerConfigManager;
|
|||
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.server.D2DSatParm;
|
||||
import com.raytheon.edex.plugin.gfe.server.GridParmManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.D2DGridDatabase;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabase;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabaseManager;
|
||||
import com.raytheon.edex.plugin.gfe.smartinit.SmartInitQueue;
|
||||
import com.raytheon.edex.plugin.gfe.smartinit.SmartInitRecord;
|
||||
import com.raytheon.edex.plugin.gfe.smartinit.SmartInitRecordPK;
|
||||
import com.raytheon.edex.plugin.gfe.util.GridTranslator;
|
||||
import com.raytheon.edex.plugin.gfe.util.SendNotifications;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID.DataType;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.server.notify.DBInvChangeNotification;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.server.notify.GfeNotification;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.server.notify.GridUpdateNotification;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridRecord;
|
||||
import com.raytheon.uf.common.dataplugin.message.DataURINotificationMessage;
|
||||
import com.raytheon.uf.common.dataplugin.level.Level;
|
||||
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
|
||||
import com.raytheon.uf.common.message.WsId;
|
||||
import com.raytheon.uf.common.parameter.mapping.ParameterMapper;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
import com.raytheon.uf.common.util.mapping.MultipleMappingException;
|
||||
import com.raytheon.uf.edex.core.EDEXUtil;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
* Filters data URI notifications and sends GridUpdate and DbInvChanged
|
||||
* notifications for new D2D data
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
|
@ -78,6 +76,7 @@ import com.raytheon.uf.edex.core.EDEXUtil;
|
|||
* Feb 15, 2013 1638 mschenke Moved DataURINotificationMessage to uf.common.dataplugin
|
||||
* Mar 25, 2013 1823 dgilling Trigger SAT smart init based only on record's
|
||||
* SectorId and PhysicalElement.
|
||||
* Mar 20, 2013 #1774 randerso Refactor to use grid durations from D2DGridDatabase
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -125,7 +124,6 @@ public class GfeIngestNotificationFilter {
|
|||
Map<SmartInitRecordPK, SmartInitRecord> inits = new HashMap<SmartInitRecordPK, SmartInitRecord>();
|
||||
// Loop through each record received and construct a ParmID
|
||||
Map<ParmID, List<TimeRange>> gridInv = new HashMap<ParmID, List<TimeRange>>();
|
||||
List<GridUpdateNotification> guns = new ArrayList<GridUpdateNotification>();
|
||||
Set<DatabaseID> newDbs = new HashSet<DatabaseID>();
|
||||
|
||||
IFPServerConfig config = null;
|
||||
|
@ -139,12 +137,11 @@ public class GfeIngestNotificationFilter {
|
|||
for (GridRecord grid : gridRecords) {
|
||||
String gfeModel = config.gfeModelNameMapping(grid
|
||||
.getDatasetId());
|
||||
DatabaseID dbId = D2DGridDatabase.getDbId(grid.getDatasetId(),
|
||||
grid.getDataTime().getRefTime(), config);
|
||||
|
||||
// ignore if no mapping
|
||||
if (gfeModel != null && gfeModel.length() > 0) {
|
||||
DatabaseID dbId = new DatabaseID(site, DataType.GRID,
|
||||
"D2D", gfeModel, grid.getDataTime().getRefTime());
|
||||
|
||||
if (dbId != null) {
|
||||
if ((!D2DParmIdCache.getInstance().getDatabaseIDs()
|
||||
.contains(dbId))
|
||||
&& (!newDbs.contains(dbId))) {
|
||||
|
@ -159,33 +156,22 @@ public class GfeIngestNotificationFilter {
|
|||
}
|
||||
|
||||
String abbrev = grid.getParameter().getAbbreviation();
|
||||
String gfeParmName = null;
|
||||
try {
|
||||
gfeParmName = ParameterMapper.getInstance()
|
||||
.lookupAlias(abbrev, "gfeParamName");
|
||||
} catch (MultipleMappingException e) {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
e.getLocalizedMessage(), e);
|
||||
gfeParmName = e.getArbitraryMapping();
|
||||
}
|
||||
Level level = grid.getLevel();
|
||||
|
||||
String level = GridTranslator.getShortLevelName(grid
|
||||
.getLevel().getMasterLevel().getName(), grid
|
||||
.getLevel().getLevelonevalue(), grid.getLevel()
|
||||
.getLeveltwovalue());
|
||||
ParmID parmID = new ParmID(gfeParmName, dbId, level);
|
||||
D2DGridDatabase db = (D2DGridDatabase) GridParmManager
|
||||
.getDb(dbId);
|
||||
ParmID parmID = db.getParmId(abbrev, level);
|
||||
|
||||
List<TimeRange> trs = gridInv.get(parmID);
|
||||
if (trs == null) {
|
||||
trs = new ArrayList<TimeRange>();
|
||||
gridInv.put(parmID, trs);
|
||||
}
|
||||
TimeRange validPeriod = grid.getDataTime().getValidPeriod();
|
||||
if (validPeriod.getDuration() > 0) {
|
||||
trs.add(validPeriod);
|
||||
} else {
|
||||
trs.add(new TimeRange(grid.getDataTime()
|
||||
.getValidPeriod().getStart(), 3600 * 1000));
|
||||
|
||||
Integer fcstHour = grid.getDataTime().getFcstTime();
|
||||
TimeRange tr = db.getTimeRange(parmID, fcstHour);
|
||||
if (tr != null) {
|
||||
trs.add(tr);
|
||||
}
|
||||
|
||||
List<String> siteInitModules = config.initModels(gfeModel);
|
||||
|
@ -216,6 +202,7 @@ public class GfeIngestNotificationFilter {
|
|||
}
|
||||
|
||||
// DR 15442 - move last for loop out of the for loop at line 110
|
||||
List<GridUpdateNotification> guns = new ArrayList<GridUpdateNotification>();
|
||||
for (ParmID parmId : gridInv.keySet()) {
|
||||
try {
|
||||
List<TimeRange> trs = gridInv.get(parmId);
|
||||
|
|
|
@ -1,152 +1,437 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
Mar 20, 2013 #1774 randerso Added all parms from dataFieldTable.txt
|
||||
sorted lists for ease of update
|
||||
-->
|
||||
<aliasList caseSensitive="true" namespace="gfeParamName">
|
||||
<alias base="WGH">wgh</alias>
|
||||
<alias base="AV">av</alias>
|
||||
<alias base="CRAIN">crain</alias>
|
||||
<alias base="CFRZR">cfrzr</alias>
|
||||
<alias base="CICEP">cicep</alias>
|
||||
<alias base="CSNOW">csnow</alias>
|
||||
<alias base="CAPE">cape</alias>
|
||||
<alias base="CIn">cin</alias>
|
||||
<alias base="CP">cp</alias>
|
||||
<alias base="CP3hr">cp3hr</alias>
|
||||
<alias base="DpD">dpd</alias>
|
||||
<alias base="DpT">dpt</alias>
|
||||
<alias base="WVDIR">wvdir</alias>
|
||||
<alias base="SWDIR">swdir</alias>
|
||||
<alias base="EPT">ept</alias>
|
||||
<alias base="GeH">geh</alias>
|
||||
<alias base="GH">gh</alias>
|
||||
<alias base="HIdx">hidx</alias>
|
||||
<alias base="LgSP">lgsp</alias>
|
||||
<alias base="LgSP3hr">lgsp3hr</alias>
|
||||
<alias base="LHF">lhf</alias>
|
||||
<alias base="MnT">mnt</alias>
|
||||
<alias base="WVPER">wvper</alias>
|
||||
<alias base="SWPER">swper</alias>
|
||||
<alias base="MxT">mxt</alias>
|
||||
<alias base="PLI">pli</alias>
|
||||
<alias base="PoT">pot</alias>
|
||||
<alias base="P">p</alias>
|
||||
<alias base="PMSL">pmsl</alias>
|
||||
<alias base="EMSP">emsp</alias>
|
||||
<alias base="MMSP">mmsp</alias>
|
||||
<alias base="DIRPW">dirpw</alias>
|
||||
<alias base="PERPW">perpw</alias>
|
||||
<alias base="HTSGW">htsgw</alias>
|
||||
<alias base="PR">pr</alias>
|
||||
<alias base="CPOFP">cpofp</alias>
|
||||
<alias base="CPOZP">cpozp</alias>
|
||||
<alias base="PW">pw</alias>
|
||||
<alias base="RH">rh</alias>
|
||||
<alias base="SHF">shf</alias>
|
||||
<alias base="DIRSW">dirsw</alias>
|
||||
<alias base="PERSW">persw</alias>
|
||||
<alias base="WVHGT">wvhgt</alias>
|
||||
<alias base="SWELL">swell</alias>
|
||||
<alias base="SCP">scp</alias>
|
||||
<alias base="SnD">snd</alias>
|
||||
<alias base="SH">sh</alias>
|
||||
<alias base="Heli">heli</alias>
|
||||
<alias base="SLI">sli</alias>
|
||||
<alias base="BLI">bli</alias>
|
||||
<alias base="T">t</alias>
|
||||
<alias base="TCC">tcc</alias>
|
||||
<alias base="ThP">thp</alias>
|
||||
<alias base="TP">tp</alias>
|
||||
<alias base="TP3hr">tp3hr</alias>
|
||||
<alias base="TP6hr">tp6hr</alias>
|
||||
<alias base="TP12hr">tp12hr</alias>
|
||||
<alias base="TP24hr">tp24hr</alias>
|
||||
<alias base="TP48hr">tp48hr</alias>
|
||||
<alias base="USTM">ustm</alias>
|
||||
<alias base="VSTM">vstm</alias>
|
||||
<alias base="uW">uw</alias>
|
||||
<alias base="vW">vw</alias>
|
||||
<alias base="VAPP">vapp</alias>
|
||||
<alias base="PVV">pvv</alias>
|
||||
<alias base="Vis">vis</alias>
|
||||
<alias base="VPT">vpt</alias>
|
||||
<alias base="WEASD">weasd</alias>
|
||||
<alias base="WD">wd</alias>
|
||||
<alias base="WS">ws</alias>
|
||||
<alias base="WGS">wgs</alias>
|
||||
<alias base="MSG">msg</alias>
|
||||
<alias base="SVV">svv</alias>
|
||||
<alias base="GVV">gvv</alias>
|
||||
<alias base="KI">ki</alias>
|
||||
<alias base="TKE">tke</alias>
|
||||
<!-- Parameters below this point are not defined in parameter definition
|
||||
files. Since these are not very well defined parameters they will only be
|
||||
used if the grib decoder happens to give parameters the same base abbreviation.
|
||||
In the future more work should be done to merge these names into definition
|
||||
files. -->
|
||||
<alias base="CCP">ccpc</alias>
|
||||
<alias base="Pchg">pt3</alias>
|
||||
<alias base="VV">ww</alias>
|
||||
<alias base="TP-HPC">tp_HPC</alias>
|
||||
<alias base="TP-ACR">tp_ACR</alias>
|
||||
<alias base="TP-ALR">tp_ALR</alias>
|
||||
<alias base="TP-FWR">tp_FWR</alias>
|
||||
<alias base="TP-KRF">tp_KRF</alias>
|
||||
<alias base="TP-MSR">tp_MSR</alias>
|
||||
<alias base="TP-ORN">tp_ORN</alias>
|
||||
<alias base="TP-PTR">tp_PTR</alias>
|
||||
<alias base="TP-RHA">tp_RHA</alias>
|
||||
<alias base="TP-RSA">tp_RSA</alias>
|
||||
<alias base="TP-STR">tp_STR</alias>
|
||||
<alias base="TP-TAR">tp_TAR</alias>
|
||||
<alias base="TP-TIR">tp_TIR</alias>
|
||||
<alias base="TP-TUA">tp_TUA</alias>
|
||||
<alias base="TP3mean">tpmean3</alias>
|
||||
<alias base="TP6mean">tpmean6</alias>
|
||||
<alias base="TP12mean">tpmean12</alias>
|
||||
<alias base="TP24mean">tpmean24</alias>
|
||||
<alias base="SNOL12mean">snolmean12</alias>
|
||||
<alias base="TP3sprd">tpsprd3</alias>
|
||||
<alias base="TP6sprd">tpsprd6</alias>
|
||||
<alias base="TP12sprd">tpsprd12</alias>
|
||||
<alias base="TP24sprd">tpsprd24</alias>
|
||||
<alias base="SNOL12sprd">snolsprd12</alias>
|
||||
<alias base="QPE01">qpe1</alias>
|
||||
<alias base="QPE06">qpe6</alias>
|
||||
<alias base="TPCSG">Surge10Pct</alias>
|
||||
<alias base="TPCSG-305E2">PSurge10Ft</alias>
|
||||
<alias base="TPCSG-274E2">PSurge9Ft</alias>
|
||||
<alias base="TPCSG-244E2">PSurge8Ft</alias>
|
||||
<alias base="TPCSG-213E2">PSurge7Ft</alias>
|
||||
<alias base="TPCSG-183E2">PSurge6Ft</alias>
|
||||
<alias base="TPCSG-152E2">PSurge5Ft</alias>
|
||||
<alias base="TPCSG-122E2">PSurge4Ft</alias>
|
||||
<alias base="TPCSG-91E2">PSurge3Ft</alias>
|
||||
<alias base="TPCSG-61E2">PSurge2Ft</alias>
|
||||
<alias base="SIPD">sld</alias>
|
||||
<alias base="MAXRH3hr">maxRH3hr</alias>
|
||||
<alias base="MAXRH12hr">maxRH12hr</alias>
|
||||
<alias base="MINRH3hr">minRH3hr</alias>
|
||||
<alias base="MINRH12hr">minRH12hr</alias>
|
||||
<alias base="TPCSG-SLOSH">SloshSurge</alias>
|
||||
<alias base="TPCSG-20">Surge20Pct</alias>
|
||||
<alias base="TPCSG-30">Surge30Pct</alias>
|
||||
<alias base="TPCSG-40">Surge40Pct</alias>
|
||||
<alias base="TPCSG-50">Surge50Pct</alias>
|
||||
<alias base="TPCSG-60">Surge60Pct</alias>
|
||||
<alias base="TPCSG-70">Surge70Pct</alias>
|
||||
<alias base="TPCSG-80">Surge80Pct</alias>
|
||||
<alias base="TPCSG-90">Surge90Pct</alias>
|
||||
<alias base="TPCSG-335E2">PSurge11Ft</alias>
|
||||
<alias base="TPCSG-366E2">PSurge12Ft</alias>
|
||||
<alias base="TPCSG-396E2">PSurge13Ft</alias>
|
||||
<alias base="TPCSG-427E2">PSurge14Ft</alias>
|
||||
<alias base="TPCSG-457E2">PSurge15Ft</alias>
|
||||
<alias base="TPCSG-488E2">PSurge16Ft</alias>
|
||||
<alias base="TPCSG-518E2">PSurge17Ft</alias>
|
||||
<alias base="TPCSG-549E2">PSurge18Ft</alias>
|
||||
<alias base="TPCSG-579E2">PSurge19Ft</alias>
|
||||
<alias base="TPCSG-610E2">PSurge20Ft</alias>
|
||||
<alias base="TPCSG-640E2">PSurge21Ft</alias>
|
||||
<alias base="TPCSG-671E2">PSurge22Ft</alias>
|
||||
<alias base="TPCSG-701E2">PSurge23Ft</alias>
|
||||
<alias base="TPCSG-732E2">PSurge24Ft</alias>
|
||||
<alias base="TPCSG-762E2">PSurge25Ft</alias>
|
||||
<alias base="AV">av</alias>
|
||||
<alias base="CAPE">cape</alias>
|
||||
<alias base="CFRZR">cfrzr</alias>
|
||||
<alias base="CICEP">cicep</alias>
|
||||
<alias base="CIn">cin</alias>
|
||||
<alias base="CP3hr">cp3hr</alias>
|
||||
<alias base="CP">cp</alias>
|
||||
<alias base="CPOFP">cpofp</alias>
|
||||
<alias base="CPOZP">cpozp</alias>
|
||||
<alias base="CRAIN">crain</alias>
|
||||
<alias base="CSNOW">csnow</alias>
|
||||
<alias base="DIRPW">dirpw</alias>
|
||||
<alias base="DIRSW">dirsw</alias>
|
||||
<alias base="DpD">dpd</alias>
|
||||
<alias base="DpT">dpt</alias>
|
||||
<alias base="EMSP">emsp</alias>
|
||||
<alias base="EPT">ept</alias>
|
||||
<alias base="GeH">geh</alias>
|
||||
<alias base="GH">gh</alias>
|
||||
<alias base="GVV">gvv</alias>
|
||||
<alias base="Heli">heli</alias>
|
||||
<alias base="HIdx">hidx</alias>
|
||||
<alias base="HTSGW">htsgw</alias>
|
||||
<alias base="KI">ki</alias>
|
||||
<alias base="LgSP3hr">lgsp3hr</alias>
|
||||
<alias base="LgSP">lgsp</alias>
|
||||
<alias base="LHF">lhf</alias>
|
||||
<alias base="MMSP">mmsp</alias>
|
||||
<alias base="MnT">mnt</alias>
|
||||
<alias base="MSG">msg</alias>
|
||||
<alias base="MxT">mxt</alias>
|
||||
<alias base="PERPW">perpw</alias>
|
||||
<alias base="PERSW">persw</alias>
|
||||
<alias base="PLI">pli</alias>
|
||||
<alias base="PMSL">pmsl</alias>
|
||||
<alias base="PoT">pot</alias>
|
||||
<alias base="P">p</alias>
|
||||
<alias base="PR">pr</alias>
|
||||
<alias base="PVV">pvv</alias>
|
||||
<alias base="PW">pw</alias>
|
||||
<alias base="RH">rh</alias>
|
||||
<alias base="SCP">scp</alias>
|
||||
<alias base="SHF">shf</alias>
|
||||
<alias base="SH">sh</alias>
|
||||
<alias base="SLI">sli</alias>
|
||||
<alias base="SnD">snd</alias>
|
||||
<alias base="SVV">svv</alias>
|
||||
<alias base="SWDIR">swdir</alias>
|
||||
<alias base="SWELL">swell</alias>
|
||||
<alias base="SWPER">swper</alias>
|
||||
<alias base="TCC">tcc</alias>
|
||||
<alias base="ThP">thp</alias>
|
||||
<alias base="TKE">tke</alias>
|
||||
<alias base="TP12hr">tp12hr</alias>
|
||||
<alias base="TP24hr">tp24hr</alias>
|
||||
<alias base="TP3hr">tp3hr</alias>
|
||||
<alias base="TP48hr">tp48hr</alias>
|
||||
<alias base="TP6hr">tp6hr</alias>
|
||||
<alias base="TP">tp</alias>
|
||||
<alias base="T">t</alias>
|
||||
<alias base="USTM">ustm</alias>
|
||||
<alias base="uW">uw</alias>
|
||||
<alias base="VAPP">vapp</alias>
|
||||
<alias base="Vis">vis</alias>
|
||||
<alias base="VPT">vpt</alias>
|
||||
<alias base="VSTM">vstm</alias>
|
||||
<alias base="vW">vw</alias>
|
||||
<alias base="WD">wd</alias>
|
||||
<alias base="WEASD">weasd</alias>
|
||||
<alias base="WGH">wgh</alias>
|
||||
<alias base="WGS">wgs</alias>
|
||||
<alias base="WS">ws</alias>
|
||||
<alias base="WVDIR">wvdir</alias>
|
||||
<alias base="WVHGT">wvhgt</alias>
|
||||
<alias base="WVPER">wvper</alias>
|
||||
<!-- Parameters below this point are not defined in parameter definition
|
||||
files. Since these are not very well defined parameters they will only be
|
||||
used if the grib decoder happens to give parameters the same base abbreviation.
|
||||
In the future more work should be done to merge these names into definition
|
||||
files. -->
|
||||
<alias base="ADIMC">adimc</alias>
|
||||
<alias base="Alti">alti</alias>
|
||||
<alias base="BH">bh</alias>
|
||||
<alias base="BLI">bli</alias>
|
||||
<alias base="BPVV">bpvv</alias>
|
||||
<alias base="BWu">bwu</alias>
|
||||
<alias base="BWv">bwv</alias>
|
||||
<alias base="CAPEc1">capec1</alias>
|
||||
<alias base="CAPEc2">capec2</alias>
|
||||
<alias base="CAPEc3">capec3</alias>
|
||||
<alias base="CAPEc4">capec4</alias>
|
||||
<alias base="CAPEc5">capec5</alias>
|
||||
<alias base="CB">cb</alias>
|
||||
<alias base="CC">cc</alias>
|
||||
<alias base="CCOV">ccov</alias>
|
||||
<alias base="CCP">ccpc</alias>
|
||||
<alias base="CFRZRc1">cfrzrc1</alias>
|
||||
<alias base="CFRZRmean">cfrzrmean</alias>
|
||||
<alias base="CFRZRsprd">cfrzrsprd</alias>
|
||||
<alias base="CIce">cice</alias>
|
||||
<alias base="CICEPc1">cicepc1</alias>
|
||||
<alias base="CICEPmean">cicepmean</alias>
|
||||
<alias base="CICEPsprd">cicepsprd</alias>
|
||||
<alias base="Cigc1">cigc1</alias>
|
||||
<alias base="Cigc2">cigc2</alias>
|
||||
<alias base="Cigc3">cigc3</alias>
|
||||
<alias base="CP2hr">cp2hr</alias>
|
||||
<alias base="CPVV">cpvv</alias>
|
||||
<alias base="CRAINc1">crainc1</alias>
|
||||
<alias base="CRAINmean">crainmean</alias>
|
||||
<alias base="CRAINsprd">crainsprd</alias>
|
||||
<alias base="CSNOWc1">csnowc1</alias>
|
||||
<alias base="CSNOWmean">csnowmean</alias>
|
||||
<alias base="CSNOWsprd">csnowsprd</alias>
|
||||
<alias base="CSSI">cssi</alias>
|
||||
<alias base="CTop">ctop</alias>
|
||||
<alias base="CTSTM">ctstm</alias>
|
||||
<alias base="CTyp">ctyp</alias>
|
||||
<alias base="CW">cw</alias>
|
||||
<alias base="CXR">cxr</alias>
|
||||
<alias base="DpTerranl">dpterranl</alias>
|
||||
<alias base="DpTmean">dptmean</alias>
|
||||
<alias base="DpTsprd">dptsprd</alias>
|
||||
<alias base="ELON">elon</alias>
|
||||
<alias base="FD">fd</alias>
|
||||
<alias base="FZNP">fznp</alias>
|
||||
<alias base="GHmean">ghmean</alias>
|
||||
<alias base="GHsprd">ghsprd</alias>
|
||||
<alias base="HyC">hyc</alias>
|
||||
<alias base="ICEC">icec</alias>
|
||||
<alias base="ICEG">iceg</alias>
|
||||
<alias base="ICNG">icng</alias>
|
||||
<alias base="ICPRB">icprb</alias>
|
||||
<alias base="ICSEV">icsev</alias>
|
||||
<alias base="IIdx">iidx</alias>
|
||||
<alias base="ILW">ilw</alias>
|
||||
<alias base="IP">ip</alias>
|
||||
<alias base="LgSP2hr">lgsp2hr</alias>
|
||||
<alias base="LLIP">llip</alias>
|
||||
<alias base="LLR">llr</alias>
|
||||
<alias base="LZFPC">lzfpc</alias>
|
||||
<alias base="LZFSC">lzfsc</alias>
|
||||
<alias base="LZTWC">lztwc</alias>
|
||||
<alias base="MAdv">madv</alias>
|
||||
<alias base="MAXRH12hr">maxRH12hr</alias>
|
||||
<alias base="MAXRH3hr">maxRH3hr</alias>
|
||||
<alias base="MCDD">mcdd</alias>
|
||||
<alias base="MCon">mcon</alias>
|
||||
<alias base="MINRH12hr">minRH12hr</alias>
|
||||
<alias base="MINRH3hr">minRH3hr</alias>
|
||||
<alias base="MnT12hr">mnt12hr</alias>
|
||||
<alias base="MnT3hr">mnt3hr</alias>
|
||||
<alias base="MnT6hr">mnt6hr</alias>
|
||||
<alias base="MRET">mret</alias>
|
||||
<alias base="MSLP">mslp</alias>
|
||||
<alias base="MWu">mwu</alias>
|
||||
<alias base="MWv">mwv</alias>
|
||||
<alias base="MxT12hr">mxt12hr</alias>
|
||||
<alias base="MxT3hr">mxt3hr</alias>
|
||||
<alias base="MxT6hr">mxt6hr</alias>
|
||||
<alias base="NBE">nbe</alias>
|
||||
<alias base="NLAT">nlat</alias>
|
||||
<alias base="NLRS">nlrs</alias>
|
||||
<alias base="OTIM">otim</alias>
|
||||
<alias base="PAcc">pacc</alias>
|
||||
<alias base="PBE">pbe</alias>
|
||||
<alias base="Pchg">pt3</alias>
|
||||
<alias base="PC">pc</alias>
|
||||
<alias base="Perranl">perranl</alias>
|
||||
<alias base="PICE">pice</alias>
|
||||
<alias base="PLIxc1">plixc1</alias>
|
||||
<alias base="PLIxc2">plixc2</alias>
|
||||
<alias base="PLIxc3">plixc3</alias>
|
||||
<alias base="PLIxc4">plixc4</alias>
|
||||
<alias base="PLIxc5">plixc5</alias>
|
||||
<alias base="PMSLmean">pmslmean</alias>
|
||||
<alias base="PMSLsprd">pmslsprd</alias>
|
||||
<alias base="POP12hr">pop12hr</alias>
|
||||
<alias base="POP3hr">pop3hr</alias>
|
||||
<alias base="POP6hr">pop6hr</alias>
|
||||
<alias base="POP">pop</alias>
|
||||
<alias base="PPAM">ppam</alias>
|
||||
<alias base="PPAN">ppan</alias>
|
||||
<alias base="PPAS">ppas</alias>
|
||||
<alias base="PPBM">ppbm</alias>
|
||||
<alias base="PPBN">ppbn</alias>
|
||||
<alias base="PPBS">ppbs</alias>
|
||||
<alias base="PPFFG">ppffg</alias>
|
||||
<alias base="PPNN">ppnn</alias>
|
||||
<alias base="prcp12hr">prcp12hr</alias>
|
||||
<alias base="prcp3hr">prcp3hr</alias>
|
||||
<alias base="prcp6hr">prcp6hr</alias>
|
||||
<alias base="Prob34">prob34</alias>
|
||||
<alias base="Prob50">prob50</alias>
|
||||
<alias base="Prob64">prob64</alias>
|
||||
<alias base="PTAM">ptam</alias>
|
||||
<alias base="PTAN">ptan</alias>
|
||||
<alias base="PTA">pta</alias>
|
||||
<alias base="PTAS">ptas</alias>
|
||||
<alias base="PTBM">ptbm</alias>
|
||||
<alias base="PTBN">ptbn</alias>
|
||||
<alias base="PTBS">ptbs</alias>
|
||||
<alias base="PTNN">ptnn</alias>
|
||||
<alias base="PTOR">ptor</alias>
|
||||
<alias base="PT">pt</alias>
|
||||
<alias base="PTT">ptt</alias>
|
||||
<alias base="PTyp">ptyp</alias>
|
||||
<alias base="PWmean">pwmean</alias>
|
||||
<alias base="PWS34">pws34</alias>
|
||||
<alias base="PWS50">pws50</alias>
|
||||
<alias base="PWS64">pws64</alias>
|
||||
<alias base="PWsprd">pwsprd</alias>
|
||||
<alias base="QPE01">qpe1</alias>
|
||||
<alias base="QPE06">qpe6</alias>
|
||||
<alias base="QPE24">qpe24</alias>
|
||||
<alias base="RAIN">rain</alias>
|
||||
<alias base="REFC">refc</alias>
|
||||
<alias base="REFD">refd</alias>
|
||||
<alias base="RHmean">rhmean</alias>
|
||||
<alias base="RHsprd">rhsprd</alias>
|
||||
<alias base="ROUTED_FLOW_C">routed_flow_c</alias>
|
||||
<alias base="ROUTED_FLOW_H">routed_flow_h</alias>
|
||||
<alias base="ROUTED_FLOW_M">routed_flow_m</alias>
|
||||
<alias base="ROUTED_FLOW">routed_flow</alias>
|
||||
<alias base="RR">rr</alias>
|
||||
<alias base="RRV">rrv</alias>
|
||||
<alias base="S1Hr">s1hr</alias>
|
||||
<alias base="SAcc">sacc</alias>
|
||||
<alias base="SHerranl">sherranl</alias>
|
||||
<alias base="shWlt">shwlt</alias>
|
||||
<alias base="SIPD">sld</alias>
|
||||
<alias base="SI">si</alias>
|
||||
<alias base="SMC">smc</alias>
|
||||
<alias base="SNOL12c10">snol12c10</alias>
|
||||
<alias base="SNOL12c1">snol12c1</alias>
|
||||
<alias base="SNOL12c2">snol12c2</alias>
|
||||
<alias base="SNOL12c3">snol12c3</alias>
|
||||
<alias base="SNOL12c4">snol12c4</alias>
|
||||
<alias base="SNOL12c5">snol12c5</alias>
|
||||
<alias base="SNOL12c6">snol12c6</alias>
|
||||
<alias base="SNOL12c7">snol12c7</alias>
|
||||
<alias base="SNOL12c8">snol12c8</alias>
|
||||
<alias base="SNOL12c9">snol12c9</alias>
|
||||
<alias base="SNOL12mean">snolmean12</alias>
|
||||
<alias base="SNOL12sprd">snolsprd12</alias>
|
||||
<alias base="snowd3hr">snowd3hr</alias>
|
||||
<alias base="snowd6hr">snowd6hr</alias>
|
||||
<alias base="SNOW">snow</alias>
|
||||
<alias base="SPT">spt</alias>
|
||||
<alias base="STOT">stot</alias>
|
||||
<alias base="STPA">stpa</alias>
|
||||
<alias base="ST">st</alias>
|
||||
<alias base="TAdv">tadv</alias>
|
||||
<alias base="Tc1">tc1</alias>
|
||||
<alias base="Terranl">terranl</alias>
|
||||
<alias base="ThP12hr">thp12hr</alias>
|
||||
<alias base="ThP3hr">thp3hr</alias>
|
||||
<alias base="ThP6hr">thp6hr</alias>
|
||||
<alias base="Tmean">tmean</alias>
|
||||
<alias base="TOTSN">totsn</alias>
|
||||
<alias base="TP120hr">tp120hr</alias>
|
||||
<alias base="TP12c1">tp12c1</alias>
|
||||
<alias base="TP12c2">tp12c2</alias>
|
||||
<alias base="TP12c3">tp12c3</alias>
|
||||
<alias base="TP12c4">tp12c4</alias>
|
||||
<alias base="TP12c5">tp12c5</alias>
|
||||
<alias base="TP12c6">tp12c6</alias>
|
||||
<alias base="TP12c7">tp12c7</alias>
|
||||
<alias base="TP12c8">tp12c8</alias>
|
||||
<alias base="TP12mean">tpmean12</alias>
|
||||
<alias base="TP12sprd">tpsprd12</alias>
|
||||
<alias base="TP24c1">tp24c1</alias>
|
||||
<alias base="TP24c2">tp24c2</alias>
|
||||
<alias base="TP24c3">tp24c3</alias>
|
||||
<alias base="TP24c4">tp24c4</alias>
|
||||
<alias base="TP24c5">tp24c5</alias>
|
||||
<alias base="TP24c6">tp24c6</alias>
|
||||
<alias base="TP24c7">tp24c7</alias>
|
||||
<alias base="TP24c8">tp24c8</alias>
|
||||
<alias base="TP24mean">tpmean24</alias>
|
||||
<alias base="TP24sprd">tpsprd24</alias>
|
||||
<alias base="TP3c1">tp3c1</alias>
|
||||
<alias base="TP3c2">tp3c2</alias>
|
||||
<alias base="TP3c3">tp3c3</alias>
|
||||
<alias base="TP3c4">tp3c4</alias>
|
||||
<alias base="TP3c5">tp3c5</alias>
|
||||
<alias base="TP3c6">tp3c6</alias>
|
||||
<alias base="TP3c7">tp3c7</alias>
|
||||
<alias base="TP3c8">tp3c8</alias>
|
||||
<alias base="TP3mean">tpmean3</alias>
|
||||
<alias base="TP3sprd">tpsprd3</alias>
|
||||
<alias base="TP6c1">tp6c1</alias>
|
||||
<alias base="TP6c2">tp6c2</alias>
|
||||
<alias base="TP6c3">tp6c3</alias>
|
||||
<alias base="TP6c4">tp6c4</alias>
|
||||
<alias base="TP6c5">tp6c5</alias>
|
||||
<alias base="TP6c6">tp6c6</alias>
|
||||
<alias base="TP6c7">tp6c7</alias>
|
||||
<alias base="TP6c8">tp6c8</alias>
|
||||
<alias base="TP6mean">tpmean6</alias>
|
||||
<alias base="TP6sprd">tpsprd6</alias>
|
||||
<alias base="TP_ACR">tp_ACR</alias>
|
||||
<alias base="TP-ACR">tp_ACR</alias>
|
||||
<alias base="TP_ALR">tp_ALR</alias>
|
||||
<alias base="TP-ALR">tp_ALR</alias>
|
||||
<alias base="TPCSG_122E2">PSurge4Ft</alias>
|
||||
<alias base="TPCSG-122E2">PSurge4Ft</alias>
|
||||
<alias base="TPCSG_152E2">PSurge5Ft</alias>
|
||||
<alias base="TPCSG-152E2">PSurge5Ft</alias>
|
||||
<alias base="TPCSG_183E2">PSurge6Ft</alias>
|
||||
<alias base="TPCSG-183E2">PSurge6Ft</alias>
|
||||
<alias base="TPCSG_20">Surge20Pct</alias>
|
||||
<alias base="TPCSG-20">Surge20Pct</alias>
|
||||
<alias base="TPCSG_213E2">PSurge7Ft</alias>
|
||||
<alias base="TPCSG-213E2">PSurge7Ft</alias>
|
||||
<alias base="TPCSG_244E2">PSurge8Ft</alias>
|
||||
<alias base="TPCSG-244E2">PSurge8Ft</alias>
|
||||
<alias base="TPCSG_274E2">PSurge9Ft</alias>
|
||||
<alias base="TPCSG-274E2">PSurge9Ft</alias>
|
||||
<alias base="TPCSG_305E2">PSurge10Ft</alias>
|
||||
<alias base="TPCSG-305E2">PSurge10Ft</alias>
|
||||
<alias base="TPCSG_30">Surge30Pct</alias>
|
||||
<alias base="TPCSG-30">Surge30Pct</alias>
|
||||
<alias base="TPCSG_335E2">PSurge11Ft</alias>
|
||||
<alias base="TPCSG-335E2">PSurge11Ft</alias>
|
||||
<alias base="TPCSG_366E2">PSurge12Ft</alias>
|
||||
<alias base="TPCSG-366E2">PSurge12Ft</alias>
|
||||
<alias base="TPCSG_396E2">PSurge13Ft</alias>
|
||||
<alias base="TPCSG-396E2">PSurge13Ft</alias>
|
||||
<alias base="TPCSG_40">Surge40Pct</alias>
|
||||
<alias base="TPCSG-40">Surge40Pct</alias>
|
||||
<alias base="TPCSG_427E2">PSurge14Ft</alias>
|
||||
<alias base="TPCSG-427E2">PSurge14Ft</alias>
|
||||
<alias base="TPCSG_457E2">PSurge15Ft</alias>
|
||||
<alias base="TPCSG-457E2">PSurge15Ft</alias>
|
||||
<alias base="TPCSG_488E2">PSurge16Ft</alias>
|
||||
<alias base="TPCSG-488E2">PSurge16Ft</alias>
|
||||
<alias base="TPCSG_50">Surge50Pct</alias>
|
||||
<alias base="TPCSG-50">Surge50Pct</alias>
|
||||
<alias base="TPCSG_518E2">PSurge17Ft</alias>
|
||||
<alias base="TPCSG-518E2">PSurge17Ft</alias>
|
||||
<alias base="TPCSG_549E2">PSurge18Ft</alias>
|
||||
<alias base="TPCSG-549E2">PSurge18Ft</alias>
|
||||
<alias base="TPCSG_579E2">PSurge19Ft</alias>
|
||||
<alias base="TPCSG-579E2">PSurge19Ft</alias>
|
||||
<alias base="TPCSG_60">Surge60Pct</alias>
|
||||
<alias base="TPCSG-60">Surge60Pct</alias>
|
||||
<alias base="TPCSG_610E2">PSurge20Ft</alias>
|
||||
<alias base="TPCSG-610E2">PSurge20Ft</alias>
|
||||
<alias base="TPCSG_61E2">PSurge2Ft</alias>
|
||||
<alias base="TPCSG-61E2">PSurge2Ft</alias>
|
||||
<alias base="TPCSG_640E2">PSurge21Ft</alias>
|
||||
<alias base="TPCSG-640E2">PSurge21Ft</alias>
|
||||
<alias base="TPCSG_671E2">PSurge22Ft</alias>
|
||||
<alias base="TPCSG-671E2">PSurge22Ft</alias>
|
||||
<alias base="TPCSG_701E2">PSurge23Ft</alias>
|
||||
<alias base="TPCSG-701E2">PSurge23Ft</alias>
|
||||
<alias base="TPCSG_70">Surge70Pct</alias>
|
||||
<alias base="TPCSG-70">Surge70Pct</alias>
|
||||
<alias base="TPCSG_732E2">PSurge24Ft</alias>
|
||||
<alias base="TPCSG-732E2">PSurge24Ft</alias>
|
||||
<alias base="TPCSG_762E2">PSurge25Ft</alias>
|
||||
<alias base="TPCSG-762E2">PSurge25Ft</alias>
|
||||
<alias base="TPCSG_80">Surge80Pct</alias>
|
||||
<alias base="TPCSG-80">Surge80Pct</alias>
|
||||
<alias base="TPCSG_90">Surge90Pct</alias>
|
||||
<alias base="TPCSG-90">Surge90Pct</alias>
|
||||
<alias base="TPCSG_91E2">PSurge3Ft</alias>
|
||||
<alias base="TPCSG-91E2">PSurge3Ft</alias>
|
||||
<alias base="TPCSG_SLOSH">SloshSurge</alias>
|
||||
<alias base="TPCSG-SLOSH">SloshSurge</alias>
|
||||
<alias base="TPCSG">Surge10Pct</alias>
|
||||
<alias base="TP_ECMWF">tp_ecmwf</alias>
|
||||
<alias base="TP_FWR">tp_FWR</alias>
|
||||
<alias base="TP-FWR">tp_FWR</alias>
|
||||
<alias base="TP_HPC">tp_HPC</alias>
|
||||
<alias base="TP-HPC">tp_HPC</alias>
|
||||
<alias base="TP_KRF">tp_KRF</alias>
|
||||
<alias base="TP-KRF">tp_KRF</alias>
|
||||
<alias base="TP_MSR">tp_MSR</alias>
|
||||
<alias base="TP-MSR">tp_MSR</alias>
|
||||
<alias base="TP_ORN">tp_ORN</alias>
|
||||
<alias base="TP-ORN">tp_ORN</alias>
|
||||
<alias base="TP_PTR">tp_PTR</alias>
|
||||
<alias base="TP-PTR">tp_PTR</alias>
|
||||
<alias base="TP_RHA">tp_RHA</alias>
|
||||
<alias base="TP-RHA">tp_RHA</alias>
|
||||
<alias base="TP_RSA">tp_RSA</alias>
|
||||
<alias base="TP-RSA">tp_RSA</alias>
|
||||
<alias base="TP_STR">tp_STR</alias>
|
||||
<alias base="TP-STR">tp_STR</alias>
|
||||
<alias base="TP_TAR">tp_TAR</alias>
|
||||
<alias base="TP-TAR">tp_TAR</alias>
|
||||
<alias base="TP_TIR">tp_TIR</alias>
|
||||
<alias base="TP-TIR">tp_TIR</alias>
|
||||
<alias base="TP_TUA">tp_TUA</alias>
|
||||
<alias base="TP-TUA">tp_TUA</alias>
|
||||
<alias base="TPW">tpw</alias>
|
||||
<alias base="Tsprd">tsprd</alias>
|
||||
<alias base="tTOT">ttot</alias>
|
||||
<alias base="TURB">turb</alias>
|
||||
<alias base="uWerranl">uwerranl</alias>
|
||||
<alias base="uWmean">uwmean</alias>
|
||||
<alias base="uWsprd">uwsprd</alias>
|
||||
<alias base="UZFWC">uzfwc</alias>
|
||||
<alias base="UZTWC">uztwc</alias>
|
||||
<alias base="Visc1">visc1</alias>
|
||||
<alias base="Visc2">visc2</alias>
|
||||
<alias base="VMCC">vmcc</alias>
|
||||
<alias base="VSS">vss</alias>
|
||||
<alias base="VV">ww</alias>
|
||||
<alias base="vWerranl">vwerranl</alias>
|
||||
<alias base="vWmean">vwmean</alias>
|
||||
<alias base="vWsprd">vwsprd</alias>
|
||||
<alias base="WATER_DEPTH">water_depth</alias>
|
||||
<alias base="WDerranl">wderranl</alias>
|
||||
<alias base="WGD">wgd</alias>
|
||||
<alias base="WOm">wom</alias>
|
||||
<alias base="WSc1">wsc1</alias>
|
||||
<alias base="WSc2">wsc2</alias>
|
||||
<alias base="WSc3">wsc3</alias>
|
||||
<alias base="WSc4">wsc4</alias>
|
||||
<alias base="WSerranl">wserranl</alias>
|
||||
<alias base="WSmean">wsmean</alias>
|
||||
<alias base="WSp1">wsp1</alias>
|
||||
<alias base="WSp2">wsp2</alias>
|
||||
<alias base="WSp3">wsp3</alias>
|
||||
<alias base="WSsprd">wssprd</alias>
|
||||
<alias base="wxType">wx</alias>
|
||||
<alias base="zAGL">zagl</alias>
|
||||
</aliasList>
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -217,7 +217,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -106,7 +106,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -258,7 +258,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -333,7 +333,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -378,7 +378,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -491,7 +491,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -160,7 +160,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -129,7 +129,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -168,7 +168,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -156,7 +156,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -244,7 +244,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -210,7 +210,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -226,7 +226,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -145,7 +145,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -145,7 +145,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -134,7 +134,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -134,7 +134,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -185,7 +185,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -407,7 +407,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -407,7 +407,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -231,7 +231,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -231,7 +231,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -34,8 +34,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -138,7 +138,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -446,7 +446,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -521,7 +521,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -566,7 +566,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -685,7 +685,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -700,7 +700,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
|
|
@ -34,8 +34,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -138,7 +138,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -446,7 +446,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -521,7 +521,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -566,7 +566,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -685,7 +685,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -700,7 +700,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
|
|
@ -170,7 +170,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -61,7 +61,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -191,8 +191,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -212,7 +212,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -366,13 +366,13 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -453,7 +453,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -61,7 +61,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -191,8 +191,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -212,7 +212,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -366,13 +366,13 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -453,7 +453,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -204,7 +204,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -61,7 +61,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -191,8 +191,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -212,7 +212,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -366,13 +366,13 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -453,7 +453,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -240,7 +240,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>crain</short_name>
|
||||
<long_name>Categorical rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -61,7 +61,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cfrzr</short_name>
|
||||
<long_name>Categorical freezing rain</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalFrzRain</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -191,8 +191,8 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>weasd</short_name>
|
||||
<long_name>water equivalent of accumulated snow depth</long_name>
|
||||
<units>ml</units>
|
||||
<udunits>mil</udunits>
|
||||
<units>mm</units>
|
||||
<udunits>millimeter</udunits>
|
||||
<uiname>waterEqvAccSnowDepth</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>1000.0</valid_range>
|
||||
|
@ -212,7 +212,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>av</short_name>
|
||||
<long_name>absolute vorticity</long_name>
|
||||
<units>1/s</units>
|
||||
<units>/s</units>
|
||||
<udunits>1/second</udunits>
|
||||
<uiname>absVort</uiname>
|
||||
<valid_range>-0.00999999977648</valid_range>
|
||||
|
@ -366,13 +366,13 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>csnow</short_name>
|
||||
<long_name>Categorical snow</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalSnow</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
@ -453,7 +453,7 @@
|
|||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>cicep</short_name>
|
||||
<long_name>Categorical ice pellets</long_name>
|
||||
<units>yes=1, no=0</units>
|
||||
<units>yn</units>
|
||||
<udunits/>
|
||||
<uiname>CategoricalIcePlt</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Mar 20, 2013 #1774 randerso Fixed wx definition
|
||||
-->
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>302400</fcst>
|
||||
|
@ -105,7 +108,7 @@
|
|||
<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>/second</units>
|
||||
<units>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
|
@ -124,13 +127,13 @@
|
|||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wxType</short_name>
|
||||
<short_name>wx</short_name>
|
||||
<long_name>Weather</long_name>
|
||||
<units/>
|
||||
<udunits/>
|
||||
<uiname>Weather</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>12.0</valid_range>
|
||||
<valid_range>10.0</valid_range>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue