Andrew Moa Blog Site

OpenFOAM编译安装cfmesh和ccm工具

1. 编译cfmesh

前期编译安装的是com版的OpenFOAM,版本号是v2412,没有附带cfmesh的源码。根据官方文档的提示,需要手动下载cfmesh的源码文件:

cd $WM_PROJECT_DIR
git submodule update --init --recursive plugins/cfmesh

出现以下错误:

fatal: 不是 git 仓库(或者任何父目录):.git

无语了,直接通过git下载源码到指定文件夹,文件夹和URL路径可以查看.gitmodules文件:

cd $WM_PROJECT_DIR
git clone https://develop.openfoam.com/Community/integration-cfmesh.git plugins/cfmesh

进入cfmesh文件夹,开始编译:

cd plugins/cfmesh
./Allwmake -jN # N替换成CPU核心数

运行pMesh,验证是否安装成功:

pMesh -help

2. 编译ccm工具

OpenFOAM的ccm工具包含ccmToFoam和foamToCcm,前者用于将STAR-CCM+输出的ccm格式网格转换成OpenFOAM的网格,后者相反。需要先编译安装第三方库libccmio:

cd $WM_THIRD_PARTY_DIR
# 下载libccmio
wget http://portal.nersc.gov/project/visit/third_party/libccmio-2.6.1.tar.gz
# 备选链接
# wget https://sourceforge.net/projects/foam-extend/files/ThirdParty/libccmio-2.6.1.tar.gz
tar xvzf libccmio-2.6.1.tar.gz	# 解压下载的压缩包
./makeCCMIO	# 运行libccmio的编译程序

接下来编译ccmToFoam:

# 先编译libccm
cd $WM_PROJECT_DIR/src/conversion/ccm
./Allwmake
# 然后编译ccmToFoam和foamToCcm
cd $WM_PROJECT_DIR/applications/utilities/mesh/conversion/ccm
./Allwmake

运行ccmToFoam,验证是否安装成功:

ccmToFoam -help

阅读时长1分钟
Andrew Moa

Ubuntu编译安装SU2

SU2 是一款由斯坦福大学航空航天学院开发的开源CFD求解器,基于C++和Python开发,定位类似于OpenFOAM,但不支持多面体网格。相比OpenFOAM,SU2在高速可压缩流方面的求解更有优势。

下载SU2源代码:

mkdir $HOME/su2code && cd $HOME/su2code
# 只clone最近commit版本,加快下载速度
git clone https://github.com/su2code/SU2.git --depth=1

定义环境变量,新建配置文件su2.env

touch $HOME/su2code/su2.env
chmod +x $HOME/su2code/su2.env
vim $HOME/su2code/su2.env

su2.env文件中加入以下内容,保存退出:

#!/bin/sh

# 定义SU2环境变量
export SU2_RUN=$HOME/su2code/bin	# 编译完成后su2的安装路径
export SU2_HOME=$HOME/su2code/SU2	# 下载su2的源码的文件夹路径
export PATH=$PATH:$SU2_RUN
export PYTHONPATH=$SU2_RUN:$PYTHONPATH

编译程序的配置文件meson_options.txt位于SU2源代码文件夹下,根据自己的需求调整其中的编译选项:

vim $HOME/su2code/SU2/meson_options.txt

这里打开mpi和blas支持,修改以下两行的value:

option('with-mpi',   type : 'feature', value : 'enabled', description: 'enable MPI support')
option('enable-openblas', type : 'boolean', value : true, description: 'enable BLAS and LAPACK support via OpenBLAS')

如果是Intel的机器,建议打开mkl支持。

默认支持的blas库是openblas,要先下载openblas库:

sudo apt install libopenblas-dev -y

进入下载的源码目录,运行编译程序

# 载入环境变量
source $HOME/su2code/su2.env
# 进入源码文件夹
cd $SU2_HOME
# 配置编译器,生成ninja构建文件
# 配置过程中会自动从git上下载外部依赖
# 非常花时间……
./meson.py build --prefix=$SU2_RUN/..
# 开始编译并安装
./ninja -C build install

验证是否安装成功:

SU2_CFD --help

安装成功会输出软件版本号和帮助信息。

阅读时长1分钟
Andrew Moa

Slurm提交Fluent和CFX的计算脚本

1. Fluent

首先要编写Fluent的jou脚本:

/file/read-case "small_fan.cas.h5" 
/solve/initialize/hyb-initialization 
/solve/iterate 100 
/file/write-case "small_fan_results.cas.h5" ok 
/file/write-data "small_fan_results.dat.h5" ok 
/exit ok 

这个jou文件很简单,就是告诉Fluent读取哪个文件、怎么初始化、迭代多少步、如何保存直至最后退出。如果计算比较复杂的,比如涉及到UDF加载或特殊条件初始化设置的,还需要增加相应的命令行。不熟悉怎么编写TUI命令的话,可以通过Fluent图形界面下面的命令行窗口录制脚本。

编写Slurm脚本:

#!/bin/bash 

#SBATCH --job-name=fluent_test	# 任务名称
#SBATCH --partition=debug 
#SBATCH --output=%j.out 
#SBATCH --error=%j.err 
#SBATCH -N 1	# 计算节点数
#SBATCH --ntasks-per-node=32	# 每节点计算进程数

cd $SLURM_SUBMIT_DIR

source ${HOME}/opt/ansys2025r1.env	# 载入许可证设置环境变量,这里应该使用绝对路径
export FLUENT=/ansys_inc/v251/fluent/bin/fluent	# fluent可执行文件路径
export MPI_TYPE=intel # intel or openmpi 
export JOU_FILE=`find . -name "*.jou"`
export MACHINEFILE=$SLURM_JOBID.node 
scontrol show hostnames $SLURM_JOB_NODELIST > $MACHINEFILE 

#注意fluent根据2维3维单双精度的不同有4钟计算模式:2d、3d、2ddp、3ddp,根据自己的需求选择对应的计算模式
$FLUENT 3ddp -g -t$SLURM_NPROCS -cnf=$MACHINEFILE -mpi=$MPI_TYPE -ssh -i $JOU_FILE

保存以上脚本,将待提交的cas文件和jou文件放到脚本所在文件夹,通过sbatch命令提交脚本即可。计算完成后将输出的结果文件下载到本地机器上处理。

2. CFX

相比fluent,cfx计算脚本简单很多:

阅读时长1分钟
Andrew Moa