【水动力学】04 二维洪水淹没模型Pypims安装

模型介绍

HiPIMS(High-Performance Integrated hydrodynamic Modelling System)使用最先进的数值方案(Godunov型有限体积法)来求解二维浅水方程以进行洪水模拟。为了支持高分辨率洪水模拟,使用CUDA/C ++语言在多个GPU上实现了HiPIMS,以实现高性能计算。由于HiPIMS具有模块化和灵活的结构,因此只要问题可以在均匀的矩形网格上解决,就可以进一步开发用于水文科学的其他应用。

HiPIMS由水力环境建模实验室开发和维护,HiPIMS的开发由梁秋华(Qiuhua Liang)教授领导,凝聚了将近二十年的心血和众多研究人员的努力。

Pypims 是HiPIMS的Python API,该API提供了一个用户友好的集成工具链,用于准备输入,运行HiPIMS和可视化输出。完整的文档在https://pypims.readthedocs.io/en/latest/上。

第一种安装方式:编译安装

Pypims 是一个Python第三方库,源代码已经在Github开源,按照说明书 在Win 11电脑上安装成功。步骤记录如下。

计算机环境

我的计算机操作系统为Windows 11 专业工作站版,版本号23H2。

系统类型是64 位操作系统, 基于 x64 的处理器。

处理器为12th Gen Intel® Core™ i7-12700 2.10 GHz,内存为 96 GB。

GPU为NVIDIA RTX A4000,显存为 16 GB,驱动版本为576.02,CUDA版本为12.9。

安装Miniconda

Miniconda是Anaconda的轻量级版本,由Continuum Analytics(现Anaconda Inc.)开发。通过Miniconda,用户可高效管理项目依赖,平衡灵活性与资源消耗。

安装Git

从Git官方网站下载安装程序:
Git官网下载页面

运行下载的.exe文件,按照安装向导默认选项完成安装。安装完成后,在命令提示符或PowerShell中输入 git --version 验证是否安装成功。

安装完成后需设置用户名和邮箱:

bash 复制代码
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

使用 git config --list 可查看当前配置。

安装Visual Studio

Visual Studio 是由微软开发的集成开发环境(IDE),支持多种编程语言(如 C#, C++, Python, JavaScript 等)和平台(Windows, Web, 移动端等)。

安装免费的Visual Studio Community版本,并安装C++负载。

安装NVIDIA CUDA Toolkit

CUDA Toolkit可以从NVIDIA网站下载。

安装完成后,设置环境变量。

克隆Pypims项目

进入欲安装的文件夹,在命令提示符工具中,输入以下命令

bash 复制代码
git clone https://github.com/pypims/pypims.git
cd pypims

如果连接不上Github,可以设置网络代理。

修改CmakeLists

当前 CUDA 版本或显卡驱动 不再支持 sm_35。因此需要在Pypims项目文件./pypims/pypims/CMakeLists.txt中,去掉对sm_35的支持,并替换为本机显卡支持的Compute Capability(sm_86)。

CUDA GPU Compute Capability查询网址:https://developer.nvidia.com/cuda-gpus

复制代码
RTX A4000 → Compute Capability = 8.6 → sm_86

IF(WIN32)
    set(PLATFORM_CXX_FLAGS /Zi)
    set(CUDA_SEPARABLE_COMPILATION ON)
    set(CUDA_NVCC_FLAGS -arch=sm_86;--expt-extended-lambda)
ENDIF(WIN32)

修改cuda_data_bank.cu

在./pypims/pypims/lib/src/multi_threading/cuda_data_bank.cu代码中,使用了 HEMI_DEV_CALLABLE_INLINE_MEMBER 宏,它的作用是用来兼容 GPU 和 CPU 编译环境。而 HEMI 本身不再与新版本 CUDA(>= 11)和 Thrust 完美兼容。再加上我使用的是 CUDA 12.9,在编译时会触发如下错误:

复制代码
error : static assertion failed with "unimplemented for this system"

这主要是 Thrust 在执行 thrust::device_vector<GC::Vector3>.resize() 操作时,无法推导出如何用你提供的构造器在 device 上初始化对象。

解决方案是手动定义 thrust::device_vector<GC::Vector3> 时不要使用 .resize(n)

cpp 复制代码
// 不推荐
thrust::device_vector<GC::Vector3> v;
v.resize(n);  // ❌ 这会默认构造 device 端 Vector3,如果 Thrust 不支持就会崩溃

// 推荐
std::vector<GC::Vector3> host_vec(n, GC::Vector3(0, 0, 0));
thrust::device_vector<GC::Vector3> v = host_vec;

因此对cuda_data_bank.cu文件的cuDataBankBranch函数修改为

cpp 复制代码
  cuDataBankBranch::cuDataBankBranch(unsigned int _size_lower2receive, unsigned int _size_lower2send, unsigned int _size_upper2receive, unsigned int _size_upper2send)
    :size_lower2receive(_size_lower2receive), size_lower2send(_size_lower2send), size_upper2receive(_size_upper2receive), size_upper2send(_size_upper2send){
    lower_status = 0;
    std::vector<GC::Vector3> host_vec1(size_lower2receive, GC::Vector3(0, 0, 0));
    data_lower = host_vec1;
    indices_lower2receive = host_vec1;
    std::vector<GC::Vector3> host_vec2(size_lower2send, GC::Vector3(0, 0, 0));
    indices_lower2send = host_vec2;
    upper_status = 0;
    std::vector<GC::Vector3> host_vec3(size_upper2receive, GC::Vector3(0, 0, 0));
    data_upper = host_vec3;
    indices_upper2receive = host_vec3;
    std::vector<GC::Vector3> host_vec4(size_upper2send, GC::Vector3(0, 0, 0));
    indices_upper2send = host_vec4;
  }

创建虚拟环境

虚拟环境:允许创建隔离的Python环境,避免依赖冲突。

用管理员方式打开Anaconda Prompt,创建 Conda 虚拟环境

bash 复制代码
conda create -n pypims python=3.7 -y

安装依赖

激活环境

bash 复制代码
conda activate pypims

安装Cmake

bash 复制代码
conda install cmake -y

安装GDAL

bash 复制代码
conda install gdal -y

用相同的方式安装./pypims/docs/requirements.txt中列出的所有库

bash 复制代码
conda install rasterio -y
conda install fiona -y
conda install numpy -y
conda install scipy -y
conda install matplotlib -y
conda install imageio -y
conda install pandas -y
conda install pyshp -y
conda install "sphinx>=4.1" -y
conda install "sphinx-rtd-theme>=1.0.0" -y
conda install nbsphinx -y

安装ipykernel,用于在Visual Studio Code中运行Jupyter Notebook的demo。

bash 复制代码
conda install ipykernel -y

安装Pypims

在Pypims文件夹中,打开Anaconda Prompt,进入pypims环境,输入命令

bash 复制代码
python setup.py install

安装完成。

第二种安装方式:Conda直接安装

在安装完Miniconda、Git、Visual Studio、NVIDIA CUDA Toolkit后,创建虚拟环境,并安装所有依赖。

然后在虚拟环境中,输入以下命令,直接安装Pypims。

注意:此方式未经测试,可能会遇到错误。

bash 复制代码
conda install pypims

或者

bash 复制代码
pip install pypims

运行洪水淹没模拟案例

根据Pypims官方提供的教程,使用Visual Studio Code打开./pypims/docs/source/Tutorials/flood.ipynb,选择Python环境pypims,运行flood.ipynb,学习Pypims的使用。

相关推荐
长和信泰光伏储能12 分钟前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂37 分钟前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study1 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境2 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境2 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1232 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102163 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb003 小时前
一个项目带你入门AI应用开发01
python
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习
昆曲之源_娄江河畔3 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql