多物理场仿真的算法和实现的最佳实践是什么?

计算科学 pde 多物理场 隐式方法 软件
2021-12-10 23:21:58

多物理场模拟涉及耦合多个“物理场”,通常具有不同的空间和/或时间尺度。此外,单物理场代码通常由不同的团队编写。最常用的耦合技术是一阶算子分裂,但其准确性和稳定性较差。我如何确定哪些算法对感兴趣的问题有效,我应该如何构建我的软件以使这些算法可用?

2个回答

我强烈提倡完全耦合的程序集,因为这可以很容易地重现运算符拆分版本。具体来说,计算不同物理场的残差和雅可比行列式的例程可以分开,但框架应该能够将它们结合起来,形成整个系统的统一残差。这就是 PETSc 的工作原理。

然后,运算符拆分解决方案可以用作完全耦合系统的预处理器,或者本身作为求解器,所有这些都来自命令行。此外,可以保留一些耦合,而可以忽略其他耦合。PETSc 通过 PC FieldSplit 界面处理这个问题。这允许复制混合方案,例如用于流体动力学的半隐式 ICE。

由于这是一个非常活跃的研究领域,我不愿尝试回答这个问题,但我有一些尝试的经验。

不要

  • 取旧应用程序代码 A 和旧应用程序 B,然后尝试将它们耦合在一起
  • 使用过时(暗示事后无法使用)代码,而不是构建新应用程序
  • 需要一个庞大的框架(> 10 个必需的依赖项)来让新用户开始贡献
  • 假设数据布局(网格、矩阵、向量等)很容易自己编写

  • 使用标准编程实践,并希望使用良好的设计模式
  • 阅读有关算子拆分的文献以了解准确性和稳定性的局限性