🍍Python湍流隐式模型耗散粘性方程和大涡流模拟

🏈指点迷津 | Brief

🎯要点

🎯达朗贝尔一维波动通解,二维变速模拟 | 🎯达朗贝尔算子解双曲波形微分方程 | 🎯耗散系统粘性伯格斯方程快速傅里叶变换算法 | 🎯二维线性和非线性对流扩散解和湍流隐式建模

📜偏微分方程用例:Python自动造波器椭圆曲线波孤子解

📜有限差分用例:Python微磁学磁倾斜和西塔规则算法

🍇Python一维粘性伯格斯方程

一维空间中粘性伯格斯方程的一般形式是耗散系统:

ut+uux=ν2ux2\frac{\partial u}{\partial t}+u \frac{\partial u}{\partial x}=\nu \frac{\partial^2 u}{\partial x^2}

此项 uu/xu \partial u / \partial x 也可以重写为(u2/2)/x \partial\left(u^2 / 2\right) / \partial x。当扩散项不存在时(即 ν=0\nu=0​ ),粘性伯格斯程变为无粘伯格斯方程:

ut+uux=0\frac{\partial u}{\partial t}+u \frac{\partial u}{\partial x}=0

这是可以产生不连续性(冲击波)的守恒方程的原型。

当人们检查等式的左侧时,ν\nu 的小值形成锐梯度的原因就变得直观清楚了。此项 /t+u/x\partial / \partial t+u \partial / \partial x 显然是一个波算子,描述以 uu 速度沿正 xx 方向传播的波。由于波速为uu,表现出较大uu值的区域将比表现出较小u值的区域更快地向右传播;换句话说,如果 uu 最初沿x x 方向减小,则位于背面的较大 uu 将赶上位于正面的较小 uu 。右侧扩散项的作用本质上是阻止梯度变得无穷大。

在此,我们将使用非线性对流和扩散,仅创建一维伯格方程。

ut+uux=ν2ux2\frac{\partial u}{\partial t}+u \frac{\partial u}{\partial x}=\nu \frac{\partial^2 u}{\partial x^2}

我们可以离散化这个微分,采用以下形式:

uin+1uinΔt+uinuinui1nΔx=vui+1n2uin+ui1nΔx2\frac{u_i^{n+1}-u_i^n}{\Delta t}+u_i^n \frac{u_i^n-u_{i-1}^n}{\Delta x}=v \frac{u_{i+1}^n-2 u_i^n+u_{i-1}^n}{\Delta x^2}

在解决了未知数之后,我们得到了用 Python 编码的算法。

uin+1=uinuinΔtΔx(uinui1n)+vΔtΔx2(ui+1n2uin+ui1n)u_i^{n+1}=u_i^n-u_i^n \frac{\Delta t}{\Delta x}\left(u_i^n-u_{i-1}^n\right)+v \frac{\Delta t}{\Delta x^2}\left(u_{i+1}^n-2 u_i^n+u_{i-1}^n\right)

速度的初始条件是使用以下函数创建的:

u=2vϕϕx+4ϕ=exp(x24v)+exp((x2π)24v)\begin{aligned} u & =-\frac{2 v}{\phi} \frac{\partial \phi}{\partial x }+4 \\ \phi & =\exp \left(\frac{- x ^2}{4 v}\right)+\exp \left(\frac{-( x -2 \pi)^2}{4 v}\right) \end{aligned}

边界条件意味着周期性,由下式给出:

u(0)=u(2π)u(0)=u(2 \pi)

有一个解析解:

u=2vϕϕx+4ϕ=exp((x4t)24v(t+1))+exp((x4t2π)24v(t+1))\begin{aligned} & u =-\frac{2 v}{\phi} \frac{\partial \phi}{\partial x }+4 \\ & \phi=\exp \left(\frac{-( x -4 t )^2}{4 v( t +1)}\right)+\exp \left(\frac{-( x -4 t -2 \pi)^2}{4 v( t +1)}\right) \end{aligned}

解该问题的Python代码如下:

Last updated

Was this helpful?