反应流的直接数值模拟

计算科学 流体动力学 高性能计算 向量
2021-12-08 09:26:22

我需要编写一个 DNS 代码来模拟湍流条件下的反应流。代码必须具有高度可扩展性,因为预计模拟的计算成本非常高。

我的想法是使用 C++,我想知道您是否有关于一个非常有效的 C++ 库来管理分布式内存架构中的向量/矩阵操作的建议。例如,我知道 PETSc 和 Trilinos 包被广泛使用,但我不知道我的案例的最佳选择。

额外细节:

  • 可压缩配方
  • 结构化 3D 网格
  • 有限差分离散化(交错排列)
  • 高阶FD
  • 在 400-500 个内核上具有良好的可扩展性
  • 仅用于我的小组(无需复杂的面向对象设计)

提前致谢!

2个回答

像 WolfgangBangerth 一样,我强烈建议您重新考虑实现此目标的动机(或主管的动机)。首先,查看湍流燃烧百亿亿次模拟中心 (ExaCT) 网站. 他们有一些代理应用程序可能对您测试您的机制有用,John Bell、Joe Oefelein 和 Jacqueline Chen 等作者的出版物可以让您了解燃烧模拟的当前状态(不仅是 DNS,还有 LES、低马赫数近似等)。这些努力大多是多年、十年以上的努力。如果你想要的只是测试一些算法以获得详细的化学动力学,你可能想要:(a)通过查看更简单的东西来缩小你的野心,例如层流火焰或冲击管或(b)想出您可以在代码开发的各个中间步骤编写一系列研究论文。任何一种选择都可以减轻您的风险。您不想花费数年时间开发代码却一无所获。

我在燃烧研究的相关领域获得了博士学位(嗯,详细动力学机制的降阶建模)。你提出的建议可能至少需要 2-3 年。对于上下文:我的一个小组成员编写了一个层流有限差分反应火焰代码(我相信它是不可压缩的),他至少花了 6 个月的时间。我认识的另一个研究生在 Ahmed Ghoniem 的小组工作,花了大约一年的时间编写了一个可压缩的流代码,它是并行的,但不是高度可并行化的。他还和其他几个人一起编写了代码。

仅您的前 5 个设计标准就需要一些认真的工作,因为您将不得不执行以下操作:

  • 通过破解一个或多个示例来学习 PETSc/Trilinos
  • 设置你的网格(可能是最简单的部分)
  • 在不可压缩的测试问题上写下你的右手边
  • 可能在不可压缩的测试问题上写出一些近似的雅可比行列式
  • 测试正确性,也许是概念验证可扩展性
  • 增加右侧的可压缩性
  • 为近似雅可比添加可压缩性
  • 测试正确性,也许是概念验证可扩展性
  • 在右侧添加反应
  • 为近似雅可比添加反应
  • 测试简单反应案例的正确性(1 步 Arrhenius,4 步甲烷,可能 10 步氢气)
  • 做一个更严肃的可扩展性测试
  • 开始为层流可压缩情况调整求解器
  • 在右侧添加简单的湍流模型
  • 添加简单的湍流模型来近似雅可比
  • 测试正确性
  • 测试可扩展性
  • 添加更复杂的湍流模型+更多测试
  • 添加更复杂的反应模型 + 更多测试

上面所有的描述都假设你确切地知道你在用空间和时间的离散化做什么,并且你确切地知道你将使用什么来近似雅可比矩阵(假设你需要它们)。我没有包括将要出现的不可避免的调试,也没有管理此类代码的复杂性。如果您选择着手编写这样的代码,我敦促您重新考虑您对面向对象设计的评论。作为开发人员,您将希望使用某种组织原则来管理大型代码库,即使您没有在您的团队之外发布您的软件。我也没有包括推导你可能没有的任何术语(例如,反应术语的雅可比行列式)、处理性能问题、获得集群时间、管理模拟输出等。

你建议的是一个多年的研究计划。甚至不要考虑自己做这件事,你不会在几年内取得任何接近当前研究的成果。相反,在网上搜索可用的代码并根据您的需要进行调整。一个好的第一个地方是能源部的计算燃烧研究中心和网络。