CFD模拟第四讲:网格的划分

arben

在COMSOL中通过网格(Mesh)划分,可以将一个连续的几何体划分成一个个离散的单元格,称为网格单元(mesh element)。 在一维几何模型中,网格生成器将线性域(线段)划分成一个个较小的线段(网格单元),网格单元的两个终点称为网格顶点(mesh vertices)。<div><br></div><div>对于二维几何模型,网格生成器将平面域分解成一个个离散的三角形或四边形网格单元。如果平面图形的边为曲线,相应的网格为近似的三角形或四边形。三角形或四边形的边称为网格边(mesh edgs),顶点称为网格顶点(mesh vertices)。网格边的内部不能包含任何网格顶点。</div><div><br></div><div>平面几何图形的边经网格化处理以后,分解成离散的网格边,边界上的网格(edge elements)必须与平面域内相邻的网格相一致。几何顶点由顶点单元(vertex element)表示。</div> 三维几何模型经网格化处理以后,三维实体的域被分解为离散的四面体、六面体、三棱柱或金字塔体。三维实体的边界面分解为小的三角形和四边形边界单元,几何体的边分解为边单元,顶点由顶点单元表示。<div><br></div> 物理场控制网格划分<div><br></div><div>COMSOL 默认的网格划分方法是物理场控制网格(PHYSICS-CONTROLLED MESHING),该方法会根据当前所用物理场对网格进行调整,比如在流体流动模拟中,产生的网格是沿无滑移边界的边界层网格,比默认方式产生的网格更精细。在网格主节点下,可以调整单元大小,如下图所示。<br></div> 在网格节点下可以添加网格序列,共同产生所需要的网格。在网格划分过程中产生的错误或警告,可以在主网格节点下查看。 用户控制网格<div><br></div><div>在主网格节点下的“序列类型中,可以选择“用户控制网格, User-controlled mesh,亲自添加网格序列来创建心仪的网格。选择用户控制网格后,二维模型的主网格节点下会自动生成两个序列:大小和自由三角形网格,三维模型自动生成的序列为:大小和自由四面体网格。</div> 假如开始你选用的是“物理场控制网格”,后来因为需要又在网格手动添加了网格序列,那么系统就会将“物理场控制网格”类型自动改为“用户控制网格”模式。 二维网格和三维网格中都可以选择生成“自由网格(free meshes)”和“结构网格(structured meshes)”。二维的自由网格单元为三角形网格和四边形网格,三维自由网格为四面体网格单元。<div><br></div><div>二维结构网格有两种创建方式,一是通过使用转换操作(convert)为四边形元素引入对角线,创建一个结构化的三角形网格,二是通过映射操作(mapped)生成一个四边形单元的结构化网格。与自由网格相比,结构化网格内部网格定点与相邻的单元格数量相同。用映射生成网格时,要求几何体形成的域要规则,不能包含孔洞结构。<br></div><div><br></div><div>三维结构化网格也有两种创建方式,扫略网格(Swept meshing)和边界层网格( Boundary layer meshing),通过扫略操作可创建网格单元为三棱柱或六面体的结构化网格;边界层网格是按照某一特定边界生成结构化的网格层,并与已有的结构或非结构的网格相整合。<br></div> <h1><ul><li><b>自由网格(Free meshing)</b></li></ul></h1> 所有维度、任何几何模型都可以生成自由网格,如果你没有定义和创建网格,在“研究”之前,模型开发器会自动创建一个自由网格。在创建自由网格时,网格单元的数量由几何体的形状和尺寸来确定,当然你也可以通过网格序列中的“大小”和“分布特征”来控制网格生成参数。 <div>我们先来了解一下“大小(Sizes)”特征的设置窗口中“单元大小参数”中几个参数的含义。</div><div><ul><li>最大单元大小(aximum element size a):在生成网格时允许的网格最大尺寸(大概);</li><li>最小单元大小(Minimum element size):在生成网格时允许的最小尺寸大小;</li><li>最大单元增长率( Maximum element growth rate ):单元格大大小会随着几何尺寸的大小而变化,允许的相邻单元格之间的最大增长率。</li><li>曲率因子(Resolution of curvature):按照英语来翻译的话应该是“曲率分辨率”,几何边界的曲率乘以曲率因子或者曲率分辨率就是边界网格上的最大允许尺寸,所以曲率因子就是“边界网格最大尺寸与几何边界之比”。比值越小,那么对曲线的分辨率就越高,边界曲线划分得就越细致,但曲率因子必须是一个非负的值。</li><li>狭窄区域的分辨率(Resolution of narrow regions):用于控制在狭窄区域创建的网格单元的层数(大约),这个值必须是一个非负的标量,如果这个参数的值小于1,狭窄区域的网格单元大小可能不同。</li></ul><p>那么这些参数该如何设置呢?原来遇到这些问题我也是一脸懵逼,要大、要小全看默认值的高低。仔细想想,这些参数都只是为了控制网格大小的,网格为什么不能太大?太大了肯定有些细节的结构分辨不出来,某些区域的变化也没办法表征出来。但你又不能追求更细的网格,否则计算量太大,计算机扛不住。因此我们想网格尽量粗一些,但又能够将我们需要的数据计算出来,这就要求你心里要清楚哪些需要表达,哪些又不需要太详细地表达。这样你才能判断网格划分得是否合适。</p><p><br></p></div>比如对于翅片散热器模型,我们可以尝试划分自由三角形或自由四边形的网格, 在网格主节点为当前状态下,从“网格”功能栏中选择“自由四边形网格”,COMSOL在网格节点下添加“大小”和“自由四边形网格”两个序列,点击网格设置中的“创建全部对象”,生成如图所示的网格。 翅片上的圆角尺寸较小,所以系统会在相应位置生成更小的网格,以将其尺寸分辨出来。而在圆弧大尺寸内,相应的网格较大。同时我们观察在几个翅片底部,划分的网格也比较稀疏,并不一定能分辨出参数的的详细变化。<div><br></div><div>要调整所选域的网格,可以在“自由四面体”节点上添加尺寸特征。否则,所有网格尺寸都是由主网格下的尺寸来控制。我们可以通过控制翅片边界上的网格数量,来控制翅片上网格的分辨率。<br></div> 在主网格节点“网格1”为当前状态的情况下,从“网格”功能命令栏中选择“边”添加“边1”序列,“边1”序列添加到了“大小1”的后边,“自由四边形网格1”节点的前面,这正是我们想添加的位置。如果我们想调整某个序列的位置,可以通过右键点击相应序列,然后选择“上移(move up)”或“下移(move down)”来调整。<div><br></div><div>在“边1”的设置窗口中选择我们要调整的边界。可以从图形窗口中通过鼠标点击来选择相应的边“4”和“6”,在每个选择框的右边,都以几个相同的选择按钮来帮助我们选择,可以亲自尝试一下它们的使用方法,这里就不详细介绍了。</div> 点击“边1”设置窗口中的“构建选定对象”,这样可以保证“边1”是我们当前的操作状态,然后从网格的功能命令栏中选择“分布(distribution)”在“边1”序列下添加一个“分布1”序列, “分布1”中的“边界选择”窗口中保持“边1”的选择结果,分布类型保持默认的“固定单元数”将单元数改为“30”,点击“构建选定对象”,从图形窗口可以看出,边4和6上的网格点增加到了30个。当我们重新创建自由四边形网格时,这两条边上的网格点就从原来的5个调整为30个,然后向内推进划分翅片内部的区域。 点击“构建全部对象”,边界4和6所在的翅片上的网格划分单元明显增加了,而其他没有设置的翅片基本保留原来系统默认的样子。 另外要注意添加“大小”、分布等特征时,上层的特征控制的范围大,序列内部的特征仅用于控制所在的序列。这有点像“主菜单”、“子菜单”等的关系一样。上图中主网格3节点下的大小控制整个网格的大小,而边1中的大小1特征,仅用于控制边1上网格的大小,其他没有设置的区域或边的大小,受主网格下的“大小”来控制。 有些几何体中包含有一些细小的几何元素,如狭长的面或者短边,但你有根本不想了解这其中的细节特征,可以在几何序列中采用“虚拟”操作来忽略这些干扰特征。<div><br></div><div>有些几何体的域或者面非常复杂,很难进行网格划分。你就可以尝试将几何体分割(Partitioning)成不太复杂的情况。分割通常采用插入“工作面(waork plane)来分割几何体,也可以在构建网格时采用网格控制面节点,来控制网格的划分。<br></div><div><br></div><div>当采用工作面来分割几何体时,首先在需要的位置上插入一个工作平面,然后在工作平面上绘制一个很大的矩形或者其他的二维图形,确保这个二维图形超过分割面的大小,然后添加一个“转化为实体(convert to solids)”节点,输入对象为分割的对象和平面矩形,COMSOL就会准确计算出你需要分割的平面形状。<br></div> <h1><ul><li><b>结构化网格</b></li></ul></h1> 二维结构中采用“映射(mapped meshing)”、三维结构中采用“扫略(swept meshing)”操作来生成结构化的网格(Structured meshes),这两种操作都需要事先创建一个边界层网格(Boundary Layer Meshes)。下面我们分别距离进行说明。 <ul><li><b>映射</b></li></ul> 在采用映射创建二维结构化网格时,一般要求二维几何图形比较规范,比如:<div>每个域必须由至少四个边界段所限定。</div><div>每个域内部不允许有孔洞。</div><div>每个域内不能含有孤立的点或边界线段。</div><div>每个域的形状不能与矩形差别太大。</div><div><br></div><div>如果几何图形与上述要求差别较大,需用将其分割成较简单的图形后采用映射进行网格划分。</div> 比如在对较为规则的管式反应器,采用映射法划分网格,按照默认的设置,网格划分如上图所示。你会觉得这种网格太粗糙了,但要生成理想的网格,你必须要对要分析的对象有较为深刻的理解。 反应器的壁上为无滑移的层流,所以网格要密集一些,轴线属于中心湍流区,可适当粗糙。反应器入口处物质浓度变化较大,所以网格要细,出口处反应差不多完了,浓度变化不太大,所以可以适当粗些。所以我们需要的不是均匀分布的网格,而是有疏有密的网格。 在定义径向网格时,在映射下插入“分布1”节点,采用预定义确定分布的类型,单元格数设定为50,单元大小比设为0.01,这就控制了单元格的变化幅度,单元格增加的方式有“等差序列”和“几何序列”两种,它们之间的区别你可以网上搜索,这里就不多赘述了。“反向”是用来控制哪条边疏、哪条边密的,你可以尝试一下不同选项的效果。<div><br></div><div>同样在流动方向,你也可以另添加一个分布2,来定义其中的网格分布情况,并注意让入口的网格要密,出口的网格疏。</div> <h3 style="text-align: center">采用映射法创建的网格</h3> <div><ul><li><b>边界层网格</b></li></ul></div>边界层网格指的是沿边界法线方向密集分布的网格层,这种类型的网格一般用于解决流体流动中无滑移壁上边界层内的流动问题。在二维几何图形中,边界层网格为无滑移边界上分层的四边形网格,在三维几何体中,根据边界面上的网格为三角形网格还是四边形网格,生成的边界网格层为三棱柱或六面体的网格。<div><br></div><div>受热面附近大温度梯度随时间的突然变化也可以用边界层网格了分析。</div> 边界层网格的生成对几何模型的拓扑结构非常敏感,如果创建时遇到问题或错误可尝试通过删除不必要内部边界、如没有参数变化的物理边界来解决网格边界层网格的生成问题。有效的处理方式是在几何序列中将这些不必要的内部边界设为网格控制实体,然后采用自由四面体或扫略法在域内创建网格,当域的网格创建完成后,控制边界会被自动移除,之后你再插入刚刚被移除的物理边界,但这个边界已经不会对网格的划分产生影响了。 <div><br></div><div>另外也可以通过边界层网格的修剪操作(trimming)而不是拆分(splitting)来修改边界层网格。默认情况下在二维和三维图形中的每个尖角的边上,会自动创建一个边界层分割。</div> 在图形窗口中,选择你想插入“边界层”的边界。在"网格"工具栏中点击“边界层”命令,在模型开发器中的网格下创建一个“边界层1”的节点,并且在“边界层1”下默认插入一个“边界层属性(Boundary Layer Properties)”的节点。<div><br></div><div>当然你也可以在插入边界层节点后选择需要插入边界层的边。</div> 在“边界层”节点的设置窗口中,选择的域表示你想要通过边界层网格控制的域,可通过手动来选择。 <div>“角设置(CORNER SETTINGS)”是尖角处边界层的处理选项,尖角的处理方式有拆分(split)、修剪(trim)和无三种选项,默认的是拆分。通过最大拆分角度和最小拆分角度,或者最大修剪角度和最小修剪角度来控制相邻边界层边界的角度极限。“最大层减量”表示相邻边界上边界层的最大变化量。</div><div><br></div><div>“过渡(transition)”复选框用来控制边界层到内部域网格之间的过渡情况。</div><div><br></div><div>边界层属性的节点数可以超过一个,但是如果你想对不同的边界设置不同的边界层属性,可以添加多个边界层属性,并在相应的设置窗口中选择相应的边界,需要注意的是相邻边界的边界层数必须相同。</div><div><br></div><div>这里有两个概念:边界和边界层,边界是几何意义的边界,边界层是网格意义的网格层。</div><div><br></div><div>在边界层属性中有“边界层数”设置栏,也就是指定要设置边界层的层数,默认为8,“边界层拉伸因子”是用来指定相邻边界层之间的厚度增加系数,默认的值为1.2,也即是从一层到下一次之间的厚度增加量为20%。</div><div><br></div><div>“第一次厚度”用来指定第一层网格的厚度,默认选项为“自动”,这种情况下系统将边界层第一次厚度设定为域内网格厚度的1/20,“厚度调节因子”用来调整第一次边界网格的厚度大小。</div> <h1></h1><h3><ul><li><b>三维扫略网格</b></li></ul></h3> <div>扫略网格生成法与CAD中将二维图形通过扫略创建三维图形的操作类似。首先我们需要创建一个平面网格,然后将这个网格平面沿垂直方向一路径扫过整个几何体,并将网格“印”到沿途的每一个截面。</div>