CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    OF中在有限的计算域中怎么消去边界对气泡的影响

    OpenFOAM
    2
    5
    504
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • Z
      zhendong 最后由 编辑

      各位老铁你们好,我想请教OpenFOAM的一些问题,主要内容是

      • 使用blockMesh内存不够问题
      • 计算域不大的算例,边界会对计算结果产生很大影响,怎样设置边条可以达到精确结果
      • dynamicRefineFvMesh相关

      以下问题均在v8版本运行得到的,求解器是用的compressibleInterFoam,问题主要和气泡有关。

      1. 关于blockMesh能否画超大网格

      我想在超算上画一个网格,尺寸是$500 \times 500 \times 500$的立方体网格,使用方法是直接blockMesh,但是问题是这样做的话会报错,目测是超算的内存不够(已经128G),ICEM好像也有限制,大概$400^3$左右;

      86f478b6-0d6e-49a7-9391-0bf671b1e223-image.png

      现在的问题是怎样用blockMesh画$500^3$或更大的网格,可以并行画吗?还是只能加内存?

      2. 对于及串气泡组,如何设置边界条件并消去边界对它的影响

      想要模拟的是这样子的(记算例A):

      a996403c-d709-4ab6-bec2-86ba37ccb82a-image.png

      它的网格是这样子的:

      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;
          }
      }
      
      // ************************************************************************* //
      
      

      结果是这样子的:

      bc28ffa5-dcfb-4a0a-9577-a18915bc993d-image.png

      右图上下是cyclic边界条件,气泡接近计算边界了

      一开始感觉似乎应该是这个样子的,但是不太放心,后来把六个面都换成patch类型(记算例B),发现结果类似,都是慢慢变成椭圆泡。

      而当我用问题一中的网格($300^3$),边界设置同算例B(记这个算例为C),发现半径结果如下:

      847e9b63-884e-42a4-87e3-a04b1c757f63-image.png

      红色是理论解,绿色是算例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命令后,初始得到的气泡过于小,从而再局部加密就成为一个格子的方形气泡;除此之外,网格多了锯齿感比较明显,这个是不可避免的吗?

      7bd23c8e-8df6-481b-b9f7-63a8f1f9d39c-image.png

      这块的主要问题还是如标题所描述的,能不能让自适应网格捕捉0步的边界,在较粗的背景网格下,让第一步就有非常光滑、密集的边界呢?该怎么操作?

      感谢!

      暂时就三个问题,希望大佬们给点帮助~

      (另外还有个问题,如果一次性模拟多个气泡,能不能有捕捉每个气泡的方法,同时也需要考虑了气泡的运动)

      Z 1 条回复 最后回复 回复 引用
      • Z
        zhendong @zhendong 最后由 编辑

        @zhendong 3D_string_bubble.tar.xz

        1 条回复 最后回复 回复 引用
        • 李东岳
          李东岳 管理员 最后由 编辑

          先回复你第一个简单的,上亿的网格确实可能会有内存问题,很有可能生成不了,blockMesh无法并行。

          CFD高性能服务器 http://dyfluid.com/servers.html

          李东岳 1 条回复 最后回复 回复 引用
          • 李东岳
            李东岳 管理员 @李东岳 最后由 编辑

            既用小的计算域同时又能消除边界的强影响,从而达到使用cyclic边界条件

            算法上倒是有一些。比如那些advection边界条件。但是扩大计算域是最稳妥的方法。你这个是空炮么?可以设置非均匀网格处理。外围网格非常非常稀疏,里面足够细,也不会太多的网格。

            锯齿网格可能开始会有,但随着计算,表面张力的作用会变平

            CFD高性能服务器 http://dyfluid.com/servers.html

            Z 1 条回复 最后回复 回复 引用
            • Z
              zhendong @李东岳 最后由 编辑

              @李东岳

              @李东岳 在 OF中在有限的计算域中怎么消去边界对气泡的影响 中说:

              既用小的计算域同时又能消除边界的强影响,从而达到使用cyclic边界条件

              算法上倒是有一些。比如那些advection边界条件。但是扩大计算域是最稳妥的方法。你这个是空炮么?可以设置非均匀网格处理。外围网格非常非常稀疏,里面足够细,也不会太多的网格。

              锯齿网格可能开始会有,但随着计算,表面张力的作用会变平

              李老师你好,算例的确是计算空泡的;

              扩大计算域的话,可能没办法满足我的需求,原因如下:

              • 气泡的间距是算例的一个主要变量,很需要近距离的情况
              • 如果足够远的话,循环边界条件可能就没有作用了
              • 非均匀网格的话,一方面无法确保在流体中的压力、速度的正确捕捉;其次在网格密-疏位置处,是不是会使得结果误差比较大呢?
              • 如果一开始就是锯齿网格的话,那后续的计算精度感觉不能保证。原因是在高的内压驱动下,初始泡的大小决定之后的每步计算结果,所以一开始的边界捕捉及其重要

              所以还是想咨询下,能不能一开始在0文件中就能很好的捕捉相分数场,粗的背景网格+细气泡边界网格,之后就用自适应网格计算。

              其次还问下advection边界条件的使用方法或相关链接

              麻烦李老师了~

              1 条回复 最后回复 回复 引用
              • First post
                Last post