From f609ccd76f3dafc37f4bd6dfc91ffd3eadbd72dd Mon Sep 17 00:00:00 2001
From: Henry <Henry>
Date: Thu, 1 May 2014 16:11:03 +0100
Subject: [PATCH] fvOptions: Rationalise the rhoEqn.H so that all compressible
 solvers support mass-sources correctly

---
 .../solvers/compressible/sonicFoam/EEqn.H        | 12 +++++++++++-
 .../solvers/compressible/sonicFoam/Make/options  | 10 ++++++++--
 .../solvers/compressible/sonicFoam/UEqn.H        | 15 +++++++++++++--
 .../solvers/compressible/sonicFoam/pEqn.H        |  7 +++++++
 .../sonicFoam/sonicDyMFoam/Make/options          | 13 +++++++++----
 .../compressible/sonicFoam/sonicDyMFoam/pEqn.H   |  7 +++++++
 .../sonicFoam/sonicDyMFoam/sonicDyMFoam.C        |  4 +++-
 .../solvers/compressible/sonicFoam/sonicFoam.C   |  4 +++-
 .../sonicLiquidFoam/compressibleContinuityErrs.H |  2 +-
 .../sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C  |  2 +-
 src/finiteVolume/cfdTools/compressible/rhoEqn.H  | 16 ++++++++++++++--
 11 files changed, 77 insertions(+), 15 deletions(-)

diff --git a/applications/solvers/compressible/sonicFoam/EEqn.H b/applications/solvers/compressible/sonicFoam/EEqn.H
index f10474c587a..73ce8373964 100644
--- a/applications/solvers/compressible/sonicFoam/EEqn.H
+++ b/applications/solvers/compressible/sonicFoam/EEqn.H
@@ -1,11 +1,21 @@
 {
-    solve
+    fvScalarMatrix EEqn
     (
         fvm::ddt(rho, e) + fvm::div(phi, e)
       + fvc::ddt(rho, K) + fvc::div(phi, K)
       + fvc::div(fvc::absolute(phi/fvc::interpolate(rho), U), p, "div(phiv,p)")
       - fvm::laplacian(turbulence->alphaEff(), e)
+     ==
+        fvOptions(rho, e)
     );
 
+    EEqn.relax();
+
+    fvOptions.constrain(EEqn);
+
+    EEqn.solve();
+
+    fvOptions.correct(e);
+
     thermo.correct();
 }
diff --git a/applications/solvers/compressible/sonicFoam/Make/options b/applications/solvers/compressible/sonicFoam/Make/options
index f9c097c8748..b1663bb8243 100644
--- a/applications/solvers/compressible/sonicFoam/Make/options
+++ b/applications/solvers/compressible/sonicFoam/Make/options
@@ -1,6 +1,10 @@
 EXE_INC = \
+    -I$(LIB_SRC)/transportModels/compressible/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/fvOptions/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude
 
 EXE_LIBS = \
@@ -9,5 +13,7 @@ EXE_LIBS = \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
     -lcompressibleLESModels \
-    -lfiniteVolume \
-    -lmeshTools
+    -lmeshTools \
+    -lsampling \
+    -lfvOptions \
+    -lfiniteVolume
diff --git a/applications/solvers/compressible/sonicFoam/UEqn.H b/applications/solvers/compressible/sonicFoam/UEqn.H
index c002490b483..c4065161fe2 100644
--- a/applications/solvers/compressible/sonicFoam/UEqn.H
+++ b/applications/solvers/compressible/sonicFoam/UEqn.H
@@ -3,7 +3,18 @@ fvVectorMatrix UEqn
     fvm::ddt(rho, U)
   + fvm::div(phi, U)
   + turbulence->divDevRhoReff(U)
+ ==
+    fvOptions(rho, U)
 );
 
-solve(UEqn == -fvc::grad(p));
-K = 0.5*magSqr(U);
+UEqn.relax();
+
+fvOptions.constrain(UEqn);
+
+if (pimple.momentumPredictor())
+{
+    solve(UEqn == -fvc::grad(p));
+
+    fvOptions.correct(U);
+    K = 0.5*magSqr(U);
+}
diff --git a/applications/solvers/compressible/sonicFoam/pEqn.H b/applications/solvers/compressible/sonicFoam/pEqn.H
index 022abc466aa..693f9d60d39 100644
--- a/applications/solvers/compressible/sonicFoam/pEqn.H
+++ b/applications/solvers/compressible/sonicFoam/pEqn.H
@@ -16,6 +16,8 @@ surfaceScalarField phid
     )
 );
 
+fvOptions.makeRelative(fvc::interpolate(psi), phid);
+
 // Non-orthogonal pressure corrector loop
 while (pimple.correctNonOrthogonal())
 {
@@ -24,8 +26,12 @@ while (pimple.correctNonOrthogonal())
         fvm::ddt(psi, p)
       + fvm::div(phid, p)
       - fvm::laplacian(rhorAUf, p)
+     ==
+        fvOptions(psi, p, rho.name())
     );
 
+    fvOptions.constrain(pEqn);
+
     pEqn.solve();
 
     if (pimple.finalNonOrthogonalIter())
@@ -39,4 +45,5 @@ while (pimple.correctNonOrthogonal())
 
 U = HbyA - rAU*fvc::grad(p);
 U.correctBoundaryConditions();
+fvOptions.correct(U);
 K = 0.5*magSqr(U);
diff --git a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options
index 263b9861edb..d374c750596 100644
--- a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options
+++ b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options
@@ -1,10 +1,13 @@
 EXE_INC = \
     -I.. \
+    -I$(LIB_SRC)/transportModels/compressible/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/fvOptions/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(LIB_SRC)/dynamicMesh/lnInclude \
-    -I$(LIB_SRC)/meshTools/lnInclude
+    -I$(LIB_SRC)/dynamicMesh/lnInclude
 
 EXE_LIBS = \
     -lfluidThermophysicalModels \
@@ -12,6 +15,8 @@ EXE_LIBS = \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
     -lcompressibleLESModels \
+    -lmeshTools \
+    -lsampling \
+    -lfvOptions \
     -lfiniteVolume \
-    -ldynamicMesh \
-    -lmeshTools
+    -ldynamicMesh
diff --git a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/pEqn.H b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/pEqn.H
index b375f0e82a6..76e2a09a8f3 100644
--- a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/pEqn.H
+++ b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/pEqn.H
@@ -19,6 +19,7 @@ surfaceScalarField phid
 );
 
 fvc::makeRelative(phid, psi, U);
+fvOptions.makeRelative(fvc::interpolate(psi), phid);
 
 for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
 {
@@ -27,8 +28,12 @@ for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
         fvm::ddt(psi, p)
       + fvm::div(phid, p)
       - fvm::laplacian(rhorAUf, p)
+     ==
+        fvOptions(psi, p, rho.name())
     );
 
+    fvOptions.constrain(pEqn);
+
     pEqn.solve();
 
     phi = pEqn.flux();
@@ -38,6 +43,8 @@ for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
 
 U = HbyA - rAU*fvc::grad(p);
 U.correctBoundaryConditions();
+fvOptions.correct(U);
+K = 0.5*magSqr(U);
 
 {
     rhoUf = fvc::interpolate(rho*U);
diff --git a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C
index 62d4716fb5a..746f95d97c1 100644
--- a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C
+++ b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -35,6 +35,7 @@ Description
 #include "turbulenceModel.H"
 #include "motionSolver.H"
 #include "pimpleControl.H"
+#include "fvIOoptionList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -44,6 +45,7 @@ int main(int argc, char *argv[])
     #include "createTime.H"
     #include "createMesh.H"
     #include "createFields.H"
+    #include "createFvOptions.H"
     #include "createRhoUf.H"
     #include "initContinuityErrs.H"
 
diff --git a/applications/solvers/compressible/sonicFoam/sonicFoam.C b/applications/solvers/compressible/sonicFoam/sonicFoam.C
index 71d032d4223..04aab1d0d43 100644
--- a/applications/solvers/compressible/sonicFoam/sonicFoam.C
+++ b/applications/solvers/compressible/sonicFoam/sonicFoam.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -34,6 +34,7 @@ Description
 #include "psiThermo.H"
 #include "turbulenceModel.H"
 #include "pimpleControl.H"
+#include "fvIOoptionList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -43,6 +44,7 @@ int main(int argc, char *argv[])
     #include "createTime.H"
     #include "createMesh.H"
     #include "createFields.H"
+    #include "createFvOptions.H"
     #include "initContinuityErrs.H"
 
     pimpleControl pimple(mesh);
diff --git a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/compressibleContinuityErrs.H b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/compressibleContinuityErrs.H
index b7a816fe4e6..e264660cf47 100644
--- a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/compressibleContinuityErrs.H
+++ b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/compressibleContinuityErrs.H
@@ -1,5 +1,5 @@
 {
-#   include "rhoEqn.H"
+    solve(fvm::ddt(rho) + fvc::div(phi));
 }
 {
     scalar sumLocalContErr =
diff --git a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
index eb0a4a0d9a2..acfb4d3b80f 100644
--- a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
+++ b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
@@ -58,7 +58,7 @@ int main(int argc, char *argv[])
         #include "readTimeControls.H"
         #include "compressibleCourantNo.H"
 
-        #include "rhoEqn.H"
+        solve(fvm::ddt(rho) + fvc::div(phi));
 
         // --- Pressure-velocity PIMPLE corrector loop
         while (pimple.loop())
diff --git a/src/finiteVolume/cfdTools/compressible/rhoEqn.H b/src/finiteVolume/cfdTools/compressible/rhoEqn.H
index 25ccb85aac6..353d027e97c 100644
--- a/src/finiteVolume/cfdTools/compressible/rhoEqn.H
+++ b/src/finiteVolume/cfdTools/compressible/rhoEqn.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -30,7 +30,19 @@ Description
 \*---------------------------------------------------------------------------*/
 
 {
-    solve(fvm::ddt(rho) + fvc::div(phi));
+    fvScalarMatrix rhoEqn
+    (
+        fvm::ddt(rho)
+      + fvc::div(phi)
+      ==
+        fvOptions(rho)
+    );
+
+    fvOptions.constrain(rhoEqn);
+
+    rhoEqn.solve();
+
+    fvOptions.correct(rho);
 }
 
 // ************************************************************************* //
-- 
GitLab