Add epanet input schema

This commit is contained in:
wqy
2022-08-27 11:49:43 +08:00
parent cbb88986c2
commit b77349cfe6
58 changed files with 544 additions and 0 deletions

25
sql/base_create.sql Normal file
View File

@@ -0,0 +1,25 @@
CREATE TYPE _NODE_TYPE AS ENUM ('JUNCTION', 'RESERVOIR', 'TANK');
CREATE TYPE _LINK_TYPE AS ENUM ('PIPE', 'PUMP', 'VALVE');
CREATE TABLE _NODE
(
ID VARCHAR(32) PRIMARY KEY
, Type _NODE_TYPE NOT NULL
);
CREATE TABLE _LINK
(
ID VARCHAR(32) PRIMARY KEY
, Type _LINK_TYPE NOT NULL
);
CREATE TABLE _CURVE
(
ID VARCHAR(32) PRIMARY KEY
);
CREATE TABLE _PATTERN
(
ID VARCHAR(32) PRIMARY KEY
);

11
sql/base_drop.sql Normal file
View File

@@ -0,0 +1,11 @@
DROP TABLE IF EXISTS _PATTERN;
DROP TABLE IF EXISTS _CURVE;
DROP TABLE IF EXISTS _LINK;
DROP TABLE IF EXISTS _NODE;
DROP TYPE IF EXISTS _LINK_TYPE;
DROP TYPE IF EXISTS _NODE_TYPE;

View File

@@ -0,0 +1,6 @@
-- [TITLE]
CREATE TABLE TITLE
(
Value TEXT
);

View File

@@ -0,0 +1,29 @@
-- [STATUS]
CREATE TYPE STATUS_PIPE_PUMP_STATUS AS ENUM ('OPEN', 'CLOSED');
CREATE TABLE STATUS_PIPE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES PIPES(ID)
, Status STATUS_PIPE_PUMP_STATUS NOT NULL
);
CREATE TABLE STATUS_PUMP
(
ID VARCHAR(32) PRIMARY KEY REFERENCES PUMPS(ID)
, Status STATUS_PIPE_PUMP_STATUS NOT NULL
);
CREATE TYPE STATUS_VALVE_STATUS AS ENUM ('OPEN', 'CLOSED', 'ACTIVE');
CREATE TABLE STATUS_VALVE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES VALVES(ID)
, Status STATUS_VALVE_STATUS NOT NULL
);
CREATE TABLE STATUS_LINK
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Setting NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [PATTERNS]
CREATE TABLE PATTERNS
(
ID VARCHAR(32) REFERENCES _PATTERN(ID) NOT NULL
, Multipliers NUMERIC NOT NULL
);

View File

@@ -0,0 +1,8 @@
-- [CURVES]
CREATE TABLE CURVES
(
ID VARCHAR(32) REFERENCES _CURVE(ID) NOT NULL
, X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
);

View File

@@ -0,0 +1,30 @@
-- [CONTROLS]
CREATE TYPE CONTROLS_1_PREP AS ENUM ('ABOVE', 'BELOW');
-- LINK linkID status IF NODE nodeID ABOVE / BELOW value
CREATE TABLE CONTROLS_1
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, NodeID VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Prep CONTROLS_1_PREP NOT NULL
, Value NUMERIC NOT NULL
);
-- LINK linkID status AT TIME time
CREATE TABLE CONTROLS_2
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, Time INTERVAL HOUR
);
-- LINK linkID status AT CLOCKTIME clocktime AM / PM
CREATE TABLE CONTROLS_3
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, ClockTimeHour INTERVAL HOUR -- get AM/PM from it
, ClockTimeMin INTERVAL MINUTE
);

View File

@@ -0,0 +1,6 @@
-- [RULES]
CREATE TABLE RULES
(
Content TEXT PRIMARY KEY
);

View File

@@ -0,0 +1,24 @@
-- [ENERGY]
CREATE TYPE ENERGY_PARAM AS ENUM ('PRICE', 'PATTERN', 'EFFIC');
-- GLOBAL PRICE / PATTERN / EFFIC value
CREATE TABLE ENERGY_GLOBAL
(
Param ENERGY_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
-- PUMP pumpID PRICE / PATTERN / EFFIC value
CREATE TABLE ENERGY_PUMP
(
ID VARCHAR(32) REFERENCES PUMPS(ID) NOT NULL
, Param ENERGY_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
-- DEMAND CHARGE value
CREATE TABLE ENERGY_DEMAND_CHARGE
(
Value NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [EMITTERS]
CREATE TABLE EMITTERS
(
Junction VARCHAR(32) PRIMARY KEY REFERENCES JUNCTIONS(ID)
, Coefficient NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [QUALITY]
CREATE TABLE QUALITY
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, InitialQual NUMERIC NOT NULL
);

View File

@@ -0,0 +1,11 @@
-- [SOURCES]
CREATE TYPE SOURCES_TYPE AS ENUM ('CONCEN', 'MASS', 'FLOWPACED', 'SETPOINT');
CREATE TABLE SOURCES
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Type SOURCES_TYPE NOT NULL
, Strength NUMERIC NOT NULL
, TimePattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,42 @@
-- [REACTIONS]
CREATE TYPE REACTIONS_ORDER_PARAM AS ENUM ('BULK', 'WALL', 'TANK');
CREATE TABLE REACTIONS_ORDER
(
Key REACTIONS_ORDER_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TYPE REACTIONS_GLOBAL_PARAM AS ENUM ('BULK', 'WALL');
CREATE TABLE REACTIONS_GLOBAL
(
Key REACTIONS_GLOBAL_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TYPE REACTIONS_PIPE_PARAM AS ENUM ('BULK', 'WALL');
CREATE TABLE REACTIONS_PIPE
(
Key REACTIONS_PIPE_PARAM NOT NULL
, Pipe VARCHAR(32) REFERENCES PIPES(ID) NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_TANK
(
Tank VARCHAR(32) REFERENCES TANKS(ID) NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_LIMITING_POTENTIAL
(
Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_ROUGHNESS_CORRELATION
(
Value NUMERIC NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [JUNCTIONS]
CREATE TABLE JUNCTIONS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Elevation NUMERIC NOT NULL
, Demand NUMERIC
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,10 @@
-- [MIXING]
CREATE TYPE MIXING_Model AS ENUM ('MIXED', '2COMP', 'FIFO', 'LIFO');
CREATE TABLE MIXING
(
Tank VARCHAR(32) PRIMARY KEY REFERENCES TANKS(ID)
, Model MIXING_Model NOT NULL
, Value NUMERIC
);

View File

@@ -0,0 +1,9 @@
-- [TIMES]
-- TODO: constraint
CREATE TABLE TIMES
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [REPORT]
-- TODO: constraint
CREATE TABLE REPORT
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [OPTIONS]
-- TODO: constraint
CREATE TABLE OPTIONS
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,10 @@
-- [COORDINATES]
CREATE TABLE COORDINATES
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Coord POINT NOT NULL DEFAULT(POINT(0.0, 0.0))
);
CREATE INDEX COORDINATES_SPGIST ON COORDINATES USING SPGIST(Coord);
CREATE INDEX COORDINATES_GIST ON COORDINATES USING GIST(Coord);

View File

@@ -0,0 +1,8 @@
-- [VERTICES]
CREATE TABLE VERTICES
(
Link VARCHAR(32) REFERENCES _LINK(ID) NOT NULL
, X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [LABELS]
CREATE TABLE LABELS
(
X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
, Label TEXT NOT NULL
, AnchorNode VARCHAR(32) REFERENCES _NODE(ID)
);

View File

@@ -0,0 +1,6 @@
-- [BACKDROP]
CREATE TABLE BACKDROP
(
Content TEXT PRIMARY KEY
);

View File

@@ -0,0 +1 @@
-- [END]

View File

@@ -0,0 +1,8 @@
-- [RESERVOIRS]
CREATE TABLE RESERVOIRS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Head NUMERIC NOT NULL
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,16 @@
-- [TANKS]
CREATE TYPE TANKS_OVERFLOW AS ENUM ('YES', 'NO');
CREATE TABLE TANKS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Elevation NUMERIC NOT NULL
, InitLevel NUMERIC NOT NULL
, MinLevel NUMERIC NOT NULL
, MaxLevel NUMERIC NOT NULL
, Diameter NUMERIC NOT NULL
, MinVol NUMERIC NOT NULL
, VolCurve VARCHAR(32) REFERENCES _CURVE(ID)
, Overflow TANKS_OVERFLOW
);

View File

@@ -0,0 +1,15 @@
-- [PIPES]
CREATE TYPE PIPES_STATUS AS ENUM ('OPEN', 'CLOSED', 'CV');
CREATE TABLE PIPES
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Length NUMERIC NOT NULL
, Diameter NUMERIC NOT NULL
, Roughness NUMERIC NOT NULL
, MinorLoss NUMERIC NOT NULL
, Status PIPES_STATUS NOT NULL
);

View File

@@ -0,0 +1,32 @@
-- [PUMPS]
CREATE TABLE PUMPS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_POWER
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Value VARCHAR(32) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_SPEED
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Value VARCHAR(32) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_HEAD
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Head VARCHAR(32) REFERENCES _CURVE(ID) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_PATTERN
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID) NOT NULL
);

View File

@@ -0,0 +1,14 @@
-- [VALVES]
CREATE TYPE VALVES_TYPE AS ENUM ('PRV', 'PSV', 'PBV', 'FCV', 'TCV', 'GPV');
CREATE TABLE VALVES
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Diameter NUMERIC NOT NULL
, Type VALVES_TYPE NOT NULL
, Setting NUMERIC NOT NULL
, MinorLoss NUMERIC NOT NULL
);

View File

@@ -0,0 +1,13 @@
-- [TAGS]
CREATE TABLE TAGS_NODE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Tag TEXT NOT NULL
);
CREATE TABLE TAGS_LINK
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Tag TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [DEMANDS]
CREATE TABLE DEMANDS
(
Junction VARCHAR(32) REFERENCES JUNCTIONS(ID) NOT NULL
, Demand NUMERIC NOT NULL
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
, Category TEXT NOT NULL
);

View File

@@ -0,0 +1,3 @@
-- [TITLE]
DROP TABLE TITLE;

View File

@@ -0,0 +1,13 @@
-- [STATUS]
DROP TABLE STATUS_LINK;
DROP TABLE STATUS_VALVE;
DROP TYPE STATUS_VALVE_STATUS;
DROP TABLE STATUS_PUMP;
DROP TABLE STATUS_PIPE;
DROP TYPE STATUS_PIPE_PUMP_STATUS;

View File

@@ -0,0 +1,3 @@
-- [PATTERNS]
DROP TABLE PATTERNS;

View File

@@ -0,0 +1,3 @@
-- [CURVES]
DROP TABLE CURVES;

View File

@@ -0,0 +1,9 @@
-- [CONTROLS]
DROP TABLE CONTROLS_3;
DROP TABLE CONTROLS_2;
DROP TABLE CONTROLS_1;
DROP TYPE CONTROLS_1_PREP;

View File

@@ -0,0 +1,3 @@
-- [RULES]
DROP TABLE RULES;

View File

@@ -0,0 +1,9 @@
-- [ENERGY]
DROP TABLE ENERGY_DEMAND_CHARGE;
DROP TABLE ENERGY_PUMP;
DROP TABLE ENERGY_GLOBAL;
DROP TYPE ENERGY_PARAM;

View File

@@ -0,0 +1,3 @@
-- [EMITTERS]
DROP TABLE EMITTERS;

View File

@@ -0,0 +1,3 @@
-- [QUALITY]
DROP TABLE QUALITY;

View File

@@ -0,0 +1,5 @@
-- [SOURCES]
DROP TABLE SOURCES;
DROP TYPE SOURCES_TYPE;

View File

@@ -0,0 +1,19 @@
-- [REACTIONS]
DROP TABLE REACTIONS_ROUGHNESS_CORRELATION;
DROP TABLE REACTIONS_LIMITING_POTENTIAL;
DROP TABLE REACTIONS_TANK;
DROP TABLE REACTIONS_PIPE;
DROP TYPE REACTIONS_PIPE_PARAM;
DROP TABLE REACTIONS_GLOBAL;
DROP TYPE REACTIONS_GLOBAL_PARAM;
DROP TABLE REACTIONS_ORDER;
DROP TYPE REACTIONS_ORDER_PARAM;

View File

@@ -0,0 +1,3 @@
-- [JUNCTIONS]
DROP TABLE JUNCTIONS;

View File

@@ -0,0 +1,5 @@
-- [MIXING]
DROP TABLE MIXING;
DROP TYPE MIXING_Model;

View File

@@ -0,0 +1,3 @@
-- [TIMES]
DROP TABLE TIMES;

View File

@@ -0,0 +1,3 @@
-- [REPORT]
DROP TABLE REPORT;

View File

@@ -0,0 +1,3 @@
-- [OPTIONS]
DROP TABLE OPTIONS;

View File

@@ -0,0 +1,7 @@
-- [COORDINATES]
DROP INDEX COORDINATES_GIST;
DROP INDEX COORDINATES_SPGIST;
DROP TABLE COORDINATES;

View File

@@ -0,0 +1,3 @@
-- [VERTICES]
DROP TABLE VERTICES;

View File

@@ -0,0 +1,3 @@
-- [LABELS]
DROP TABLE LABELS;

View File

@@ -0,0 +1,3 @@
-- [BACKDROP]
DROP TABLE BACKDROP;

View File

@@ -0,0 +1 @@
-- [END]

View File

@@ -0,0 +1,3 @@
-- [RESERVOIRS]
DROP TABLE RESERVOIRS;

View File

@@ -0,0 +1,5 @@
-- [TANKS]
DROP TABLE TANKS;
DROP TYPE TANKS_OVERFLOW;

View File

@@ -0,0 +1,5 @@
-- [PIPES]
DROP TABLE PIPES;
DROP TYPE PIPES_STATUS;

View File

@@ -0,0 +1,11 @@
-- [PUMPS]
DROP TABLE PUMPS_PROPERTY_PATTERN;
DROP TABLE PUMPS_PROPERTY_HEAD;
DROP TABLE PUMPS_PROPERTY_SPEED;
DROP TABLE PUMPS_PROPERTY_POWER;
DROP TABLE PUMPS;

View File

@@ -0,0 +1,5 @@
-- [VALVES]
DROP TABLE VALVES;
DROP TYPE VALVES_TYPE;

View File

@@ -0,0 +1,5 @@
-- [TAGS]
DROP TABLE TAGS_LINK;
DROP TABLE TAGS_NODE;

View File

@@ -0,0 +1,3 @@
-- [DEMANDS]
DROP TABLE DEMANDS;