尝试python 进行CFD计算

Python016

尝试python 进行CFD计算,第1张

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

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

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

由导数的定义可知,:

方程离散后:

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

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

给出 的初始条件

[ 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.]

图像如下:

#! /usr/bin/python

# -*- coding: gb2312 -*-

import sys

import nltk

from nltk.corpus import brown

class stdoutToStr:

  def __init__(self):

      self.s = ''

  def write(self, buf):

      self.s += buf

_out = sys.stdout

out = stdoutToStr()

sys.stdout = out

days = ['Monday','Tuesday','Wednesday','Yhursday','Friday','Saturday','Sunday']

cfd =nltk.ConditionalFreqDist(

  (genre,word)

  for genre in ['news','romance']

  for word in brown.words(categories=genre)

  )

stdout=cfd.tabulate(samples=days)

sys.stdout = _out

a= out.s

for i in a.split('\n'):

  b= i.split(' ')

  while '' in b:

      b.remove('')

  if a.index(i)==0:

      b.insert(0,' ')

  for j in b:

      print j.center(10," "),

  print '\n'

此问题 1.要输出重定向 到cfd.tabulate(samples=days) 这个输出到变量

使变量a得到

'''        Monday Tuesday Wednesday Yhursday Friday Saturday Sunday

 news   54   43   22    0   41   33   51

romance    2    3    3    0    3    4    5 '''

2. 输出对齐  print j.center(10," "),

格式不满意 可以用以下参考做调整

word="version3.0"

print word.center(20)     #居中输出,总共20个字符,word左右两侧各输出5个空格

print word.center(20,"*") #居中输出,总共20个字符,word左右两侧各输出5个"*"号

print word.ljust(0)       #左对齐输出

print word.rjust(20)      #右对齐输出,总共20个字符,word占10个字符,因此左侧填充一个空格再输出word

print "0s"%word         #类似于word.rjust(30

3.附上程序截图

LaTeX、Paraview、Adobe illustrator、Tecplot、ggplot2等都是比高级一点的画图软件

1、LaTeX,它是一种基于TEX的排版系统。利用它能在短时间内生成很多具有书籍质量的印刷品,尤其是生成复杂表格和数学公式。因此它非常适用于生成高印刷质量的科技和数学类文档。

Tikz是LaTex原生支持的图包来,可以画论文中的插图。用TikZ画可以做到完美,特别是与LaTeX文档的整体交互,比用一般绘图软件好得多。二维图、三维图、流程图、示意图都能实现。同样的,缺点也是难度较高,入门需花时间。

2、Paraview除了可以画最基本的曲线曲面图等,也提供和CAD、CFD软件的接口,可以用于其它分析软件的后处理工作。

Paraview支持多种数据格式和显示方式,目前包括网格绘制,面绘制,体绘制等方法。可视化包含:数据读取,数据过滤和数据渲染三个基本的步骤。Paraview提供开源可编程。缺点是难度较高,入门需花时间。

3、Adobe illustrator是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软件。

作为一款非常好的图片处理工具,Adobe Illustrator广泛应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等,也可以为线稿提供较高的精度和控制,适合生产任何小型设计到大型的复杂项目。

4、Tecplot从简单的二维曲线曲面图,到复杂的三维动态图都可以实现。它的特色在于可快捷的将大量数据资料转化为容易理解的图片,例如等高线、向量图、网格图、剖面图、流线图等等。

它提供和CAD、CFD软件的接口,可以用于其它分析软件(如有限元、计算流体动力学等)的后处理工作。

5、ggplot2是R语言的一个包,最擅长统计数据可视化。ggplot2按图层作图,其核心理念是将绘图与数据分离。缺点是ggplot2功能没有Python或者Matlab全面,不过人家就是在统计方面做的最好最专业,其它的功能忽略掉好像也无所谓。