diff --git a/src/postProcessing/functionObjects/IO/Make/files b/src/postProcessing/functionObjects/IO/Make/files
index a3517e560f..a00b7575f1 100644
--- a/src/postProcessing/functionObjects/IO/Make/files
+++ b/src/postProcessing/functionObjects/IO/Make/files
@@ -1,3 +1,6 @@
+partialWrite/partialWrite.C
+partialWrite/partialWriteFunctionObject.C
+
writeRegisteredObject/writeRegisteredObject.C
writeRegisteredObject/writeRegisteredObjectFunctionObject.C
diff --git a/src/postProcessing/functionObjects/IO/controlDict b/src/postProcessing/functionObjects/IO/controlDict
new file mode 100644
index 0000000000..4daa3a1c15
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/controlDict
@@ -0,0 +1,88 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: 1.7.1 |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "system";
+ object controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application icoFoam;
+
+startFrom startTime;
+
+startTime 0;
+
+stopAt endTime;
+
+endTime 0.5;
+
+deltaT 0.005;
+
+writeControl timeStep;
+
+writeInterval 20;
+
+purgeWrite 0;
+
+writeFormat ascii;
+
+writePrecision 6;
+
+writeCompression uncompressed;
+
+timeFormat general;
+
+timePrecision 6;
+
+runTimeModifiable yes;
+
+functions
+{
+ partialWrite
+ {
+ // Write some registered objects more often than others.
+ // Above writeControl determines most frequent dump.
+
+ type partialWrite;
+
+ // Where to load it from
+ functionObjectLibs ("libIOFunctionObjects.so");
+
+ // Execute upon outputTime
+ outputControl outputTime;
+
+ // Objects to write every outputTime
+ objectNames (p);
+ // Write as normal every writeInterval'th outputTime.
+ writeInterval 3;
+ }
+
+ dumpObjects
+ {
+ // Forcibly write registered objects. E.g. fields that have been
+ // created with NO_READ.
+
+ type writeRegisteredObject;
+
+ // Where to load it from
+ functionObjectLibs ("libIOFunctionObjects.so");
+
+ // Execute upon outputTime
+ outputControl outputTime;
+
+ // Objects to write
+ objectNames ();
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/IO/partialWrite/IOpartialWrite.H b/src/postProcessing/functionObjects/IO/partialWrite/IOpartialWrite.H
new file mode 100644
index 0000000000..961f2b6d55
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/partialWrite/IOpartialWrite.H
@@ -0,0 +1,49 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd.
+ \\/ 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 .
+
+Typedef
+ Foam::IOpartialWrite
+
+Description
+ Instance of the generic IOOutputFilter for partialWrite.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef IOpartialWrite_H
+#define IOpartialWrite_H
+
+#include "partialWrite.H"
+#include "IOOutputFilter.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef IOOutputFilter IOpartialWrite;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C
new file mode 100644
index 0000000000..327c7b804a
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C
@@ -0,0 +1,142 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd.
+ \\/ 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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "partialWrite.H"
+#include "dictionary.H"
+#include "Time.H"
+#include "IOobjectList.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineTypeNameAndDebug(partialWrite, 0);
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::partialWrite::partialWrite
+(
+ const word& name,
+ const objectRegistry& obr,
+ const dictionary& dict,
+ const bool loadFromFiles
+)
+:
+ name_(name),
+ obr_(obr)
+{
+ read(dict);
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::partialWrite::~partialWrite()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::partialWrite::read(const dictionary& dict)
+{
+ dict.lookup("objectNames") >> objectNames_;
+ dict.lookup("writeInterval") >> writeInterval_;
+ writeInstance_ = 0;
+
+ Info<< type() << " " << name() << ":" << nl
+ << " dumping every outputTime :";
+ forAllConstIter(HashSet, objectNames_, iter)
+ {
+ Info<< ' ' << iter.key();
+ }
+ Info<< nl
+ << " dumping all other fields every "
+ << writeInterval_ << "th outputTime" << nl
+ << endl;
+
+ if (writeInterval_ < 1)
+ {
+ FatalIOErrorIn("partialWrite::read(const dictionary&)", dict)
+ << "Illegal value for writeInterval " << writeInterval_
+ << ". It should be >= 1."
+ << exit(FatalIOError);
+ }
+}
+
+
+void Foam::partialWrite::execute()
+{
+ //Pout<< "execute at time " << obr_.time().timeName()
+ // << " index:" << obr_.time().timeIndex() << endl;
+}
+
+
+void Foam::partialWrite::end()
+{
+ //Pout<< "end at time " << obr_.time().timeName() << endl;
+ // Do nothing - only valid on write
+}
+
+
+void Foam::partialWrite::write()
+{
+ //Pout<< "write at time " << obr_.time().timeName() << endl;
+ if (obr_.time().outputTime())
+ {
+ // Above check so it can be used both with
+ // outputControl timeStep;
+ // outputInterval 1;
+ // or with
+ // outputControl outputTime;
+
+ writeInstance_++;
+
+ if (writeInstance_ == writeInterval_)
+ {
+ // Normal dump
+ writeInstance_ = 0;
+ }
+ else
+ {
+ // Delete all but marked objects
+ IOobjectList objects(obr_, obr_.time().timeName());
+
+ forAllConstIter(HashPtrTable, objects, iter)
+ {
+ if (!objectNames_.found(iter()->name()))
+ {
+ const fileName f = obr_.time().timePath()/iter()->name();
+ //Pout<< " rm " << f << endl;
+ rm(f);
+ }
+ }
+ }
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.H b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.H
new file mode 100644
index 0000000000..b51b9d1741
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.H
@@ -0,0 +1,156 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd.
+ \\/ 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 .
+
+Class
+ Foam::partialWrite
+
+Description
+ Allows some fields/registered objects to be written more often than others.
+
+ Works in the opposite way: deletes at intermediate times all
+ but selected fields.
+
+SourceFiles
+ partialWrite.C
+ IOpartialWrite.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef partialWrite_H
+#define partialWrite_H
+
+#include "pointFieldFwd.H"
+#include "HashSet.H"
+#include "DynamicList.H"
+#include "runTimeSelectionTables.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class objectRegistry;
+class dictionary;
+class mapPolyMesh;
+
+/*---------------------------------------------------------------------------*\
+ Class partialWrite Declaration
+\*---------------------------------------------------------------------------*/
+
+class partialWrite
+{
+protected:
+
+ // Private data
+
+ //- Name of this set of partialWrite
+ word name_;
+
+ const objectRegistry& obr_;
+
+
+ // Read from dictionary
+
+ //- Names of objects to dump always
+ HashSet objectNames_;
+
+ //- Write interval for restart dump
+ label writeInterval_;
+
+
+ //- Current dump instance. If reaches writeInterval do a full write.
+ label writeInstance_;
+
+
+ // Private Member Functions
+
+ //- Disallow default bitwise copy construct
+ partialWrite(const partialWrite&);
+
+ //- Disallow default bitwise assignment
+ void operator=(const partialWrite&);
+
+
+public:
+
+ //- Runtime type information
+ TypeName("partialWrite");
+
+
+ // Constructors
+
+ //- Construct for given objectRegistry and dictionary.
+ // Allow the possibility to load fields from files
+ partialWrite
+ (
+ const word& name,
+ const objectRegistry&,
+ const dictionary&,
+ const bool loadFromFiles = false
+ );
+
+
+ //- Destructor
+ virtual ~partialWrite();
+
+
+ // Member Functions
+
+ //- Return name of the partialWrite
+ virtual const word& name() const
+ {
+ return name_;
+ }
+
+ //- Read the partialWrite 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 partialWrite
+ 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/partialWrite/partialWriteFunctionObject.C b/src/postProcessing/functionObjects/IO/partialWrite/partialWriteFunctionObject.C
new file mode 100644
index 0000000000..5c98c82580
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/partialWrite/partialWriteFunctionObject.C
@@ -0,0 +1,46 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd.
+ \\/ 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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "partialWriteFunctionObject.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineNamedTemplateTypeNameAndDebug
+ (
+ partialWriteFunctionObject,
+ 0
+ );
+
+ addToRunTimeSelectionTable
+ (
+ functionObject,
+ partialWriteFunctionObject,
+ dictionary
+ );
+}
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/IO/partialWrite/partialWriteFunctionObject.H b/src/postProcessing/functionObjects/IO/partialWrite/partialWriteFunctionObject.H
new file mode 100644
index 0000000000..315a5c2282
--- /dev/null
+++ b/src/postProcessing/functionObjects/IO/partialWrite/partialWriteFunctionObject.H
@@ -0,0 +1,54 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd.
+ \\/ 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 .
+
+Typedef
+ Foam::partialWriteFunctionObject
+
+Description
+ FunctionObject wrapper around partialWrite to allow them to be
+ created via the functions list within controlDict.
+
+SourceFiles
+ partialWriteFunctionObject.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef partialWriteFunctionObject_H
+#define partialWriteFunctionObject_H
+
+#include "partialWrite.H"
+#include "OutputFilterFunctionObject.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef OutputFilterFunctionObject
+ partialWriteFunctionObject;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //