OF可压流求解器



  • OF中可压流求解器主要是以rhoCentralFoam和rhoPimpleFoam为主,而rhoCentralFoam的对流项用的是KNP的通量分裂格式,尽管这个格式我在计算流上面没有找到理论,但既然编成了这种格式应该也有它的用武之地吧,而rhoPimpleFoam是将不可压的PIMPLE算法加以扩展,用在了可压流中,也有人反映这个算法对压力项的修正不是很好。

    我不知道为什么不用主流的Roe格式来进行对流项的离散?不知道有人用过Roe自己编写过可压流的求解器没有?和OF自己的KNP方法比较有什么差别?

    以上是我的见解,不恰当之处还请批评指正,谢谢~



  • @Aeronastro 过段时间我也想改一下可压缩流的求解器,有这个想法,目前思路还不是太清晰:cold_sweat:


  • 网格教授 OpenFOAM教授 管理员

    Hi, @Aeronastro

    我个人不怎么做超音速空气动力学,对这个帖子不会有什么特殊贡献。

    但有关rhoCentralFoam我层和Henry讨论过,他表示rhoCentralFoam相比较rhoPimpleFoam更加适用于震波捕获。另外,rhoCehtralFoam有文献,昨天重做系统刚把这个我没怎么调研的求解器的文献删除。没想到今天就遇到了。google一下?:anguished:

    其他有关KNP,ROE尚不清楚。如果你有兴趣,是否可以简单说一下为什么超音速流有很多特别的对流格式?



  • @xuebao1989

    这里有个网站, compressibleFOAM: http://pavanakumar.github.io/compressibleFoam/index.html, 对你实现可压缩求解器可能有帮助。里面的一个 Instructional workshop on OpenFOAM programming LECTURE 系列Lecutures也是很好的资源。



  • @李东岳 在 OF可压流求解器 中说:

    Hi, @Aeronastro

    我个人不怎么做超音速空气动力学,对这个帖子不会有什么特殊贡献。

    但有关rhoCentralFoam我层和Henry讨论过,他表示rhoCentralFoam相比较rhoPimpleFoam更加适用于震波捕获。另外,rhoCehtralFoam有文献,昨天重做系统刚把这个我没怎么调研的求解器的文献删除。没想到今天就遇到了。google一下?:anguished:

    其他有关KNP,ROE尚不清楚。如果你有兴趣,是否可以简单说一下为什么超音速流有很多特别的对流格式?

    只能初略的解释下:
    因为在激波层这一极其薄的区域要人为增大粘性(可以通过各种方式),让数值上的激波厚度能跨越几个(1个、2个…,也不能太多)计算网格(远大于实际的激波厚度),不然程序在间断处就不稳定。但是又要保证这个数值粘性在那些比较光滑的地方比较小。这两个要求很难同时满足得比较好,所有就会有对流格式出现了。


  • OpenFOAM讲师

    @李东岳 我也不是做空气动力学的,说说我的理解吧。

    超音速空气动力学中的激波(shock wave)是间断问题,需要一些被称为高精度格式(high resolution schemes)的对流格式才能捕捉,在使用高精度格式的时候通常还需要配套使用通量限制器(flux limiter)以保证解的有界性,避免在间断点出现过大振荡导致发散。这类格式通常满足总变差不增(total variation diminishing)。



  • @lhzhu 真是太感谢您了,非常有用



  • @李东岳 嗯嗯,谢谢哈,关于那篇文献我之前研究过。关于对流项的其他离散格式,我从一些文献上找到高阶精度的,WENO等(这些格式之所以要求这么高是因为要用LES湍流模型),我目前还不是很了解这些,我们教研室湍流用的都是RANS,软件一般用的是fluent,里面最常用的就是Roe和ASUM,所以我之前对于OF中的可压流没有提到这些格式有点疑问。



  • @wwzhao 嗯嗯,是的,在rhoCentralFoam中用到了VanLeer和VanLeerV的插值格式,也是一种限制器,我也别人说rhoCentralFoam在求解超声速流动时耗散偏大,不知道是不是有这样的一个现象?



  • @xuebao1989 您好,那个网站我貌似打不开:upset:
    里面都有哪些有用的资料呢?能否共享一下?:tongue_out:
    谢谢:happy:



  • @Aeronastro 把链接的index.html去掉即可打开


  • OpenFOAM讲师

    @李东岳
    这个solver作者的原始文献是Implementation of semi-discrete, non-staggered central schemes in a colocated, polyhedral, finite volume framework, for high-speed viscous flows DOI: 10.1002/fld.2069
    具体格式是KT和KNP,分别有各自的文献。


  • 网格教授 OpenFOAM教授 管理员

    @程迪
    多谢,下来研究研究。



  • 终于看到有做这个方向的朋友了。现在我就是想在这个方向上发展,目前也有一些其他人的前期工作。现在主要参考DensityBasedTurbo和foam-extend-4.0中的fvBlockMatrix等相关内容。

    目前梳理一下主要还有几方面工作亟待完成:

    1. 完善的通量分裂格式代码,这个之前已经有很多实现了,包括foam-extend中的dbns实现;
    2. 低马赫数流动的预处理方法;
    3. 基于blockMatrix的隐式时间格式,或者更方便的LU-SGS方法。不幸的是,如果使用预处理方法,求解的矩阵还会是block格式的。

    如果以上几个方面OK的话,在OpenFOAM中实现与fluent相似的密度基求解器就可行了。目前最头痛的问题是OpenFOAM的官方版本至今也没有推出blockMatrix求解实现的计划,看现在的情况,只能在foam-extend下实现。

    ps:看过foam-extend 中blockLduMatrix的主要实现,基本在基本库foam中,对应官方版本的OpenFOAM基本库。由于这个库很低层,如果想实现移植是一个很大的工程。各版本各有优势,大牛们又各自为战,有时候也忍不住想吐槽一下。


  • OpenFOAM讲师

    @youmengtian

    通量分裂是不是还分FVS和FDS,还是现在大家都融合到一块儿了?

    我刚入手,但是觉得有点问题的地方在于:

    • OpenFOAM的lduMatrix会不会对求解器开发构成限制?这样隐式项只有neighbour部分的影响,其他全部搞成deferred correction了;
    • OpenFOAM貌似没有自带的计算数值通量的函数库,连界面两侧的插值获取都要手动实现(类似rhoCentralFoam),感觉不是很方便;
    • 对blockMatrix不太了解,但是感觉在限制器设计上是不是还有很多工作要做?毕竟多维扩展的矢量限制器想想就可怕;
    • 从时间项来看感觉OpenFOAM只有线性单步法的时间推进(time stepping)算法,连线性多步法都没有,还得自己实现;
    • 低Mach数理论上可以用预条件,但是必要性存在问题呀,完全可以用不可压缩的求解器嘛;
    • 除了LU-SGS外还其他的方法会不会更好一些?JFNK/IDR(s)之类的?感觉lduMatrix还是很适合稀疏算法的。


  • 其实不管fvs还是fds,或者有融合二者的AUSM系列,都可以抽象成输入网格面两边格心的原始变量,通过相应变换生成守恒通量。也就是说通量分裂格式在代码实现上可以抽象成一个系统。

    另外roe AUSM HLLC等等格式都是一阶精度,通过限制器可以实现二阶精度。也就是在这个基本数值通量上,通过限制器实现插值重构。

    另外blockldumatrix基本迭代求解方法可以类比ldumatrix。本质上ldumatrix可以认为是blockldumatrix<scalar>。当然存在一些自己独特的block子矩阵特殊处理方法。目前一些求解器通过先生成fvmatrix然后后期组装成fvblockmatrix。就目前状况,如果不涉及隐式时间项,可以在不涉及blockmatrix的前提下实现。

    其实不管是压力基还是密度基,都在努力扩展求解范围。很多实际问题并不会有明显区别,甚至有跨多流态的问题。

    以上,自己的一些理解,希望进一步交流


  • OpenFOAM讲师

    @youmengtian

    我的理解和您不一样,我的理解是限制器只在interpolation阶段有用,(代码显示OF也是只在interpolation阶段有用限制器,玩的似乎是flux limiter的路数而不是gradient limiter,但是感觉很奇怪),守恒通量是用Riemann求解器搞出来的,Roe/AUSM/HLLC都算是Riemann求解器,大概意思是从两侧的通量整出个新通量出来。整出的新通量还要用限制器限制么?我觉得应该不用了吧,限制器需要一个比较范围,新通量算出来和谁比较呢?

    按理说FVM搞Reconstruction, Evolution, Projection三步的时候,limiter也是只在Reconstruction步起作用,Evolution步应该不起作用吧,除非在Projection步起作用?

    block只要是方阵非奇异,自己也能构成一个数域(field,像整数复数一样)做加减乘除,抽象来看和单个张量没太大区别。

    关键是现在sparse linear solver挺多的呀,OF为啥不直接调用呢?

    p.s. 我觉得OF有一点儿我没看懂,丫的本质上是个semi-implicit的Picard迭代,我看的文献显示semi-implicit的formulation很难做到很快的加速,除非你把快的物理过程和能量占比比较小的部分搞隐式了才行。但是OF把粘性项都给搞成一半隐式一半deferred correction了,搞得特别隐式有必要么?(我对deferred correction的理解就是显式的,除非多迭代几次)

    p.s.2 因为OF没有求Jacobian,是求的全量,所以我觉得它是Picard迭代,而不是Newton迭代。



  • 对,您理解的没错。就是在插值的时候用到限制器。roe等得到的一阶数值通量通过插值获得二阶或者最高二阶的计算通量



  • @程迪 其实调用hypre等的矩阵求解器也并非不行。不过openfoam可能考虑到效率等问题吧,这方面还真不清楚。不过原则上openfoam也能够使用第三方矩阵求解器,我觉着


  • OpenFOAM讲师

    @youmengtian

    sorry, 没看懂,数值通量是在界面的,surfaceScalarField怎么通过限制器差值得到另一个surfaceScalarField呢?毕竟最后要求div的。