From 793fec252113df45a6e085dfef09dae8de054c09 Mon Sep 17 00:00:00 2001
From: henry <Henry Weller h.weller@opencfd.co.uk>
Date: Fri, 9 May 2008 11:47:33 +0100
Subject: [PATCH] Added ddtPhiCorr support for moving mesh

---
 .../multiphase/interDyMFoam/interDyMFoam.C    |   7 +-
 .../solvers/multiphase/interDyMFoam/pEqn.H    |   2 +-
 .../EulerDdtScheme/EulerDdtScheme.C           | 199 +++++-------
 .../backwardDdtScheme/backwardDdtScheme.C     | 288 ++++++++----------
 4 files changed, 212 insertions(+), 284 deletions(-)

diff --git a/applications/solvers/multiphase/interDyMFoam/interDyMFoam.C b/applications/solvers/multiphase/interDyMFoam/interDyMFoam.C
index b3046c7fbb9..e46cba7db9a 100644
--- a/applications/solvers/multiphase/interDyMFoam/interDyMFoam.C
+++ b/applications/solvers/multiphase/interDyMFoam/interDyMFoam.C
@@ -74,7 +74,7 @@ int main(int argc, char *argv[])
         Info<< "Time = " << runTime.timeName() << nl << endl;
 
         // Make the fluxes absolute
-        if (mesh.changing() && correctPhi)
+        if (mesh.changing())
         {
             fvc::makeAbsolute(phi, U);
         }
@@ -99,8 +99,11 @@ int main(int argc, char *argv[])
             #include "correctPhi.H"
         }
 
+        // Keep the absolute fluxes for use in ddtPhiCorr
+        surfaceScalarField phiAbs("phiAbs", phi);
+
         // Make the fluxes relative to the mesh motion
-        if (mesh.changing() && correctPhi)
+        if (mesh.changing())
         {
             fvc::makeRelative(phi, U);
         }
diff --git a/applications/solvers/multiphase/interDyMFoam/pEqn.H b/applications/solvers/multiphase/interDyMFoam/pEqn.H
index 6ae105b3bcf..5bd1a98d40a 100644
--- a/applications/solvers/multiphase/interDyMFoam/pEqn.H
+++ b/applications/solvers/multiphase/interDyMFoam/pEqn.H
@@ -9,7 +9,7 @@
     (
         "phiU",
         (fvc::interpolate(U) & mesh.Sf())
-    //+ fvc::ddtPhiCorr(rAU, rho, U, phiAbs)
+      + fvc::ddtPhiCorr(rAU, rho, U, phiAbs)
     );
 
     phi = phiU +
diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.C b/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.C
index 1a5d4b498dd..ee3381932e5 100644
--- a/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.C
+++ b/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.C
@@ -1,4 +1,4 @@
-/*---------------------------------------------------------------------------*\
+/*---------------------------------------------------------------------------* \
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
@@ -21,7 +21,7 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM; if not, write to the Free Software Foundation,
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-    
+
 \*---------------------------------------------------------------------------*/
 
 #include "EulerDdtScheme.H"
@@ -279,7 +279,7 @@ EulerDdtScheme<Type>::fvmDdt
     scalar rDeltaT = 1.0/mesh().time().deltaT().value();
 
     fvm.diag() = rDeltaT*mesh().V();
-    
+
     if (mesh().moving())
     {
         fvm.source() = rDeltaT*vf.oldTime().internalField()*mesh().V0();
@@ -314,7 +314,7 @@ EulerDdtScheme<Type>::fvmDdt
     scalar rDeltaT = 1.0/mesh().time().deltaT().value();
 
     fvm.diag() = rDeltaT*rho.value()*mesh().V();
-    
+
     if (mesh().moving())
     {
         fvm.source() = rDeltaT
@@ -375,50 +375,30 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
 (
     const volScalarField& rA,
     const GeometricField<Type, fvPatchField, volMesh>& U,
-    const fluxFieldType& phi
+    const fluxFieldType& phiAbs
 )
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
     IOobject ddtIOobject
     (
-        "ddtPhiCorr(" + rA.name() + ',' + U.name() + ',' + phi.name() + ')',
+        "ddtPhiCorr(" + rA.name() + ',' + U.name() + ',' + phiAbs.name() + ')',
         mesh().time().timeName(),
         mesh()
     );
 
-    if (mesh().moving())
-    {
-        return tmp<fluxFieldType>
-        (
-            new fluxFieldType
-            (
-                ddtIOobject,
-                mesh(),
-                dimensioned<typename flux<Type>::type>
-                (
-                    "0",
-                    rDeltaT.dimensions()*rA.dimensions()*phi.dimensions(),
-                    pTraits<typename flux<Type>::type>::zero
-                )
-            )
-        );
-    }
-    else
-    {
-        tmp<fluxFieldType> phiCorr =
-            phi.oldTime() - (fvc::interpolate(U.oldTime()) & mesh().Sf());
+    tmp<fluxFieldType> phiCorr =
+        phiAbs.oldTime() - (fvc::interpolate(U.oldTime()) & mesh().Sf());
 
-        return tmp<fluxFieldType>
+    return tmp<fluxFieldType>
+    (
+        new fluxFieldType
         (
-            new fluxFieldType
-            (
-                ddtIOobject,
-                fvcDdtPhiCoeff(U.oldTime(), phi.oldTime(), phiCorr())
-               *fvc::interpolate(rDeltaT*rA)*phiCorr
-            )
-        );
-    }
+            ddtIOobject,
+            fvcDdtPhiCoeff(U.oldTime(), phiAbs.oldTime(), phiCorr())
+           *fvc::interpolate(rDeltaT*rA)*phiCorr
+        )
+    );
 }
 
 
@@ -429,7 +409,7 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
     const volScalarField& rA,
     const volScalarField& rho,
     const GeometricField<Type, fvPatchField, volMesh>& U,
-    const fluxFieldType& phi
+    const fluxFieldType& phiAbs
 )
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
@@ -437,111 +417,94 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
     IOobject ddtIOobject
     (
         "ddtPhiCorr("
-      + rA.name() + ',' + rho.name() + ',' + U.name() + ',' + phi.name() + ')',
+      + rA.name() + ','
+      + rho.name() + ','
+      + U.name() + ','
+      + phiAbs.name() + ')',
         mesh().time().timeName(),
         mesh()
     );
 
-    if (mesh().moving())
+    if
+    (
+        U.dimensions() == dimVelocity
+     && phiAbs.dimensions() == dimVelocity*dimArea
+    )
     {
         return tmp<fluxFieldType>
         (
             new fluxFieldType
             (
                 ddtIOobject,
-                mesh(),
-                dimensioned<typename flux<Type>::type>
-                (
-                    "0",
-                    rDeltaT.dimensions()*rA.dimensions()
-                   *rho.dimensions()*phi.dimensions(),
-                    pTraits<typename flux<Type>::type>::zero
+                rDeltaT
+               *fvcDdtPhiCoeff(U.oldTime(), phiAbs.oldTime())
+               *(
+                   fvc::interpolate(rA*rho.oldTime())*phiAbs.oldTime()
+                 - (fvc::interpolate(rA*rho.oldTime()*U.oldTime())
+                  & mesh().Sf())
                 )
             )
         );
     }
-    else
+    else if
+    (
+        U.dimensions() == dimVelocity
+     && phiAbs.dimensions() == rho.dimensions()*dimVelocity*dimArea
+    )
     {
-        if
+        return tmp<fluxFieldType>
         (
-            U.dimensions() == dimVelocity
-         && phi.dimensions() == dimVelocity*dimArea
-        )
-        {
-            return tmp<fluxFieldType>
+            new fluxFieldType
             (
-                new fluxFieldType
+                ddtIOobject,
+                rDeltaT
+               *fvcDdtPhiCoeff
                 (
-                    ddtIOobject,
-                    rDeltaT*fvcDdtPhiCoeff(U.oldTime(), phi.oldTime())
-                   *(
-                        fvc::interpolate(rA*rho.oldTime())*phi.oldTime()
-                      - (fvc::interpolate(rA*rho.oldTime()*U.oldTime())
-                      & mesh().Sf())
-                    )
+                    U.oldTime(),
+                    phiAbs.oldTime()/fvc::interpolate(rho.oldTime())
                 )
-            );
-        }
-        else if 
+               *(
+                   fvc::interpolate(rA*rho.oldTime())
+                  *phiAbs.oldTime()/fvc::interpolate(rho.oldTime())
+                 - (
+                       fvc::interpolate
+                       (
+                           rA*rho.oldTime()*U.oldTime()
+                       ) & mesh().Sf()
+                 )
+               )
+            )
+        );
+    }
+    else if
+    (
+        U.dimensions() == rho.dimensions()*dimVelocity
+     && phiAbs.dimensions() == rho.dimensions()*dimVelocity*dimArea
+    )
+    {
+        return tmp<fluxFieldType>
         (
-            U.dimensions() == dimVelocity
-         && phi.dimensions() == rho.dimensions()*dimVelocity*dimArea
-        )
-        {
-            return tmp<fluxFieldType>
+            new fluxFieldType
             (
-                new fluxFieldType
-                (
-                    ddtIOobject,
-                    rDeltaT
-                   *fvcDdtPhiCoeff
-                    (
-                        U.oldTime(),
-                        phi.oldTime()/fvc::interpolate(rho.oldTime())
-                    )
-                   *(
-                        fvc::interpolate(rA*rho.oldTime())
-                       *phi.oldTime()/fvc::interpolate(rho.oldTime())
-                      - (
-                            fvc::interpolate
-                            (
-                                rA*rho.oldTime()*U.oldTime()
-                            ) & mesh().Sf()
-                        )
-                    )
+                ddtIOobject,
+                rDeltaT
+               *fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phiAbs.oldTime())
+               *(
+                   fvc::interpolate(rA)*phiAbs.oldTime()
+                 - (fvc::interpolate(rA*U.oldTime()) & mesh().Sf())
                 )
-            );
-        }
-        else if 
+            )
+        );
+    }
+    else
+    {
+        FatalErrorIn
         (
-            U.dimensions() == rho.dimensions()*dimVelocity
-         && phi.dimensions() == rho.dimensions()*dimVelocity*dimArea
-        )
-        {
-            return tmp<fluxFieldType>
-            (
-                new fluxFieldType
-                (
-                    ddtIOobject,
-                    rDeltaT
-                   *fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phi.oldTime())
-                   *(
-                        fvc::interpolate(rA)*phi.oldTime()
-                      - (fvc::interpolate(rA*U.oldTime()) & mesh().Sf())
-                    )
-                )
-            );
-        }
-        else
-        {
-            FatalErrorIn
-            (
-                "EulerDdtScheme<Type>::fvcDdtPhiCorr"
-            )   << "dimensions of phi are not correct"
-                << abort(FatalError);
+            "EulerDdtScheme<Type>::fvcDdtPhiCorr"
+        )   << "dimensions of phiAbs are not correct"
+            << abort(FatalError);
 
-            return fluxFieldType::null();
-        }
+        return fluxFieldType::null();
     }
 }
 
diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/backwardDdtScheme/backwardDdtScheme.C b/src/finiteVolume/finiteVolume/ddtSchemes/backwardDdtScheme/backwardDdtScheme.C
index 0c30c641c3f..f36312b64f3 100644
--- a/src/finiteVolume/finiteVolume/ddtSchemes/backwardDdtScheme/backwardDdtScheme.C
+++ b/src/finiteVolume/finiteVolume/ddtSchemes/backwardDdtScheme/backwardDdtScheme.C
@@ -21,7 +21,7 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM; if not, write to the Free Software Foundation,
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-    
+
 \*---------------------------------------------------------------------------*/
 
 #include "backwardDdtScheme.H"
@@ -531,58 +531,38 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
         mesh()
     );
 
-    if (mesh().moving())
-    {
-        return tmp<fluxFieldType>
-        (
-            new fluxFieldType
-            (
-                ddtIOobject,
-                mesh(),
-                dimensioned<typename flux<Type>::type>
-                (
-                    "0",
-                    rDeltaT.dimensions()*rA.dimensions()*phi.dimensions(),
-                    pTraits<typename flux<Type>::type>::zero
-                )
-            )
-        );
-    }
-    else
-    {
-        scalar deltaT = deltaT_();
-        scalar deltaT0 = deltaT0_(U);
+    scalar deltaT = deltaT_();
+    scalar deltaT0 = deltaT0_(U);
 
-        scalar coefft   = 1 + deltaT/(deltaT + deltaT0);
-        scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
-        scalar coefft0  = coefft + coefft00;
+    scalar coefft   = 1 + deltaT/(deltaT + deltaT0);
+    scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
+    scalar coefft0  = coefft + coefft00;
 
-        return tmp<fluxFieldType>
+    return tmp<fluxFieldType>
+    (
+        new fluxFieldType
         (
-            new fluxFieldType
-            (
-                ddtIOobject,
-                rDeltaT*fvcDdtPhiCoeff(U.oldTime(), phi.oldTime())
+            ddtIOobject,
+            rDeltaT*fvcDdtPhiCoeff(U.oldTime(), phi.oldTime())
+           *(
+                fvc::interpolate(rA)
                *(
-                    fvc::interpolate(rA)
-                   *(
-                       coefft0*phi.oldTime()
-                     - coefft00*phi.oldTime().oldTime()
-                    )
-                  - (
-                        fvc::interpolate
+                   coefft0*phi.oldTime()
+                 - coefft00*phi.oldTime().oldTime()
+                )
+              - (
+                    fvc::interpolate
+                    (
+                        rA*
                         (
-                            rA*
-                            (
-                                coefft0*U.oldTime()
-                              - coefft00*U.oldTime().oldTime()
-                            )
-                        ) & mesh().Sf()
-                    )
+                            coefft0*U.oldTime()
+                          - coefft00*U.oldTime().oldTime()
+                        )
+                    ) & mesh().Sf()
                 )
             )
-        );
-    }
+        )
+    );
 }
 
 
@@ -593,7 +573,7 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
     const volScalarField& rA,
     const volScalarField& rho,
     const GeometricField<Type, fvPatchField, volMesh>& U,
-    const fluxFieldType& phi
+    const fluxFieldType& phiAbs
 )
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
@@ -601,152 +581,134 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
     IOobject ddtIOobject
     (
         "ddtPhiCorr("
-      + rA.name() + ',' + rho.name() + ',' + U.name() + ',' + phi.name() + ')',
+      + rA.name() + ','
+      + rho.name() + ','
+      + U.name() + ','
+      + phiAbs.name() + ')',
         mesh().time().timeName(),
         mesh()
     );
 
-    if (mesh().moving())
+    scalar deltaT = deltaT_();
+    scalar deltaT0 = deltaT0_(U);
+
+    scalar coefft   = 1 + deltaT/(deltaT + deltaT0);
+    scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
+    scalar coefft0  = coefft + coefft00;
+
+    if
+    (
+        U.dimensions() == dimVelocity
+     && phiAbs.dimensions() == dimVelocity*dimArea
+    )
     {
         return tmp<fluxFieldType>
         (
             new fluxFieldType
             (
                 ddtIOobject,
-                mesh(),
-                dimensioned<typename flux<Type>::type>
-                (
-                    "0",
-                    rDeltaT.dimensions()*rA.dimensions()
-                   *rho.dimensions()*phi.dimensions(),
-                    pTraits<typename flux<Type>::type>::zero
+                rDeltaT*fvcDdtPhiCoeff(U.oldTime(), phiAbs.oldTime())
+               *(
+                    coefft0*fvc::interpolate(rA*rho.oldTime())
+                   *phiAbs.oldTime()
+                  - coefft00*fvc::interpolate(rA*rho.oldTime().oldTime())
+                   *phiAbs.oldTime().oldTime()
+                  - (
+                        fvc::interpolate
+                        (
+                            rA*
+                            (
+                                coefft0*rho.oldTime()*U.oldTime()
+                              - coefft00*rho.oldTime().oldTime()
+                               *U.oldTime().oldTime()
+                            )
+                        ) & mesh().Sf()
+                    )
                 )
             )
         );
     }
-    else
+    else if
+    (
+        U.dimensions() == dimVelocity
+     && phiAbs.dimensions() == rho.dimensions()*dimVelocity*dimArea
+    )
     {
-        scalar deltaT = deltaT_();
-        scalar deltaT0 = deltaT0_(U);
-
-        scalar coefft   = 1 + deltaT/(deltaT + deltaT0);
-        scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
-        scalar coefft0  = coefft + coefft00;
-
-        if
+        return tmp<fluxFieldType>
         (
-            U.dimensions() == dimVelocity
-         && phi.dimensions() == dimVelocity*dimArea
-        )
-        {
-            return tmp<fluxFieldType>
+            new fluxFieldType
             (
-                new fluxFieldType
+                ddtIOobject,
+                rDeltaT
+               *fvcDdtPhiCoeff
                 (
-                    ddtIOobject,
-                    rDeltaT*fvcDdtPhiCoeff(U.oldTime(), phi.oldTime())
-                   *(
-                        coefft0*fvc::interpolate(rA*rho.oldTime())
-                       *phi.oldTime()
-                      - coefft00*fvc::interpolate(rA*rho.oldTime().oldTime())
-                       *phi.oldTime().oldTime()
-                      - (
-                            fvc::interpolate
-                            (
-                                rA*
-                                (
-                                    coefft0*rho.oldTime()*U.oldTime()
-                                  - coefft00*rho.oldTime().oldTime()
-                                   *U.oldTime().oldTime()
-                                )
-                            ) & mesh().Sf()
-                        )
-                    )
+                    U.oldTime(),
+                    phiAbs.oldTime()/fvc::interpolate(rho.oldTime())
                 )
-            );
-        }
-        else if 
-        (
-            U.dimensions() == dimVelocity
-         && phi.dimensions() == rho.dimensions()*dimVelocity*dimArea
-        )
-        {
-            return tmp<fluxFieldType>
-            (
-                new fluxFieldType
-                (
-                    ddtIOobject,
-                    rDeltaT
-                   *fvcDdtPhiCoeff
-                    (
-                        U.oldTime(),
-                        phi.oldTime()/fvc::interpolate(rho.oldTime())
-                    )
+               *(
+                    fvc::interpolate(rA*rho.oldTime())
                    *(
-                        fvc::interpolate(rA*rho.oldTime())
-                       *(
-                           coefft0*phi.oldTime()
-                          /fvc::interpolate(rho.oldTime())
-                         - coefft00*phi.oldTime().oldTime()
-                          /fvc::interpolate(rho.oldTime().oldTime())
-                        )
-                      - (
-                            fvc::interpolate
+                       coefft0*phiAbs.oldTime()
+                      /fvc::interpolate(rho.oldTime())
+                     - coefft00*phiAbs.oldTime().oldTime()
+                      /fvc::interpolate(rho.oldTime().oldTime())
+                    )
+                  - (
+                        fvc::interpolate
+                        (
+                            rA*rho.oldTime()*
                             (
-                                rA*rho.oldTime()*
-                                (
-                                    coefft0*U.oldTime()
-                                  - coefft00*U.oldTime().oldTime()
-                                )
-                            ) & mesh().Sf()
-                        )
+                                coefft0*U.oldTime()
+                              - coefft00*U.oldTime().oldTime()
+                            )
+                        ) & mesh().Sf()
                     )
                 )
-            );
-        }
-        else if 
+            )
+        );
+    }
+    else if
+    (
+        U.dimensions() == rho.dimensions()*dimVelocity
+     && phiAbs.dimensions() == rho.dimensions()*dimVelocity*dimArea
+    )
+    {
+        return tmp<fluxFieldType>
         (
-            U.dimensions() == rho.dimensions()*dimVelocity
-         && phi.dimensions() == rho.dimensions()*dimVelocity*dimArea
-        )
-        {
-            return tmp<fluxFieldType>
+            new fluxFieldType
             (
-                new fluxFieldType
-                (
-                    ddtIOobject,
-                    rDeltaT
-                   *fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phi.oldTime())
+                ddtIOobject,
+                rDeltaT
+               *fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phiAbs.oldTime())
+               *(
+                    fvc::interpolate(rA)
                    *(
-                        fvc::interpolate(rA)
-                       *(
-                           coefft0*phi.oldTime()
-                         - coefft00*phi.oldTime().oldTime()
-                        )
-                      - (
-                            fvc::interpolate
+                       coefft0*phiAbs.oldTime()
+                     - coefft00*phiAbs.oldTime().oldTime()
+                    )
+                  - (
+                        fvc::interpolate
+                        (
+                            rA*
                             (
-                                rA*
-                                (
-                                    coefft0*U.oldTime()
-                                  - coefft00*U.oldTime().oldTime()
-                                )
-                            ) & mesh().Sf()
-                        )
+                                coefft0*U.oldTime()
+                              - coefft00*U.oldTime().oldTime()
+                            )
+                        ) & mesh().Sf()
                     )
                 )
-            );
-        }
-        else
-        {
-            FatalErrorIn
-            (
-                "backwardDdtScheme<Type>::fvcDdtPhiCorr"
-            )   << "dimensions of phi are not correct"
-                << abort(FatalError);
+            )
+        );
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "backwardDdtScheme<Type>::fvcDdtPhiCorr"
+        )   << "dimensions of phiAbs are not correct"
+            << abort(FatalError);
 
-            return fluxFieldType::null();
-        }
+        return fluxFieldType::null();
     }
 }
 
-- 
GitLab