OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
lid.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2// lid.h
3//
4// Project: EPA SWMM5
5// Version: 5.2
6// Date: 11/01/21 (Build 5.2.0)
7// Author: L. Rossman
8//
9// Public interface for LID functions.
10//
11// Update History
12// ==============
13// Build 5.1.008:
14// - Support added for Roof Disconnection LID.
15// - Support added for separate routing of LID drain flows.
16// - Detailed LID reporting modified.
17// Build 5.1.011:
18// - Water depth replaces moisture content for LID's pavement layer.
19// - Arguments for lidproc_saveResults() modified.
20// Build 5.1.012:
21// - Redefined meaning of wasDry in TLidRptFile structure.
22// Build 5.1.013:
23// - New member fromPerv added to TLidUnit structure to allow LID
24// units to also treat pervious area runoff.
25// - New members hOpen and hClose addded to TDrainLayer to open/close
26// drain when certain heads are reached.
27// - New member qCurve added to TDrainLayer to allow underdrain flow to
28// be adjusted by a curve of multiplier v. head.
29// - New array drainRmvl added to TLidProc to allow for underdrain
30// pollutant removal values.
31// - New members added to TPavementLayer and TLidUnit to support
32// unclogging permeable pavement at fixed intervals.
33// Build 5.2.0:
34// - Covered property added to RAIN_BARREL parameters
35//-----------------------------------------------------------------------------
36
46
47#ifndef LID_H
48#define LID_H
49
50#include <stdlib.h>
51#include <stdio.h>
52#include <string.h>
53#include "infil.h"
54
55//-----------------------------------------------------------------------------
56// Enumerations
57//-----------------------------------------------------------------------------
59 BIO_CELL, // bio-retention cell
60 RAIN_GARDEN, // rain garden
61 GREEN_ROOF, // green roof
62 INFIL_TRENCH, // infiltration trench
63 POROUS_PAVEMENT, // porous pavement
64 RAIN_BARREL, // rain barrel
65 VEG_SWALE, // vegetative swale
67}; // roof disconnection
68
70 PREVIOUS, // previous time period
72}; // current time period
73
74//-----------------------------------------------------------------------------
75// Data Structures
76//-----------------------------------------------------------------------------
77#define MAX_LAYERS 4
78
79// LID Surface Layer
80typedef struct {
81 double thickness; // depression storage or berm ht. (ft)
82 double voidFrac; // available fraction of storage volume
83 double roughness; // surface Mannings n
84 double surfSlope; // land surface slope (fraction)
85 double sideSlope; // swale side slope (run/rise)
86 double alpha; // slope/roughness term in Manning eqn.
87 char canOverflow; // 1 if immediate outflow of excess water
89
90// LID Pavement Layer
91typedef struct {
92 double thickness; // layer thickness (ft)
93 double voidFrac; // void volume / total volume
94 double impervFrac; // impervious area fraction
95 double kSat; // permeability (ft/sec)
96 double clogFactor; // clogging factor
97 double regenDays; // clogging regeneration interval (days)
98 double regenDegree; // degree of clogging regeneration
100
101// LID Soil Layer
102typedef struct {
103 double thickness; // layer thickness (ft)
104 double porosity; // void volume / total volume
105 double fieldCap; // field capacity
106 double wiltPoint; // wilting point
107 double suction; // suction head at wetting front (ft)
108 double kSat; // saturated hydraulic conductivity (ft/sec)
109 double kSlope; // slope of log(K) v. moisture content curve
110} TSoilLayer;
111
112// LID Storage Layer
113typedef struct {
114 double thickness; // layer thickness (ft)
115 double voidFrac; // void volume / total volume
116 double kSat; // saturated hydraulic conductivity (ft/sec)
117 double clogFactor; // clogging factor
118 int covered; // TRUE if rain barrel is covered
120
121// Underdrain System (part of Storage Layer)
122typedef struct {
123 double coeff; // underdrain flow coeff. (in/hr or mm/hr)
124 double expon; // underdrain head exponent (for in or mm)
125 double offset; // offset height of underdrain (ft)
126 double delay; // rain barrel drain delay time (sec)
127 double hOpen; // head when drain opens (ft)
128 double hClose; // head when drain closes (ft)
129 int qCurve; // curve controlling flow rate (optional)
131
132// Drainage Mat Layer (for green roofs)
133typedef struct {
134 double thickness; // layer thickness (ft)
135 double voidFrac; // void volume / total volume
136 double roughness; // Mannings n for green roof drainage mats
137 double alpha; // slope/roughness term in Manning equation
139
140// LID Process - generic LID design per unit of area
141typedef struct {
142 char* ID; // identifying name
143 int lidType; // type of LID
144 TSurfaceLayer surface; // surface layer parameters
145 TPavementLayer pavement; // pavement layer parameters
146 TSoilLayer soil; // soil layer parameters
147 TStorageLayer storage; // storage layer parameters
148 TDrainLayer drain; // underdrain system parameters
149 TDrainMatLayer drainMat; // drainage mat layer
150 double* drainRmvl; // underdrain pollutant removals
151} TLidProc;
152
153// Water Balance Statistics
154typedef struct {
155 double inflow; // total inflow (ft)
156 double evap; // total evaporation (ft)
157 double infil; // total infiltration (ft)
158 double surfFlow; // total surface runoff (ft)
159 double drainFlow; // total underdrain flow (ft)
160 double initVol; // initial stored volume (ft)
161 double finalVol; // final stored volume (ft)
163
164// LID Report File
165typedef struct {
166 FILE* file; // file pointer
167 int wasDry; // number of successive dry periods
168 char results[256]; // results for current time period
170
171// LID Unit - specific LID process applied over a given area
172typedef struct {
173 int lidIndex; // index of LID process
174 int number; // number of replicate units
175 double area; // area of single replicate unit (ft2)
176 double fullWidth; // full top width of single unit (ft)
177 double botWidth; // bottom width of single unit (ft)
178 double initSat; // initial saturation of soil & storage layers
179 double fromImperv; // fraction of impervious area runoff treated
180 double fromPerv; // fraction of pervious area runoff treated
181 int toPerv; // 1 if outflow sent to pervious area; 0 if not
182 int drainSubcatch; // subcatchment receiving drain flow
183 int drainNode; // node receiving drain flow
184 TLidRptFile* rptFile; // pointer to detailed report file
185
186 TGrnAmpt soilInfil; // infil. object for biocell soil layer
187 double surfaceDepth; // depth of ponded water on surface layer (ft)
188 double paveDepth; // depth of water in porous pavement layer
189 double soilMoisture; // moisture content of biocell soil layer
190 double storageDepth; // depth of water in storage layer (ft)
191
192 // net inflow - outflow from previous time step for each LID layer (ft/s)
194
195 double dryTime; // time since last rainfall (sec)
196 double oldDrainFlow; // previous drain flow (cfs)
197 double newDrainFlow; // current drain flow (cfs)
198 double volTreated; // total volume treated (ft)
199 double nextRegenDay; // next day when unit regenerated
200 TWaterBalance waterBalance; // water balance quantites
201} TLidUnit;
202
203//-----------------------------------------------------------------------------
204// LID Methods
205//-----------------------------------------------------------------------------
206void lid_create(int lidCount, int subcatchCount);
207void lid_delete(void);
208
209int lid_readProcParams(char* tok[], int ntoks);
210int lid_readGroupParams(char* tok[], int ntoks);
211int lid_setDrainParams(int lidIndex, double coeff, double expon, double offset);
212
213void lid_validate(void);
214void lid_initState(void);
215void lid_setOldGroupState(int subcatch);
216
217double lid_getPervArea(int subcatch);
218double lid_getFlowToPerv(int subcatch);
219double lid_getDrainFlow(int subcatch, int timePeriod);
220double lid_getStoredVolume(int subcatch);
221void lid_addDrainLoads(int subcatch, double c[], double tStep);
222void lid_addDrainRunon(int subcatch);
223void lid_addDrainInflow(int subcatch, double f);
224void lid_getRunoff(int subcatch, double tStep);
225void lid_writeSummary(void);
226void lid_writeWaterBalance(void);
227
228//-----------------------------------------------------------------------------
229
230void lidproc_initWaterBalance(TLidUnit* lidUnit, double initVol);
231
232double lidproc_getOutflow(TLidUnit* lidUnit, TLidProc* lidProc, double inflow, double evap,
233 double infil, double maxInfil, double tStep, double* lidEvap,
234 double* lidInfil, double* lidDrain);
235
236void lidproc_saveResults(TLidUnit* lidUnit, double ucfRainfall, double ucfRainDepth);
237
238#endif
Legacy subcatchment infiltration models and state.
double lid_getStoredVolume(int subcatch)
Computes stored volume of water for all LIDs grouped within a subcatchment.
Definition lid.c:1380
void lid_delete(void)
Deletes all LID objects.
Definition lid.c:319
int lid_setDrainParams(int lidIndex, double coeff, double expon, double offset)
Updates the underdrain flow parameters of a LID process at runtime (API support). The drain parameter...
Definition lid.c:804
int lid_readProcParams(char *tok[], int ntoks)
Reads LID process information from line of input data file.
Definition lid.c:376
void lid_addDrainLoads(int subcatch, double c[], double tStep)
Add LID drain pollutant export and BMP removal to mass-balance totals.
Definition lid.c:1433
void lid_addDrainInflow(int subcatch, double f)
Add temporally interpolated LID drain inflows to conveyance nodes.
Definition lid.c:1548
void lid_create(int lidCount, int subcatchCount)
Allocate LID process definitions and per-subcatchment LID group storage.
Definition lid.c:253
LidTypes
Definition lid.h:58
@ RAIN_GARDEN
Definition lid.h:60
@ BIO_CELL
Definition lid.h:59
@ ROOF_DISCON
Definition lid.h:66
@ VEG_SWALE
Definition lid.h:65
@ GREEN_ROOF
Definition lid.h:61
@ RAIN_BARREL
Definition lid.h:64
@ INFIL_TRENCH
Definition lid.h:62
@ POROUS_PAVEMENT
Definition lid.h:63
double lid_getPervArea(int subcatch)
Retrieves amount of pervious LID area in a subcatchment.
Definition lid.c:1351
double lid_getFlowToPerv(int subcatch)
Retrieves flow returned from LID treatment to pervious area of a subcatchment.
Definition lid.c:1366
int lid_readGroupParams(char *tok[], int ntoks)
Reads input data for a LID unit placed in a subcatchment.
Definition lid.c:440
void lid_getRunoff(int subcatch, double tStep)
Advance LID units and compute runoff, drain and return flows.
Definition lid.c:1613
void lid_validate(void)
Validates LID process and group parameters.
Definition lid.c:938
void lid_addDrainRunon(int subcatch)
Route previous-period LID drain flow and pollutant loads to receiving subcatchments.
Definition lid.c:1492
TimePeriod
Definition lid.h:69
@ CURRENT
Definition lid.h:71
@ PREVIOUS
Definition lid.h:70
void lid_setOldGroupState(int subcatch)
Saves the current drain flow rate for the LIDs in a subcatchment.
Definition lid.c:1285
void lidproc_saveResults(TLidUnit *lidUnit, double ucfRainfall, double ucfRainDepth)
Update LID water balance and optionally emit detailed report results.
Definition lidproc.c:386
double lidproc_getOutflow(TLidUnit *lidUnit, TLidProc *lidProc, double inflow, double evap, double infil, double maxInfil, double tStep, double *lidEvap, double *lidInfil, double *lidDrain)
Computes runoff outflow from a single LID unit.
Definition lidproc.c:222
void lid_writeWaterBalance(void)
Writes a LID performance summary table to the project's report file.
Definition lid.c:1898
double lid_getDrainFlow(int subcatch, int timePeriod)
Select the previous or current total LID drain flow of a subcatchment.
Definition lid.c:1406
#define MAX_LAYERS
Definition lid.h:77
void lidproc_initWaterBalance(TLidUnit *lidUnit, double initVol)
Initializes the water balance components of a LID unit.
Definition lidproc.c:195
void lid_initState(void)
Initializes the internal state of each LID in a subcatchment.
Definition lid.c:1200
void lid_writeSummary(void)
Writes summary of LID processes used to report file.
Definition lid.c:892
Definition lid.h:122
double offset
Definition lid.h:125
double delay
Definition lid.h:126
double hClose
Definition lid.h:128
double coeff
Definition lid.h:123
int qCurve
Definition lid.h:129
double hOpen
Definition lid.h:127
double expon
Definition lid.h:124
Definition lid.h:133
double voidFrac
Definition lid.h:135
double alpha
Definition lid.h:137
double thickness
Definition lid.h:134
double roughness
Definition lid.h:136
Definition infil.h:63
Definition lid.h:141
TSurfaceLayer surface
Definition lid.h:144
TDrainMatLayer drainMat
Definition lid.h:149
TSoilLayer soil
Definition lid.h:146
TPavementLayer pavement
Definition lid.h:145
TStorageLayer storage
Definition lid.h:147
double * drainRmvl
Definition lid.h:150
char * ID
Definition lid.h:142
TDrainLayer drain
Definition lid.h:148
int lidType
Definition lid.h:143
Definition lid.h:165
FILE * file
Definition lid.h:166
int wasDry
Definition lid.h:167
char results[256]
Definition lid.h:168
Definition lid.h:172
double dryTime
Definition lid.h:195
TWaterBalance waterBalance
Definition lid.h:200
double oldDrainFlow
Definition lid.h:196
int toPerv
Definition lid.h:181
double volTreated
Definition lid.h:198
double surfaceDepth
Definition lid.h:187
double initSat
Definition lid.h:178
double fromPerv
Definition lid.h:180
double area
Definition lid.h:175
double storageDepth
Definition lid.h:190
int drainNode
Definition lid.h:183
int lidIndex
Definition lid.h:173
double soilMoisture
Definition lid.h:189
double botWidth
Definition lid.h:177
double fromImperv
Definition lid.h:179
int number
Definition lid.h:174
TLidRptFile * rptFile
Definition lid.h:184
double nextRegenDay
Definition lid.h:199
double oldFluxRates[MAX_LAYERS]
Definition lid.h:193
double fullWidth
Definition lid.h:176
double paveDepth
Definition lid.h:188
TGrnAmpt soilInfil
Definition lid.h:186
double newDrainFlow
Definition lid.h:197
int drainSubcatch
Definition lid.h:182
Definition lid.h:91
double thickness
Definition lid.h:92
double regenDegree
Definition lid.h:98
double impervFrac
Definition lid.h:94
double clogFactor
Definition lid.h:96
double voidFrac
Definition lid.h:93
double regenDays
Definition lid.h:97
double kSat
Definition lid.h:95
Definition lid.h:102
double wiltPoint
Definition lid.h:106
double fieldCap
Definition lid.h:105
double suction
Definition lid.h:107
double porosity
Definition lid.h:104
double kSat
Definition lid.h:108
double kSlope
Definition lid.h:109
double thickness
Definition lid.h:103
Definition lid.h:113
double thickness
Definition lid.h:114
int covered
Definition lid.h:118
double voidFrac
Definition lid.h:115
double clogFactor
Definition lid.h:117
double kSat
Definition lid.h:116
Definition lid.h:80
double voidFrac
Definition lid.h:82
double roughness
Definition lid.h:83
double alpha
Definition lid.h:86
double thickness
Definition lid.h:81
double surfSlope
Definition lid.h:84
char canOverflow
Definition lid.h:87
double sideSlope
Definition lid.h:85
Definition lid.h:154
double initVol
Definition lid.h:160
double inflow
Definition lid.h:155
double evap
Definition lid.h:156
double infil
Definition lid.h:157
double surfFlow
Definition lid.h:158
double finalVol
Definition lid.h:161
double drainFlow
Definition lid.h:159