一个动网格的例子
- 格式:pdf
- 大小:1.06 MB
- 文档页数:7
目录实例: Profile 定义运动 (2)I、参数说明 (2)II、操作步骤 (3)一、将计算域离散为网格 (3)二、 Fluent 操作步骤 (4)1. 启动Fluent 14.5 求解器 (4)2. 初始设置 (4)3. 选择湍流模型 (5)4. 设置流体物性 (6)5. 设置边界条件 (7)6. 动网格设置 (8)7. 设置其它选项 (12)在Flue nt中,动网格模型可以用来模拟由于流域边界运动引起流域形状随时间变化的流动情况,动网格在求解过程中计算网格要重构,例如汽车发动机中的气缸运动、阀门的开启与关闭、机翼的运动、飞机投弹等等。
CFD中的动网格大体分为两类:(1)显式规定的网格节点速度。
配合瞬态时间,即可很方便的得出位移。
当然一些求解器(如FLUENT )也支持稳态动网格,这时候可以直接指定节点位移。
(2)网格节点速度是通过求解得到的。
如6DOF模型基本上都属于此类。
用户将力换算成加速度,然后将其积分成速度。
在Flue nt中,动网格涉及的内容包括:(1)运动的定义。
主要是PROFILE文件与UDF中的动网格宏。
(2)网格更新。
FLUENT中关于网格更新方法有三种:网格光顺、动态层、网格重构。
需要详细了解这些网格更新方法的运作机理,每个参数所代表的具体含义及设置方法,每种方法的适用范围。
动网格的最在挑战来自于网格更新后的质量,避免负体积是动网格调试的主要目标。
在避免负网格的同时,努力提高运动更新后的网格质量。
拉格朗日网格(固体有限元计算)网格欧拉网格(流体计算)实例:Profile定义运动I、参数说明本次实例采用的场景来自于流体中高速飞行的物体。
如子弹、火箭、导弹等。
这里只是为了说明profile在动网格运动定义中的应用,因此为了计算方便不考虑高速问题。
问题描述如下图所示:图1 (1为运动刚体,2为计算域)图2计算说明:由于不考虑也没办法考虑刚体的变形,因此在构建面域的时候,将1中的部分通过布尔运算去除。
FLUENT6.1全攻略图10-16 转子定子模型的静压等值线图在显示速度矢量时,同样有绝对速度和相对速度两种形式。
另外需要注意的是,后处理过程不能在交界区中的壁面、内部、周期等类型的边界上建立数据显示面(surface),但是可以在交界面上建立数据显示面,但结果将是单边的,就是只显示交界面一侧的结果。
而且在跨越交接面时,等值线中可能会有细微的不连续。
在画三维填充等值线时,图形中可能会出现一些小缝,但是这些缝只是图形显示问题,与解的连续性无关。
10.6 动网格模型10.6.1 简介动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。
边界的运动形式可以是预先定义的运动,即可以在计算前指定其速度或角速度;也可以是预先未做定义的运动,即边界的运动要由前一步的计算结果决定。
网格的更新过程由FLUENT根据每个迭代步中边界的变化情况自动完成。
在使用移动网格模型时,必须首先定义初始网格、边界运动的方式并指定参予运动的区域。
可以用边界型函数或者UDF定义边界的运动方式。
FLUENT要求将运动的描述定义在网格面或网格区域上。
如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。
那些由于周围区域运动而发生变形的区域必须被组合到各自的初始网格区域中。
不同区域之间的网格不必是正则21FLUENT6.1全攻略22的,可以在模型设置中用FLUENT 软件提供的非正则或者滑动界面功能将各区域连接起来。
10.6.2 动网格守恒方程在任意一个控制体中,广义标量Φ的积分守恒方程为:()∫∫∫∫∂∂+⋅∇=⋅−+V V Φg V VdV S A d ΦΓA d u u ρΦV ρΦd dt d G G G G (10-7) 式中ρ为流体密度,u G 为速度向量,g u G 移动网格的网格速度,Γ为扩散系数,ΦS 为源项,V ∂代表控制体V 的边界。
方程(10-7)中的时间导数项,可以用一阶后向差分格式写成:()()t V V dV dt d nn V ΔΦ−Φ=Φ+∫ρρρ1 (10-8) 式中n 和n+1代表不同的时间层。
动网格模型(Dynamic Mesh )一个简单的例子。
水在通道中流动如图所示,有一个入口(ab),一个出口(cd),一个可移动的挡板(fg),挡板有一定的移动范围(ef,gh)。
本例研究简单动网格的应用,将会涉及到:(1) UDF 函数的读入以及要注意的问题 (2) 动网格参数的设定 (3) 动网格动画的设定一、 利用Gambit 建立计算模型1、 创建各控制点2、 由点连成直线3、 由线段创建面——流域4、 设定边界类型ab--速度入口(inlet );cd--压力出流(outlet ); ef —可变形边界(form1);hg —可变形边界(form2); fg —移动边界(valve ) 5、 输出网格文件二、 利用fluent-2d 进行计算1、 读入mesh 文件File → Read → Case …2、 网格检查(注意最大长度和最小长度)3、 长度单位设定(cm ),并显示网格fg4、设置非定常求解器保持Unstready Formulation 的1st-Order Implict注意:目前动态网格计算只能用first-Order5、选择紊流模型6、材料设置为水7、边界条件:设置速度入口条件8、编译程序(1)读入和编辑udf函数Define→ User-Defined→ Functions→ Compiled…(a)在Source Files下,点击 Add…Select File 面板将会打开,选择valve.c(b)在Compiles UDF 面板下,点击Build注意:将会在FLUENT目录下产生一个缺省libudf文件夹。
如果工作目录下已有这个文件夹,请将删掉。
(c)点击Load注意:如果出现“找不到系统文件之类的提示”,则需要在计算机里装一个c语言的程序。
Valve.c的内容如下:#include <stdio.h>#include "udf.h"DEFINE_CG_MOTION(valve,dt,cg_vel,cg_omega,time,dtime){if(time<=0.5)cg_vel[0]= - 0.2;elsecg_vel[0]=0.0;}这是一个UDF文件,即用户自定义函数,可用来确定阀门的运动规律。
Fluent动网格 - -layering个一个简单实例(作者Snow)Fluent动网格----layering个一个简单实例我这几天看了点动网格技术方面的东西,在学习过程中发现这方面的例子很少,自己也走了一些弯路。
现在还好,弄明白了一些,能够应付现在我的工作。
为了让更多学习者快速了解动网格,我打算尽量把我学习心得在这里和大家分享,这里给出一个layering的一个简单例子。
1.Gambit画网格本例很简单,在Gambit里画一个10*10的矩形,网格间隔为1,也就是有100个网格,具体见下图。
都学动网格的人了,不至于这个不会做!这里需要注意一个问题:设置边界条件的时候,一定要把要移动的边单独设定,本例中一右边界作为移动的边,设成wall就可以,这里再后面需要制定。
2.编写UDF#include \ #include \ #include \#include \ /************************************************************/ real current_time = 0.0 ; Domain * domain ; Thread * thread ;real NV_VEC( origin ),NV_VEC( force ),NV_VEC( moment ) ;/************************************************************/DEFINE_CG_MOTION(throttle,dt,vel,omega,time,dtime) {current_time = CURRENT_TIME ; vel[0] = 30;Message(\ omega=%f\\n\ }上面这段代码就是设置x轴方向的速度为30米每秒(UDF默认是SI单位制)。
vel[0]表示x、vel[1]表示y、vel[2]表示z。
题记:在学习使用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)。
以NACA0012翼型俯仰振荡实例进行讲解动网格的应用过程;首先需要声明的是,这个例子也是来源于网络,原作者不详,在此向他表示感谢。
1、问题描述本例是想对作简谐振荡运动的NACA0012翼型的气动特性(升力系数,阻力系数和力矩系数)进行数值计算,来流速度为V,攻角的变化规律为:Alpha(t)=A/2*sin(omega*t)其中,A=10度,omega=10*pi 弧度/秒。
2、该例需要使用动网格来实现,首先需要编写刚体运动UDF实现翼型的俯仰运动,由于在FLUENT的UDF中只能指定速度,角速度;所以,需要将攻角对时间求导,得到转动角速度的规律:D(alpha)/dt=A*omega/2*cos(omega*t)编写的UDF在附件中。
3、由于本例只是为了讲述动网格的实现,至于其他方面的设置及分析就不再讨论;这里详细讲述下动网格的建立以及动网格的预览的结果。
步骤如下:1)将mesh文件读入到FLUENT中,Grid:check,scale…,Smooth/Swap…;Display Grid;2)定义求解器为,Define:pressure-based,2D,unsteady,Implicit,Green-Gauss Node Based(因本例使用的是三角形单元).3)编译UDF,Define->User-Defined->Functions->Complied…此时打开了Complied UDFs的窗口,Add…在选择UDF的对话框中找到NACA0012DM文件夹中的airfoil.c文件,选中,ok;此时返回到Complied UDFs的窗口点击Build,FLUENT开始进行编译,可以在FLUENT窗口看到编译的一些过程提示;等编译完成,点击Load;就将已经编译好的UDF加载到FLUENT中了。
4)定义动网格参数,Define->Dynamic Mesh(选勾,激活动网格模型)->Parameters…此时打开了Dynamic Mesh Parameters 窗口,在Models中只选取Dynamic Mesh,本例的网格类型为三角形单元,要实现的运动为小幅度的转动,因此选用的动网格更新方法为Smoothing+Remeshing;开始依次对这两种更新方法进行参数设定:Smoothing中的参数设定:Spring Constant Factor(弹簧倔强系数),该值设定为一个较小的值,在0.01到0.1之间,本例选取0.08;Boundary Node Relaxation(边界节点松弛),设定为0.5;Convergence Tolerance(收敛判据),保持默认的0.001;Number of Iterations(迭代次数),保持默认的20;Remeshing中的参数设定:为了得到较好的网格更新,本例在使用局部网格重新划分方法时,使用尺寸函数,也就是Remeshing+Must Improve Skewness+Size Function的策略。
动网格学习资料汇总为了提高流体传动与控制研究室科研助理对FLUENT软件的学习效率,现将有关动网格学习资料进行汇总,资料来源于书籍和网上资源,不能以偏概全,希望科研助理在学习的过程中,多搜集相关资料,作为后续补充,逐渐完善,为以后科研助理的学习提供帮助。
1、动网格简介动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。
边界的运动形式可以是预先定义的运动,即可以在计算前指定其速度或角速度;也可以是预先未做定义的运动,即边界的运动要由前一步的计算结果决定。
网格的更新过程由FLUENT根据每个迭代步中边界的变化情况自动完成。
在使用动网格模型时,必须首先定义初始网格、边界运动的方式并指定参予运动的区域。
可以用边界型函数或者UDF 定义边界的运动方式。
FLUENT 要求将运动的描述定义在网格面或网格区域上。
如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。
那些由于周围区域运动而发生变形的区域必须被组合到各自的初始网格区域中。
不同区域之间的网格不必是正则的,可以在模型设置中用FLUENT软件提供的非正则或者滑动界面功能将各区域连接起来。
注:一般来讲,在Fluent中使用动网格,基本上都要使用到UDF,所以你最好具备一定的C语言编程基础。
2、动网格更新方法动网格计算中网格的动态变化过程可以用三种模型进行计算,即弹簧近似光滑模型(spring-based smoothing)、动态分层模型(dynamic layering)和局部重划模型(local remeshing)。
弹簧近似光滑模型原则上弹簧光顺模型可以用于任何一种网格体系,但是在非四面体网格区域(二维非三角形),最好在满足下列条件时使用弹簧光顺方法:(1)移动为单方向。
(2)移动方向垂直于边界。
如果两个条件不满足,可能使网格畸变率增大。
另外,在系统缺省设置中,只有四面体网格(三维)和三角形网格(二维)可以使用弹簧光顺法,如果想在其他网格类型中激活该模型,需要在dynamic-mesh-menu 下使用文字命令spri ng-on-all-shapes,然后激活该选项即可。
①进行动网格演示时,首先设置为transient;②动网格预览:display zone motion---preview mesh motion;预览之后不保存,重新打开才能恢复原样;③问题:出现负体积:如果有error前有warning,仔细查看;第一章理论基础1.1 网格生成方法比较1)铺层layering计算区域进行扩张和收缩时,网格进行合并或删除;特点:①网格的增加或删除是一层一层进行的;②适用于四边形、六面体和三棱柱网格,不适用于三角形、四面体网格;③常适用于边界线线性运动;2)弹性光顺spring smoothing计算区域进行扩张和收缩时,网格和节点像弹簧一样被拉伸和压缩(接近运动的地方压缩严重);特点:①节点数量和链接关系不发生变化;②如果变形幅度过大,网格会高度扭曲;③适用于三角形、四面体网格,也适用于四边形、六面体和三棱柱网格;3)局部重构local remeshing计算区域进行扩张和收缩时,会自动重构扭曲或尺寸过大的网格,以满足要求;①节点的数量和链接关系会发生变化;②适合大变形、大位移;仅使用与三角形网格和四面体网格;③常和spring smoothing联合使用;1.2 边界运动1.2.1 in-cylinder对于类活塞运动,fluent集成了气缸(in-cylinder)模型;dynamic mesh---option---in cylinder;1)常用参数Crank radius:曲柄半径;connecting rod length:连杆半径;(1)通过设置起始、终止角度、曲柄、连杆半径,调整指定边界运动范围;设置crank angle step size,调整边界运动速度;设置起始、终止角度、piston axis方向,调整边界运动的方向;2)指定运动区域Dynamic mesh zones---creat/edit;Zone name---选择gambit中指定的运动边界;Type---rigid body;Motion attributes---选择piston-full(motion udf/profile)---指定活塞轴方向(piston axis);设置h_ideal(meshing option---cell hight);1.2.2 profile对于预先指定的运动,可用profile来描述;1)define---profile---read;后缀名为prof;1.2.3 六自由度模型对于物体运动和流体作用力耦合的计算问题,可以使用六自由度模型;1.2.4 udf1.3 变形的指定1.3.1 deforming1)边界上的节点,默认情况下是静止的(既不弹性光顺也不局部重构);在smoothing时,如果将边界设置为deforming,则边界上的节点会做类似内部节点的运动和生成;2)deforming的变形形式(1)面板中只能定义cylinder和plane类型的变形;如果边界复杂,则需要用DEFINE_GEOM来定义形状;①cylinder:2d:轴不能是z轴,其实成了一个矩形,定义的边界沿着两条直线变形;(2)对于边界沿直线变化,用layering时不需要定义deforming;但是沿曲线变化则需要用deforming的udf(如扇形网格中的圆弧);3)变形原理第二章铺层2.1 参数设置Hight based:铺层形成的网格在同一层内高度相同;Ratio based:同一层网格高度可能不同,但是不同位置处不同层网格高度比相同(移动边界为斜直线或曲线时常常出现);Split factor:相邻网格的高度为h_ideal,当网格高度h > (1 + split factor) * h_ideal 时,一层网格被分成两层网格;Collapse fator:当网格高度h < collapse factor * h_ideal时,该层网格与相邻网格层合并;2.2 运动形式1)静止stationary2)刚体运动rigid body motion3)变形deforming4)用户自定义user-defined2.3 区域优先级1)运动优先级静止区域:高;面区域:中;单元区域:低;2)以活塞向上运动为例活塞边界(wall_down)为面区域,fluid为单元区域;如果指定wall_down为rigid body,则网格在wall_down运动的地方进行铺层;如果指定fluid(或者interior和其他边界)为rigid body,指定wall_up为stationary,则网格在顶部进行铺层;2.4 边界条件的继承性第三章弹性光顺3.1 参数3.1.1 convergence tolerance(收敛容差)1)收敛容差和迭代步数,默认值在一般情况下都比较适用;2)在迭代过程中,节点当前一次迭代位移与第一次迭代位移之比作为收敛控制参数,当其小于设定的收敛容差时,迭代停止;在一定迭代步内不能达到规定的收敛容差,也需要停止迭代,防止死循环;3.1.2 spring constant factor弹性常数主要控制内部节点相对于运动边界的位移变形;范围0-1;默认为1,此时网格在活塞(运动边界)变形明显,远离活塞变形不明显,网格仅局部变化,插值过程少,但是网格拉伸扭曲大时,也会影响计算精度;为0时,运动边界几乎影响到所有边界,网格全局变化,需要全局插值,影响计算精度;3.1.3 laplace node relaxation节点松弛因子:内部节点位移对变形边界(deforming)节点位移的影响程度;范围0-1;默认1;先在dynamic mesh zones---meshing option---smoothing methord---laplace,然后在smoothing设置该参数才会起作用;为1,内部节点充分影响到变形边界节点运动;为0,不影响,相当于没有设置deforming变形;3.2 smoothing用于其它类型网格Smoothing一般用于三角形和四面体网格,但也可以用于其他类型的网格;设置:mesh method---setting---smoothing---parameters---element---all;第四章局部重构4.1 remeshing基本特点1)当网格的扭曲率或者尺寸超过用户规定范围时,网格被重构;2)适用于三角形和四面体网格,网格节点和数量都发生改变;3)remeshing一般和smoothing结合使用;4)适用于大位移大变形,比如转动和平动结合的运动;4.2 remeshing算法4.2.1 remeshing算法流程1)标记网格参数:Minimum length scale,maxmum length scale,maxmum cell skewness;标记出尺寸超出最小最大范围的网格,以及扭曲率超过给定值的网格;Size remeshing interval:每几个时间步进行一次网格重构;Mesh cell info可以查看当前网格的信息;2)标记的网格被删除形成空穴;3)求解器使用一系列重构方法,进行区域填充;4)将物理量在重构的网格上进行插值;4.2.2 算法1)面网格重构:(1)Region face remeshing:区域面网格重构;一般定义最小网格尺度是平均尺度的0.4倍,最大尺度是平均尺度的1.4倍;(2)local face remeshing:局部面网格重构;完全基于网格的扭曲率;不能重构那些同时属于多个变形区域的面网格;设置:首先mesh moethods---setting---选中local face---设置face skewness;然后dynamic mesh zones---meshing option---remeshing method---勾选local;(3)2.5Dface remeshing:2.5维度面网格重构;见例9,虽然是三维网格,但是重构仅仅涉及一对表面,故为2.5d;设置:Remeshing---2.5d---设置参数即可;对于2.5为cell hight没什么用;4.2.3 remeshing参数1)Size remeshing interval(SRI):通过网格尺寸控制网格重构的频率;每一个时间步,fluent都会根据扭曲率进行标记网格,并决定是否重构:如果扭曲率超标,进行重构;如果扭曲率不超标,且达到SRI的间隔,且最小最大尺寸超标,则也进行重构;网格扭曲率对计算的影响大于网格尺寸;SRI较大时,网格重构主要受扭曲率控制,SRI较小时,网格重构受扭曲率和尺寸共同控制;2)maxmum cell skewness二维:0.6-0.7;三维:0.85;4.3 其它4.3.1 时间步长动网格预览时的时间步长的选取:1)基于网格尺寸和运动速度:Deta_t < min_scale / max_velocity;4.3.2 算法技巧动网格的时间步长要足够小,每一次移动网格应该小于最小网格尺寸的一半;光顺方法的结合可以适当增加时间步长;如果移动幅度已知,最好将区域划分,减少计算;4.4 sizing function尺寸函数4.4.1 说明1)功能:尺寸函数用于控制重构过程中网格的分布,使网格变化更加均匀;尺寸函数在运动边界处约束网格,使其维持在一个较小的尺度,在远离运动边界处,逐步将其增大;运用尺寸函数时,fluent自动标记出网格尺度大于当地尺寸函数值的网格;尺寸函数仅用于网格标识,并不在重构过程中控制网格尺寸;2)fluen重构网格步骤(1)标记扭曲率大于maximum cell skewness的网格;(2)如果time = SRI * deta_t,标记出长度尺度小于minmum scale length和大于maxmum scale length的网格;(3)如果打开了sizing function,标记出不满足当地尺寸函数的网格;(4)对标记网格进行重构;(5)如果打开了smoothing(推荐打开),进行光顺;4.4.2 参数1)resolution:分辨率,控制背景网格的密度;variation:变化量,最大允许网格尺度的量度;Rate:变化率,网格成长率的量度;rate=0,意味着线性增长,rate越大,表明边界处网格生长越慢,内部网格生长越快;2)设置fluent会自动生成variation和rate,默认参数就行;4.4.3 技巧1)以等高线显示尺寸函数分布:初始化流场---输入:/solve/set/expert---keep temporary memory be freed?[no]yes(这一个打开,其它全为no)---graphics and animation---countours---adaption---background size function;4.4.4 原理1)[me]fluent将当前网格边长代入尺寸函数进行计算,如果大于标准值,则标记出来;标准值:由标准网格尺寸代入求解;标准尺寸deta_s:二维,与网格等面积的三角形网格边长;三维,等体积的四面体边长;第五章其它5.1 耦合运动6DOF5.1.1 概念用in-cylinder或者profile定义的运动一般是预知的;而6DOF求解器可以计算运动与流场耦合的运动5.2.2 设置1)原理6DOF是将每一个时间步的速度角速度进行积分得到当前位置和角度的;2)设置首先:在dynamic mesh中勾选6DOF---setting设置重力加速度;然后:rigid body---motion attributes---six DOF option勾中on;第十章网格实例10.1 油缸1)设置底边为rigid body:网格在底边生成和销毁;10.2 箱体移动1)设置fluid和箱体为rigid body,左右边界为stationary:网格在左右边界生成和销毁;10.3 子弹移动设置下面流域和子弹体为rigid body;最左右侧边界设为stationary;网格在左右侧产生和销毁;设置子弹体为rigid body:网格在子弹体左右产生和销毁(不利于计算);10.4 扇形网格扇形网格铺层:定义右下边界为rigid body,用profile文件定义其转动角速度;定义内外圆弧为deforming,用udf中define_geom定义其上节点在圆上进行节点位置更新;①udf:sector.c: DEFINE_GEOM();10.5 油缸弹性Smoothing网格光顺;左右边界设置为deforming;下边界设置为rigid body;10.6 箱体振动Smoothing其他类型网格;Box设置为rigid body;10.7 投弹Remeshing + smoothing;设置边界层为regid body(边界层自动包含弹体边界);之前出现负网格,是因为指定单体边界运动,而周围边界层网格为四边形不能remeshing;①如果用6DOF:弹体和fluid_bondary_layer都设置为rigid body,并且在fulid_bondary_layer打开6DOF时,选中passive;②udf:6DOF_missile_drop.c:DEFINE_SDOF_PROPERTIES()10.8 活塞Remeshing---region face + smoothing;底面设置rigid body,圆柱侧面设置为deforming---cylinder;10.9 2.5D设置内外表面为rigid body;用profil文件定义旋转,方向相反(设置一个转动即可);设置上下表面为deforming---plane,上表面的meshing method中勾选remeshing,下表面的不勾选remeshing,因为下表面是由上表面拉伸过去的。
题记:在学习使用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)。
CAE联盟论坛精品讲座系列FLUENT中被动型动网格问题求解方案:6DOF主讲人:流沙 CAE联盟论坛—总版主利用CFD软件解决动网格问题,通常可分为以下两类:(1)主动型动网格主动型动网格问题通常指的是边界运动规律及运动状态已知,通常可由软件使用者通过函数或程序进行描述。
在程序计算过程中,求解器调用边界运动轨迹描述程序实现边界运动。
这类动网格例子很多,如各类泵、风扇等。
(2)被动型动网格还有一类动网格问题,其边界运动规律往往是未知的,常常需要通过计算边界上的力或力矩,以此来求取边界的运动。
在这类动网格计算设置中,网格变化规律难以预料,导致网格参数经常需要进行多次调整才能达到目的。
这类例子在现实中其实也很多,比如风力发电机的叶轮、水轮机等。
解决主动型动网格问题比较容易,利用CFD软件提供的动网格模拟能力很容易解决。
需要关注的地方是边界运动后,网格节点如何重新布置和生成。
如在FLUENT软件中,其动网格主要包括三种网格功能:弹簧光顺、动态层及网格重构。
利用网格重构功能几乎可以解决所有主动型动网格问题。
那被动型动网格问题怎么处理呢?一般来说,这类边界的运动都是由于内部流体对其压力所造成的,那么就涉及到力和力矩计算的问题。
对于这类问题,在FLUENT软件中可以采用6DOF 模型进行计算。
需要注意的是,以上所有类型动网格计算均建立在边界为刚性的情况下。
即不会计算由于流动产生的力的作用导致的边界变形。
若要计算边界变形,则需要采用流固耦合方法,利用固体求解器计算。
被动型动网格中的力和力矩均是压力对面的积分计算而来。
1、6DOF UDF宏在FLUENT中利用6DOF是需要定义UDF宏的。
该宏的定义形式如下:DEFINE_SDOF_PROPERTIES(name, properties, dt ,time ,dtime)函数中:Name:宏名称Real *properties:存储6DOF属性的数组Dynamic_Thread *dt:存储制定的动网格属性Real time:当前时间Real dtime:时间步长该UDF宏没有返回值。
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%。
题记:在学习使用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)。
一个动网格的例子
BY HOTSON
花了一个下午的时间看了一点关于动网格的培训资料,颇受启发,于是想自己做一个例子,问题描述如下:
一个10cm*10cm 的二维空间,顶部有一个2cm 的开口,其余全部为壁面,其中底下的壁面上下往返运动(见profile 文件),里面充满空气air ,想要模拟出类似于针筒抽吸空气的效果。
模型及其网格如图1所示,网格大小为0.4mm 。
图1 模型以及网格
以下详细描述fluent 中关于动网格的设定
首先,导入网格,当然注意单位的换算啦,按系统默认的m 作为单位,因此进行scale ,如图
2
图2 单位确定 出口 静止壁面
变形壁面 运动壁面
模型(model)以及材料(material)按默认的不做修改。
勾选Dynamic Mesh,以及remeshing,如图3
图3 选择动网格模型
Smoothing和remeshing的设定都先采用默认的值,如图4
图4 动网格策略设定
下面,建立动网格区域(Dynamic mesh zone)
顶面和出口面均设定为静止网格(stationary),在mesh option中,cell height设定为0.0004m(即初始网格的大小,官方教程建议如此设定),如图5所示
A 顶面
B 出口面
图5 静止网格的设定
由于地面上下往复运动时,侧壁是变形的,因此两个侧壁设定为变形区域(deforming),将maximum length scale设定为0.01(当然,你也可以尝试其他值),maximum skewness设定为0.75。
官方教程建议对于三角形网格,remeshing 的最大畸变度设定为0.75。
如图6所示
图6 变形网格的设定
将底面设定为运动壁面,运动类型为刚体运动(Rigid body),同样cell height设
定为0.0004m,其余默认。
这里壁面的运动用profile来定义,如下((ylocation 5 point)
(time 0 0.01 0.02 0.03 0.04)
(y 0 0.0015 0 0.0015 0))
该函数使得壁面在y方向上往复运动,开始位置为0mm,最高位置为1.5mm,运动时间0.04s,往复两次。
需要说明的是,这个profile未必是具有物理意义的,为了节约计算时间,把时间步长设定为0.001s,因此总共需要40个时间步就可以,但是这样误差肯定非常大,结果可能也失去物理意义,但是能达到使网格动起来,得出流动分布就是本文的目的了。
如图7所示,本例建模的时候,运动壁面的重心在0位置上,因此重心位置可以不做修改(当然x方向重心对计算无影响,因此不管了)
图7 运动网格的设定
到此,动网格设定完毕,大家可以根据需要对网格进行预览,注意,将预览的时间步长设定成与实际计算流动时的步长一致。
图8是本文采用的时间步长以及步数,计算结束时间刚好为运动壁面回到原始位置
图8 网格预览
初始化,开始计算,步长设定如图
9
图9 计算设定
大家可以根据需要进行动画设定,这里就不做介绍了。
计算结果:
一下为几个时刻的速度矢量图
注意这里的网格
和最开始导入的
对比下
地面向上运动,
空气被排出0.002s
地面向下运动,
空气被吸入
0.011s
0.018s
0.04s
由以上可以看出,基本能模拟出针筒抽吸空气的过程。
当然要说明的是这个例子
没有特定的物理意义,仅仅用于动网格的测试。