跟我一起学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
文件