diff --git a/src/finiteArea/faMatrices/faMatrix/faMatrix.C b/src/finiteArea/faMatrices/faMatrix/faMatrix.C index b98f60e66a2df840e92cce0a12121d73655f8634..b2d816979899e2d822a636dc20353f7beeae8aaf 100644 --- a/src/finiteArea/faMatrices/faMatrix/faMatrix.C +++ b/src/finiteArea/faMatrices/faMatrix/faMatrix.C @@ -328,14 +328,11 @@ void Foam::faMatrix<Type>::setValuesFromList GeometricField<Type, faPatchField, areaMesh>& >(psi_).primitiveFieldRef(); - forAll(faceLabels, i) - { - const label facei = faceLabels[i]; - const Type& value = values[i]; - - psi[facei] = value; - source_[facei] = value*Diag[facei]; - } + // Following actions: + // - adjust local field psi + // - set local matrix to be diagonal (so adjust source) + // - cut connections to neighbours + // - make (on non-adjusted cells) contribution explicit if (symmetric() || asymmetric()) { @@ -392,6 +389,17 @@ void Foam::faMatrix<Type>::setValuesFromList } } } + + // Note: above loop might have affected source terms on adjusted cells + // so make sure to adjust them afterwards + forAll(faceLabels, i) + { + const label facei = faceLabels[i]; + const Type& value = values[i]; + + psi[facei] = value; + source_[facei] = value*Diag[facei]; + } } diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C index 0a0879db777daa92c044010025504c02e0afaeb1..a82341e6ce5fc60538c796886d95e3e8381d2916 100644 --- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C +++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C @@ -242,14 +242,12 @@ void Foam::fvMatrix<Type>::setValuesFromList GeometricField<Type, fvPatchField, volMesh>& >(psi_).primitiveFieldRef(); - forAll(cellLabels, i) - { - const label celli = cellLabels[i]; - const Type& value = values[i]; - psi[celli] = value; - source_[celli] = value*Diag[celli]; - } + // Following actions: + // - adjust local field psi + // - set local matrix to be diagonal (so adjust source) + // - cut connections to neighbours + // - make (on non-adjusted cells) contribution explicit if (symmetric() || asymmetric()) { @@ -306,6 +304,17 @@ void Foam::fvMatrix<Type>::setValuesFromList } } } + + // Note: above loop might have affected source terms on adjusted cells + // so make sure to adjust them afterwards + forAll(cellLabels, i) + { + const label celli = cellLabels[i]; + const Type& value = values[i]; + + psi[celli] = value; + source_[celli] = value*Diag[celli]; + } }