Fluent理论手册3—滑移网格及动网格理论
- 格式:pdf
- 大小:462.42 KB
- 文档页数:9
图1采用滑移网格
图2采用动网格
滑移网格与动网格都可以计算瞬态运动问题。
但是存在以下区别:
(1)滑移网格需要建立多个域,实际上还是计算区域运动,是一个独立区域内所有网格一起运动,而动网格则是真正意义上的网格运动。
(2)滑移网格不会涉及到网格的变形与重生,但是要设计到交界面设置
(3)滑移网格不会造成负体积,而动网格极易形成负网格
(4)滑移网格是一种简化了的模型,最大计算误差出现在交界面位置
(5)动网格误差常出现在运动壁面位置,因此实际应用中往往将边界层与壁面合在一起运动。
(6)SRF,MRF与MP只能计算稳态,在新版本的FLUENT中应用的是坐标系变换,和滑移网格的设置有所区别。
FLUENT动网格简介在固体有限元计算中,网格运动实非什么稀奇事儿。
而且在绝多数固体计算的基本物理量是网格的节点位移,所以,固体计算中,网格节点运动是对的,没有运动反而不正常了。
也可以这么说:正因为计算域内部节点间的相对运动,才导致了内应力的产生。
流体计算与固体完全不同。
其根源在于它们使用的网格类型不同。
当前固体有限元计算采用的是拉格朗日网格,而流体计算则大多数采用的欧拉网格。
如果说把拉格朗日网格中的节点点看作是真实世界的物质原子的话,那么欧拉网格的节点则好比是真实世界中的一个个传感器,它们总是呆在相同的位置,真实的记录着各自位置上的物理量。
正常情况下,欧拉网格系统是这样的:计算域和节点保持位置不变,发生变化的是物理量,网格节点就像一个个布置在计算域中的传感器,记录该位置上的物理量。
这其实是由流体力学研究方法所决定的。
宏观与微观的差异决定了固体力学计算采用拉格朗日网格,流体计算采用欧拉网格。
关于这部分的详细解说,可以参阅任何一本计算流体动力学书籍。
世界是公平的。
有利必有弊。
朗格朗日网格适合计算节点位移,然而对于过大的网格变形却难以处理。
欧拉网格生来可以处理大变形(因为节点不动),然而对于对于节点运动的处理,则是其直接软肋。
然而很不幸的是,现实生活中有太多网格边界运动的实例。
如汽车发动机中的气缸运动、阀门开启与关闭、机翼的运动、飞机投弹等等等等举不胜举。
计算流体动力学计算的基本物理量通常为:速度、温度、压力、组分。
并不计算网格节点位移。
因此要让网格产生运动,通常给节点施加的物理约束是速度。
CFD中的动网格大体分为两类:(1)显式规定的网格节点速度。
配合瞬态时间,即可很方便的得出位移。
当然一些求解器(如FLUENT)也支持稳态动网格,这时候可以直接指定节点位移。
(2)网格节点速度是通过求解得到的。
如6DOF模型基本上都属于此类。
用户将力换算成加速度,然后将其积分成速度。
对于第一类动网格问题,在fluent中通常可以使用profile与UDF进行网格设置,通过规定节点或区域的速度、角速度或位移等方式来显式确定网格的运动,通常大部分的动网格问题都归于此类。
题记:在学习使用Fluent的时候,有不少朋友需要使用动网格模型(Dynamic Mesh Model),因此,本版推出这个专题,进行大讨论,使大家在使用动网格时尽量少走弯路,更快更好地掌握;也欢迎使用过的版友积极参与讨论指导,谢谢!该专题主要包括以下的主要内容:##1.动网格的相关知识介绍;##2.以NACA0012翼型俯仰振荡实例进行讲解动网格的应用过程;##3. 与动网格应用有关的参考文献;##4. 使用动网格进行计算的一些例子。
##1.动网格的相关知识介绍有关动网格基础方面的东西,请具体参考FLUENT User’s Guide或FLUENT全攻略的相关章节,这里只给出一些提要性的知识要点。
1、简介动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。
边界的运动形式可以是预先定义的运动,即可以在计算前指定其速度或角速度;也可以是预先未做定义的运动,即边界的运动要由前一步的计算结果决定。
网格的更新过程由FLUENT 根据每个迭代步中边界的变化情况自动完成。
在使用动网格模型时,必须首先定义初始网格、边界运动的方式并指定参予运动的区域。
可以用边界型函数或者UDF 定义边界的运动方式。
FLUENT 要求将运动的描述定义在网格面或网格区域上。
如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。
那些由于周围区域运动而发生变形的区域必须被组合到各自的初始网格区域中。
不同区域之间的网格不必是正则的,可以在模型设置中用FLUENT软件提供的非正则或者滑动界面功能将各区域连接起来。
注:一般来讲,在Fluent中使用动网格,基本上都要使用到UDF,所以你最好具备一定的C 语言编程基础。
2、动网格更新方法动网格计算中网格的动态变化过程可以用三种模型进行计算,即弹簧近似光滑模型(spring-based smoothing)、动态分层模型(dynamic layering)和局部重划模型(local remeshing)。
Remeshing方法中的一些参数设定:Remeshing中的参数Minimum length scale和Maximum Length Scale,这两个参数你可以参考mesh scale info中的值,仅是参考,因为mesh scale info中的值是整个网格的评价值,设置的时候看一下动网格附近的网格和整个网格区域的大小比较,然后确定这两个参数,一般来讲,动网格附近的网格较密,这些值都比整体的小,所以在设置时通常设置为比mesh scale info中的Minimum length scale大一点,比Maximum Length Scale小一点。
以上是一般来讲的设置思路。
下面是我在NACA0012翼型动网格例子中的设置:Remeshing中的参数设定:为了得到较好的网格更新,本例在使用局部网格重新划分方法时,使用尺寸函数,也就是Remeshing+Must Improve Skewness+Size Function的策略。
将Minimum Length Scale及Maximum Length Scale均设置为0,为了使所有的区域都被标记重新划分;Maximum Cell Skewness(最大单元畸变),参考Mesh Scale Info…中的参考值0.51,将其设定为0。
4,以保证更新后的单元质量;Size Remesh Interval(依照尺寸标准重新划分的间隔),将这个值设定为1,在FLUENT,不满足最大网格畸变的网格在每个时间步都会被标记,而后重新划分,而不满足最小,最大及尺寸函数的网格,只有在Current Time=(Size Remesh Interval)*delta t的时候,才根据这些尺寸的标准标记不合格的单元进行重新划分,为了保证每步的更新质量,将其修改为1,就是每个时间都根据尺寸的标准标记及更新网格.Size Function Resolution(尺寸函数分辨率),保持默认的3;Size Function Variation(尺寸函数变量):建议使用一个小值,在0.1到0。
Fluent动网格的应用过程一、简介动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。
网格的更新过程由FLUENT根据每个迭代步中边界的变化情况自动完成。
FLUENT要求将运动的描述定义在网格面或网格区域上。
如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。
二、动网格更新方法动网格计算中网格的动态变化过程可以用三种模型进行计算,即弹簧近似光滑模型、动态分层模型和局部重划模型。
1、弹簧近似光滑模型在弹簧近似光滑模型中,网格的边被理想化为节点间相互连接的弹簧。
移动前的网格间距相当于边界移动前由弹簧组成的系统处于平衡状态。
在网格边界节点发生位移后,会产生与位移成比例的力,力量的大小根据胡克定律计算。
边界节点位移形成的力虽然破坏了弹簧系统原有的平衡,但是在外力作用下,弹簧系统经过调整将达到新的平衡,也就是说由弹簧连接在一起的节点,将在新的位置上重新获得力的平衡。
从网格划分的角度说,从边界节点的位移出发,采用虎克定律,经过迭代计算,最终可以得到使各节点上的合力等于零的、新的网格节点位置,这就是弹簧光顺法的核心思想。
2、动态分层模型对于棱柱型网格区域(六面体和或者楔形),可以应用动态层模型。
动态层模型的中心思想是根据紧邻运动边界网格层高度的变化,添加或者减少动态层,即在边界发生运动时,如果紧邻边界的网格层高度增大到一定程度,就将其划分为两个网格层;如果网格层高度降低到一定程度,就将紧邻边界的两个网格层合并为一个层。
3、局部重划模型在使用非结构网格的区域上一般采用弹簧光顺模型进行动网格划分,但是如果运动边界的位移远远大于网格尺寸,则采用弹簧光顺模型可能导致网格质量下降,甚至出现体积为负值的网格,或因网格畸变过大导致计算不收敛。
为了解决这个问题,FLUENT 在计算过程中将畸变率过大,或尺寸变化过于剧烈的网格集中在一起进行局部网格的重新划分,如果重新划分后的网格可以满足畸变率要求和尺寸要求,则用新的网格代替原来的网格,如果新的网格仍然无法满足要求,则放弃重新划分的结果。
网格的读入和使用FLUENT可以从输入各种类型,各种来源的网格。
你可以通过各种手段对网格进行修改,如:转换和调解节点坐标系,对并行处理划分单元,在计算区域内对单元重新排序以减少带宽以及合并和分割区域等。
你也可以获取网格的诊断信息,其中包括内存的使用与简化,网格的拓扑结构,解域的信息。
你可以在网格中确定节点、表面以及单元的个数,并决定计算区域内单元体积的最大值和最小值,而且检查每一单元内适当的节点数。
以下详细叙述了FLUENT关于网格的各种功能。
(请参阅网格适应一章以详细了解网格适应的具体内容。
)网格拓扑结构FLUENT是非结构解法器,它使用内部数据结构来为单元和表面网格点分配顺序,以保持临近网格的接触。
因此它不需要i,j,k指数来确定临近单元的位置。
解算器不会要求所有的网格结构和拓扑类型,这使我们能够灵活使用网格拓扑结构来适应特定的问题。
二维问题,可以使用四边形网格和三角形网格,三维问题,可以使用六面体、四面体,金字塔形以及楔形单元,具体形状请看下面的图形。
FLUENT可以接受单块和多块网格,以及二维混合网格和三维混合网格。
另外还接受FLUENT有悬挂节点的网格(即并不是所有单元都共有边和面的顶点),有关悬挂节点的详细信息请参阅“节点适应”一节。
非一致边界的网格也可接受(即具有多重子区域的网格,在这个多重子区域内,内部子区域边界的网格节点并不是同一的)。
详情请参阅非一致网格Figure 1: 单元类型可接受网格拓扑结构的例子正如网格拓扑结构一节所说,FLUENT可以在很多种网格上解决问题。
图1—11所示为FLUENT的有效网格。
O型网格,零厚度壁面网格,C型网格,一致块结构网格,多块结构网格,非一致网格,非结构三角形,四边形和六边型网格都是有效的。
Note that while FLUENT does not require a cyclic branch cut in an O-type grid,it will accept a grid that contains one.Figure 1: 机翼的四边形结构网格Figure 2:非结构四边形网格Figure 3: 多块结构四边形网格Figure 4: O型结构四边形网格Figure 5: 降落伞的零厚度壁面模拟Figure 6: C型结构四边形网格Figure 7:三维多块结构网格Figure 8: Unstructured Triangular Grid for an AirfoilFigure 9:非结构四面体网格Figure 10:具有悬挂节点的混合型三角形/四边形网格Figure 11:非一致混合网格for a Rotor-Stator Geometry选择适当的网格类型FLUENT在二维问题中可以使用由三角形、四边形或混合单元组成的网格,在三维问题中可以使用四面体,六面体,金字塔形以及楔形单元,或者两种单元的混合。
F L U E N T动网格教程(共17页) -本页仅作为预览文档封面,使用时请删除本页-FLUENT动网格教程摘自&id=1396题记:在学习使用Fluent的时候,有不少朋友需要使用动网格模型(Dynamic Mes h Model),因此,本版推出这个专题,进行大讨论,使大家在使用动网格时尽量少走弯路,更快更好地掌握;也欢迎使用过的版友积极参与讨论指导,谢谢!。
该专题主要包括以下的主要内容:§一、动网格的相关知识介绍;§二、以NACA0012翼型俯仰振荡实例进行讲解动网格的应用过程;§三、与动网格应用有关的参考文献;§四、使用动网格进行计算的一些例子。
§一、动网格的相关知识介绍有关动网格基础方面的东西,请具体参考FLUENT User’s Guide或FLUENT全攻略的相关章节,这里只给出一些提要性的知识要点。
1、简介动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。
边界的运动形式可以是预先定义的运动,即可以在计算前指定其速度或角速度;也可以是预先未做定义的运动,即边界的运动要由前一步的计算结果决定。
网格的更新过程由FLU ENT 根据每个迭代步中边界的变化情况自动完成。
在使用动网格模型时,必须首先定义初始网格、边界运动的方式并指定参予运动的区域。
可以用边界型函数或者UDF定义边界的运动方式。
FLUENT 要求将运动的描述定义在网格面或网格区域上。
如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。
那些由于周围区域运动而发生变形的区域必须被组合到各自的初始网格区域中。
不同区域之间的网格不必是正则的,可以在模型设置中用FLUENT软件提供的非正则或者滑动界面功能将各区域连接起来。
注:一般来讲,在Fluent中使用动网格,基本上都要使用到UDF,所以你最好具备一定的C语言编程基础。
2、动网格更新方法动网格计算中网格的动态变化过程可以用三种模型进行计算,即弹簧近似光滑模型(spring-based smoothing)、动态分层模型(dynamic layering)局部重划模型(local remeshing)1)弹簧近似光滑模型原则上弹簧光顺模型可以用于任何一种网格体系,但是在非四面体网格区域(二维非三角形),最好在满足下列条件时使用弹簧光顺方法:(1)移动为单方向。
滑移网格模型和动网格模型计算比较对于涉及运动边界的仿真问题,在现有的的CFD软件平台中出现了诸如多参考系、混合平面、滑移网格、动网格技术,在这些技术中只有滑移网格和动网格是真正进行动态模拟可以给出运动边界的实时运动状况下的的瞬态流场。
本文主要介绍两种模型在计算时的一些差别。
1、数学模型上的区别滑移网格和动网格两者均采用守恒方程进行计算,但区别在于每步的体积计算,动网格第n+1步的体积Vn+1=Vn+dV/dt△t。
就是说:下一步的运动情况是由当前时间步的计算结果确定的,各个时间步的体网格更新是基于边界条件新的位置由Fluent自动来完成的。
而滑移网格模型的网格是刚性的第n+1步的体积n f i g,I .Ai;而滑移网格Vn+1=Vn 。
另外,动网格模型的控制体的体积导数为∑uu模型的控制体的体积导数为0。
在数据传递方面,滑移网格模型是通过滑移面(交界面)传递区域计算数据,而动网格模型直接通过变形网格(增加或减少网格)传递数据。
2、建模处理的区别滑移网格的计算模型比较复杂,要专门建一个滑移的区域和滑移相交面。
动网格技术的网格模型相对比较简单,不需要构建滑动区域与交界面,但动网格的运动需要profile文件或UDF函数驱动,网格在计算过程达到一定限度后自动进行重划分。
另外滑移网格模型对于对于网格的设置有许多限定条件,完全考虑需要花费很多时间。
动网格运用profile文件或UDF函数驱动的话运动形式可以更加的多样。
3、计算速度的比较采用同一计算机对同一问题的滑移网格模型和动网格模型进行模拟计算时,动网格模型在计算初期计算比较快,但随着计算步的增大,计算速度下降,主要是因为动网格模型在计算时不断对网格重新检查,当变形超过限定时会对网格重划分,占用了一部分时间,计算速度收网格重划分的影响,时有波动。
而滑移网格依靠滑移面交换数据,计算初期慢于动网格模型,在计算过程中计算速度比较稳定。
在滑移网格模型规模稍大于动网格的情况下,滑移网格模型表现较好的稳定性和较快的计算速度。
FLUENT动网格教程摘自/dvbbs/dispbbs.asp?boardid=61&id=1396 题记:在学习使用Fluent的时候,有不少朋友需要使用动网格模型(Dynamic Me sh Model),因此,本版推出这个专题,进行大讨论,使大家在使用动网格时尽量少走弯路,更快更好地掌握;也欢迎使用过的版友积极参与讨论指导,谢谢!。
该专题主要包括以下的主要内容:§一、动网格的相关知识介绍;§二、以NACA0012翼型俯仰振荡实例进行讲解动网格的应用过程;§三、与动网格应用有关的参考文献;§四、使用动网格进行计算的一些例子。
§一、动网格的相关知识介绍有关动网格基础方面的东西,请具体参考FLUENT User’s Guide或FLUENT全攻略的相关章节,这里只给出一些提要性的知识要点。
1、简介动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。
边界的运动形式可以是预先定义的运动,即可以在计算前指定其速度或角速度;也可以是预先未做定义的运动,即边界的运动要由前一步的计算结果决定。
网格的更新过程由FLUE NT 根据每个迭代步中边界的变化情况自动完成。
在使用动网格模型时,必须首先定义初始网格、边界运动的方式并指定参予运动的区域。
可以用边界型函数或者UDF定义边界的运动方式。
FLUENT 要求将运动的描述定义在网格面或网格区域上。
如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。
那些由于周围区域运动而发生变形的区域必须被组合到各自的初始网格区域中。
不同区域之间的网格不必是正则的,可以在模型设置中用FLUENT软件提供的非正则或者滑动界面功能将各区域连接起来。
注:一般来讲,在Fluent中使用动网格,基本上都要使用到UDF,所以你最好具备一定的C语言编程基础。
2、动网格更新方法动网格计算中网格的动态变化过程可以用三种模型进行计算,即弹簧近似光滑模型(spring-based smoothing)、动态分层模型(dynamic layering)局部重划模型(local remeshing)1)弹簧近似光滑模型原则上弹簧光顺模型可以用于任何一种网格体系,但是在非四面体网格区域(二维非三角形),最好在满足下列条件时使用弹簧光顺方法:(1)移动为单方向。
FLUENT动⽹格系列:区域运动本次使⽤的是滑移⽹格,动⽹格实现以后再讨论。
要实现的运动如下图所⽰。
杯⼦中装满⽔,现在以速度1rad/s延续1s钟使杯⼦倾斜1rad,观察5s钟内⽔的变化情况。
本例可以⽤滑移⽹格或动⽹格实现,但是使⽤滑移⽹格能够保持较好的⽹格质量。
本例使⽤滑移⽹格。
FLUENT中的滑移⽹格可以最⼤限度的代替动⽹格,尤其对于⼀些分界⾯确定的计算模型。
滑移⽹格可以⽤于瞬态模拟中(其它如MRF,SRF,MP则很少⽤于瞬态模拟中)。
本例涉及到的内容包括:(1)分界⾯⼏何模型的建⽴。
涉及到多⼏何体的创建。
在workbench的DM模块中很容易解决此类问题。
但是如果要在ICEM CFD中创建⽹格的话,则需要进⾏⼀些特别的处理。
主要是各部分模型⽹格的组装问题。
(2)区域运动的指定。
在本例中主要是指定运动区域的旋转速度。
需要注意的是旋转中⼼与旋转⽅向的设定。
(3)多相流的使⽤。
本例中使⽤的是VOF模型。
1、⼏何模型本例的⼏何模型如下图所⽰。
尺⼨是随便定的。
如图所⽰,计算模型分为三个区域,1、2、3分别对应名称为braket、zone与cup,如前所述,区域zone与cup为运动区域,运动⽅式⽤UDF进⾏定义。
2、边界类型⼀共有两对interface,分别位于zone区域与cup区域,zone区域与braket区域。
如下图所⽰。
braket区域的左侧、右侧及下⽅边界均为wall类型,上⽅边界为pressure_outlet类型,内部边界为interface类型。
cup区域左、右、下侧边界为wall类型,上⽅边界为interface类型。
在mesh interface中设置interface对,⼀共是两对。
最终组合后的⽹格如下图所⽰。
3、求解参数设置导⼊模型后,在scale⾯板中进⾏必要的scale操作以使模型尺度满⾜要求。
在general⾯板中设置使⽤瞬态模拟,并设置重⼒加速度。
选择RNG K-Epsilon湍流模型。
图1采用滑移网格
图2采用动网格
滑移网格与动网格都可以计算瞬态运动问题。
但是存在以下区别:
(1)滑移网格需要建立多个域,实际上还是计算区域运动,是一个独立区域内所有网格一起运动,而动网格则是真正意义上的网格运动。
(2)滑移网格不会涉及到网格的变形与重生,但是要设计到交界面设置
(3)滑移网格不会造成负体积,而动网格极易形成负网格
(4)滑移网格是一种简化了的模型,最大计算误差出现在交界面位置
(5)动网格误差常出现在运动壁面位置,因此实际应用中往往将边界层与壁面合在一起运动。
(6)SRF,MRF与MP只能计算稳态,在新版本的FLUENT中应用的是坐标系变换,和滑移网格的设置有所区别。
Fluent动⽹格【3】:DEFINE_CG_MOTION宏除了利⽤Profile进⾏运动指定之外,Fluent中还可以使⽤UDF宏来指定部件的运动。
其中⽤于运动指定的宏主要有三个:DEFINE_CG_MOTIONDEFINE_GEOMDEFINE_GRID_MOTION今天主要看第⼀个UDF宏DEFINE_CG_MOTION。
⽤途DEFINE_CG_MOTION宏主要⽤于描述刚体的运动。
所谓“刚体”,指的是在运动过程中部件⼏何形状不会发⽣任何改变,只是其质⼼位置发⽣改变。
在定义刚体的运动时,通常以速度⽅式进⾏显式定义。
形式DEFINE_CG_MOTION宏的结构很简单。
DEFINE_CG_MOTION(name,dt,vel,omega,time,dtime)其中:name:为宏的名称,可以随意定义dt:⼀个指针Dynamic_Thread *dt,存储动⽹格属性,通常不需要⽤户⼲预。
vel:平动速度,为⼀个数组,其中vel[0]为x⽅向速度,vel[1]为y⽅向速度,vel[2]为z⽅向速度。
omega:转动速度,omega[0]为x⽅向⾓速度,omega[1]为y⽅向⾓速度,omega[2]为z⽅向⾓速度。
time:当前时间。
dtime:时间步长。
实例实例1:利⽤DEFINE_CG_MOTION宏定义速度:u x=2sin(3t)可以写成:#include "udf.h"DEFINE_CG_MOTION(velocity,dt,vel,omega,time,dtime){vel[0] = 2* sin(3*time);}很简单,对不对?再来个复杂点的例⼦。
实例2:已知作⽤在部件上的⼒F,计算部件在⼒F作⽤下的运动。
可以采⽤⽜顿第⼆定律:∫t t0dv=∫t t(F/m)dt则速度可写为:v t=v t−Δt+(F/m)Δt 可写UDF宏为:/************************************************************* 1-degree of freedom equation of motion (x-direction)* compiled UDF************************************************************/#include "udf.h"static real v_prev = 0.0;static real time_prev = 0.0;DEFINE_CG_MOTION(piston,dt,vel,omega,time,dtime){Thread *t;face_t f;real NV_VEC(A);real force_x, dv;/* reset velocities */NV_S(vel, =, 0.0);NV_S(omega, =, 0.0);if (!Data_Valid_P())return;/* get the thread pointer for which this motion is defined */t = DT_THREAD(dt);/* compute pressure force on body by looping through all faces */force_x = 0.0;begin_f_loop(f,t){F_AREA(A,f,t);force_x += F_P(f,t) * A[0];}end_f_loop(f,t)/* compute change in velocity, dv = F*dt/mass */dv = dtime * force_x / 50.0;/* motion UDFs can be called multiple times and should not causefalse velocity updates */if (time > (time_prev + EPSILON)){v_prev += dv;time_prev = time;}Message("time = %f, x_vel = %f, x_force = %f\n", time, v_prev, force_x); /* set x-component of velocity */vel[0] = v_prev;}Processing math: 100%。