fvMatrix::operator&: filter matrix with no diagonal as special case

This commit is contained in:
Henry
2014-01-02 17:32:36 +00:00
parent d353964215
commit cbbfa57430

View File

@ -2348,12 +2348,19 @@ Foam::operator&
GeometricField<Type, fvPatchField, volMesh>& Mphi = tMphi(); GeometricField<Type, fvPatchField, volMesh>& Mphi = tMphi();
// Loop over field components // Loop over field components
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++) if (M.hasDiag())
{ {
scalarField psiCmpt(psi.field().component(cmpt)); for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
scalarField boundaryDiagCmpt(M.diag()); {
M.addBoundaryDiag(boundaryDiagCmpt, cmpt); scalarField psiCmpt(psi.field().component(cmpt));
Mphi.internalField().replace(cmpt, -boundaryDiagCmpt*psiCmpt); scalarField boundaryDiagCmpt(M.diag());
M.addBoundaryDiag(boundaryDiagCmpt, cmpt);
Mphi.internalField().replace(cmpt, -boundaryDiagCmpt*psiCmpt);
}
}
else
{
Mphi.internalField() = pTraits<Type>::zero;
} }
Mphi.internalField() += M.lduMatrix::H(psi.field()) + M.source(); Mphi.internalField() += M.lduMatrix::H(psi.field()) + M.source();