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. 使用openfoam但不采用贴体网格计算圆柱绕流的方法,请各位同学老师指点一下,谢谢

使用openfoam但不采用贴体网格计算圆柱绕流的方法,请各位同学老师指点一下,谢谢

已定时 已固定 已锁定 已移动 OpenFOAM
17 帖子 3 发布者 11.0k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 OItoCFD 最后由 编辑
    #4

    @oitocfd

    在谷歌一些相关资料后,很多方法是将f施加在Peqn里,看起来类似interFoam里重力施加的方式,初步尝试总是不收敛,暂时我应该遗漏了某些细节。

    我应该在每一步将额外体积力f施加在什么部分呢?

    一般是简单的把体积力插值到面上,然后加到phiHbyA里面就好。你是怎么加的

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

    O 1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 李东岳 最后由 李东岳 编辑
    #5

    @李东岳 李老师 是的 我尝试了体积力插到面上 代码是这样的 f是算好的。主要是三句:

    surfaceScalarField phiIB(fvc::flux(rAtU*f));
    
    fvScalarMatrix pEqn
        (
            fvm::laplacian(rAtU(), p) == fvc::div(phiHbyA)  + fvc::div(phiIB)
        );
    
    U = HbyA - rAtU*fvc::grad(p) + rAtU*f;
    
    

    即插值得到phiIB, 加到pEqn,然后下面是U = HbyA - rAtU*fvc::grad(p) + rAtU*f, 这样做无法收敛,时间步会无限小下去。不知道错在哪了,这是详细的Peqn.C:

    volScalarField rAU(1.0/UEqn.A());
    volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
    surfaceScalarField phiHbyA
    (
        "phiHbyA",
        fvc::flux(HbyA)
      + MRF.zeroFilter(fvc::interpolate(rAU)*fvc::ddtCorr(U, phi, Uf))
    );
    
    MRF.makeRelative(phiHbyA);
    
    if (p.needReference())
    {
        fvc::makeRelative(phiHbyA, U);
        adjustPhi(phiHbyA, U, p);
        fvc::makeAbsolute(phiHbyA, U);
    }
    
    tmp<volScalarField> rAtU(rAU);
    
    if (pimple.consistent())
    {
        rAtU = 1.0/max(1.0/rAU - UEqn.H1(), 0.1/rAU);
        phiHbyA +=
            fvc::interpolate(rAtU() - rAU)*fvc::snGrad(p)*mesh.magSf();
        HbyA -= (rAU - rAtU())*fvc::grad(p);
    }
    surfaceScalarField phiIB(fvc::flux(rAtU*f));
    
    
    
    if (pimple.nCorrPiso() <= 1)
    {
        tUEqn.clear();
    }
    
    // Update the pressure BCs to ensure flux consistency
    constrainPressure(p, U, phiHbyA, rAtU(), MRF);
    
    // Non-orthogonal pressure corrector loop
    while (pimple.correctNonOrthogonal())
    {
        Info << "!herehrehrehrehrheh" << nl;
        fvScalarMatrix pEqn
        (
            fvm::laplacian(rAtU(), p) == fvc::div(phiHbyA)  + fvc::div(phiIB)
        );
    
        pEqn.setReference(pRefCell, pRefValue);
    
        pEqn.solve();
    
        if (pimple.finalNonOrthogonalIter())
        {
            phi = phiHbyA - pEqn.flux();
        }
    }
    
    #include "continuityErrs.H"
    
    // Explicitly relax pressure for momentum corrector
    p.relax();
    
    U = HbyA - rAtU*fvc::grad(p) + rAtU*f;
    U.correctBoundaryConditions();
    fvOptions.correct(U);
    
    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 OItoCFD 最后由 编辑
    #6

    @oitocfd

    这样做无法收敛,时间步会无限小下去。

    那就是压力速度耦合这面没处理好,我有的时候植入一个新算法也会这样。你这一段也应该考虑IB力:

    if (pimple.finalNonOrthogonalIter())
        {
            phi = phiHbyA + fvc::div(phiIB) - pEqn.flux();
        }
    

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

    O 2 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 李东岳 最后由 编辑
    #7

    @李东岳 好的感谢李老师 我去尝试一下看看

    1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 李东岳 最后由 编辑
    #8

    @李东岳
    李老师 按您说的尝试了下 还是时间步无限减小

    surfaceScalarField phiIB(fvc::flux(rAtU*f));
    ...
    
    fvm::laplacian(rAtU(), p) == fvc::div(phiHbyA)  + fvc::div(phiIB)
    ...
    
    phi = phiHbyA - pEqn.flux() + phiIB;
    ...
    
    U = HbyA - rAtU*fvc::grad(p) +  rAtU*f;
    
    

    然后只能算步长0.02, 算2步到0.04秒就不收敛了,结果是错误的。全域一开始1m/s,入口1m/s,然后0.04s时速度和压强云图是这个样子,速度在圆柱一圈变得很大,到了20多米每秒,压强是一个很奇怪的完全一半一半对称的形状:
    ab0d4436-6582-40ed-84b2-07604315295d-image.png
    13b67897-5e3a-4300-a838-f00d150a25ba-image.png
    然后我也试着直接把f加到HbyA里。一样是不收敛的

    volVectorField HbyA(constrainHbyA(rAU*UEqn.H() + rAU*f, U, p));
    

    奇怪了,感觉加个f而已应该很简单才对呀。

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 OItoCFD 最后由 编辑
    #9

    @oitocfd 你这个力是耦合在一起的,不是解耦的,所以肯定比加一个重力之类的麻烦,感觉还是方程推导/植入上不consistent,需要更深层次debug

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

    O 1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 李东岳 最后由 编辑
    #10

    @李东岳 好的李老师 谢谢指点 我再认真去思考下方法

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 OItoCFD 最后由 编辑
    #11

    @oitocfd 你的第一种方法也是锯齿状的么

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

    O 2 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 李东岳 最后由 编辑
    #12

    @李东岳 不是 第一种方法用了个quadratic function插值 还是比较光滑的

    1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 李东岳 最后由 编辑
    #13

    @李东岳 就是圆柱是光滑的IB点连接的 速度是quadratic function从流体网格插值到光滑的一圈圆的散点上

    1 条回复 最后回复
  • V 离线
    V 离线
    Vortex
    写于 最后由 编辑
    #14

    我也是用的direct-forcing immersed boundary method,方法跟你说的类似,不过我做的是大气边界层山脉的模拟。浸入边界交界面内外侧的应力项要处理好,我感觉有可能是你没处理好这一步。

    O 1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 Vortex 最后由 编辑
    #15

    @vortex 可否请教下您的f是以哪种方式加的吗?耦合在peqn里面吗?

    V 1 条回复 最后回复
  • V 离线
    V 离线
    Vortex
    在 中回复了 OItoCFD 最后由 编辑
    #16

    @oitocfd 我没用OpenFOAM,用的求解器是lesgo,开源程序自带植入了浸没边界。它的实现我记得是没有耦合的,只在更新最后速度才加上IBM力,让固体内速度为0,详细的可参考这篇文章Modeling turbulent flow over fractal trees with renormalized numerical simulation。IBM的实现有很多变种的,有的确实是有耦合的。

    O 1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 Vortex 最后由 编辑
    #17

    @vortex 是的 我课题组的代码也是您说的这种 是两部映射法里面中间步用f更新了速度再求压力泊松方程方程再更新最终速度 然而改到openfoam发现出了点小问题:136:

    1 条回复 最后回复

  • 登录

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