像 WolfgangBangerth 一样,我强烈建议您重新考虑实现此目标的动机(或主管的动机)。首先,查看湍流燃烧百亿亿次模拟中心 (ExaCT) 网站. 他们有一些代理应用程序可能对您测试您的机制有用,John Bell、Joe Oefelein 和 Jacqueline Chen 等作者的出版物可以让您了解燃烧模拟的当前状态(不仅是 DNS,还有 LES、低马赫数近似等)。这些努力大多是多年、十年以上的努力。如果你想要的只是测试一些算法以获得详细的化学动力学,你可能想要:(a)通过查看更简单的东西来缩小你的野心,例如层流火焰或冲击管或(b)想出您可以在代码开发的各个中间步骤编写一系列研究论文。任何一种选择都可以减轻您的风险。您不想花费数年时间开发代码却一无所获。
我在燃烧研究的相关领域获得了博士学位(嗯,详细动力学机制的降阶建模)。你提出的建议可能至少需要 2-3 年。对于上下文:我的一个小组成员编写了一个层流有限差分反应火焰代码(我相信它是不可压缩的),他至少花了 6 个月的时间。我认识的另一个研究生在 Ahmed Ghoniem 的小组工作,花了大约一年的时间编写了一个可压缩的流代码,它是并行的,但不是高度可并行化的。他还和其他几个人一起编写了代码。
仅您的前 5 个设计标准就需要一些认真的工作,因为您将不得不执行以下操作:
- 通过破解一个或多个示例来学习 PETSc/Trilinos
- 设置你的网格(可能是最简单的部分)
- 在不可压缩的测试问题上写下你的右手边
- 可能在不可压缩的测试问题上写出一些近似的雅可比行列式
- 测试正确性,也许是概念验证可扩展性
- 增加右侧的可压缩性
- 为近似雅可比添加可压缩性
- 测试正确性,也许是概念验证可扩展性
- 在右侧添加反应
- 为近似雅可比添加反应
- 测试简单反应案例的正确性(1 步 Arrhenius,4 步甲烷,可能 10 步氢气)
- 做一个更严肃的可扩展性测试
- 开始为层流可压缩情况调整求解器
- 在右侧添加简单的湍流模型
- 添加简单的湍流模型来近似雅可比
- 测试正确性
- 测试可扩展性
- 添加更复杂的湍流模型+更多测试
- 添加更复杂的反应模型 + 更多测试
上面所有的描述都假设你确切地知道你在用空间和时间的离散化做什么,并且你确切地知道你将使用什么来近似雅可比矩阵(假设你需要它们)。我没有包括将要出现的不可避免的调试,也没有管理此类代码的复杂性。如果您选择着手编写这样的代码,我敦促您重新考虑您对面向对象设计的评论。作为开发人员,您将希望使用某种组织原则来管理大型代码库,即使您没有在您的团队之外发布您的软件。我也没有包括推导你可能没有的任何术语(例如,反应术语的雅可比行列式)、处理性能问题、获得集群时间、管理模拟输出等。