From 994cda140e92c8adc9dce8e794ccf21f67dd91fc Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 14 Oct 2014 15:11:35 +0100 Subject: [PATCH] ENH: Adding IOmapDistribute --- src/OpenFOAM/Make/files | 1 + .../mapDistribute/IOmapDistribute.C | 159 ++++++++++++++++++ .../mapDistribute/IOmapDistribute.H | 98 +++++++++++ .../mapPolyMesh/mapDistribute/mapDistribute.C | 29 +++- .../mapPolyMesh/mapDistribute/mapDistribute.H | 11 +- 5 files changed, 296 insertions(+), 2 deletions(-) create mode 100644 src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/IOmapDistribute.C create mode 100644 src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/IOmapDistribute.H diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index 42be066ee2..d611ff0e53 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -503,6 +503,7 @@ $(mapPolyMesh)/faceMapper/faceMapper.C $(mapPolyMesh)/cellMapper/cellMapper.C $(mapPolyMesh)/mapDistribute/mapDistribute.C $(mapPolyMesh)/mapDistribute/mapDistributePolyMesh.C +$(mapPolyMesh)/mapDistribute/IOmapDistribute.C $(mapPolyMesh)/mapAddedPolyMesh.C PrimitivePatch = $(primitiveMesh)/PrimitivePatch diff --git a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/IOmapDistribute.C b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/IOmapDistribute.C new file mode 100644 index 0000000000..bb057b63f4 --- /dev/null +++ b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/IOmapDistribute.C @@ -0,0 +1,159 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 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 . + +\*---------------------------------------------------------------------------*/ + +#include "IOmapDistribute.H" + +/* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ + +namespace Foam +{ + defineTypeNameAndDebug(IOmapDistribute, 0); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::IOmapDistribute::IOmapDistribute(const IOobject& io) +: + regIOobject(io) +{ + // Temporary warning + if (io.readOpt() == IOobject::MUST_READ_IF_MODIFIED) + { + WarningIn("IOmapDistribute::IOmapDistribute(const IOobject&)") + << "IOmapDistribute " << name() + << " constructed with IOobject::MUST_READ_IF_MODIFIED" + " but IOmapDistribute does not support automatic rereading." + << endl; + } + + if + ( + ( + io.readOpt() == IOobject::MUST_READ + || io.readOpt() == IOobject::MUST_READ_IF_MODIFIED + ) + || (io.readOpt() == IOobject::READ_IF_PRESENT && headerOk()) + ) + { + readStream(typeName) >> *this; + close(); + } +} + + +Foam::IOmapDistribute::IOmapDistribute +( + const IOobject& io, + const mapDistribute& map +) +: + regIOobject(io) +{ + // Temporary warning + if (io.readOpt() == IOobject::MUST_READ_IF_MODIFIED) + { + WarningIn("IOmapDistribute::IOmapDistribute(const IOobject&)") + << "IOmapDistribute " << name() + << " constructed with IOobject::MUST_READ_IF_MODIFIED" + " but IOmapDistribute does not support automatic rereading." + << endl; + } + + if + ( + ( + io.readOpt() == IOobject::MUST_READ + || io.readOpt() == IOobject::MUST_READ_IF_MODIFIED + ) + || (io.readOpt() == IOobject::READ_IF_PRESENT && headerOk()) + ) + { + readStream(typeName) >> *this; + close(); + } + else + { + mapDistribute::operator=(map); + } +} + + +Foam::IOmapDistribute::IOmapDistribute +( + const IOobject& io, + const Xfer& map +) +: + regIOobject(io) +{ + // Temporary warning + if (io.readOpt() == IOobject::MUST_READ_IF_MODIFIED) + { + WarningIn("IOmapDistribute::IOmapDistribute(const IOobject&)") + << "IOmapDistribute " << name() + << " constructed with IOobject::MUST_READ_IF_MODIFIED" + " but IOmapDistribute does not support automatic rereading." + << endl; + } + + mapDistribute::transfer(map()); + + if + ( + ( + io.readOpt() == IOobject::MUST_READ + || io.readOpt() == IOobject::MUST_READ_IF_MODIFIED + ) + || (io.readOpt() == IOobject::READ_IF_PRESENT && headerOk()) + ) + { + readStream(typeName) >> *this; + close(); + } +} + + +// * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * * // + +Foam::IOmapDistribute::~IOmapDistribute() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::IOmapDistribute::readData(Istream& is) +{ + return (is >> *this).good(); +} + + +bool Foam::IOmapDistribute::writeData(Ostream& os) const +{ + return (os << *this).good(); +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/IOmapDistribute.H b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/IOmapDistribute.H new file mode 100644 index 0000000000..271fb062f5 --- /dev/null +++ b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/IOmapDistribute.H @@ -0,0 +1,98 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 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 . + +Class + Foam::IOmapDistribute + +Description + IOmapDistribute is derived from mapDistribute and + IOobject to give the mapDistribute + automatic IO functionality via the objectRegistry. + +SourceFiles + IOmapDistribute.C + +\*---------------------------------------------------------------------------*/ + +#ifndef IOmapDistribute_H +#define IOmapDistribute_H + +#include "mapDistribute.H" +#include "regIOobject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class IOmapDistribute Declaration +\*---------------------------------------------------------------------------*/ + +class IOmapDistribute +: + public regIOobject, + public mapDistribute +{ + +public: + + //- Runtime type information + TypeName("mapDistribute"); + + // Constructors + + //- Construct given an IOobject + IOmapDistribute(const IOobject&); + + //- Construct given an IOobject and mapDistribute + IOmapDistribute(const IOobject&, const mapDistribute&); + + //- Construct by transferring the mapDistribute contents + IOmapDistribute(const IOobject&, const Xfer&); + + + //- Destructor + virtual ~IOmapDistribute(); + + + // Member functions + + //- ReadData function required for regIOobject read operation + virtual bool readData(Istream&); + + //- WriteData function required for regIOobject write operation + virtual bool writeData(Ostream&) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.C b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.C index de84240300..8feeefcffe 100644 --- a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.C +++ b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -1341,4 +1341,31 @@ void Foam::mapDistribute::operator=(const mapDistribute& rhs) } +// * * * * * * * * * * * * * * Istream Operator * * * * * * * * * * * * * * // + +Foam::Istream& Foam::operator>>(Istream& is, mapDistribute& map) +{ + is.fatalCheck("operator>>(Istream&, mapDistribute&)"); + + is >> map.constructSize_ >> map.subMap_ >> map.constructMap_ + >> map.transformElements_ >> map.transformStart_; + + return is; +} + + +// * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<<(Ostream& os, const mapDistribute& map) +{ + os << map.constructSize_ << token::NL + << map.subMap_ << token::NL + << map.constructMap_ << token::NL + << map.transformElements_ << token::NL + << map.transformStart_ << token::NL; + + return os; +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.H b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.H index 96004c3e26..9495302726 100644 --- a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.H +++ b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -676,6 +676,15 @@ public: void operator=(const mapDistribute&); + + // IOstream operators + + //- Read dictionary from Istream + friend Istream& operator>>(Istream&, mapDistribute&); + + //- Write dictionary to Ostream + friend Ostream& operator<<(Ostream&, const mapDistribute&); + };