PHG是中科院数学与系统科学研究院计算数学与科学工程计算研究所张林波老师带领的团队开发的三维自适应有限元并行程序开发设计平台。 PHG的设计隐藏了并行处理的细节, 对三维有限元程序现实有足够的灵活性。 对于对mpi, openmp等并行程序接口不太熟悉, 但又需要实现并行程序的研究人员来说, PHG是一个非常有效,实用的平台。
PHG的安装并不难,和Linux下的其他软件包的安装程序一样, 三步曲: 1) ./configure 2)make 3) make install 。 在张老师的主页上下到源码包解压之后, 里面自带了用户使用手册, 手册里包含了安装步骤。 我在这里就重复一下我的安装过程,以及安装过程中遇到的问题。
(I)一些备注: 我之前在ubuntu14.04上安装过, 现在写的这个博客是基于mint18.1 (由于mint是基于ubuntu的, 所以对于安装软件包来说, 两者基本没有什么区别)
(II) 需要先安装的一些必须的软件包。
a) 确认系统安装了gcc, g++, gfortran, 没有的话,可以通过以下命令安装
$ sudo apt-get install gcc
$ sudo apt-get install g++
$ sudo apt-get install gfortran
b) 安装blas, lapack
在官网上下载lapack源码包, 我用的是旧一点的版本lapack-3.5.0, 将源码包解压, 我习惯是解压到/opt/lapack-3.5.0
进入到/opt/lapack-3.5.0目录, 根据自己电脑的硬件, 在子目录INSTALL里选择合适的make.inc.XXXX(这里XXXX指的是相应的平台,例如ALPHA, SUN4)复制到lapack-3.5.0目录下,重命名为make.inc, 或者直接将当前目录下的make.inc.example重命名为make.inc. 网上很多安装lapack的博客或者帖子下面都需要修改Makefile中的一行, 我这里的做法是, 事先编译libblas, libtmg, liblapacke, 然后在编译liblapack。 原因是以为,生成liblapack.a 需要用到blas的库。
$ make blaslib
$ make tmglib
$ make lapackelib
$ make all
这里会出现一个报错:
Testing Nonsymmetric Eigenvalue Problem routines
./xeigtstz < nep.in > znep.out 2>&1
Makefile:453: recipe for target 'znep.out' failed
make[1]: *** [znep.out] Error 139
我查到一篇博客(https://ajz34.github.io/2016/09/15/Lapack-etc-Installation/), 其中给了出现这个问题原因以及解决方案, 只需要运行一下命令就可以。
$ ulimit -s unlimited
至此, blas, lapack就已经安装好了。 然后将得到的库文件,即 liblapack.a liblapacke.a librefblas.a libtmglib.a拷贝到系统目录下, 或者是将当前的这个目录路径加入到环境变量PATH中去。
c)安装mpi
在官网上下载源码包, 解压。 我用的版本是mpich-3.1.4, 我的习惯是解压到 /opt/mpich-3.1.4
进入目录/opt/mpich-3.1.4, 进行Linux下软件安装三步曲
$./configure --prefix=/usr/local/mpi/mpich-3.1.4
$make
$sudo make install
d) 安装petsc
这个并不是必须的, 但是在很久之前我安装phg的时候, 没有安装petsc, 后来出现报错, 具体错误信息已经不记得了。 安装petsc后就没有错误, 所以后来我安装phg都会将petsc安装好。
$ sudo apt-get install petsc-dev
这样准备工作就算是做好了。
(III) 安装PHG
PHG有很多可以选择性安装的解法器, 具体可以参看PHG的用户手册。 我这里仅仅是最基本的PHG安装, 安装后可以保证最基本的使用。
下载phg源码包, 解压, 我解压到/opt/phg-0.9.2 , 进入目录/opt/phg-0.9.2
$./configure --prefix=/usr/local/phg/phg-0.9.2
$make
这里有一点需要注意, 这样直接编译好生成的src 中的refine.o和coarsen.o文件并不直接支持并行计算(至少是在我的机子上是这样的), 需要根据自己电脑的硬件,以及所安装的mpi的版本, 从子目录obj中挑选相应的refine.o和coarsen.o文件 (详细的说明参见phg中obj子目录中的ReadMe.txt文件)复制到src中(覆盖原来的两个文件)。 例如
$ cp obj/mpich-x86_64/double_int/*.o src/.
然后再编译一遍
$make
$sudo make install
(这里也可以按照phg中obj子目录中的ReadMe.txt中的步骤去做)
保证整个过程都没有报错, 然后到子目录example下测试一下phg是否已经安装成功。
$ mpirun -n 1 possion
$ mpirun -n 4 possion