面向 CFD 新从业者的实用编码资源

计算科学 matlab 流体动力学 Python
2021-12-01 08:57:17

似乎有很多书籍和论文非常详细地解释了各种 CFD 方法,但不幸的是,我还没有找到很多用 MATLAB 或 Python 等代码实现的此类方法的好资源(除了最基本的问题,例如线性平流方程)。因此,我想知道是否有任何我可以购买的带有许多编码示例的书籍,或者是否有任何免费的在线资源可以展示如何解决各种 CFD 问题。我意识到 CFD 可能是一个非常困难的领域,尤其是在处理复杂的几何形状时。但是,如果我能找到一个资源,例如,提供有关如何求解 2D Euler 方程(具有非常简单的几何)的分步说明,这似乎是从标量方程到矢量方程时的逻辑步骤, 这将是如何学习更高级主题的一个很好的起点。不幸的是,我是通过例子学习的,并且可能会被太多的理论所困扰。因此,让代码示例与理论一起工作和理解将是一个很大的帮助。非常感谢。

4个回答

取决于您所说的差价合约是什么意思。我会区分学术方法和应用方法。

出于学术目的——比如说,为了获得数值分析和科学计算的技能,或者为你新开发的预处理器提供一个游乐场——我可以推荐 Griebel、Dornseifer 和 Neunhoeffer Numerical Simulations in Fluid Dynamics的书。它涵盖了整个范围:

  1. 物理和偏微分方程、边界条件和预期困难的陈述
  2. 离散化技术(这里是有限差分
  3. 伪代码
  4. 准备使用 C 代码

如果您想成为一家公司的 CFD 工程师,您应该获得一些关于流动和湍流建模和近似的理论背景。(也许可以找到有关湍流的讲义)然后使用您最喜欢的商业 CFD 工具进行教程。(Ansys、Fluent、Star...)

Blazek的 CFD 书对我帮助最大。他很好地解释了有限体积方法。使用这本书,我编写了一个 2D Euler 求解器和一个 2D 可压缩 Navier--Stokes 求解器。

我还建议您观看王琪琪的讲座视频不是粘性流体的空气动力学课程——向下滚动,您应该会看到第 20 课的视频……第 1 课。这些视频来自麻省理工学院的数值方法课程。这是我真正学会了如何编写有限体积代码的地方。他解释了理论/方法的工作原理,然后在 MATLAB 中开发示例,以便您继续学习。他教得很好,很容易上手。

超长的帖子在这里,我希望我能 TL;DR 它,但它会非常没用

我假设您是工程专业的本科生,因为如果您是研究生,则应该先在相应部门参加 CFD 课程。如果你是数学专业的,我不知道如何与你对经典流体动力学的知识联系起来。继续……

我的背景

我非常了解您所处的位置,我自己在同一个泥潭中停留了很长一段时间,从理论上讲,事情从来没有真正发生在我身上,就我的经验而言,阅读 JD Anderson 或 Versteeg 之类的书并没有真的很有帮助。而且,我觉得让某人从头到尾阅读 JD Anderson 甚至是前几章,然后才允许他开始真正的 CFD 编码是相当不敏感的。在我作为一名渴望学习 CFD 的本科生期间,我花了几个宿舍之夜浏览互联网以找到关于 CFD 的体面教程,在网上和 reddit 上搜索 CFD。有些人甚至希望我阅读整个JDAVersteeg 在开始编码之前(这很荒谬),我无法理解它,并且非常沮丧。我仍然无法轻松地完成那些书中一半的事情,而且我正在读研究生的第二门高级 CFD 课程。我希望我在这里的回答概述了下一代开始使用 CFD 编码的更好方法。

螺丝2D!!!

首先,如果您是本科生而不是天才,那么将 CFD 和常规课程一起进行战斗将非常困难。我建议您暂时忘记 2D 并坚持使用 1D 代码. CFD 非常难,您肯定需要一门研究生课程才能开始了解 2D 中有限体积法和有限元法的细微差别。我建议坚定地、坚定地坚持一维,并学习有限差分中的不同数值方法,如 Lax 方案(正常、Friedrich、Wendroff 等)、中心差分方案、迎风差分方案和时间离散化方案。如果您需要示例,只需在 Google 上搜索“Lax Friedrich 1D Advection C++ code simple”之类的内容,然后尝试将这些书中的理论与代码相匹配,了解它们的工作原理以及它们为何以这种方式工作。做错误分析(冯诺依曼和多模)。1D 中有很多东西需要学习,你永远不会用完东西。最重要的是,对于本科生来说,在构建概念时,它们很容易、合乎逻辑且不可或缺。

我建议尝试无粘性、不可压缩、线性瞬态平流方程,然后是瞬态热方程,使用不同的边界条件(dirichlet、neumann、周期性、Robin)和鬼细胞。如果这样做了,您可以尝试继续使用可压缩的一维欧拉,但上述两个应该完美而严格地完成,包括理论。这将帮助您为研究生课程建立完美的基础,然后您可以放松并专注于正确地获取您的 2D 概念。

如果您不确定任何事情,只需谷歌。

我的背景#2

为了给你一个想法,上学期我做了两个 2D Navier-Stokes 项目,基本上包括 8 个代码。然后我以为我是为 CFD 分类的,然后在这个 sem 中进入高级 CFD 课程的中途,我仍在做一维代码。这就是掌握 1D 的重要性和强调的重点。不要因为缺少可爱的颜色和形状而失望,它们会来的。:D

螺丝 2D #2!!!!!!!

假设您对所有这些都感到满意,您可以尝试构建 2D Poisson 求解器。您通常可以在 Internet 上找到示例代码和简单的示例网格。如果没有,您可以随时制作自己的方形网格并对其进行求解。它是编码任何 NS 方程的起点。您可以学习不同的迭代方案,如 ILU、Point Jacobi 等。您可以在互联网上找到所有内容的简单示例。

暂时忘掉 2D Euler,因为它的主要风味来自于您尝试可压缩流,其中包含一些棘手的物理特性。现在学习数值方案将使您将来更容易理解 2D Euler。你可以用有限的差异来做 2D,但如果你不是 1D 的大师,那在大多数情况下会非常简单、无用和麻烦。当今大多数现代二维码都使用有限体积或不连续 Galerkin 方法,这些方法在公式化方面非常先进。

需要考虑的要点

最后,我想给出一些可以帮助您真正开始 CFD 的更多指示。

1.)尝试先学习商业代码,并在使用它们的地方实习。它们将使您了解预期的内容,并形成一个出色的教育工具,用于了解 CFD 问题的元素和工作流程。

2.) 如果您甚至梦想使用 2D 代码,请尽快切换到 C++ 或 Fortran。我的教授上一学期告诉全班同学,我的一位大四学生用 Python 编写了他的代码,他花了一周的时间才完成了最终项目,而我们用 C++ 和 Fortran 只花了几分钟。他不能把他的整个项目都交上去,而且成绩很差。Matlab 在 scicomp 方面同样糟糕。学习在 .dat 文件中输出数据并使用 Tecplot 或 Origin 绘制图形和等高线。在 C++ 和 Fortran 之间,在您的阶段并不重要。

3.)再一次,我不能强调这一点,不要去 2D。在这个阶段,它很麻烦并且与您在 CFD 中的增长无关。

4.) 如果您不打算进行研究生学习,请忘记 CFD 编码。掌握 CFD 子领域需要数年时间,而在商业代码上完成则需要一两天的时间。这些代码被设计为防白痴,结果也相当不错。如果您正确了解 FM 和 HT 的基础知识,它将在非基础科学研究工程团队中更加有用。

5.) CFD 会让你大吃一惊,你会喜欢的。我连续3天总共睡不超过4小时,这是在我的春假中间(没有狗屎)。为它的学习曲线做好准备,但当你生成自己的彩色垃圾堆时,它肯定是值得的。

12 步课程

您可以尝试将这 12 步的事情作为一种爱好,但事后看来,就试图深入了解真正的 CFD 而言,这是一种无用的、自吹自擂的、被高估的努力,因为其中大部分都过于结构化和过于简单化。我承认,这是一门很棒的课程,但如果你明白我的意思,它几乎太好了以至于最终毫无用处。教授非常有说服力和聪明,但在主题上太容易了。我知道这里的很多人都对她的课程发誓,并且可能会对我感到很生气,但我认为很多参加过 CFD 研究生课程的人也可能同意我的看法。

用心学习!

CFD 颂歌

作者:Steve Bova 和 Alfred Lorber 德克萨斯大学 CFD 实验室

旧代码永不消亡

他们被传给你和我

如果你的没有太多的robosity

你只需要增加更多的粘度

许多一个旋钮和几个开关

需要顺利运行它

如果翻牌率更高,您必须意识到

只需生成更大的网格尺寸

如果您的经理要求进行微不足道的修改

我的估计是至少十周。

这个问题非常广泛。如上所述,CFD 可能与行业相关或基于研究主题。此外,可压缩和不可压缩流动问题之间存在很大差异。如果您专注于可压缩流,那么熟悉双曲守恒定律是一个好的开始。正如上面詹姆斯所说,在简单的二维笛卡尔网格中实现有限体积求解器是另一个很好的步骤。

我推荐以下书籍:

  • Randall J. LeVeque 的双曲问题的有限体积方法
  • Jan S. Hesthaven 和 Tim Warburton 的节点间断 Galerkin 方法

Hesthaven 和 Warburton 拥有 matlab 和 C++ 代码,用于实现一维和二维欧拉方程的 DG 方案。有限体积方法是具有分段常数近似的 DG。