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]];//取负
        }