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. 关于piso循环的二次修正的一个疑问

关于piso循环的二次修正的一个疑问

已定时 已固定 已锁定 已移动 OpenFOAM
25 帖子 11 发布者 28.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    Him
    写于 最后由 编辑
    #2

    矩阵A跟向量H应该是一样的,但是我记得书上说第二次更正的时候需要用到第一次更正的值(速度跟压力都是)

    1 条回复 最后回复
  • H 离线
    H 离线
    Him
    写于 最后由 编辑
    #3

    你说得有道理,压力方程的源在第二次修的时候看起来跟第一次修正时候的源是一样的。

    不清楚这个东西volVectorField HbyA("HbyA", U);是不是跟上一次修正最后的更新速度有关系。

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    写于 最后由 编辑
    #4

    OpenFOAM认为在低库朗数情况下,动量方程中的非线性项 $\nabla \cdot (\textbf u \textbf u)$ 对系统的影响远比速度压力耦合对系统的影响小,因此在循环时不更新速度。

    W 1 条回复 最后回复
  • H 离线
    H 离线
    Him
    写于 最后由 编辑
    #5

    你有比较过带fvc::interpolate(rAU)*fvc::ddtCorr(U, phi)跟不带它的结果么?

    1 条回复 最后回复
  • H 离线
    H 离线
    Him
    写于 最后由 编辑
    #6

    这个问题我应该很早就告诉你答案了,以下是$\nabla$-气固大神的回复:

    那个HbyA在第二个piso loop的时候的值不同了,但是A是不变的,所以H的值使用了上一个piso loop最后的U。

    在2~3次修正之后,最后的U才认为是守恒的。

    1 条回复 最后回复
  • yhdthuY 离线
    yhdthuY 离线
    yhdthu 大神
    写于 最后由 编辑
    #7

    同问,这个非正交修正到底是个什么意思

    长风破浪会有时,直挂云帆济沧海

    C 1 条回复 最后回复
  • C 离线
    C 离线
    CFD中文网
    在 中回复了 yhdthu 最后由 编辑
    #8

    @yhdthu
    在离散梯度的时候,面法相梯度只有正交网格的时候计算才是精准的。对于非正交网格,openfoam引入了修正,就是非正交修正。不过这个修正会降低对角占优引起不稳定,因此多试试看,limited一下。

    参考:Jasak these, page 84

    CFD中国标准用户测试帐号
    目前由徐笑笑登录

    yhdthuY H 2 条回复 最后回复
  • yhdthuY 离线
    yhdthuY 离线
    yhdthu 大神
    在 中回复了 CFD中文网 最后由 李东岳 编辑
    #9

    @cfd-china 谢谢回复,是不是在求解
    fvm::laplacian(rAU, p) == fvc::div(phiHbyA)
    的时候,Ap和An中包含了梯度离散项的原因,所以在反复迭代中产生值的变化?

    长风破浪会有时,直挂云帆济沧海

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #10

    piso循环的二次修正是建立在第一次修正的基础上的。第二次修正的连续性方程是涉及到u**。上面的代码里,UEqn并没有做更新。如果忽略函数fvc::ddtCorr(U, phi),pEqn也是没有变动的。
    问题1: 这是不是就意味着对同一个pEqn重复一次迭代运算?

    虽然构建的速度矩阵Ueqn没有更新,但是HbyA有变化,因此求解的pEqn不是同一个pEqn

    问题2:我对问题1的理解是,在icoFoam的算法里,速度u通过连续性方程被隐性的耦合到了pEqn里面。第二次的修正是没有必要的。这与原始的PISO算法有区别。请问这样的理解对吗?

    不是很清楚你说的哪个二次修正,如果你说的是楼上指的非正交修正,一般情况下不需要进行,除非在那个potentialFoam中。因为这个求解器没有进行速度-压力耦合迭代。

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

    Y 2 条回复 最后回复
  • H 离线
    H 离线
    hongfu2233
    在 中回复了 CFD中文网 最后由 CFD中文网 编辑
    #11

    @cfd-china
    在非正交修正的循环内即,

    fvScalarMatrix pEqn
                    (
                        fvm::laplacian(rAU, p) == fvc::div(phiHbyA)//公式(26),有关div(phiHbyA)请参考:更新3
                    );
       pEqn.setReference(pRefCell, pRefValue);
                    pEqn.solve();//公式(26)
    

    反复计算pEqn,rAU与phiHbyA 都不变,每次更新的p也就不变啊,看不出来非正交修正体现在哪个地方,请问这里怎么理解?

    李东岳李 程 2 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 hongfu2233 最后由 编辑
    #12

    @hongfu2233

    Jasah建议一般情况下不进行压力非矩形修正,因为本身SIMPLE,PISO算法就可以进行速度压力的修正计算。如果要进行这一部分修正,隐形的每一次新的计算都调用了新的非正交修正。并且是迭代进行的,see:

    if
    (
      corr == nCorr-1 && nonOrth == nNonOrthCorr
    )
    {
      pEqn.solve(mesh.solver("pFinal"));
    }
    else
    {
      pEqn.solve();
    }
    

    这个代码实际上做的就是potentiaoFoam求解,然而细致的解析需要首先对非矩形修正做分析,目前并没有足够的添加内容。你可以运行potentialFoam算例看压力非矩形修正的效果。

    OpenFOAM编程指南里面有详细的对比。

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

    H 赵 程 3 条回复 最后回复
  • H 离线
    H 离线
    hongfu2233
    在 中回复了 李东岳 最后由 编辑
    #13

    @李东岳 多谢啊!我去看看

    1 条回复 最后回复
  • Y 离线
    Y 离线
    yuan_neu
    在 中回复了 李东岳 最后由 编辑
    #14

    @李东岳

    @李东岳 在 关于piso循环的二次修正的一个疑问 中说:

    piso循环的二次修正是建立在第一次修正的基础上的。第二次修正的连续性方程是涉及到u**。上面的代码里,UEqn并没有做更新。如果忽略函数fvc::ddtCorr(U, phi),pEqn也是没有变动的。
    问题1: 这是不是就意味着对同一个pEqn重复一次迭代运算?

    虽然构建的速度矩阵Ueqn没有更新,但是HbyA有变化,因此求解的pEqn不是同一个pEqn

    请教一下,HbyA内循环里是通过哪个函数更新的呀?实在没有头绪

    1 条回复 最后回复
  • Y 离线
    Y 离线
    yuan_neu
    在 中回复了 李东岳 最后由 编辑
    #15

    @李东岳

    重新看了一下icoFoam,恍然大悟。因为通过压力的修正,速度也得到更新。H 操作相当于也更新了HbyA。
    但是貌似这种求解思路与原始的piso算法还是有些区别的。最明显的是,没有了二次修正。我对此的理解是,因为icoFoam里面没有忽略掉式7-39(computational methods for fluid dynamics P175)右边的第二项,
    0_1489643730610_upload-27534b17-accf-4624-8809-3469da030b9e
    所以这个二次修正式可以省略。

    请问这样的理解对吗?

    赵 1 条回复 最后回复
  • 赵 离线
    赵 离线
    赵一铭
    在 中回复了 yuan_neu 最后由 编辑
    #16

    @yuan_neu 这个是压力修正方程,和icoFoam完全对不上啊。

    1 条回复 最后回复
  • 赵 离线
    赵 离线
    赵一铭
    在 中回复了 李东岳 最后由 编辑
    #17

    @李东岳 在 关于piso循环的二次修正的一个疑问 中说:

    Jasah建议一般情况下不进行压力非矩形修正,

    http://www.cfd-china.com/topic/840/运行出错/5
    好像这个帖子里面进行非正交修正解决问题了?

    1 条回复 最后回复
  • D 离线
    D 离线
    duo
    写于 最后由 编辑
    #18

    请教一下,大家想要了解piso循环的算法是可以理解的,但是大多数情况下piso循环部分的代码好像并不需要修改,我理解只要写出正确的UEqn就可以了,piso循环对于一般的UEqn都是适用的,是这样吗?什么情况下需要修改piso循环中的代码呢?谢谢!

    1 条回复 最后回复
  • 赵 离线
    赵 离线
    赵一铭
    写于 最后由 编辑
    #19

    我觉得UEqn并不是重要的,更重要的是pEqn,有的时候UEqn并没有求解...

    1 条回复 最后回复
  • 程 离线
    程 离线
    程迪
    在 中回复了 hongfu2233 最后由 编辑
    #20

    @hongfu2233
    非正交修正是这样的:

    • fvm::laplacian返回的是fvMatrix,fvMatrix既包含矩阵M,又包含源项b。
    • fvc::laplacian返回的volScalarField,相当于只有b,没有M。

    非正交修正是把laplacian算子分成正交部分和非正交部分

    • 对于fvc而言,反正两部分最后要加在一起,无所谓啦,都一样;
    • 而fvm只能对正交部分进行隐式离散,相关的系数进入矩阵M(并非不能对非正交部分进行隐式离散,而是这样的话M矩阵就不是和mesh对应的lduMatrix相同的稀疏结构了),非正交部分显式离散,进入源项b中。
    • 这种伎俩叫延迟修正(deferred correction),我看来其实就是部分隐式部分显式的离散。

    部分显式部分隐式的离散会带来信息滞后的问题,比如说$\Delta p^{(n)} = s$方程整成了$L_I(p^{(n)})=s - L_E(p^{(n-1)})$,虽然$\Delta p^{(n)} = L_I(p^{(n)})+L_E(p^{(n)})$,但是$\Delta p^{(n)} \ne L_I(p^{(n)})+L_E(p^{(n-1)})$,除非$p^{(n)}=p^{(n-1)}$,也就是$p$已经收敛

    所以说对于fvc而言,这没有任何问题,但对于fvm而言,你一次求解只能求得:$p^{(n)}=L_I^{-1}(s - L_E(p^{(n-1)})) \ne \Delta^{-1}(s)$,这个误差只有靠不断地求解同样的方程(比如pEqn),也就是非正交修正(nonOrthogonalCorrection)中看似没有变化的那个pEqn来消除。在非正交修正的迭代过程中,其实每次解的方程不是不变的,只是其中的fvm::laplacian生成的隐式项系数没有变化,显式项是和你给的$p$有关的,是有变化的,所以实际上实现的是上述的$p^{(n-1)}$到$p^{(n)}$的迭代修正循环。

    其实OpenFOAM中很多的延迟修正都是类似的部分隐式部分显式离散,比如High Resolution格式和High Order格式的差值也是这么搞的。

    这种半隐式离散理论上必须达到最终收敛才是和全隐式离散是一样的解,但是只要显式部分远小于隐式部分,问题也不大,甚至收敛阶数和速度也不太受影响。不过对于压力方程还是解得准确点儿好。

    已婚,勿扰。
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    H yhdthuY 2 条回复 最后回复
  • 程 离线
    程 离线
    程迪
    在 中回复了 李东岳 最后由 编辑
    #21

    @李东岳

    也可以认为每次对fvm::laplacian的调用都进行了非正交修正。

    已婚,勿扰。
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    1 条回复 最后回复

  • 登录

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