从头开始用 Python 构建 Navier-Stokes 求解器:模拟气流

使用 NumPy 实现 CFD 的实践指南,从离散化到鸟翼周围的气流模拟从头开始用 Python 构建 Navier-Stokes 求解器:模拟气流一文首先出现在 Towards Data Science 上。

来源:走向数据科学

(CFD) 通常被视为复杂商业软件的黑匣子。然而,“从头开始”实现求解器是学习流体运动物理学最有效的方法之一。我将其作为一个个人项目开始,作为生物物理学课程的一部分,我以此为契机,最终了解这些美丽的模拟是如何工作的。

本指南专为希望超越高级库并通过将偏微分方程转换为离散 Python 代码来了解数值模拟的底层机制的数据科学家和工程师而设计。我们还将探索基本的编程概念,例如使用 NumPy 进行矢量化运算和随机收敛,这些对于每个对更广泛的科学计算和机器学习架构感兴趣的人来说都是必不可少的技能。

我们将逐步介绍一个简单的不可压缩纳维-斯托克斯 (NS) 求解器的推导和 Python 实现。然后,我们将应用这个解算器来模拟鸟翼轮廓周围的气流。

物理学:不可压缩纳维-斯托克斯

CFD 的基本方程是纳维-斯托克斯方程,它描述速度和压力在流体中如何演变。对于稳定飞行(如鸟滑翔),我们假设空气是不可压缩的(恒定密度)和层流。它们可以被理解为牛顿运动定律,但适用于无限小的流体元素,以及影响它的力。这主要是压力和粘度,但根据具体情况,您可以添加重力、机械应力,甚至如果您愿意的话还可以添加电磁力。作者可以证明这对于第一个项目来说是非常不推荐的。

向量形式的方程为:

\[

\frac{\partial \mathbf{v}}{\partial t} + (\mathbf{v} \cdot \nabla)\mathbf{v} = -\frac{1}{\rho}\nabla p + \nu \nabla^2 \mathbf{v} \\

\nabla \cdot \mathbf{v} = 0

\]

其中:

  • v:速度场 (u,v)
  • p:压力
  • ρ:流体密度
  • ν: 运动粘度
  • 压力耦合问题

    代码