Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. VOF添加斥力模型

VOF添加斥力模型

已定时 已固定 已锁定 已移动 OpenFOAM
27 帖子 2 发布者 17.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 学 在线
    学 在线
    学流体的小明 神
    在 2024年2月29日 09:23 中回复了 李东岳 最后由 编辑
    #3

    在用二维算例debug了,应该是斥力加得太突兀的原因,也许
    继续求指点

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年2月29日 09:47 最后由 编辑
    #4

    斥力方程写一下,或者sci发一下

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    学 1 条回复 最后回复 2024年2月29日 11:56
  • 学 在线
    学 在线
    学流体的小明 神
    在 2024年2月29日 11:56 中回复了 李东岳 最后由 编辑
    #5

    Short-range repulsive force model for near-contact interactions of bubbles
    Lingxin Zhang, Kai Peng, Xueming Shao, and Jian Deng
    Phys. Rev. E 106, 045110 – Published 25 October 2022
    https://doi.org/10.1103/PhysRevE.106.045110

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年2月29日 13:29 最后由 李东岳 编辑 2024年2月29日 23:58
    #6
    1. 遍历所有相分数在0-1直接的网格,并做标记;
    2. 在标记的网格上,通过方程10判断是要遍历的网格,取第i个网格,算Frep,i=∑NKhij3n;
    3. 对i遍历,有做标记网格上的所有的Frep,i,加到动量方程或压力方程

    你这样debug一下:

    用你的2D算例,网格搞到几千,然后算一下,

    1. 把你的相分数、斥力的云图弄出来,
    2. 显示斥力矢量图,类似下面这个图(显示的是网格上的表面张力)

    首先要把气泡往外推开的过程复现

    捕获.JPG


    他们挺有意思,之前还用多相VOF来算这个,一个气泡一哥相,暴力!

    Direct numerical simulation of deformable rising bubbles at low Reynolds numbers

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 学 在线
    学 在线
    学流体的小明 神
    写于2024年2月29日 16:22 最后由 学流体的小明 编辑 2024年3月1日 00:23
    #7

    斥力矢量图我晚些再搞一下。


    气泡往外推开是复现了的。
    现在发现压力参考点附近的异常是结果,原因还是斥力有些突兀。不使用压力参考点也会出现这种压力振荡。
    下面是不使用压力参考点的一次模拟。压力振荡是存在的,而且是和斥力的出现是同步的。
    8a4c8898-3505-472f-9d18-852baa3ba4e6-Screenshot from 2024-03-01 00-13-58.png

    最开始的时候气泡弹开了,如果不加斥力,上面两个气泡是会融合的。
    3bbsNoReferencevideo1.avi

    压力振荡最厉害的一段时间:3-4s。
    3bbsNoReferencevideo2.avi

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年2月29日 17:24 最后由 编辑
    #8

    一楼从你的描述来看有2个问题:1)空泡发生,2)压力不稳。视频算的可以啊,没看到空泡的发生,第一个问题解决了是吧?

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    学 1 条回复 最后回复 2024年3月1日 03:10
  • 学 在线
    学 在线
    学流体的小明 神
    在 2024年3月1日 03:10 中回复了 李东岳 最后由 编辑
    #9

    也不算是空泡,其实第二个视频中也可以看到有斥力的那对泡,左边的泡变小了,反正又是一个很奇怪的问题,只是在有压力参考点的时候,缺少的那部分气体跑到了压力参考点附近。
    压力不稳是最关键的问题,感觉解决它之后,第一个问题应该也能解决。

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年3月1日 08:37 最后由 编辑
    #10

    压力那个不太好搞。就像你上次发那个帖子一样。我记得你说3者选2就没问题,3者都开启就不行。我初步只能感觉是那个方向的问题,至于咋处理现在也没啥头绪。

    至于相分数变小,倒是可以继续debug一下。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 学 在线
    学 在线
    学流体的小明 神
    写于2024年3月2日 08:35 最后由 编辑
    #11

    网格上的表面张力是一个surfaceScalarField,要显示的话,看其他人的方法是使用foamToVTK先转化,再用paraview看,感觉有点麻烦。李老师您有什么快速便捷的方法吗?

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年3月3日 07:31 最后由 编辑
    #12

    surfaceScalarField是看不了,不过他那个表面张力是从体场插值过去的,你把体场输出就好了

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 学 在线
    学 在线
    学流体的小明 神
    写于2024年3月3日 07:50 最后由 编辑
    #13

    现在大致上解决了,确实是添加的斥力太大的问题,之前代码写得不太对,写成了K/h3∇α,而正确的表达式应该是Kh3∇α|∇α|,导致某些情况下两个气泡接近时候,由于界面上某些网格的梯度特别大,导致实际添加的斥力会非常非常大。
    现在修改了代码,之前的问题很大程度上解决了,还有一点问题是还是会出现添加斥力比较大的时候,因为总会有气泡不断接近到比较近的时候,从而产生一个比较大的斥力,也会导致全局的压力振荡。就比如下图中这些上下跳的曲线。
    f397b511-1230-4506-9a18-d34690048b6d-image.png


    表面张力是σκ∇α,和斥力的表达式还不一样,我再都算一下volScalarField,不往面上插值什么的,比较一下它俩。

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年3月3日 07:59 最后由 李东岳 编辑 2024年3月3日 16:01
    #14

    还有一点问题是还是会出现添加斥力比较大的时候,因为总会有气泡不断接近到比较近的时候,从而产生一个比较大的斥力

    是的,在最开始最开始你在讨论这个问题的时候,我就想到了可能会有这个问题。所以就跟你讨论了一下。因为我最近从OpenFOAM学习到一个方法来处理这个问题。

    你这个添加斥力的模型,从另外一种角度,可以近似的看做添加一种分散力。同理的一个现象,在气固流动那面,存在一个相压力模型,在相分数超过设定值的时候,添加一个分散力,将alpha打散。正常的算法就是在压力方程中,比如你得处理方式,把这个分散力加进去。但是OpenFOAM那面把这个问题在alpha方程中也处理了。我测试过,如果仅仅是压力方程处理,可能会导致发散(alpha越界)。如果压力方程+相方程同时处理,就非常稳定。

    我觉得你可以借鉴这个方法。

    http://dyfluid.com/reactingTwoPhaseEulerFoam.html

    PS 你这个斥力是1/h3,那面的力是exp指数级别的函数(最终是一个非常陡暴增,力会突然变得高几十个数量级)

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    学 1 条回复 最后回复 2024年3月3日 11:41
  • 学 在线
    学 在线
    学流体的小明 神
    在 2024年3月3日 11:41 中回复了 李东岳 最后由 编辑
    #15

    谢谢李老师提供的思路。我的理解是有两种方法:

    1. 处理相方程,粗略看了一下,感觉这个方法挺复杂。
    2. 可以改一改斥力的表达式,让它不那么大。

    我在输出两个volVectorField,用来比较斥力和表面张力的大小,具体编程上也想请教一下,控制体体心的alpha的单位梯度怎么写。我目前是这样的,单位梯度必须加一个1e-300防止发散。

    // Cell gradient of alpha
    const volVectorField gradAlpha(fvc::grad(alpha1));
    repulsion_Compare = repulsion_Sum*gradAlpha/(mag(gradAlpha)+dimensionedScalar(dimensionSet(0,-1,0,0,0,0,0), 1e-300));
    surfaceTensionMy=mixture.sigmaK()*gradAlpha;

    OpenFOAM在算表面张力的时候,算曲率 κ 的时候用到了面心的alpha单位梯度,也分享一下代码。

    const surfaceVectorField& Sf = mesh.Sf();
    // Cell gradient of alpha
    const volVectorField gradAlpha(fvc::grad(alpha1_, "nHat"));
    // Interpolated face-gradient of alpha
    surfaceVectorField gradAlphaf(fvc::interpolate(gradAlpha));
    // Face unit interface normal
    surfaceVectorField nHatfv(gradAlphaf/(mag(gradAlphaf) + deltaN_));
    correctContactAngle(nHatfv.boundaryFieldRef(), gradAlphaf.boundaryField());
    // Face unit interface normal flux
    nHatf_ = nHatfv & Sf;
    // Simple expression for curvature
    K_ = -fvc::div(nHatf_);
    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年3月4日 06:56 最后由 编辑
    #16

    可以改一改斥力的表达式,让它不那么大

    你直接调节那个K的值不就好了? 反正也是个经验参数。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 学 在线
    学 在线
    学流体的小明 神
    写于2024年3月4日 09:19 最后由 编辑
    #17

    K调太小的话,气泡间斥力无法弹开气泡,两个气泡会融合。
    现在还挺混乱下面这张图,左侧轴是压力测点的压力,右侧轴是volScalarField repulsion_Sum的最大值。

    1. 有的时候没有斥力,也有全局的压力下降,比如下面的椭圆圈出来的。
    2. 有的时候斥力生效,但是压力没问题。方框中基本水平的蓝色和橙色线。
    3. 总体来说斥力生效会极大地增加压力出问题的风险。

    image.png

    红色箭头是斥力,白色箭头是表面张力,斥力还是比表面张力大一些。
    92d06eaf-5c00-426d-8862-7dd4778420c0-image.png

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年3月5日 10:42 最后由 编辑
    #18

    才想起来,你这个还是周期性网格,所以需要给定压力参考点,我自己简单算了个纯粹的气泡上升,压力还没啥问题。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    学 1 条回复 最后回复 2024年3月6日 09:27
  • 学 在线
    学 在线
    学流体的小明 神
    在 2024年3月6日 09:27 中回复了 李东岳 最后由 编辑
    #19

    之前试算了很多,发现压力参考点不是最根本的原因,最根本的原因还是添加了这个斥力源项导致的流场压力不稳定。不用压力参考点也算出来了这种压力振荡。
    应该是和具体的代码有关系,和SIMPLE算法里面预测方程有关系。
    我没有往UEqn中加这个斥力项,仅加在了phig里面,也就是在压力泊松方程里面加了,后面速度修正那一行代码中,斥力也是体现在phig当中。
    李老师您怎么写的代码?

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年3月6日 10:13 最后由 编辑
    #20

    我没有写全,就在function里面测试了一下这个力的大小(很多参数都是拍脑袋硬植入):

    functions
    {
    setDeltaT
    {
    type coded;
    libs ("libutilityFunctionObjects.so");
    writeControl writeTime;
    executeControl timeStep;
    code
    #{
    #};
    codeExecute
    #{
    const volScalarField& alpha
    (
    mesh().lookupObject<volScalarField>("alpha.air")
    );
    const surfaceVectorField& Sf = mesh().Sf();
    const volVectorField gradAlpha("gradAlpha", fvc::grad(alpha));
    surfaceVectorField gradAlphaf(fvc::interpolate(gradAlpha));
    const dimensionedScalar deltaN_
    (
    "deltaN",
    1e-8/pow(average(mesh().V()), 1.0/3.0)
    );
    surfaceVectorField nHatfv(gradAlphaf/(mag(gradAlphaf) + deltaN_));
    volVectorField nHatv("nHatv", gradAlpha/(mag(gradAlpha) + deltaN_));
    surfaceScalarField nHatf = nHatfv & Sf;
    volScalarField K("K", -fvc::div(nHatf));
    volScalarField interface("interface", alpha);
    volVectorField force("force", nHatv);
    List<label> markedCell;
    forAll(mesh().C(), i)
    {
    force[i] = Zero;
    if (alpha[i] < 0.99 && alpha[i] > 0.01)
    {
    interface[i] = 1.0;
    markedCell.append(i);
    }
    else
    {
    interface[i] = 0.0;
    }
    }
    forAll(markedCell, i)
    {
    label celli = markedCell[i];
    forAll(markedCell, j)
    {
    label cellj = markedCell[j];
    scalar dij = mag(mesh().C()[celli] - mesh().C()[cellj]);
    scalar posneg = nHatv[celli] & nHatv[cellj];
    if (posneg < 0.0)
    {
    if (dij < 0.15)
    {
    scalar K = 1e-2;
    force[celli] += K*nHatv[celli]/pow3(dij);
    }
    }
    }
    }
    markedCell.clear();
    K.write();
    nHatv.write();
    gradAlpha.write();
    force.write();
    interface.write();
    #};
    }
    }

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 学 在线
    学 在线
    学流体的小明 神
    写于2024年3月6日 13:52 最后由 编辑
    #21

    李老师,想请教一下源项的添加的问题。
    比如我现在在有一个repulsion源项,要想植入,应该是有三个地方要添加。


    一,速度预测方程,即UEqn.H中的fvMatrix UEqn。但我不清楚这里是否要加上源项。
    加的理由是:fvOptions这种人工添加的源项都在。
    不加的理由是:写的那个icoFoam解析,以及这里实际上只保留了对流项和粘度项,压力、表面张力和重力都没有加,这个斥力在形式上是和表面张力有关的,就像表面张力那样处理。

    fvVectorMatrix UEqn
        (
            fvm::ddt(rho, U) + fvm::div(rhoPhi, U)
          + MRF.DDt(rho, U)
          + turbulence->divDevRhoReff(rho, U)
         ==
            fvOptions(rho, U)
          + repulsion_Vector // add
        );
    

    二,真实速度方程,一般的想法都是加上这个源项,就是最后的速度修正项是
    2a89615d-1ebd-4009-b74d-ce99034e9d16-image.png
    但是在reactingTwoPhaseEulerFoam中,我看到这些源项都是直接加到最后的速度上的,不知道这里是您省略它们的具体形式了,还是这些M确实就不除以Ad,p
    746e3e97-6f3a-4604-84dd-ef613a0b6a02-image.png
    46c5812f-67d5-4089-8201-15364fb3869c-image.png
    就是这两种方式应该是哪一种?还是两种都可以?


    三,上面两种不同方式的速度方程,对应不同的压力泊松方程,也就差个Ad,p

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年3月6日 14:29 最后由 李东岳 编辑 2024年3月6日 22:30
    #22

    速度预测方程,即UEqn.H中的fvMatrix UEqn。但我不清楚这里是否要加上源项。

    不需要加

    源项你直接1)加到phi上面组建压力方程,2)最后的速度更新要加上源项

    我那个M都忘记除掉A了,是要除掉,我有遗漏,我周末更新过去
    http://dyfluid.com/reactingTwoPhaseEulerFoam.html 这个里面41-46之前写的一直没更新 29之前是我最近更新的 没问题

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    学 1 条回复 最后回复 2024年3月7日 11:18
2024年2月29日 13:49

12/27

2024年3月3日 07:31

未读 15
2024年9月11日 11:10
  • 登录

  • 登录或注册以进行搜索。
12 / 27
  • 第一个帖子
    12/27
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]