From 0dccf9de85b08593ded9b4cc3dbfc37482bf8b95 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Tue, 18 May 2010 09:24:46 +0200
Subject: [PATCH] ENH: improve robustness of outputFilterOutputControl

---
 src/OpenFOAM/containers/NamedEnum/NamedEnum.C | 18 +++++-----
 .../outputFilterOutputControl.C               | 33 ++++++++++---------
 .../outputFilterOutputControl.H               |  9 +++--
 3 files changed, 33 insertions(+), 27 deletions(-)

diff --git a/src/OpenFOAM/containers/NamedEnum/NamedEnum.C b/src/OpenFOAM/containers/NamedEnum/NamedEnum.C
index 76b8c58765b..b39664af247 100644
--- a/src/OpenFOAM/containers/NamedEnum/NamedEnum.C
+++ b/src/OpenFOAM/containers/NamedEnum/NamedEnum.C
@@ -33,25 +33,25 @@ Foam::NamedEnum<Enum, nEnum>::NamedEnum()
 :
     HashTable<int>(2*nEnum)
 {
-    for (int i=0; i<nEnum; i++)
+    for (int enumI = 0; enumI < nEnum; ++enumI)
     {
-        if (!names[i] || names[i][0] == '\0')
+        if (!names[enumI] || names[enumI][0] == '\0')
         {
-            stringList goodNames(i);
+            stringList goodNames(enumI);
 
-            for (int j = 0; j < i; j++)
+            for (int i = 0; i < enumI; ++i)
             {
-                goodNames[j] = names[j];
+                goodNames[i] = names[i];
             }
 
             FatalErrorIn("NamedEnum<Enum, nEnum>::NamedEnum()")
-                << "Illegal enumeration name at position " << i << endl
+                << "Illegal enumeration name at position " << enumI << endl
                 << "after entries " << goodNames << ".\n"
                 << "Possibly your NamedEnum<Enum, nEnum>::names array"
                 << " is not of size " << nEnum << endl
                 << abort(FatalError);
         }
-        insert(names[i], i);
+        insert(names[enumI], enumI);
     }
 }
 
@@ -61,7 +61,7 @@ Foam::NamedEnum<Enum, nEnum>::NamedEnum()
 template<class Enum, int nEnum>
 Enum Foam::NamedEnum<Enum, nEnum>::read(Istream& is) const
 {
-    word name(is);
+    const word name(is);
 
     HashTable<int>::const_iterator iter = find(name);
 
@@ -71,7 +71,7 @@ Enum Foam::NamedEnum<Enum, nEnum>::read(Istream& is) const
         (
             "NamedEnum<Enum, nEnum>::read(Istream&) const", is
         )   << name << " is not in enumeration: "
-            << toc() << exit(FatalIOError);
+            << sortedToc() << exit(FatalIOError);
     }
 
     return Enum(iter());
diff --git a/src/OpenFOAM/db/functionObjects/outputFilterOutputControl/outputFilterOutputControl.C b/src/OpenFOAM/db/functionObjects/outputFilterOutputControl/outputFilterOutputControl.C
index 2644b0d0009..08694c9817a 100644
--- a/src/OpenFOAM/db/functionObjects/outputFilterOutputControl/outputFilterOutputControl.C
+++ b/src/OpenFOAM/db/functionObjects/outputFilterOutputControl/outputFilterOutputControl.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -68,18 +68,23 @@ Foam::outputFilterOutputControl::~outputFilterOutputControl()
 
 void Foam::outputFilterOutputControl::read(const dictionary& dict)
 {
-    outputControl_ = outputControlNames_.read(dict.lookup("outputControl"));
+    if (dict.found("outputControl"))
+    {
+        outputControl_ = outputControlNames_.read(dict.lookup("outputControl"));
+    }
+    else
+    {
+        outputControl_ = ocTimeStep;
+    }
 
     switch (outputControl_)
     {
         case ocTimeStep:
-        {
-            dict.lookup("outputInterval") >> outputInterval_;
-        }
+            outputInterval_ = dict.lookupOrDefault<label>("outputInterval", 0);
+            break;
+
         default:
-        {
-            // do nothing
-        }
+            break;
     }
 }
 
@@ -89,26 +94,24 @@ bool Foam::outputFilterOutputControl::output() const
     switch (outputControl_)
     {
         case ocTimeStep:
-        {
             return
             (
                 (outputInterval_ <= 1)
              || !(time_.timeIndex() % outputInterval_)
             );
             break;
-        }
+
         case ocOutputTime:
-        {
             return time_.outputTime();
             break;
-        }
+
         default:
-        {
+            // this error should not actually be possible
             FatalErrorIn("bool Foam::outputFilterOutputControl::output()")
-                << "Unknown output control: "
+                << "Undefined output control: "
                 << outputControlNames_[outputControl_] << nl
                 << abort(FatalError);
-        }
+            break;
     }
 
     return false;
diff --git a/src/OpenFOAM/db/functionObjects/outputFilterOutputControl/outputFilterOutputControl.H b/src/OpenFOAM/db/functionObjects/outputFilterOutputControl/outputFilterOutputControl.H
index 865e4cb2c4d..3e6412f4656 100644
--- a/src/OpenFOAM/db/functionObjects/outputFilterOutputControl/outputFilterOutputControl.H
+++ b/src/OpenFOAM/db/functionObjects/outputFilterOutputControl/outputFilterOutputControl.H
@@ -25,6 +25,8 @@ Class
     Foam::outputFilterOutputControl
 
 Description
+    An output control for function objects.
+    The default is time-step execution at every interval.
 
 SourceFiles
     outputFilterOutputControl.C
@@ -51,10 +53,11 @@ class outputFilterOutputControl
 {
 public:
 
+    //- The output control options
     enum outputControls
     {
-        ocTimeStep,
-        ocOutputTime
+        ocTimeStep,   /*!< execution is coupled to the time-step */
+        ocOutputTime  /*!< execution is coupled to the output-time */
     };
 
 
@@ -71,7 +74,7 @@ private:
         //- Type of output
         outputControls outputControl_;
 
-        //- The execution interval (in time steps) when using TIMESTEP mode
+        //- The execution interval (in time steps) when using @c timeStep mode,
         //  a value <= 1 means execute at every time step
         label outputInterval_;
 
-- 
GitLab