动网格又报负体积了,转子转过第一个时间步就开始刷屏“Negative cell volume detected”,控制台一屏一屏地滚,最后直接崩掉。这个报错从螺旋泵那个算例开始就一直缠着,时间步从1e-4砍到2e-5,弹簧常数因子从0.8降到0.5,Remeshing的Minimum Cell Volume也改了,还是不行。后来翻论坛,有人一句话点醒了:“negative cell volume error may be due to distance moved per time step may be greater than the edge or cell size in the dynamic region”。动网格的根子问题在这里,网格在变形,每一步都在拉伸压缩,变形量一旦超过单元尺寸的容忍范围,负体积就来了。再怎么调参数,只要网格在变形,这个风险就一直在。
重叠网格的思路完全不一样。它不靠网格变形来适应运动,而是准备两套网格,一套背景网格覆盖整个流场,一套组件网格包住运动部件,两套网格叠在一起,运动部件带着自己的组件网格在背景网格里移动。背景网格一动不动,组件网格也一动不动,网格质量从第一步到最后一步完全一样。论坛上有人总结得挺到位:“嵌套网格的最大特点,就是让流体仿真变得更为简单和快捷”,“不会出现负体积,网格质量不随边界移动而变化”。动网格是让网格去追着运动跑,重叠网格是让运动跑在网格里,两者的根本区别就在这里。
网格准备这一步跟动网格不一样。背景网格和组件网格分开画,在Workbench里各建一个网格单元,分别导入Fluent。背景网格就是整个计算域的网格,尺寸可以粗一些,用六面体或者多面体都行。组件网格包住运动部件,外围留一圈边界,这个边界在网格工具里就要指定为overset类型,不能等导进Fluent再改。两套网格的重叠区域要够厚,peraglobal的教程里明确说“建议重区域的网格最少有4个层”,重叠太薄的话供体单元找不到,orphan单元出来了计算照样崩。组件网格外围那圈overset边界到部件表面的距离,至少保证四层网格的厚度,运动范围大的部件还要再留宽一点。
边界条件这里跟常规设置不一样的地方就一个,组件网格的外边界设成overset类型。Fluent里Boundary Conditions面板里找到那个面,Type下拉框里选overset,其他所有边界条件照常设。背景网格的边界该是什么就是什么,入口出口壁面照旧。组件网格上的运动部件表面也是壁面,这跟动网格里设Moving Wall的逻辑一样,只是网格本身不参与变形。论坛上有个帖子把步骤写得很清楚:“Ensure that the ‘Overset’ BC is assigned in meshing”,“Set the overset boundary condition”。网格工具里如果没有指定overset类型,导进Fluent之后在Boundary Conditions里手动改也行,Type下拉框里选overset。
Overset Interface的创建在Fluent的GUI里点一下就行,Domain→Mesh Interfaces→Create,选要组合的zone,命名,点Create。Fluent自动做三件事:挖洞,把组件网格里不在计算区域内的单元标记为dead;重叠区域最小化,把多余的重叠单元也标记为dead;供体搜索,给每个receptor单元找到对应的donor单元。这三步做完之后,重叠区域的网格插值关系就建立好了。如果几何上有相交的壁面边界,比如转子跟定子之间的间隙,不加collar网格的话会产生orphan单元,计算照样出问题。padtinc的文档里还有几个限制要注意:overset interface不能包含固体单元区域,组件网格不能接非共形界面,背景网格之间不能有非共形界面,组件区域不能有周期性边界。
初始化之后要看一眼单元类型分布,确认没有orphan。Fluent里Display→Mesh→Cell Type,Solve cells显示绿色,Receptor cells显示蓝色,Donor cells显示红色,Dead cells不显示,Orphan cells显示成醒目的颜色。如果有orphan,回去把重叠区域的网格加密或者把组件网格的外围边界往外推一点。默认只显示1到2号类型的单元,想看orphan要敲TUI命令“/define/overset-interfaces/options/render-receptor-cells?”把渲染打开。

时间步长不用像动网格那么苛刻了,但也不能随便给。组件网格运动一个时间步的位移,不能超过组件网格里最小单元的尺寸。论坛上那个圆柱入水的帖子,球体初始速度2m/s,时间步从1e-8到1e-12试了一圈还是报负体积,问题不在时间步大小,在组件网格本身有质量问题,某些单元的尺寸小于球体一个时间步的位移量。重叠网格不需要Remeshing,网格质量是固定的,时间步只要保证运动位移不超过组件网格的最小单元尺寸就行。组件网格在运动部件附近加密到跟时间步匹配的尺度,比动网格里反复调Remeshing参数省事得多。
优先级设置在多组件的情况下用。背景网格的grid-priority设0,组件网格设1,优先级高的网格在重叠区域保留下来,优先级低的被挖掉。padtinc的教程里说“Assigning a higher priority to an individual zone means that this zone will be maintained over the adjacent ones”。两个运动部件互相靠近的时候,把两个组件的优先级都设成1,背景设0,Fluent在中间过渡,两边的网格都保留,不会互相挖掉。donor-priority-method选boundary-distance-based,供体搜索按离壁面的距离来选,两个部件靠近的时候重叠过渡的位置尽量在中间,不会偏到一边去。
双精度必须开。padtinc的文档里专门用加粗写了一句“It is recommended to use double-precision for all overset mesh problems”。重叠网格的插值误差比常规网格大,单精度的舍入误差积累起来可能让插值出来的物理量不守恒,双精度能把这个误差压下去。启动Fluent的时候选3ddp,不要选3d。
重叠网格的代价是计算量,同样的网格量下重叠区域多算一遍,内存和CPU时间都涨。但省下来的时间是调Remeshing参数和反复重跑的时间。螺旋泵那个算例如果一开始就用重叠网格,组件网格包住转子,背景网格覆盖泵腔,转子带着组件网格转,网格永远不变形,负体积根本不会出现。D:\Fluent_work\overset\ 下面那个泵腔的算例还没建,组件网格的边界层第一层高度和重叠层数是……
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删