OpenFOAM安装

2023年9月1日至2023年9月7日在曙光超算上部署了OpenFOAM-7OpenFOAM-8OpenFOAM-9OpenFOAM-10OpenFOAM-11OpenFOAM-v1812,在此记录下安装过程。

假设软件目录仿照如下方式进行设置(以OpenFOAM-7为例),且以下目录均已存在。

1
2
3
4
5
6
v7
|---- app # 存放可执行文件
|---- case # 存放算例文件
|---- doc # 存放说明文档
|---- scripts # 存放脚本文件
|---- source # 存放源代码文件

OpenFOAM-7

下载源代码

以下为download.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

cd $SCRIPTDIR/source

git clone https://github.com/OpenFOAM/OpenFOAM-7.git
git clone https://github.com/OpenFOAM/ThirdParty-7.git

安装

以下为install.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module purge # 卸载之前的环境
module load compiler/cmake/3.23.3 # 加载cmake
module load compiler/intel/2021.3.0 # intel-2021
module load mpi/intelmpi/2021.3.0 # intel-2021

# 安装目录
INSTALL_PATH=$SCRIPTDIR
INSTALL_PATH_NEW=${INSTALL_PATH//\//\\\/}
FOAM_NAME=OpenFOAM-7
THIRD_NAME=ThirdParty-7

# 进入安装目录
cd $INSTALL_PATH/app
rm -rf ./*
cp -r ../source/$FOAM_NAME ./
cp -r ../source/$THIRD_NAME ./

# 修改配置文件
sed -i 's/export\ WM_PROJECT=OpenFOAM/export\ MY_INSTALL_PATH='$INSTALL_PATH_NEW'\/app\nexport\ WM_PROJECT=OpenFOAM/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ FOAM_INST_DIR=\$HOME\/\$WM_PROJECT/export\ FOAM_INST_DIR=\$MY_INSTALL_PATH/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_PROJECT_USER_DIR=\$HOME\/\$WM_PROJECT\/\$USER-\$WM_PROJECT_VERSION/export\ WM_PROJECT_USER_DIR=\$WM_PROJECT_INST_DIR\/\$USER-\$WM_PROJECT_VERSION/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_COMPILER=Gcc/export WM_COMPILER=Icc/' $FOAM_NAME/etc/bashrc # 使用intel编译器
sed -i 's/export\ WM_MPLIB=SYSTEMOPENMPI/export\ WM_MPLIB=INTELMPI\nMPI_ROOT=\$I_MPI_ROOT/' $FOAM_NAME/etc/bashrc # 使用intelMPI
echo 'export WM_CC=icc' >> $FOAM_NAME/etc/bashrc # 使用intel编译器编译第三方库
echo 'export WM_CXX=icpc' >> $FOAM_NAME/etc/bashrc # 使用intel编译器编译第三方库
sed -i 's/gcc/$(WM_CC)/g' $THIRD_NAME/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM # 使用intel编译器编译scotch
sed -i 's/mpicc/mpiicc/g' $THIRD_NAME/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM # 使用intel编译器编译scotch
sed -i 's/include64/include/g' $FOAM_NAME/wmake/rules/General/mplibINTELMPI64
sed -i 's/lib64/lib\/release/g' $FOAM_NAME/wmake/rules/General/mplibINTELMPI64

# 加载环境变量
source $FOAM_NAME/etc/bashrc

# 编译第三方程序
cd $THIRD_NAME
./Allwmake -j 24 > ../log.thirdparty-7 2>&1

# 编译OpenFOAM
cd ../$FOAM_NAME
./Allwmake -j 24 > ../log.openfoam-7 2>&1

加载环境变量

以下为env.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module load compiler/cmake/3.23.3 # 加载cmake
module load compiler/intel/2021.3.0 # intel-2021
module load mpi/intelmpi/2021.3.0 # intel-2021

# 加载环境变量
source $SCRIPTDIR/app/OpenFOAM-7/etc/bashrc

软件测试

以下为job.sh脚本内容,该脚本位于case文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
#SBATCH -J cavity
#SBATCH -p xahctar
#SBATCH -N 2
#SBATCH --ntasks-per-node=2

module purge # 卸载之前的环境
source ../scripts/env.sh

# 拷贝官方自带算例文件
rm -rf ./cavity
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .

cd cavity
cp $FOAM_ETC/caseDicts/preProcessing/decomposeParDict ./system # 自带算例为串行算例,将其修改为并行算例
sed -i 's/4/2/g' system/decomposeParDict # 设置为4核并行
sed -i 's/8/4/g' system/decomposeParDict # 设置为4核并行
sed -i 's/20/100/g' system/blockMeshDict # 增大网格分辨率
sed -i 's/0\.005/0\.00004/g' system/controlDict # 保证计算稳定
sed -i 's/20/2500/g' system/controlDict # 设置输出文件间隔
sed -i 's/0\.5/1/g' system/controlDict # 设置计算时间

blockMesh > log.blockMesh 2>&1 # 划分网格
decomposePar > log.decomposePar 2>&1 # 并行分区
mpirun icoFoam -parallel > log.icoFoam 2>&1 # 开始计算
reconstructPar > log.reconstructPar 2>&1 #将并行计算的数据归纳,便于后处理

case目录下运行sbatch ./job.sh命令即可提交任务。

OpenFOAM-8

下载源代码

以下为download.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

cd $SCRIPTDIR/source

git clone https://github.com/OpenFOAM/OpenFOAM-8.git
git clone https://github.com/OpenFOAM/ThirdParty-8.git

安装

以下为install.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module purge # 卸载之前的环境
module load compiler/cmake/3.23.3 # 加载cmake
module load compiler/intel/2021.3.0 # intel-2021
module load mpi/intelmpi/2021.3.0 # intel-2021

# 安装目录
INSTALL_PATH=$SCRIPTDIR
INSTALL_PATH_NEW=${INSTALL_PATH//\//\\\/}
FOAM_NAME=OpenFOAM-8
THIRD_NAME=ThirdParty-8

# 进入安装目录
cd $INSTALL_PATH/app
rm -rf ./*
cp -r ../source/$FOAM_NAME ./
cp -r ../source/$THIRD_NAME ./

# 修改配置文件
sed -i 's/export\ WM_PROJECT=OpenFOAM/export\ MY_INSTALL_PATH='$INSTALL_PATH_NEW'\/app\nexport\ WM_PROJECT=OpenFOAM/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ FOAM_INST_DIR=\$HOME\/\$WM_PROJECT/export\ FOAM_INST_DIR=\$MY_INSTALL_PATH/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_PROJECT_USER_DIR=\$HOME\/\$WM_PROJECT\/\$USER-\$WM_PROJECT_VERSION/export\ WM_PROJECT_USER_DIR=\$WM_PROJECT_INST_DIR\/\$USER-\$WM_PROJECT_VERSION/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_COMPILER=Gcc/export WM_COMPILER=Icc/' $FOAM_NAME/etc/bashrc # 使用intel编译器
sed -i 's/export\ WM_MPLIB=SYSTEMOPENMPI/export\ WM_MPLIB=INTELMPI\nMPI_ROOT=\$I_MPI_ROOT/' $FOAM_NAME/etc/bashrc # 使用intelMPI
echo 'export WM_CC=icc' >> $FOAM_NAME/etc/bashrc # 使用intel编译器编译第三方库
echo 'export WM_CXX=icpc' >> $FOAM_NAME/etc/bashrc # 使用intel编译器编译第三方库
sed -i 's/gcc/$(WM_CC)/g' $THIRD_NAME/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM # 使用intel编译器编译scotch
sed -i 's/mpicc/mpiicc/g' $THIRD_NAME/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM # 使用intel编译器编译scotch

# 加载环境变量
source $FOAM_NAME/etc/bashrc

# 编译第三方程序
cd $THIRD_NAME
./Allwmake -j 24 > ../log.thirdparty-8 2>&1

# 编译OpenFOAM
cd ../$FOAM_NAME
./Allwmake -j 24 > ../log.openfoam-8 2>&1

加载环境变量

以下为env.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module load compiler/cmake/3.23.3 # 加载cmake
module load compiler/intel/2021.3.0 # intel-2021
module load mpi/intelmpi/2021.3.0 # intel-2021

# 加载环境变量
source $SCRIPTDIR/app/OpenFOAM-8/etc/bashrc

软件测试

以下为job.sh脚本内容,该脚本位于case文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
#SBATCH -J cavity
#SBATCH -p xahctar
#SBATCH -N 2
#SBATCH --ntasks-per-node=2

module purge # 卸载之前的环境
source ../scripts/env.sh

# 拷贝官方自带算例文件
rm -rf ./cavity
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .

cd cavity
cp $FOAM_ETC/caseDicts/preProcessing/decomposeParDict ./system # 自带算例为串行算例,将其修改为并行算例
sed -i 's/4/2/g' system/decomposeParDict # 设置为4核并行
sed -i 's/8/4/g' system/decomposeParDict # 设置为4核并行
sed -i 's/20/100/g' system/blockMeshDict # 增大网格分辨率
sed -i 's/0\.005/0\.00004/g' system/controlDict # 保证计算稳定
sed -i 's/20/2500/g' system/controlDict # 设置输出文件间隔
sed -i 's/0\.5/1/g' system/controlDict # 设置计算时间

blockMesh > log.blockMesh 2>&1 # 划分网格
decomposePar > log.decomposePar 2>&1 # 并行分区
mpirun icoFoam -parallel > log.icoFoam 2>&1 # 开始计算
reconstructPar > log.reconstructPar 2>&1 #将并行计算的数据归纳,便于后处理

case目录下运行sbatch ./job.sh命令即可提交任务。

OpenFOAM-9

下载源代码

以下为download.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

cd $SCRIPTDIR/source

git clone https://github.com/OpenFOAM/OpenFOAM-9.git
git clone https://github.com/OpenFOAM/ThirdParty-9.git

安装

以下为install.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module purge # 卸载之前的环境
module load compiler/cmake/3.23.3 # 加载cmake
# 由于安装时曙光超算上的intel编译器不支持C++14标准,因而采用gcc编译
module load compiler/gcc/9.3.0 # 加载gcc
module load mpi/intelmpi/2021.3.0 # intel-2021

# 安装目录
INSTALL_PATH=$SCRIPTDIR
INSTALL_PATH_NEW=${INSTALL_PATH//\//\\\/}
FOAM_NAME=OpenFOAM-9
THIRD_NAME=ThirdParty-9

# 进入安装目录
cd $INSTALL_PATH/app
rm -rf ./*
cp -r ../source/$FOAM_NAME ./
cp -r ../source/$THIRD_NAME ./

# 修改配置文件
sed -i 's/export\ WM_PROJECT=OpenFOAM/export\ MY_INSTALL_PATH='$INSTALL_PATH_NEW'\/app\nexport\ WM_PROJECT=OpenFOAM/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ FOAM_INST_DIR=\$HOME\/\$WM_PROJECT/export\ FOAM_INST_DIR=\$MY_INSTALL_PATH/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_PROJECT_USER_DIR=\$HOME\/\$WM_PROJECT\/\$USER-\$WM_PROJECT_VERSION/export\ WM_PROJECT_USER_DIR=\$WM_PROJECT_INST_DIR\/\$USER-\$WM_PROJECT_VERSION/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_MPLIB=SYSTEMOPENMPI/export\ WM_MPLIB=INTELMPI\nMPI_ROOT=\$I_MPI_ROOT/' $FOAM_NAME/etc/bashrc # 使用intelMPI

# 加载环境变量
source $FOAM_NAME/etc/bashrc

# 编译第三方程序
cd $THIRD_NAME
./Allwmake -j 24 > ../log.thirdparty-9 2>&1

# 编译OpenFOAM
cd ../$FOAM_NAME
./Allwmake -j 24 > ../log.openfoam-9 2>&1

加载环境变量

以下为env.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module load compiler/cmake/3.23.3 # 加载cmake
# 由于安装时曙光超算上的intel编译器不支持C++14标准,因而采用gcc编译
module load compiler/gcc/9.3.0 # 加载gcc
module load mpi/intelmpi/2021.3.0 # intel-2021

# 加载环境变量
source $SCRIPTDIR/app/OpenFOAM-9/etc/bashrc

软件测试

以下为job.sh脚本内容,该脚本位于case文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
#SBATCH -J cavity
#SBATCH -p xahctar
#SBATCH -N 2
#SBATCH --ntasks-per-node=2

module purge # 卸载之前的环境
source ../scripts/env.sh

# 拷贝官方自带算例文件
rm -rf ./cavity
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .

cd cavity
cp $FOAM_ETC/caseDicts/preProcessing/decomposeParDict ./system # 自带算例为串行算例,将其修改为并行算例
sed -i 's/4/2/g' system/decomposeParDict # 设置为4核并行
sed -i 's/8/4/g' system/decomposeParDict # 设置为4核并行
sed -i 's/20/100/g' system/blockMeshDict # 增大网格分辨率
sed -i 's/0\.005/0\.00004/g' system/controlDict # 保证计算稳定
sed -i 's/20/2500/g' system/controlDict # 设置输出文件间隔
sed -i 's/0\.5/1/g' system/controlDict # 设置计算时间

blockMesh > log.blockMesh 2>&1 # 划分网格
decomposePar > log.decomposePar 2>&1 # 并行分区
mpirun icoFoam -parallel > log.icoFoam 2>&1 # 开始计算
reconstructPar > log.reconstructPar 2>&1 #将并行计算的数据归纳,便于后处理

case目录下运行sbatch ./job.sh命令即可提交任务。

OpenFOAM-10

下载源代码

以下为download.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

cd $SCRIPTDIR/source

git clone https://github.com/OpenFOAM/OpenFOAM-10.git
git clone https://github.com/OpenFOAM/ThirdParty-10.git

安装

以下为install.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module purge # 卸载之前的环境
module load compiler/cmake/3.23.3 # 加载cmake
# 由于安装时曙光超算上的intel编译器不支持C++14标准,因而采用gcc编译
module load compiler/gcc/9.3.0 # 加载gcc
module load mpi/intelmpi/2021.3.0 # intel-2021

# 安装目录
INSTALL_PATH=$SCRIPTDIR
INSTALL_PATH_NEW=${INSTALL_PATH//\//\\\/}
FOAM_NAME=OpenFOAM-10
THIRD_NAME=ThirdParty-10

# 进入安装目录
cd $INSTALL_PATH/app
rm -rf ./*
cp -r ../source/$FOAM_NAME ./
cp -r ../source/$THIRD_NAME ./

# 修改配置文件
sed -i 's/export\ WM_PROJECT=OpenFOAM/export\ MY_INSTALL_PATH='$INSTALL_PATH_NEW'\/app\nexport\ WM_PROJECT=OpenFOAM/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ FOAM_INST_DIR=\$HOME\/\$WM_PROJECT/export\ FOAM_INST_DIR=\$MY_INSTALL_PATH/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_PROJECT_USER_DIR=\$HOME\/\$WM_PROJECT\/\$USER-\$WM_PROJECT_VERSION/export\ WM_PROJECT_USER_DIR=\$WM_PROJECT_INST_DIR\/\$USER-\$WM_PROJECT_VERSION/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_MPLIB=SYSTEMOPENMPI/export\ WM_MPLIB=INTELMPI\nMPI_ROOT=\$I_MPI_ROOT/' $FOAM_NAME/etc/bashrc # 使用intelMPI

# 加载环境变量
source $FOAM_NAME/etc/bashrc

# 编译第三方程序
cd $THIRD_NAME
./Allwmake -j 24 > ../log.thirdparty-10 2>&1

# 编译OpenFOAM
cd ../$FOAM_NAME
./Allwmake -j 24 > ../log.openfoam-10 2>&1

加载环境变量

以下为env.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module load compiler/cmake/3.23.3 # 加载cmake
# 由于安装时曙光超算上的intel编译器不支持C++14标准,因而采用gcc编译
module load compiler/gcc/9.3.0 # 加载gcc
module load mpi/intelmpi/2021.3.0 # intel-2021

# 加载环境变量
source $SCRIPTDIR/app/OpenFOAM-10/etc/bashrc

软件测试

以下为job.sh脚本内容,该脚本位于case文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
#SBATCH -J cavity
#SBATCH -p xahctar
#SBATCH -N 2
#SBATCH --ntasks-per-node=2

module purge # 卸载之前的环境
source ../scripts/env.sh

# 拷贝官方自带算例文件
rm -rf ./cavity
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .

cd cavity
cp $FOAM_ETC/caseDicts/preProcessing/decomposeParDict ./system # 自带算例为串行算例,将其修改为并行算例
sed -i 's/4/2/g' system/decomposeParDict # 设置为4核并行
sed -i 's/8/4/g' system/decomposeParDict # 设置为4核并行
sed -i 's/20/100/g' system/blockMeshDict # 增大网格分辨率
sed -i 's/0\.005/0\.00004/g' system/controlDict # 保证计算稳定
sed -i 's/20/2500/g' system/controlDict # 设置输出文件间隔
sed -i 's/0\.5/1/g' system/controlDict # 设置计算时间

blockMesh > log.blockMesh 2>&1 # 划分网格
decomposePar > log.decomposePar 2>&1 # 并行分区
mpirun icoFoam -parallel > log.icoFoam 2>&1 # 开始计算
reconstructPar > log.reconstructPar 2>&1 #将并行计算的数据归纳,便于后处理

case目录下运行sbatch ./job.sh命令即可提交任务。

OpenFOAM-11

下载源代码

以下为download.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

cd $SCRIPTDIR/source

git clone https://github.com/OpenFOAM/OpenFOAM-11.git
git clone https://github.com/OpenFOAM/ThirdParty-11.git

安装

以下为install.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module purge # 卸载之前的环境
module load compiler/cmake/3.23.3 # 加载cmake
module load compiler/gcc/9.3.0 # 加载gcc
module load mpi/intelmpi/2021.3.0 # intel-2021

# 安装目录
INSTALL_PATH=$SCRIPTDIR
INSTALL_PATH_NEW=${INSTALL_PATH//\//\\\/}
FOAM_NAME=OpenFOAM-11
THIRD_NAME=ThirdParty-11

# 进入安装目录
cd $INSTALL_PATH/app
rm -rf ./*
cp -r ../source/$FOAM_NAME ./
cp -r ../source/$THIRD_NAME ./

# 修改配置文件
sed -i 's/export\ WM_PROJECT=OpenFOAM/export\ MY_INSTALL_PATH='$INSTALL_PATH_NEW'\/app\nexport\ WM_PROJECT=OpenFOAM/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ FOAM_INST_DIR=\$HOME\/\$WM_PROJECT/export\ FOAM_INST_DIR=\$MY_INSTALL_PATH/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_PROJECT_USER_DIR=\$HOME\/\$WM_PROJECT\/\$USER-\$WM_PROJECT_VERSION/export\ WM_PROJECT_USER_DIR=\$WM_PROJECT_INST_DIR\/\$USER-\$WM_PROJECT_VERSION/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/export\ WM_MPLIB=SYSTEMOPENMPI/export\ WM_MPLIB=INTELMPI\nMPI_ROOT=\$I_MPI_ROOT/' $FOAM_NAME/etc/bashrc # 使用intelMPI

# 加载环境变量
source $FOAM_NAME/etc/bashrc

# 编译第三方程序
cd $THIRD_NAME
./Allwmake -j 24 > ../log.thirdparty-11 2>&1

# 编译OpenFOAM
cd ../$FOAM_NAME
./Allwmake -j 24 > ../log.openfoam-11 2>&1

加载环境变量

以下为env.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module load compiler/cmake/3.23.3 # 加载cmake
module load compiler/gcc/9.3.0 # 加载gcc
module load mpi/intelmpi/2021.3.0 # intel-2021

# 加载环境变量
source $SCRIPTDIR/app/OpenFOAM-11/etc/bashrc

软件测试

以下为job.sh脚本内容,该脚本位于case文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash 
#SBATCH -J NACA0012
#SBATCH -p xahctar
#SBATCH -N 2
#SBATCH --ntasks-per-node=2

module purge # 卸载之前的环境
source ../scripts/env.sh

# 拷贝官方自带算例文件
rm -rf ./aerofoilNACA0012Steady
cp -r $FOAM_TUTORIALS/fluid/aerofoilNACA0012Steady .
cd aerofoilNACA0012Steady
cp $FOAM_ETC/caseDicts/preProcessing/decomposeParDict ./system/
sed -i 's/8/4/g' ./system/decomposeParDict
sed -i 's/4\ 2\ 1/2\ 1\ 2/g' ./system/decomposeParDict
sed -i 's/nNonOrthogonalCorrectors\ 0/nNonOrthogonalCorrectors\ 2/g' ./system/fvSolution

cp $FOAM_TUTORIALS/resources/geometry/NACA0012.obj.gz constant/geometry/

blockMesh > log.blockMesh 2>&1
transformPoints "scale=(1 0 1)" > log.transformPoints 2>&1
extrudeMesh > log.extrudeMesh 2>&1
decomposePar > log.decomposePar 2>&1
mpirun foamRun -parallel > log.foamRun 2>&1
reconstructPar > log.reconstructPar 2>&1

case目录下运行sbatch ./job.sh命令即可提交任务。

OpenFOAM-v1812

下载源代码

以下为download.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

cd $SCRIPTDIR/source
wget https://sourceforge.net/projects/openfoam/files/v1812/OpenFOAM-v1812.tgz
wget https://sourceforge.net/projects/openfoam/files/v1812/ThirdParty-v1812.tgz
tar -zxf OpenFOAM-v1812.tgz
tar -zxf ThirdParty-v1812.tgz
rm -rf OpenFOAM-v1812.tgz ThirdParty-v1812.tgz

安装

以下为install.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

# 加载cmake环境
module load compiler/cmake/3.23.3

# 安装目录所需环境变量
INSTALL_PATH=$SCRIPTDIR
INSTALL_PATH_NEW=${INSTALL_PATH//\//\\\/}
FOAM_NAME=OpenFOAM-v1812
THIRD_NAME=ThirdParty-v1812

# 进入安装目录
cd $INSTALL_PATH/app

# 拷贝源代码至安装目录
rm -rf ./*
cp -r ../source/$FOAM_NAME ./
cp -r ../source/$THIRD_NAME ./

# 修改etc/bashrc文件
sed -i 's/export\ WM_PROJECT=OpenFOAM/export\ MY_INSTALL_PATH='$INSTALL_PATH_NEW'\/app\nexport\ WM_PROJECT=OpenFOAM/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/HOME\/OpenFOAM/MY_INSTALL_PATH/g' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/HOME\/\$WM_PROJECT/MY_INSTALL_PATH/g' $FOAM_NAME/etc/bashrc # 更改安装路径

# 加载环境变量
source $FOAM_NAME/etc/bashrc

# 编译第三方程序
cd $THIRD_NAME
./Allwmake -j 24 > ../log.thirdparty-v1812 2>&1

# 编译OpenFOAM
cd ../$FOAM_NAME
./Allwmake -j 24 > ../log.openfoam-v1812 2>&1

加载环境变量

以下为env.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module load compiler/cmake/3.23.3 # 加载cmake

# 加载环境变量
source $SCRIPTDIR/app/OpenFOAM-v1812/etc/bashrc

软件测试

以下为job.sh脚本内容,该脚本位于case文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
#SBATCH -J cavity
#SBATCH -p xahctar
#SBATCH -N 2
#SBATCH --ntasks-per-node=2

# 系统默认环境,无需purge
source ../scripts/env.sh

# 拷贝官方自带算例文件
rm -rf ./cavity
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .

cd cavity
cp $FOAM_TUTORIALS/incompressible/icoFoam/cavityMappingTest/system/coarseMesh/decomposeParDict ./system # 自带算例为串行算例,将其修改为并行算例
sed -i 's/20/100/g' system/blockMeshDict # 增大网格分辨率
sed -i 's/0\.005/0\.00002/g' system/controlDict # 保证计算稳定
sed -i 's/20/5000/g' system/controlDict # 设置输出文件间隔
sed -i 's/0\.5/1/g' system/controlDict # 设置计算时间

blockMesh > log.blockMesh 2>&1 # 划分网格
decomposePar > log.decomposePar 2>&1 # 并行分区
mpirun icoFoam -parallel > log.icoFoam 2>&1 # 开始计算
reconstructPar > log.reconstructPar 2>&1 #将并行计算的数据归纳,便于后处理

case目录下运行sbatch ./job.sh命令即可提交任务。

OpenFOAM-v2312

注:OpenFOAM-v2312的安装方法为仿照OpenFOAM-v1812完成,已在个人电脑中测试通过。

下载源代码

以下为download.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

cd $SCRIPTDIR/source
wget https://sourceforge.net/projects/openfoam/files/v2312/OpenFOAM-v2312.tgz
wget https://sourceforge.net/projects/openfoam/files/v2312/ThirdParty-v2312.tgz
tar -zxf OpenFOAM-v2312.tgz
tar -zxf ThirdParty-v2312.tgz
rm -rf OpenFOAM-v2312.tgz ThirdParty-v2312.tgz

安装

以下为install.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

# 加载cmake环境
module load compiler/cmake/3.23.3

# 安装目录所需环境变量
INSTALL_PATH=$SCRIPTDIR
INSTALL_PATH_NEW=${INSTALL_PATH//\//\\\/}
FOAM_NAME=OpenFOAM-v2312
THIRD_NAME=ThirdParty-v2312

# 进入安装目录
cd $INSTALL_PATH/app

# 拷贝源代码至安装目录
rm -rf ./*
cp -r ../source/$FOAM_NAME ./
cp -r ../source/$THIRD_NAME ./

# 修改etc/bashrc文件
sed -i 's/export\ WM_PROJECT=OpenFOAM/export\ MY_INSTALL_PATH='$INSTALL_PATH_NEW'\/app\nexport\ WM_PROJECT=OpenFOAM/' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/HOME\/OpenFOAM/MY_INSTALL_PATH/g' $FOAM_NAME/etc/bashrc # 更改安装路径
sed -i 's/HOME\/\$WM_PROJECT/MY_INSTALL_PATH/g' $FOAM_NAME/etc/bashrc # 更改安装路径

# 加载环境变量
source $FOAM_NAME/etc/bashrc

# 编译第三方程序
cd $THIRD_NAME
./Allwmake -j 24 > ../log.thirdparty-v2312 2>&1
# 个别需要单独编译的第三方库,如metis、petsc等,可在此编译,出现问题根据需要进行调整即可,调整难度不大,在此不再赘述

# 编译OpenFOAM
cd ../$FOAM_NAME
./Allwmake -j 24 > ../log.openfoam-v2312 2>&1

加载环境变量

以下为env.sh脚本内容,该脚本位于scripts文件夹下。

1
2
3
4
5
6
7
8
9
#!/bin/bash

SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && cd .. && pwd)

module load compiler/cmake/3.23.3 # 加载cmake

# 加载环境变量
# petscFoam使用前需要保证petsc库可以被找到,因此需要加载petsc环境变量
source $SCRIPTDIR/app/OpenFOAM-v2312/etc/bashrc && source $SCRIPTDIR/app/OpenFOAM-v2312/etc/config.sh/petsc -force