From e1fe2c82e618f6adab2de1eb046c4e5d78bf52d5 Mon Sep 17 00:00:00 2001
From: andy <andy>
Date: Mon, 5 Mar 2012 15:33:15 +0000
Subject: [PATCH] ENH: Added removeRegisteredObject function object

---
 .../functionObjects/IO/Make/files             |   3 +
 .../IOremoveRegisteredObject.H                |  49 ++++++
 .../removeRegisteredObject.C                  | 106 +++++++++++++
 .../removeRegisteredObject.H                  | 145 ++++++++++++++++++
 .../removeRegisteredObjectFunctionObject.C    |  46 ++++++
 .../removeRegisteredObjectFunctionObject.H    |  54 +++++++
 6 files changed, 403 insertions(+)
 create mode 100644 src/postProcessing/functionObjects/IO/removeRegisteredObject/IOremoveRegisteredObject.H
 create mode 100644 src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
 create mode 100644 src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.H
 create mode 100644 src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObjectFunctionObject.C
 create mode 100644 src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObjectFunctionObject.H

diff --git a/src/postProcessing/functionObjects/IO/Make/files b/src/postProcessing/functionObjects/IO/Make/files
index a00b7575f18..8aeea600e4f 100644
--- a/src/postProcessing/functionObjects/IO/Make/files
+++ b/src/postProcessing/functionObjects/IO/Make/files
@@ -1,6 +1,9 @@
 partialWrite/partialWrite.C
 partialWrite/partialWriteFunctionObject.C
 
+removeRegisteredObject/removeRegisteredObject.C
+removeRegisteredObject/removeRegisteredObjectFunctionObject.C
+
 writeRegisteredObject/writeRegisteredObject.C
 writeRegisteredObject/writeRegisteredObjectFunctionObject.C
 
diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/IOremoveRegisteredObject.H b/src/postProcessing/functionObjects/IO/removeRegisteredObject/IOremoveRegisteredObject.H
new file mode 100644
index 00000000000..d786378ed23
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/IOremoveRegisteredObject.H
@@ -0,0 +1,49 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Typedef
+    Foam::IOremoveRegisteredObject
+
+Description
+    Instance of the generic IOOutputFilter for removeRegisteredObject.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef IOremoveRegisteredObject_H
+#define IOremoveRegisteredObject_H
+
+#include "removeRegisteredObject.H"
+#include "IOOutputFilter.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    typedef IOOutputFilter<removeRegisteredObject> IOremoveRegisteredObject;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
new file mode 100644
index 00000000000..f89aebd28e8
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C
@@ -0,0 +1,106 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "removeRegisteredObject.H"
+#include "dictionary.H"
+#include "Time.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(Foam::removeRegisteredObject, 0);
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::removeRegisteredObject::removeRegisteredObject
+(
+    const word& name,
+    const objectRegistry& obr,
+    const dictionary& dict,
+    const bool loadFromFiles
+)
+:
+    name_(name),
+    obr_(obr),
+    objectNames_()
+{
+    read(dict);
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::removeRegisteredObject::~removeRegisteredObject()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::removeRegisteredObject::read(const dictionary& dict)
+{
+    dict.lookup("objectNames") >> objectNames_;
+}
+
+
+void Foam::removeRegisteredObject::execute()
+{
+    forAll(objectNames_, i)
+    {
+        if (obr_.foundObject<regIOobject>(objectNames_[i]))
+        {
+            const regIOobject& obj =
+                obr_.lookupObject<regIOobject>(objectNames_[i]);
+
+            if (obj.ownedByRegistry())
+            {
+                const_cast<regIOobject&>(obj).release();
+                delete &obj;
+            }
+        }
+        else
+        {
+            WarningIn("Foam::removeRegisteredObject::write()")
+                << "Object " << objectNames_[i] << " not found in "
+                << "database. Available objects:" << nl << obr_.sortedToc()
+                << endl;
+        }
+
+    }
+}
+
+
+void Foam::removeRegisteredObject::end()
+{
+    // Do nothing - only valid on execute
+}
+
+
+void Foam::removeRegisteredObject::write()
+{
+    // Do nothing - only valid on execute
+}
+
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.H b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.H
new file mode 100644
index 00000000000..79bed8aa1cb
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.H
@@ -0,0 +1,145 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::removeRegisteredObject
+
+Description
+    Removes registered IO objects if present in the database
+
+SourceFiles
+    removeRegisteredObject.C
+    IOremoveRegisteredObject.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef removeRegisteredObject_H
+#define removeRegisteredObject_H
+
+#include "pointFieldFwd.H"
+#include "wordList.H"
+#include "runTimeSelectionTables.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class objectRegistry;
+class dictionary;
+class mapPolyMesh;
+
+/*---------------------------------------------------------------------------*\
+                   Class removeRegisteredObject Declaration
+\*---------------------------------------------------------------------------*/
+
+class removeRegisteredObject
+{
+protected:
+
+    // Private data
+
+        //- Name of this set of removeRegisteredObject
+        word name_;
+
+        const objectRegistry& obr_;
+
+        // Read from dictionary
+
+            //- Names of objects to control
+            wordList objectNames_;
+
+
+    // Private Member Functions
+
+
+        //- Disallow default bitwise copy construct
+        removeRegisteredObject(const removeRegisteredObject&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const removeRegisteredObject&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("removeRegisteredObject");
+
+
+    // Constructors
+
+        //- Construct for given objectRegistry and dictionary.
+        //  Allow the possibility to load fields from files
+        removeRegisteredObject
+        (
+            const word& name,
+            const objectRegistry&,
+            const dictionary&,
+            const bool loadFromFiles = false
+        );
+
+
+    //- Destructor
+    virtual ~removeRegisteredObject();
+
+
+    // Member Functions
+
+        //- Return name of the removeRegisteredObject
+        virtual const word& name() const
+        {
+            return name_;
+        }
+
+        //- Read the removeRegisteredObject data
+        virtual void read(const dictionary&);
+
+        //- Execute, currently does nothing
+        virtual void execute();
+
+        //- Execute at the final time-loop, currently does nothing
+        virtual void end();
+
+        //- Write the removeRegisteredObject
+        virtual void write();
+
+        //- Update for changes of mesh
+        virtual void updateMesh(const mapPolyMesh&)
+        {}
+
+        //- Update for changes of mesh
+        virtual void movePoints(const pointField&)
+        {}
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObjectFunctionObject.C b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObjectFunctionObject.C
new file mode 100644
index 00000000000..652e60e87d5
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObjectFunctionObject.C
@@ -0,0 +1,46 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "removeRegisteredObjectFunctionObject.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineNamedTemplateTypeNameAndDebug
+    (
+        removeRegisteredObjectFunctionObject,
+        0
+    );
+
+    addToRunTimeSelectionTable
+    (
+        functionObject,
+        removeRegisteredObjectFunctionObject,
+        dictionary
+    );
+}
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObjectFunctionObject.H b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObjectFunctionObject.H
new file mode 100644
index 00000000000..9bc0e1be51b
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObjectFunctionObject.H
@@ -0,0 +1,54 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Typedef
+    Foam::removeRegisteredObjectFunctionObject
+
+Description
+    FunctionObject wrapper around removeRegisteredObject to allow them to be
+    created via the functions entry within controlDict.
+
+SourceFiles
+    removeRegisteredObjectFunctionObject.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef removeRegisteredObjectFunctionObject_H
+#define removeRegisteredObjectFunctionObject_H
+
+#include "removeRegisteredObject.H"
+#include "OutputFilterFunctionObject.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    typedef OutputFilterFunctionObject<removeRegisteredObject>
+        removeRegisteredObjectFunctionObject;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
-- 
GitLab