DUNE学习系列之(1): 何为DUNE?

https://raw.githubusercontent.com/zguoch/PubPic/master/dune-logo.jpg

摘要

这是DUNE学习系列的第一节,将介绍DUNE是什么?能干什么?总体结构及其特点。

什么是DUNE?

DUNE (Distributed and Unified Numerics Environment) 是分布式-统一标准的数值计算环境的英文的简称。 它是一个用于求解偏微分方程组(PDEs)的工具模块,更是一个框架。 基于这个框架,就可以很容易的实现有限元(FE)、有限体积法(FV)以及有限差分法(FD)。 众所周知这三种方法是求解偏微分方程的基本方法,一般的计算平台基本都是只选择一种一种方法, 比如OpenFOAM是基于FV法,DealII是基于有限元法,而DUNE可以将三种方法都实现,可见其框架的完备性和强大。 值得一提的是,这么优秀的东西居然是开源的,而且许可证非常宽松,几乎不限制你的用途。 DUNE是德国斯图加特大学的一个科研团队开发的,目前也是这个团队在进行维护和持续更新的。 不得不感慨一下,这世界上有情怀的人还是有地!

https://www.dune-project.org/img/dunedesign.png

图 9 DUNE的框架层级结构

DUNE的架构

DUNE的基本思想是构建一些借口,以允许有效使用旧的和/或新的库。 现代C++编程技术可以使用公共接口以非常低的开销对同一概念进行不同的实现。 因此,DUNE确保科学计算的效率而且基于其开发的应用程序还支持高性能计算。 DUNE的框架设计结构如图 9所示。 基于DUNE的这种架构设计,它有如下几个特点:

我刚接触DUNE是在2019年的下半年,当时我去德国亥姆霍兹基尔海洋研究所访问,正好德国老板把DUNE的一个开发者请过来讨论项目。 这个开发者是一个印度姐姐(是个数学家),经过她的介绍才发现原来还有这么优秀的一个计算平台。 当时我是在用OpenFOAM做海底热液循环的动力学模拟的,时间有限没能立马研究这个DUNE模块,但是从此在心里埋下了一个种子:有空了必须研究一下DUNE为我所用。

DUNE的特点

  • 通用的网格接口,可以与不同的网格对接。

  1. 迭代求解器模板库,具有代数多重网格预条件子。

  2. 用于试验和测试功能以及通用离散化模块的高级接口。

  3. 为用户模块提供完整的网格接口的Python绑定,对熟悉Python的用户是一大福音。

DUNE的用途

这么优秀的计算平台,那一定有很广的应用了。下面就列举其中的一些应用举例。

医学领域

https://www.dune-project.org/img/blood_girke.png

图 10 血液流经变窄的颈动脉,用于模拟动脉硬化

材料科学

https://www.dune-project.org/img/cahnlarche-3.png

图 11 二元焊料合金中的粗化