【水动力学】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的使用。

相关推荐
2301_764441335 分钟前
Python常见的排序算法及其特点和实现代码
python·算法·排序算法
MediaTea13 分钟前
Python 编辑器:IDLE
开发语言·python·编辑器
ones~16 分钟前
Python 简单算法题精选与题解汇总
数据结构·python·算法
Madison-No721 分钟前
【C++】string类的常见接口的使用
开发语言·c++·算法
胡耀超27 分钟前
开源生态与技术民主化 - 从LLaMA到DeepSeek的开源革命(LLaMA、DeepSeek-V3、Mistral 7B)
人工智能·python·神经网络·开源·大模型·llama·deepseek
一只雄牧慕29 分钟前
【C++】哈希表
开发语言·数据结构·c++·散列表
代码村新手1 小时前
C语言-操作符
开发语言·c++
老赵的博客1 小时前
c++ 之多态虚函数表
java·jvm·c++
站大爷IP1 小时前
Python字典:高效数据管理的瑞士军刀
python
liu****1 小时前
负载均衡式的在线OJ项目编写(四)
运维·c++·负载均衡·个人开发