pacific standard timeSWMM模型代码LID(LowImpactDevelopment)模块分析 LID 英⽂的全称是Low Impact Development,是20世纪90年代末发展起的暴⾬管理和⾯源污染处理技术,旨在通过分散的,⼩规模的源头控制来达到对暴⾬所产⽣的径流和污染的控制,使开发地区尽量接近于⾃然的⽔⽂循环。
LID 低影响开发是⼀种可轻松实现城市⾬⽔收集利⽤的⽣态技术体系,其关键在于原位收集、⾃然净化、就近利⽤或回补地下⽔。
主要包含:⽣态植草沟、下凹式绿地、⾬⽔花园、绿⾊屋顶、地下蓄渗、透⽔路⾯。
SWMM模型LID部分的代码在lid.c 和lid.h⽂件中,
whosyourdaddy
SWMM模型中⽀持的LID措施类型包含了五种:BIO_CELL ( bio-retention cell ⽣物截留单元) , INFIL_TRENCH ( infiltration trench 渗透沟), POROUS_PAVEMENT( porous pavement 透⽔铺装), RAIN_BARREL( rain barrel ⾬⽔桶) ,VEG_SWALE( vegetative swale 植被浅沟). 类型定义位于lid.c⽂件中。 如果需要增加⾃定义的类型可以在lidTypes 枚举类型中增加。
enum LidTypes {
BIO_CELL, // bio-retention cell
INFIL_TRENCH, // infiltration trench
POROUS_PAVEMENT, // porous pavement
RAIN_BARREL, // rain barrel
VEG_SWALE // vegetative swale
}
每种LID措施在模型计算过程最多含有5层。分别是SURF,SOIL,STOR,PAVE,DRAIN。 定义在lid.c中
enum LidLayerTypes {
SURF, // surface layer
SOIL, // soil layer
STOR, // storage layer
PAVE, // pavement layer
DRAIN}; // underdrain system
模型开始计算前,在Project.c⽂件中根据INP⽂件的输⼊创建lid objects。代码位于 Project.c⽂件createObjects函数中。
// --- create LID objects //(5.0.019 - LR)
osmondlid_create(Nobjects[LID], Nobjects[SUBCATCH]); //(5.0.019 - LR)
validateLidProc函数对每个lid措施的参数进⾏校验,如果参数出错会打印异常,这些异常就是在SWMM模型运⾏时候经常出现的,⽐如和LID措施相关的错误:
1//// Error messages added for SWMM5 LID edition. //// //(5.0.019 - LR)
2#define ERR183 "\n ERROR 183: no type specified for LID %s."
3#define ERR184 "\n ERROR 184: missing layer for LID %s."
optimal4#define ERR185 "\n ERROR 185: invalid parameter value for LID %s."
5#define ERR186 "\n ERROR 186: invalid parameter value for LID placed in Subcatchment %s."
6#define ERR187 "\n ERROR 187: LID area exceeds total area for Subcatchment %s."
ixia参数校验主要时候检查每个LID措施是否有相应的层。另外还会对⼀些参数的⼤⼩进⾏⽐较,⽐如萎蔫点的值应当⼩于⽥间持⽔量的值等。
//... check pavement layer parameters
if ( LidProcs[j].lidType == POROUS_PAVEMENT )
{
if ( LidProcs[j].pavement.thickness <= 0.0
|| LidProcs[j].pavement.kSat <= 0.0
八年级英语上册|| LidProcs[j].pavement.voidFrac <= 0.0
公务员面试注意事项|| LidProcs[j].pavement.voidFrac > 1.0
|| LidProcs[j].pavement.impervFrac > 1.0 )
report_writeErrorMsg(ERR_LID_PARAMS, LidProcs[j].ID);
}
modify是什么意思
//... check soil layer parameters
if ( LidProcs[j].soil.thickness > 0.0 )
{
if ( LidProcs[j].soil.porosity <= 0.0
|| LidProcs[j].soil.fieldCap >= LidProcs[j].soil.porosity
|| LidProcs[j].soil.wiltPoint >= LidProcs[j].soil.fieldCap
|| LidProcs[j].soil.kSat <= 0.0
|| LidProcs[j].soil.kSlope < 0.0 )
report_writeErrorMsg(ERR_LID_PARAMS, LidProcs[j].ID);
}
//... check storage layer parameters
if ( LidProcs[j].storage.thickness > 0.0 )
{
完成了LID措施的参数校验后,开始进⾏循环计算。
getLidOutflow函数中计算每个LID措施在单位⾯积上的出流。在getLidOutflow函数中有fluxRates这个变量,这是⼀个函数指针,通过这个函数指针,根据每个LID措施的类型,指向某个类型的计算函数。这样保证每个LID措施调⽤的计算⽅式都是⼀致的。
//... determine which flux rate function to u
雅思报名条件switch (theLidProc->lidType)
{
ca BIO_CELL: fluxRates = &biocellFluxRates; break;
ca INFIL_TRENCH: fluxRates = &trenchFluxRates; break;
ca POROUS_PAVEMENT: fluxRates = &pavementFluxRates; break;
ca RAIN_BARREL: fluxRates = &barrelFluxRates; break;
ca VEG_SWALE: fluxRates = &swaleFluxRates; break;
完成计算后,返回单位⾯积上的出流。
四六级成绩