转载自wx公众号:CS guy
来源于文章 MOOSE: Enabling massively parallel multiphysics simulation
网址:https://www.sciencedirect.com/science/article/pii/S2352711019302973?via%3Dihub
2.软件说明
2.1 软件架构
MOOSE旨在促进创建FEM工具,以运行高保真多物理场仿真。该软件由“系统”组成,每个系统都提供了一个扩展点,用于定义仿真特性。这些系统使用接口进行通信,通过解耦以允许更多的代码重用。 MOOSE中的每个系统都有一个特定的C++基类,应用程序开发人员继承该基类并覆盖虚函数,扩展该类以执行所需的计算。这种方法有两个优点:首先,应用程序开发人员可以使用标准C++的规范,完全控制计算流程;其次,继承链可以扩展,可超出框架所提供的基线功能,从而为下游应用程序提供丰富的功能。MOOSE有大约40个可以扩展的系统。单独讨论其中的每一个系统超出了本文的范围,但是提供框架核心功能的系统可以分为三类:与偏微分方程(PDE)相关的系统,材料属性和原位后处理(in-situ postprocessing)
定义PDE的两个系统是Kernel和BoundaryCondition系统。 Kernel对象定义了体积积分项,而BoundaryCondition对象定义了由FEM弱形式推导得出的表面积分项[15]。 例如,清单1中的C++代码片段是PDE对流项的实现示例。 此示例展示了支持自动微分(AD)的内核系统(请参阅第2.2节),必须实现precomputeQpResidual方法。
这是一种定义PDE方程式项的很强大的方法,优点如下:
1)该对流算子可以在1D,2D或3D中使用;
2)它可以使用恒定速度,可以与求解另一个PDE计算得到的场耦合,可以使用另一个应用程序计算出的场,甚至可以使用来自实验的速度场;
3)该内核可以在一个处理器上工作,也可以在100,000个处理器上并行工作,无需进行任何修改;
4)任何需要该方程式项的应用程序都可以重用此对象,而无需对其进行重新编码;
5)最后,还能以受控的隔离方式对其进行测试,以确保正确性。
Material系统允许定义“材料属性”,通常表示PDE中的系数。 这些属性可能是非线性的,它们本身可能依赖于PDE中的变量。使用框架的自动微分功能,这种依赖关系可以自动传播到系统的Jacobian矩阵。 材料系统定义后,框架中的其他系统会通过简单的生产者/消费者模型(producer/consumer)来使用材料属性。 然后,MOOSE确保系统对象在需要时计算这些材料属性。 材料属性可以与其他材料属性耦合或依赖于其他材料属性,相互依存关系会被跟踪,并以正确的顺序执行。这种设计将物理计算与所需的系数分离开来,从而使属性可以在应用程序内、跨应用程序共享和重用,而无需修改使用该属性的对象的代码。
“原位后处理”,描述了一组用于数据计算的系统(原文:describes a set of systems used for data computation that is typically performed post-simulation which are computed along with other calculations after, during or in-between solves)。此类系统包括Postprocessor,VectorPostprocessor和AuxKernel系统。Postprocessor和VectorPostprocessor系统分别计算标量和矢量值(例如,通过侧面的总热流量或总化学浓度)。这些计算本身可以取决于其他变量,材料属性或其他后处理值。 MOOSE包含多个实用函数,可协助在后处理阶段进行并行聚合,广播和分散。 AuxKernel系统允许使用有限元基函数计算“场”或空间变化的数据。原位后处理可在大规模并行时执行计算。这些值可以反馈到其他系统中,包括反馈到PDE项或材料属性的计算中。该系统还可在模拟时生成用于可视化的数据。
MOOSE框架的“系统”和“接口”体系结构允许应用程序开发人员构建仿真工具,该工具能够解决从基本的单个物理问题到只有多个开发团队才能实现的广泛的,跨学科的多物理问题。 由此产生的应用程序,无论复杂性如何,都易于扩展,对研究团队和分析人员均有用。 MOOSE支持几种耦合机制:松散(交错),紧密(迭代)和完整(整体)( 对应的英文为loose (staggered),tight (iteration), and full (monolithic) ) [7],[16],并提供了几种方式来定制每种仿真类型的行为。 耦合的物理场不需要共享相同的网格或离散化,甚至不需要存在于相同的空间或时间尺度上。 可以使用Picard或定点迭代来实现非线性,同时使用内置或自定义逻辑在多个耦合模拟之间通过内存传递数据。
未完待续
[7]Gaston D.R., Permann C.J., Peterson J.W., SlaughterA.E., Andrš D., Wang Y., et al.Physics-based multiscale coupling for full core nuclear reactor simulation
Ann Nucl Energy (2014)
[15]Fish J., Belytschko T.A first course in finite elements Wiley (2007)
[16]Novascone S., Spencer B., Andrs D., Williamson R., Hales J., Perez D.Results from tight and loose coupled multiphysics in nuclear fuels performance simulations using BISON: Technical report
Idaho National Laboratory (INL) (2013)