关于二维模型的计算,这两种snappyHexMesh方法有什么不同,应该采用哪一个?
-
@东岳
谢谢李老师的回复!!这两种方法都是在数值计算前把front和back两个面(sides)的边界条件设置为empty后才进行计算的,边界设置成empty就是表明模型是二维的了。
在网格划分的过程中,我在blockMesh中将这两个面的边界设置为empty,
两种方法的区别就是:
方法一是:在使用snappyHexMesh前先将这两个面的边界改为wall,这样在snappyHexMesh过程中就没有图2的警示了,而且网格划分消耗的时间很少。在使用完snappyHexMesh后再把边界由wall改为empty进行数值计算。
方法二是:在使用snappyHexMesh时不修改front和back的边界条件,两个面的type依然是empty,这样就会出现图二的警示,而且计算时间很长。
但是这两种方法得到的cells和faces是相同的,就是points稍有不同,不过数值计算结果也是略有差异。所以实际最好采用哪种方法来划分网格进行二维数值计算呢。
方法一中我把front和back的边界改为wall后再使用snappyHexMesh,是考虑snappyHexMesh只能划分三维网格,所以边界的type如果是empty应该就不合适了,所以系统也会出现警示。但是仿真的是二维模型,所以在网格划分完成后再将这两个面的type改为empty。
-
这两种应该都不对
snappyHexMesh会在三个方向上都加密。对于二维网格,要求是 empty 方向上只有一层网格(或者层数要是一样的),用snappyHexMesh加密,empty方向上的网格层数可能在不同位置会不一样。你可以截图看一下,x,y,z,三个方向分别做一个slice,看看是不是我说的那样。如果empty方向上的网格不是一层,那么二维计算是有问题的。
为了得到empty方向上只有一层网格,有一个办法是先按照你描述的第一种方法用snappyHexMesh生成网格,然后,再用 extrudeMesh 来把某一个 empty patch 拉升一层网格,这样得到的就是常见的二维网格了。 -
@DY大世界 某个方向设置为 empty,那么这个方向的流场就不会再计算。以前的版本如果empty方向的网格不是固定层数,是无法计算的,checkMesh 也会报一个提示:
***Total number of faces on empty patches is not divisible by the number of cells in the mesh. Hence this mesh is not 1D or 2D.
经测试,现在新的版本可以计算,但是结果我没有验证过。从计算的角度来讲,即使这样算出来结果是合理的,也增加了很多没必要的计算,因为这样处理,网格数量会比单层的2维网格多很多。
另外,假设举个例子,一个方形计算区域,中心部分用snappyHexMesh进行了加密,然后x 方向设置为 empty ,那么你计算完的结果,在x 方向上不同位置的截面上流场可能是不一样的,因为网格数量可能不一样,这样显然跟二维计算的概念是不符合的。 -
@xpqiu @DY大世界
我也遇到这个问题了。看网上说的是先createPatch,就是说把empty的一个面先提取出来,然后用extrudeMesh把这个patch沿着垂直方向推一个网格,形成三维的网格。但是我发现,沿着那个方向竟然不是一层网格。原因在于悬挂节点,因为shm的时候用了refine的设置,加密的交界面是悬挂节点,这导致在extrude的时候没法是一层网格,见下图
首先是我按上述说法做出的沿厚度方向只有一层网格的图:
然后提取加密交接面的网格,外表看起来是一层网格
然而细看,竟然是两层网格
我就是通过patch extrude出来的一层网格,但是有的地方(主要是加密变化造成的悬挂节点的地方)还是出现两层网格,很疑惑。。 -
@Samuel-Tu 你好,最近自己也刚好尝试过一个二维算例,网格划分参照的是OpenFOAM/OpenFOAM-8/tutorials/incompressible/pimpleFoam/RAS/wingMotion这个自带算例。里面包括如何先用snappy划分,再利用extrudeMesh和createPatch。会不是顺序有哪里出错了呢