template<class ScalarT, class ImplementationT>
class Dumux::SplineCommon_< ScalarT, ImplementationT >
The common code for all 3rd order polynomial splines.
|
| bool | applies (Scalar x) const |
| | Return true if the given x is in range [x1, xn]. More...
|
| |
| Scalar | xMin () const |
| | Return the x value of the leftmost sampling point. More...
|
| |
| Scalar | xMax () const |
| | Return the x value of the rightmost sampling point. More...
|
| |
| void | printCSV (Scalar xi0, Scalar xi1, int k) const |
| | Prints k tuples of the format (x, y, dx/dy, isMonotonic) to stdout. More...
|
| |
| Scalar | eval (Scalar x, bool extrapolate=false) const |
| | Evaluate the spline at a given position. More...
|
| |
| Scalar | evalDerivative (Scalar x, bool extrapolate=false) const |
| | Evaluate the spline's derivative at a given position. More...
|
| |
| Scalar | intersect (Scalar a, Scalar b, Scalar c, Scalar d) const |
| | Find the intersections of the spline with a cubic polynomial in the whole intervall, throws Dune::MathError exception if there is more or less than one solution. More...
|
| |
| Scalar | intersectInterval (Scalar x0, Scalar x1, Scalar a, Scalar b, Scalar c, Scalar d) const |
| | Find the intersections of the spline with a cubic polynomial in a sub-intervall of the spline, throws Dune::MathError exception if there is more or less than one solution. More...
|
| |
| int | monotonic (Scalar x0, Scalar x1) const |
| | Returns 1 if the spline is monotonically increasing, -1 if the spline is mononously decreasing and 0 if the spline is not monotonous in the interval (x0, x1). More...
|
| |
| int | monotonic () const |
| | Same as monotonic(x0, x1), but with the entire range of the spline as interval. More...
|
| |
|
| | SplineCommon_ ()=default |
| |
| template<class DestVector , class SourceVector > |
| void | assignSamplingPoints_ (DestVector &destX, DestVector &destY, const SourceVector &srcX, const SourceVector &srcY, int numSamples) |
| | Set the sampling point vectors. More...
|
| |
| template<class DestVector , class ListIterator > |
| void | assignFromArrayList_ (DestVector &destX, DestVector &destY, const ListIterator &srcBegin, const ListIterator &srcEnd, int numSamples) |
| |
| template<class DestVector , class ListIterator > |
| void | assignFromTupleList_ (DestVector &destX, DestVector &destY, ListIterator srcBegin, ListIterator srcEnd, int numSamples) |
| | Set the sampling points. More...
|
| |
| template<class Vector , class Matrix > |
| void | makePeriodicSystem_ (Matrix &M, Vector &d) |
| | Make the linear system of equations Mx = d which results in the moments of the periodic spline. More...
|
| |
| template<class Vector , class Matrix > |
| void | makeFullSystem_ (Matrix &M, Vector &d, Scalar m0, Scalar m1) |
| | Make the linear system of equations Mx = d which results in the moments of the full spline. More...
|
| |
| template<class Vector , class Matrix > |
| void | makeNaturalSystem_ (Matrix &M, Vector &d) |
| | Make the linear system of equations Mx = d which results in the moments of the natural spline. Stoer 2005: Numerische Mathematik 1, p. 111 [64]. More...
|
| |
| Scalar | eval_ (Scalar x, int i) const |
| |
| Scalar | evalDerivative_ (Scalar x, int i) const |
| |
| int | monotonic_ (int i, Scalar x0, Scalar x1) const |
| |
| int | intersectSegment_ (Scalar *sol, int segIdx, Scalar a, Scalar b, Scalar c, Scalar d, Scalar x0=-1e100, Scalar x1=1e100) const |
| | Find all the intersections of a segment of the spline with a cubic polynomial within a specified interval. More...
|
| |
| int | segmentIdx_ (Scalar x) const |
| |
| Scalar | h_ (int i) const |
| | Returns x[i] - x[i - 1]. More...
|
| |
| Scalar | x_ (int i) const |
| | Returns the y coordinate of the i-th sampling point. More...
|
| |
| Scalar | y_ (int i) const |
| | Returns the y coordinate of the i-th sampling point. More...
|
| |
| Scalar | moment_ (int i) const |
| | Returns the moment (i.e. second derivative) of the spline at the i-th sampling point. More...
|
| |
| Scalar | a_ (int i) const |
| |
| Scalar | b_ (int i) const |
| |
| Scalar | c_ (int i) const |
| |
| Scalar | d_ (int i) const |
| |
| int | numSamples_ () const |
| | Returns the number of sampling points. More...
|
| |
template<class ScalarT , class ImplementationT >
template<class DestVector , class SourceVector >
| void Dumux::SplineCommon_< ScalarT, ImplementationT >::assignSamplingPoints_ |
( |
DestVector & |
destX, |
|
|
DestVector & |
destY, |
|
|
const SourceVector & |
srcX, |
|
|
const SourceVector & |
srcY, |
|
|
int |
numSamples |
|
) |
| |
|
inlineprotected |
Set the sampling point vectors.
This takes care that the order of the x-values is ascending, although the input must be ordered already!
template<class ScalarT , class ImplementationT >
template<class Vector , class Matrix >
| void Dumux::SplineCommon_< ScalarT, ImplementationT >::makePeriodicSystem_ |
( |
Matrix & |
M, |
|
|
Vector & |
d |
|
) |
| |
|
inlineprotected |
Make the linear system of equations Mx = d which results in the moments of the periodic spline.
When solving Mx = d, it should be noted that x[0] is trash and needs to be set to x[n-1]
template<class ScalarT , class ImplementationT >
Returns 1 if the spline is monotonically increasing, -1 if the spline is mononously decreasing and 0 if the spline is not monotonous in the interval (x0, x1).
In the corner case where the whole spline is flat, it returns 2.
template<class ScalarT , class ImplementationT >
| void Dumux::SplineCommon_< ScalarT, ImplementationT >::printCSV |
( |
Scalar |
xi0, |
|
|
Scalar |
xi1, |
|
|
int |
k |
|
) |
| const |
|
inline |
Prints k tuples of the format (x, y, dx/dy, isMonotonic) to stdout.
If the spline does not apply for parts of [x0, x1] it is extrapolated using a straight line. The result can be inspected using the following commands:
--------— snip --------— ./yourProgramm > spline.csv gnuplot
gnuplot> plot "spline.csv" using 1:2 w l ti "Curve", \ "spline.csv" using 1:3 w l ti "Derivative", \ "spline.csv" using 1:4 w p ti "Monotonic" --------— snap --------—