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
9 帖子 3 发布者 6.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    cccrrryyy 超神
    写于 最后由 编辑
    #1

    最近突然想到一点。对于基于压力的求解过程(包括可压和不可压),由于绝对压力本身数值很大,一般会采取将其拆解为一个很大的常量和真正求解的小量的和。否则压力梯度很难计算准确。
    在不可压求解器中,这是一个很自然的处理,因为不可压问题本身也需要一个标定压力(比如1个大气压)。
    对于可压的问题来说,以可压缩求解器rhoPimpleFoam甚至燃烧求解器reactingFoam为例,它们都是直接求解了绝对压力(并且等于热力学压力)。这样处理虽然物理上没有问题,但数值上是否会造成由于压力数值很大而带来梯度计算不精确的问题呢?我个人的观点是,尽管是可压问题,但如果是压力基的求解器,也应该可以把压力处理成一个很大的定常量和很小的量的求和,这样应该更准确吧?

    I don't want to survive, I want to thrive.

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

    但如果是压力基的求解器,也应该可以把压力处理成一个很大的定常量和很小的量的求和,这样应该更准确吧?

    你说的就是openfoam中p_rgh,压力一般和重力互相制约

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    cccrrryyy 超神
    在 中回复了 李东岳 最后由 编辑
    #3

    @东岳 东岳老师,p_rgh这个我也注意到了。比如燃烧求解器fireFoam,它的总压有三个部分,p = p_rgh + rho*gh + pRef。如果设置重力加速度为0,那么p = p_rgh + pRef。在fireFoam的tutorial算例里面,也确实能看到pRef被设置为一个很大的值(1个大气压)。问题是,为什么不是所有的可压缩/燃烧求解器都这样处理?我看到用p_rgh的好像更多的是与多相流相关的求解器。

    I don't want to survive, I want to thrive.

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

    fireFoam那面的p = p_rgh + rho*gh + pRef应该不具备普适性,具体我没看。不过将p处理成p_rgh和静水压力非常普适性,所有的带重力源项的都可以这样设置,比如可压缩、传热、拉格朗日都可以

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    cccrrryyy 超神
    在 中回复了 李东岳 最后由 编辑
    #5

    @东岳 恩恩,我的理解是这样,对于涉及到重力的物理问题,将压力处理成p_rgh加上静压是普适的。类似的,从数值角度讲,对于任何一个问题(即使不涉及重力),只要求解过程是基于压力的,那么将压力处理成一个很大的常量和一个相对很小的量的和,也是普适的。这个点我记得在很多CFD的书中都有提及,因为动量方程的源项是压力梯度,只有压力梯度计算准确了速度才会准确。
    我以前用FLUENT,FLUENT会让设置一个所谓的operating pressure。我一般都是将其设置为1个大气压,然后在出口处设置压力为0。FLUENT实际计算的是总压减去operating pressure,是一个比较小的量。同样的算例(低马赫数流动,密度有变化,不涉及重力)我在openfoam里面就需要直接将出口的压力设置为1个大气压。或者极端一点,如果我的问题压力很高(比如10个大气压),那么在FLUENT里面我可以将operating pressure设置为10个大气压,然后出口压力依然为0。但在openfoam里面我必须要把出口的压力直接设置为10个大气压。这个压力数值上太大了,任何一个小的误差都会导致错误的速度,不容易算准吧。

    I don't want to survive, I want to thrive.

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

    只要求解过程是基于压力的,那么将压力处理成一个很大的常量和一个相对很小的量的和,也是普适的。这个点我记得在很多CFD的书中都有提及,因为动量方程的源项是压力梯度,只有压力梯度计算准确了速度才会准确。

    考虑x方向管道,进出口压力,进口压力10,出口压力0,和进口压力100010,出口压力100000,压力梯度不是一样么?

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    cccrrryyy 超神
    在 中回复了 李东岳 最后由 编辑
    #7

    @东岳 对。但是如果用总压,计算中任何微小的误差都会带来计算的不准确。比如出口是给定的100000,进口是计算出来的,但算成了100009或者100011,这时候压力梯度就不正确了。
    其实就是数值计算中,在计算两个量之间的差的时候,如果这两个量本身数值很大,但它们的差别相对于其绝对值来说又非常小(比如10001-10000),这时候一般应该是避免直接去做这两个量的差。处理方法是找一个标定的数值,计算这两个量的绝对值减去标定值后的差别。假设标定值为10000,那么就是计算1-0,而不是10001-10000。印象中这个是数值方法里面一个普适的东西,还是说现在的数值计算精度已经足够高所以不用考虑这个了?:chouchou:

    I don't want to survive, I want to thrive.

    1 条回复 最后回复
  • 学流体的小明学 离线
    学流体的小明学 离线
    学流体的小明 神
    写于 最后由 编辑
    #8

    我也刚好遇到了这个问题,我的理解是在程序计算的过程中,数值精度已经足够高了,可以保证计算正确。但是在将计算结果写到文件的时候,由于输出有效数字的位数,经常会丢失信息。如果断点续算,读文件输入程序的信息就可能产生问题。


    举个例子,我计算一个槽道流,压力参考点生效。
    区分一下两个算例:CaseA,pRef=0;CaseB,pRef=10000。
    这两个Case都可以把壁湍流的速度剖面算得很好,两个Case的结果完全一致,曲线可以重合。但是两个Case输出的压力结果相差很大。

    CaseA中,paraview查看某个瞬时的流场数据或者surfaces取样输出某个平面的结果,压力p都是0.XXXX小数点后很多位。
    bf0d74d2-568f-47dd-b17d-cc496fb3fbcd-image.png

    CaseB中,同样的方法,压力p基本都是10000,或者有是9999.99,这和我限制了writePrecision 6有关系。
    eca58dfc-57de-4184-b46e-c58b879b0bbd-image.png

    学流体的小明学 1 条回复 最后回复
  • 学流体的小明学 离线
    学流体的小明学 离线
    学流体的小明 神
    在 中回复了 学流体的小明 最后由 编辑
    #9

    学流体的小明 在 压力基求解器在OpenFOAM中的植入问题 中说:

    CaseB中,同样的方法,压力p基本都是10000,或者有是9999.99,这和我限制了writePrecision 6有关系。

    所以输出流场的时候,最好以binary二进制的格式输出。
    后处理的文件,由于要使用其它软件读取,就用ASCII。

    1 条回复 最后回复

  • 登录

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