武理排水管网模拟分析系统应用专题1:开发环境设置(Windows操作系统)

1 武理排水管网模拟分析系统简介

武理排水管网模拟分析系统是基于SWMM深度二次开发的成果。其一维水力模型以SWMM为基础,利用C++对SWMM源代码进行了面向对象封装. 实现一个对象即是一个排水模型, 并且扩展了水动力计算模块使其支持一维、二维耦合水动力 计算,可以将其与SWEsolver模块配合实现城市排水管网水文水动力耦合模拟。在网络分析及结果分析方面也提供了更加丰富的功能。武理排水管网模拟分析系统本身是一个二次开发平台,可以利用该平台实现桌面程序的开发以及webapi的开发。

2 软件内容简介

软件托管在码云上,软件下载地址,以压缩文件下载后进行解压缩,其中有两个文件夹:software和Benchmarks。software是软件的主要内容,Benchmarks是用于检验模拟结果的案例。

2.1 software文件夹内容

2.1.1 bin文件夹

bin文件夹里面是编译后的成果以及运行辅助文件,

2.1.1.1 Debug及Release文件夹

保存了Debug及Release编译成果。

  • SWMMCPP.dll为一维水力模拟模块;
  • SweSolver.dll为二维水力模拟模块;
  • SweSolver_cuda.dll为使用CUDA架构的二维水力模拟模块,可以在配备‌NVIDIA GPU‌的设备上提高二维计算的效率;
  • Coupler.dll为一二模拟耦合器,负责一二维模型间数据交换;
  • SwmmWrapper.dll及SweWarpper.dll,整个软件采用C++开发,因此采用C++使用该平台没有问题,如果想使用C#进行开发需要提供相应的适配函数,该两个模块提供了C#调用的适配函数;
  • swmmTest.exe,SweCalling.exe,SweCalling_cuda.exe为通过命令调用计算模块的工具。
2.1.1.2 gdal-dev以及share文件夹

这两个文件夹包含了gdal模块运行时所需文件,与开发无关。需要将gdal-dev文件夹路径设置到环境变量path中,将share中的proj文件夹路径设置到环境变量的PROJ_LIB变量中。设置环境变量的工作可以通过双击envset.bat文件实现。也可以将该两个文件夹内容拷贝至开发成果所在运行目录中。

2.1.2 include文件夹

开发过程中需要用到的头文件

2.1.3 lib文件夹

库文件

2.1.4 doc文件夹

开发帮助文档

2.1.5 tutorial文件夹

开发教学实例

2.2 Benchmarks文件夹内容

该文件夹中保存了一些经典的二维浅水方程求解案例,可以通过案例结果展示计算模块的计算精度。

3 项目开发

按照上面内容下载软件,设置环境变量成功后,可以双击运行swmmTest.exe,如果出现如下结果则说明开发平台可用。

输入quit退出程序.接下来以Visual Studio2022为开发环境演示创建C++项目并使用武理排水管网模拟分析系统进行模拟计算.

3.1 新建项目

新建C++空项目

在项目中添加main.cpp文件

项目配置属性->常规->C++语言标准:选择"ISO C++17 标准 (/std:c++17)"或者更高版本

项目配置属性->高级->字符集:选择"使用 Unicode 字符集"

项目配置属性->C/C+±>常规->附加包含目录:添加software/include中的5个文件夹

项目配置属性->链接器->常规->附加库目录:添加software/lib文件夹

项目配置属性->链接器->输入->附加依赖项:

  • 进行一维模拟,添加SWMMCPP.lib
  • 进行耦合模拟,添加SWMMCPP.lib, SWEsolver.lib和gdal_i.lib
  • 进行使用CUDA架构的耦合模拟,添加SWMMCPP.lib, SWEsolver_cuda.lib和gdal_i.lib

3.2 添加代码

在main.cpp中添加如下代码

cpp 复制代码
#include "Iswmm_simu.h"
#include "swmm_cs.h"
int main()
{
	ISwmmSimulation* pswmm = nullptr;
	if (GetSwmmSimulation((void**)&pswmm) == 0)
		printf("create swmm simulation interface successfully\n");
	else
		return 0;
	//inp文件路径,替换为你的inp所在位置
	std::string inpFilePath = "C:/Baiduyun/program/HTwater/software/tutorial/exp_swmmcpp_calling/swmm_network/network.inp";
	std::string rptFilePath = inpFilePath;
	rptFilePath.replace(rptFilePath.length() - 3, 3, "rpt");
	std::string outFilePath = inpFilePath;
	outFilePath.replace(outFilePath.length() - 3, 3, "out");
	int err = pswmm->swmm_run(inpFilePath.data(), rptFilePath.data(), outFilePath.data());
	if (err == 0)
		printf("swmm_run successfully\n");
	else
		printf("swmm_run failed with error code is %d\n", err);
	//释放资源
	ReleaseSwmmSimulation((void*&)pswmm);
	return 1;
}

3.3 编译运行

编译运行后得如下结果

相关推荐
yaoxin5211232 小时前
276. Java Stream API - 使用 flatMap 和 mapMulti 清理数据并转换类型
java·开发语言·windows
Java开发追求者2 小时前
Mysql超详细安装配置教程(保姆级)
windows·mysql
爱吃山竹的大肚肚2 小时前
在Java中,从List A中找出List B没有的数据(即求差集)
开发语言·windows·python
WLDLSW3 小时前
windows上jupyter notebook增加标题目录功能
ide·windows·jupyter
TM1Club3 小时前
Zoey的TM1聊天室|#3 合并报表提速:业财一体如何实现关联方对账自动化
大数据·开发语言·人工智能·经验分享·数据分析·自动化·数据库系统
金海境科技4 小时前
【服务器数据恢复】影视传媒公司非编系统存储故障数据恢复案例
经验分享
夏幻灵4 小时前
如何理解编译?
经验分享·笔记
李子琪。4 小时前
基于大语言模型的设计创新方法研究
人工智能·经验分享
阿郎_20114 小时前
window10的wsl安装配置ubuntu22.04和docker
运维·windows·ubuntu·docker·容器