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. Coupled level set-VOF方法

Coupled level set-VOF方法

已定时 已固定 已锁定 已移动 OpenFOAM
10 帖子 5 发布者 6.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • Z 离线
    Z 离线
    Zhujh
    写于2021年9月22日 12:19 最后由 李东岳 编辑 2021年9月22日 20:26
    #1

    各位大佬们好,我是研究波浪与结构物相互作用的,之前看到了下面这篇文章 https://www.sciencedirect.com/science/article/pii/S0301932206001832?via%3Dihub ,因为用VOF捕捉自由液面会存在钝化的问题,特别是想研究破碎波的时候,水气交界面的网格需要非常细,于是就想用一下这个方法。

    ae8a8d4d-90d6-4702-a0b3-2fded1619f11-image.png

    根据这篇文章网上有公开的一部分代码,我就照着植入到了interFoam里面,取了个名字叫clsinterFoam,下面几张是我完成后对比两个求解器气泡上升的结果,可以看到clsinterFoam确实对交界面的捕捉更到位(左边是interFoam,右边是clsinterFoam)。

    72aa53d8-7890-48af-9176-ddbec5952d3a-image.png
    3e7dcaaf-8c2b-4df9-8d63-f18acf57a2c7-image.png
    4617006d-99d1-4499-9603-3b426f84ef57-image.png
    但是当我换到溃坝的算例的时候,出现了奇怪的问题,后处理结果来看,水体好像变得不连续了,最后会扩散到整个计算域。看上去像是没有了重力,但是算例里面我是加了的,想请教一下各位大佬,看看问题出在哪儿。
    1635111b-c932-47b4-a78b-16eb6c7cecd5-image.png 6fd36484-cc7d-4e10-b0ac-e8f6052c7e45-image.png
    以下是在interFoam上改的部分代码:

    #include "mappingPsi.H"
    #include "solveLSFunction.H"
    #include "calcNewCurvature.H"
    turbulence->validate();
    if (!LTS)
    {
    #include "CourantNo.H"
    #include "setInitialDeltaT.H"
    }
    Info<< "\nStarting time loop\n" << endl;
    while (runTime.run())
    {
    #include "readDyMControls.H"
    if (LTS)
    {
    #include "setRDeltaT.H"
    }
    else
    {
    #include "CourantNo.H"
    #include "alphaCourantNo.H"
    #include "setDeltaT.H"
    }
    runTime++;
    Info<< "Time = " << runTime.timeName() << nl << endl;
    // --- Pressure-velocity PIMPLE corrector loop
    while (pimple.loop())
    {
    if (pimple.firstIter() || moveMeshOuterCorrectors)
    {
    mesh.update();
    if (mesh.changing())
    {
    // Do not apply previous time-step mesh compression flux
    // if the mesh topology changed
    if (mesh.topoChanging())
    {
    talphaPhi1Corr0.clear();
    }
    gh = (g & mesh.C()) - ghRef;
    ghf = (g & mesh.Cf()) - ghRef;
    MRF.update();
    if (correctPhi)
    {
    // Calculate absolute flux
    // from the mapped surface velocity
    phi = mesh.Sf() & Uf();
    #include "correctPhi.H"
    // Make the flux relative to the mesh motion
    fvc::makeRelative(phi, U);
    mixture.correct();
    }
    if (checkMeshCourantNo)
    {
    #include "meshCourantNo.H"
    }
    }
    }
    #include "alphaControls.H"
    #include "alphaEqnSubCycle.H"
    #include "mappingPsi.H"
    #include "solveLSFunction.H"
    #include "calcNewCurvature.H"
    #include "updateFlux.H"
    mixture.correct();
    if (pimple.frozenFlow())
    {
    continue;
    }
    #include "UEqn.H"
    // --- Pressure corrector loop
    while (pimple.correct())
    {
    #include "pEqn.H"
    }
    if (pimple.turbCorr())
    {
    turbulence->correct();
    }
    }
    // reInitialise the alpha equation
    if (runTime.outputTime())
    {
    Info << "Overwriting alpha" << nl << endl;
    alpha1 = H;
    volScalarField& alpha10 = const_cast<volScalarField&>(alpha1.oldTime());
    alpha10 = H.oldTime();
    //const_cast<volScalarField&>(alpha1.storeOldTime()()) = H.oldTime();
    }
    runTime.write();
    runTime.printExecutionTime(Info);
    }
    Info<< "End\n" << endl;
    return 0;
    //mappingPsi.H
    // mapping alpha value to psi0
    psi0 == (double(2.0)*alpha1-double(1.0))*gamma;
    //solvevelSFunction.H
    // solve Level-Set function as the re-initialization equation
    Info<< "solve the reinitialization equation"
    << nl << endl;
    psi == psi0;
    for (int corr=0; corr<int(epsilon.value()/deltaTau.value()); corr++)
    {
    psi = psi + psi0/mag(psi0)*(double(1)-mag(fvc::grad(psi)*dimChange))*deltaTau;
    psi.correctBoundaryConditions();
    }
    // update Dirac function
    forAll(mesh.cells(),celli)
    {
    if(mag(psi[celli]) > epsilon.value())
    delta[celli] = double(0);
    else
    delta[celli] = double(1.0)/(double(2.0)*epsilon.value())*(double(1.0)+Foam::cos(M_PI*psi[celli]/epsilon.value()));
    };
    // update Heaviside function
    forAll(mesh.cells(),celli)
    {
    if(psi[celli] < -epsilon.value())
    H[celli] = double(0);
    else if(epsilon.value() < psi[celli])
    H [celli] = double(1);
    else
    H[celli] = double(1.0)/double(2.0)*(double(1.0)+psi[celli]/epsilon.value()+Foam::sin(M_PI*psi[celli]/epsilon.value())/M_PI);
    };
    //calcNewCurvature.H
    // calculate normal vector
    volVectorField gradPsi(fvc::grad(psi));
    surfaceVectorField gradPsif(fvc::interpolate(gradPsi));
    surfaceVectorField nVecfv(gradPsif/(mag(gradPsif)+scalar(1.0e-6)/dimChange));
    surfaceScalarField nVecf(nVecfv & mesh.Sf());
    // calculate new curvature based on psi (LS function)
    C == -fvc::div(nVecf);
    //updataFlux.H
    {
    word alphaScheme("div(phi,alpha)");
    word alpharScheme("div(phirb,alpha)");
    // Standard face-flux compression coefficient
    surfaceScalarField phic(mixture.cAlpha()*mag(phi/mesh.magSf()));
    surfaceScalarField::Boundary& phicBf = phic.boundaryFieldRef();
    //surfaceScalarField phic(mag(phi/mesh.magSf()));
    // Add the optional isotropic compression contribution
    if (icAlpha > 0)
    {
    phic *= (1.0 - icAlpha);
    phic += (mixture.cAlpha()*icAlpha)*fvc::interpolate(mag(U));
    }
    // Do not compress interface at non-coupled boundary faces
    // (inlets, outlets etc.)
    forAll(phic.boundaryField(), patchi)
    {
    fvsPatchScalarField& phicp = phicBf[patchi];
    if (!phicp.coupled())
    {
    phicp == 0;
    }
    }
    surfaceScalarField phir(phic*nVecf);
    surfaceScalarField phiAlpha
    (
    fvc::flux
    (
    phi,
    alpha1,
    alphaScheme
    )
    + fvc::flux
    (
    -fvc::flux(-phir, scalar(1) - alpha1, alpharScheme),
    alpha1,
    alpharScheme
    )
    );
    MULES::explicitSolve(alpha1, phi, phiAlpha, 1, 0);
    rhoPhi = phiAlpha*(rho1 - rho2) + phi*rho2;
    }
    李 1 条回复 最后回复 2021年9月22日 12:32
  • 李 在线
    李 在线
    李东岳 管理员
    在 2021年9月22日 12:32 中回复了 Zhujh 最后由 编辑
    #2

    @zhujh 看起来非常有意思。你那个算的比VOF强很多。不过我要收拾行李去杭州了。只能国庆回来能详细看看了。但愿其他大佬能帮到你。比如 @队长别开枪

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

    Z 1 条回复 最后回复 2021年9月22日 12:38
  • Z 离线
    Z 离线
    Zhujh
    在 2021年9月22日 12:38 中回复了 李东岳 最后由 编辑
    #3

    @李东岳 谢谢谢谢李老师!!这个是我20年的暑假整的,但是当时没整出来,今年才发了小论文,下午注册的账号,我可太激动了!马上就发了一贴。
    补充一下就是气泡那个模拟,两个求解器是用的同一套网格。

    1 条回复 最后回复
  • S 离线
    S 离线
    Shihang Chen
    写于2023年12月23日 05:31 最后由 编辑
    #4

    @Zhujh 您好,也采用了与您基本相同的CLSVOF方法进行计算,然而对于毛细张力主导的问题,这个方法表现出了更强的虚假流动(寄生流动)的问题,如无重力状态下的水滴。请问您遇到过类似的问题么?同时我也参考fluent里面的两种抑制虚假流动方法(密度和H函数),但是收效甚微,想问下您有什么建议吗

    C 1 条回复 最后回复 2024年11月14日 01:07
  • E 离线
    E 离线
    EricLiu
    写于2024年11月13日 04:03 最后由 编辑
    #5

    @Zhujh @Shihang-Chen 两位大佬好,请问你们用到的CLSVOF 方法有相关的代码资源吗,我最近也打算结合CLS和VOF方法,但是没有找到合适的切入点,openfoam这块属于刚开始学

    S 1 条回复 最后回复 2024年11月13日 04:07
  • S 离线
    S 离线
    Shihang Chen
    在 2024年11月13日 04:07 中回复了 EricLiu 最后由 编辑
    #6

    @EricLiu 不是大佬。这个讨论顶部文章附带一些代码,或者直接github搜索clsvof也能有很多收获。

    1 条回复 最后回复
  • E 离线
    E 离线
    EricLiu
    写于2024年11月13日 04:13 最后由 编辑
    #7

    @Shihang-Chen 十分感谢,我去查一下

    1 条回复 最后回复
  • C 离线
    C 离线
    capillaryFix
    在 2024年11月14日 01:07 中回复了 Shihang Chen 最后由 编辑
    #8

    @Shihang-Chen 关于spurious currents/velocities,我们此前在OpenFOAM里植入了一个非常简单但是可行的方法,代码量与植入难度不大,具体请参考:https://www.sciencedirect.com/science/article/pii/S1877750323002557

    S 李 2 条回复 最后回复 2024年11月14日 02:03
  • S 离线
    S 离线
    Shihang Chen
    在 2024年11月14日 02:03 中回复了 capillaryFix 最后由 编辑
    #9

    @capillaryFix 太好了,感谢感谢,我会好好看看。我目前一直使用的消除寄生流的方法是基于sharpen surface model来的,这个效果也是很好。

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    在 2024年11月14日 05:37 中回复了 capillaryFix 最后由 编辑
    #10

    @capillaryFix 这个流弊,老铁

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

    1 条回复 最后回复
2021年9月22日 12:19

2/10

2021年9月22日 12:32

未读 8
2024年11月14日 05:37
  • 登录

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