PyFR上手指南

通量重构(FR)格式是一种高精度紧致型流体数值格式。PyFR 是一个开源 CFD 包,采用非常精确的FR格式来处理世界上最具挑战性的一些流体流动问题。尤其是涉及不平稳湍流的问题。相关的博客可见Nvidia博客。PyFR的官网上提供了下载和手册。本文是基于以上内容的一篇入门指南,操作平台为Ubuntu 19.10。

安装

  1. 安装基本的依赖,命令为
sudo pip3 install xxx

其中xxx包括:

appdirs >= 1.4.0
gimmik >= 2.0
h5py >= 2.6
mako >= 1.0.0
mpi4py >= 2.0
numpy >= 1.8
pytools >= 2016.2.1
  1. 检查gcc版本:gcc --version,应当不小于4.9。
  2. 安装其余的依赖:
sudo apt install python3 python3-pip libopenmpi-dev openmpi-bin
sudo apt install metis libmetis-dev libblas3
pip3 install virtualenv
  1. 安装paraview:sudo apt install paraview
  2. 设置虚拟环境:
python3 -m virtualenv ENV3
source ENV3/bin/activate

并在虚拟环境中安装PyFR:pip install pyfr

运行命令

PyFR 使用三种文件格式:

  • .ini——参数文件
  • .pyfrm——网格文件
  • .pyfrs——解文件

PyFR 提供若干命令:

  • pyfr import——导入.msh或.pyfrm格式文件,内含网格信息。例如:pyfr import mesh.msh mesh.pyfrm
  • pyfr partition——切分已有网格及其相关的解文件。例如:pyfr partition 2 mesh.pyfrm solution.pyfrs .
  • pyfr run——运行一个仿真。例如:pyfr run mesh.pyfrm configuration.ini
  • pyfr restart——根据已有的解文件重启一个仿真。例如:pyfr restart mesh.pyfrm solution.pyfrs
  • pyfr export——将.pyfrs文件转换为非结构VTK.vtupvtu文件。

要以并行方式运行PyFR,在pyfr命令前使用前缀mpiexec -n <cores/devices>。注意,网格应当提前切分好,cores或devices的数量必须等于分区数。然后在pyfr run后面加上并行参数:-b cuda——Cuda并行,-b openmp——OpenMP并行,-b opencl——OpenCL并行。如果之前的操作无误,此时应当可以直接用OpenMP。而Cuda和OpenCL则需要自行安装。

示例:二维欧拉涡

以OpenMP为例。从PyFR网站上下载源代码,把其中的examples文件夹拷到一个合适的工作目录。在euler_vortex_2d文件夹里打开终端。

  1. 首先,启动python虚拟环境:source ~/ENV3/bin/activate
  2. 转换网格文件:pyfr import euler_vortex_2d.msh euler_vortex_2d.pyfrm
  3. 切分网格为两个分区:pyfr partition 2 euler_vortex_2d.pyfrm .
  4. 运行:mpiexec -n 2 pyfr run -b openmp -p euler_vortex_2d.pyfrm euler_vortex_2d.ini
    (注意:这里并行参数是-b openmp,手册原文是-b cuda-n 2对应于第3步的两个分区。)
  5. 把最后一帧数据转换为.vtu格式文件。命令为:pyfr export euler_vortex_2d.pyfrm euler_vortex_2d-100.0.pyfrs euler_vortex_2d-100.0.vtu -d 4
    这个命令里有两点要说明:一是要带上.pyfrm文件,二是最后使用参数-d 4,其含义是把单元细分为4个线性子单元以提高显示精度。
  6. 用Paraview打开.vtu文件。速度场如下:速度场

后记

特别要指出,从以上的算例来看,用OpenMP并行的线程数n恰好等于电脑物理核心数时速度最快,否则会急剧减慢。例如在我的笔记本上,-n 2运行时间仅为19秒,而-n 4或单线程却耗费几小时。说实话没看懂为什么差别这么大。

猜你喜欢

转载自blog.csdn.net/iamzhtr/article/details/103112959