动网格经典集合
- 格式:ppt
- 大小:1.37 MB
- 文档页数:19
题记:在学习使用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翼型俯仰振荡(动网格的应用过程);本例是想对作简谐振荡运动的NACA0012翼型的气动特性(升力系数,阻力系数和力矩系数)进行数值计算,来流速度为V,攻角的变化规律为:Alpha(t)=A/2*sin(omega*t)其中,A=10度,omega=10*pi 弧度/秒。
1、该例需要使用动网格来实现,首先需要编写刚体运动UDF实现翼型的俯仰运动,由于在FLUENT的UDF中只能指定速度,角速度;所以,需要将攻角对时间求导,得到转动角速度的规律:D(alpha)/dt=A*omega/2*cos(omega*t)编写的UDF在附件中。
2、由于本例只是为了讲述动网格的实现,至于其他方面的设置及分析就不再讨论;这里详细讲述下动网格的建立以及动网格的预览的结果。
步骤如下: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的时候,有不少朋友需要使用动网格模型(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)。
图1采用滑移网格
图2采用动网格
滑移网格与动网格都可以计算瞬态运动问题。
但是存在以下区别:
(1)滑移网格需要建立多个域,实际上还是计算区域运动,是一个独立区域内所有网格一起运动,而动网格则是真正意义上的网格运动。
(2)滑移网格不会涉及到网格的变形与重生,但是要设计到交界面设置
(3)滑移网格不会造成负体积,而动网格极易形成负网格
(4)滑移网格是一种简化了的模型,最大计算误差出现在交界面位置
(5)动网格误差常出现在运动壁面位置,因此实际应用中往往将边界层与壁面合在一起运动。
(6)SRF,MRF与MP只能计算稳态,在新版本的FLUENT中应用的是坐标系变换,和滑移网格的设置有所区别。
动网格学习资料汇总为了提高流体传动与控制研究室科研助理对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,因为下表面是由上表面拉伸过去的。
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。
虽然瞬态PROFILE文件可以在一定程度上定义网格运动,然而其存在着一些缺陷。
最主要的一些缺陷存在于以下一些方面:(1)PROFILE无法精确的定义连续的运动。
其使用离散的点值进行插值。
如果想获得较为精确的运动定义,势必要定义很多点。
(2)一些情况下无法使用profile。
比如稳态动网格。
在FLUENT中定义网格运动,更多的是采用UDF宏。
fluent中与动网格有关的UDF宏一共有5个,其中四个用于常规的网格运动定义,一个用于6DOF模型。
这些宏分别为:DEFINE_CG_MOTION、DEFINE_DYNAMIC_ZONE_PROPERTY、DEFINE_GEOM、DEFINE_GRID_MOTION、DEFINE_SDOF_PROPERTIES注意:动网格宏只能为编译型UDF。
1、DEFINE_CG_MOTION最常用的运动网格宏。
用户可以使用该宏定义每一时间步上的线速度或角速度来指定fluent中某一特定区域的运动。
DEFINE_CG_MOTION(name,de,vel,omega,time,dtime)参数说明:name:UDF的名字。
体现在fluent中表现为可选择的函数列表。
Dynamic_Thread *dt:存储了用户所指定的动网格属性和结构指针。
real vel[]:线速度。
vel[0]为x方向速度,vel[1]为y方向速度,vel[2]为z方向速度real omega[]:角速度。
与线速度定义相同。
real time:当前时间。
real dtime:时间步长。
函数返回值为:void从函数的参数类型,配合c语言的参数调用方式可知,vel,omega为数值类型,属于传入类型。
因此只需在函数体中显式定义vel与omega即可将速度传入fluent求解器。
time与dtime是用于定义速度的。
详细实例可参看fluent udf文档p182。
2、DEFINE_DYNAMIC_ZONE_PROPERTY该宏能用于以下一些场合:(1)在in-cylinder应用中定义旋转中心。
动⽹格流沙版完美整理.动⽹格让⽹格动起来(1)—闲谈动⽹格在固体有限元计算中,⽹格运动实⾮什么稀奇事⼉。
⽽且在绝多数固体计算的基本物理量是⽹格的节点位移,所以,固体计算中,⽹格节点运动是对的,没有运动反⽽不正常了。
也可以这么说:正因为计算域内部节点间的相对运动,才导致了内应⼒的产⽣。
流体计算与固体完全不同。
其根源在于它们使⽤的⽹格类型不同。
当前固体有限元计算采⽤的是拉格朗⽇⽹格,⽽流体计算则⼤多数采⽤的欧拉⽹格。
如果说把拉格朗⽇⽹格中的节点点看作是真实世界的物质原⼦的话,那么欧拉⽹格的节点则好⽐是真实世界中的⼀个个传感器,它们总是呆在相同的位置,真实的记录着各⾃位置上的物理量。
正常情况下,欧拉⽹格系统是这样的:计算域和节点保持位置不变,发⽣变化的是物理量,⽹格节点就像⼀个个布置在计算域中的传感器,记录该位置上的物理量。
这其实是由流体⼒学研究⽅法所决定的。
宏观与微观的差异决定了固体⼒学计算采⽤拉格朗⽇⽹格,流体计算采⽤欧拉⽹格。
关于这部分的详细解说,可以参阅任何⼀本计算流体动⼒学书籍。
世界是公平的。
有利必有弊。
朗格朗⽇⽹格适合计算节点位移,然⽽对于过⼤的⽹格变形却难以处理。
欧拉⽹格⽣来可以处理⼤变形(因为节点不动),然⽽对于对于节点运动的处理,则是其直接软肋。
然⽽很不幸的是,现实⽣活中有太多⽹格边界运动的实例。
如汽车发动机中的⽓缸运动、阀门开启与关闭、机翼的运动、飞机投弹等等等等举不胜举。
计算流体动⼒学计算的基本物理量通常为:速度、温度、压⼒、组分。
并不计算⽹格节点位移。
因此要让⽹格产⽣运动,通常给节点施加的物理约束是速度。
CFD中的动⽹格⼤体分为两类:(1)显式规定的⽹格节点速度。
配合瞬态时间,即可很⽅便的得出位移。
当然⼀些求解器(如FLUENT)也⽀持稳态动⽹格,这时候可以直接指定节点位移。
(2)⽹格节点速度是通过求解得到的。
如6DOF模型基本上都属于此类。
⽤户将⼒换算成加速度,然后将其积分成速度。
FLUENT动网格需要的常用宏虽然瞬态PROFILE文件可以在一定程度上定义网格运动,然而其存在着一些缺陷。
最主要的一些缺陷存在于以下一些方面:(1)PROFILE无法精确的定义连续的运动。
其使用离散的点值进行插值。
如果想获得较为精确的运动定义,势必要定义很多点。
(2)一些情况下无法使用profile。
比如稳态动网格。
在FLUENT中定义网格运动,更多的是采用UDF宏。
fluent中与动网格有关的UDF 宏一共有5个,其中四个用于常规的网格运动定义,一个用于6DOF模型。
这些宏分别为:DEFINE_CG_MOTION、DEFINE_DYNAMIC_ZONE_PROPERTY、DEFINE_GEOM、DEFINE_GRID_MOTION、DEFINE_SDOF_PROPERTIES注意:动网格宏只能为编译型UDF。
1、DEFINE_CG_MOTION最常用的运动网格宏。
用户可以使用该宏定义每一时间步上的线速度或角速度来指定fluent中某一特定区域的运动。
DEFINE_CG_MOTION(name,de,vel,omega,time,dtime)参数说明:name:UDF的名字。
体现在fluent中表现为可选择的函数列表。
Dynamic_Thread *dt:存储了用户所指定的动网格属性和结构指针。
real vel[]:线速度。
vel[0]为x方向速度,vel[1]为y方向速度,vel[2]为z 方向速度real omega[]:角速度。
与线速度定义相同。
real time:当前时间。
real dtime:时间步长。
函数返回值为:void从函数的参数类型,配合c语言的参数调用方式可知,vel,omega为数值类型,属于传入类型。
因此只需在函数体中显式定义vel与omega即可将速度传入fluent求解器。
time与dtime是用于定义速度的。
详细实例可参看fluent udf 文档p182。
2、DEFINE_DYNAMIC_ZONE_PROPERTY该宏能用于以下一些场合:(1)在in-cylinder应用中定义旋转中心。
我是这样做动网格的在论坛学习有段时间了,尽管时间不是很长但却有很大的长进,现在是我回报论坛的时候了。
1.建模。
在gambit中,先建立点由点连成线interface,应该有两条线(注意interface线有两条,而且每条线有各自的vertices,建议在此时在EDGE COMMAND->DISCONNECT EDGES下“DISCONNECT”“interface”这条线。
)对面进行剖分设置fluid zone输出msh文件,File->Export->Mesh,注意,由于输出的是二维msh,所以要选中EXPORT 2-D(X-Y)Mesh2.启动fluent,读入msh文件只有unsteady求解器才能用动网格据说用动网格时,operating pressure 应该设置成0在Define->Grid Interfaces中创建interface在Define->Dynamic Mesh->Parameters中选择Layering-〉Constant Height, 并设置Split Factor 和Collapse Factor为0.4在File->Read->Profile 中读入事先编写的profile 文件在Define->Dynamic Mesh->Dynamic Zones 中,Zone Names 选择fluid_bottom ,Type 下选择Rigid Body ,Motion UDF/Profile 下选择oven ,点击create然后在Zone Names 下选择inlet ,Type 下选择Stationary ,在Meshing Options 下,设置Cell Height 为1(因为剖分的时候,网格长度设置为1了),点击create用设置inlet 的办法设置outlet 。
让我们预览一下动网格Solve->Mesh Motion。
COMSOL动网格案例有限元方法是一种基于网格的数值计算方法,其一般流程为:剖分网格是在几何模型的基础上进行的,但是我们在仿真过程中经常会遇到几何模型随着计算过程变化的情况,例如模拟电机转动、固体在流体中运动等,这时候,基于原来网格的方程就不再准确,而需要重新划分网格,即引入动网格的概念。
动网格是相对于传统“静”网格而言,一般仅在有运动物体参与的仿真模型中使用。
引入动网格的概念之后,仿真流程就不再是单独的一条流水线,而变成了循环迭代模型。
动网格使用方法根据重新划分网格的不同,动网格可以分为两种:1用户提前知道运动物体的位移变化过程,从而可以手动指定网格的运动形式。
例如在下面的电动机案例中,中间部分的转子在不停转动,需要进行动网格的设置,但是由于其转速是固定的,因而网格的变换形式我们就可以预先指定。
2用户提前不知道运动物体如何运动,无法预先手动指定网格运动形式,需要软件自动重新绘制网格。
下面的案例模拟了管道中流体流过时,其中一个障碍物的变形情况。
流体从管道的左侧向右流动,在流体压力作用下,原本直立在管道中的障碍物发生变形,向一侧倾斜。
由于我们无法事前了解网格的运动形式,所以也就无法指定网格运动,而交由软件自动划分,下图展示了这种情况下动网格的设置方案。
下面的图展示了网格变形情况。
与电动机的例子不同,我们在管道流动的案例中发现了网格的拉扯现象,即网格实际上没有重新划分,仅仅是网格单元的形状发生了变化,这仅适用于网格进行小范围变化的情形,当变形较大是,网格单元可能会被拉扯为畸形,从而降低计算精度,甚至导致模型不收敛。
我们可以很方便的验证一下,将障碍物的杨氏模量由200kPa改为2kPa,也就是将障碍物变得更软一些。
下面的图展示了此时的网格变形情况,实际上模型还没有算完,计算过程中由于不收敛停止了,我们仅展示了计算得到的部分结果。
可以看到,随着计算的进行,网格畸变比较严重,畸变区域的网格颜色由绿色(质量较好)转变为黄色(质量较差)。