From cbbfa574301e4932b067daa011a51134bdffce40 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 2 Jan 2014 17:32:36 +0000 Subject: [PATCH] fvMatrix::operator&: filter matrix with no diagonal as special case --- src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C index 3ca9ddd62c..4ba078901b 100644 --- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C +++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C @@ -2348,12 +2348,19 @@ Foam::operator& GeometricField& Mphi = tMphi(); // Loop over field components - for (direction cmpt=0; cmpt::nComponents; cmpt++) + if (M.hasDiag()) { - scalarField psiCmpt(psi.field().component(cmpt)); - scalarField boundaryDiagCmpt(M.diag()); - M.addBoundaryDiag(boundaryDiagCmpt, cmpt); - Mphi.internalField().replace(cmpt, -boundaryDiagCmpt*psiCmpt); + for (direction cmpt=0; cmpt::nComponents; cmpt++) + { + scalarField psiCmpt(psi.field().component(cmpt)); + scalarField boundaryDiagCmpt(M.diag()); + M.addBoundaryDiag(boundaryDiagCmpt, cmpt); + Mphi.internalField().replace(cmpt, -boundaryDiagCmpt*psiCmpt); + } + } + else + { + Mphi.internalField() = pTraits::zero; } Mphi.internalField() += M.lduMatrix::H(psi.field()) + M.source();