From fd7527bf3ba8aa0e939571131c1d04c91bbe5560 Mon Sep 17 00:00:00 2001
From: andy <andy>
Date: Thu, 6 Dec 2012 12:59:09 +0000
Subject: [PATCH] ENH: Updated radiation model selection - defaults to 'none'
 if radiationProperties not found

---
 .../radiationModel/noRadiation/noRadiation.C  |  2 +-
 .../radiationModel/radiationModel.C           | 76 +++++++++----------
 .../radiationModel/radiationModel.H           |  6 +-
 .../radiationModel/radiationModelNew.C        | 32 ++++----
 4 files changed, 56 insertions(+), 60 deletions(-)

diff --git a/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C b/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C
index 604a5dbbe38..69666b7c63a 100644
--- a/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C
+++ b/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C
@@ -52,7 +52,7 @@ Foam::radiation::noRadiation::noRadiation
     const volScalarField& T
 )
 :
-    radiationModel(dict, T)
+    radiationModel(T)
 {}
 
 
diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C
index 55e2e1fb536..5948101185c 100644
--- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C
+++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C
@@ -43,6 +43,33 @@ namespace Foam
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
+Foam::IOobject Foam::radiation::radiationModel::createIOobject
+(
+    const fvMesh& mesh
+) const
+{
+    IOobject io
+    (
+        "radiationProperties",
+        mesh.time().constant(),
+        mesh,
+        IOobject::MUST_READ,
+        IOobject::NO_WRITE
+    );
+
+    if (io.headerOk())
+    {
+        io.readOpt() = IOobject::MUST_READ_IF_MODIFIED;
+        return io;
+    }
+    else
+    {
+        io.readOpt() = IOobject::NO_READ;
+        return io;
+    }
+}
+
+
 void Foam::radiation::radiationModel::initialise()
 {
     if (radiation_)
@@ -62,35 +89,6 @@ void Foam::radiation::radiationModel::initialise()
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::radiation::radiationModel::radiationModel(const volScalarField& T)
-:
-    IOdictionary
-    (
-        IOobject
-        (
-            "radiationProperties",
-            T.time().constant(),
-            T.mesh(),
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE
-        )
-    ),
-    mesh_(T.mesh()),
-    time_(T.time()),
-    T_(T),
-    radiation_(false),
-    coeffs_(dictionary::null),
-    solverFreq_(0),
-    firstIter_(true),
-    absorptionEmission_(NULL),
-    scatter_(NULL)
-{}
-
-
-Foam::radiation::radiationModel::radiationModel
-(
-    const dictionary& dict,
-    const volScalarField& T
-)
 :
     IOdictionary
     (
@@ -101,8 +99,7 @@ Foam::radiation::radiationModel::radiationModel
             T.mesh(),
             IOobject::NO_READ,
             IOobject::NO_WRITE
-        ),
-        dict
+        )
     ),
     mesh_(T.mesh()),
     time_(T.time()),
@@ -122,17 +119,7 @@ Foam::radiation::radiationModel::radiationModel
     const volScalarField& T
 )
 :
-    IOdictionary
-    (
-        IOobject
-        (
-            "radiationProperties",
-            T.time().constant(),
-            T.mesh(),
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE
-        )
-    ),
+    IOdictionary(createIOobject(T.mesh())),
     mesh_(T.mesh()),
     time_(T.time()),
     T_(T),
@@ -143,6 +130,11 @@ Foam::radiation::radiationModel::radiationModel
     absorptionEmission_(NULL),
     scatter_(NULL)
 {
+    if (readOpt() == IOobject::NO_READ)
+    {
+        radiation_ = false;
+    }
+
     initialise();
 }
 
diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H
index 5f5a92887ba..1218dac9e9b 100644
--- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H
+++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H
@@ -109,6 +109,9 @@ private:
 
     // Private Member Functions
 
+        //- Create IO object if dictionary is present
+        IOobject createIOobject(const fvMesh& mesh) const;
+
         //- Initialise
         void initialise();
 
@@ -156,9 +159,6 @@ public:
         //- Null constructor
         radiationModel(const volScalarField& T);
 
-        //- Construct with dictionary
-        radiationModel(const dictionary& dict, const volScalarField& T);
-
         //- Construct from components
         radiationModel(const word& type, const volScalarField& T);
 
diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C
index ae13f11d1a5..9a95b0c88f8 100644
--- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C
+++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C
@@ -33,23 +33,27 @@ Foam::radiation::radiationModel::New
     const volScalarField& T
 )
 {
-    // get model name, but do not register the dictionary
-    const word modelType
+    IOobject radIO
     (
-        IOdictionary
-        (
-            IOobject
-            (
-                "radiationProperties",
-                T.time().constant(),
-                T.mesh(),
-                IOobject::MUST_READ_IF_MODIFIED,
-                IOobject::NO_WRITE,
-                false
-            )
-        ).lookup("radiationModel")
+        "radiationProperties",
+        T.time().constant(),
+        T.mesh(),
+        IOobject::MUST_READ_IF_MODIFIED,
+        IOobject::NO_WRITE,
+        false
     );
 
+    word modelType("none");
+    if (radIO.headerOk())
+    {
+        IOdictionary(radIO).lookup("radiationModel") >> modelType;
+    }
+    else
+    {
+        Info<< "Radiation model not active: radiationProperties not found"
+            << endl;
+    }
+    
     Info<< "Selecting radiationModel " << modelType << endl;
 
     TConstructorTable::iterator cstrIter =
-- 
GitLab