Permalink
Browse files

ENH: partialWrite: new functionObject to have some files more frequen…

…t than others
  • Loading branch information...
1 parent a647c0d commit c08bd06d1c99a4673549ec9386729e9fc76daf16 mattijs committed May 20, 2011
@@ -1,3 +1,6 @@
+partialWrite/partialWrite.C
+partialWrite/partialWriteFunctionObject.C
+
writeRegisteredObject/writeRegisteredObject.C
writeRegisteredObject/writeRegisteredObjectFunctionObject.C
@@ -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");
+
+ // 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");
+
+ // Execute upon outputTime
+ outputControl outputTime;
+
+ // Objects to write
+ objectNames ();
+ }
+}
+
+
+// ************************************************************************* //
@@ -0,0 +1,49 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-2010 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 <http://www.gnu.org/licenses/>.
+
+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<partialWrite> IOpartialWrite;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
@@ -0,0 +1,142 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-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 <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#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<word>, 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<IOobject>, objects, iter)
+ {
+ if (!objectNames_.found(iter()->name()))
+ {
+ const fileName f = obr_.time().timePath()/iter()->name();
+ //Pout<< " rm " << f << endl;
+ rm(f);
+ }
+ }
+ }
+ }
+}
+
+
+// ************************************************************************* //
Oops, something went wrong.

0 comments on commit c08bd06

Please sign in to comment.