/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2023 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::Function1s::Table
Description
Templated interpolated tabulated data Function1.
Items are stored in a list of Tuple2's. First column is always stored as
scalar entries. Data is read in Tuple2 form:
Usage
\verbatim
table
(
(0.0 (1 2 3))
(1.0 (4 5 6))
);
\endverbatim
or in dictionary form which supports the setting of options, e.g.
\verbatim
table;
values
(
(0.0 (1 2 3))
(1.0 (4 5 6))
);
outOfBounds clamp; // optional out-of-bounds handling
interpolationScheme linear; // optional interpolation method
\endverbatim
or in sub-dictionary form which avoids clashes between table entries and
other entries in the dictionary:
\verbatim
{
type table;
values
(
(0.0 (1 2 3))
(1.0 (4 5 6))
);
outOfBounds clamp; // optional out-of-bounds handling
interpolationScheme linear; // optional interpolation method
}
\endverbatim
The data may be read from a separate file in either native or CSV format:
\verbatim
{
type table;
file ""; // Name/path of thedata file
format foam; // data format (optional)
outOfBounds clamp; // optional out-of-bounds handling
interpolationScheme linear; // optional interpolation method
}
\endverbatim
SourceFiles
Table.C
See also
FoamTableReader.C
CsvTableReader.C
\*---------------------------------------------------------------------------*/
#ifndef Table_H
#define Table_H
#include "tableBase.H"
#include "Function1.H"
#include "TableReader.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class interpolationWeights;
namespace Function1s
{
/*---------------------------------------------------------------------------*\
Class Table Declaration
\*---------------------------------------------------------------------------*/
template
class Table
:
public tableBase,
public FieldFunction1>
{
// Private Data
//- Enumeration for handling out-of-bound values
const tableBase::boundsHandling boundsHandling_;
//- Interpolation scheme
const word interpolationScheme_;
//- Table reader
const autoPtr> reader_;
//- Table data
const List> values_;
//- Extracted values
mutable autoPtr tableSamplesPtr_;
//- Interpolator method
mutable autoPtr interpolatorPtr_;
//- Cached indices
mutable labelList indices_;
//- Cached weights
mutable scalarField weights_;
// Private Member Functions
//- Return (demand driven) interpolator
const interpolationWeights& interpolator() const;
//- Check the table for size and consistency
void check() const;
//- Bound the argument to the table. Errors or warns, or shifts the
// value if the table repeats. Does not clamp to the ends of the table
// as the interpolator already performs that function.
scalar bound(const scalar x) const;
public:
//- Runtime type information
TypeName("table");
// Constructors
//- Construct from components
Table
(
const word& name,
const tableBase::boundsHandling boundsHandling,
const word& interpolationScheme,
const autoPtr>& reader,
const List>& table
);
//- Construct from name and dictionary
Table(const word& name, const dictionary& dict);
//- Construct from name and Istream
Table(const word& name, Istream& dict);
//- Copy constructor
Table(const Table& tbl);
//- Destructor
virtual ~Table();
// Member Functions
//- Return the handling out-of-bound values
const tableBase::boundsHandling& boundsHandling() const
{
return boundsHandling_;
}
//- Return the interpolation scheme
const word& interpolationScheme() const
{
return interpolationScheme_;
}
//- Return table data
const List>& values() const
{
return values_;
}
//- Return Table value as a function of scalar x
virtual Type value(const scalar x) const;
//- Integrate between two scalars
virtual Type integral(const scalar x1, const scalar x2) const;
//- Return the reference values
virtual tmp x() const;
//- Return the dependent values
virtual tmp> y() const;
//- Write data to dictionary stream
virtual void write(Ostream& os) const;
// Member Operators
//- Disallow default bitwise assignment
void operator=(const Table&) = delete;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Function1s
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "Table.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //