捐赠我们 社区应用 会员列表 统计排行 邀请注册
主题 : SIMPLE/SIMPLEC/PISO算法 is SIMPLE
liuhuafei 离线
级别: 高级会员
显示用户信息 
0  发表于: 2012-10-14   
倒序阅读   全看  

SIMPLE/SIMPLEC/PISO算法 is SIMPLE

管理提醒: 本帖被 wjjxlc 执行加亮操作(2012-10-23)
这些天我正在编一本教材,其中涉及到SIMPLE类算法一章。
我根据自己的理解,写了一些材料,主要给学生用。

将涉及如下算法:
基于压力方程的SIMPLE算法
基于压力校正方程的SIMPLE算法(Peric的动量加权插值)
基于压力校正方程的SIMPLE算法 (Rhie-chow的压力加权插值)
基于压力校正方程的SIMPLEC算法


并为每种算法配备了例子程序和算例。

现将材料中的一部分上传,供大家参考,材料难免有错误,欢迎批评指正。

[ 此帖被liuhuafei在2013-01-25 08:04重新编辑 ]
图片:simple讲解1.jpg
图片:simple讲解2.jpg
图片:simple讲解3.jpg
图片:simple讲解4.jpg
图片:simple讲解5.jpg
liuhuafei 离线
级别: 高级会员
显示用户信息 
1  发表于: 2012-10-14   
全看  
回 楼主(liuhuafei) 的帖子
其它的文档
图片:simple讲解6.jpg
图片:simple讲解7.jpg
图片:simple讲解8.jpg
图片:simple讲解9.jpg
图片:simple讲解10.jpg
liuhuafei 离线
级别: 高级会员
显示用户信息 
2  发表于: 2012-10-14   
全看  
回 1楼(liuhuafei) 的帖子
算例中文档
图片:simple讲解13.jpg
图片:simple讲解14.jpg
图片:simple讲解12..jpg
图片:simple讲解11.jpg
图片:simple讲解15.jpg
liuhuafei 离线
级别: 高级会员
显示用户信息 
3  发表于: 2012-10-14   
全看  
其它算例文档
图片:simple讲解16.jpg
图片:simple讲解17.jpg
liuhuafei 离线
级别: 高级会员
显示用户信息 
4  发表于: 2012-10-14   
全看  
运行方法:

SIMPLE-Pres中是源程序,每个case都有一个
user.*****.f90文件,编译时将它加入到project中

grid包内包含网格生成器:
grid.f90

运行时要求输入:
case的根目录:如c:\case
case名称,如  cavity
程序将自动读入c:\case\cavity\grid.inp   设置x,y方程网格划分的参数
生成的文件保存为
c:\case\cavity\grid.grd                   用于solv
c:\case\cavity\grid.plt                   用于tecplot

solv包内包含求解器:
SIMPLE_pres  : 基于压力方程的SIMPLE算法,稳态和非稳态流动
PISO_pres       : 基于压力方程的PISO算法,主要用于非稳态流动
SIMPLEC_pre : 基于压力方程的SIMPLEC算法,稳态和非稳态流动

main.f90        主程序
mod.f90         变量定义
calcp.f90       压力方程或压力校正方程求解
calcuv.f90      动量方程求解
calct.f90         能量方程求解
linbase.f90    线性代数方程基本函数
ICCG.f90       ICCG求解器
BICG.f90        BICGSTAB求解器
SIP.f90           SIP求解器
user.****.f90 边界和用户定义函数

case包中是算例文件:
包含cavity(顶盖驱动流 )     :  速度给定型边界
        pipe(管内层流)           :速度入口,压力出口,壁面无滑移,对称面
        annulus(管内层流)    :压力入口,压力出口,壁面无滑移
        cavbuo(方腔自然对流) :  壁面无滑移,给定温度,绝热边界 
其中cavity,cavbuo已与基准解对比过 ,annulus已理论解对比
通过上面的例子,使用户熟悉给定速度,给定压力等不同边界类型时的边界处理方法。

每个case包含:
grid.grd   网格文件
solv.inp  求解设置文件,注意其中压力的压松弛算子在PISO算法、SIMPLEC算法中没有用处,
                 但为了设置文件的统一,也是输入参数的。

编译:
每个case对应一个 user.*****.f90文件,运行某个算例就将其加入到Project中编译

运行时:
如果case解压为c:\case
如果solv解压为c:\solv

 solv运行时,先输入例子文件的根目录:
 例如按上面解压时,就可输入  c:\case
 然后输入算例名称,如              cavity
程序将自动读入c:\case\cavity\grid.grd
                           c:\case\cavity\solv.inc
输出的文件自动输出到c:\case\cavity目录中    

源代码和case将不断更新:主要是注释需要修改,benchmark加入

源代码和case更新日期:2012-10-15 (更新1)
源代码和case更新日期:2012-10-16 (加入PISO算法,加入PISO算法算例1) 
 PISO算法的算例,目前只有unscav

源代码和case更新日期:2012-10-17 (更新源代码和case)


更新日期:2012-10-22(更新源代码和case)
加入SIMPLEC求解器,SIMPLE的所有case适用于SIMPLEC,输入的p方程的亚松弛算子无用。





[ 此帖被liuhuafei在2012-10-22 13:17重新编辑 ]
描述:求解器
附件: solv.rar (109 K) 下载次数:93
描述:case
附件: case.rar (509 K) 下载次数:73
描述:网格生成
附件: grid.rar (8 K) 下载次数:56
清空我的评分动态本帖最近评分记录: 共3条评分记录
ht006 积分 +1 2012-11-13 -
cfdfish 积分 +1 2012-10-15 看看这次能不能学会,呵呵。
夏靖之 积分 +1 2012-10-15 -
隐藏评分记录
liuhuafei 离线
级别: 高级会员
显示用户信息 
5  发表于: 2012-10-14   
全看  
回 4楼(liuhuafei) 的帖子
算例说明:


顶盖驱动流的验证

 
方腔内自然对流Ra=10000

 
压差驱动下的流动:annulus

 

pipe内层流


其它算例的验证将择日给出。
其它算法将择日给出






[ 此帖被liuhuafei在2012-10-22 13:23重新编辑 ]
hyperlwd 离线
勤能补拙是良训,一份辛劳一分才!
级别: 普通会员
显示用户信息 
6  发表于: 2012-10-14   
全看  
      我个人觉得应该按照先同位和交错网格划分,然后再按照SIMPLE系列逐步完善的思路讲解要好点。
否则学生接受起来容易混淆。毕竟所谓的界面速度插值技术不是必须的。而且,从目前的发展趋势
看,交错网格由于相比同位网格更加精确,又在逐渐受到重视,特别是大涡模拟领域。
另外,应该给出一个最基本的SIMPLE方法的实现方法,然后其它方法注重讲解原理,然后实现作为
作业。
    个人意见,不一定合适。
liuhuafei 离线
级别: 高级会员
显示用户信息 
7  发表于: 2012-10-14   
全看  
       读研的时候,当时老师教我们也是交错网格的SIMPLE算法,还看了Spalding和
Patankar最早的程序,当时想居然有这样“坑人”的算法;后来做博士论文时,我
采用的是Peric等人提出同位网格(基于动量插值),总算可以不用交错网格了;现在
自己开发程序,学习OpenFOAM的算法,发现实际上动量插值也不需要。
       所以回过头来想,我们为什么当时要提出和学习交错网格,主要是当时的认识
水平不高,或者说有很多错误认识。试想如果CFD像FEM那样,默认的网格就是
三角形,还会有交错网格这样的认识吗,因为在三角形网格上建立交错网格,可能
是一场“灾难”。既然如此,我就不愿学生也像我们那样去学习,像“交错网格”这类
在CFD发展历程中出现的“存在很多错误”的知识。另外交错真的就好吗,本来速度矢量
的u,v,w就是一个整体不可分的,在交错网格中却是布置在不同位置的变量,这与物理
事实上本身就不符合。
        
       根据我的研究,本来就不存在交错网格的问题,也不需要采用交错网格,
只不过当时的条件下,有限体积法和有限差分法还没有区分清楚造成的。 例如
压力梯度和对流项看起来都是一阶导数,但是在有限差分中是不加区分的,实质
是压力梯度项的处理和对流项是完全不一样的,压力梯度无需离散。
是否存在交错网格问题,在Data的一篇文章中已经专门讨论了。
       至于同位网格网格,是否需要特殊的插值,我的观点也是不是必需的。
上面介绍的基于压力方程的SIMPLE方法,既不需要交错网格,也不需要特殊的
动量或者压力加权插值,只用到了线性插值。
     当然我们现有的多数教科书沿用了不可压流发展历程中的阶段性的结果。如果
参考OpenFOAM的理论手册,可以发现 交错网格基本不提,
动量插值也是基本不提,因为它都没用到,也没必要用。
     上面给出的代码就是无需用交错网格和特殊界面插值的算法,至少实践已证明
无需采用它们。
      当然后面还将给出采用特殊界面插值的算法,但是交错网格是绝对没必需用的,
也没看出有什么必要学的。
  
    当然还有很多喜欢交错网格,但这难以成为主流。
     一家之言,仅供参考
   


[ 此帖被liuhuafei在2012-10-14 20:20重新编辑 ]
hyperlwd 离线
勤能补拙是良训,一份辛劳一分才!
级别: 普通会员
显示用户信息 
8  发表于: 2012-10-14   
全看  
       如果你认为交错网格是CFD早期存在“存在很多错误”,那我只能说很遗憾。
       我强调几点,首先,交错网格在非结构网格上实施也并非什么“灾难”;其次,从原理上讲,交错网格反应了不可压缩流场,压力梯度是流动发生的驱动力,能够更好地揭示不可压缩的流动本质。当然,Data的方法更多的是从数学上出发的一种方案而已,我并不认为这个方案很好。我个人认为讲CFD就应该更多的将计算格式背后所包含或者透露出来的流体力学机理或者本质给学生讲清楚,只有这样学生才能够更好的理解和掌握它,单纯的数学公式推倒并没有多大意义,不同的格式采用不同的方法,不同的场合推导出来的公式并不一样,但本质不会变。再者,如果从二次守恒的角度看,交错网格相对于同位网格有天然的优势,而二次守恒是严格意义上的离散格式能量守恒的体现,这个对于获得正确的湍流能量谱是极其重要的。这个在P.Moin等的文章还有Annual Review of Fluid Mechanics里面的几篇文章中都进行了讨论,建议看看。交错网格不能成为主流,我认为主要是实施起来不是那么方便罢了。但是其思想值得借鉴,这也是目前有人利用这种思想去构造二次守恒格式的原因。我觉得我们应该着眼近年来国际上湍流模拟的趋势极其对CFD的要求和挑战来客观的评价这些格式和方法。有些方法或者思想看起来“落伍”了,但是并非完全没有可取之处。
      我还要声明一点,我不是交错网格的坚定捍卫者,我只是就我目前搞大涡模拟极其相关的算法研究的一些看法。我只是希望我们不要对很多东西的评价过于武断罢了。
      个人一点浅见,仅供参考。
[ 此帖被hyperlwd在2012-10-14 21:35重新编辑 ]
cfdfish 离线
级别: 初级会员
显示用户信息 
9  发表于: 2012-10-15   
全看  
这个用gfortran怎么编译呀?
先gfortran -c mod.f90编出一些mod文件
又c住main.f90中的一个pause语句,
接着滚出一大串信息。。。
改天再试。

有点像peric的,每个case要换一个user.f90编译.
那个grd网格也同peric的么?
liuhuafei 离线
级别: 高级会员
显示用户信息 
10  发表于: 2012-10-15   
全看  
引用
引用第9楼cfdfish于2012-10-15 19:28发表的 :
这个用gfortran怎么编译呀?
先gfortran -c mod.f90编出一些mod文件
又c住main.f90中的一个pause语句,
接着滚出一大串信息。。。
改天再试。
.......


程序框架是在Peric的程序上改的,但采用的算法大有不同,主要的目的基于如下几点:
1)通常一些CFD教材中会讲到SIMPLE,SIMPLEC,SIMPLER,PISO等,但读者很少有机会体会
      这些介绍的算法,这个帖子希望在不久的将来将这些算法的code都贴出来。
      我个人认为不可压流计算的初始难点在于压力速度耦合算法,这个过关了,就好办了。至少我当时
     学的时候,只懂得用别人的程序,不知道如何在算法上进行改动
2)用gfortran我现在还没时间试,但如果在linux下运行,main.f90开头几句中读入目录和case名部分要修改,
      因为window用\分隔,linux用/分隔。
3)程序功能很简单,只是想初学者搞清楚SIMPLE算法而已。
merryfish 离线
级别: 初级会员
显示用户信息 
11  发表于: 2012-10-15   
全看  
引用
引用第7楼liuhuafei于2012-10-14 17:53发表的  :
       读研的时候,当时老师教我们也是交错网格的SIMPLE算法,还看了Spalding和
Patankar最早的程序,当时想居然有这样“坑人”的算法;后来做博士论文时,我
采用的是Peric等人提出同位网格(基于动量插值),总算可以不用交错网格了;现在
自己开发程序,学习OpenFOAM的算法,发现实际上动量插值也不需要。
       所以回过头来想,我们为什么当时要提出和学习交错网格,主要是当时的认识
.......


honestly, I don't agree with you. staggered mesh is just a term that not only used in CFD, but also used in computational electromagnetic and FEM as well. So don't be too critical with "staggered mesh". It only shows some variables are stored as face averaged variables, nothing else.
,‘‘‘,,‘,.‘‘,,‘,‘‘.‘,‘‘‘,,‘
‘,‘‘‘╭⌒╮⌒╮.‘‘,.‘‘,‘,‘ ,‘
,‘‘‘‘‘‘‘,,‘‘,.‘‘,,‘,,‘‘,..
╱◥██◣‘‘‘,,‘,‘‘‘,,‘,,‘‘,.
︱田︱田田|.‘希望下雨的时候你能在我身边
╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
[$nbsp][$nbsp]
merryfish 离线
级别: 初级会员
显示用户信息 
12  发表于: 2012-10-15   
全看  
some comments on your ppt files on simple algorithm. what you show here is NO difference from the any standard textbook. Especially, in the textbook by W.Q.Tao and Patankar, these formula have be provided in detail. However, in Peric's book, they were already represented by a new more general form in curviliear mesh. Why NOT prepare your staff similar to Peric's representation, this is much more practical, and useful..................
,‘‘‘,,‘,.‘‘,,‘,‘‘.‘,‘‘‘,,‘
‘,‘‘‘╭⌒╮⌒╮.‘‘,.‘‘,‘,‘ ,‘
,‘‘‘‘‘‘‘,,‘‘,.‘‘,,‘,,‘‘,..
╱◥██◣‘‘‘,,‘,‘‘‘,,‘,,‘‘,.
︱田︱田田|.‘希望下雨的时候你能在我身边
╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
[$nbsp][$nbsp]
liuhuafei 离线
级别: 高级会员
显示用户信息 
13  发表于: 2012-10-15   
全看  
       实际上在同位网格中,界面流量就是存储在界面上的,前面的材料中已经提到。
界面流量存储在界面,你可以将界面流量 相像成 Patankar 所说的 位于不同 网格上的 u 和 v的集合。
      由于不可压流求解中,对流项的线性化就会分离出界面流量来,它就是位于界面上的,肯定与计算变量速度不在同一位置,
但是它又确实不同于Patankar当时所说的“交错网格”,更不是像“交错网格”出发点是”解决压力和速度“的”失耦“问题。
     当然从FVM计算的角度讲:
变量的存储将分三类:
    单元中心       :u,v,w,p,T等
    界面               :界面质量流量,网格运动流量
   单元Vertex     :通常用于后处理

hyperlwd 离线
勤能补拙是良训,一份辛劳一分才!
级别: 普通会员
显示用户信息 
14  发表于: 2012-10-16   
全看  
恕我不能够同意您的观点:
1. “由于不可压流求解中,对流项的线性化就会分离出界面流量来,它就是位于界面上的”
通量本来就在界面山,这是由于高斯定理得到的。这是有限体积的本质之一;
有限体积的本质之二就是界面通量的重构;这和是否是交错网格无关;

2. 当然从FVM计算的角度讲:
变量的存储将分三类:
    单元中心       :u,v,w,p,T等
    界面               :界面质量流量,网格运动流量
   单元Vertex     :通常用于后处理

这个只限于同位网格的格心有限体积方法。
描述
快速回复

验证问题:
傲雪论坛成立于哪一年? 正确答案:2002年
按"Ctrl+Enter"直接提交