SWMM模型代码LID(Low Impact Development)模块分析

mac2022-06-30  98

 LID 英文的全称是Low Impact Development,是20世纪90年代末发展起的暴雨管理面源污染处理技术,旨在通过分散的,小规模的源头控制来达到对暴雨所产生的径流和污染的控制,使开发地区尽量接近于自然的水文循环。    LID 低影响开发是一种可轻松实现城市雨水收集利用的生态技术体系,其关键在于原位收集自然净化就近利用回补地下水    主要包含:生态植草沟下凹式绿地雨水花园绿色屋顶地下蓄渗透水路面

SWMM模型LID部分的代码在lid.c 和lid.h文件中,

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) lid_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." 4 #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."

 参数校验主要时候检查每个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); } //... 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 use switch (theLidProc->lidType) { case BIO_CELL: fluxRates = &biocellFluxRates; break; case INFIL_TRENCH: fluxRates = &trenchFluxRates; break; case POROUS_PAVEMENT: fluxRates = &pavementFluxRates; break; case RAIN_BARREL: fluxRates = &barrelFluxRates; break; case VEG_SWALE: fluxRates = &swaleFluxRates; break;

完成计算后,返回单位面积上的出流。                                                                                                                                                          

 

 参考链接:http://www2.epa.gov/science-and-technology/water

               http://gp.zhulong.com/topic_LID.html

转载于:https://www.cnblogs.com/WaterInfor/archive/2013/02/02/2890010.html

相关资源:SWMM51014代码编译及扩展案例
最新回复(0)