addBoundaryDiag(boundaryDiagCmpt, cmpt);
请参考:
void fvMatrix<Type>::addCmptAvBoundaryDiag(scalarField& diag) const
{
forAll(internalCoeffs_, patchI) //对每一个边界,都处理这个边界的internalCoeffs_
{
addToInternalField//假如针对某个零法向梯度速度边界
(
lduAddr().patchAddr(patchI), // 这个边界的网格单元的面对应的内部网格单元编号
cmptAv(internalCoeffs_[patchI]), // 对这个patch上的internalCoeffs_,进行三个方向的平均,形成一个。
//比如原来internalCoeffs_可能是(1,2,0), (1,2,0), (1,2,0),做完了之后成为了(1.5), (1.5), (1.5)
diag//原本的对角线元素的贡献。加上考虑内部网格单元编号,与cmptAv的操作,形成一个新的internalCoeffs_的贡献
//也就是原本对角线元素 + 平均后internalCoeffs_的贡献
);
}
}
boundaryDiagCmpt.negate();
H操作符是把矩阵系数移到右边。下面的上下对角线移到右边都取负。边界导致的对角线移到右边,也要取负。
for (register label face=0; face<l.size(); face++)
{
Hphi[u[face]] -= Lower[face]*sf[l[face]];//取负
Hphi[l[face]] -= Upper[face]*sf[u[face]];//取负
}