added matrix correction operation
authorandy <andy>
Mon, 8 Jun 2009 11:17:16 +0000 (8 12:17 +0100)
committerandy <andy>
Mon, 8 Jun 2009 11:17:16 +0000 (8 12:17 +0100)
src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C
src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.H

index 7403554..3b48854 100644 (file)
@@ -1268,7 +1268,10 @@ Foam::lduMatrix::solverPerformance Foam::solve(fvMatrix<Type>& fvm)
 }
 
 template<class Type>
-Foam::lduMatrix::solverPerformance Foam::solve(const tmp<fvMatrix<Type> >& tfvm)
+Foam::lduMatrix::solverPerformance Foam::solve
+(
+    const tmp<fvMatrix<Type> >& tfvm
+)
 {
     lduMatrix::solverPerformance solverPerf =
         const_cast<fvMatrix<Type>&>(tfvm()).solve();
@@ -1279,6 +1282,51 @@ Foam::lduMatrix::solverPerformance Foam::solve(const tmp<fvMatrix<Type> >& tfvm)
 }
 
 
+template<class Type>
+Foam::tmp<Foam::fvMatrix<Type> > Foam::correction
+(
+    const fvMatrix<Type>& A
+)
+{
+    tmp<Foam::fvMatrix<Type> > tAcorr = A - (A & A.psi());
+
+    if
+    (
+        (A.hasUpper() || A.hasLower())
+     && A.mesh().fluxRequired(A.psi().name())
+    )
+    {
+        tAcorr().faceFluxCorrectionPtr() = (-A.flux()).ptr();
+    }
+
+    return tAcorr;
+}
+
+
+template<class Type>
+Foam::tmp<Foam::fvMatrix<Type> > Foam::correction
+(
+    const tmp<fvMatrix<Type> >& tA
+)
+{
+    tmp<Foam::fvMatrix<Type> > tAcorr = tA - (tA() & tA().psi());
+
+    // Note the matrix coefficients are still that of matrix A
+    const fvMatrix<Type>& A = tAcorr();
+
+    if
+    (
+        (A.hasUpper() || A.hasLower())
+     && A.mesh().fluxRequired(A.psi().name())
+    )
+    {
+        tAcorr().faceFluxCorrectionPtr() = (-A.flux()).ptr();
+    }
+
+    return tAcorr;
+}
+
+
 // * * * * * * * * * * * * * * * Friend Operators  * * * * * * * * * * * * * //
 
 template<class Type>
index 3171bec..056ce56 100644 (file)
@@ -536,6 +536,18 @@ template<class Type>
 lduMatrix::solverPerformance solve(const tmp<fvMatrix<Type> >&);
 
 
+//- Return the correction form of the given matrix
+//  by subtracting the matrix multiplied by the current field
+template<class Type>
+tmp<fvMatrix<Type> > correction(const fvMatrix<Type>&);
+
+
+//- Return the correction form of the given temporary matrix
+//  by subtracting the matrix multiplied by the current field
+template<class Type>
+tmp<fvMatrix<Type> > correction(const tmp<fvMatrix<Type> >&);
+
+
 // * * * * * * * * * * * * * * * Global operators  * * * * * * * * * * * * * //
 
 template<class Type>