侧边栏壁纸
博主头像
qiql博主等级

水能载舟,亦可赛艇

  • 累计撰写 33 篇文章
  • 累计创建 28 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

❄️Linux 平台 OpenFOAM 安装及调试指南【附安装脚本】

qiql
2022-07-15 / 0 评论 / 0 点赞 / 3,512 阅读 / 2,152 字

TIME: 2022年6月23日09:19:37
AUTOR: qiql
EMAIL: hi@qiql.net

0 OpenFOAM 简介

OpenFOAM 是一款开源、成熟、领先的计算流体力学的软件,主要是由 OpenCFD 公司自2004年以来开发的免费开源 CFD 软件。它在工程和科学的大多数领域都拥有庞大的用户基础,包括商业和学术机构。OpenFOAM 可以解决包括化学反应、湍流和传热在内的复杂流体流动,以及声学、固体力学和电磁学等问题[1][2]

OpenFOAM 的成功安装离不开 ThirdParty,在编译 OpenFOAM 之前总是需要先编译 ThirdParty。

1 下载 OpenFOAM 和 ThirdParty

在 github 上下载 OpenFOAM:

版本 OpenFOAM 下载地址
3.0
https://github.com/OpenFOAM/OpenFOAM-dev/tags?after=version-4.0
4.0
https://github.com/OpenFOAM/OpenFOAM-dev/tags?after=20161205
5.0
https://github.com/OpenFOAM/OpenFOAM-dev/tags?after=20170804
6.0
https://github.com/OpenFOAM/OpenFOAM-dev/tags?after=20180826
7.0
https://github.com/OpenFOAM/OpenFOAM-dev/tags?after=20200208
8.0
https://github.com/OpenFOAM/OpenFOAM-dev/tags?after=20210130
9.0
https://github.com/OpenFOAM/OpenFOAM-9/tags

ThirdParty 各版本 在 github 上的下载地址:https://github.com/OpenFOAM/ThirdParty-dev/tags

如果机器可以连接外网,也可以通过 wget 命令下载,参见:https://openfoam.org/download/6-source/

本文以 OpenFOAM-6 为例进行安装

2 使用 Intel 编译器安装

2.1 加载环境:

安装需要加载 Intel 编译环境和 gcc 环境,且 gcc 环境不应高于 Intel 编译器环境

module load x86/Intel_Development_Tool/2019 x86/gcc/8.3

2.2 修改OpenFOAM的配置

需要明确的一点是:OpenFOAM和ThirdParty的编译安装是在解压文件夹下进行的,所以解压文件夹就是安装文件夹

另外,需要将解压后的文件夹名称分别修改为 OpenFOAM-6 和 ThirdParty-6 !具体原因可以自行查看 OpenFOAM-6.0/etc/bashrc 配置文件

在OpenFOAM-6.0/etc/bashrc文件中

  1. 找到 export FOAM_INST_DIR,添加新的一行指明 OpenFOAM 的解压路径,这个路径是 OpenFOAM-6 这一目录的上层目录

  2. 找到 export WM_COMPILER,修改为 Icc

  3. 找到 export WM_MPLIB,修改为 INTELMPI

  4. 找到 export WM_THIRD_PARTY_DIR,修改为你所解压的 ThirdParty 路径,这个路径是 ThirdParty-6 这一目录的上层路径

最终效果如下:

export FOAM_INST_DIR=$(cd $(dirname ${BASH_SOURCE:-$0})/../.. && pwd -P) || \
export FOAM_INST_DIR=$HOME/$WM_PROJECT
export FOAM_INST_DIR=/to/your/path # 注意:这个目录应该是OpenFOAM-6.0的上层目录

export WM_COMPILER=Icc
export WM_MPLIB=INTELMPI
export WM_THIRD_PARTY_DIR=/GFPS8p/qiql/tool/thirdparty/6.0/icc/2017

保存退出后,source 这个 bashrc 文件

2.3 编译安装 ThirdParty

进入到 ThirdParty 的解压目录

在执行编译之前,**先输入命令 echo $MPI_ROOT 查看一下该变量是否有值!**这点十分重要,如果MPI_ROOT为空,那么编译 ThirdParty 不会报错,但是会有一个warning信息说缺少MPI_ROOT,会缺少 ptscotchf.h 。这就导致在编译 OpenFOAM的时候,会报错说缺少 ptscotchf.h 导致编译失败!一般来说,加载intel编译环境之后会自动export MPI_ROOT这个变量,但是也可以手动设置,输入which mpicc ,然后复制该目录,复制到mpi层即可!

然后执行 ./Allclean 进行清理,再执行 ./Allwmake 进行编译

如果出现报错:本目录不是 WM_THIRD_PARTY_DIR 目录。说明 OpenFOAM 的 bashrc 文件配置出现了问题,请保证 WM_THIRD_PARTY_DIR 所指定的目录确定是ThirdParty目录的上层目录。

编译完成之后,在同一会话窗口下回到OpenFOAM的安装目录,然后开始编译安装OpenFOAM

2.4 编译安装 OpenFOAM

进入到 OpenFOAM 的安装目录,执行 ./Allwmake -j 以开始编译,-j 这一参数的意思是调用起所有的CPU核心来并行编译,当然,如果不希望调用起这么多核,也可以指定核心数,比如 ./Allwmake -j 8 ,只使用 8 个核心

编译过程十分漫长,如果编译中途报错说无法创建xx目录,手动创建即可,然后重新执行./Allwmake -j 会从中断处开始编译而不是重新从头开始编译。

3 设置环境变量

编译完成之后,需要设置一下环境变量,可以在环境变量中添加,也可以新建一个脚本,将环境变量写入到脚本中,这样之后就只需要source 这个脚本就可以完成环境变量的设置了。

basedir=/to/your/path/OpenFOAM-6
source ${basedir}/etc/bashrc
export PATH=$PATH:${basedir}/bin
export PATH=$PATH:${basedir}/platforms/linux64IccDPInt32Opt/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${basedir}/platforms/linux64IccDPInt32Opt/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${basedir}/platforms/linux64IccDPInt32/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${basedir}/platforms/linux64IccDPInt32Opt/lib/dummy
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${basedir}/platforms/linux64IccDPInt32Opt/lib/mpi2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${basedir}/platforms/linux64IccDPInt32/lib/mpi2

4 测试

在 OpenFOAM 的安装目录下新建一个文件夹,比如命名为 qiql

进入qiql目录,然后复制一下OpenFOAM的一些算例到本目录中[3]:cp -r …/tutorials/incompressible/simpleFoam/pitzDaily ./

先执行 blockMesh ,这个命令用来划分网格,然后执行 simpleFoam 进行计算,如果有输出,说明安装成功

此外,还有一些算例可供运维人员进行测试[4][5]

附录1 安装脚本

#!/bin/bash
### 本文件为OpenFOAM-6的安装脚本
### 本脚本默认将OpenFoam-6和ThirdParty放在同一目录

# 请指定OpenFOAM目录 和 ThirdParty目录的上层路径(该路径可以不存在)
OPENFOAM_ROOT=/usr/qiql/app/openfoam/6.0/icc/2020
THIRDPARTY_ROOT=$OPENFOAM_ROOT

# 请指定OpenFOAM 和 ThirdParty 的版本,默认为6
OPENFOAM_VERSION=6
THIRDPARTY_VERSION=6

# 请指定OpenFOAM-6 源文件(压缩包)的路径(默认与本脚本在同一目录)
OPENFOAM_SRC=$(dirname $(readlink -f "$0"))
THIRDPARTY_SRC=$OPENFOAM_SRC

## 根据需求加载环境
your_dev=intel-compiler/2020
module load $your_dev
## 【重要】 根据具体情况设置MPI_ROOT【部分intel编译器加载之后不会自动设置MPI_ROOT!2020之后的Intel编译器在加载之后为I_MPI_ROOT,可以手动加一个export MPI_ROOT=$I_MPI_ROOT】
export MPI_ROOT=

# 指定配置完毕
################################################################################################
# 下面开始操作

## 创建目录
mkdir -p $OPENFOAM_ROOT
mkdir -p $THIRDPARTY_ROOT

## 解压
tar -zxvf $OPENFOAM_SRC/openfoam-6.tar.gz -C $OPENFOAM_ROOT
tar -zxvf $THIRDPARTY_SRC/thirdparty-6.tar.gz -C $THIRDPARTY_ROOT

# 重命名文件夹
cd $THIRDPARTY_ROOT
mv ThirdParty-$THIRDPARTY_VERSION-version-$THIRDPARTY_VERSION ThirdParty-$THIRDPARTY_VERSION

cd $OPENFOAM_ROOT
mv OpenFOAM-$OPENFOAM_VERSION-version-$OPENFOAM_VERSION OpenFOAM-$OPENFOAM_VERSION

cd OpenFOAM-$OPENFOAM_VERSION
# 开始修改 OpenFOAM/etc/bashrc文件
echo "start sed"
sed -i "50a\export FOAM_INST_DIR=$OPENFOAM_ROOT" etc/bashrc
sed -i 's/WM_COMPILER=Gcc/WM_COMPILER=Icc/g' etc/bashrc
sed -i 's/WM_MPLIB=SYSTEMMPI/WM_MPILIB=SYSTEMOPENMPI/g' etc/bashrc
sed -i "120a\export WM_THIRD_PARTY_DIR=$THIRDPARTY_ROOT/ThirdParty-$THIRDPARTY_VERSION" etc/bashrc
## 修改 OpenFOAM/etc/bashrc文件完毕

## 开始修改 OpenFOAM/wmake/rules/linux64Icc目录下的c和c++ 文件
sed -i 's/cc          = icc/cc          = mpiicc/g' wmake/rules/linux64Icc/c
sed -i 's/CC          = icpc/CC          = mpiicc/g' wmake/rules/linux64Icc/c++
## 修改完毕
echo "end sed"
## source etc/bashrc文件
source etc/bashrc

## 进入ThirdParty的目录,开始编译
cd $THIRDPARTY_ROOT/ThirdParty-$THIRDPARTY_VERSION
echo "start compiler ThirdParty"
./Allclean
./Allwmake
echo "compiler ThirdParty end"

echo "start compiler OpenFoam"
## 返回OpenFoam的目录,执行编译
cd $OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION
./Allwmake -j 8
## -j 8 指的是采用8个核心进行编译
echo "compiler OpenFoam end"
## 编译完成之后,进入安装目录,编写环境变量脚本
cd $OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION
touch env.openfoam.sh
echo source $OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION/etc/bashrc > env.openfoam.sh
echo export PATH=$OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION/bin:\$PATH >> env.openfoam.sh
echo export PATH=$OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION/platforms/linux64IccDPInt32Opt/bin:\$PATH >> env.openfoam.sh
echo export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION/platforms/linux64IccDPInt32Opt/lib >> env.openfoam.sh
echo export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION/platforms/linux64IccDPInt32/lib >> env.openfoam.sh
echo export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION/platforms/linux64IccDPInt32Opt/lib/dummy >> env.openfoam.sh
echo export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$OPENFOAM_ROOT/OpenFOAM-$OPENFOAM_VERSION/platforms/linux64IccDPInt32Opt/lib/mpi2 >> env.openfoam.sh

## 赋予权限并执行
chmod +x ./env.openfoam.sh
source ./env.openfoam.sh

## 测试是否可以运行
mkdir qiql
cd qiql
cp -r ../tutorials/incompressible/simpleFoam/pitzDaily ./
cd pitzDaily
blockMesh
simpleFoam

### END

  1. OpenFOAM 官网 ↩︎

  2. OpenFOAM 概述 ↩︎

  3. OpenFOAM-5.0 安装指南 ↩︎

  4. 200万网格并行算例测试 ↩︎

  5. OpenFOAM并行测试 ↩︎

0

评论区