有限体积怎么算的Limiter中那个梯度比例r之类的东西?
- 
							
							
							
							
							
							
如题,感觉文献里limiter有几种吧,一个是梯度限制器,gradient limiter,$\nabla a_c = \phi ( r ) \nabla a$,还有一个是通量限制器,flux limiter, $f_c = f_{lo} + \phi ( r )f_{ho}$,$f_{lo}$是低阶的low order flux,比如upwind flux,$f_{cd}$是高阶的high order flux,比如中心差分,然后$\phi ( r )$是限制器函数。 到底有啥联系没?特别是对于非正交的有限体积的多面体网格,具体怎么搞的?因为只有网格面两边的信息呀。 而且我发现OF里没有fvm::grad,只有fvc::grad,感觉这玩意儿太扯了,至少Gauss cell based 应该可以做成fvm::grad吧。 
- 
							
							
							
							
@程迪 
 for example
 mplementation of semi-discrete, non-staggered central schemes in a colocated, polyhedral, finite volume framework, for high-speed viscous flows DOI: 10.1002/fld.2069
 里公式11是酱紫的:\begin{equation} 
 r = 2\frac {\mathbf d \cdot (\nabla \phi)_P}{\phi_N-\phi_P}-1
 \end{equation}$\phi_P,\phi_N$分别是当前单元P和临近单元N的标量$\phi$的值。$\mathbf d $是P网格中心到N网格中心的矢量。 but,这破玩意儿没给出处,都不知道是咋来的。。。 
- 
							
							
							
							
参考 
 https://www.nas.nasa.gov/assets/pdf/techreports/2005/nas-05-007.pdfslope limiter等价于flux limiter,在FVM的REP过程中更natural... 
- 
							
							
							
							
							
							
没,还是不知道那个公式咋来的,不过基本解决了flux limiter 和slope/gradient limiter的等价关系问题。 但是这玩意儿也是个大坑,对于多维网格带skew和non-uniform的情况,限制器设计和计算量都挺大。 OpenFOAM具体实现还没看太懂。有一个先有鸡还是先有蛋的问题,到底是interpolation先调用gradient呢?还是gradient调用interpolation? 我看的文章里是先leastSquare算gradient,不用Gauss的情况下是不用插值的。然后interpolation可以用一些limited gradient。 暂时只看懂了cellLimited, faceLimited没看懂。 
- 
							
							
							
							
							
							
时间久远,最近我也再看这个问题,就像楼主说的,OpenFoam里面用到的这个r的公式出处很奇怪,不过倒是也勉强说得通,通常来说r是等于两侧的梯度比值,在结构网格里面 
  
 按理说在非结构网格应该用两侧的梯度值就行,然而在OpenFoam里面:
 位置:/home/xiasy/OpenFOAM/OpenFOAM-10/src/finiteVolume/interpolation/surfaceInterpolation/limitedSchemes/NVDTVD.H
 具体实现其实使用了单侧的梯度投影值以及差值进行计算,类似楼主提到的文章里面的,分析了一下只能说用文章中的使得更加保守,在有可能出问题的地方,宁可牺牲精度,也要保证稳定性 
 因为实际上使用时当梯度比值<0.5的时候就直接chu出现降阶了
 
			
