OF可压流求解器
-
通量分裂是不是还分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表示是一样的呀。应该用得还蛮多的吧...
-
嗯,关键还是写好胶水代码。
-
@youmengtian 在 OF可压流求解器 中说:
cfd-china如果希望长期发展真的也有必要维护自己的一个openfoam的版本库,
之前有个
第三方求解器专区
,现在已经删除了,因为没人贡献代码。不过我倒是支持一些国人写的库。这方面我曾经和 @李东岳 讨论过,最后不了了之。目前来看,国内估计没有人会在这方面有所贡献,按照岳哥的想法,限制性很多:big_mouth: :big_mouth: -
@cfd-china 的确存在这个问题。之前去知乎上也有讨论,由于国内知识产权问题,做开源还是个费力不讨好的事儿
-
@cfd-china @youmengtian
我觉得关键的限制性因素有两个:
- OF是GPL的,有传染性,修改、调用的代码必须同样以GPL开源,这就排除了收费盈利的可能性;
- 中国IP保护就是个SHIT,参考:
目前,中国《著作权法》和《计算机软件保护条例》并没有对开源软件进行规定。在2011年北京市海淀区人民法院一审、北京市第一中级人民法院终审判决的一起案件中,两审法院虽然都认定开源协议有效,但仍然支持违反GNU GPL协议,没有公开其新增的软件源代码的原告方未公开的源代码享有著作权。
某律师观点:本案显示了中国法院的实用主义特点。从逻辑上,法院的观点是不成立的,既然法院承认开源软件协议是有效的,那么使用开源软件开发软件者就应当遵守协议的规定,如果不遵守开源协议,其软件就不应当受到法律保护。但是目前90%以上的开源软件代码是国外开发者贡献,中国公司贡献很少,因此,不保护开源软件对国内产业影响不大,同时,目前法院需要保护国内竞争秩序,中国国内开发者不规范使用开源软件的情况比较普遍,虽然本案中的原告违反了开源协议,但其还是为软件付出了一定创造性劳动,如果不予保护,将使类似公司都面临问题,从而影响国内市场的竞争秩序。
-
最近也在实现一种通量计算方法,主要用于High order kinetics based finite volume method (KBFVM)( http://www.sciencedirect.com/science/article/pii/S0021999109004070 ). 目前并没有中文文献做这个,也不知道怎么翻译。主要思想是迎风格式比较耗散,高阶格式有时会不稳定(虽然理论上TVD是稳定的) http://www.cfd-china.com/topic/729/一阶迎风的耗散性/2 于是针对我的研究领域我需要植入KBFVM(基于
rhoCentralFoam
)。在实现了算法之后,我发现原来和通量分裂的想法是相同的。我们这个领域叫做KBFVM,空气动力学领域称之为通量分裂?:surprised:看来还得多涉猎,才能各个领域的技术互相贯通。
-
@youmengtian 发展方向这和老大的研究兴趣和资金有关。基金会老大本身燃烧出身。如果你看OpenFOAM官方版,拉格朗日、超音速、传热模型方面并没有太大改动。多相,CFD离散以及代码架构更新一直很频繁,毕竟本行。并且基金会赞助一直少。老大一直都自己干。Wikki那面老大本身是大学教授,带博士并且承接项目。大家都知道博士期间一个博士一般都能写个求解器雏形,再加上Wikki老大20多年经验,导致Extend那面各种求解器。因为最近也在看
rhoCentralFoam
,这个求解器只是进行了通量分裂,你们提到的Roe
,WENO
并没有植入进去,基金会做这个应该非常简单。但是OpenFOAM的发展取决于感兴趣的人,和资金赞助。本身做高阶格式的人非常少,再一个没有人赞助高阶格式开发,这些东西只能研究人员开发了。Wikki老大在大学很方便接项目了和申请基金了。当然,Wikki求解器比发布的还要多,并且Wikki的Extend外挂求解器是收费的。基金会完全开源,并且并没有人提供足够的赞助,不能奢求更多。同理在中国,依据个人些许经验和百度,赞助的项目完全不够支持开发的开销。
-
@youmengtian 目前openfoam的可压缩求解器确实没有不可压缩求解器那么强大。我也在参考densityBased求解器做一些算法植入工作。目前有人已经实现了LU-SGS方法,不知他的实现方法和blockMarix有何联系?
附上它的文章:
Shen C, Sun F, Xia X. Implementation of density-based solver for all speeds in the framework of OpenFOAM[J]. Computer Physics Communications, 2014, 185(10): 2730-2741.
Shen C, Xia X, Wang Y, et al. Implementation of density-based implicit LU-SGS solver in the framework of OpenFOAM[J]. Advances in Engineering Software, 2016, 91: 80-88.
期待进一步交流!