在 Ubuntu 中安装 FEniCS

FEniCS Logo

Update 20161212
现在容器大热,Fenics 也提供通过 docker 安装了,具体可以参看官网的说明。这样就可以少折腾了。

缘由

最近导师去开了个会议,从其他人那里打听到有很多人都在 FEniCS 的基础上写代码了。导师她最开始认为,它是用来写 Fortran 代码的一个平台,加之她主要使用的编程语言为 Fortran,所以希望我们能够去学习一下。

第一次看到 FEniCS 这个词,应该可以追溯到我大四做毕业论文的时候。那时想找个软件来书写有限元程序,因为自己从底层开始写起太费事了。通过搜索,找到了许多软件,具体可以看看这个链接。通过试用,左右权衡,最后决定使用 deal.II 来做毕业论文。

当时对于 FEniCS 的认识是:

它是用 Python 写的,自己对 Python 不熟悉,查找到的资料不是很齐全;
当时自己尝试从 PPA 安装了 FEniCS, 但程序运行地不是很顺利;

现在,通过这一两天的使用,觉得这货实在是太简单了,用 Python 根据它自定义的 UFL 语言来自动生成可执行代码,最后使用 OpenGL 和 VTK 来生成图形和 vtu 文件。当然,方便的代价就是编译过程的时间有点长;毕竟鱼和熊掌是不能兼得的。

PS:FEnics 还可以与 C, C++, Fortran, 或 MATLAB 交互,具体可以看这里的文档

FEniCS 的安装过程

安装前的准备

首先我的安装平台为 ubuntu 14.04, 64 位,但从自己安装的过程来看,其他系统应该也可以安装,大体步骤是一致的,具体可以看官网的说明。

特别说明:对于使用 Windows 系统的同学,你就别指望能够完美安装和运行 FEniCS 了,官网上说了, Windows 平台的安装包没有更新了。所以还是尽快学习一些 Linux 或 Unix 这类系统的使用方法吧。命令行真的非常好用,包管理器的使用也非常方便。

下面我是通过 Anaconda 这个 Python 集成环境来安装 FEniCS 的,所以你需要安装好 Anaconda。可以到官网的下载页面 去下载相应版本的安装包,这里我们使用的是 Anaconda-2.3.0-Linux-x86_64.sh,至于安装,该页面里有提示,这里不赘述了。

另外,在运行 FEniCS 的程序之前,需要安装好 gcc g++ gfortran 等编译器,不然会出现意想不到的错误。可以使用如下的命令来安装这些软件:

sudo apt-get install build-essential gfortran

具体的安装过程

根据官网的解释,有如下几种方法可以来进行安装:

  1. 直接添加 PPA 来进行下载。

但安装尝试后,会引入许多不必要的安装依赖如 texlive 等,为了不污染系统,所以没有采取这种方法。当然,如果你订阅了他们的 PPA,这种方式能够使你获取到最新的更新。如果你没有‘洁癖’,可以尝试这种方法。

(注: 最近(2015-12) 找到了如何在安装有 Texlive 发型包的情况下,不再引起上面需要安装 texlive 依赖的方法,具体请参考这篇文章的最后一段,但请自己制作 dummy package,因为在安装时,可能会出现一点问题,请根据问题的描述更改相应的配置文件。 )

  1. 通过下载脚本编译。

通过下面的这个脚本来从源文件编译安装 FEniCS。

curl -s http://fenicsproject.org/fenics-install.sh | bash

但在尝试的过程中,总是提示 SSL 认证失败。无果,所以放弃了这种方法。

  1. 直接下载虚拟机镜像来运行。

将镜像导入 Vbox 后,大概用了 7G 的空间,镜像里的系统使用的是 Lubuntu,感觉很精简,但没有自己安装的 Ubuntu 体验好。又考虑到空间占用的原因,亦弃之。

  1. 通过 Anaconda 来安装 FEniCS。

可以根据这个网页的指导安装。

这个 github 仓库里面用的命令是:

conda install fenics mkl --channel juanlu001

而官网里面使用的命令是:

conda create --name fenics27 python=2.7
source activate fenics27
conda install fenics --channel juanlu001

我最开始是根据 Github 上的命令来安装的。而再给其他人安装的时候,我特别使用了官网了给出的命令,现在大致知道了它们之间的区别:前者是直接将 FEniCS 安装到 Anaconda 的目录里面,而后者是创建了一个新的环境,单独进行了安装。考虑到简洁性,我推荐第二个命令。

在终端中依次输入上面的命令后,会大概下载 300M 左右的安装包,最后安装完毕会有 4G 左右(加上 Anaconda 原来安装后的文件)。经过一段漫长的等待后,FEniCS 就安装好了。

安装后需要做的事

安装完成后,自然需要运行一下 FEniCS 自带的示例程序,它们一般在 ~/anaconda/envs/fenics27/share/dolfin/ 目录下。随便进入某个示例目录,可以有名为 cpppython 的两个目录。先进入 python 这个目录试试效果。

在终端运行:

python filename.py # 注意请将这句中的 filename 换为具体的程序名称

然后终端会报错,大致意思是没有找到 dolfin 这个 module。这应该是环境变量的问题,最后通过搜索,参考这里的说明,我们需要将 dolfin.conf 这个文件加到 PYTHONPATH 环境变量中。命令为:

source <PATH_TO_YOUR_DOLFIN_INSTALLATION>/share/dolfin/dolfin.conf

对于使用 Anaconda 安装 FEniCS 的情况,dolfin.conf 一般在 ~/anaconda/envs/fenics27/share/dolfin 目录里。

最好是将这个上面这个命令写入你本地的 .bashrc 文件里面,然后用 source ~/.bashrc 更新环境变量。

这个做完后,总该可以运行程序了吧。可惜,还不行。你会看终端里报错,提示说某些 VTK 的动态链接库找不到,根据 Github 里的 issue,需要使用下面的命令将 VTK 的版本降低:

conda list vtk
conda install "vtk=5.10"

这样就可以运行程序了。在程序执行的开始,你可能会看到有些提示,说 MKL 库有 30 天的试用期限,要你购买。对于这种情况,Anaconda 给学校和科研机构提供有学术版的许可,只要你使用 edu 的邮箱就可以申请到, 申请地址

申请后,会得到一个 license 文件,将其放在 ~/.continuum 目录下即可。

另外,我发现我自己申请的 license 同样也可以用在别人的机器上,不知这是不是一个 bug。

安装后软件的学习

关于入门,可以直接看官网的文档,例如 tutorial,The FEniCS Book, Manual。

PS: 可以到这里下载到 The FEniCS Book。

关于这两天学习的感受:我是从 tutorial 入门的,看了过后感觉这货居然这么简单,相比于我用 deal.II 写代码,这不知要轻松多少倍。另外,tutorial 里面的例子有些代码不能运行了,应该是 dolfin(或其他组件) 更新的缘故,而文档还没有被更新。下一步继续看文档来学习。

以后深入后,再写点东西来分享。

UPDATE 2018.07.31
有几点需要更新的:

  1. 偶然发现了这个 网站, 似乎是将 fenics 应用到 HPC 领域中,并且在 edx 中开了一门 MOOC

  2. 关于学习资源,可以看看 这个老师的主页,里面课程中有一些 notes。