保姆级Linux安装petsc及报错解决方案

功能: 可移植,扩展的科学计算数据包,用于大型矩阵方程组的求解

安装参考官网指南

https://petsc.org/release/install/install/

安装说明

安装简介

petsc安装依赖于mpi和lapack,不指定这两个库会安装失败,可以通过事先安装直接指定目录,也可以选择安装时下载。为了并行时统一环境,Mpi建议直接指定已经安装的库(可以配置环境变量,或者通过关键词指定mpi目录),lapack建议直接安装时下载。

安装时可以设置是否为debug模式,为提高效率,我们安装时需要设置不debug

安装时,可以同时安装一些额外的库,我们求解器需要一些额外的库,包括superlu_dist mumps hypre parmetis metis fblas-lapack scalapack

安装时使用configure命令进行配置

Configure介绍:configure是一个安装配置工具,petsc中已经预先使用configure设置过了安装的可选项目,安装时只需要对关键词进行指定,就可以自动安装。另外,configure需要使用python2或者python3来运行。

Configure命令指定关键词格式为 –-关键词=参数,不同的关键词以空格分开

安装时需要指定编译器、安装目录、是否debug(默认可debug)、mpi和lapack目录、其他额外下载的目录

下面介绍需要指定的关键词

指定编译器:

编译器需要指定c语言c++语言和fortran的编译器,但程序会在环境变量中自动寻找,因此不用单独指定(当然也可以单独指定)。自动寻找则按照以下顺序,一般mpi目录已经加入了环境变量,程序直接能找到mpicc,mpicxx以及mpif90三个编译器(可以直接在终端敲入这几个编译器,看看有没有输出,证明环境变量中有没有加入这几个编译器)

d8ab2d62e8da45dfacb0ca92f346021d.png

默认编译器的选择顺序

指定安装目录:

--prefix=/home/myname/petsc

指定是否debug:

指定不debug :--with-debugging=0

指定编译器优化运行效率 :

COPTFLAGS="-O3 -march=native -mtune=native"

CXXOPTFLAGS="-O3 -march=native -mtune=native"

FOPTFLAGS="-O3 -march=native -mtune=native"

指定mpi和lapack目录:

两个目录可以直接指定

--with-mpi-dir=/home/myname/OMP315

--with-blaslapack-dir=/usr/local/blaslapack

但如果目录已经加入环境变量,就不用再指定目录了

我们的mpi直接在环境变量中配置,lapack则选择安装时下载。

4c8cf50e0d8b44ca9865415efaeb466c.png

Mpi和lapack都在环境变量中的安装方式

其他额外下载的目录:

Lapack没指定环境目录,因此这里首先要包括lapack,考虑到我们需要用到hyper等其他算法,需要安装其他的外置库,这里直接指定下载就行了(有时候下载不了,程序会让你自己下载,然后指定下载后的安装包目录)

--download-superlu_dist

--download-mumps

--download-hypre

--download-parmetis

--download-metis

--download-fblaslapack

--download-fblas-lapack=1

--download-scalapack

具体安装步骤:

我们进行了三次安装,以下安装步骤适用于类似的系统和环境,某些环境下会报错,文章最后有报错汇总

centos7(环境:gcc5.8.0,gcc5.8.0编译的mpi3.1.5,安装petsc3.5.4)

centos8(环境:gcc8.5.0,gcc8.5.0编译的mpi3.1.5,安装petsc3.7.0)

KOS5.x86_64(环境:gcc8.5.0,gcc8.5.0编译的mpi3.1.5,安装petsc3.7.0)

安装需要cmake版本>2.5,否则无法编译metis

1、下载petsc-3.5.4.tar.gz到任意目录下

2、打开终端进行解压:

tar -xzvf petsc-3.5.4.tar.gz

3、进入安装包目录

cd petsc-3.5.4

4、配置安装目录,以/home/myname/petsc安装目录为例:

python2 ./configure --prefix=/home/myname/petsc --with-debugging=0 COPTFLAGS="-O3 -march=native -mtune=native" CXXOPTFLAGS="-O3 -march=native -mtune=native" FOPTFLAGS="-O3 -march=native -mtune=native" --with-mpi-dir=/home/myname/OMP315 --download-superlu_dist --download-mumps --download-hypre --download-parmetis --download-metis --download-fblaslapack --download-fblas-lapack=1 --download-scalapack

5、编译:(直接复制提示的内容)

8e62fcfe3f0647da88de1bb53a8dbfa0.png

configure成功后提示

make PETSC_DIR=/home/myname/petsc-3.5.4 PETSC_ARCH=arch-linux2-c-opt all;

6、安装:(直接复制提示的内容)

0107529a7ef84fafa67cb4f8ab85de40.png

编译成功后提示

make PETSC_DIR=/home/myname/petsc-3.5.4 PETSC_ARCH=arch-linux2-c-opt install

7、配置环境变量:

打开配置文件

gedit ~/.bashrc

加入以下环境变量

export PETSC_DIR=/home/myname/petsc

export LD_LIBRARY_PATH=$PETSC_DIR/$PETSC_ARCH/lib:$LD_LIBRARY_PATH

常见报错:

(1)petsc3.5.4进行configure崩溃

CONFIGURATION CRASH (Please send configure.log to [email protected])

86563fa3d0094d78b92e0a314abb8103.png

低版本的petsc例如3.5.4,无法在高版本的gcc例如8.3.0或11.2.0下编译,但可以在5.8.0或4.8.0下编译

(2)petsc3.7.0进行configure崩溃

UNABLE to CONFIGURE with GIVEN OPTIONS    (see configure.log for details):

Could not locate a functional C compiler

7a480e67b06e4c28b9de5bd0a491d586.png

当gcc版本和编译mip的gcc版本不一致时,例如我们这里用gcc版本为9.3.0,mpi版本为4.1.1.编译mpi的gcc版本为8.5.0,出现上图报错

(3)petsc进行configure时编译FBLASLAPACK过程中崩溃

a0c60bdbda5241689e01eaa0ec41191c.png

这个是什么原因我们也不知道,但按照它的提示添加--with-shared-libraries=0就可以编译通过,但如果mpi版本不是3.1.5,就依然会编译失败

(4)卡在TESTING:configureMPITypes from config.packages.MPI (config/BuildSystem/config/packages/MPI.py:249)

a5220ce1052346f58382073241949250.png

我们的gcc版本为8.5.0,mpi版本为3.1.5,使用gcc8.5.0编译

这个问题跟MPI环境有关,参考超算中使用module命令加入的mpi,其中有一个环境变量加上可以解决这个问题。

export OMPI_MCA_btl=self,vader