搜档网
当前位置:搜档网 › 【Unity】Mesh网格编程(三)万能网格几何形体

【Unity】Mesh网格编程(三)万能网格几何形体

【Unity】Mesh网格编程(三)万能网格几何形体
【Unity】Mesh网格编程(三)万能网格几何形体

【Unity】Mesh网格编程(三)万能网格几何形体

用一个通用代码,实现各种锥、柱、管状体的网格创建。

非原创的同系列。虽然总觉得代码上可以再优化,但是实现的功能已经超级屌了。真是没有不能做的,只有想不到的。

本文分享自蓝鸥科技杜老师。

具体思路:

通过Mesh网格编程实现几何体的多种变化。以立体五角星为例,大边长和小边长分别设置长度为5的数组,数组控制几何体顶层空心,顶层大小,中间层大小,底层大小,底层空心。通过循环构建上层与下层之间的网格。

实现代码:

[csharp]view plaincopy

https://www.sodocs.net/doc/1e9178314.html,ing UnityEngine;

https://www.sodocs.net/doc/1e9178314.html,ing System.Collections;

3.

4.public class Star3 : MonoBehaviour {

5.

6. Mesh mesh;

7.

8.public bool sophisticated = false; //圆滑曲面

9.public bool star = true; //星形

10.public int line = 5; //边数

11.public float[] maxsize = {0,0,5,0,0}; //外角大小

12.public float[] minSize = {0,0,1,0,0}; //内角大小

13.public float high = 1; //高度

14.public float low = -1; //低度

15.

16.private Vector3[] vs; //顶点坐标

17.private int[] ts; //顶点序列

18.private Vector2[] newUVs; //UV贴图

19.private Vector3[] newNormals; //法线

20.

21.// Update is called once per frame

22.void Update () {

23.//变量约束

24. line = Mathf.Clamp (line, 2, 300);

25. high = Mathf.Clamp (high, low, high);

26. low = Mathf.Clamp (low, low, high);

27.if (!star) {

28.for (int i = 0; i < 5; i++) {

29. minSize[i] = Mathf.Cos(Mathf.PI / line) * maxsize[i];

30. }

31. }

32.for (int i = 1; i < 4; i++) {

33. maxsize[i] = Mathf.Clamp (maxsize[i], 0, maxsize[i]);

34. minSize[i] = Mathf.Clamp (minSize[i], 0, maxsize[i]);

35. }

36. maxsize[0] = Mathf.Clamp (maxsize[0], 0, maxsize[1]);

37. minSize[0] = Mathf.Clamp (minSize[0], 0, minSize[1]);

38. maxsize[4] = Mathf.Clamp (maxsize[4], 0, maxsize[3]);

39. minSize[4] = Mathf.Clamp (minSize[4], 0, minSize[3]);

40.//角度计算

41.float corner = 2 * Mathf.PI / line;

42.//确定顶点数量

43.int temp = 5 * 4 * 3 * line;

44.

45. vs = new Vector3[temp];

46. ts = new int[temp];

47. newUVs = new Vector2[temp];

48. newNormals = new Vector3[temp];

49.

50.int count = 0;

51.float h = 0;

52.float l = 0;

53.for (int i = 0; i < 5; i++) {

54.switch (i) {

55.case 0:

56. h = high;

57. l = high;

58.break;

59.case 1:

60. h = high;

61. l = 0;

62.break;

63.case 2:

64. h = 0;

65. l = low;

66.break;

67.case 3:

68. h = low;

69. l = low;

70.break;

71.case 4:

72. h = low;

73. l = high;

74.break;

75. }

76.for (int k = 0; k < line; k++) {

77.//确定顶点坐标

78. vs[count] = new Vector3(Mathf.Sin(k * corner) * maxsize[i],M

athf.Cos(k * corner) * maxsize[i],h);

79. vs[count + 1] = new Vector3(Mathf.Sin((k + 0.5f) * corner) *

minSize[(i + 1) % 5],Mathf.Cos((k + 0.5f) * corner) * minSize[(i + 1) % 5], l);

80. vs[count + 2] = new Vector3(Mathf.Sin(k * corner) * maxsize[

(i + 1) % 5],Mathf.Cos(k * corner) * maxsize[(i + 1) % 5],l);

81.

82. vs[count + 3] = new Vector3(Mathf.Sin(k * corner) * maxsize[

i],Mathf.Cos(k * corner) * maxsize[i],h);

83. vs[count + 4] = new Vector3(Mathf.Sin((k + 0.5f) * corner) *

minSize[i],Mathf.Cos((k + 0.5f) * corner) * minSize[i],h);

84. vs[count + 5] = new Vector3(Mathf.Sin((k + 0.5f) * corner) *

minSize[(i + 1) % 5],Mathf.Cos((k + 0.5f) * corner) * minSize[(i + 1) % 5], l);

85.

86. vs[count + 6] = new Vector3(Mathf.Sin(k * corner) * maxsize[

i],Mathf.Cos(k * corner) * maxsize[i],h);

87. vs[count + 7] = new Vector3(Mathf.Sin(k * corner) * maxsize[

(i + 1) % 5],Mathf.Cos(k * corner) * maxsize[(i + 1) % 5],l);

88. vs[count + 8] = new Vector3(Mathf.Sin((k - 0.5f) * corner) *

minSize[(i + 1) % 5],Mathf.Cos((k - 0.5f) * corner) * minSize[(i + 1) % 5], l);

89.

90. vs[count + 9] = new Vector3(Mathf.Sin(k * corner) * maxsize[

i],Mathf.Cos(k * corner) * maxsize[i],h);

91. vs[count + 10] = new Vector3(Mathf.Sin((k - 0.5f) * corner)

* minSize[(i + 1) % 5],Mathf.Cos((k - 0.5f) * corner) * minSize[(i + 1) % 5] ,l);

92. vs[count + 11] = new Vector3(Mathf.Sin((k - 0.5f) * corner)

* minSize[i],Mathf.Cos((k - 0.5f) * corner) * minSize[i],h);

93.//确定法线

94.if (sophisticated) {

95. newNormals[count] = Vector3.Normalize(vs[count] - new Ve

ctor3(0,0,h));

96. newNormals[count + 1] = Vector3.Normalize(vs[count + 1]

- new Vector3(0,0,l));

97. newNormals[count + 2] = Vector3.Normalize(vs[count + 2]

- new Vector3(0,0,l));

98. newNormals[count + 3] = Vector3.Normalize(vs[count + 3]

- new Vector3(0,0,h));

99. newNormals[count + 4] = Vector3.Normalize(vs[count + 4]

- new Vector3(0,0,h));

100. newNormals[count + 5] = Vector3.Normalize(vs[count + 5] - new Vector3(0,0,l));

101. newNormals[count + 6] = Vector3.Normalize(vs[count + 6] - new Vector3(0,0,h));

102. newNormals[count + 7] = Vector3.Normalize(vs[count + 7] - new Vector3(0,0,l));

103. newNormals[count + 8] = Vector3.Normalize(vs[count + 8] - new Vector3(0,0,l));

104. newNormals[count + 9] = Vector3.Normalize(vs[count + 9] - new Vector3(0,0,h));

105. newNormals[count + 10] = Vector3.Normalize(vs[count + 1 0] - new Vector3(0,0,l));

106. newNormals[count + 11] = Vector3.Normalize(vs[count + 1 1] - new Vector3(0,0,h));

107. } else {

108.for (int j = 0; j < 4; j++) {

109. Vector3 newNormal = Vector3.Cross(vs[count + 3 * j + 1] - vs[count + 3 * j + 0],vs[count + 3 * j + 2] - vs[count + 3 * j + 0]);

110.for (int z = 0; z < 3; z++) {

111. newNormals[count + 3 * j + z] = Vector3.Normali ze(newNormal);

112. }

113. }

114. }

115.

116. count += 12;

117. }

118. }

119.//确定顶点序列

120.for (int i = 0; i < ts.Length; i++) {

121. ts[i] = i;

122. }

123.//创建网格

124. mesh = new Mesh();

125. GetComponent().mesh = mesh;

126. mesh.vertices = vs;

127. mesh.uv = newUVs;

128. mesh.triangles = ts;

129. mesh.normals = newNormals;

130.

131. }

132.}

本文转自蓝鸥Unity3D培训。

icem-cfd 四面体网格模块tetra介绍

ICEM CFD四面体网格模块Tetra介绍

概述 T t z Tetra方法 z几何图形所要求的必备条件z Tetra处理综述 z示例实践 z ICEM CFD Prism介绍

Tetra方法,or... What the Heck is an Octree? ...at t e ec s a Oct ee? 网格尺寸信息已经在几何图形中规定了 z z潜在的网格填满限制框 z细分网格使其与几何图形一致 , ?divided in half in three dimensions , hence Octree z Cutter程序确定边界表面单元 z表面网格是体网格的结果 z光滑功能实现较好的单元质量

所有程序综述 z创建或读入几何图形 z将实体分配到几何图形数据库 z定义网格全局尺寸和在所选实体上的尺寸z产生网格 提高网格质量(光滑等) z提高网格质量(光滑,等) z输出到分析软件

Tetra的几何图形 z需要封闭的曲面模型 ?将曲面显示为实体 ?查找丢失的表面 ?查找洞或缺口 ?Tetra允许有较小的缺口(与当地单元尺寸比较)z关键特征处的点和曲线 z用材料点定义体 Missing inlet surface Missing inlet surface

点和曲线的使用 在尖角处包括点 z z包括曲线以限制节点能够放在关键特征处?在表面交叉处 ?at ‘kinks’ in surfaces z在曲面交接比较光滑处不要包括曲线 z NOTE: failing to include points and curves will result in mesh which is ‘chamfered’ at corners

Hypermesh四面体网格划分

Hypermesh四面体网格划分 Hypermesh四面体网格划分 1.长按ctrl键后,左键,旋转,,中间键,缩放,,右键,移动, 放大后的图像按F字母键可以恢复原来的大小。 2.Entity:实体 3.实体划分网格后删除网格 4.Volume tetra: Tetra mesh:四面体网格 Volume tetra:直接四面体网格划分 Use Curvature:运用曲率,在有曲率的地方细化网格 Use proximity:在尺寸小的地方细化网格

5.Tetra mesh:四面体网格 先生成表面的网格,再由表面的网格扩展成体网格查看生成的表面网格, 按“F5键”出现以下界面 Shift+左键,选中一部分,选中的部分变白 按“mask”键,出现下图,

按“unmask all”恢复。 6.shift+F5: 7.F10键,检查窗口 Warpage:翘曲 aspect:长宽比 skew:扭曲 tet collapse,塌陷 Vol skew:空间扭曲 Min angle:最小角 Max angle:最大角 8.塌陷部分重新划分,即有缺陷的网格部分,,

F10---save failed,然后切换到F5键---elems,单元,---retrieve ,调出保存的图形,---reverse,选中合格的单元,---mask,隐藏,只剩下有缺陷的单元 Tool---find,工具框,---find attached---选中一部分---find键 3D---tetra remesh---elems,displayed,---remesh 9.快速网格划分,需自己设置参数,,

workbench网格划分的_很实用的讲解

ANSYS WORKBENCH中提供了对于网格划分的几种方法,为了便于说明问题,我们首先创建一个简单的模型,然后分别使用几种网格划分方法对之划分网格,从而考察各种划分方法的特点。 1. 创建一个网格划分系统。 2. 创建一个变截面轴。 先把一个直径为20mm的圆拉伸30mm成为一个圆柱体 再以上述圆柱体的右端面为基础,创建一个直径为26mm的圆,拉伸30mm得到第二个圆柱体。对小圆柱的端面倒角2mm。 退出DM. 3.进入网格划分程序,并设定网格划分方法。 双击mesh进入到网格划分程序。 下面分别考察各种网格划分方法的特点。 (1)用扫掠网格划分。 对整个构件使用sweep方式划分网格。 结果失败。 该方法只能针对规则的形体(只有单一的源面和目标面)进行网格划分。 (2)使用多域扫掠型网格划分。 结果如下 可见ANSYS把该构件自动分成了多个规则区域,而对每一个区域使用扫略网格划分,得到了很规则的六面体网格。这是最合适的网格划分方法。 (3)使用四面体网格划分方法。

使用四面体网格划分,且使用patch conforming算法。 可见,该方式得到的网格都是四面体网格。且在倒角处网格比较细密。 其内部单元如下图(这里剖开了一个截面) 使用四面体网格划分,但是使用patch independent算法。忽略细节。 、 网格划分结果如下图 此时得到的仍旧是四面体网格,但是倒角处并没有特别处理。 (4)使用自动网格划分方法。 得到的结果如下图 该方法实际上是在四面体网格和扫掠网格之间自动切换。当能够扫掠时,就用扫掠网格划分;当不能用扫掠网格划分时,就用四面体。这里不能用扫掠网格,所以使用了四面体网格。(5)使用六面体主导的网格划分方法。 得到的结果如下 该方法在表面用六面体单元,而在内部也尽量用六面体单元,当无法用六面体单元时,就用四面体单元填充。由于四面体单元相对较差,所以它比较能够保证表面的单元质量。 总体来说,对于空间物体而言,我们应当尽量使用六面体网格。 当对象是一个简单的规则体时,使用扫掠网格划分是合适的; 当对象是对个简单的规则体组成时,使用多域扫掠网格划分是合适的; 接着尽量使用六面体主导的方式,它会在外层形成六面体网格,而在心部填充四面体网格。四面体网格是最后的选择。其中 如果要忽略一些小细节,如倒角,小孔等,则使用patch independent算法; 如果要要考虑一些小细节,则使用patch conforming算法。

workbench 四面体网格膨胀

第五章 四面体网格膨胀

概述 Training Manual ?四面体网格划分算法 ?Patch Conforming的膨胀选项 –算法 –前处理和后处理 –高级选项 –冲突避免 ?Patch Independent 划分 P t h I d d t –损伤外貌 y –Proximity 细化 –Curvature 细化 ?作业5.1 三通搅拌器的膨胀四面体网格 (Patch Conforming) (P t h C f i) ?作业5.2 汽车多支管的流体和结构网格划分 (Patch Independent) (Patch Independent)

四面体网格划分算法 Training Manual ?Patch Conforming –默认时考虑所有的面和边(尽管在收缩控制和虚拟拓扑时会改变且默认损伤外貌基于最小尺寸限制) –适度简化CAD (如. native CAD, Parasolid, ACIS, 等.) 在体部件中结使扫共体棱柱体格 –在多体部件中可能结合使用扫掠方法生成共形的混合四面体/棱柱和六面体网格 –有高级尺寸功能 –表面网格体网格 ?Patch Independent –对CAD 有长边的面, 许多面的修补, 短边等有用. –内置defeaturing/simplification 基于网格技术 –基于ICEM CFD 四面体/棱柱Octree 方法 –体网格表面网格

Patch Conforming 四面体膨胀 Training Manual ?基本设置包括膨胀选项,前处理和后处理膨胀算法

膨胀选项–平滑过渡 Training Manual ?平滑过渡(默认) –使用局部四面体单元尺寸计算每个局部的初始高度和总高度以达到平滑的体积变化比。每个膨胀的三角形都有一个关于面积计算的初始高度,在节点处平均。这意味着对一均匀网格,初始高度大致相同,而对变化网格初始高度也是不同的。 –过渡比 ?膨胀层最后单元层和四面体区域第一单元层间的体尺寸改变 ?当求解器设置为CFX时, 默认的Transition Ratio是0.77. 对其它物理选项, 包括Solver Preference设置为Fluent的CFD, 默认值是0.272. ?因为Fluent求解器是单元为中心的,其网格单元等于求解器单元, 而CFX求解器是顶点 为中心的,求解器单元是双重节点网格构造的,因此会发生不同的处理

四面体剖分的实现

四面体剖分的实现 1 研究现状 网格剖分算法经历了从平面到曲面,再到三维实体剖分的发展过程,国内外学者为推动网格剖分的发展做出了很多贡献。作为当前网格生成领域研究热点的四面体剖分,出现了很多方法,其中比较成熟和普遍使用的算法有:Delaunay 法和前沿推进法,以及映射法、栅格法、模板法和多区域法等。 Delaunay法在三维空间存在边界一致性和薄元处理等问题,由于这些问题的存在,使Delaunay法适用范围有限,稳定性不好。针对存在的这些问题,Y Bai 等改良了约束Delaunay网格生成算法;陈学工等提出可消除退化现象引起的潜在错误的方法。前沿推进法是节点和单元同步生成。前沿推进法是一种全自动网格剖分算法,三维的前沿推进法是从待剖分域的表面三角形集合(称作初始前沿队列)开始,循环往复,当前沿队列为空时结束的一种网格划分方法。前沿推进法缺乏一般性的理论支撑,要进行大量的算术判断,占用了大量时间,因此对数据结构的要求很髙,对于三维空间前沿推进法还存在收敛性等问题。基于此很多人都对前沿推进法做了改进工作,吴宝海等提出一种两侧推进的波前法,Li等人采用由内而外的波前推进的方式生成了全六面体网格。 除过以上介绍的算法,四面体网格划分有针对不同问题的算法。如陈一民等提出对多面体进行划分的算法; B Jonathan等提出一种多材质的四面体网格生成算法;J Wang等提出了一种能得到高质量四面体网格的自适应算法;S Tian 等提出了一种在模型轮廓的基础上生成网格的算法;R Montenegro等提出自动生成自适应四面体网格的算法。 如何自动划分网格逐渐成为有限元法发展的瓶颈,许多科学家和工程师在全自动有限元网格划分算法的研巧和实现上努力。网格生成是实际问题求解的前提,对于超薄、相邻或包含关系的复杂模型,生成符合实际要求的有限元网格是一个耗时很大的任务。此时,网格的自动生成算法节省时间的同时提供了髙精度,保证了问题分析的准确性。自动网格剖分算法发展至今,很多商业软件如Fluent、Ansys、Hyper mash等都提供了相应的网格剖分模块,对于规则的几何形状,生

门主ICEM非结构网格1四面体网格

四面体网格生成一般流程 1、建立body 2、Global Mesh Setup(全局网格设定) ●全局网格尺寸 ●体网格尺寸:设定体网格类型及生成方法 3、Mesh Size for Parts(Part网格尺寸设定) 4、Surface Mesh Setup(面网格尺寸设定) 5、Curve Mesh Parameters(曲线网格参数设定) 6、Create Mesh Density(设定网格加密区) 7、Compute Mesh(计算生成网格) 8、Smooth Mesh Globally(网格光顺) 9、检查网格质量

示例1、运动体倾斜入水 几何模型如下图所示 步骤1 建立body 选择介于运动体与大圆柱之间屏幕的任意两个位置,单击中键确定。 (说明:在想要生成非结构网格的计算域建立Body,ICEM会根据这个点搜索包围它的最小闭合区域作为一个计算域。) 步骤2 定义全局网格尺寸 本例中定义为32 (说明: 1、最大网格尺寸最好取值为2的指数幂(帮助文 档建议) 2、实际网格生成的最大尺寸等于Scale factor与 Max element的乘积)

步骤3 定义网格类型及生成方法 选择网格类型Tetra/Mixed,生成方法为 Robust(Octree)。 (说明: 1、Tetra/Mixed默认情况下生成四面体网格,通过 设定可以创建三棱柱边界层网格(Prism),也可 以生成以六面体为主的体网格(Hexcore) 2、Robust(Octree)方法使用八叉树方法生成四面 体网格,是一种自上而下的网格生成方法,即 先生成体网格,后生成面网格。一般保持默认。) 步骤4 定义Part网格尺寸 本例中将弹体表面分别定义为三个part,最大网格尺寸分别定义为2、2、1。 (说明;由于本例中Part所定义的内容即为面,所以省略下一步的“表面网格设定”) 步骤 ..5 .建立加密区 ..... 本例中运动体尾部和头部X方向坐标分别为160、200,半径为4,要对运动体周围进行加密。 1、创建点(140,0,0)、(220,0,0) 2、单击图示Create Mesh Density按钮,在size处输入4,width处输入4,ratio 处输入1.2,选择上一步创建好的两点,Apply生成加密区如右下图黄色线。

ANSYSWorkbenchMesh网格划分(自己总结)

Workbench Mesh网格划分分析步骤网格划分工具平台就是为ANSYS软件的不同物理场和求解器提供相应的网格文件,Workbench中集成了很多网格划分软件/应用程序,有ICEM CFD,TGrid,CFX,GAMBIT,ANSYS Prep/Post等。网格文件有两类: ①有限元分析(FEM)的结构网格: 结构动力学分析,电磁场仿真,显示动力学分析(AUTODYN,ANSYS LS DYNA); ②计算流体力学(CFD 分析)分析的网格:用于ANSYS CFX,ANSYS FLUENT,Polyflow; 这两类网格的具体要求如下: (1)结构网格: ①细化网格来捕捉关心部位的梯度,例如温度、应变能、应力能、位移等; ②大部分可划分为四面体网格,但六面体单元仍然是首选; ③有些显示有限元求解器需要六面体网格; ④结构网格的四面体单元通常是二阶的(单元边上包含中节点); (2)CFD网格: ①细化网格来捕捉关心的梯度,例如速度、压力、温度等; ②由于是流体分析,网格的质量和平滑度对结果的精确度至关重要,这导致较大的网格数量,经常数百万的单元; ③大部分可划分为四面体网格,但六面体单元仍然是首选,流体分析中,同样的求解精度,六面体节点数少于四面体网格的一半。 ④CFD网格的四面体单元通常是一阶的(单元边上不包含中节点) 一般而言,针对不同分析类型有不同的网格划分要求: ①结构分析:使用高阶单元划分较为粗糙的网格; ②CFD:好的,平滑过渡的网格,边界层转化(不同CFD 求解器也有不同的要求); ③显示动力学分析:需要均匀尺寸的网格;

注:上面的几项分别对应Advanced中的Element Midside Nodes,以及Sizeing中的 Relevance Center,Smoothing,Transition。 网格划分的目的是对CFD (流体) 和FEM (结构) 模型实现离散化,把求解域分解成可得到精确解的适当数量的单元。 用户需要权衡计算成本和网格划分份数之间的矛盾。细密的网格可以使结果更精确,但是会增加CPU计算时间和需要更大的存储空间,特别是有些不必要的细节会大大增加分析需求。而有些地方,如复杂应力梯度区域,这些区域需要高密度的网格,如下图所示。一般而言,我们需要特别留意几何体中物理量变化特别大的区域,这些地方的网格需要划分得细密一些!

计算流体力学ICEM CFD 网格生成基础教程0204192301

第一章介绍 ICEM CFD 工程 Tutorials目录中每个工程是一个次级子目录。每个工程的目录下有下列子目录:import, parts, domains, mesh, 和transfer。他们分别代表: ? import/: 要导入到ICEMCFD中的集合模型交换文件,比如igs,STL等; ? parts/: CAD模型 ? domains/: 非结构六面体网格文件(hex.unstruct), 结构六面体网格分区文件(domain.n), 非结构四面体网格文件(cut_domain.1) ? mesh/: 边界条件文件(family_boco, boco),结构网格的拓扑定义文件(family_topo, topo_mulcad_out), 和Tetin几何文件(tetin1). ? transfer/: 求解器输入文件(star.elem), 用于Mom3d.的分析数据 mesh目录中Tetin文件代表将要划分网格的几何体。包含B-spline曲面定义和曲线信息,以及分组定义 Replay 文件是六面体网格划分的分块的脚本 鼠标和键盘操作 鼠标或键盘操作功能 鼠标左键点击和拖动旋转模型 鼠标中键点击和拖动平移模型 鼠标右键点击和上下拖动缩放模型 鼠标右键点击和左右拖动绕屏幕Z轴旋转模型 F9 按住F9,然后点击任意鼠标键进行操作的时候进行模型运动 F10 按F10 紧急图象Reset

第二章ICEM CFD Mesh Editor界面 The Mesh Editor, 创建修改网格的集成环境,包含三个窗口 ? The ICEM CFD 主窗口 ? 显示窗口 ? The ICEM CFD 消息窗口 主窗口 主窗口中除了图形显示区域,外,还有6个radio按钮:File, Geometry, Meshing, Edit Mesh and Output. The File Menu The File menu 包含 ? Open, Save, Save as, Close, Quit, Project dir, Tetin file, Domain file, B.C file, Import geo, Export geo, Options, Utilities, Scripting, Annotations, Import mesh, DDN part.

workbench网格划分的很实用的讲解

w o r k b e n c h网格划分的很实用的讲解 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

如何在ANSYS WORKBENCH中划分网格经常有朋友问到这个问题。我整理了一下,先给出第一个入门篇,说明最基本的划分思路。以后再对某些专题问题进行细致阐述。ANSYS WORKBENCH中提供了对于网格划分的几种方法,为了便于说明问题,我们首先创建一个简单的模型,然后分别使用几种网格划分方法对之划分网格,从而考察各种划分方法的特点。 1. 创建一个网格划分系统。 2. 创建一个变截面轴。 先把一个直径为20mm的圆拉伸30mm成为一个圆柱体 再以上述圆柱体的右端面为基础,创建一个直径为26mm的圆,拉伸30mm得到第二个圆柱体。 对小圆柱的端面倒角2mm。 退出DM. 3.进入网格划分程序,并设定网格划分方法。 双击mesh进入到网格划分程序。 下面分别考察各种网格划分方法的特点。 (1)用扫掠网格划分。 对整个构件使用sweep方式划分网格。 结果失败。 该方法只能针对规则的形体(只有单一的源面和目标面)进行网格划分。 (2)使用多域扫掠型网格划分。 结果如下

可见ANSYS把该构件自动分成了多个规则区域,而对每一个区域使用扫略网格划分,得到了很规则的六面体网格。这是最合适的网格划分方法。 (3)使用四面体网格划分方法。 使用四面体网格划分,且使用patch conforming算法。 可见,该方式得到的网格都是四面体网格。且在倒角处网格比较细密。 其内部单元如下图(这里剖开了一个截面) 使用四面体网格划分,但是使用patch independent算法。忽略细节。 、 网格划分结果如下图 此时得到的仍旧是四面体网格,但是倒角处并没有特别处理。 (4)使用自动网格划分方法。 得到的结果如下图 该方法实际上是在四面体网格和扫掠网格之间自动切换。当能够扫掠时,就用扫掠网格划分;当不能用扫掠网格划分时,就用四面体。这里不能用扫掠网格,所以使用了四面体网格。 (5)使用六面体主导的网格划分方法。 得到的结果如下

四面体和六面体网格比较

四面体和六面体网格比较 在2D中,FLUENT 可以使用三角形和四边形单元以及它们的混合单元所构成的网格。在3D中,它可以使用四面体,六面体,棱锥,和楔形单元所构成的网格。选择那种类型的单元取决于你的应用。当选择网格类型的时候,应当考虑以下问题: 设置时间(setup time) 计算成本(computational expense) 数值耗散(numerical diffusion ) 1.设置时间 在工程实践中,许多流动问题都涉及到比较复杂的几何形状。一般来说,对于这样的问题,建立结构或多块(是由四边形或六面体元素组成的)网格是极其耗费时间的。所以对于复杂几何形状的问题,设置网格的时间是使用三角形或四面体单元的非结构网格的主要动机。然而,如果所使用的几何相对比较简单,那么使用哪种网格在设置时间方面可能不会有明显的节省。 如果你已经有了一个建立好的结构代码的网格,例如FLUENT 4,很明显,在FLUENT中使用这个网格比重新再生成一个网格要节省时间。这也许是你在FLUENT 模拟中使用四边形或六面体单元的一个非常强的动机。注意,对于从其它代码导入结构网格,包括FLUENT 4,FLUENT 有一个筛选的范围。 2.计算成本 当几何比较复杂或流程的长度尺度的范围比较大的时候,可以创建是一个三角形/四面体网格,因为它与由四边形/六面体元素所组成的且与之等价的网格比较起来,单元要少的多。这是因为一个三角形/ 四面体网格允许单元群集在被选择的流动区域中,而结构四边形/六面体网格一般会把单元强加到所不需要的区域中。对于中等复杂几何,非结构四边形/六面体网格能构提供许多三角形/ 四面体网格所能提供的优越条件。 在一些情形下使用四边形/六面体元素是比较经济的,四边形/六面体元素的一个特点是它们允许一个比三角形/四面体单元大的多的纵横比。一个三角形/ 四面体单元中的一个大的纵横比总是会影响单元的偏斜(skewness),而这不是所希望的,因为它可能妨碍计算的精确与收敛。所以,如果你有一个相对简单的几何,在这个几何中流动与几何形状吻合的很好,例如一个瘦长管道,你可以运用一个高纵横比的四边形/六面体单元的网格。这个网格拥有的单元可能比三角形/ 四面体少的多。 3.数值耗散 在多维情形中,一个错误的主要来源是数值耗散,术语也为伪耗散(false diffusion)。之所以称为“伪耗散”是因为耗散不是一个真实现象,而是它对一个流动计算的影响近似于增加真实耗散系数的影响。 关于数值耗散的观点有: 当真实耗散小,即情形出现对流受控时(即本身物理耗散比较小时),数值的耗散是最值得注意的。 关于流体流动的所有实际的数值设计包括有限数量的数值耗散。这是因为数值耗散起于切断错误,而切断错误是一个表达离散形式的流体流动方程的结果。 用于FLUENT 中的二阶离散方案有助于减小数值耗散对解的影响。 数值耗散的总数反过来与网格的分解有关。因此,处理数值耗散的一个方法是改进网格。 当流动与网格相吻一致时,数值耗散减到最小。 最后这一点与网格的选择非常有关。很明显,如果你选择一个三角形/ 四面体网格,那么流动与网格总不能一致。另一方面,如果你使用一个四边形/六面体网格,这种情况也可能会发生,但对于复杂的流动则不会。在一个简单流动中,例如过一长管道的流动,你可以依靠一个四边形/六面体网格以尽可能的降低数值的耗散。在这种情形,使用一个四边形/六面体网格可能有些有利条件,因为与使用一个三角形/ 四面体单元比起来,你将能够使用比较少的单元而得到一个更好的解。

网格划分设计知识点汇总

一、网格设计而非划分 在进行数值模拟计算(包括FEA、CFD等)中,网格的质量对分析计算的结果有至关重要的影响。高质量的网格是高精度分析结果的保证,而质量不好或者差的网格,则可能会导致计算的无法完成或者得到无意义的结果。划分网格是需要认真考虑的,它内部的计算方程需要设计出好的网格,计算才能更准确。 在一个完整的分析计算过程中,与网格设计和修改相关的前处理工作占到了CAE工程师工作量的70-80%,CAE工程师往往要花费大量的时间来进行网格处理,真正用于分析计算的时间很少,所以主要的瓶颈在于如何快速准备好高质量的满足分析计算要求的网格。 该项工作对技术人员的技术经验和背景有相当高的要求。具体的说,就是要求前处理工程师能够根据CAE工程师提出的分析要求“设计”出能满足CAE工程师分析要求的合适的网格,然后提交给CAE工程师进行分析计算。之所以是网格“设计”而不是网格“划分”,说明了要设计出能够满足分析计算要求的高质量的网格,并不是一件容易的事情,要完成这项工作需要很多方面的知识和技术要求。 针对一个具体的分析计算要求,要获得一个满足该分析计算的高质量网格,需要从以下几个方面进行综合考虑: 1.分析计算的目的(定性还是定量?)。 2.分析计算的类型,如强度分析、刚度分析、耐久性分析、NVH分析、碰撞分析、CFD分析、热流分析、动力学响应分析等。(不同的分析类型对网格的质量和形状有不同的要求。) 3.分析计算的时间要求。(要求时间的紧迫与否也决定了采用何种网格形式) 4.分析计算所采用的求解器。(不同的求解器对不同的分析问题有特定的网格形式和要求) 5.分析计算可能应用的单元类型。(所应用的求解器可以采用的单元类型,也会决定网格的质量与形状要求) 6. 尽可能采用最好的网格类型。(对于面,尽可能采用四边形网格;对于体,尽可能采用六面体单元) 由此可见,满足计算分析要求的高质量的网格是由前处理工程师精心“设计”出来的,而不是随随便便“划分”出来的。 二、四面体和六面体单元比较 本文只谈四面体和六面体选择的问题 有限元工程师80%的工作可能都在于网格打交道,对于网格的划分及选择确实是,也必须是非常关心的问题。网格划分的相关问题很多,比如薄壳的处理,一阶单元和二阶单元的选择,单元配合等等。 目前,基本上大部分的有限元前处理软件都基本实现了对面单元的自动四边形划分,但是自动六面体单元还是一个难点,有些号称能够自动化六面体划分的,其实采用自欺欺人的办法(划分只有表面网格是六面体,但是扒开了看,里层多数还是采用四面体),能够自动划分出完美的六面体网格基本还是难题。 相对于四面体,六面体的优势有: 第一,美。不要小看这一点,网格的美与否对结果的影响其实也是非常大的。划分网格就像打磨一件艺术品一样。“漂亮”的网格算出来正确结果的可能性绝对要比“糟糕的”网格大的多。 第二,理论上六面体的精度要比四面体高,这里只谈一阶单元(二阶两者精度相当)。在有限元理论上也介绍的很明白,一阶四面体单元是属于常应变单元,所谓的常应变单元就是单元只存在一个应力和应变,没有应力梯度。而六面体单元则是梯度单元,只要不是缩减积分单元,单元内部是可以存在多个应力和应变积分点的,这样可以准确的描述梯度变化区域。也就意味着,如果是同等精度的话,六面体在应变梯度变化大的地方变形的更加合适。 第三,同等模型尺寸下,六面体的节点数量要比四面体少得多。例如,50*75*50的立方体,5mm 的网格大小,如果在四面体下,节点数14658个,单元数9759,而在同等大小的尺寸的六面体下,节点数1936,单元数 1500。也就是说网格数量大幅度减少。 四面体的优点: 四面体虽然在算法上好像优势不大,但是瑕不掩瑜。四面体本身可填充任何几何形状,这个特性是六面体无法比拟的。 1、网格划分快捷。这是四面体网格最大的特点,不管是什么类型的几何体,通常都可以一键操作,再复杂的结构,分分钟就能得到一个网格出来。对于复杂几何体来说,这是非常重要的,以前发动机分析,六面体网格,没有半个月的功夫,怎能完成,现在也就半天功夫。

四面体与六面体网格特征比较

四面体与六面体网格特征比较 摘要:文章以一个轴承座零件为例,对轴承座零件分别进行了四面体和六面体网格划分,在此基础上,比较了四面体网格与六面体网格模型的特点,对有限元网格的划分具有一定的参照价值。 关键词:有限元;网格划分;模型比较作为有限元仿真的前处理技术,有限元的网格越来越受到分析工程师们的重视,有限元前处理(即CAD模型与网格划分)占CAE分析流程总时间的40%~45%左右,而计算结果的精确性却主要依赖网格的质量,所以有限元网格划分是进行有限元分析的重要步骤,它直接影响到后续工作的准确性。 六面体网格在计算精度、变形特性、划分网格数量、抗畸变程度及再划分次数等方面比三维四面体网格具有明显的优势,另外在某些情况下只能采用六面体单元进行有限元分析。因此,六面体网格成为当今三维模型问题分析的首选网格。然而,由于自动生成网格的需要,对于任意复杂的三维结构全部使用六面体网格划分网格是不现实的,因此,当计算任意形状的物体时,四面体是必不可少的工具。 本文利用有限元前处理软件HyperMesh,采取了两种方式分别对一个轴承座模型进行四面体和六面体的网格划分,比较了两种不同方式网格划分的特点。 1 四面体网格 1.1 轴承座几何模型 在PRO/E中建立轴承座的三维几何模型,并做了适当的简化处理,简化处理原则是对下一步的静强度计算没有太大影响,但是能有效减少网格单元数量,提高计算精度。原模型只根据要求去除了支座底部的螺栓孔,保留了所有的圆角和筋等支撑,最大限度的不修改模型,简化后的几何模型如图1所示。 1.2 四面体网格的划分 四节点四面体单元与十节点四面体单元是常见的两种四面体单元形式,与四节点单元相比而言,十节点四面体单元绝有较高的精度,但其单元函数相对复杂,生成数据后结构总数较多,计算效率低下,常应变四节点四面体单元虽然单元函数简单,结构自由度少,但是精度低,在HyperMesh中,有对微小曲面,狭窄倒圆角以及细长面的近似画法,对微小区域自动生成较小的网格单元,最大程度上保持了网格表面是三位模型表面的一致性,所以四面体单元比较适合对形状复杂的模型进行网格划分。 将模型导入HyperMesh中,在生成体网格之前,对比较容易出现应力集中的部位进行三角形二维单元面网格(Tria)处理,使面网格与模型的表面属性一致。并设置四面体网格与二维单元面网格保持一致性(即建立Tetras网格时须选择match the existing mesh选项),最后使用Tetra mesh面板在封闭的实体上生成四面体单元,模型如图2所示。单元数267 992,节点数64 420。 2 六面体网格 2.1 轴承座几何模型 六面体网格划分的基本思路与四面体网格基本一致,但是六面体网格的人为干预控制要比四面体网格更多。 由于轴承支座不同于其他回转体零部件,形状比较复杂,因此要对模型做较大的简化,才能使其形状规则,模型主要对零部件的倒圆角、微小阶梯、支撑筋

Femap_四面体单元网格质量

Distortion in Tetrahedral Elements 1.If you have not done it already, you should download the file Tee.x_t from the a link on the MAE-5020 web page. In FEMAP use the menus File/Import/Geometry to read in this Parasolid file. Parasolid files are store in units of meters. To get units of millimeters we need to enter a Geometry Scale Factor of 1000 as shown below before clicking OK to import the Parasolid file. You should now have the image shown below.

2.Restrain all translations on the positive Z surface as shown below. Use the menus Model/Constraint/Surface to do this. You and just click OK on the first popup window for a constraint set name. In the next “Entity Selection” window select the surface shown below and click OK. In the “Create Constraints on Geometry” window, select the Pined radio button. Click OK and Cancel.

相关主题