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,
246 save(
const string & aLabel,
247 const string & aPath,
284 const real adYdX0=0.0,
285 const real adYdX1=0.0,
286 const real aXref=0.0,
287 const real aSref=0.0 );
297 const real adYdX0=0.0,
298 const real adYdX1=0.0,
299 const real aXref=0.0,
300 const real aSref=0.0 );
374 create_entropy(
const real aXref,
const real & aSref );
382 synchronize(
const proc_t aMasterProc );
397 return mNumberOfPoints;
450 const index_t col =
static_cast<index_t>((std::min(std::max(aX,mXmin),mXmax) - mXmin) * mInvDeltaX);
451 return std::min(col, mNumberOfIntervals - 1);
462 return ( ( mData( 0, tCol ) * aX
463 + mData( 1, tCol ) ) * aX
464 + mData( 2, tCol ) ) * aX
475 return ( ( 3.0 * mData( 0, tCol ) * aX
476 + 2.0 * mData( 1, tCol ) ) * aX
477 + mData( 2, tCol ) );
486 "Spline column %lu out of range, must be < %lu",
487 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
489 return ( ( mData( 0, aCol ) * aX
490 + mData( 1, aCol ) ) * aX
491 + mData( 2, aCol ) ) * aX
501 "Spline column %lu out of range, must be < %lu",
502 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
504 return ( ( 3.0 * mData( 0, aCol ) * aX
505 + 2.0 * mData( 1, aCol ) ) * aX
506 + mData( 2, aCol ) );
516 return 6.0 * mData( 0, tCol ) * aX + 2.0 * mData( 1, tCol );
523 "Spline column %lu out of range, must be < %lu",
524 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
526 return 6.0 * mData( 0, aCol ) * aX + 2.0 * mData( 1, aCol );
535 "No entropy tables present" );
537 return ( 1.5 * mData( 0, tCol ) * aX
538 + 2.0 * mData( 1, tCol ) ) * aX
539 + mData( 2, tCol ) * std::log( aX )
547 "No entropy tables present" );
550 "Spline column %lu out of range, must be < %lu",
551 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
554 return ( 1.5 * mData( 0, aCol ) * aX
555 + 2.0 * mData( 1, aCol ) ) * aX
556 + mData( 2, aCol ) * std::log( aX )
567 "No entropy tables present" );
570 return 3.0 * mData( 0, tCol ) * aX
571 + 2.0 * mData( 1, tCol )
572 + mData( 2, tCol )/aX;
579 "No entropy tables present" );
582 "Spline column %lu out of range, must be < %lu",
583 (
long unsigned int ) aCol, (
long unsigned int ) mNumberOfIntervals );
586 return 3.0 * mData( 0, aCol ) * aX
587 + 2.0 * mData( 1, aCol )
588 + mData( 2, aCol )/aX;
595 "No integration tables present" );
599 return ((( 0.25 * mData( 0, tCol ) * aX
600 + mData( 1, tCol )/3.0 ) * aX
601 + 0.5 * mData( 2, tCol ) ) * aX
602 + mData( 3, tCol ) ) * aX
610 "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:801
void save(const string &aLabel, const string &aPath, const enum FileMode aMode=FileMode::NEW)
Definition cl_Spline.cpp:333
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:409
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:201
real ddeval(const real aX) const
interpolate second derivative
Definition cl_Spline.hpp:512
real dentropy(const real aX) const
interpolate entropy derivative
Definition cl_Spline.hpp:564
void set_extra_mode(const spline::ExtraMode aMode)
Declare what the extra row of the coefficient table holds.
Definition cl_Spline.hpp:227
real integrate(const real aX) const
Definition cl_Spline.hpp:592
herr_t load(hid_t &aGroup)
Definition cl_Spline.cpp:376
index_t find_col(const real aX) const
Definition cl_Spline.hpp:443
real delta_x() const
Definition cl_Spline.hpp:419
real x_min() const
Definition cl_Spline.hpp:403
index_t n() const
Definition cl_Spline.hpp:395
const Matrix< real > & matrix_data() const
expose matrix
Definition cl_Spline.hpp:238
void create_integral(const real aXref=BELFEM_QUIET_NAN, const real aYref=0.0)
Definition cl_Spline.cpp:692
real deval(const real aX) const
interpolate first derivative
Definition cl_Spline.hpp:471
Matrix< real > & coefficients()
Definition cl_Spline.hpp:427
real entropy(const real aX) const
interpolate entropy
Definition cl_Spline.hpp:532
real eval(const real aX) const
interpolate the function
Definition cl_Spline.hpp:458
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:271
real x_max() const
Definition cl_Spline.hpp:411
Matrix< real > & matrix_data()
expose matrix
Definition cl_Spline.hpp:210
Definition cl_Spline.cpp:33
void create_helpmatrix(const real &aSize, const real &aDeltaX, SpMatrix &aA, const SplineBC aStartBC, const SplineBC aEndBC)
Definition cl_Spline.cpp:39
SplineBC
Definition Spline_Enums.hpp:19
@ NoCurvature
Definition Spline_Enums.hpp:20
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:87