红联Linux门户
Linux帮助

ubuntu14.04下ARPACK/PARPACK安装具体步骤

发布时间:2015-09-25 10:13:06来源:linux网站作者:米饭的白色

首先要说明的是自己在用 PHG ,PHG 中解特征值和特征向量时要用到相关的包,首先是选择安装 Trilinos 和 PARPACK(这是两个独立的包,都可解特征值问题) ,其实我觉得只用安装 Trilinos 包就够用了,并且 PARPACK 官方已经放弃维护了,关于 Trilinos 的安装会在之后的文章中提及,这里先说安装 PARPACK 具体步骤。

要先安装gcc(c编译器),g++(c++编译器),gfortran(fortran编译器)


1.若是只选择安装 ARPACK 时,可以选择用 ubuntu 自带的包

sudo apt-get install build-essential
sudo apt-get install gfortran
sudo apt-get install libarpack2-dev

arpack官网上的库和补丁包已经没有维护了,代码里有很多问题,比如说second.f文件里面有bug, abs()函数里面规则过久,编译器大多已经不支持。相反,通过Linux包管理系统安装的arpack都没有这些问题,很干净。


2.要并行计算时还要安装 PARPACK ,这时就需要从最开始的源码进行安装了,源码的下载地址:http://www.caam.rice.edu/software/ARPACK/download.html

或者在上传的资源里: http://download.csdn.net/detail/mifangdebaise/8954649

要分别下载 arpack96.tar.gz,patch.tar.gz,parpack96.tar.gz,ppatch.tar.gz,并按此顺序依次解压缩,按照我自己的习惯是解压缩到 /usr/local/src/,注意这里依次解压缩后只归并得到一个文件夹 /usr/local/src/ARPACK/


3.下面就是要依次编译 ARPACK 和 PARPACK 了,但要有一些需要修改

1). 将 /usr/local/src/ARPACK/UTIL/second.f 文档中 external etime 那行注释掉,.f 是fortran文档,用!,c,C进行注释。

2). 修改 /usr/local/src/ARPACK/ARmake.inc 文档

a). 根据READEME,首先将 home 变量改为 home = /usr/local/src/ARPACK

b). FC      = gfortran

FFLAGS    = -O

这里要解释的是,首先将编译器改为了 gfortran,其次在flag中,要把cg89选项去掉,这个目前的fortran编译器已经不支持,所以会出各种奇怪的错误

c). PLAT = LINUX,其实这个地方改不改问题不大,改了,那只是一个符号,无妨碍的。

d). 至于
LAPACKLIB =
BLASLIB =
先空着(我不太确定要怎么填),因为 arpack 带了 blas 和 lapack 的源码,让 arpack 用它自己带的,如果提示有错误,再修改……

e). 至于 MAKE    = /bin/make
你可以先用 which make,找出来哪个,就填哪个好了……,我的修改后为 MAKE    = /usr/bin/make

然后在arpack根目录下 make lib就可以编译出arpack的lib了。

下面编译parpack的lib,注意,查看 makefile 的 plib: 选项(其实是 parpacklib: 下面的那些操作中变量在 ARmake.inc 中没定义),同时对比 lib: 选项(即是 arpacklib: 下面的那些操作中变量在 ARmake.inc 都有没定义),这样就需要将变量 PUTILdir,PSRCdir,PARPACKLIB 在 ARmake.inc 中给出定义,分别如下 f) 中(其实就是参考 arpacklib: 操作中变量 UTILdir,SRCdir,ARPACKLIB 的定义给出的):

f). PUTILdir      = $(home)/UTIL

PSRCdir       = $(home)/SRC

PARPACKLIB  = $(home)/libarpack_$(PLAT).a

g). 还要参照 ARmake.inc 中 ALIBS =  $(ARPACKLIB) $(LAPACKLIB) $(BLASLIB)

增添 PLIBS =  $(PARPACKLIB) $(LAPACKLIB) $(BLASLIB)

3). 此外,在parpack/src/mpi下有pssaitr.f文件的第307行出错,它提示该行不能在data后,往前看几行,果然有个data,把这几行移过去就好了,然后回到arpack根目录下,执行make plib ,就可以成功的编译出plib了!

编译完 plib 时其实名字跟由 ARPACK 编译出来的 lib 相同,只是覆盖了原来的由 ARPACK 生成的 lib 。