diff --git a/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.C b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.C new file mode 100644 index 0000000000000000000000000000000000000000..9c34b0cd1c2bf38ac75213b2704bb22288e0454d --- /dev/null +++ b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.C @@ -0,0 +1,69 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011 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 "TableFile.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Type> +Foam::TableFile<Type>::TableFile(const word& entryName, const dictionary& dict) +: + DataEntry<Type>(entryName), + TableBase<Type>(entryName, dict.subDict(type() + "Coeffs")), + fName_("none") +{ + const dictionary coeffs(dict.subDict(type() + "Coeffs")); + coeffs.lookup("fileName") >> fName_; + + IFstream is(fName_.expand()); + + is >> this->table_; + + TableBase<Type>::check(); +} + + +template<class Type> +Foam::TableFile<Type>::TableFile(const TableFile<Type>& tbl) +: + DataEntry<Type>(tbl), + TableBase<Type>(tbl), + fName_(tbl.fName_) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class Type> +Foam::TableFile<Type>::~TableFile() +{} + + +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +#include "TableFileIO.C" + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.H b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.H new file mode 100644 index 0000000000000000000000000000000000000000..05b525d3a8741eb91c0ddfea6923a6a8c098cc55 --- /dev/null +++ b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.H @@ -0,0 +1,166 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011 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::TableFile + +Description + Templated table container data entry where data is read from file. + + \verbatim + <entryName> tableFile; + tableCoeffs + { + fileName dataFile; // name of data file + outOfBounds clamp; // optional out-of-bounds handling + } + \endverbatim + + Items are stored in a list of Tuple2's. First column is always stored as + scalar entries. Data is read in the form, e.g. for an entry \<entryName\> + that is (scalar, vector): + \verbatim + ( + 0.0 (1 2 3) + 1.0 (4 5 6) + ); + \endverbatim + + +SourceFiles + TableFile.C + +\*---------------------------------------------------------------------------*/ + +#ifndef TableFile_H +#define TableFile_H + +#include "DataEntry.H" +#include "Tuple2.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +template<class Type> +class TableFile; + +template<class Type> +Ostream& operator<< +( + Ostream&, + const TableFile<Type>& +); + +/*---------------------------------------------------------------------------*\ + Class TableFile Declaration +\*---------------------------------------------------------------------------*/ + +template<class Type> +class TableFile +: + public DataEntry<Type>, + public TableBase<Type> +{ + // Private data + + //- File name for csv table (optional) + fileName fName_; + + + // Private Member Functions + + //- Disallow default bitwise assignment + void operator=(const TableFile<Type>&); + + +public: + + //- Runtime type information + TypeName("tableFile"); + + + // Constructors + + //- Construct from entry name and Istream + TableFile(const word& entryName, const dictionary& dict); + + //- Copy constructor + TableFile(const TableFile<Type>& tbl); + + //- Construct and return a clone + virtual tmp<DataEntry<Type> > clone() const + { + return tmp<DataEntry<Type> >(new TableFile<Type>(*this)); + } + + + //- Destructor + virtual ~TableFile(); + + + // Member Functions + + //- Return TableFile value + virtual Type value(const scalar x) const + { + return TableBase<Type>::value(x); + } + + //- Integrate between two (scalar) values + virtual Type integrate(const scalar x1, const scalar x2) const + { + return TableBase<Type>::integrate(x1, x2); + } + + + // I/O + + //- Ostream Operator + friend Ostream& operator<< <Type> + ( + Ostream& os, + const TableFile<Type>& tbl + ); + + //- Write in dictionary format + virtual void writeData(Ostream& os) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "TableFile.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFileIO.C b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFileIO.C new file mode 100644 index 0000000000000000000000000000000000000000..1abbecbd37a2ee150d4e7a401d9c3ef41344336a --- /dev/null +++ b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFileIO.C @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011 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 "DataEntry.H" + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +template<class Type> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const TableFile<Type>& tbl +) +{ + os << static_cast<const DataEntry<Type>&>(tbl) + << static_cast<const TableBase<Type>&>(tbl); + + // Check state of Ostream + os.check + ( + "Ostream& operator<<(Ostream&, const TableFile<Type>&)" + ); + + return os; +} + + +template<class Type> +void Foam::TableFile<Type>::writeData(Ostream& os) const +{ + DataEntry<Type>::writeData(os); +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/functions/DataEntry/makeDataEntries.C b/src/OpenFOAM/primitives/functions/DataEntry/makeDataEntries.C index 11f5f273803bc36760252be5da6142aa54e0e236..d443fb9b762a6fcb259e322405ae85da757aa6a1 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/makeDataEntries.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/makeDataEntries.C @@ -27,6 +27,7 @@ License #include "CSV.H" #include "DataEntry.H" #include "Table.H" +#include "TableFile.H" #include "label.H" #include "scalar.H" @@ -41,31 +42,37 @@ namespace Foam makeDataEntryType(Constant, label); // makeDataEntryType(CSV, label); makeDataEntryType(Table, label); + makeDataEntryType(TableFile, label); makeDataEntry(scalar); makeDataEntryType(Constant, scalar); makeDataEntryType(CSV, scalar); makeDataEntryType(Table, scalar); + makeDataEntryType(TableFile, scalar); makeDataEntry(vector); makeDataEntryType(Constant, vector); makeDataEntryType(CSV, vector); makeDataEntryType(Table, vector); + makeDataEntryType(TableFile, vector); makeDataEntry(sphericalTensor); makeDataEntryType(Constant, sphericalTensor); makeDataEntryType(CSV, sphericalTensor); makeDataEntryType(Table, sphericalTensor); + makeDataEntryType(TableFile, sphericalTensor); makeDataEntry(symmTensor); makeDataEntryType(Constant, symmTensor); makeDataEntryType(CSV, symmTensor); makeDataEntryType(Table, symmTensor); + makeDataEntryType(TableFile, symmTensor); makeDataEntry(tensor); makeDataEntryType(Constant, tensor); makeDataEntryType(CSV, tensor); makeDataEntryType(Table, tensor); + makeDataEntryType(TableFile, tensor); }