OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
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
37#ifndef LID_H
38#define LID_H
39
40#include <stdlib.h>
41#include <stdio.h>
42#include <string.h>
43#include "infil.h"
44
45//-----------------------------------------------------------------------------
46// Enumerations
47//-----------------------------------------------------------------------------
49 BIO_CELL, // bio-retention cell
50 RAIN_GARDEN, // rain garden
51 GREEN_ROOF, // green roof
52 INFIL_TRENCH, // infiltration trench
53 POROUS_PAVEMENT, // porous pavement
54 RAIN_BARREL, // rain barrel
55 VEG_SWALE, // vegetative swale
56 ROOF_DISCON}; // roof disconnection
57
59 PREVIOUS, // previous time period
60 CURRENT}; // current time period
61
62//-----------------------------------------------------------------------------
63// Data Structures
64//-----------------------------------------------------------------------------
65#define MAX_LAYERS 4
66
67// LID Surface Layer
68typedef struct
69{
70 double thickness; // depression storage or berm ht. (ft)
71 double voidFrac; // available fraction of storage volume
72 double roughness; // surface Mannings n
73 double surfSlope; // land surface slope (fraction)
74 double sideSlope; // swale side slope (run/rise)
75 double alpha; // slope/roughness term in Manning eqn.
76 char canOverflow; // 1 if immediate outflow of excess water
78
79// LID Pavement Layer
80typedef struct
81{
82 double thickness; // layer thickness (ft)
83 double voidFrac; // void volume / total volume
84 double impervFrac; // impervious area fraction
85 double kSat; // permeability (ft/sec)
86 double clogFactor; // clogging factor
87 double regenDays; // clogging regeneration interval (days)
88 double regenDegree; // degree of clogging regeneration
90
91// LID Soil Layer
92typedef struct
93{
94 double thickness; // layer thickness (ft)
95 double porosity; // void volume / total volume
96 double fieldCap; // field capacity
97 double wiltPoint; // wilting point
98 double suction; // suction head at wetting front (ft)
99 double kSat; // saturated hydraulic conductivity (ft/sec)
100 double kSlope; // slope of log(K) v. moisture content curve
101} TSoilLayer;
102
103// LID Storage Layer
104typedef struct
105{
106 double thickness; // layer thickness (ft)
107 double voidFrac; // void volume / total volume
108 double kSat; // saturated hydraulic conductivity (ft/sec)
109 double clogFactor; // clogging factor
110 int covered; // TRUE if rain barrel is covered
112
113// Underdrain System (part of Storage Layer)
114typedef struct
115{
116 double coeff; // underdrain flow coeff. (in/hr or mm/hr)
117 double expon; // underdrain head exponent (for in or mm)
118 double offset; // offset height of underdrain (ft)
119 double delay; // rain barrel drain delay time (sec)
120 double hOpen; // head when drain opens (ft)
121 double hClose; // head when drain closes (ft)
122 int qCurve; // curve controlling flow rate (optional)
124
125// Drainage Mat Layer (for green roofs)
126typedef struct
127{
128 double thickness; // layer thickness (ft)
129 double voidFrac; // void volume / total volume
130 double roughness; // Mannings n for green roof drainage mats
131 double alpha; // slope/roughness term in Manning equation
133
134// LID Process - generic LID design per unit of area
135typedef struct
136{
137 char* ID; // identifying name
138 int lidType; // type of LID
139 TSurfaceLayer surface; // surface layer parameters
140 TPavementLayer pavement; // pavement layer parameters
141 TSoilLayer soil; // soil layer parameters
142 TStorageLayer storage; // storage layer parameters
143 TDrainLayer drain; // underdrain system parameters
144 TDrainMatLayer drainMat; // drainage mat layer
145 double* drainRmvl; // underdrain pollutant removals
146} TLidProc;
147
148// Water Balance Statistics
149typedef struct
150{
151 double inflow; // total inflow (ft)
152 double evap; // total evaporation (ft)
153 double infil; // total infiltration (ft)
154 double surfFlow; // total surface runoff (ft)
155 double drainFlow; // total underdrain flow (ft)
156 double initVol; // initial stored volume (ft)
157 double finalVol; // final stored volume (ft)
159
160// LID Report File
161typedef struct
162{
163 FILE* file; // file pointer
164 int wasDry; // number of successive dry periods
165 char results[256]; // results for current time period
167
168// LID Unit - specific LID process applied over a given area
169typedef struct
170{
171 int lidIndex; // index of LID process
172 int number; // number of replicate units
173 double area; // area of single replicate unit (ft2)
174 double fullWidth; // full top width of single unit (ft)
175 double botWidth; // bottom width of single unit (ft)
176 double initSat; // initial saturation of soil & storage layers
177 double fromImperv; // fraction of impervious area runoff treated
178 double fromPerv; // fraction of pervious area runoff treated
179 int toPerv; // 1 if outflow sent to pervious area; 0 if not
180 int drainSubcatch; // subcatchment receiving drain flow
181 int drainNode; // node receiving drain flow
182 TLidRptFile* rptFile; // pointer to detailed report file
183
184 TGrnAmpt soilInfil; // infil. object for biocell soil layer
185 double surfaceDepth; // depth of ponded water on surface layer (ft)
186 double paveDepth; // depth of water in porous pavement layer
187 double soilMoisture; // moisture content of biocell soil layer
188 double storageDepth; // depth of water in storage layer (ft)
189
190 // net inflow - outflow from previous time step for each LID layer (ft/s)
191 double oldFluxRates[MAX_LAYERS];
192
193 double dryTime; // time since last rainfall (sec)
194 double oldDrainFlow; // previous drain flow (cfs)
195 double newDrainFlow; // current drain flow (cfs)
196 double volTreated; // total volume treated (ft)
197 double nextRegenDay; // next day when unit regenerated
198 TWaterBalance waterBalance; // water balance quantites
199} TLidUnit;
200
201//-----------------------------------------------------------------------------
202// LID Methods
203//-----------------------------------------------------------------------------
204void lid_create(int lidCount, int subcatchCount);
205void lid_delete(void);
206
207int lid_readProcParams(char* tok[], int ntoks);
208int lid_readGroupParams(char* tok[], int ntoks);
209
210void lid_validate(void);
211void lid_initState(void);
212void lid_setOldGroupState(int subcatch);
213
214double lid_getPervArea(int subcatch);
215double lid_getFlowToPerv(int subcatch);
216double lid_getDrainFlow(int subcatch, int timePeriod);
217double lid_getStoredVolume(int subcatch);
218void lid_addDrainLoads(int subcatch, double c[], double tStep);
219void lid_addDrainRunon(int subcatch);
220void lid_addDrainInflow(int subcatch, double f);
221void lid_getRunoff(int subcatch, double tStep);
222void lid_writeSummary(void);
223void lid_writeWaterBalance(void);
224
225//-----------------------------------------------------------------------------
226
227void lidproc_initWaterBalance(TLidUnit *lidUnit, double initVol);
228
229double lidproc_getOutflow(TLidUnit* lidUnit, TLidProc* lidProc,
230 double inflow, double evap, double infil, double maxInfil,
231 double tStep, double* lidEvap, double* lidInfil, double* lidDrain);
232
233void lidproc_saveResults(TLidUnit* lidUnit, double ucfRainfall,
234 double ucfRainDepth);
235
236#endif
double lid_getStoredVolume(int subcatch)
Definition lid.c:1401
void lid_delete(void)
Definition lid.c:308
int lid_readProcParams(char *tok[], int ntoks)
Definition lid.c:359
void lid_addDrainLoads(int subcatch, double c[], double tStep)
Definition lid.c:1446
void lid_addDrainInflow(int subcatch, double f)
Definition lid.c:1553
void lid_create(int lidCount, int subcatchCount)
Definition lid.c:241
LidTypes
Definition lid.h:48
@ RAIN_GARDEN
Definition lid.h:50
@ BIO_CELL
Definition lid.h:49
@ ROOF_DISCON
Definition lid.h:56
@ VEG_SWALE
Definition lid.h:55
@ GREEN_ROOF
Definition lid.h:51
@ RAIN_BARREL
Definition lid.h:54
@ INFIL_TRENCH
Definition lid.h:52
@ POROUS_PAVEMENT
Definition lid.h:53
double lid_getPervArea(int subcatch)
Definition lid.c:1374
double lid_getFlowToPerv(int subcatch)
Definition lid.c:1387
int lid_readGroupParams(char *tok[], int ntoks)
Definition lid.c:419
void lid_getRunoff(int subcatch, double tStep)
Definition lid.c:1613
void lid_validate(void)
Definition lid.c:922
void lid_addDrainRunon(int subcatch)
Definition lid.c:1501
TimePeriod
Definition lid.h:58
@ CURRENT
Definition lid.h:60
@ PREVIOUS
Definition lid.h:59
void lid_setOldGroupState(int subcatch)
Definition lid.c:1306
void lidproc_saveResults(TLidUnit *lidUnit, double ucfRainfall, double ucfRainDepth)
Definition lidproc.c:360
double lidproc_getOutflow(TLidUnit *lidUnit, TLidProc *lidProc, double inflow, double evap, double infil, double maxInfil, double tStep, double *lidEvap, double *lidInfil, double *lidDrain)
Definition lidproc.c:197
void lid_writeWaterBalance(void)
Definition lid.c:1908
double lid_getDrainFlow(int subcatch, int timePeriod)
Definition lid.c:1428
#define MAX_LAYERS
Definition lid.h:65
void lidproc_initWaterBalance(TLidUnit *lidUnit, double initVol)
Definition lidproc.c:178
void lid_initState(void)
Definition lid.c:1215
void lid_writeSummary(void)
Definition lid.c:873
Definition lid.h:115
double offset
Definition lid.h:118
double delay
Definition lid.h:119
double hClose
Definition lid.h:121
double coeff
Definition lid.h:116
int qCurve
Definition lid.h:122
double hOpen
Definition lid.h:120
double expon
Definition lid.h:117
Definition lid.h:127
double voidFrac
Definition lid.h:129
double alpha
Definition lid.h:131
double thickness
Definition lid.h:128
double roughness
Definition lid.h:130
Definition infil.h:55
Definition lid.h:136
TSurfaceLayer surface
Definition lid.h:139
TDrainMatLayer drainMat
Definition lid.h:144
TSoilLayer soil
Definition lid.h:141
TPavementLayer pavement
Definition lid.h:140
TStorageLayer storage
Definition lid.h:142
double * drainRmvl
Definition lid.h:145
char * ID
Definition lid.h:137
TDrainLayer drain
Definition lid.h:143
int lidType
Definition lid.h:138
Definition lid.h:162
FILE * file
Definition lid.h:163
int wasDry
Definition lid.h:164
Definition lid.h:170
double dryTime
Definition lid.h:193
TWaterBalance waterBalance
Definition lid.h:198
double oldDrainFlow
Definition lid.h:194
int toPerv
Definition lid.h:179
double volTreated
Definition lid.h:196
double surfaceDepth
Definition lid.h:185
double initSat
Definition lid.h:176
double fromPerv
Definition lid.h:178
double area
Definition lid.h:173
double storageDepth
Definition lid.h:188
int drainNode
Definition lid.h:181
int lidIndex
Definition lid.h:171
double soilMoisture
Definition lid.h:187
double botWidth
Definition lid.h:175
double fromImperv
Definition lid.h:177
int number
Definition lid.h:172
TLidRptFile * rptFile
Definition lid.h:182
double nextRegenDay
Definition lid.h:197
double fullWidth
Definition lid.h:174
double paveDepth
Definition lid.h:186
TGrnAmpt soilInfil
Definition lid.h:184
double newDrainFlow
Definition lid.h:195
int drainSubcatch
Definition lid.h:180
Definition lid.h:81
double thickness
Definition lid.h:82
double regenDegree
Definition lid.h:88
double impervFrac
Definition lid.h:84
double clogFactor
Definition lid.h:86
double voidFrac
Definition lid.h:83
double regenDays
Definition lid.h:87
double kSat
Definition lid.h:85
Definition lid.h:93
double wiltPoint
Definition lid.h:97
double fieldCap
Definition lid.h:96
double suction
Definition lid.h:98
double porosity
Definition lid.h:95
double kSat
Definition lid.h:99
double kSlope
Definition lid.h:100
double thickness
Definition lid.h:94
Definition lid.h:105
double thickness
Definition lid.h:106
int covered
Definition lid.h:110
double voidFrac
Definition lid.h:107
double clogFactor
Definition lid.h:109
double kSat
Definition lid.h:108
Definition lid.h:69
double voidFrac
Definition lid.h:71
double roughness
Definition lid.h:72
double alpha
Definition lid.h:75
double thickness
Definition lid.h:70
double surfSlope
Definition lid.h:73
char canOverflow
Definition lid.h:76
double sideSlope
Definition lid.h:74
Definition lid.h:150
double initVol
Definition lid.h:156
double inflow
Definition lid.h:151
double evap
Definition lid.h:152
double infil
Definition lid.h:153
double surfFlow
Definition lid.h:154
double finalVol
Definition lid.h:157
double drainFlow
Definition lid.h:155