AFEPack 软件
(作者:北京大学数学院, 李若)
Website: http://dsec.pku.edu.cn/~rli
1. 设计原则
AFEPack 是刘文斌教授和作者开发的一个自适应有限元软件包。这个软件包的设计时候的基本用户对象是做数值计算的研究人员,所以最主要的目标在于帮助研究人员节省程序设计的时间,而在一定程度上牺牲了程序运行的效率。对于研究工作而非工程人员来说,最重要的是在对研究工作有了新的想法以后,能够在比较短的时间内迅速将想法进行实现,验证并改进自己的想法,而不是追求写出的代码能够达到效率上的最优。使用相同风格的代码,也可以对不同算法的效率进行可信的比较。由于整个算法中最耗时间的常常是像求解大型稀疏线性方程组这样的部分,AFEPack 的效率不能达到最优的部分却在程序的其它部分,所以对于复杂的问题,AFEPack 总体上的效率还是相当高的。但是由于它灵活的结构,AFEPack 常常能够将需要长达几个星期甚至几个月的开发时间缩短到几个小时,因而作者认为,AFEPack 能够很大程度上提高我们的研究工作的效率。
AFEPack是一个开放源码的软件,遵从GPL协议。您可以在我的主页上的"数值计算软件"链接上得到软件包的源码和详细的安装介绍。
2. 结构和功能
AFEPack 从逻辑上对于使用者来说,可以分成三个层次:
第一个层次是基本的有限元空间的支持模块,这个模块能够支持网格中的单元几何形状任意的网格上建立任意的自由度分布和基函数的有限元空间。
整个有限元空间的自由度的管理是完全自动化的,有限元空间上的基函数是使用各个单元上的形函数自动进行识别连接起来成为基函数的。具体地来说,程序事实上被设计为和具体的单元的几何形状以及单元上的自由度分布和基函数无关,从而网格可以是各种单元混排的网格而我们在程序中却没有丝毫实现上的难度,这是AFEPack 能够帮助我们节省大量的开发时间的一个关键之处。程序具有很大的维数无关性,我们的程序能够是一维的、二维的、三维的甚至是更高维的,我们都能完成自由度的自动管理和有限元空间的自动建立。上面的设计使得我们的程序能够被最大程度地被重用。
第二个层次是有限元自适应支持模块,这个模块能够进行h-自适应,并能够处理多套h-自适应网格的之间的操作。
AFEPack 中的h-自适应算法支持大幅度的网格操作,并具有核心算法的维数无关性,实现起来简单清楚,并使得代码重用率非常高。我们的h-自适应模块现在只能进行二维和三维的单纯形上的自适应操作。这个模块还加入了一部分进行r-自适应的代码,现在可以支持二维的三角形上的、基于调和映照移动网格方法。整个层次的用户接口是基本上与维数无关的,从而使得用户的程序也将具有非常大程度的重用率。
第三个层次是应用层次,事实上就是使用者开发的程序,所以这个层次在我们的程序包中只是一个逻辑上的概念,因为我们这个软件包设计的理念就是将用户本身也纳入了整个程序包的开发之中。所以您如果使用AFEPack 进行了开发以后,整个应用程序和软件包是整个连接在一起的。
3. 应用和展望
我们现在这个软件包已经在很多问题中进行了应用,包括一系列的最优控制问题的计算、移动网格方法的多个应用、求解Fokker-Planck方程、参数识别问题、不可压流体、金属结晶的模拟等。但其中大部分应用都是我自己开发的,其他的用户只有几个。主要的原因在于我们现在已经没有任何资金的支持,不能进行比较好的推广活动,另外也不能有专业的文档维护人员,使得我们的软件包的文档不像其他类似的软件包一样完备,我们期望以后能够改善这些方面。我在上个暑假在湘潭大学给研究生进行一个星期的介绍性的讲座,本学期的每周六上午进行推广AFEPack的系列讲座,并建立了软件包的主页以及义务负责软件包使用的技术支持。
AFEPack 近期的发展也还比较活跃。我们加入了间断Galerkin方法的支持以及对向量值基函数的支持,并排除了以前程序中的多个 BUG。一些例子程序和实用的小工具也都被陆续加入到了程序包中,我们最新加入的文档都尽量使用汉语。
http://circus.math.pku.edu.cn/AFEPack/