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. fvc::intergrate(fvc::grad(phi))*nf不等于snGrad(phi)?

fvc::intergrate(fvc::grad(phi))*nf不等于snGrad(phi)?

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

    最近学习算法,绕来绕去把自己绕晕了,想问一下大家,下面这两个相等吗?

    $(\nabla\phi)_f\cdot n_f$ 与 $snGrad_f(\phi)$

    根据我的理解,对于同一个面,这两个表达式应该是相等的,都表示梯度在面法相方向的投影。但是我计算了一下,实际上怎么不想等?以如下一维网格为例:

    1.jpg

    左右两侧的边界条件都是零梯度,如果设$\phi_O=1000$,$\phi_N=1, |d_{ON}|=1$,那么梯度可计算为:
    $(\nabla\phi)_O = 1000\cdot(-1) + (1000+1)/2\cdot1 = -499.5$

    $(\nabla\phi)_N = (1000+1)/2\cdot(-1) + 1\cdot1 = -499.5$

    f上的梯度为
    $(\nabla\phi)_f = [(\nabla\phi)_O + (\nabla\phi)_N]/2 = -499.5$

    实际上就是:$(\nabla\phi)_f\cdot n_f = -499.5$

    而snGrad根据定义可以直接计算
    $snGrad_f(\phi) = \frac{\phi_N - \phi_O}{|d|} = -999.0$

    这两个值为什么不相等呢?是哪里出问题了?请各位大佬指点,非常感谢!

    C 1 条回复 最后回复
  • C 离线
    C 离线
    CFDngu
    在 中回复了 CFDngu 最后由 CFDngu 编辑
    #2

    是李东岳老师讲的“紧致基架点”的问题吗?我看了东岳老师文档,但却没有太理解,如果是的话我就再去看几遍。另外在写代码的时候怎么避免类似的问题呢?多用fvc::snGrad?

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

    是的。你的计算是正确的。主要区别就是stencil。

    snGrad是定义在面上的面法向梯度。就是你算的那个999。只涉及相邻的网格。

    interpolate(grad(phi)) & Sf 的计算方法就是常规的计算网格上的$\nabla\phi$,然后再插值。如果你多写几个网格出来。会发现在某个面上,需要不相邻网格的梯度。

    你可以试一下给下面这样的场

    |A|B|C|D|
    

    $$
    sngrad=\frac{C-B}{\Delta x}
    $$

    $$
    grad=\frac{C-A}{4\Delta x}+\frac{D-B}{4\Delta x}
    $$

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    CFDngu
    在 中回复了 李东岳 最后由 编辑
    #4

    @李东岳 非常感谢东岳老师。现在有点理解了,在Laplacian算子中用snGrad替代传统插值方法计算面上梯度来消除振荡,这是不是所谓的Rhie-Chow interpolation?

    还有一个小问题,interfoam中动量方程的源项,如重力源项$\vec{g}\cdot\vec{x}\nabla\rho$等,我看是直接定义在面上了(代码中phig为$-(\vec{g}\cdot\vec{x})_f\cdot snGrad_f(\rho)\cdot |\vec{S_f}| \cdot rAU_f$),这个应该是传统的交错网格处理方式防止压强振荡?

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

    @cfdngu 在 fvc::intergrate(fvc::grad(phi))*nf不等于snGrad(phi)? 中说:

    现在有点理解了,在Laplacian算子中用snGrad替代传统插值方法计算面上梯度来消除振荡,这是不是所谓的Rhie-Chow interpolation?

    是的。但是OpenFOAM这面不是严格的Rhie-Chow插值。目前这个是OpenFOAM的思路。OpenFOAM很多算法都是自己参考一些东西,然后做一定的改动。

    interFoam那个就是为了防止震荡处理的。一般都建议这么处理。

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    CFDngu
    在 中回复了 李东岳 最后由 编辑
    #6

    @李东岳 好的,谢谢李老师。我发现面上梯度可通过fvc::reconstruct这个函数重构出的体心梯度,我还是得研究一下这个函数。比如刚刚的重力源项,定义在面上的话,我还没掌握怎么把它放回控制方程里面:143:

    1 条回复 最后回复

  • 登录

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