OF可压流求解器
-
Hi, @Aeronastro
我个人不怎么做超音速空气动力学,对这个帖子不会有什么特殊贡献。
但有关rhoCentralFoam我层和Henry讨论过,他表示rhoCentralFoam相比较rhoPimpleFoam更加适用于震波捕获。另外,rhoCehtralFoam有文献,昨天重做系统刚把这个我没怎么调研的求解器的文献删除。没想到今天就遇到了。google一下?:anguished:
其他有关KNP,ROE尚不清楚。如果你有兴趣,是否可以简单说一下为什么超音速流有很多特别的对流格式?
-
这里有个网站, compressibleFOAM: http://pavanakumar.github.io/compressibleFoam/index.html, 对你实现可压缩求解器可能有帮助。里面的一个 Instructional workshop on OpenFOAM programming LECTURE 系列Lecutures也是很好的资源。
-
Hi, @Aeronastro
我个人不怎么做超音速空气动力学,对这个帖子不会有什么特殊贡献。
但有关rhoCentralFoam我层和Henry讨论过,他表示rhoCentralFoam相比较rhoPimpleFoam更加适用于震波捕获。另外,rhoCehtralFoam有文献,昨天重做系统刚把这个我没怎么调研的求解器的文献删除。没想到今天就遇到了。google一下?:anguished:
其他有关KNP,ROE尚不清楚。如果你有兴趣,是否可以简单说一下为什么超音速流有很多特别的对流格式?
只能初略的解释下:
因为在激波层这一极其薄的区域要人为增大粘性(可以通过各种方式),让数值上的激波厚度能跨越几个(1个、2个...,也不能太多)计算网格(远大于实际的激波厚度),不然程序在间断处就不稳定。但是又要保证这个数值粘性在那些比较光滑的地方比较小。这两个要求很难同时满足得比较好,所有就会有对流格式出现了。 -
@xuebao1989 您好,那个网站我貌似打不开:upset:
里面都有哪些有用的资料呢?能否共享一下?:tongue_out:
谢谢:happy: -
@Aeronastro 把链接的index.html去掉即可打开
-
终于看到有做这个方向的朋友了。现在我就是想在这个方向上发展,目前也有一些其他人的前期工作。现在主要参考DensityBasedTurbo和foam-extend-4.0中的fvBlockMatrix等相关内容。
目前梳理一下主要还有几方面工作亟待完成:
- 完善的通量分裂格式代码,这个之前已经有很多实现了,包括foam-extend中的dbns实现;
- 低马赫数流动的预处理方法;
- 基于blockMatrix的隐式时间格式,或者更方便的LU-SGS方法。不幸的是,如果使用预处理方法,求解的矩阵还会是block格式的。
如果以上几个方面OK的话,在OpenFOAM中实现与fluent相似的密度基求解器就可行了。目前最头痛的问题是OpenFOAM的官方版本至今也没有推出blockMatrix求解实现的计划,看现在的情况,只能在foam-extend下实现。
ps:看过foam-extend 中blockLduMatrix的主要实现,基本在基本库foam中,对应官方版本的OpenFOAM基本库。由于这个库很低层,如果想实现移植是一个很大的工程。各版本各有优势,大牛们又各自为战,有时候也忍不住想吐槽一下。
-
通量分裂是不是还分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的前提下实现。
其实不管是压力基还是密度基,都在努力扩展求解范围。很多实际问题并不会有明显区别,甚至有跨多流态的问题。
以上,自己的一些理解,希望进一步交流
-
我的理解和您不一样,我的理解是限制器只在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等得到的一阶数值通量通过插值获得二阶或者最高二阶的计算通量
-
sorry, 没看懂,数值通量是在界面的,surfaceScalarField怎么通过限制器差值得到另一个surfaceScalarField呢?毕竟最后要求div的。
-
我觉得会不会是lduMatrix结构比较特殊,和常见的sparse linear algebra的矩阵数据结构CCS,COO啥的都不一样。但是我觉得不应该呀,这玩意儿和directed graph的adjacency matrix表示是一样的呀。应该用得还蛮多的吧...