首页 > 其他分享 >在超算/计算集群中编译和安装OpenFOAM-5.x

在超算/计算集群中编译和安装OpenFOAM-5.x

时间:2022-12-03 13:44:51浏览次数:72  
标签:虚拟机 OpenFOAM 编译 openmpi 集群 超算 安装

安装的准备

现在OpenFOAM已经更新到了第十版,之所以安装5版本,是因为我个人现在做CFD-DEM耦合的工作,CFDEM耦合软件支持的OpenFOAM就是5.x版本。不管是哪一个版本,安装过程和准备文件是基本一致的。
安装过程主要参考如下博客和帖子:
https://www.cfd-china.com/topic/4296/一种集群非root用户编译openfoam的方法-基于centos7
https://blog.csdn.net/weixin_41734903/article/details/105125214
https://blog.csdn.net/weixin_42230462/article/details/115555172

文件清单

采用编译安装方式,首要就是准备好OpenFOAM的源代码,这个通过git clone或者下载官网上的源码压缩包就可以了。

git clone git://github.com/OpenFOAM/OpenFOAM-5.x.git
git clone git://github.com/OpenFOAM/ThirdParty-5.x.git

由于在计算集群(超算)中,个人用户是没有安装底层库的权限的,且集群不连接外网,需要用户自己将一些必要的库准备好,然后传上去。超算平台和大型计算平台主要采用CentOS7系统,接下来的操作都以该系统为例。
如果自己不清楚自己的系统版本,可以用uname -a命令查看系统版本,lsb_release -a可以查看属于什么操作系统。
首先需要在自己的个人电脑上面安装一个与集群上系统一致的本地Linux虚拟机,个人可以使用VMware workstation play免费创建虚拟机。虚拟机的安装过程比较简单,不再赘述。
在本地虚拟上,首先换源,换成国内源,下载软件速度快。然后安装yum-utils包,用来下载必须的依赖库。

su root #在本地虚拟机上输入密码,切换成为root用户
yum -y install yum-utils

然后下载OpenFOAM的依赖库,比较关键的有:binutils、boost、bison、flex、glibc、hwloc、m4、libtool、zlib,cmake这几个库的安装方式一致,以binutils为例:

cd ~/
mkdir packages #建立一个文件夹统一存放这些库
cd packages && mkdir binutils #在packages下面建立一个文件夹存放binutils库
yumdownloader binutils #下载这个库的软件包
#如果所有的库都按照这个顺序下载好了,可以先打包上传到集群中
#接下来就是解压库,然后将路径加入到bashrc,这里还是先在本地虚拟机操作,成功安装这些库,然后再在超算上实现一次
cd binutils
rpm2cpio binutils-2.27-44.base.el7_9.1.x86_64.rpm | cpio -idvm #解压包,然后可以在binutils文件夹下面发现多出一个usr文件夹
vim ~/.bashrc
export PATH=$PATH:$HOME/packages/binutils/usr/bin #将库文件目录加入到系统目录中,至此,这个库已经装好了

#重复以上步骤,依次安装所有的库,现在本地安装通过,再在超算上重复操作。保持两者一致性。

这里有一个值得一说的点,由于CentOS7默认的gcc版本是4.85,刚好符号OpenFOAM-5.x安装要求,我并没有再安装gcc,gcc版本太旧或者太新都会导致编译出错。
然后是安装openmpi,从安装角度,这个是OpenFOAM最推荐使用的并行库,且集群中,最好只有这个并行库,mpich可能会和openmpi起冲突。如果使用intelmpi,会在AMD核心集群上存在兼容性问题。如果集群中安装了别的并行库,最好先卸载掉。检查OpenFOAM-5.x使用的是openmpi2.1版本,从Openmpi官网上下载源码,在本地和集群中都保留一份。

cd ~/
mkdir openmpi #建立openmpi的安装路径
cd OpenFOAM
cd Third-party-5.x/ #最好将openmpi源码解压到此文件夹下,因为可能会有一些找不到文件的错误
tar -zxvf openmpi-2.1.1.tar.gz #解压openmpi的源码
cd openmpi-2.1.1/
./configure --prefix=/home/username/openmpi/ #配置openmpi
make && make install #耐心等待安装完成

username是自己的账户名,不是就打一个"username"就可以了
如果在openmpi编译过程中,出现了“**** -l和-lr之间没有空格”这个编译错误,是openmpi的一个bug,将配置语句改成

./configure --prefix=/home/username/openmpi --with-ucx=/usr

就可以正常编译,然后没有错误以后,将openmpi的路径加入到系统路径中:

vim ~/.bashrc
export PATH=$PATH:$HOME/openmpi/bin
export LD_LIBRARY_PATH=/home/username/openmpi/lib:$LD_LIBRARY_PATH
source ~/.bashrc #让配置文件生效

如果没有报错,可以运行一下mpicc或者which mpicc,如果没有出现mpicc not found这样的错误,并且显示了mpicc的路径就是安装成功了。

编译OpenFOAM-5.x

到这里,我个人建议,是本地虚拟机和计算集群都执行一样的操作,保持一致性。这样也方便以后自己程序的调试,至于还有一个作用,在文末可以看到。
首先,需要将OpenFOAM的环境说明写入系统.bashrc文件里面:

source $HOME/OpenFOAM/OpenFOAM-5.x/etc/bashrc WM_LABEL_SIZE=64 WM_COMPILER_TYPE=system WM_COMPILER=Gcc WM_MPLIB=OPENMPI 

如果没有报错,说明可以正式编译OpenFOAM了,先进入到Third-party下面:

./Allclean
./Allwmake -j4
#如果在集群上,可以用更多核心编译,速度会变快 srun -c64 ./Allwmake -j64

如果编译顺利通过,可以编译OpenFOAM:

cd ~/OpenFOAM/OpenFOAM-5.x
./Allwmake -j4 #耗时数小时
#同理如果在集群上,可以用更多核心编译,速度会变快 srun -c64 ./Allwmake -j64

如果没有报错,可以执行一下blockMesh,如果看到出现OpenFOAM的标志,就是安装成功了
image.png

可能遇到的错误

目前我遇到的错误,绝大多数情况都是找不到mpi.h,这个是由于openmpi没有配置好。如果按照文中的步骤,最后能看到mpi的环境成功配置应该就没有问题。
其次,找不到*.h或者.c大部分是因为缺少依赖库。例如我一开始在本地虚拟机安装了glibc,libtool库,但是集群中没有,编译一直不过,这个时候建议首先检查依赖库。
最后一个,如果Third-party能够成功编译,基本上OpenFOAM也能顺利编译,如果最后实在是编译不过,也找不到原因。可以将本地编译好的Thirdparty打包上传到集群再解压,然后再重新编译,这也是为什么要保持本地虚拟机和集群,操作系统以及安装操作一致性的原因。因为本地虚拟机,权限和上网可控,但是集群都不行,本地的编译出现问题较容易解决。
最后看一下我自己的.bashrc文件
image.png

标签:虚拟机,OpenFOAM,编译,openmpi,集群,超算,安装
From: https://www.cnblogs.com/sirenxie/p/16947492.html

相关文章

  • ReactNative XCode编译问题
    MacOSMonterey12.6.1+XCode14.1(14B47b)+模拟器iPhone11ios13.4启动步骤打开终端,yarnstart启动Metro服务打开XCode,打开项目中的ios文件夹下的.xcworks......
  • 代码的编译,解释,执行流程及常见编程语言对比
    引言:常用的高级语言可分为编译型语言和解释型语言,它们在代码的执行流程上有着明显区别。正文:编译器、汇编器与解释器代码:nothingbutatextfilethatmakessense,......
  • qnx环境下编译ffmpeg及解码mp4实践
    一ffmpeg简介1.ffmpeg是一套可以用来进行音视频处理的工具和编解码库;2.采用LGPL或GPL许可证(不能修改源码,只能使用so库,如果要修改源码,必须发布工程代码);3.ffmpeg对与硬件平台......
  • 2.1 实验:反病毒引擎扫描、编译时间、查壳、导入表查看、字符串查看--《恶意代码分析
    实验内容:1、将文件上传到http://www.VirusTotal.com进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?(国内用https://www.virscan.org/替代)2、这些文件是什么时候......
  • Java 使用baksmali.jar及smali.jar反编译classes.dex
    smali/baksmali是dalvik(Android的JavaVM实现)使用的dex格式的汇编/反汇编程序。该语法松散地基于Jasmin的/dedexer的语法,并支持dex格式的全部功能(注释、调试信息、行信......
  • 编译器优化丨Cache优化
    摘要:本文重点介绍几种通过优化Cache使用提高程序性能的方法。本文分享自华为云社区《编译器优化那些事儿(7):Cache优化》,作者:毕昇小助手。引言软件开发人员往往期望计算机......
  • iTOP3588开发板Android固件编译-修改成hdmi显示
    打开安卓12源码kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-evb7-lp4.dtsi中的设备树文件。注释掉#include"iTop-3588-mipi0.dts既配置为hdmi屏幕显示。如......
  • 12-2 -2 内核裁剪_驱动编译选择操作
    1、LED驱动2、通过空格切换状态按空格切换为 空[  ]和选择上[*]上面的分别标识不编译和编译进内核  3、修改后一直exit,最后exit进入终端时候提示保存退出......
  • java中的Exception的编译异常(受检)和运行异常(非受检)的理解
    受检:在编写代码的过程中,IDE集成开发环境没有给出错误提示(一般是有红色波浪线),在Console(控制台)可以显示,但会有明显的错误提示,称之为受检       非......
  • 2022 VS编译器如何实现监视
    前言:我们在运行代码时,有时出现BUG,这时,我们需要一个debug的过程,而强大的VS编译器提供监视这一功能帮助我们更高效的debug,但很多小伙伴找不到监视窗口,我来给大家解惑。为什么......