加载中…
  
博文
标签:

openfoam

杂谈

分类: OpenFOAM使用

很长时间没有写博文了,主要由于这学期事情太多。 今天和大家分享一下影响cfd计算量的众多因素。

影响 CFD 计算量的因素很多,大概可以归为一下几个部分
1)物理问题本身
物理问题本身的复杂程度直接关系到计算量。 一般而言,非线性模型的计算量要高于线
性模型,多相流计算量大于单相流动。 如果单纯从求解方程个数及其方程类型而言, 方程个
数越多计算量越大,比如提供例子中 square 需要解 3 个标量方程(标量 p 和向量 U (2d) ) ,
而 dambreak 需要求解 6 个方程(标量 p、向量 U(2d)、标量体积分率 alpha,标量湍流强
度 k 和标量湍流强度耗散率 epsilon)。因此 dambreak 的计算量要高于方块绕流 。湍
流模拟而言,大涡模拟的计算量要高于雷诺时均。
2)计算网格单元数目和维度
计算网格的单元数直接关系到最终代数方程组的个数(每个单元求解一个代数方程)。
计算单元的个数越多,代数方程组越难求解,计算量越大,因此在满足工程需求的情况下,
应尽量减少网格数目,以减低计算量。 当网格数目相同时,计算区域的维度越大,得到的代
数方程组越难求解。也就是说,网格数

标签:

openfoam研究

教育

分类: OpenFOAM入门

今天探讨引起CFD计算过程中发散的一些原因。cfd计算是将描述物理问题的偏微分方程转化为代数方程组求解,从而得到离散空间上指定点上的值,而其他位置的值通过插值来完成。这本质是将非线性方程线性化并求解的过程,我是这样理解的,对于物理问题真解随时间的变化是一条曲线,而求解过程中不断的求解曲线的斜率,并实现时间的上的步进(可以理解为1阶导数)。如果在指定的时间步长内斜率变化很小,这种步进是可以满足方程要求的,并可以得到将来任意时刻的近似解。然而,如果变化比较大时,实际的变化过程将不能通过线性化方法来处理,这时候再使用这种方法就会出现问题。随着时间的推移,数值解越来越偏离真解,最终引起发散。对于我们求解的流动问题,有下面几种可能会引起计算过程的发散

1)时间步长过大

   这点很容易理解,时间步长过长可能会造成时间段内,斜率变化较大,从而会造成数值解偏离真解。一般而言,对于显式方法要求在指定的时间步长内流体流动不能超过一个网格(库朗数限制)。

2)压力修正次数太少

   对于NS方程SIMPLE系列算法而言,需要通过压力来显式修正表面流率和速度,如果修正次数过少,通常

(2011-04-14 20:53)
标签:

openfoam研究

教育

分类: OpenFOAM使用

在实际的流体模拟中通常以残差作为收敛的判据,有时候为什么残差永远降不下来呢?到底求得的数据是否可信呢?今天我们聊聊残差问题。

在CFD计算过程中有两种残差一种是外残差一种是内残差。残差是当前时刻的时刻的收敛数据带入到下一个时刻的方程中而引起的残差,而内残差是求解代数方程中引起的残差。

外残差: 对于方程f(x,t)=0在t_0时刻有收敛解x_0, 则f(x_0,t=t_0)=0; 当用t0时刻的结果代入到t1时刻的方程时,通常并不能满足方程,即 f(x_0, t = t_1) = r !=0; 这里的残差r称为外残差。

内残差:在cfd计算中通常将方程转化为代数方程Ax=b;当得到某个解A*x_0-b = r1; 这里的r1 ->0时,认为Ax=b收敛。 这里的r1为内残差。

对于稳态问题:只有当r->0时,才被认为收敛,也就是(x_1 - x_0)->0. 也就是我们在cfd计算中通常见到的那个残差,fluent及其pyFoam输出残差图就是这个r。r常被作为收敛判据。

对于非稳态问题,下一时刻的求解结果用于和当前的求解结果不一样(时变的,也就是非稳态),这时候r并不是很小,对于特定的问题,这个r永远不可能很小(因为是非稳态问题),所以对于非稳态问题外残差r不能作为收敛判据。

标签:

openfoam研究

教育

分类: OpenFOAM使用

    最近忙了一点,很长时间没有更新了。今天我们一起来看看sample后处理功能。

    OpenFOAM中sample用来从计算结果中取出符合某种要求的点集合,比如:某条线上的点集合或者取某个面上的点集。在OpenFOAM-1.6中比1.5版本功能有所增强。我们来一起看看sample的用法。使用sample需要在system文件夹中增加sampleDict参数字典用于指定你要取得点的限制。在下面路径文件夹中,有个sampleDict的例子

OpenFOAM-1.6\applications\utilities\postProcessing\sampling\sample。

下面简单的说一下sample的具体功能

1)取某条直线上的点

关键字:

    setFormat raw;   //用来指定直线上点的输出的格式,该值可以为xmgr,jplot,gnuplot分别用来指定软件xmgr,jplot,gnuplot能够识别的格式,raw输出的是文本格式。

    interpolationScheme cellPoint;   //用来确定取指定点所用到的插值格式,该值可以为 cell(直接利用点cell的值),cellPoint(利用cell中心和单元节点插值),cellPointFace(利用单元中

标签:

openfoam研究

教育

分类: 其他

蓝色流体社区有兄弟发表关于如何使用gnuplot来输出残差图,今天来探讨一下用pyFoam来完成残差图的。

pyFoam是控制OF运行的一个python 程序包,也就是将openfoam的运行部分包装了一下。 你可以通过svn下载最新版本的pyfoam,可以通过在控制台上输入下面命令。

svn co https://openfoam-extend.svn.sourceforge.net/svnroot/openfoam-extend/trunk/Breeder/other/scripting/PyFoam/
下载了pyFoam以后,进入pyfoam文件夹,利用下面的命令安装

sudo python setup.py install

能够安装成功的前提是你的系统需要装有python.同时需要有gnuplot的支持。 如果你用的是ubuntu。可以直接通过下面命令下来gnuplot并安装

sudo apt-get install gnuplot。

安装过程比较简单,下面看看如果输出残差图

与openfoam残差有关的命令有

pyFoamRunner.py 他是对

(2009-09-30 09:22)
标签:

openfoam研究

教育

分类: OpenFOAM求解器说明

终于回国了,事情比较多,blog更新速度慢了些。  今天一起看看OpenFOAM中的pimple算法流程。 pimple算法是simple算法和piso算法的结合体。

pimple的基本思想是:将每个时间步长内用simple稳态算法求解(也就是将每个时间步内看成稳态流动),时间步长的步进用piso算法来完成。

在有限容积离散中,时间项的离散仍采用的差分格式,这样做可以得到某个时间点的流场信息,而非某个时间步长的内的平均值。采用传统的piso算法求解变化较快的流动的时候,需要的时间步长较小(因为相邻两个时间点的流场不能差别太大,否则会发散),这样会造成求解的某种流动需要的耗时过长。 pimple算法将每个时间步长内看成一种稳态的流动(采用亚松驰来解决相邻两个时间段变化大的情况),当按照稳态的求解器求解到一定的时候,则采用标准的piso做最后一步求解。下面简单的将pimpleFoam流程

 

#include 'fvCFD.H'
#include 'singlePhaseTransportModel.H'
#include 'turbulenceModel.H'

int main(int argc, char *argv[])
{
    #include 'setRootCase.H'
    #include 'createTi

标签:

openfoam研究

教育

分类: OpenFOAM类解析
OpenFOAM中有两个常用但很难理解的模板类,智能化指针模板类autoPtr和瞬态对象操作模板类tmp。这两个类几乎无处不在,使用极易出错。OpenFOAM通过该自动指针来实现对象的多态创建。这使得你可以在不改变程序的情况下,完成多种不同实现。本文意在探讨,这autoPtr的使用过程中应当注意的问题及其他们与标准c++指针的差别。瞬态对象操作模板类tmp的使用,后续文章探讨。

C++语言中数据的传递方式有两种:(1)数值传递(2)地址传递。前者是在函数调用中将实参的值复制一份传给形参,形参的变化不会影响到实参。后者在函数调用中传递的实际参数的地址,在函数中,对形参的修改会影响到实参。这点可以参考谭老的c语言经典之作“c语言程序设计”,不再累叙。  就地址传递而言,C语言采用指针,而C++中可以采用引用。两者在参数传递的时候效果一样,C++引用相对来说比较简单,但是灵活性较指针差一些。  比如:如果想实现,父类声明对象,子类构造该对象,只能通过指针来完成,因为指针可以悬空,而引用则不行。 两者的差别,可以参看相应C++书籍。 闲言少序。

1.autoPtr
使用:autoPtr<className>  objectName;

标签:

openfoam研究

教育

分类: OpenFOAM使用
边界条件是设定正确与否是决定计算成功与否的关键因素。边界条件有物理边界条件和数值边界条件之分。

物理边界条件是根据某种物理现象而对速度和压力必须满足某种数值行为而定义的边界条件,比如fluent中的pressureOutlet or velocityinlet等。此类边界条件是软件公司为了减少用户的逐个对每个变量进行设定而引起麻烦而定义的一种数值边界条件集合。比如 fluent中pressureOutlet边界条件为该边界压力指定,其他变量梯度为0,这样设定,给用户带来了很多方便,但同时限制了用户的选择性。比如我想在压力边界上设定某个标量为指定值,这就很难在fluent中办到。 openfoam中的foamX也为大家定义了一些物理边界条件,比如wall,atmosphere等。我很少用foamX,因为使用起来比较麻烦,不如直接对文件进行编辑。这也是在本站博文中没有对foamX进行介绍的一个原因。

数值边界条件:就是我们经常所说的第一类边界条件(定值边界)和第二类边界条件(梯度边界)。在openfoam的初始化文件中就需要指定边界条件就是这种数值边界条件。不像fluent那样,在用gambit画几何时候指定的边界条件可以是fluent中的物理边界条件。而openfoam中画网格的时候,需要指定相应
标签:

openfoam研究

教育

分类: OpenFOAM使用
在本站博文“使用OpenFOAM的基本流程”已经对fvSchemde中的一些基本参数字典关键字进行了简单的谈论,本文对该参数字典进行详细探讨。
    在该字典文件中可能出现的关键字有
interpolationSchemes 点对点插值格式
snGradSchemes        面梯度发方向分量
gradSchemes          梯度格式 ∇
divSchemes           散度格式 ∇ •
laplacianSchemes     拉普拉斯项格式 ∇2
timeScheme           时间的一阶二阶微分格式 ∂/∂t, ∂ 2 /∂ 2 t
fluxRequired         需要计算流率的场
由于该部分内容较多,本文只对前3中格式进行探讨,后面几种格式在后续文章中说明。
(1)interpolationSchemes 插值格
标签:

openfoam研究

教育

分类: OpenFOAM使用
在本站博文“使用OpenFOAM的基本流程”已经对controlDict中的一些基本参数字典关键字进行了简单的讨论。鉴于controlDict的在OpenFOAM计算的重要性,本文对参数字典文件进行详细探讨。 现在以动态步长的icoFoam中算例为例进行说明。至于如何让程序能够自动调节步长,参看本站博文“如何使得OpenFOAM的solver自动调节时间步长”。

FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//计算该算例的应用程序名字。
application &n
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有