尝试python 进行CFD计算

2019-05-21  本文已影响0人  爆米花_fe72

1维线性对流方程是用于学习有关CFD的知识最简单,最基本的模型,其方程表示如下:

\frac{∂u}{∂t} +c\frac{∂u}{∂t}=0

需要给出方程的初始条件,假设方程具有初速度c,且无形状的改变。则初始条件可以表示为u(x,0)=u0(x),即时间为0时刻时位置为x处点的速度。因此,方程可以表示为:

u(x,t)=u0(x−ct)

利用时间导数的正向差分格式和空间导数的反向差分格式,对该方程进行了空间和时间的离散。考虑离散化空间坐标x点我们索引从i= 0 至N,以Δt为离散时间间隔的大小。

由导数的定义可知,:

\frac{∂u}{∂x} ≈\lim_{x\to0}  \frac{u(x+Δx)−u(x)}{Δx}

方程离散后:

\frac{u_{i}^{n+1}  -u_{i}^n}{Δt} + c \frac{u_{i}^{n}  -u_{i-1}^n}{Δx} =0

其中n和n+1是时间上连续的两个步骤,而i和i-1是离散的x坐标的两个相邻点。如果有给定的初始条件,那么这个离散化过程中唯一未知的就是u_{i}^{n+1}。即:

u_{i}^{n+1} = u_{i}^n-c\frac{Δt}{Δx}(u_{i}^{n}  -u_{i-1}^n)

import numpy

from matplotlib import pyplot

import time,sys

#jupyter 需要输入

%matplotlib inline 

需要给出计算域,对于一位空间来说就是x的坐标范围,定义x_{i} \in (0,2).定义nx变量作为密度值,dx为计算网格点的距离。nt为时间步长,dt则为每步计算时间。

nx = 41 

dx = 2 / (nx-1)

nt  = 25

dt  = 0.025

c   = 1

给出U_{0} 的初始条件

u = numpy.ones(nx)

u[int(.5 / dx):int(1 / dx + 1)] = 2

print(u)

[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 2. 2. 2. 2. 2. 2. 2. 2. 2.  2.  2. 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1. 1.  1.  1.  1.  1.]

pyplot.plot(numpy.linspace(0, 2, nx), u)

图像如下:

上一篇下一篇

猜你喜欢

热点阅读