Below is a concise explanation of how the landuse.c
module in SWMM manages pollutant buildup and washoff for different land uses.
1. Purpose of landuse.c
This module in SWMM handles how pollutants accumulate (buildup) over time on land surfaces (land uses) and how they are washed off by runoff. In particular, it:
- Reads and stores user-supplied buildup parameters (functions and coefficients).
- Reads and stores washoff parameters (functions and coefficients).
- Computes how pollutant mass accumulates on a land surface over a given dry period, and how that mass is removed by runoff or street sweeping.
- Calculates how some pollutants can produce co-pollutants during washoff.
2. Key Functions
Reading Input
-
landuse_readParams()
:- Reads basic land use parameters (like sweeping interval, sweeping removal fraction, initial days since last sweeping).
- Stores them in the
Landuse[j]
structure.
-
landuse_readPollutParams()
:- Reads pollutant-specific parameters (units, concentration in rain and groundwater, decay/growth rate, co-pollutant index, etc.).
- Saves them to
Pollut[]
.
-
landuse_readBuildupParams()
:- Reads the buildup function type (e.g. power, exponential, saturation, external).
- Reads function coefficients, normalizer (area or curb length), and sets the maximum days to build up (
maxDays
).
-
landuse_readWashoffParams()
:- Reads the washoff function type (exponential, rating curve, or EMC).
- Reads washoff coefficients, exponents, plus sweeping and BMP removal efficiencies.
Computing Initial Buildup
landuse_getInitBuildup()
:- Assigns initial buildup for each pollutant on each land use in a subcatchment.
- If a subcatchment has an initial buildup or an antecedent dry period, it uses the chosen buildup function to find the starting pollutant load.
Updating Buildup
landuse_getBuildup()
:- Main routine to incrementally update pollutant buildup for a land use over a time interval.
- Uses one of the recognized functions (power, exponential, saturation, or external time series).
Washoff Calculation
-
landuse_getWashoffLoad()
:- Calculates how much pollutant mass (e.g., lbs or kg) is washed off during a time step, given:
- The current buildup
- The runoff rate
- The washoff function (exponential, rating curve, or EMC)
- Subtracts the load from the land use’s buildup.
- Considers possible BMP removal fraction.
- Calculates how much pollutant mass (e.g., lbs or kg) is washed off during a time step, given:
-
landuse_getWashoffQual()
:- Returns the concentration of pollutant in washoff (mass per volume).
- Called internally by
landuse_getWashoffLoad()
.
-
landuse_getCoPollutLoad()
:- If pollutant
p
has a co-pollutant (like TSS having a fraction that becomes attached phosphorus), it returns extra mass generated proportionally. - This is added into the overall washoff mass.
- If pollutant
Internal Helpers
-
landuse_getBuildupDays()
andlanduse_getBuildupMass()
:- Convert from “current buildup mass” to “equivalent # of buildup days,” and vice versa.
-
landuse_getExternalBuildup()
:- For “EXTERNAL_BUILDUP” type, obtains a buildup rate from a time series over the time step.
3. How Buildup and Washoff are Modeled
Buildup
SWMM supports several buildup function types:
-
POWER_BUILDUP
-
EXPON_BUILDUP
-
SATUR_BUILDUP
-
EXTERNAL_BUILDUP
- A user-supplied time series that directly prescribes a buildup rate over time.
The user also selects a normalizer: either per unit area or per unit curb length.
Washoff
Several washoff functions are supported:
-
EXPON_WASHOFF
- With a typical form:
for some exponent .
-
RATING_WASHOFF
-
EMC_WASHOFF
- A fixed concentration (Event Mean Concentration), so mass = .
BMP Efficiency & Sweeping
- A fraction of the washoff mass can be removed by a BMP treatment, specified by
bmpEffic
. - Street sweeping can reduce buildup or offset it periodically, governed by an interval, removal fraction, and last-swept day.
4. Flow Through the Code
- Read Land Use & Pollutant Buildup/Washoff
- The user inputs a series of lines specifying the function type, coefficients, normalizer, and BMP/sweeping parameters.
- Initialize
- During subcatchment initialization,
landuse_getInitBuildup()
assigns initial buildup based on an optional initial mass or an antecedent dry day calculation.
- During subcatchment initialization,
- During a Runoff Step
- As time steps progress,
landuse_getBuildup()
is called to incrementally update buildup. - Then,
landuse_getWashoffLoad()
is called whenever runoff occurs to find how much mass leaves with the stormwater. - The rest remains as updated buildup on the surface.
- BMP or co-pollutant processes are accounted for.
- As time steps progress,
- Output
- The resulting washoff load is added to subcatchment runoff quality.
- Buildup is updated for the next time step.
5. Summary
landuse.c
organizes the parameters and calculations for buildup and washoff on each land use within a subcatchment.- Multiple functional forms (power, exponential, saturation, or time-series-based) are supported for the accumulation of pollutants over dry days.
- Washoff uses exponential, rating curve, or EMC-based formulas to transform buildup mass into pollutant runoff concentration.
- Sweeping and BMP removal features further adjust the net washoff load.
- Co-pollutants allow a fraction of the washoff from one pollutant to create mass in another.
No comments:
Post a Comment