有没有好的、易于使用的、高质量的开源 CFD 求解器?

计算科学 pde 流体动力学 软件 并行计算
2021-12-07 22:44:14

我的论文是关于开发燃烧模型减少的数值方法。我纯粹在燃烧模拟的化学部分上运行我的方法,并且我有大量针对 0-D 模拟(无流动)的案例研究。我想要的是运行确实有流动的模拟,最好是 2-D 或 3-D 模拟。

由于计算要求高,这些模拟需要并行进行。我还需要可以与 Chemkin 或 Cantera 等化学求解器接口的东西,我有源代码。(Chemkin 使用 Fortran 77,Cantera 使用 C++。)

在理想情况下,我可以使用我从研究生课程和一些 CFD 包中获得的流体力学基本知识来指定流动模式,添加化学并运行它。如果必须,我可以根据前合作者使用的实验设置为简单的案例研究建立控制流体运动和化学的方程,但我非常不想滚动我自己的 CFD 代码,除非有一个或多个包,使它非常容易做到。我愿意花 2-3 周的时间在上面;我不知道这个要求是否排除了 PETSc 或 Trilinos。如果我不得不花更多的时间在上面,我宁愿把它推迟到以后,因为我有一个合作者也为案例研究提供 CFD 代码。

有没有人有使用 CFD 包或编写 CFD 代码的经验,如果有,你能推荐一个吗?我知道我想使用的一件事是 Strang 拆分,但我不是 CFD 或 PDE 专家;我研究模型简化的化学和数值方法。另外,请评论您使用您推荐的软件花了多长时间来加快速度。

@FrenchKheldar 提出了一个很好的观点,我应该提到我想解决的问题的特征:

  • 理想(完美)气体,单相
  • 可压缩
  • 层流是必不可少的;湍流是一个优点。(我从以前的 CFD 数值方法工作中对湍流有所了解,但我没有研究过 CFD 求解器;我只对物理学了解一点。)
  • 零马赫数公式是可以的(我不关心冲击或超音速流)
  • 燃烧化学,忽略 Soret 和 Dufour 通量,并将扩散视为 Fickian
  • 几何可以很简单

我可以写接口代码,虽然我写的越少越好;@FrenchKheldar 还指出 Cantera 具有 Fortran 和 Python 绑定。我现在使用 Cantera Python 绑定来进行快速原型设计,所以我也对这些感到满意。

4个回答

我是OpenFOAM的重度用户,所以我自然会推荐它。它具有大量功能,包括燃烧模型(尽管不一定完全符合您的需要),并且已被其他人与Canterra一起使用。如果您需要一个尚未实现的特定方程式的求解器,您几乎可以写出您的方程式我不知道什么是strang-splitting(我自己不从事燃烧工作),但其他人已经在OpenFOAM中使用过它。

教程数量有限。用户指南中记录的内容不包括化学。您可以查看一些反应求解器的示例案例。最好的办法是查看 Chalmers 的 OS-CFD研究生课程网站(链接是 2011 年的,但它包含前几年页面的链接)。那里的学生经常记录他们正在研究的求解器,例如这里

关于学习它的努力:如果您使用其中一种预定义模型,使用起来相当简单,您应该能够在几周内获得结果。如果您必须下降到顶层以下(例如添加一个新的 ODE 求解器),事情会变得非常困难,并且您会很高兴了解 C++。

您可以使用PyClaw ,它是Clawpack的并行扩展(注意:我是 PyClaw 的主要开发人员之一)。它包括理想气体无粘性欧拉方程(可压缩流)的 2D 和 3D 求解器。它还内置了 Strang 拆分,但您需要自己添加对粘性项和化学的评估。与 Chemkin 和 Cantera 的接口应该很简单,因为 PyClaw 是用 Python 编写的,并且已经包含 Fortran 77 和 C 代码。

PyClaw 相对较新(尽管底层 Clawpack 代码相当陈旧),因此不像 OpenFOAM 那样成熟。

NIST 的火灾动力学模拟器(FDS) 听起来如您所愿。FDS 是一种低马赫数流求解器。密度可以改变,但声学效应和冲击被忽略。

FDS 的文档相当完善,不过,我承认我没有查看主要的流程求解器例程。我也不太了解 FDS 如何处理燃烧化学。

我建议从FDS 的 Google Code site下载最新的代码。

那边有很多!

OpenFOAM是最好的,恕我直言,但其他人在这个链接上,