12#ifndef BELFEM_SPLINE_HPP
13#define BELFEM_SPLINE_HPP
74 const real aSref = 0.,
83 const real adYdX0 = 0.,
84 const real adYdX1 = 0.,
85 const real aXref = 0.,
86 const real aSref = 0.,
93 const string & aLabel,
249 save(
const string & aLabel,
250 const string & aPath,
287 const real adYdX0=0.0,
288 const real adYdX1=0.0,
289 const real aXref=0.0,
290 const real aSref=0.0 );
300 const real adYdX0=0.0,
301 const real adYdX1=0.0,
302 const real aXref=0.0,
303 const real aSref=0.0 );
377 create_entropy(
const real aXref,
const real & aSref );
385 synchronize(
const proc_t aMasterProc );
400 return mNumberOfPoints;
453 const index_t col =
static_cast<index_t>((std::min(std::max(aX,mXmin),mXmax) - mXmin) * mInvDeltaX);
454 return std::min(col, mNumberOfIntervals - 1);
465 return ( ( mData( 0, tCol ) * aX
466 + mData( 1, tCol ) ) * aX
467 + mData( 2, tCol ) ) * aX
478 return ( ( 3.0 * mData( 0, tCol ) * aX
479 + 2.0 * mData( 1, tCol ) ) * aX
480 + mData( 2, tCol ) );
489 "Spline column %lu out of range, must be < %lu",
490 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
492 return ( ( mData( 0, aCol ) * aX
493 + mData( 1, aCol ) ) * aX
494 + mData( 2, aCol ) ) * aX
504 "Spline column %lu out of range, must be < %lu",
505 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
507 return ( ( 3.0 * mData( 0, aCol ) * aX
508 + 2.0 * mData( 1, aCol ) ) * aX
509 + mData( 2, aCol ) );
519 return 6.0 * mData( 0, tCol ) * aX + 2.0 * mData( 1, tCol );
526 "Spline column %lu out of range, must be < %lu",
527 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
529 return 6.0 * mData( 0, aCol ) * aX + 2.0 * mData( 1, aCol );
538 "No entropy tables present" );
540 return ( 1.5 * mData( 0, tCol ) * aX
541 + 2.0 * mData( 1, tCol ) ) * aX
542 + mData( 2, tCol ) * std::log( aX )
550 "No entropy tables present" );
553 "Spline column %lu out of range, must be < %lu",
554 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
557 return ( 1.5 * mData( 0, aCol ) * aX
558 + 2.0 * mData( 1, aCol ) ) * aX
559 + mData( 2, aCol ) * std::log( aX )
570 "No entropy tables present" );
573 return 3.0 * mData( 0, tCol ) * aX
574 + 2.0 * mData( 1, tCol )
575 + mData( 2, tCol )/aX;
582 "No entropy tables present" );
585 "Spline column %lu out of range, must be < %lu",
586 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
589 return 3.0 * mData( 0, aCol ) * aX
590 + 2.0 * mData( 1, aCol )
591 + mData( 2, aCol )/aX;
598 "No integration tables present" );
602 return ((( 0.25 * mData( 0, tCol ) * aX
603 + mData( 1, tCol )/3.0 ) * aX
604 + 0.5 * mData( 2, tCol ) ) * aX
605 + mData( 3, tCol ) ) * aX
613 "No integration tables present" );
#define BELFEM_ASSERT(aCheck,...)
Definition assert.hpp:244
Sparse matrix in CSR or CSC format.
Definition cl_SpMatrix.hpp:52
void save_to_database(const string &aDatabase, const string &aLabel)
Definition cl_Spline.cpp:785
void save(const string &aLabel, const string &aPath, const enum FileMode aMode=FileMode::NEW)
Definition cl_Spline.cpp:329
void update_data(SpMatrix &aHelpMatrix, const Vector< real > &aValues, const spline::SplineBC aStartBC=spline::SplineBC::NoCurvature, const spline::SplineBC aEndBC=spline::SplineBC::NoCurvature, const real adYdX0=0.0, const real adYdX1=0.0, const real aXref=0.0, const real aSref=0.0)
Recompute spline coefficients for new y-values on the same grid.
Definition cl_Spline.cpp:404
Spline(const Vector< real > &aX, const Vector< real > &aY, SpMatrix &aA, const real aXref, const real aSref=0., const proc_t aMasterProc=gNoOwner)
Definition cl_Spline.cpp:199
real ddeval(const real aX) const
interpolate second derivative
Definition cl_Spline.hpp:515
real dentropy(const real aX) const
interpolate entropy derivative
Definition cl_Spline.hpp:567
void set_extra_mode(const spline::ExtraMode aMode)
Declare what the extra row of the coefficient table holds.
Definition cl_Spline.hpp:230
real integrate(const real aX) const
Definition cl_Spline.hpp:595
herr_t load(hid_t &aGroup)
Definition cl_Spline.cpp:371
index_t find_col(const real aX) const
Definition cl_Spline.hpp:446
real delta_x() const
Definition cl_Spline.hpp:422
real x_min() const
Definition cl_Spline.hpp:406
index_t n() const
Definition cl_Spline.hpp:398
const Matrix< real > & matrix_data() const
expose matrix
Definition cl_Spline.hpp:241
void create_integral(const real aXref=BELFEM_QUIET_NAN, const real aYref=0.0)
Definition cl_Spline.cpp:677
real deval(const real aX) const
interpolate first derivative
Definition cl_Spline.hpp:474
Matrix< real > & coefficients()
Definition cl_Spline.hpp:430
real entropy(const real aX) const
interpolate entropy
Definition cl_Spline.hpp:535
real eval(const real aX) const
interpolate the function
Definition cl_Spline.hpp:461
void initialize(const Vector< real > &aX, const Vector< real > &aY, SpMatrix &aA, const spline::SplineBC aStartBC=spline::SplineBC::NoCurvature, const spline::SplineBC aEndBC=spline::SplineBC::NoCurvature, const real adYdX0=0.0, const real adYdX1=0.0, const real aXref=0.0, const real aSref=0.0)
Definition cl_Spline.cpp:269
real x_max() const
Definition cl_Spline.hpp:414
Matrix< real > & matrix_data()
expose matrix
Definition cl_Spline.hpp:213
Definition cl_Spline.cpp:33
SplineBC
Definition Spline_Enums.hpp:19
@ NoCurvature
Definition Spline_Enums.hpp:20
void create_helpmatrix(const index_t aSize, const real aDeltaX, SpMatrix &aA, const SplineBC aStartBC, const SplineBC aEndBC)
Definition cl_Spline.cpp:39
ExtraMode
Definition Spline_Enums.hpp:26
@ Entropy
Definition Spline_Enums.hpp:28
@ Integral
Definition Spline_Enums.hpp:29
@ None
Definition Spline_Enums.hpp:27
USER GUIDES:
Definition cl_Capacitor.cpp:16
int hid_t
Definition hdf5_types.hpp:20
int proc_t
Definition commtypes.hpp:29
FileMode
Definition filetools.hpp:27
@ NEW
Definition filetools.hpp:28
constexpr proc_t gNoOwner
Definition typedefs.hpp:59
uint32_t index_t
Definition typedefs.hpp:52
int herr_t
Definition hdf5_types.hpp:21
double real
Definition typedefs.hpp:36
#define BELFEM_QUIET_NAN
Definition typedefs.hpp:86