美文网首页
尝试python 进行CFD计算

尝试python 进行CFD计算

作者: 爆米花_fe72 | 来源:发表于2019-05-21 09:45 被阅读0次

    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)

    图像如下:

    相关文章

      网友评论

          本文标题:尝试python 进行CFD计算

          本文链接:https://www.haomeiwen.com/subject/ygylzqtx.html