跟我一起学PETSc
一、PETSc安装与常见问题
PETSc,是一套数据结构和例程,用于通过偏微分方程建模的科学应用的可扩展(并行)解决方案。
1.1 PETSc的安装
1.1.1 下载相应的安装包
官网地址:
https://www.mcs.anl.gov/petsc/download/index.html
也有git的相关链接
$ git clone -b release https://gitlab.com/petsc/petsc.git petsc
下载不同版本的petsc-x.xx.x.tar.gz安装包
- petsc-x.xx.x.tar.gz 只含有源代码
- petsc-with-docs-x.xx.x.tar.gz 包含所有文档,推荐离线使用
- petsc4py-x.xx.x.tar.gz 可以单独安装petsc4py
下载后,将其放入安装目录并解压
$ tar xf petsc-<version number>.tar.gz
1.1.2 定义相关的环境变量
安装前需要定义相应的环境变量
export PETSC_DIR=/home/user/Downloads/petsc/petsc-x.xx.x
export PETSC_ARCH=test
-
如果主目录没有test文件夹,需要创建
1.1.3 安装前进行配置
如果在当前环境内已经安装好基础的
gcc
,
gfortran
编译器,并且已经配置好
mpich
,
blas
与
lapack
的环境,就可以直接运行
./configure
如果需要指定特定环境,需要在
configure
后面利用
with
指定
./configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran --with-mpi-dir=/usr/local/mpich with-fblaslapack=/usr/local/linuxgnu
如果可以使用网络环境,可以使用
download
进行相关包的下载
./configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran --download-mpich --download-fblaslapack
如果不需要某些环境,可以指定其为0,例如
--with-fc=0
配置时会进行检查文件,建立目录等工作,配置完成图如下
1.1.4 进行安装
使用
configure
配置完成后,PETSc会给出安装指令
make PETSC_DIR=/home/user/Downloads/petsc/petsc-x.xx.x PETSC_ARCH=test ALL
因为之前已经指定过环境变量,也可以直接使用
make ALL
安装过程实际上是一个环境配置,程序编译的过程,最终默认生成动态调用的
libpetsc.so.x.xx.x
的petsc文件
如果需要静态的.a的PETSc库,可以对主目录下
gmakefile
中的50行进行修改,将下图标识的
no
改为
yes
然后重新进行编译
make clean
make ALL
最后编译完成即可得到静态的
libpetsc.a
文件
另外,PETSc还提供了分模块封装的设定,非常的方便(之后更新)
进行到这一步,安装就已经完成了
1.1.5 安装后检查
运行
check
指令对测试程序进行检查
make PETSC_DIR=/home/user/Downloads/petsc/petsc-x.xx.x PETSC_ARCH=test check
运行结果
如果看到Completed test examples,那么恭喜你,已经成功安装了PETSc
1.2 PETSc安装过程常见问题与解决方案(持续更新)
-
Error: mpich did not work
解决方案:mpich版本较多时,指定目录和当前环境mpich路径一致 -
Error:libslurm.so.36: cannot open shared object file: No such file or directory
解决方案: 当前环境libslurm动态库缺少相应文件,感觉是libslurm库动静态文件不同导致的 -
Error:fatel error:petscconf.h:No such file or directory
解决方案:在
makefile
中定义头文件位置时,PETSc需要定义两个,一个是主目录下的include,一个是安装后test目录下的include,两个头文件地址都加上就可以了 -
Error:libfblas.a:Relocations in generic ELF (EM:62)
解决方案:原因是需要在一个服务器上离线安装PETSc,于是把之前编译好的
libfblas.a
直接复制过来的,那个是在我linux虚拟机编译的,并非ARM架构,而需要离线安装的服务器是ARM架构,因此需要在同样架构的机子上编译出.a文件 -
Error:libflapack.a:Relocations in generic ELF (EM:62)
解决方案:和上一个问题一样,需要在同样架构的机子上编译出
libflapack.a
文件