新CFD实践者的实用编码资源

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

4
你有没有研究过Lorena Barba的 Navier Stokes的12个步骤
额外 作者 nicoguaro,
我建议你先按照“讲座”,如果之后你认为这种做法不够充分,请保持你的意见。现在,你是压力,情况就是这样。
额外 作者 nicoguaro,
在我发布之前我看了一会儿它看起来像是一个非常好的资源。我注意到它似乎从相对简单的PDE跳到Navier-Stokes方程式,没有对欧拉方程进行任何处理,这有点不幸(虽然我可能错了)。
额外 作者 plaidshirt,
他们似乎表示他们没有涵盖此页面上的欧拉方程: lorenabarba.com/blog/cfd-python-12-steps-to-navier-stokes 。由于没有太多的CFD经验,我认为最好在跳入复杂的Navier-Stokes方程之前尝试Euler方程,但是你是对的,我将深入研究这个过程,它应该是有意义的。
额外 作者 plaidshirt,

4 答案

取决于差价合约的含义。我会区分学术和应用方法。

出于学术目的 - 例如,为了获得数值分析和科学计算方面的技能或者为新开发的预处理器操场 - 我可以推荐Griebel,Dornseifer和Neunhoeffer的书流体动力学中的数值模拟。它涵盖了整个范围:

  1. 物理学和偏微分方程的声明,边界条件和预期的困难
  2. 离散化技术(此处,有限差异
  3. 伪代码
  4. 准备使用C代码

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

6
额外

超级张贴在这里,我希望我能做到这一点;伤害它,但它会非常有用

我假设你是一名本科生,在工程学,因为如果你是一名毕业生,你应该先在各自的部门参加CFD课程。如果你在数学方面,我不知道如何与你对经典流体动力学中的事物的知识联系起来。继续......

我的背景

我很了解你所处的位置,我自己陷入了相同的困境已经有一段时间了,从理论上来说,事情从来没有真正找到我,据我所知,读一本像JD Anderson或Versteeg这样的书并没有真的很有帮助。并且,我觉得要求某人阅读J.D Anderson的封面,甚至是前几章,并且只允许他开始真正的CFD编码是相当麻木的。在我作为一名热心的本科生试图学习CFD的过程中,我花了几个宿舍之夜在互联网上寻找体面的CFD教程,在线搜索CFD和reddit。有些人甚至希望我在开始编码之前阅读整个 JDA Versteeg(这很荒谬),而且我无法掌握它,并且非常沮丧。我仍然不能轻易地把这些书中的一半东西搞得一团糟,而且我在研究生院的第二个高级CFD课程。我希望我在这里的答案概述了下一代开始编写CFD的更好方法。

SCREW 2D !!!

首先,如果你是一名本科学生,而不是天才,那么与CFD和常规课程作斗争将非常困难。 我建议你忘记2D并坚持使用1D代码。 CFD非常难,你肯定需要一个渐变级课程来开始理解2D中有限体积法和有限元法的细微差别。我坚定地,坚定地坚持1D,并学习有限差分中的不同数值方法,如Lax方案(普通,弗里德里希,温德罗夫等),中心,迎风差分方案和时间离散方案。如果您需要示例,只需谷歌“Lax Friedrich 1D Advection C ++ code simple”,并尝试将这些书中的理论与代码相匹配,了解它们的工作原理以及它们的工作方式。做错误分析(Von Neumann和多模式)。在一维中有一个值得学习的世界,你永远不会用完所有东西。最重要的是,对于本科生而言,在构建概念时,它们既简单,合乎逻辑且不可或缺。

我建议尝试无粘性,不可压缩,线性瞬态平流方程,然后是瞬态热方程,用不同的边界条件(dirichlet,neumann,periodic,Robin)和鬼细胞进行游戏。如果这样做,你可以尝试继续使用可压缩的1D Euler,但上述两个应该完美而严谨地完成,包括理论。这将有助于您为毕业学校课程建立一个完美的基础,然后您可以放松并专注于正确的2D概念。

如果你不确定任何事情,那就是谷歌。

我的背景#2

为了给你一个想法,我做了两个2D Navier-Stokes项目,基本上包括上学期的8个代码。然后我认为我的CFD排序,然后进入高级CFD课程这一半我仍然在做一维代码。这是多么重要和强调牢固掌握1D。不要因缺乏可爱的颜色和形状而感到失望,他们会来。 :d

SCREW 2D#2 !!!!!!!

假设您完成了所有这些工作,您可以尝试构建2D泊松求解器。您通常可以在互联网上找到示例代码和简单的示例网格。如果没有,你可以随时制作自己的方格并对其进行求解。它是编码任何NS方程的起点。您可以学习不同的迭代方案,如ILU,Point Jacobi和其他东西。您可以在互联网上找到所有的简单样本。

暂时忘记2D Euler,因为当你尝试可压缩流时它会有一些主要的味道,它们中有一些棘手的物理特性。现在,学习数值方案将使您更容易理解未来的2D Euler。您可以使用有限差分进行2D,但如果您不是1D的高手,那么大部分内容都会非常简单,无用和繁琐。大多数现代2D代码目前使用有限体积或不连续Galerkin方法,这些方法在配方方面非常先进。

要考虑的要点

最后,我想提供一些可能有助于实际启动CFD的指针

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

2.)如果您甚至梦想着2D代码,请切换到C ++或Fortran ASAP。我的教授最后一个sem告诉全班同学,一个用Python编写代码的高年级学生,他用了一个星期的时间来汇总最后的项目,这个项目在C ++和Fortran中只用了几分钟。他无法完成整个项目并获得了不好的成绩。 Matlab在scicomp上同样糟糕。学习在.dat文件中输出数据,并使用Tecplot或Origin绘制图形和轮廓。在C ++和Fortran之间,在你的阶段并不重要。

3.)同样,我不能强调这一点,不要去2D。在此阶段,您的CFD增长很麻烦且无关紧要。

4.)如果您不打算进行研究生课程,请忘记CFD编码。掌握差价合约子区域需要数年时间,而在商业代码上进行操作会花费您一两天的时间。这些代码是专为防止傻瓜而设计的,结果也非常好。如果您正确理解FM和HT的基础知识,它将在非基础科学研究工程团队中更有用。

5.)CFD会踢你的屁股,你会爱上它。我连续3天没有睡4个多小时,这是在我春假的中间(没有狗屎)。为它的学习曲线做好准备,但是当你生成自己的彩色垃圾堆时,它保证是值得的。

关于12道菜的课程

你可以尝试做12个步骤的事情作为一种爱好,但事后看来,这是一个无用的,自我祝贺的,高估的努力,试图深入了解真正的差价合约,因为其中大部分都是过于结构化和简单化。我承认,这是一个很好的课程,但如果你知道我的意思,它几乎太好了,最终无用。这位教授非常有说服力和聪明,但对这些主题来说太容易了。我知道很多人在这里发誓她可能会对我很生气,但我想很多参加过CFD毕业课程的人也会同意我的看法。

通过心灵了解这一点!

CFD的颂歌

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

旧代码永远不会死

他们传给你和我

如果你的人没有太多的机智

您只需要添加更多粘度

很多旋钮和几个开关

需要毫无障碍地运行它

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

只需生成更大的网格大小

如果您的经理寻求一个微不足道的修改

我估计至少十周。

4
额外
如果您对不可压缩流动感兴趣,则根本没有1D,期间。你必须做2D或3D。
额外 作者 nsanders,
我同意你的观点,首先要完全理解1D,因为更高维度的案例压倒了学生的技术性,这与学习CFD的基础知识无关。但2D/3D是编码和正确选择算法的地方,可以解决相关的物理问题。如果没有关于基础物理和数学的扎实知识,我不会从这里开始。许多从业者指南倾向于教授复杂的技术,这些技术起初似乎无处不在,但许多技巧从数学角度来看相当“明显”。
额外 作者 Christian Waluga,
这个咆哮+1,因为有时一些个人意见帮助新手了解正在发生的事情。但是,我完全不同意你的“螺丝2D”论点。 1D中没有 Navier-StokesEuler 等式...
额外 作者 Jan,
@Jan嗯,我并没有任何与CFD非常相似的东西,但我知道确实存在用于NS和Euler的1D代码。在燃烧模型和冲击管中。您可以简化NS并在1D中使用更复杂的物理来对它们进行处理。我只是想强调,1D是有人启动cfd会获得更多深度和洞察力的地方。如果他/她现在进入2D,我担心更深层次的概念会被搁置。无论如何,感谢upvoting!刚刚在stackexchange发现并开始(我喜欢它!)并开始认为咆哮已经走得太远了。 :d
额外 作者 sebastian,
我已经在使用一维方程的过程中经历了一些技术,这就是为什么我想要找到更高级的2D示例来尝试。
额外 作者 plaidshirt,

Blazek 的CFD书比其他任何人都更有帮助。他很好地解释了有限体积法。使用本书,我编写了一个2D Euler求解器和一个2D可压缩Navier - Stokes求解器。

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

2
额外

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

我推荐以下书籍:

  • Randall J. LeVeque的双曲问题的有限体积法
  • Jan S. Hesthaven和Tim Warburton的Nodal Discontinuous Galerkin方法

Hesthaven和Warburton都有matlab和C ++代码,用于在1D和2D中实现Euler方程的DG方案。有限体积法是DG,具有分段常数近似。

1
额外