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
11 帖子 4 发布者 9.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #2

    OpenFOAM那面热动力包分为了rhoThermo和psiThermo,所以这俩个求解器应该是一个基于前者一个基于后者,应该收敛性在某些情况下不一样。我没对比过这两个求解器。但是很多算例都可以通用。rhoPimpleFoam是为了区分rhoCentralFoam,这俩算法区别很大,后者算高超更好,前者也能算但激波应该没那么尖锐,但应该跟后者区分开来,buoyantPimpleFoam算HVAC附加了浮力

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

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

    @东岳 感谢东岳老师回复!恩,热力学包分为rhoThermo和psiThermo两种,对于在reactingFoam和rhoReactingFoam上的应用来说,我的理解是前者调用psiThermo(和rhoPimpleFoam一样),后者调用rhoThermo。我好奇的是为什么要这样分。比如你提到的rhoPimpleFoam和rhoCentralFoam,前者是压力基求解器,后者是密度基求解器,所以分别调用不同的热力学包,可以理解。而reactingFoam和rhoReactingFoam,两者都是压力基求解器(不知道这样说是不是百分百正确),但是两者的压力方程很不一样。

    可能我过于关注细节了,不过用OpenFOAM用的越多就越发现,它的代码设计很考究,任何处理都有其原因,reactingFoam和rhoReactingFoam一定有它们分别存在的理由。而且我感觉关键点就在它们的压力方程上。

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

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

    @cccrrryyy 在 OpenFOAM的两个燃烧求解器 中说:

    而reactingFoam和rhoReactingFoam,两者都是压力基求解器(不知道这样说是不是百分百正确),但是两者的压力方程很不一样。

    方程一样吧?

    是的,很多代码是为了更稳健,任何处理都有其原因的

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

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

    OpenFOAM-6里面, reactingFoam的压力方程是

    while (pimple.correctNonOrthogonal())
       {
           fvScalarMatrix pEqn
           (
               fvm::ddt(psi, p)
             + fvc::div(phiHbyA)
             - fvm::laplacian(rhorAUf, p)
            ==
               fvOptions(psi, p, rho.name())
           );
    
           pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
    
           if (pimple.finalNonOrthogonalIter())
           {
               phi = phiHbyA + pEqn.flux();
           }
       }
    

    rhoReactingFoam的压力方程是直接调用了rhoPimpleFoam的压力方程

    fvScalarMatrix pDDtEqn
        (
            fvc::ddt(rho) + psi*correction(fvm::ddt(p))
          + fvc::div(phiHbyA)
         ==
            fvOptions(psi, p, rho.name())
        );
    
        while (pimple.correctNonOrthogonal())
        {
            fvScalarMatrix pEqn(pDDtEqn - fvm::laplacian(rhorAUf, p));
    
            pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
    
            if (pimple.finalNonOrthogonalIter())
            {
                phi = phiHbyA + pEqn.flux();
            }
        }
    

    如果都是常规的动量->能量->压力方程这种求解顺序,很奇怪为什么要弄出不一样的形式来呢。比较起来看,代入rho = psi* p,那么rhoReactingFoam的压力方程多出一项psi*correction(fvm::ddt(p))。这一项好像和rhoReactingFoam获取密度方式有关,在pEqn的前续代码中有体现,但我不太理解。

    另外神奇的事是,从OpenFOAM-5.x开始,rhoReactingFoam的压力方程都是直接调用rhoPimpleFoam的压力方程,而reactingFoam用不同的压力方程;但是OpenFOAM-4.x之前,压力方程一样的是rhoPimpleFoam和reactingFoam,然后rhoReactingFoam用不同的压力方程。

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

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

    所以就是说,为什么一个求解器调用fvm::ddt(psi, p),一个求解器调用fvc::ddt(rho) + psi*correction(fvm::ddt(p)),二者的区别是什么?

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

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

    没有找到任何理论解释这部分内容

    如果从代码反推,fvm::ddt(psi, p)和fvc::ddt(rho) + psi*correction(fvm::ddt(p))的区别只不过是前者:$\frac{\p \psi p}{\p t}$,后者$\frac{\p \rho}{\p t}+\psi\frac{\p p}{\p t}$,第一个隐性,第二个显性

    另一个我进行的一个解释是,可压缩连续性方程可以展开为
    \begin{equation}
    \frac{\p p}{\p t}=-c\nabla\cdot(\rho\bfU)
    \end{equation}
    如果可压缩性较小,$c$会很大导致$\frac{\p p}{\p t}$无解,因此对于可压缩性较小的流动,最好采用fvm::ddt(psi, p)和fvc::ddt(rho) + psi*correction(fvm::ddt(p))这种形式。我还看了一下cavitatingFoam的压力方程代码,OpenFOAM-6中是

    fvScalarMatrix pEqn
            (
                fvm::ddt(psi, p)
              - (rhol0 + (psil - psiv)*pSat)*fvc::ddt(alphav) - pSat*fvc::ddt(psi)
              + fvc::div(phi, rho)
              + fvc::div(phiGradp)
              - fvm::laplacian(rhorAUf, p)
            );
    

    OpenFOAM-7中是

    fvScalarMatrix pEqn
            (
                fvc::ddt(rho)
              + psi*correction(fvm::ddt(p))
              + fvc::div(phi, rho)
              + fvc::div(phiGradp)
              - fvm::laplacian(rhorAUf, p)
            );
    

    可以看出来这面psi-based和rho-based标准不是很统一。个人感觉应该跟具体的应用有很大关系,某些应用建议psi-based,某些应用建议rho-based。

    不确定我说的对,求更多大佬分享经验

    :ok2:

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    cccrrryyy 超神
    写于 最后由 编辑
    #8

    同感,希望有别的大佬来解释。从这个角度出发,也许可压缩性较小的(所谓的compressible fluid,而不是compressible gas)fvm::ddt(psi, p)可能就足够了?也许OpenFOAM-4之前的版本里面rhoPimpleFoam的描述就是这个意思,因为一般HVAC里面都是compressible fluid吧。但是OepnFOAM之后的版本里面rhoPimpleFoam的压力方程也自己换掉了,和你说的cavitatingFoam类似的情况,有点搞不懂了。
    坐等大佬解答。

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

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

    @东岳 偶然翻看到之前的讨论,结合东岳老师提到的声速有关的内容和最近的一些新体会,贴上来和大家讨论。

    对于可压缩流动的定义好像存在不同的理解,我现在倾向于认为正确的是,是否严格意义的可压缩要看密度是否随压力变化。如果密度是随压力和温度、组分等变化,那么是完全的可压缩。如果密度不随压力变化,而只随温度、组分等变化,也是可压缩(因为密度会变化),但不是完全的可压缩。后者在很多传热、燃烧应用中是广泛存在的(密度受压力影响很小,密度差主要由温度和组分变化导致),在处理的时候大多采用所谓的低马赫数近似(low Mach number approximation)。其本质是假设密度不随压力变化,不一定是字面意思上的马赫数很低才可以使用,更多的应该是指代一套数值方法(这点不是很确定:chouchou: )。FOAM里面有一种状态方程是incompressiblePerfectGas,和普通的perfectGas区别在于,前者的压力用一个参考压力(常数),后者用的则是计算得到的压力(非常数)。

    感觉FOAM里面之所以有基于psi的热物性和基于rho的热物性就是为了能够处理不同类型的可压缩流动。传热求解器(solver/heatTransfer)比如buoyantPimpleFoam采用了基于rho的热物性,而燃烧求解器(solver/combustion)比如reactingFoam,fireFoam采用了基于psi的热物性。燃烧求解器也有用基于rho的热物性的,目前还不清楚背后的原因。可压缩求解器(solver/compressible)中,像rhoPimpleFoam本来是采用基于psi的热物性,但高版本开始也把基于rho的热物性揉进去了,很好奇如果用rhoPimpleFoam采用同一套状态方程去求解同一个问题,但一个用psiThermo一个用rhoThermo,结果是否会一样?

    啰嗦了两大段,还是回到之前的问题。很明显reactingFoam和rhoReactingFoam两个求解器调用的压力方程形式不同是因为密度更新的方式不同,而密度更新方式的不同很可能来源于是否采用低马赫数假设这一套计算方法。这一点现在还不明确,所以发上来希望有大佬能给讲讲:chouchou:

    另外有个问题,如果采用低马赫数近似,密度随压力不变,那是不是就相当于认为声速无穷大?这样假设会导致什么呢?

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

    Y 1 条回复 最后回复
  • Y 离线
    Y 离线
    yuky
    在 中回复了 cccrrryyy 最后由 编辑
    #10

    @cccrrryyy 我想请问一下您对这个“如果采用低马赫数近似,密度随压力不变,那是不是就相当于认为声速无穷大?这样假设会导致什么呢?”有个结论了吗,对于发动机来说,燃料进入燃烧室通常是速度较快的,但燃料开始燃烧之后速度又是正常低马赫数,请问这种用reactingFoam合适吗

    1 条回复 最后回复
  • M 离线
    M 离线
    myheart
    写于 最后由 编辑
    #11

    @cccrrryyy 大佬,请教个问题,最近这两个求解器也困惑了我许久,拜读这个帖子后仍有疑问。
    问题1:按照李老师所说,声速较大会导致rhoReactingFoam中采用的压力方程无法求解,那是不是意味着reactingFoam适用于声速可能无穷大也就是低马赫数时密度不随压力改变的情况?
    问题2:同时由于rhoReactingFoam采用rhoPimpleFoam的压力方程,其为压力基求解器,捕捉激波的能力没有rhoCentralFoam强,所以其实际上也不适用于高马赫数流动?
    问题3:既然这俩都不能计算高速可压流,那基于psi和基于rho的热物性带来的差异主要体现在哪?

    1 条回复 最后回复

  • 登录

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