From 6217691b4df41519634c24b552883edb25ee1708 Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 26 Apr 2011 19:25:00 +0100 Subject: [PATCH] ENH: csv reading for interpolationTable and writing for sampledSet --- src/OpenFOAM/Make/files | 4 + .../interpolationTable/interpolationTable.C | 32 ++- .../interpolationTable/interpolationTable.H | 18 ++ .../tableReaders/csv/csvTableReader.C | 181 ++++++++++++++++ .../tableReaders/csv/csvTableReader.H | 123 +++++++++++ .../tableReaders/csv/csvTableReaders.C | 37 ++++ .../openFoam/openFoamTableReader.C | 59 +++++ .../openFoam/openFoamTableReader.H | 106 +++++++++ .../openFoam/openFoamTableReaders.C | 37 ++++ .../tableReaders/tableReader.C | 89 ++++++++ .../tableReaders/tableReader.H | 128 +++++++++++ .../tableReaders/tableReaders.C | 50 +++++ .../tableReaders/tableReaders.H | 78 +++++++ src/sampling/Make/files | 1 + .../sampledSet/writers/csv/csvSetWriter.C | 202 ++++++++++++++++++ .../sampledSet/writers/csv/csvSetWriter.H | 122 +++++++++++ .../writers/csv/csvSetWriterRunTime.C | 37 ++++ src/sampling/sampledSet/writers/writer.C | 26 ++- src/sampling/sampledSet/writers/writer.H | 2 + 19 files changed, 1313 insertions(+), 19 deletions(-) create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReader.C create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReader.H create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReaders.C create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReader.C create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReader.H create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReaders.C create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReader.C create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReader.H create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReaders.C create mode 100644 src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReaders.H create mode 100644 src/sampling/sampledSet/writers/csv/csvSetWriter.C create mode 100644 src/sampling/sampledSet/writers/csv/csvSetWriter.H create mode 100644 src/sampling/sampledSet/writers/csv/csvSetWriterRunTime.C diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index 432f6ccc0e..52de21702b 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -571,6 +571,10 @@ interpolations = interpolations interpolation = $(interpolations)/interpolation $(interpolations)/patchToPatchInterpolation/PatchToPatchInterpolationName.C +$(interpolations)/interpolationTable/tableReaders/tableReaders.C +$(interpolations)/interpolationTable/tableReaders/openFoam/openFoamTableReaders.C +$(interpolations)/interpolationTable/tableReaders/csv/csvTableReaders.C + algorithms/MeshWave/MeshWaveName.C algorithms/MeshWave/FaceCellWaveName.C diff --git a/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.C b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.C index c881af33f5..95f4701730 100644 --- a/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.C +++ b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,7 @@ License #include "interpolationTable.H" #include "IFstream.H" +#include "openFoamTableReader.H" // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // @@ -38,19 +39,19 @@ void Foam::interpolationTable::readTable() fName.expand(); // Read data from file - IFstream(fName)() >> *this; - - // Check that the data are okay - check(); + reader_()(fName, *this); if (this->empty()) { FatalErrorIn ( "Foam::interpolationTable::readTable()" - ) << "table is empty" << nl + ) << "table read from " << fName << " is empty" << nl << exit(FatalError); } + + // Check that the data are okay + check(); } @@ -61,7 +62,8 @@ Foam::interpolationTable::interpolationTable() : List >(), boundsHandling_(interpolationTable::WARN), - fileName_("fileNameIsUndefined") + fileName_("fileNameIsUndefined"), + reader_(NULL) {} @@ -75,7 +77,8 @@ Foam::interpolationTable::interpolationTable : List >(values), boundsHandling_(bounds), - fileName_(fName) + fileName_(fName), + reader_(NULL) {} @@ -84,7 +87,8 @@ Foam::interpolationTable::interpolationTable(const fileName& fName) : List >(), boundsHandling_(interpolationTable::WARN), - fileName_(fName) + fileName_(fName), + reader_(new openFoamTableReader()) { readTable(); } @@ -95,7 +99,8 @@ Foam::interpolationTable::interpolationTable(const dictionary& dict) : List >(), boundsHandling_(wordToBoundsHandling(dict.lookup("outOfBounds"))), - fileName_(dict.lookup("fileName")) + fileName_(dict.lookup("fileName")), + reader_(tableReader::New(dict)) { readTable(); } @@ -109,7 +114,8 @@ Foam::interpolationTable::interpolationTable : List >(interpTable), boundsHandling_(interpTable.boundsHandling_), - fileName_(interpTable.fileName_) + fileName_(interpTable.fileName_), + reader_(interpTable.reader_) // note: steals reader. Used in write(). {} @@ -233,6 +239,10 @@ void Foam::interpolationTable::write(Ostream& os) const << fileName_ << token::END_STATEMENT << nl; os.writeKeyword("outOfBounds") << boundsHandlingToWord(boundsHandling_) << token::END_STATEMENT << nl; + if (reader_.valid()) + { + reader_->write(os); + } } diff --git a/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H index a7f62c1748..4395269dfa 100644 --- a/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H +++ b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H @@ -34,6 +34,19 @@ Description If \a REPEAT is chosen for the out-of-bounds handling, the final time value is treated as being equivalent to time=0 for the following periods. + + The construct from dictionary reads a filename from a dictionary and + has an optional readerType. Default is to read OpenFOAM format. The only + other format is csv (comma separated values): + + Read csv format: + readerType csv; + fileName "$FOAM_CASE/constant/p0vsTime.csv"; + hasHeaderLine true; // skip first line + timeColumn 0; // time is in column 0 + valueColumns (1); // value starts in column 1 + + Note - Accessing an empty list results in an error. - Accessing a list with a single element always returns the same value. @@ -49,6 +62,9 @@ SourceFiles #include "List.H" #include "Tuple2.H" +#include "tableReader.H" +#include "autoPtr.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -87,6 +103,8 @@ private: //- File name fileName fileName_; + //- the actual reader + autoPtr > reader_; // Private Member Functions diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReader.C b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReader.C new file mode 100644 index 0000000000..3e8618c17f --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReader.C @@ -0,0 +1,181 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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 "csvTableReader.H" +#include "IFstream.H" +#include "DynamicList.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::csvTableReader::csvTableReader(const dictionary& dict) +: + tableReader(dict), + headerLine_(readBool(dict.lookup("hasHeaderLine"))), + timeColumn_(readLabel(dict.lookup("timeColumn"))), + componentColumns_(dict.lookup("valueColumns")), + separator_(dict.lookupOrDefault("separator", string(","))[0]) +{ + if (componentColumns_.size() != pTraits::nComponents) + { + FatalErrorIn("csvTableReader::csvTableReader(const dictionary&)") + << componentColumns_ << " does not have the expected length " + << pTraits::nComponents << endl + << exit(FatalError); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::csvTableReader::~csvTableReader() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +namespace Foam +{ + // doesn't recognize specialization otherwise + template<> + scalar csvTableReader::readValue(const List& splitted) + { + if (componentColumns_[0] >= splitted.size()) + { + FatalErrorIn + ( + "csvTableReader::readValue(const List&)" + ) << "No column " << componentColumns_[0] << " in " + << splitted << endl + << exit(FatalError); + } + + return readScalar(IStringStream(splitted[componentColumns_[0]])()); + } + + + template + Type csvTableReader::readValue(const List& splitted) + { + Type result; + + for(label i = 0;i < pTraits::nComponents; i++) + { + if (componentColumns_[i] >= splitted.size()) + { + FatalErrorIn + ( + "csvTableReader::readValue(const List&)" + ) << "No column " << componentColumns_[i] << " in " + << splitted << endl + << exit(FatalError); + } + + result[i] = readScalar + ( + IStringStream(splitted[componentColumns_[i]])() + ); + } + + return result; + } +} + + +template +void Foam::csvTableReader::operator() +( + const fileName& fName, + List >& data +) +{ + IFstream in(fName); + + DynamicList > values; + + // Skip header + if (headerLine_) + { + string line; + in.getLine(line); + } + + while (in.good()) + { + string line; + in.getLine(line); + + DynamicList splitted; + + std::size_t pos = 0; + while (pos != std::string::npos) + { + std::size_t nPos = line.find(separator_, pos); + + if (nPos == std::string::npos) + { + splitted.append(line.substr(pos)); + pos=nPos; + } + else + { + splitted.append(line.substr(pos, nPos-pos)); + pos=nPos+1; + } + } + + if (splitted.size() <= 1) + { + break; + } + + scalar time = readScalar(IStringStream(splitted[timeColumn_])()); + Type value = readValue(splitted); + + values.append(Tuple2(time, value)); + } + + data.transfer(values); +} + + +template +void Foam::csvTableReader::write(Ostream& os) const +{ + tableReader::write(os); + + os.writeKeyword("hasHeaderLine") + << headerLine_ << token::END_STATEMENT << nl; + os.writeKeyword("timeColumn") + << timeColumn_ << token::END_STATEMENT << nl; + os.writeKeyword("valueColumns") + << componentColumns_ << token::END_STATEMENT << nl; + os.writeKeyword("separator") + << string(separator_) << token::END_STATEMENT << nl; +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReader.H b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReader.H new file mode 100644 index 0000000000..3c823f2e19 --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReader.H @@ -0,0 +1,123 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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::tableReader + +Description + Reads an interpolation table from a file - CSV-format + +SourceFiles + tableReader.C + +\*---------------------------------------------------------------------------*/ + +#ifndef csvTableReader_H +#define csvTableReader_H + +#include "tableReader.H" +#include "labelList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class csvTableReader Declaration +\*---------------------------------------------------------------------------*/ + +template +class csvTableReader +: + public tableReader +{ + //- does the file have a header line? + const bool headerLine_; + + //- column of the time + const label timeColumn_; + + //- labels of the components + const labelList componentColumns_; + + //- read the next value from the splitted string + Type readValue(const List&); + + //- separator character + const char separator_; + +public: + + //- Runtime type information + TypeName("csv"); + + // Constructors + + //- Construct from dictionary + csvTableReader(const dictionary& dict); + + //- Construct and return a copy + virtual autoPtr > clone() const + { + return autoPtr > + ( + new csvTableReader + ( + *this + ) + ); + } + + + //- Destructor + + virtual ~csvTableReader(); + + + // Member Functions + + //- Read the table + virtual void operator()(const fileName&, List >&); + + //- write the remaining parameters + virtual void write(Ostream& os) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "csvTableReader.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReaders.C b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReaders.C new file mode 100644 index 0000000000..5893436dd9 --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/csv/csvTableReaders.C @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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 "csvTableReader.H" +#include "tableReaders.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeTableReaders(csvTableReader); +} + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReader.C b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReader.C new file mode 100644 index 0000000000..3ad1a87510 --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReader.C @@ -0,0 +1,59 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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 "openFoamTableReader.H" +#include "IFstream.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::openFoamTableReader::openFoamTableReader(const dictionary& dict) +: + tableReader(dict) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::openFoamTableReader::~openFoamTableReader() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::openFoamTableReader::operator() +( + const fileName& fName, + List >& data +) +{ + // Read data from file + IFstream(fName)() >> data; +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReader.H b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReader.H new file mode 100644 index 0000000000..dd04df78d6 --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReader.H @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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::tableReader + +Description + Reads an interpolation table from a file - OpenFOAM-format + +SourceFiles + tableReader.C + +\*---------------------------------------------------------------------------*/ + +#ifndef openFoamTableReader_H +#define openFoamTableReader_H + +#include "tableReader.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class openFoamTableReader Declaration +\*---------------------------------------------------------------------------*/ + +template +class openFoamTableReader +: + public tableReader +{ + +public: + + //- Runtime type information + TypeName("openFoam"); + + // Constructors + + //- Construct from dictionary + openFoamTableReader(const dictionary &dict); + + //- Construct and return a copy + virtual autoPtr > clone() const + { + return autoPtr > + ( + new openFoamTableReader + ( + *this + ) + ); + } + + + //- Destructor + + virtual ~openFoamTableReader(); + + + // Member functions + + //- Read the table + virtual void operator()(const fileName&, List > &); + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "openFoamTableReader.C" +#endif + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReaders.C b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReaders.C new file mode 100644 index 0000000000..8dd7db0a9f --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/openFoam/openFoamTableReaders.C @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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 "openFoamTableReader.H" +#include "tableReaders.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeTableReaders(openFoamTableReader); +} + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReader.C b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReader.C new file mode 100644 index 0000000000..bcad2aa965 --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReader.C @@ -0,0 +1,89 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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 "tableReader.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template +Foam::autoPtr > Foam::tableReader::New +( + const dictionary& spec +) +{ + const word readerType = spec.lookupOrDefault + ( + "readerType", + "openFoam" + ); + + typename dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_ + ->find(readerType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalErrorIn + ( + "tableReader::New(const dictionary&)" + ) << "Unknown reader type " << readerType + << nl << nl + << "Valid reader types : " << nl + << dictionaryConstructorTablePtr_->sortedToc() + << exit(FatalError); + } + + return autoPtr >(cstrIter()(spec)); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::tableReader::tableReader(const dictionary&) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::tableReader::~tableReader() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::tableReader::write(Ostream& os) const +{ + if (this->type() != "openFoam") + { + os.writeKeyword("readerType") + << this->type() << token::END_STATEMENT << nl; + } +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReader.H b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReader.H new file mode 100644 index 0000000000..b85af66c10 --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReader.H @@ -0,0 +1,128 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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::tableReader + +Description + Base class to read table data for the interpolationTable + +SourceFiles + tableReader.C + +\*---------------------------------------------------------------------------*/ + +#ifndef tableReader_H +#define tableReader_H + +#include "fileName.H" +#include "wordList.H" +#include "vector.H" +#include "tensor.H" +#include "typeInfo.H" +#include "runTimeSelectionTables.H" +#include "autoPtr.H" +#include "dictionary.H" +#include "Tuple2.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class tableReader Declaration +\*---------------------------------------------------------------------------*/ + +template +class tableReader +{ + +public: + + //- Runtime type information + TypeName("tableReader"); + + // Declare run-time constructor selection table + + declareRunTimeSelectionTable + ( + autoPtr, + tableReader, + dictionary, + (const dictionary& dict), + (dict) + ); + + + // Constructors + + //- Construct from dictionary + tableReader(const dictionary& dict); + + //- Construct and return a clone + virtual autoPtr > clone() const = 0; + + + // Selectors + + //- Return a reference to the selected tableReader + static autoPtr New(const dictionary& spec); + + + //- Destructor + + virtual ~tableReader(); + + + // Member functions + + //- Read the table + virtual void operator() + ( + const fileName&, + List >& + ) = 0; + + //- Write additional information + virtual void write(Ostream& os) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "tableReader.C" +#endif + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReaders.C b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReaders.C new file mode 100644 index 0000000000..a28c83218f --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReaders.C @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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 "tableReaders.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +#define defineTableReaderType(dataType) \ + defineNamedTemplateTypeNameAndDebug(tableReader, 0); \ + defineTemplatedRunTimeSelectionTable(tableReader, dictionary, dataType); + +defineTableReaderType(scalar); +defineTableReaderType(vector); +defineTableReaderType(sphericalTensor); +defineTableReaderType(symmTensor); +defineTableReaderType(tensor); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReaders.H b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReaders.H new file mode 100644 index 0000000000..9507ac2bfb --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolationTable/tableReaders/tableReaders.H @@ -0,0 +1,78 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-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::tableReader + +SourceFiles + tableReaders.C + +\*---------------------------------------------------------------------------*/ + +#ifndef tableReaders_H +#define tableReaders_H + +#include "tableReader.H" +#include "fieldTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Only used internally +#define makeTypeTableReadersTypeName(typeTableReader, dataType) \ + \ + defineNamedTemplateTypeNameAndDebug(typeTableReader< dataType >, 0) + +// Sometimes used externally +#define makeTableReadersTypeName(typeTableReader) \ + \ + makeTypeTableReadersTypeName(typeTableReader, scalar); \ + makeTypeTableReadersTypeName(typeTableReader, vector); \ + makeTypeTableReadersTypeName(typeTableReader, sphericalTensor); \ + makeTypeTableReadersTypeName(typeTableReader, symmTensor); \ + makeTypeTableReadersTypeName(typeTableReader, tensor) + +// Define type info for single dataType template instantiation (eg, vector) +#define makeTableReaderType(typeTableReader, dataType) \ + \ + defineNamedTemplateTypeNameAndDebug(typeTableReader< dataType >, 0); \ + addTemplatedToRunTimeSelectionTable \ + ( \ + tableReader, typeTableReader, dataType, dictionary \ + ) + + +// Define type info for scalar, vector etc. instantiations +#define makeTableReaders(typeTableReader) \ + \ + makeTableReaderType(typeTableReader, scalar); \ + makeTableReaderType(typeTableReader, vector); \ + makeTableReaderType(typeTableReader, sphericalTensor); \ + makeTableReaderType(typeTableReader, symmTensor); \ + makeTableReaderType(typeTableReader, tensor) + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/sampling/Make/files b/src/sampling/Make/files index c9b26376d0..ddf46a17e8 100644 --- a/src/sampling/Make/files +++ b/src/sampling/Make/files @@ -24,6 +24,7 @@ $(setWriters)/jplot/jplotSetWriterRunTime.C $(setWriters)/raw/rawSetWriterRunTime.C $(setWriters)/vtk/vtkSetWriterRunTime.C $(setWriters)/xmgrace/xmgraceSetWriterRunTime.C +$(setWriters)/csv/csvSetWriterRunTime.C cuttingPlane/cuttingPlane.C diff --git a/src/sampling/sampledSet/writers/csv/csvSetWriter.C b/src/sampling/sampledSet/writers/csv/csvSetWriter.C new file mode 100644 index 0000000000..c0b0b694ed --- /dev/null +++ b/src/sampling/sampledSet/writers/csv/csvSetWriter.C @@ -0,0 +1,202 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +\*---------------------------------------------------------------------------*/ + +#include "csvSetWriter.H" +#include "coordSet.H" +#include "fileName.H" +#include "OFstream.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::csvSetWriter::csvSetWriter() +: + writer() +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::csvSetWriter::~csvSetWriter() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +Foam::fileName Foam::csvSetWriter::getFileName +( + const coordSet& points, + const wordList& valueSetNames +) const +{ + return this->getBaseName(points, valueSetNames) + ".csv"; +} + + +template +void Foam::csvSetWriter::write +( + const coordSet& points, + const wordList& valueSetNames, + const List*>& valueSets, + Ostream& os +) const +{ + writeHeader(points,valueSetNames,os); + + // Collect sets into columns + List*> columns(valueSets.size()); + + forAll(valueSets, i) + { + columns[i] = valueSets[i]; + } + + writeTable(points, columns, os); +} + + +template +void Foam::csvSetWriter::write +( + const bool writeTracks, + const PtrList& points, + const wordList& valueSetNames, + const List > >& valueSets, + Ostream& os +) const +{ + writeHeader(points[0],valueSetNames,os); + + if (valueSets.size() != valueSetNames.size()) + { + FatalErrorIn("csvSetWriter::write(..)") + << "Number of variables:" << valueSetNames.size() << endl + << "Number of valueSets:" << valueSets.size() + << exit(FatalError); + } + + List*> columns(valueSets.size()); + + forAll(points, trackI) + { + // Collect sets into columns + forAll(valueSets, i) + { + columns[i] = &valueSets[i][trackI]; + } + + writeTable(points[trackI], columns, os); + os << nl << nl; + } +} + + +template +void Foam::csvSetWriter::writeSeparator(Ostream& os) const +{ + os << token::COMMA; +} + + +namespace Foam +{ + // otherwise compiler complains about specialization + template<> + void csvSetWriter::writeHeader + ( + const coordSet& points, + const wordList& valueSetNames, + Ostream& os + ) const + { + writeCoordHeader(points, os); + + forAll(valueSetNames, i) + { + if (i > 0) + { + writeSeparator(os); + } + os << valueSetNames[i]; + } + + os << nl; + } +} // end namespace + + +template +void Foam::csvSetWriter::writeHeader +( + const coordSet& points, + const wordList& valueSetNames, + Ostream& os +) const +{ + writeCoordHeader(points, os); + + forAll(valueSetNames, i) + { + for (label j=0; j0 || j>0) + { + writeSeparator(os); + } + os << valueSetNames[i] << "_" << j; + } + } + + os << nl; +} + + +template +void Foam::csvSetWriter::writeCoordHeader +( + const coordSet& points, + Ostream& os +) const +{ + if (points.hasVectorAxis()) + { + forAll(points, i) + { + os << points.axis()[i]; + writeSeparator(os); + } + } + else + { + os << points.axis(); + writeSeparator(os); + } +} + + +// ************************************************************************* // diff --git a/src/sampling/sampledSet/writers/csv/csvSetWriter.H b/src/sampling/sampledSet/writers/csv/csvSetWriter.H new file mode 100644 index 0000000000..04987fea2a --- /dev/null +++ b/src/sampling/sampledSet/writers/csv/csvSetWriter.H @@ -0,0 +1,122 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +Class + Foam::csvSetWriter + +Description + +SourceFiles + csvSetWriter.C + +\*---------------------------------------------------------------------------*/ + +#ifndef csvSetWriter_H +#define csvSetWriter_H + +#include "writer.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class csvSetWriter Declaration +\*---------------------------------------------------------------------------*/ + +template +class csvSetWriter +: + public writer +{ + + // Private Member Functions + + void writeCoordHeader(const coordSet&, Ostream&) const; + + void writeHeader(const coordSet&, const wordList&, Ostream&) const; + +protected: + + virtual void writeSeparator(Ostream&) const; + +public: + + //- Runtime type information + TypeName("csv"); + + + // Constructors + + //- Construct null + csvSetWriter(); + + + //- Destructor + + virtual ~csvSetWriter(); + + + // Member Functions + + virtual fileName getFileName + ( + const coordSet&, + const wordList& + ) const; + + virtual void write + ( + const coordSet&, + const wordList&, + const List*>&, + Ostream& + ) const; + + virtual void write + ( + const bool writeTracks, + const PtrList&, + const wordList& valueSetNames, + const List > >&, + Ostream& + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "csvSetWriter.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/sampling/sampledSet/writers/csv/csvSetWriterRunTime.C b/src/sampling/sampledSet/writers/csv/csvSetWriterRunTime.C new file mode 100644 index 0000000000..2c22b5f227 --- /dev/null +++ b/src/sampling/sampledSet/writers/csv/csvSetWriterRunTime.C @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +\*---------------------------------------------------------------------------*/ + +#include "csvSetWriter.H" +#include "writers.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeSetWriters(csvSetWriter); +} + +// ************************************************************************* // diff --git a/src/sampling/sampledSet/writers/writer.C b/src/sampling/sampledSet/writers/writer.C index 651e0c7be2..b2286998b4 100644 --- a/src/sampling/sampledSet/writers/writer.C +++ b/src/sampling/sampledSet/writers/writer.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -105,8 +105,7 @@ void Foam::writer::writeTable forAll(points, pointI) { writeCoord(points, pointI, os); - - os << token::SPACE; + writeSeparator(os); write(values[pointI], os); os << nl; } @@ -127,7 +126,8 @@ void Foam::writer::writeTable forAll(valuesPtrList, i) { - os << token::SPACE; + writeSeparator(os); + const List& values = *valuesPtrList[i]; write(values[pointI], os); } @@ -173,17 +173,27 @@ Foam::Ostream& Foam::writer::writeVS { for (direction d=0; d 0) { - os << ' ' << token::TAB; + writeSeparator(os); } + + os << value.component(d); } return os; } +template +void Foam::writer::writeSeparator +( + Ostream& os +) const +{ + os << token::SPACE << token::TAB; +} + + template Foam::Ostream& Foam::writer::write ( diff --git a/src/sampling/sampledSet/writers/writer.H b/src/sampling/sampledSet/writers/writer.H index f5d9a73e53..6fb810dc1f 100644 --- a/src/sampling/sampledSet/writers/writer.H +++ b/src/sampling/sampledSet/writers/writer.H @@ -107,6 +107,8 @@ protected: Ostream& os ) const; + //- Writes a separator. Used by write functions. + virtual void writeSeparator(Ostream& os) const; public: