OF中在有限的计算域中怎么消去边界对气泡的影响
-
各位老铁你们好,我想请教OpenFOAM的一些问题,主要内容是
- 使用blockMesh内存不够问题
- 计算域不大的算例,边界会对计算结果产生很大影响,怎样设置边条可以达到精确结果
- dynamicRefineFvMesh相关
以下问题均在v8版本运行得到的,求解器是用的compressibleInterFoam,问题主要和气泡有关。
1. 关于blockMesh能否画超大网格
我想在超算上画一个网格,尺寸是$500 \times 500 \times 500$的立方体网格,使用方法是直接blockMesh,但是问题是这样做的话会报错,目测是超算的内存不够(已经128G),ICEM好像也有限制,大概$400^3$左右;
现在的问题是怎样用blockMesh画$500^3$或更大的网格,可以并行画吗?还是只能加内存?
2. 对于及串气泡组,如何设置边界条件并消去边界对它的影响
想要模拟的是这样子的(记算例A):
它的网格是这样子的:
convertToMeters 0.01; box_len 1; z_len 0.25; node 200; z_node 50; vertices ( (0 0 0) ($box_len 0 0) ($box_len $box_len 0) (0 $box_len 0) (0 0 $z_len) ($box_len 0 $z_len) ($box_len $box_len $z_len) (0 $box_len $z_len) ); blocks ( hex (0 1 2 3 4 5 6 7) ($node $node $z_node) simpleGrading (1 1 1) ); edges ( ); boundary ( box_wall { type patch; faces ( (0 4 7 3)//lift (2 6 5 1)//right (4 5 6 7)//frant (0 3 2 1)//back_xoy ); } syclic_top { type cyclic; neighbourPatch syclic_bottom; faces ( (3 7 6 2)//top ); } syclic_bottom { type cyclic; neighbourPatch syclic_top; faces ( (1 5 4 0)//bottom_xoz ); } ); mergePatchPairs ( );
(图中上下是cyclic的边界条件)
其他边界条件类似:
FoamFile { version 2.0; format ascii; class volVectorField; object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 1 -1 0 0 0 0]; internalField uniform (0 0 0); boundaryField { box_wall { type pressureInletOutletVelocity; value $internalField; } "syclic_.*" { type cyclic; value $internalField; } } // ************************************************************************* //
结果是这样子的:
右图上下是cyclic边界条件,气泡接近计算边界了
一开始感觉似乎应该是这个样子的,但是不太放心,后来把六个面都换成patch类型(记算例B),发现结果类似,都是慢慢变成椭圆泡。
而当我用问题一中的网格($300^3$),边界设置同算例B(记这个算例为C),发现半径结果如下:
红色是理论解,绿色是算例C的结果,蓝色是算例B的结果,橙色是算例A的结果。对比A,B发现近边界对结果影响及其巨大,即使设置成流体自由出入的方法也不行。
因此想咨询下有比较好的解决方法吗?既用小的计算域同时又能消除边界的强影响,从而达到使用cyclic边界条件
3.自适应网格对初始网格较小的情况下似乎不太实用
在dynamicFvMeshDict修改文件为:
dynamicFvMesh dynamicRefineFvMesh; refineInterval 1; field alpha.water;//加密什么场 lowerRefineLevel 0.001; upperRefineLevel 0.999; unrefineLevel 20; nBufferLayers 3; maxRefinement 4; maxCells 1000000; correctFluxes ( (phi none) (nHatf none) (rhoPhi none) (alphaPhi0.water none) (ghf none) ); dumpLevel true;
一般来说,我想用这样的自适应网格来处理背景网格不是那么密集的算例。理想结果是既能用不是太密的均匀背景网格算好液体中的压力、速度等物理量,又可以用自适应网格在边界进行加密达到好的捕捉效果。
但是问题是在不密集的背景网格下使用setFields命令后,初始得到的气泡过于小,从而再局部加密就成为一个格子的方形气泡;除此之外,网格多了锯齿感比较明显,这个是不可避免的吗?
这块的主要问题还是如标题所描述的,能不能让自适应网格捕捉0步的边界,在较粗的背景网格下,让第一步就有非常光滑、密集的边界呢?该怎么操作?
感谢!
暂时就三个问题,希望大佬们给点帮助~
(另外还有个问题,如果一次性模拟多个气泡,能不能有捕捉每个气泡的方法,同时也需要考虑了气泡的运动)
-
@李东岳 在 OF中在有限的计算域中怎么消去边界对气泡的影响 中说:
既用小的计算域同时又能消除边界的强影响,从而达到使用cyclic边界条件
算法上倒是有一些。比如那些advection边界条件。但是扩大计算域是最稳妥的方法。你这个是空炮么?可以设置非均匀网格处理。外围网格非常非常稀疏,里面足够细,也不会太多的网格。
锯齿网格可能开始会有,但随着计算,表面张力的作用会变平
李老师你好,算例的确是计算空泡的;
扩大计算域的话,可能没办法满足我的需求,原因如下:
- 气泡的间距是算例的一个主要变量,很需要近距离的情况
- 如果足够远的话,循环边界条件可能就没有作用了
- 非均匀网格的话,一方面无法确保在流体中的压力、速度的正确捕捉;其次在网格密-疏位置处,是不是会使得结果误差比较大呢?
- 如果一开始就是锯齿网格的话,那后续的计算精度感觉不能保证。原因是在高的内压驱动下,初始泡的大小决定之后的每步计算结果,所以一开始的边界捕捉及其重要
所以还是想咨询下,能不能一开始在0文件中就能很好的捕捉相分数场,粗的背景网格+细气泡边界网格,之后就用自适应网格计算。
其次还问下advection边界条件的使用方法或相关链接
麻烦李老师了~