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

相关推荐
melonbo3 分钟前
桥接模式C++
开发语言·c++·设计模式·桥接模式
爱刘温柔的小猪12 分钟前
openai-agent使用本地模型并进行流式输出
python·ai
阿群今天学习了吗22 分钟前
label studio 服务器端打开+xshell端口转发设置
linux·运维·服务器·笔记·python
Big Cabbage28 分钟前
python 正则表达式
python·正则表达式
饮浊酒1 小时前
Python学习-----3.基础语法(2)
python·学习
先做个垃圾出来………8 小时前
如何培养自己工程化的能力(python项目)
开发语言·python
mortimer8 小时前
Hugging Face 下载模型踩坑记:从符号链接到网络错误
人工智能·python·ai编程
_多拉不懂A梦9 小时前
FFmepg源码系列-avformat_open_input()
c++·ffmpeg·音视频
amazinging9 小时前
北京-4年功能测试2年空窗-报培训班学测开-第七十三天-投递简历-[特殊字符][特殊字符]
python·学习
码达拉10 小时前
顺序表的总结及模拟实现
数据结构·c++