您是否知道为 2D Euler 方程编写自己的计算流体动力学求解器的好且特别简单的指南?我只是想了解像 Fluent 这样的商业软件在做什么。当它足够简单时,我想向一些朋友展示如何做和编码。
不幸的是,我找不到如何将这个http://en.wikipedia.org/wiki/Euler_equations_%28fluid_dynamics%29翻译成数字应用程序。
有没有人这样做过?任何帮助表示赞赏,
安德烈亚斯
您是否知道为 2D Euler 方程编写自己的计算流体动力学求解器的好且特别简单的指南?我只是想了解像 Fluent 这样的商业软件在做什么。当它足够简单时,我想向一些朋友展示如何做和编码。
不幸的是,我找不到如何将这个http://en.wikipedia.org/wiki/Euler_equations_%28fluid_dynamics%29翻译成数字应用程序。
有没有人这样做过?任何帮助表示赞赏,
安德烈亚斯
这本书:
http://www.amazon.com/Computational-Fluid-Dynamics-John-Anderson/dp/0070016852
是对编写 CFD 代码所需内容的非常直接、简单的描述。它适用于具有比理论更多的实际例子的本科水平介绍。
是的,很多人以前都做过。
诀窍是把质量、动量和能量的守恒定律写成积分方程,然后把它们变成矩阵方程,这样你就可以用数值求解它们。转换过程通常涉及使用简单的形状离散控制体积,例如 2D 的三角形和四边形以及 3D 的四面体和砖块,并假设形状内相关变量的分布。
如果问题是暂时的,您将需要对线性代数和数值积分有相当多的了解。
有几种技术可以做到这一点:有限差分、有限元和边界元(如果存在合适的格林函数)。
这不是微不足道的。你会想读这样的东西:
http://www.amazon.com/Numerical-Transfer-Hemisphere-Computational-Mechanics/dp/0891165223
您的 6 岁问题在所有计算流体动力学 (CFD) 新手中仍然相当普遍(“这有多难?”)。然而,在这个阶段必须小心,不要轻视求解给定方程组背后的数学。
对于那些对 CFD 不熟悉(或感兴趣)的人 -
在您开始考虑编码之前,了解您要解决的方程的性质很重要。椭圆问题(如潜在流的泊松求解器)与双曲线系统(如欧拉方程)非常不同,在双曲线系统中,信息以不同波模式的形式通过数值域“传播”。这是我的第一点,
1. 了解系统的性质并研究方程- 在这一步中,您需要阅读有关偏微分方程的数学教科书,并知道如何对不同的方程进行分类。(请参阅Farlow的《科学家和工程师的偏微分方程》,或重新学习您的本科数学课程。)
2. 学习线性代数——我认识的最好的 CFD 专家,在线性代数方面有很强的基础。
转到双曲问题的特定情况,例如欧拉方程
3. 阅读空间和时间离散化- 这是 CFD 新手不太了解的一点。由于信息在双曲问题中以确定的方向和速度传播,因此您不能任意离散方程。为此,您需要了解黎曼问题的概念,即在给定时间给定两个状态之间的不连续界面,系统如何演化?现代有限体积方法使用空间离散化来复制信息如何通过模拟在空间和时间中传播。这称为逆风。阅读Toro的关于 Riemann 求解器的书,以获得关于逆风的很好的介绍。
4. 理解稳定性的概念——并不是所有的离散化和时间积分方法都会导致一个稳定的解决方案。了解限制时间步长(CFL 条件)的概念。如果不遵循上风法则,就很难得到稳定的解。
此时,您将更清楚地了解 CFD 代码中的内容,并且您可以开始担心使用哪种语言进行编码。为了计算速度和并行化,最广泛使用的 CFD 代码是用 C 或 Fortran 编写的。但是,如果您打算编写代码只是为了学习,您可以使用 Matlab 或 Python,使用它们会不那么令人沮丧。我还应该提到,编写 2D Euler 求解器是航空航天工程新研究生的典型家庭作业问题,所以如果你成功了,请尝试谦虚并开放学习。
对于任何正在研究 CFD 的人来说,都知道这是一个充满挑战且令人惊叹的领域,并且有许多进步。如果您希望成功,请阅读论文(尤其是基础知识),如果您无法理解某个主题,请不要放弃。继续努力,您会发现自己正在突破 CFD 的极限。
您的问题的答案取决于您要用于求解 2D Euler 方程的方法。就个人而言,我推荐有限体积方法,为了理解它,我认为你应该看看这本书: Jiri Blazek 的计算流体动力学:原理和应用。
这是一本很好的书,它从一开始就接受了有限体积方法来编写自己的代码,并且它还附带了一个伴随代码来指导你。很不错的一本书,在我写硕士论文的时候很想知道。