动网格

动网格
动网格

虽然瞬态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应用中定义旋转中心。

(2)定义变化的网格层高度。

第一种用法:

DEFINE_DYNAMIC_ZONE_PROPERTY(name,dt,swirl_center)

参数说明:

name:UDF名。

Dynamic_Thread *t:指向存储动网格属性结构的指针。若没有动态区域位于当前计算的旋转中心,则fluent内部将该参数设置为NULL.

real *swirl_center:swirl_center为一个具有3个元素的数值,表示旋转中心的x,y,z坐标。

返回值为:void。具体实例可参看udf手册p183。

第二种用法:在使用动态层方法时定义变化的网格高度。参数与第一种用法略有不同。

DEFINE_DYNAMIC_ZONE_PEOPERTY(name,dt,height)

参数说明:

name:UDF名

Dynamic_Thread dt:指向存储动网格属性结构的指针

real *height:一个实数指针,指向动态层高度为时间或crank角的函数。

返回值:void

具体实例参看fluent udf手册P185

3、DEFINE_GEOM

用户可以使用此宏定义变化区域的几何。默认情况下,ansys fluent提供了机制用于定义节点沿平面或柱面运动。当ansys fluent更新了变形区域上的节点时(例如通过弹簧光顺或局部面重构之后),会通过调用DEFINE_GEOM宏重新定位节点。请注意该宏只能作为编译型UDF使用。函数说明:

DEFINE_GEOM(name,d,dt,position)

参数说明:

name:UDF名

Domain *d:指向计算域的指针

Dynamic_Thread *dt:指向存储用户指定的动网格参数的指针

real *position:指向存储位置信息的数组。

此函数没有返回值。

详细实例可参阅FLUENT UDF手册P187.

4、DEFINE_GRID_MOTION

默认情况下,ANSYS FLUENT通过使用固体运动方程来更新动态区域的节点位置。这意味着动态区域的节点之间没有相对运动。但是如果用户需要独立的控制每一个节点的运动的话,则可以通过使用DEFINE_GRID_MOTION宏来实现。例如网格运动UDF可以更新由于流固耦合所导致的弯曲形成的节点坐标。此UDF宏只能用于编译型。

函数说明:

DEFINE_GRID_MOTION(name,d,dt,time,dtime)

参数说明:

name:UDF名

Domain *d:计算域指针

Dynamic_Thread *dt:指向存储了动网格参数的结构的指针

real time:当前时间

real dtime:时间步

返回类型:void。具体实例可参阅FLUENT UDF手册P188

6DOF实例1:设置过程

对于被动型动网格计算问题,可以采用6DOF动网格模型解决。利用该模型时,需要确定计算模型中运动部件的质量、三方向转动惯量及惯性矩、重心坐标。因此在几何模型创建过程中,尽量使这些值容易获取(比如将重心位置放置在坐标原点),当然这不是必须的,在CAD建模软件中都包含了这些物理量的查询。

如图1所示的几何体,在受到图中流动方向的流体作用下,若轴向旋转自由度未被约束,则会产生旋转位移。本次实例几何如图1所示。

在建立流体计算域之前,需要利用CAD软件获取几何的特征物理量,我们这里使用Solidworks实现此功能。

1、获取几何属性

利用solidworks载入几何体,进入【评估】>【质量属性】,选择几何体进行计算,如图2所示。

图 2 质量属性

在计算几何质量属性对话框中,可以点击【选项】按钮,设置材料参数,如图3所示。

从图2可以看出,该几何体的重心(0,0,25.19),Z方向惯性矩IZZ=324047.793g*mm^2,由于我们的几何体约束了X,Y,Z三方向移动自由度,X,Y方向的旋转自由度,因此只需要Z方向的惯性矩。需要注意的是,这里的单位是mm,而UDF中必须全部为国际单位制,需要做单位转换。

2、计算域模型

在workbench中的DM中创建计算域模型。主要是利用DM中方便的布尔运算功能。建立的计算域如图4所示。

为计算域边界命名,分别命名内部区域面、入口面、出口面、圆柱面边界为:WallRotation、VelocityInlet、Outlet、wallCylinder。

计算域建立完毕后即进行网格的划分,这里不详细描述。

3、UDF宏的编写

利用文本编辑器编写UDF宏文件。如下:

#include "udf.h"

DEFINE_SDOF_PROPERTIES(rotate,prop,dt,time,dtime)

{

prop[SDOF_MASS] = 845.154E-3;

prop[SDOF_IXX]= 336179E-9;

prop[SDOF_IYY] = 336179E-9;

prop[SDOF_IZZ]= 324047.793E-9;

prop[SDOF_ZERO_TRANS_X]=TRUE;

prop[SDOF_ZERO_TRANS_Y]=TRUE;

prop[SDOF_ZERO_TRANS_Z]=TRUE;

prop[SDOF_ZERO_ROT_X]=TRUE;

prop[SDOF_ZERO_ROT_Y]=TRUE;

printf("\nstage: updated 6dof properties");

}

4、进入FLUENT中设置

在FLUENT中主要包括动网格参数的设置。

其他设置:瞬态计算、标准K-E湍流模型、标准壁面函数、工作介质为water、入口5m/s,出口静压为0。

动网格设置:

(1)、激活sixDOF

Fluent动网格专题讨论

Fluent动网格专题讨论(-) 题记:在学习使用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)移动方向垂直于边界。 如果两个条件不满足,可能使网格畸变率增大。另外,在系统缺省设置中,只有四面体网格(三维)和三角形网格(二维)可以使用弹簧光顺法,如果想在其他网格类型中激活该模型,需要在dynamic-mesh-menu 下使用文字命令spring-on-all-shapes?,然后激活该选项即可。 动态层模型 对于棱柱型网格区域(六面体和或者楔形),可以应用动态层模型。动态层模型的中心思想是根据紧邻运动边界网格层高度的变化,添加或者减少动态层,即在边界发生运动时,如果紧邻边界的网格层高度增大到一定程度,就将其划分为两个网格层;如果网格层高度降低到一定程度,就将紧邻边界的两个网格层合并为一个层: 如果网格层j扩大,单元高度的变化有一临界值:

动网格的入门专题

题记:在学习使用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)移动方向垂直于边界。 如果两个条件不满足,可能使网格畸变率增大。另外,在系统缺省设置中,只有四面体网格(三维)和三角形网格(二维)可以使用弹簧光顺法,如果想在其他网格类型中激活该模型,

FLUENT 动网格教程

FLUENT动网格教程 摘自https://www.360docs.net/doc/8117863279.html,/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语言编程基础。

动网格

FLUENT6.1全攻略 图10-16 转子定子模型的静压等值线图 在显示速度矢量时,同样有绝对速度和相对速度两种形式。另外需要注意的是,后处理过程不能在交界区中的壁面、内部、周期等类型的边界上建立数据显示面(surface),但是可以在交界面上建立数据显示面,但结果将是单边的,就是只显示交界面一侧的结果。而且在跨越交接面时,等值线中可能会有细微的不连续。在画三维填充等值线时,图形中可能会出现一些小缝,但是这些缝只是图形显示问题,与解的连续性无关。 10.6 动网格模型 10.6.1 简介 动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。边界的运动形式可以是预先定义的运动,即可以在计算前指定其速度或角速度;也可以是预先未做定义的运动,即边界的运动要由前一步的计算结果决定。网格的更新过程由FLUENT根据每个迭代步中边界的变化情况自动完成。在使用移动网格模型时,必须首先定义初始网格、边界运动的方式并指定参予运动的区域。可以用边界型函数或者UDF定义边界的运动方式。 FLUENT要求将运动的描述定义在网格面或网格区域上。如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。那些由于周围区域运动而发生变形的区域必须被组合到各自的初始网格区域中。不同区域之间的网格不必是正则 21

FLUENT6.1全攻略 22 的,可以在模型设置中用FLUENT 软件提供的非正则或者滑动界面功能将各区域连接起来。 10.6.2 动网格守恒方程 在任意一个控制体中,广义标量Φ的积分守恒方程为: ()∫∫∫∫??+??=??+V V Φg V V dV 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 n n V ΔΦ?Φ=Φ+∫ρρρ1 (10-8) 式中n 和n+1代表不同的时间层。n+1层上的V n+1由下式计算: t dt dV V V n n Δ+=+1 (10-9) 式中dV/dt 是控制体的时间导数。为了满足网格守恒定律,控制体的时间导数由下式计算: ∫∑??=?=V n j j j g g f A u A d u dt dV G G G G , (10-10) 式中n f 是控制体积的面网格数,j A G 为面j 的面积向量。点乘j j g A u G G ?,由下式计算: t V A u j j j g Δ=?δG G , (10-11) 式中j δV 为控制体积面j 在时间间隔Δt 中扫过的空间体积。 10.6.3 动网格更新方法 动网格计算中网格的动态变化过程可以用三种模型进行计算,即弹簧光滑模型、动态层模型和局部重划模型。

ICEM CFD动网格学习

FLUENT动网格教程 该专题主要包括以下的主要内容: §一、动网格的相关知识介绍; §二、以NACA0012翼型俯仰振荡实例进行讲解动网格的应用过程; §三、与动网格应用有关的参考文献; §四、使用动网格进行计算的一些例子。 §一、动网格的相关知识介绍 有关动网格基础方面的东西,请具体参考FLUENT User’s Guide或FLUENT全攻略的相关章节,这里只给出一些提要性的知识要点。 1、简介 动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。边界的运动形式可以是预先定义的运动,即可以在计算前指定其速度或角速度;也可以是预先未做定义的运动,即边界的运动要由前一步的计算结果决定。网格的更新过程由FLUE NT 根据每个迭代步中边界的变化情况自动完成。在使用动网格模型时,必须首先定义初始网格、边界运动的方式并指定参予运动的区域。可以用边界型函数或者UDF定义边界的运动方式。FLUENT 要求将运动的描述定义在网格面或网格区域上。如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。那些由于周围区域运动而发生变形的区域必须被组合到各自的初始网格区域中。不同区域之间的网格不必是正则的,可以在模型设置中用FLUENT软件提供的非正则或者滑动界面功能将各区域连接起来。 注:一般来讲,在Fluent中使用动网格,基本上都要使用到UDF,所以你最好具备一定的C语言编程基础。 2、动网格更新方法 动网格计算中网格的动态变化过程可以用三种模型进行计算,即 弹簧近似光滑模型(spring-based smoothing)、 动态分层模型(dynamic layering) 局部重划模型(local remeshing)

动网格流沙版完美整理.

动网格 让网格动起来(1)—闲谈动网格 在固体有限元计算中,网格运动实非什么稀奇事儿。而且在绝多数固体计算的基本物理量是网格的节点位移,所以,固体计算中,网格节点运动是对的,没有运动反而不正常了。也可以这么说:正因为计算域内部节点间的相对运动,才导致了内应力的产生。 流体计算与固体完全不同。其根源在于它们使用的网格类型不同。当前固体有限元计算采用的是拉格朗日网格,而流体计算则大多数采用的欧拉网格。如果说把拉格朗日网格中的节点点看作是真实世界的物质原子的话,那么欧拉网格的节点则好比是真实世界中的一个个传感器,它们总是呆在相同的位置,真实的记录着各自位置上的物理量。正常情况下,欧拉网格系统是这样的:计算域和节点保持位置不变,发生变化的是物理量,网格节点就像一个个布置在计算域中的传感器,记录该位置上的物理量。这其实是由流体力学研究方法所决定的。宏观与微观的差异决定了固体力学计算采用拉格朗日网格,流体计算采用欧拉网格。关于这部分的详细解说,可以参阅任何一本计算流体动力学书籍。 世界是公平的。有利必有弊。朗格朗日网格适合计算节点位移,然而对于过大的网格变形却难以处理。欧拉网格生来可以处理大变形(因为节点不动),然而对于对于节点运动的处理,则是其直接软肋。然而很不幸的是,现实生活中有太多网格边界运动的实例。如汽车发动机中的气缸运动、阀门开启与关闭、机翼的运动、飞机投弹等等等等举不胜举。 计算流体动力学计算的基本物理量通常为:速度、温度、压力、组分。并不计算网格节点位移。因此要让网格产生运动,通常给节点施加的物理约束是速度。CFD中的动网格大体分为两类:(1)显式规定的网格节点速度。配合瞬态时间,即可很方便的得出位移。当然一些求解器(如FLUENT)也支持稳态动网格,这时候可以直接指定节点位移。(2)网格节点速度是通过求解得到的。如6DOF模型基本上都属于此类。用户将力换算成加速度,然后将其积分成速度。 对于第一类动网格问题,在fluent中通常可以使用profile与UDF进行网格设置,通过规定节点或区域的速度、角速度或位移等方式来显式确定网格的运动,通常大部分的动网格问题都归于此类。而对于第二类问题,通常涉及到力的计算,力在流体中通常是对压力进行积分而来。将力转换为速度或位移,一般涉及到加速度、转动惯量等物理量的计算。在fluent 中,可以使用6DOF模型进行处理,在CFX中,可以使用刚体模型(13.0以上版本才有)。在FLUENT中,动网格涉及的内容包括: (1)运动的定义。主要是PROFILE文件与UDF中的动网格宏。 (2)网格更新。FLUENT中关于网格更新方法有三种:网格光顺、动态层、网格重构。 需要详细了解这些网格更新方法的运作机理,每个参数所代表的具体含义及设置方法,每种方法的适用范围。 动网格的最在挑战来自于网格更新后的质量,避免负体积是动网格调试的主要目标。在避免负网格的同时,努力提高运动更新后的网格质量。

FLUENT动网格技术简介

FLUENT动网格简介 在固体有限元计算中,网格运动实非什么稀奇事儿。而且在绝多数固体计算的基本物理量是网格的节点位移,所以,固体计算中,网格节点运动是对的,没有运动反而不正常了。也可以这么说:正因为计算域内部节点间的相对运动,才导致了内应力的产生。 流体计算与固体完全不同。其根源在于它们使用的网格类型不同。当前固体有限元计算采用的是拉格朗日网格,而流体计算则大多数采用的欧拉网格。如果说把拉格朗日网格中的节点点看作是真实世界的物质原子的话,那么欧拉网格的节点则好比是真实世界中的一个个传感器,它们总是呆在相同的位置,真实的记录着各自位置上的物理量。正常情况下,欧拉网格系统是这样的:计算域和节点保持位置不变,发生变化的是物理量,网格节点就像一个个布置在计算域中的传感器,记录该位置上的物理量。这其实是由流体力学研究方法所决定的。宏观与微观的差异决定了固体力学计算采用拉格朗日网格,流体计算采用欧拉网格。关于这部分的详细解说,可以参阅任何一本计算流体动力学书籍。 世界是公平的。有利必有弊。朗格朗日网格适合计算节点位移,然而对于过大的网格变形却难以处理。欧拉网格生来可以处理大变形(因为节点不动),然而对于对于节点运动的处理,则是其直接软肋。然而很不幸的是,现实生活中有太多网格边界运动的实例。如汽车发动机中的气缸运动、阀门开启与关闭、机翼的运动、飞机投弹等等等等举不胜举。 计算流体动力学计算的基本物理量通常为:速度、温度、压力、组分。并不计算网格节点位移。因此要让网格产生运动,通常给节点施加的物理约束是速度。CFD中的动网格大体分为两类:(1)显式规定的网格节点速度。配合瞬态时间,即可很方便的得出位移。当然一些求解器(如FLUENT)也支持稳态动网格,这时候可以直接指定节点位移。(2)网格节点速度是通过求解得到的。如6DOF 模型基本上都属于此类。用户将力换算成加速度,然后将其积分成速度。 对于第一类动网格问题,在fluent中通常可以使用profile与UDF进行网格设置,通过规定节点或区域的速度、角速度或位移等方式来显式确定网格的运动,通常大部分的动网格问题都归于此类。而对于第二类问题,通常涉及到力的计算,力在流体中通常是对压力进行积分而来。将力转换为速度或位移,一般涉及到加

Fluent中的动网格

Fluent中的动网格 动网格是目前求解计算域变化问题的常用方法。参考Fluent帮助,可以知道动网格技术与一般流动计算设置的主要区别在于网格更新方法和更新域设置。这里就这两方面问题的一点体会作一简单记录。 一、网格更新方法 弹簧近似光滑法将任意两网格节点之间的连线理想地看成一条弹簧,并通过近似弹簧的压缩或拉伸实现网格和计算域的改变。该方法网格拓扑不变,无需网格的插值处理,对结构化(四边形、六面体)和非结构化(三角形、四面体)网格同样适用。但不适合于大变形情况,当计算区域变形较大时,变形后的网格质量变差,严重影响计算精度。 动态分层法在运动边界相邻处根据运动规律动态增加或减少网格层数,以此来更新变形区域的网格。该方法适用于结构化网格,通过设置适当的分层和缩减系数,更新后的网格依然为较为均匀的结构化网格,对计算精度影响较小。对于运动域具有多自由度和任意变形情况,该方法处理起来非常困难。 网格重生方法在整个网格更新区域内依据设定的最大和最小网格尺寸判断需要进行网格重生的网格,并依据设置的更新频率进行网格重生处理。该方法适用于非结构化网格,能够较好的应用于任意变形的计算区域处理。 二、更新域设置 更新域设置是动网格设置中的一项重要工作,最常用的设置是刚体运动域和变形域,这里针对这两种域的设置注意事项和技巧作一简单介绍。 1、域动网格 一般来讲,设置为刚体运动域的区域一般为壁面类边界,通过设置固壁的运动,模拟计算域内物体的运动。 由于固壁边界有时形状较为复杂,壁面附近网格尺度与周围网格尺度存在较大差别,网格更新时变形较大。在这种情况下,可以设置一个包含固壁运动边界的计算域,通过该计算域的整体运动模拟域内物体的运动,在有的地方将这种方法称为域动网格法。在域动网格法中,需要设置包含运动物体的内部计算域、内部计算域界面均为刚体运动域。如下图所示。

3模型的网格划分解析

3 模型的网格划分 当用户点击Operation工具框中的Mesh命令按钮时,GAMBIT将打开Mesh子工具框。Mesh子工具框包含的命令按钮允许用户对于包括边界层、边、面、体积和组进行网格划分操作。 与每个Mesh子工具框命令设置相关的图标如下。 本章以下部分将详细说明与上面列举的每个命令按钮相关的命令。 3.1 边界层 3.1.1 概述 边界层确定在与边和/或者面紧邻的区域的网格节点的步长。它们用于初步控制网格密度从而控制相交区域计算模型中有效信息的数量。 示例 作为边界层应用的一个示例,考虑包括一个代表流体流过管内的圆柱的计算模型。在正常环境下,很可能在紧靠管道壁面的区域内流体速度梯度很大,而靠近管路中心很小。通

过对壁面加入一个边界层,用户可以增大靠近壁面区域的网格密度并减小靠近圆柱中心的网格密度——从而获得表征两个区域的足够的信息而不过分的增大模型中网格节点的总数。 一般参数 要确定一个边界层,用户必须设定以下信息: ?边界层附着的边或者面 ?确定边界层方向的面或者体积 ?第一列网格单元的高度 ?确定接下来每一列单元高度的扩大因子 ?确定边界层厚度的总列数 用户还可以设定生成过渡边界层——也就是说,边界层的网格节点类型随着每个后续层而变化。如果用户设定了这样一个边界层,用户必须同时设定以下信息: ?边界层过渡类型 ?过度的列数 3.1.2 边界层命令

生成边界层 Create Boundary Layer命令允许用户在一条边或者一个面附近定义网格节点步长。 要生成一个边界层,用户必须设定以下参数: ?定义 ?过渡特性 ?附着实体和方向 设定边界层定义 要定一边界层,用户必须设定两类特征: ?尺寸 ?内部连续性 ?角形状 尺寸特征包括诸如边界层列数以及第一列高度等因数。内部连续性特征确定边界层重叠在相邻边界层印记上的印记行为。角形状特征确定网格在连接边界层与附着边的Corner 或者Reversal点周围区域的网格形状。 设定尺寸特征 要设定边界层的尺寸特征,用户必须设定以下四个参数中的三个: ?第一列高度 ?增长因子 ?列数 ?总高度 上面列举的前三个参数定义如下(如图3-1): ?第一列高度(a)设定边界层附着的边或者面与网格节点第一个完整列之间的距离。 ?增长因子提供一个比例 b/a 其中b是第一和第二个完整列之间的距离,a是第一列高度。边界层中任意两列之间的距离等于前面两列之间的距离乘以增长因数。 ?列数(n)设定边界层中完整列的总数。 所有三个参数都影响边界层的总厚度(D)。

基于三维网格模型的网格排布优化技术综述

科学与财富 0引言 近年来,随着计算机图形软硬件技术的提高及人们对绘制效果的要求越来越高,计算机图形学研究和应用呈现出场景对象越加复杂,对绘制真实感的要求越来越高,显示分辨率不断递增,模型趋于复杂化,数据精度要求较高等问题。基于此提出了提高绘制性能的主要途径:GPU加速技术,并行绘制技术,可见性剔除技术,网格简化技术,多分辨率绘制技术,存储访问优化技术,基于图像的绘制技术,图像和网格压缩技术,基于预计算的绘制技术等。 对于计算机硬件性能的不断提高,存储访问带宽与计算能力的差距越来越大,因此缓存访问效率成为影响应用程序运行效率的关键因素。而要改善缓存的性能有以下几种方法:①降低缓存访问失配率;②降低失配损失;③通过并行技术降低失配率或是失配损失;④减少命中缓存的时间。降低缓存访问失配率,可以从提高缓存硬件性能与编译优化等方面来解决,其原理是:通过调整指令顺序和数据的使用顺序,增强代码和数据使用的时间局部性和空间局部性特征,从而提高缓存命中率。体系结构方面,通过缓存硬件性能来提高缓存访问效率。应用程序方面,采用编译优化不需要修改或者增加硬件,可分为计算重排和数据重排。 计算重排,根据重新排列指令顺序,提高访问相同数据单元指令的局部性,通常由编译器对应用程序编译后的指令序列进行重排来完成,对于指令,重新组织程序而不影响程序的正确性。数据重排,根据指令对数据单元的访问方式求解出缓存连贯的数据排布,由应用程序直接对数据进行重排来完成,通过优化改善了数据的空间局部性和时间局部性[1]。目前网格排布优化技术是计算机图形学与可视化领域的重点研究方向之一,该技术基于数据重排,通过对网格图元的存储顺序进行重新排序,能够减少平均缓存访问失配率,提高大型三维网格模型和大规模虚拟场景的处理和绘制性能。 2网格排布优化技术 顶点缓存的访问性能通常用平均缓存失配率(ACMR)来衡量,定义为绘制每个三角形的平均缓存失配次数,即缓存的总失配次数与总访问次数之比,ACMR的取值范围为[0.5,3.0],因为每个顶点至少失配一次,至多失配三次。需要注意的是,ACMR无法达到最小值,主要是因为顶点缓存区容量的限制。若顶点缓存区可以装下所有顶点,则以任何方式组织的三角形都可以使ACMR接近于0.5。但是缓存容量很小,很难装下所有的顶点,并且网格的形状也会导致ACMR额外的开销。 2.2.1网格排布优化方法的分类 网格排布优化技术是图排布理论的应用与引伸,根据不同的划分方式可以将网格排布优化技术分成不同的类。根据求解技术手段的不同,网格排布优化技术可分为基于优化策略、基于空间填充曲线和基于谱序列三类[1],现代的GPU使用一个小的缓冲区来存储最近需要访问的顶点,为了最大化的利用好顶点缓存用于快速渲染的优点,对三角形进行重排序是必要的,基于优化策略即使用了这一优点。基于空间填充曲线是对二维或者三维规则网格单元的一种具有较好空间局部性的特殊线性遍历方法,是在某种程度上保留局部相关性的多维网格单元遍历。基于谱序列方法是通过特定的线性算子推导出相关的特征性、特征向量以及特征空间投影,并利用这些特征量和组合求解出问题。因为谱序列是求解图排布问题的一个有效引导策略,所以也可以应用到网格排布技术中。 根据网格描述方式的不同,可分为基于三角形、基于三角形条带、基于三角形扇[3],或者简单分为基于条带和基于非条带两种方式,每种描述方式又可分为索引形式和三角形汤形式。三角形扇和三角形条带类似,但是不如三角形条带灵活,所以很少使用。索引形式只需少量数据,传输代价小,使之成为目前使用最为普遍的方式,但顶点随机读取也带来了ACMR的增加。因此许多研究者提出对网格图元的存储顺序进行重新排布,可以减小 ACMR,降低顶点处理的运算量,提高渲染速度。 2.2.2三角形排布优化算法的介绍 为提高网格模型的处理和绘制性能,现代图形卡使用顶点缓冲器来提高顶点缓存命中率,使模型在绘制过程中减少发送的顶点数据。有效利用顶点缓冲器,在已有的图形绘制流水线基础上,通过重新排列网格模型图元的线性序列,增加缓存中顶点的命中率。下面对国内外几种常见的相关算法做一个简要的介绍。 Hoppe(Hoppe.1999)提出了一种贪心条带算法生成三角形序列[4],该算法是基于优化策略和三角形条带的研究,核心思想是沿着逆时针方向生成条带,进行三角形条带合并,在合并的过程中不断检测预期的ACMR。此算法针对一个预先指定的缓存大小,比如16,对算法进行优化求解,使用FI-FO策略对三角形进行重排,采用了三角形条带索引模式。Hoppe算法可以得到很低的平均缓存失配率,其运算时间复杂度高于O(m),该算法也存在一些待解决的问题,在网格的顶点索引中很难确定三角形的拓扑方向,对可能合并入条带的三角形进行ACMR的预估会增加算法的复杂度。Bogomjakov等人(2002)提出的面向具有任意大小的FIFO缓存的通用序列构造算法(称为BoG算法)[5],是一种最具代表性的空间填充曲线。该算法把Hilbert空间填充曲线和MLA空间填充曲线的应用推广到不规则三角网格,使用图划分软件包Metis将网格分成多个三角形簇,保证每个簇内三角形序列的ACMR最优,从而形成整个网格的ACMR最优化。该算法在相同缓存参数前提下,AMCR指比Hoppe算法增大20%左右,分割的切割边上的失配率对整体失配率有影响。 Lin等人(Lin and Thomas.2006)算法则是基于贪心优化策略的3D渲染多边形网格序列生成算法[6],该算法适用于非条带三角形的排布优化,可以应用于渐进网格,应用启发式条件对网格顶点进行全局搜索,同样可以得到很低的平均缓存失配率,其运算时间复杂度也高于O(m)。核心思想是赋予每个顶点一个缓存访问代价度量,选择代价度量最小的顶点作为当前输出顶点,找到与该顶点邻接的所有未输出三角形,按顺时针方向访问并逐一将这些三角形的顶点压入缓存中,最后以三角形环为单位逐一输出三角形,并在整个网格中对下一个需要输出的三角形环进行全局最优性搜索。Nehab等人(Nehab et al.2006)提出了一种多功能三角形序列重排算法[7],该算法不仅能减少顶点缓存的平均缓存失配率,而且能减少图元的重绘率(通过深度测试的片元总数与最终可见的像素总数之比),作者首先提出通过局部优化减少顶点处理时间,同时通过三角形序列重排减少像素处理时间是自相矛盾的,原因是基于视点的深度排序会毁掉顶点缓存性能,且局部优化会导致当前视点下的高度透支。基于此提出了基于优化策略的多功能三角形序列重排算法,实现两者之间的融合。 Sander等人(Sander et al.2009)对Lin等人算法进行了改进,使三角形排布适用于动态模型[8]。其核心思想是以顶点在缓存中的位置作为代价度量,选出代价度量最小的顶点作为当前顶点,即以三角形环作为计算单位,然后输出与该顶点邻接的所有未输出三角形(随机访问),与Lin等人算法 基于三维网格模型的网格排布优化技术综述 娄自婷 (云南师范大学信息学院,云南昆明650500) 摘要:网格排布优化技术通过对网格图元的存储顺序进行重新排序,能够减少平均缓存访问失配率,提高大型三维网格模型和大规模虚拟场景的处理和绘制性能。文中综述了网格排布优化技术的研究进展,分析比较了基于优化策略、基于空间填充曲线和基于谱序列的网格排布优化方法。 关键词:三维网格模型,网格排布优化;ACMR A Survey of mesh layout optimization for3D mesh models LOU Ziting (College of computer science and information technology,Yunnan Normal University,Kunming City Yunnan Province650500,China) Abstract:The mesh layout technology through storage order of the mesh primitive reorder,can reduce the average cache miss rate and improve the process-ing and rendering performance of large3D mesh models and large-scale virtual scene.This paper gives an introduction to advances in technology mesh layout optimization.We analyze and compare the mesh layout optimization method based optimization strategy,space-filling curve and spectral sequences. Keywords:3D mesh models,Mesh layout optimization;ACMR 科学论坛 536

一个动网格的例子

一个动网格的例子 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设

动网格相关知识--1

https://www.360docs.net/doc/8117863279.html,/dvbbs/dispbbs.asp?boardid=61&Id=1396 题记:在学习使用Fluent的时候,有不少朋友需要使用动网格模型(Dynamic Mesh M odel),因此,本版推出这个专题,进行大讨论,使大家在使用动网格时尽量少走弯路,更快更好地掌握;也欢迎使用过的版友积极参与讨论指导,谢谢! 该专题主要包括以下的主要内容: §一、动网格的相关知识介绍; §二、以NACA0012翼型俯仰振荡实例进行讲解动网格的应用过程; §三、与动网格应用有关的参考文献; §四、使用动网格进行计算的一些例子。 §一、动网格的相关知识介绍 有关动网格基础方面的东西,请具体参考FLUENT User’s Guide或FLUENT全攻略的相关章节,这里只给出一些提要性的知识要点。 1、简介 动网格模型可以用来模拟流场形状由于边界运动而随时间改变的问题。边界的运动形式可以是预先定义的运动,即可以在计算前指定其速度或角速度;也可以是预先未做定义的运动,即边界的运动要由前一步的计算结果决定。网格的更新过程由FLUENT 根据每个迭代步中边界的变化情况自动完成。在使用动网格模型时,必须首先定义初始网格、边界运动的方式并指定参予运动的区域。可以用边界型函数或者UDF 定义边界的运动方式。FLUENT 要求将运动的描述定义在网格面或网格区域上。如果流场中包含运动与不运动两种区域,则需要将它们组合在初始网格中以对它们进行识别。那些由于周围区域运动而发生变形的区域必须被组合到各自的初始网格区域中。不同区域之间的网格不必是正则的,可以在模型设置中用FLUENT软件提供的非正则或者滑动界面功能将各区域连接起来。 注:一般来讲,在Fluent中使用动网格,基本上都要使用到UDF,所以你最好具备一定的C语言编程基础。 2、动网格更新方法 动网格计算中网格的动态变化过程可以用三种模型进行计算,即弹簧近似光滑模型(spr ing-based smoothing)、动态分层模型(dynamic layering)和局部重划模型(local reme shing)。 弹簧近似光滑模型 原则上弹簧光顺模型可以用于任何一种网格体系,但是在非四面体网格区域(二维非三

网格模型

Direct3D中使用网格模型 Complicated geometry is usually modeled using 3-D modeling software and saved to a file. An example of this is the .x file format. Microsoft? Direct3D? uses meshes to load the objects from these files. Meshes are somewhat complicated, but Microsoft? Direct3DX contains functions that make using meshes easier. The Meshes sample project introduces the topic of meshes and shows how to load, render, and unload a mesh. 复杂的几何模型通常是由3D建模软体创建并保存到文件中。例如.x文件就是这样的一种格式,Microsoft Direct3D使用的网格模型都是载入这些文件中的对象。即使模型有些复杂,但在Microsoft Direct3D中包含的函式建立使用它是非常容易,本例子就是介绍网格模型如何从载入渲染得到我们所需的效果,并且如何对其进行释放。 This tutorial shows how to load, render, and unload a mesh using the following steps. 这个指南展示如何载入、渲染、并释放一个网格模型所需要的步骤: Step 1: Loading a Mesh Object 第一步:载入一个网格模型对象 A Microsoft? Direct3D? application must first load a mesh before using it. The Meshes sample project loads the tiger mesh by calling InitGeometry, an application-defined function, after loading the required Direct3D objects. 一个Microsoft Direct3D的应用程式在使用网格模型对象之前必须进行初始化,本例中,调用InitGeometry函式用于载入一个老虎的网格模型,这是一个应用程式定义的函式,在载入必要的Direct3D对象(系统初始化)后调用。 A mesh needs a material buffer that will store all the materials and textures that will be used. The function starts by declaring a material buffer as shown in the following code fragment. 一个网格模型需要材质缓冲,将存储要使用的材质以及纹理。函式开始先声明一个材质缓冲如同以下的代码片段: LPD3DXBUFFER pD3DXMtrlBuffer; The following code fragment uses the D3DXLoadMeshFromX method to load the mesh. 下面这部分使用D3DXLoadMeshFromX的方法来载入网格模型。 // Load the mesh from the specified file. if( FAILED( D3DXLoadMeshFromX( "tiger.x", D3DXMESH_SYSTEMMEM,

Fluent动网格----layering个一个简单实例(作者Snow)

Fluent动网格----layering个一个简单实例我这几天看了点动网格技术方面的东西,在学习过程中发现这方面的例子很少,自己也走了一些弯路。现在还好,弄明白了一些,能够应付现在我的工作。为了让更多学习者快速了解动网格,我打算尽量把我学习心得在这里和大家分享,这里给出一个layering的一个简单例子。 1.Gambit画网格 本例很简单,在Gambit里画一个10*10的矩形,网格间隔为1,也就是有100个网格,具体见下图。都学动网格的人了,不至于这个不会做! 这里需要注意一个问题:设置边界条件的时候,一定要把要移动的边单独设定,本例中一右边界作为移动的边,设成wall就可以,这里再后面需要制定。 2.编写UDF #include "udf.h" #include "unsteady.h" #include "stdio.h" #include "stdlib.h" /************************************************************/ 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("time=%f omega=%f\n",current_time) ; }

fluent 动网格

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.5之间,本例将其设置为0.3;Size Function Rate(尺寸函数变化率),保持默认的0.3。 动网格(dynamic mesh)是CFD中专有的概念。由于当前流体计算多采用欧拉坐标系,该坐标系区别于拉格朗日坐标系的一个最直观特点是:计算过程中网格保持静止。因此,在CFD计算中应用动网格,具有其特别的难处。 1、动网格控制方式 最主要的困难在于边界运动后的网格质量控制。由于边界的运动,不可避免的导致网格变形。我们知道,求解器对于网格质量的容忍是有限度的。当网格扭曲过大引起网格质量的急剧下降,可能导致计算发散、形成负网格,进而终止计算。因此,在边界运动过程中,对网格质量进行控制尤为重要。在fluent软件中动网格主要有三种控制方式:smoothing,layering,remeshing。其中layering主要应用与四边形网格及六面体网格,remeshing主要应用于三角形网格及四面体网格等费结构网格中,至于smoothing方法则在各类网格中均可应用。 layering方法应用于结构网格也是有条件限制的:边界运动最好是沿着某单一方向。如若是旋转,最好还是采用非结构网格配合remeshing方式。 非结构网格是最适合应用动网格模型的,但是网格质量不好控制,通常需要仔细调节。结构网格采用layering 方法,能够很好的控制网格质量,但是几何适应性差。具体采用何种网格类型以及何种控制方式,还是要

相关文档
最新文档