From 3b63c760a953d554880b235d6904d07760d70b27 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Tue, 17 May 2016 12:36:49 +0100
Subject: [PATCH] writeRegisteredObject: Now writes the <time>/uniform/time
 dictionary

---
 src/OpenFOAM/db/Time/Time.H                   |  3 +
 src/OpenFOAM/db/Time/TimeIO.C                 | 63 ++++++++++++-------
 .../writeRegisteredObject.C                   |  5 ++
 3 files changed, 47 insertions(+), 24 deletions(-)

diff --git a/src/OpenFOAM/db/Time/Time.H b/src/OpenFOAM/db/Time/Time.H
index b57d7739466..2d1fefe6dd0 100644
--- a/src/OpenFOAM/db/Time/Time.H
+++ b/src/OpenFOAM/db/Time/Time.H
@@ -372,6 +372,9 @@ public:
                 const word& constantName = "constant"
             );
 
+            //- Write time dictionary to the <time>/uniform directory
+            virtual bool writeTimeDict() const;
+
             //- Write using given format, version and compression
             virtual bool writeObject
             (
diff --git a/src/OpenFOAM/db/Time/TimeIO.C b/src/OpenFOAM/db/Time/TimeIO.C
index 918bdd548a1..436661040fa 100644
--- a/src/OpenFOAM/db/Time/TimeIO.C
+++ b/src/OpenFOAM/db/Time/TimeIO.C
@@ -410,6 +410,39 @@ void Foam::Time::readModifiedObjects()
 }
 
 
+bool Foam::Time::writeTimeDict() const
+{
+    const word tmName(timeName());
+
+    IOdictionary timeDict
+    (
+        IOobject
+        (
+            "time",
+            tmName,
+            "uniform",
+            *this,
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            false
+        )
+    );
+
+    timeDict.add("value", timeName(timeToUserTime(value()), maxPrecision_));
+    timeDict.add("name", string(tmName));
+    timeDict.add("index", timeIndex_);
+    timeDict.add("deltaT", timeToUserTime(deltaT_));
+    timeDict.add("deltaT0", timeToUserTime(deltaT0_));
+
+    return timeDict.regIOobject::writeObject
+    (
+        IOstream::ASCII,
+        IOstream::currentVersion,
+        IOstream::UNCOMPRESSED
+    );
+}
+
+
 bool Foam::Time::writeObject
 (
     IOstream::streamFormat fmt,
@@ -419,37 +452,19 @@ bool Foam::Time::writeObject
 {
     if (writeTime())
     {
-        const word tmName(timeName());
-
-        IOdictionary timeDict
-        (
-            IOobject
-            (
-                "time",
-                tmName,
-                "uniform",
-                *this,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                false
-            )
-        );
-
-        timeDict.add("value", timeName(timeToUserTime(value()), maxPrecision_));
-        timeDict.add("name", string(tmName));
-        timeDict.add("index", timeIndex_);
-        timeDict.add("deltaT", timeToUserTime(deltaT_));
-        timeDict.add("deltaT0", timeToUserTime(deltaT0_));
+        bool writeOK = writeTimeDict();
 
-        timeDict.regIOobject::writeObject(fmt, ver, cmp);
-        bool writeOK = objectRegistry::writeObject(fmt, ver, cmp);
+        if (writeOK)
+        {
+            writeOK = objectRegistry::writeObject(fmt, ver, cmp);
+        }
 
         if (writeOK)
         {
             // Does the writeTime trigger purging?
             if (writeTime_ && purgeWrite_)
             {
-                previousWriteTimes_.push(tmName);
+                previousWriteTimes_.push(timeName());
 
                 while (previousWriteTimes_.size() > purgeWrite_)
                 {
diff --git a/src/postProcessing/functionObjects/utilities/writeRegisteredObject/writeRegisteredObject.C b/src/postProcessing/functionObjects/utilities/writeRegisteredObject/writeRegisteredObject.C
index 0963320dbcf..17dc699b4c0 100644
--- a/src/postProcessing/functionObjects/utilities/writeRegisteredObject/writeRegisteredObject.C
+++ b/src/postProcessing/functionObjects/utilities/writeRegisteredObject/writeRegisteredObject.C
@@ -103,6 +103,11 @@ bool Foam::functionObjects::writeRegisteredObject::write
 {
     Info<< type() << " " << name() << " output:" << nl;
 
+    if (!obr_.time().writeTime())
+    {
+        obr_.time().writeTimeDict();
+    }
+
     DynamicList<word> allNames(obr_.toc().size());
     forAll(objectNames_, i)
     {
-- 
GitLab