My Project
|
Implements a scalar function that depends on two variables and which is sampled uniformly in the X direction, but non-uniformly on the Y axis-. More...
#include <UniformXTabulated2DFunction.hpp>
Public Types | |
enum | InterpolationPolicy { LeftExtreme , RightExtreme , Vertical } |
Indicates how interpolation will be performed. More... | |
typedef std::tuple< Scalar, Scalar, Scalar > | SamplePoint |
Public Member Functions | |
UniformXTabulated2DFunction (const InterpolationPolicy interpolationGuide=Vertical) | |
UniformXTabulated2DFunction (const std::vector< Scalar > &xPos, const std::vector< Scalar > &yPos, const std::vector< std::vector< SamplePoint > > &samples, InterpolationPolicy interpolationGuide) | |
Scalar | xMin () const |
Returns the minimum of the X coordinate of the sampling points. | |
Scalar | xMax () const |
Returns the maximum of the X coordinate of the sampling points. | |
Scalar | xAt (size_t i) const |
Returns the value of the X coordinate of the sampling points. | |
Scalar | yAt (size_t i, size_t j) const |
Returns the value of the Y coordinate of a sampling point. | |
Scalar | valueAt (size_t i, size_t j) const |
Returns the value of a sampling point. | |
size_t | numX () const |
Returns the number of sampling points in X direction. | |
Scalar | yMin (unsigned i) const |
Returns the minimum of the Y coordinate of the sampling points for a given column. | |
Scalar | yMax (unsigned i) const |
Returns the maximum of the Y coordinate of the sampling points for a given column. | |
size_t | numY (unsigned i) const |
Returns the number of sampling points in Y direction a given column. | |
Scalar | iToX (unsigned i) const |
Return the position on the x-axis of the i-th interval. | |
const std::vector< std::vector< SamplePoint > > & | samples () const |
const std::vector< Scalar > & | xPos () const |
const std::vector< Scalar > & | yPos () const |
InterpolationPolicy | interpolationGuide () const |
Scalar | jToY (unsigned i, unsigned j) const |
Return the position on the y-axis of the j-th interval. | |
template<class Evaluation > | |
unsigned | xSegmentIndex (const Evaluation &x, bool extrapolate=false) const |
Return the interval index of a given position on the x-axis. | |
template<class Evaluation > | |
Evaluation | xToAlpha (const Evaluation &x, unsigned segmentIdx) const |
Return the relative position of an x value in an intervall. | |
template<class Evaluation > | |
unsigned | ySegmentIndex (const Evaluation &y, unsigned xSampleIdx, bool extrapolate=false) const |
Return the interval index of a given position on the y-axis. | |
template<class Evaluation > | |
Evaluation | yToBeta (const Evaluation &y, unsigned xSampleIdx, unsigned ySegmentIdx) const |
Return the relative position of an y value in an interval. | |
template<class Evaluation > | |
bool | applies (const Evaluation &x, const Evaluation &y) const |
Returns true iff a coordinate lies in the tabulated range. | |
template<class Evaluation > | |
Evaluation | eval (const Evaluation &x, const Evaluation &y, bool extrapolate=false) const |
Evaluate the function at a given (x,y) position. | |
template<class Evaluation > | |
void | findPoints (unsigned &i, unsigned &j1, unsigned &j2, Evaluation &alpha, Evaluation &beta1, Evaluation &beta2, const Evaluation &x, const Evaluation &y, bool extrapolate) const |
template<class Evaluation > | |
Evaluation | eval (const unsigned &i, const unsigned &j1, const unsigned &j2, const Evaluation &alpha, const Evaluation &beta1, const Evaluation &beta2) const |
size_t | appendXPos (Scalar nextX) |
Set the x-position of a vertical line. | |
size_t | appendSamplePoint (size_t i, Scalar y, Scalar value) |
Append a sample point. | |
void | print (std::ostream &os) const |
Print the table for debugging purposes. | |
bool | operator== (const UniformXTabulated2DFunction< Scalar > &data) const |
Implements a scalar function that depends on two variables and which is sampled uniformly in the X direction, but non-uniformly on the Y axis-.
"Uniform on the X-axis" means that all Y sampling points must be located along a line for this value. This class can be used when the sampling points are calculated at run time.
enum Opm::UniformXTabulated2DFunction::InterpolationPolicy |
Indicates how interpolation will be performed.
Normal interpolation is done by interpolating vertically between lines of sample points, whereas LeftExtreme or RightExtreme implies guided interpolation, where interpolation is done parallel to a guide line. With LeftExtreme the lowest Y values will be used for the guide, and the guide line slope extends unchanged to infinity. With RightExtreme, the highest Y values are used, and the slope decreases linearly down to 0 (normal interpolation) for y <= 0.
|
inline |
Append a sample point.
Returns the i index of the new point within its line.
|
inline |
Set the x-position of a vertical line.
Returns the i index of that line.
|
inline |
Evaluate the function at a given (x,y) position.
If this method is called for a value outside of the tabulated range, a Opm::NumericalIssue
exception is thrown.
template void Opm::UniformXTabulated2DFunction< Scalar >::print | ( | std::ostream & | os | ) | const |
Print the table for debugging purposes.
It will produce the data in CSV format on stdout, so that it can be visualized using e.g. gnuplot.
|
inline |
Return the relative position of an x value in an intervall.
The returned value can be larger than 1 or smaller than zero if it is outside of the range of the segment. In particular this happens for the extrapolation case.
|
inline |
Return the relative position of an y value in an interval.
The returned value can be larger than 1 or smaller than zero if it is outside of the range of the segment. In particular this happens for the extrapolation case.