求解偏微分方程开源有限元软件deal.II学习–Step 1

求解偏微分方程开源有限元软件deal.II学习–Step 1

Posted on 2016-08-02   |   暂无评论

简介

deal.II是一款开源的求解偏微分方程的有限元软件,它有如下几个特点:

  • 使用C++编写
  • 有多种单元类型
  • 可以大规模并行
  • 可以自适应 格
  • 文档和范例齐全
  • 与其他库有良好的接口

安装

deal.II最新版本为8.4.1,可从官 上下载源码,解压后进入源文件目录安装:

如果期间需要其他依赖如cmake、doxygen等,自行安装好即可。

编译运行

deal.II的文档和example特别完备,刚开始接触可以它多达54个例子进行。
具体入口在这里。
编译运行命令为:

第一条命令用来创建Makefile文件,指明程序所依赖的文件、怎样编译和运行。此命令应该能找到之前安装deal.II后的库文件,如果不能找到,需要人为指定路径:

第二条命令将源文件编译成可执行文件,第三条是运行该可执行文件。其实可以省略第二条命令。后面的example遵循同样的命令。

第一个教学实例——step-1

此头文件声明了Triangulation类模板,其用途是生成各种单元。如Triangulation表示一维线段,Triangulation或表示二维中的曲线和三维中的面,通常用于边界单元中。

该头文件声明了GridGenerator命名空间,用于生成标准 格

该头文件声明了GridOut类,用于生成多种格式的数据,如dx、gnuplot、msh、eps、svg、vtk等。

为了防止命名冲突,该包的函数和类都包含在dealii这个命名空间中。

用超立方体来初始化给定的Triangulation,并将 格加密4次。
第一个函数first_grid生成一个由一个单元 格加密四次后的16×16=256个正方形单元的 格。

结果如图:

之前设定的hyper_shell初始周向 格为10个cell,如果设置为3,且只对边界上的cell设定indicator:

结果为:

以上分析过程见这里。

在step-1的second_grid函数中,将上述细化更进一步,不再是全局细化,而是局部细化,因此首先是要得到能指向每个cell的指针,可以想象一个triangulation是所有cell的集合,而cell在其中并不是一个序列,因此这里不能直接用指针,而是用迭代器iterator,从第一个cell开始,遍历所有cell。不过这里没有使用遍历所有cell的迭代器,而是使用只遍历active cell的迭代器active_cell_iterator,active cell是没有children的cell,其后来将被细化:

然后在这个for循环中再遍历每个cell的所有顶点:

然后从这些顶点中通过判断该顶点与圆心的距离找到属于内边界的顶点,从而标记该顶点所在的cell,用于后续的细化:

然后开始执行细化操作:

结果为:

最后

http://blog.sciencenet.cn/home.phpd=space&uid=441611

http://qixinbo.info/tags/deal-II/

亓欣波

致敬!!!!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年7月27日
下一篇 2016年7月27日

相关推荐