fvc::reconstruct()操作
- 
							
							
							
							
在开发算法时,发现interFoam的速度方程中用了fvc::reconstruct()。这个函数输入的是面心值,输出的是体心值。 
 打开fvcReconstruct.C, 重要的代码有两句,摘抄在这里:- 
surfaceVectorField SfHat( mesh.Sf()/mesh.magSf() ); 
- 
inv(surfaceSum( SfHat*mesh.Sf() ))&surfaceSum( SfHat*ssf ); 
 SfHat是网格面的单位法向量,SfHat*mesh.Sf()是每个网格面的面积大小,等价于mesh.magSf()。那么,surfaceSum( SfHat*mesh.Sf() )就给出了每个网格单元的总表面积。
 令人费解的是这里为什么有个取逆矩阵的运算inv()。为了简洁,把式子这样写:
- 
reconField = inv( surfaceSum1 ) & surfaceSum2 
 也就是: - surfaceSum1 & reconField = surfaceSum2
 上式的变量都是场量,我们可以以一个网格单元为例,更好理解。假设网格单元是四边形,面的面积分别为S0, S1, S2, S3,对应的值分别为F1, F2, F3, F4。那么有, - (S1+S2+S3+S4)*volValue = S1*F1+S2*F2+S3*F3+S4*F4
 到这里就很明显了,fvc::reconstruct()的想法是通过对面心值加权平均,得到体心值。据说这样做可以让非结构网格上的计算更稳定,为什么呢?是不是结构网格就不需要加这个语句呢? 
 欢迎大家指正、讨论。
- 
 
			