From fd44798f82391208ac6a36c4b6cce5101cea44e4 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Thu, 30 Apr 2009 09:45:03 +0200
Subject: [PATCH] avoid persistent settings and spurious messages when
 re-reading fvSchemes

- emit warning for deprecated timeScheme entry
---
 .../finiteVolume/fvSchemes/fvSchemes.C        | 140 ++++++++++++------
 .../finiteVolume/fvSchemes/fvSchemes.H        |   7 +-
 2 files changed, 101 insertions(+), 46 deletions(-)

diff --git a/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.C b/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.C
index b66d628cae1..f9354e3d840 100644
--- a/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.C
+++ b/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.C
@@ -27,10 +27,34 @@ License
 #include "fvSchemes.H"
 #include "Time.H"
 
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
 
 int Foam::fvSchemes::debug(Foam::debug::debugSwitch("fvSchemes", false));
 
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+void Foam::fvSchemes::clear()
+{
+    ddtSchemes_.clear();
+    defaultDdtScheme_.clear();
+    d2dt2Schemes_.clear();
+    defaultD2dt2Scheme_.clear();
+    interpolationSchemes_.clear();
+    defaultInterpolationScheme_.clear();
+    divSchemes_.clear(); // optional
+    defaultDivScheme_.clear();
+    gradSchemes_.clear(); // optional
+    defaultGradScheme_.clear();
+    snGradSchemes_.clear();
+    defaultSnGradScheme_.clear();
+    laplacianSchemes_.clear(); // optional
+    defaultLaplacianScheme_.clear();
+    fluxRequired_.clear();
+    defaultFluxRequired_ = false;
+    cacheFields_.clear();
+}
+
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
@@ -48,8 +72,11 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     ),
     ddtSchemes_
     (
-        ITstream(objectPath() + "::ddtSchemes",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::ddtSchemes",
+            tokenList()
+        )()
     ),
     defaultDdtScheme_
     (
@@ -58,8 +85,11 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     ),
     d2dt2Schemes_
     (
-        ITstream(objectPath() + "::d2dt2Schemes",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::d2dt2Schemes",
+            tokenList()
+        )()
     ),
     defaultD2dt2Scheme_
     (
@@ -68,8 +98,11 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     ),
     interpolationSchemes_
     (
-        ITstream(objectPath() + "::interpolationSchemes",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::interpolationSchemes",
+            tokenList()
+        )()
     ),
     defaultInterpolationScheme_
     (
@@ -78,8 +111,11 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     ),
     divSchemes_
     (
-        ITstream(objectPath() + "::divSchemes",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::divSchemes",
+            tokenList()
+        )()
     ),
     defaultDivScheme_
     (
@@ -88,8 +124,11 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     ),
     gradSchemes_
     (
-        ITstream(objectPath() + "::gradSchemes",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::gradSchemes",
+            tokenList()
+        )()
     ),
     defaultGradScheme_
     (
@@ -98,8 +137,11 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     ),
     snGradSchemes_
     (
-        ITstream(objectPath() + "::snGradSchemes",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::snGradSchemes",
+            tokenList()
+        )()
     ),
     defaultSnGradScheme_
     (
@@ -108,8 +150,11 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     ),
     laplacianSchemes_
     (
-        ITstream(objectPath() + "::laplacianSchemes",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::laplacianSchemes",
+            tokenList()
+        )()
     ),
     defaultLaplacianScheme_
     (
@@ -118,14 +163,20 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     ),
     fluxRequired_
     (
-        ITstream(objectPath() + "::fluxRequired",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::fluxRequired",
+            tokenList()
+        )()
     ),
     defaultFluxRequired_(false),
     cacheFields_
     (
-        ITstream(objectPath() + "::cacheFields",
-        tokenList())()
+        ITstream
+        (
+            objectPath() + "::cacheFields",
+            tokenList()
+        )()
     )
 {
     read();
@@ -140,6 +191,9 @@ bool Foam::fvSchemes::read()
     {
         const dictionary& dict = schemesDict();
 
+        // persistent settings across reads is incorrect
+        clear();
+
         if (dict.found("ddtSchemes"))
         {
             ddtSchemes_ = dict.subDict("ddtSchemes");
@@ -148,20 +202,23 @@ bool Foam::fvSchemes::read()
         {
             // For backward compatibility.
             // The timeScheme will be deprecated with warning or removed
+            WarningIn("fvSchemes::read()")
+                << "Using deprecated 'timeScheme' instead of 'ddtSchemes'"
+                << nl << endl;
 
-            word timeSchemeName(dict.lookup("timeScheme"));
+            word schemeName(dict.lookup("timeScheme"));
 
-            if (timeSchemeName == "EulerImplicit")
+            if (schemeName == "EulerImplicit")
             {
-                timeSchemeName = "Euler";
+                schemeName = "Euler";
             }
-            else if (timeSchemeName == "BackwardDifferencing")
+            else if (schemeName == "BackwardDifferencing")
             {
-                timeSchemeName = "backward";
+                schemeName = "backward";
             }
-            else if (timeSchemeName == "SteadyState")
+            else if (schemeName == "SteadyState")
             {
-                timeSchemeName = "steadyState";
+                schemeName = "steadyState";
             }
             else
             {
@@ -172,19 +229,14 @@ bool Foam::fvSchemes::read()
                     << exit(FatalIOError);
             }
 
-            if (ddtSchemes_.found("default"))
-            {
-                ddtSchemes_.remove("default");
-            }
-
-            ddtSchemes_.add("default", timeSchemeName);
+            ddtSchemes_.set("default", schemeName);
 
             ddtSchemes_.lookup("default")[0].lineNumber() =
                 dict.lookup("timeScheme").lineNumber();
         }
         else
         {
-            ddtSchemes_.add("default", "none");
+            ddtSchemes_.set("default", "none");
         }
 
         if
@@ -205,31 +257,29 @@ bool Foam::fvSchemes::read()
         {
             // For backward compatibility.
             // The timeScheme will be deprecated with warning or removed
+            WarningIn("fvSchemes::read()")
+                << "Using deprecated 'timeScheme' instead of 'd2dt2Schemes'"
+                << nl << endl;
 
-            word timeSchemeName(dict.lookup("timeScheme"));
+            word schemeName(dict.lookup("timeScheme"));
 
-            if (timeSchemeName == "EulerImplicit")
+            if (schemeName == "EulerImplicit")
             {
-                timeSchemeName = "Euler";
+                schemeName = "Euler";
             }
-            else if (timeSchemeName == "SteadyState")
-            {
-                timeSchemeName = "steadyState";
-            }
-
-            if (d2dt2Schemes_.found("default"))
+            else if (schemeName == "SteadyState")
             {
-                d2dt2Schemes_.remove("default");
+                schemeName = "steadyState";
             }
 
-            d2dt2Schemes_.add("default", timeSchemeName);
+            d2dt2Schemes_.set("default", schemeName);
 
             d2dt2Schemes_.lookup("default")[0].lineNumber() =
                 dict.lookup("timeScheme").lineNumber();
         }
         else
         {
-            d2dt2Schemes_.add("default", "none");
+            d2dt2Schemes_.set("default", "none");
         }
 
         if
diff --git a/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.H b/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.H
index 3186085846d..25a9da32c94 100644
--- a/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.H
+++ b/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.H
@@ -84,8 +84,13 @@ class fvSchemes
 
     // Private Member Functions
 
-        //- Disallow default bitwise copy construct and assignment
+        //- Clear the dictionaries and streams before reading
+        void clear();
+
+        //- Disallow default bitwise copy construct
         fvSchemes(const fvSchemes&);
+
+        //- Disallow default bitwise assignment
         void operator=(const fvSchemes&);
 
 
-- 
GitLab