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.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    CFDngu
    写于2022年11月9日 12:56 最后由 编辑
    #1

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

    (∇ϕ)f⋅nf 与 snGradf(ϕ)

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

    1.jpg

    左右两侧的边界条件都是零梯度,如果设ϕO=1000,ϕN=1,|dON|=1,那么梯度可计算为:
    (∇ϕ)O=1000⋅(−1)+(1000+1)/2⋅1=−499.5

    (∇ϕ)N=(1000+1)/2⋅(−1)+1⋅1=−499.5

    f上的梯度为
    (∇ϕ)f=[(∇ϕ)O+(∇ϕ)N]/2=−499.5

    实际上就是:(∇ϕ)f⋅nf=−499.5

    而snGrad根据定义可以直接计算
    snGradf(ϕ)=ϕN−ϕO|d|=−999.0

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

    C 1 条回复 最后回复 2022年11月9日 13:00
  • C 离线
    C 离线
    CFDngu
    在 2022年11月9日 13:00 中回复了 CFDngu 最后由 CFDngu 编辑 2022年11月9日 21:01
    #2

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

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2022年11月9日 14:06 最后由 编辑
    #3

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

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

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

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

    |A|B|C|D|
    

    sngrad=C−BΔx

    grad=C−A4Δx+D−B4Δx

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

    C 1 条回复 最后回复 2022年11月10日 07:51
  • C 离线
    C 离线
    CFDngu
    在 2022年11月10日 07:51 中回复了 李东岳 最后由 编辑
    #4

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

    还有一个小问题,interfoam中动量方程的源项,如重力源项g→⋅x→∇ρ等,我看是直接定义在面上了(代码中phig为−(g→⋅x→)f⋅snGradf(ρ)⋅|Sf→|⋅rAUf),这个应该是传统的交错网格处理方式防止压强振荡?

    李 1 条回复 最后回复 2022年11月10日 07:58
  • 李 在线
    李 在线
    李东岳 管理员
    在 2022年11月10日 07:58 中回复了 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 条回复 最后回复 2022年11月10日 08:15
  • C 离线
    C 离线
    CFDngu
    在 2022年11月10日 08:15 中回复了 李东岳 最后由 编辑
    #6

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

    1 条回复 最后回复
2022年11月9日 12:56

4/6

2022年11月10日 07:51

未读 2
2022年11月10日 08:15
  • 登录

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