CentOS7 源码编译 OpenFOAM-2.3.x

黄涵畅
2023-12-01

工作需要在CentOS7服务器上安装OpenFOAM-2.3.x , 但由于OF版本较老,CentOS7有很新,缺少系统教程,在此记录安装编译过程。

安装依赖包

#ref https://xiaopingqiu.github.io/2015/09/13/OpenFOAM-install-centOS/
yum groupinstall 'Development Tools'
yum install glibc-devel.i686
yum install zlib.x86_64
yum install zlib-devel.x86_64

下载源码

OpenFOAM-2.3.x和ThirdParty库

OF源码包括:OpenFOAM-2.3.x ,ThirdParty-2.3.x,这两个目前在OpenFOAM的官网已经下架,可以从github仓库中clone, 在$HOME (/root)下创建一个目录 OpenFOAM,然后将OpenFOAM-2.3.x 以及 ThirdParty-2.3.x 拷贝到该目录下。 gcc-4.8.2、 mpfr-3.1.2、gmp-5.1.2、 mpc-1.0.1、 boost-1.55.0、openmpi-1.6.5、scotch_6.0.0、cmake-2.8.12.1、CGAL-4.3、libccmio-2.6.1 这些可以ThirdParty的 github 仓库里找到链接,但部分网站已经不能访问,更新部分下载链接如下。
因为有移植的需要,所以这里单独编译gcc 和openmpi,这样可以不依赖集群系统上的 gcc 和 openmpi 版本。

#下载openfoam 和 ThirfParty 建议放在 /root/OpenFOAM 路径下
git clone https://github.com/OpenFOAM/OpenFOAM-2.3.x.git
git clone https://github.com/OpenFOAM/ThirdParty-2.3.x.git


#ref https://github.com/OpenFOAM/ThirdParty-2.3.x.git
# Download under path ThirdParty-2.3.x
#Compiler
#The minimum version of gcc required is 4.5.0
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
wget https://ftp.gnu.org/gnu/gmp/gmp-5.1.2.tar.bz2
wget https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.2.tar.bz2
#wget  http://www.multiprecision.org/mpc/download/mpc-1.0.1.tar.gz
wget https://ftp.gnu.org/gnu/mpc/mpc-1.0.1.tar.gz

#Parallel Processing
wget http://www.open-mpi.org/software/ompi/v1.6/downloads/openmpi-1.6.5.tar.bz2
wget https://gforge.inria.fr/frs/download.php/file/31831/scotch_6.0.0.tar.gz

#ParaView
wget http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.gz
wget http://www.paraview.org/files/v4.1/ParaView-v4.1.0-source.tar.gz

#CGAL
#wget https://gforge.inria.fr/frs/download.php/file/31175/CGAL-4.3.tar.bz2
wget https://github.com/CGAL/cgal/archive/refs/tags/releases/CGAL-4.3.tar.gz
wget http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.bz2/download

#Miscellaneous
wget http://portal.nersc.gov/svn/visit/trunk/third_party/libccmio-2.6.1.tar.gz

解压第三方库

解压gcc-4.8.2、 mpfr-3.1.2、gmp-5.1.2、 mpc-1.0.1、 boost-1.55.0、openmpi-1.6.5、scotch_6.0.0、cmake-2.8.12.1、CGAL-4.3、libccmio-2.6.1$HOME/ThirdParty-2.3.x 下,并将 boost-1.55.0 重命名为 boost-system。
后缀tar.gz使用 tar -xvf 命令 , 后缀tar.bz2使用 tar -xjf 命令。

tar -xvf cmake-2.8.12.1.tar.gz
tar -xjf gmp-5.1.2.tar.bz2
tar -xvf CGAL-4.3.tar.gz
tar -xjf mpfr-3.1.2.tar.bz
tar -xjf openmpi-1.6.5.tar.bz2
tar -xvf ParaView-v4.1.0-source.tar.gz
tar -xvf scotch_6.0.0.tar.gz
tar -xvf mpc-1.0.1.tar.gz
tar -xjf boost_1_55_0.tar.bz2
tar -xvf libccmio-2.6.1.tar.gz

对应解压缩后的文件名如下,如果有不同自行修改。
gcc-4.8.2、 mpfr-3.1.2、gmp-5.1.2、 mpc-1.0.1、 boost-system 、openmpi-1.6.5、scotch_6.0.0、cmake-2.8.12.1、CGAL-4.3、libccmio-2.6.1

修改编译配置文件

在编译之前,需要修改配置文件。OpenFOAMgcc编译器和OpenMPI都可以使用systemThirdParty的版本,这里都选择ThirdParty版本避免和系统冲突。

$HOME/OpenFOAM/OpenFOAM-2.3.x/etc/bashrc 文件

  • 安装目录 $HOME/OpenFOAM
  • 编译器的,system代表是用系统安装的gccThirdParty代表使用三方包里面的gcc,选择ThirdParty
  • MPISYSTEMOPENMPI代表使用系统openMPIOPENMPI代表使用ThirdPartyopenMPI
foamInstall=$HOME/OpenFOAM

#- Compiler location:
#    foamCompiler= system | ThirdParty (OpenFOAM)
foamCompiler=ThirdParty

#- MPI implementation:
#    WM_MPLIB = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPICH | MPICH-GM | HPMPI
#               | MPI | QSMPI | SGIMPI
export WM_MPLIB=OPENMPI

$HOME/OpenFOAM/OpenFOAM-2.3.x/etc/config/settings.sh 文件

严格按照settings.sh文件中规定的版本下载相应的包并解压到ThirdParty目录下,解压后的名字和settings.sh中的一致。

gcc-4.8.2、 mpfr-3.1.2、gmp-5.1.2、 mpc-1.0.1、 boost-system 、openmpi-1.6.5、scotch_6.0.0、cmake-2.8.12.1、CGAL-4.3、libccmio-2.6.1

case "${foamCompiler}" in
OpenFOAM | ThirdParty)
    case "$WM_COMPILER" in
    Gcc | Gcc++0x | Gcc48 | Gcc48++0x)
        gcc_version=gcc-4.8.2
        gmp_version=gmp-5.1.2
        mpfr_version=mpfr-3.1.2
        mpc_version=mpc-1.0.1
        ;;
        
 export FOAM_MPI=openmpi-1.6.5

其他make文件

检查一下 ThirdParty-2.3.x 目录下编译脚本makeGcc, makeCGAL, makeCmake设置是否正确。检查项目仍然是看脚本里设置的软件包版本和实际下载的是否一致。
例如,makeGcc中,gccPACKAGE需要修改为gccPACKAGE=gcc-4.8.2,需要保证设置与 ThirdParty-2.3.x 目录下实际的源码包的版本一致!!!

gmpPACKAGE=gmp-5.1.2
mpfrPACKAGE=mpfr-3.1.2
mpcPACKAGE=mpc-1.0.1
gccPACKAGE=gcc-4.8.2

增加OpenFOAM环境变量

加载和OpenFOAM相关的环境变量

vi ~/.bashrc
source $HOME/OpenFOAM/OpenFOAM-2.3.x/etc/bashrc
# :wq 退出
source ~/.bashrc

编译

配置完成上述文件后,按如下顺序进行编译:

  • makeGcc (recommended if the system gcc is < 4.7)
  • Allwmake (Builds OpenMPI, Scotch etc.)
  • makeCmake (if the system cmake version is < 2.8.8)
  • makeParaView4

makeGcc

./makeGcc > log_gcc 2>&1 &   
source ~/.bashrc
gcc -v #看看当前gcc版本

如果版本号不同可能是编译出错,cat log_gcc | grep error 检查错误选项并修复。
gcc 是编译下面其他库的工具,必须要确保gcc-4.8.2版本编译成功

Allwmake

./Allwmake > log_all 2>&1 &  	#(Builds CGAL OpenMPI, Scotch etc.)

Allwmake 包括了CGAL , OpenMPIScotch 的编译。
编译成功可以看到mpirun, mpicc 等命令,运行 whereis mpirun 检查编译是否成功。

Cmake 和 ParaView

./makeCmake > log_cmake 2>&1 & 	#(if the system cmake version is < 2.8.8)
./makeParaView4  > log_pv 2>&1 &

cmake --version 确保Cmake 编译成功,运行paraview 可以直接打开paraview窗口,这里我还没有安装界面就看不到了。

编译OpenFOAM-2.3.x

 cd $HOME/OpenFOAM/OpenFOAM-2.3.x 
 ./Allwmake > log_all 2>&1 &  	

运行 Allwmake,进行 OpenFOAM 的编译,可能需要数个小时。

验证

编译结束以后,运行dambreak算例测试是否成功。

# 创建run文件夹
mkdir -p  $HOMEOpenFOAM/-2.3.x/run
run
cp -r $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak .
cd damBreak 
blockMesh	生成网格
checkMesh
setFields 	#设置初始场
decomposPar
interFoam | tee log

至此安装成功,后续继续更新使用Docker建立CentOS7-OpenFOAM-2.3.x 的虚拟环境。

参考链接

在 CentOS 上安装 OpenFOAM
Installation/Linux/OpenFOAM-2.3.0/CentOS SL RHEL
https://openfoam.org/download/2-3-1-source/
https://github.com/OpenFOAM/OpenFOAM-2.3.x.git
https://github.com/OpenFOAM/ThirdParty-2.3.x.git

 类似资料: