在 Ubuntu 中安装 AFEPack

Update
相对来说这里的内容有些陈旧了,最近学了点 docker,便做了个 AFEPack 的 docker 镜像,若嫌安装麻烦,可以直接参考我的说明进行安装,当然,当时做的时候有些库可能用不了了。。

系统准备

我现在使用的系统 Ubuntu 14.04,经过测试可以安装运行 AFEPack,其他的可能需要检验。(另:已经在 Linux Mint 、Ubuntu 16.04 安装成功。)

准备安装包

首先,下载好 deal.II、AFEPack、mpich(非必须) 这几个软件的安装包。

其中的 deal.II 和 AFEPack 可以到我的百度网盘去下载,这个是我从我大学同学的未来的师兄那里获得的,而那位师兄的老师正是这个软件包的作者 李若 老师。由于高版本的 deal.II 版本经过了许多的修改,且鉴于 AFEPack 几乎停滞的开发状态,我们采用的是 deal.II 的 6.3.1 版本。而 mpich 则可以到官网去下载最新的稳定版本。

相关软件的下载地址为:

deal.II 和 AFEPack : 链接: https://pan.baidu.com/s/1jxjO5wRhMjbQjqetQxSU6g 密码: utxt
mpich : http://www.mpich.org/downloads/

下载好这些包后,将他们进行解压备用。

安装必要软件

接下来,安装一些必要的软件。

首先安装 boost 库。这个可以用命令行,也可以使用 synaptic (新得立) 这个图形化的包管理软件来安装。命令行需要使用的命令为:

sudo apt-get install libboost-dbg  libboost-all-dev

接着安装自动化产生 makefile 的相关工具。其中 aclocal 已经被包括在 autoconf 里了。

sudo apt-get install autoconf automake

接着安装编译器,由于某些原因,编译 AFEPack 时,用高版本(如 4.8)的 gcc 和 g++ 会出错,所以需要安装对应的低版本的包。这里安装 4.6 版本。

sudo apt-get install gcc-4.6 g++-4.6 gfortran
#  降低 gcc,g++ 的版本,可以在后面改回来
cd /usr/bin
sudo ln -s gcc-4.6 gcc
sudo ln -s g++-4.6 g++

安装 deal.II

根据李若老师的解释,他选用这个包的原因是看上了这个包里面 lacbase 中的代码,即关于基础线性代数相关的代码写得很好,所以才采用了 deal.II 。所以我们可以只编译里面的部分文件,当然如果你不在乎占用一点额外的磁盘空间,也可以选择完整安装。

关于安装路径,下面以我的安装位置 /home/lc/Pkg/deal.II 来举例,其中 /home/lc 为我的家目录,可以对应地修改,也可以安装到其他路径,如 /usr/local/deal.II 等。

首先,进入解压后的 deal.II 目录,我的在 /home/lc/Pkg/deal.II 。 然后在终端中依次输入下面的命令,其中 # 后的内容为注释,可以忽略。

cd /home/lc/Pkg/deal.II # 进入解压后的 deal.II 目录
./configure
make -j4 lac base contrib # -j 选项是启用多线程,以此来加快编译的速度,后面的数字最好与你机子的 CPU 的线程数相同或更少
# 或者使用 make all 来完整安装

经过一段时间后(根据你的机器配置而定),就把需要的文件编译好了。下面需要做一些软链接。在以前安装时,我尝试过直接把 deal.II 编译后产生的相应目录加在系统变量中,然后再安装 AFEPack,结果 AFEPack 不能找到 deal.II 的头文件,所以还是做个链接。具体的原因我也不清楚,可能需要问作者本人。

下面是我做链接时使用的命令,请相应做些修改:

cd /usr/local/include
sudo ln -s ~/Pkg/deal.II/deal.II/include/ .
sudo ln -s ~/Pkg/deal.II/lac/include/lac/ .
sudo ln -s ~/Pkg/deal.II/base/include/base/ .
sudo ln -s ~/Pkg/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/ .
# 这里的 tbb22_20090809oss 可能会有所不同,但一般这个目录都是以 tbb 开头的,可用 Tab 键来自动补全;
# 最后的 `.` 代指当前目录 ,以下类型
cd /usr/local/lib
sudo ln -s ~/Pkg/deal.II/lib/lib* .

安装 mpich

这个不是必须的,除了 mpich,也可以直接安装
OpenMPI

这个的安装可以根据解压后文件夹中的指示来操作,一般都是如下几个命令:

cd /home/lc/Pkg/mpich2/ # 进入 mpich2 解压后的目录,根据你自己的情况调整
./configure
make -j4
sudo make install

这样就安装好了 mpich。

当然,我们也可以直接使用软件源里面的 mpich,这样或许更省事些。

安装 AFEPack

现在进行 AFEPack 的安装。首先利用 autotools 套件中的软件(即 aclocal,autoconf,automake 等)来自动生成 configure 文件。使用的命令如下:

cd /home/lc/Pkg/AFEPack
aclocal
autoconf
automake --add-missing

然后把

# AFEPack templete
export AFEPACK_TEMPLATE_PATH="/home/lc/Pkg/AFEPack/template/triangle:/home/lc/Pkg/AFEPack/template/rectangle:/home/lc/Pkg/AFEPack/template/interval:/home/lc/Pkg/AFEPack/template/twin_triangle:/home/lc/Pkg/AFEPack/template/tetrahedron:/home/lc/Pkg/AFEPack/template/twin_tetrahedron:/home/lc/Pkg/AFEPack/template/four_tetrahedron"

加到 ~/.bashrc 文件中,然后使用 source ~/.bashrc 来使更改生效。

接着对 AFEPack 进行配置和编译。

./configure
make -j4

编译期间会报错停掉,报 mpi.h 找不到。这时仍然继续,输入:

make install

然后进入 AFEPack 目录下的 template 目录,来编译模板。我使用的命令为:

cd /home/lc/Pkg/AFEPack/template
make

现在来编译关于 mpi 的静态文件。这里需要 MPI 的相关库,这里我们使用的是 mpich。

~/Pkg/AFEPack/library/mpi
make -j4

example 子目录下有一些实用的工具,我们现在来编译它们。

cd ~/Pkg/AFEPack/example
make -j4

最后执行下面的命令来使得 ld 能够找到 AFEPack.so 等静态库。

cd ~/Pkg/AFEPack
sudo ldconfig

至此, AFEPack 的安装就结束了。

如果你在安装期间有什么问题,可以来询问我,我尽量帮忙。

参考资料