31 const bool enableValueClipping=
true );
54 virtual double value(
const double* )
const = 0;
56 double value( std::vector<double> & x )
const{
return value( &x[0] ); }
110 const std::vector<double> & indepVars,
111 const std::vector<double> & depVars,
112 const bool allowClipping =
true );
118 BSpline1D(
const bool allowClipping =
true );
132 double value(
const double* indepVar )
const;
133 inline double value(
const double & x )
const{
return value(&x); }
144 inline const std::vector<double> &
get_basisfun()
const{
return basisFun_; }
146 void sort_inputs(
const std::vector<double> & indepVars,
147 const std::vector<double> & depVars,
148 std::vector<double> & sortedIndepVars,
149 std::vector<double> & sortedDepVars )
const;
160 return ( a.
npts_ == npts_ &&
167 inline bool operator != (
const BSpline1D& a )
const{
return !( *
this==a ); }
175 void compute_control_pts(
const std::vector<double> & indepVars,
176 const std::vector<double> & depVars );
211 const std::vector<double> & indepVars1,
212 const std::vector<double> & indepVars2,
213 const std::vector<double> & depVars,
214 const bool allowClipping =
true );
220 BSpline2D(
const bool allowClipping =
true );
234 double value(
const double* indepVar )
const;
241 std::vector<const BSpline1D*>::const_iterator isp = dim2Splines_.begin();
242 std::vector<const BSpline1D*>::const_iterator ispa = a.
dim2Splines_.begin();
243 for( ; isp!=dim2Splines_.end(); isp++, ispa++ )
244 isEqual = ( (**isp) == (**ispa) ) ? isEqual :
false;
245 isEqual = (*a.
sp1_ == *sp1_) ? isEqual :
false;
249 inline bool operator != (
const BSpline2D& a )
const{
return !( *
this==a ); }
256 void compute_control_pts(
const std::vector<double> & indepVars1,
257 const std::vector<double> & indepVars2,
258 const std::vector<double> & depVars );
294 const std::vector<double> & x1,
295 const std::vector<double> & x2,
296 const std::vector<double> & x3,
297 const std::vector<double> & phi,
298 const bool allowClipping =
true );
304 BSpline3D(
const bool allowClipping =
true );
318 double value(
const double* )
const;
325 std::vector<const BSpline2D*>::const_iterator isp = sp2d_.begin();
326 std::vector<const BSpline2D*>::const_iterator ispa = a.
sp2d_.begin();
327 for( ; isp!=sp2d_.end(); isp++, ispa++ )
328 isEqual = ( **isp == **ispa ) ? isEqual :
false;
329 isEqual = (*a.
sp1_ == *sp1_) ? isEqual :
false;
333 inline bool operator != (
const BSpline3D& a )
const{
return !( *
this==a ); }
338 std::vector<const BSpline2D*>
sp2d_;
341 void compute_control_pts(
const std::vector<double> & x1,
342 const std::vector<double> & x2,
343 const std::vector<double> & x3,
344 const std::vector<double> & phi );
381 const std::vector<double> & x1,
382 const std::vector<double> & x2,
383 const std::vector<double> & x3,
384 const std::vector<double> & x4,
385 const std::vector<double> & phi,
386 const bool allowClipping =
true );
392 BSpline4D(
const bool allowClipping =
true );
406 double value(
const double* x )
const;
413 std::vector<const BSpline3D*>::const_iterator isp = sp3d_.begin();
414 std::vector<const BSpline3D*>::const_iterator ispa = a.
sp3d_.begin();
415 for( ; isp!=sp3d_.end(); isp++, ispa++ )
416 isEqual = ( **isp == **ispa ) ? isEqual :
false;
417 isEqual = (*a.
sp1_ == *sp1_) ? isEqual :
false;
421 inline bool operator != (
const BSpline4D& a )
const{
return !( *
this==a ); }
425 const int n1_, n2_, n3_,
n4_;
426 std::vector<const BSpline3D*>
sp3d_;
429 void compute_control_pts(
const std::vector<double> & x1,
430 const std::vector<double> & x2,
431 const std::vector<double> & x3,
432 const std::vector<double> & x4,
433 const std::vector<double> & phi );
471 const std::vector<double> & x1,
472 const std::vector<double> & x2,
473 const std::vector<double> & x3,
474 const std::vector<double> & x4,
475 const std::vector<double> & x5,
476 const std::vector<double> & phi,
477 const bool allowClipping =
true );
483 BSpline5D(
const bool allowClipping =
true );
497 double value(
const double* x )
const;
504 std::vector<const BSpline4D*>::const_iterator isp = sp4d_.begin();
505 std::vector<const BSpline4D*>::const_iterator ispa = a.
sp4d_.begin();
506 for( ; isp!=sp4d_.end(); isp++, ispa++ )
507 isEqual = ( **isp == **ispa ) ? isEqual :
false;
508 isEqual = (*a.
sp1_ == *sp1_) ? isEqual :
false;
512 inline bool operator != (
const BSpline5D& a )
const{
return !( *
this==a ); }
516 const int n1_, n2_, n3_, n4_,
n5_;
517 std::vector<const BSpline4D*>
sp4d_;
520 void compute_control_pts(
const std::vector<double> & x1,
521 const std::vector<double> & x2,
522 const std::vector<double> & x3,
523 const std::vector<double> & x4,
524 const std::vector<double> & x5,
525 const std::vector<double> & phi );
virtual ~BSpline()
Definition: BSpline.C:201
BSpline & operator=(const BSpline &)
double value(std::vector< double > &x) const
Definition: BSpline.h:56
Definition: ABLForcingAlgorithm.C:26
Definition: BSpline.h:448
BSpline1D * sp1_
Definition: BSpline.h:518
Definition: BSpline.h:359
Definition: BSpline.h:273
Support for B-Spline of a curve.
Definition: BSpline.h:97
Definition: BSpline.h:196
Simple wrapper around the HDF5 library to make usage easier.
Definition: H5IO.h:57
BSpline * clone() const
copy this object and return a BSpline pointer
Definition: BSpline.h:226
BSpline * clone() const
copy this object and return a BSpline pointer
Definition: BSpline.h:398
virtual void read_hdf5(H5IO &io)=0
Read a spline from an HDF5 database.
double maxIndepVarVal_
Definition: BSpline.h:179
std::vector< const BSpline2D * > sp2d_
Definition: BSpline.h:338
std::vector< double > knots_
Definition: BSpline.h:180
const bool enableValueClipping_
Definition: BSpline.h:76
const std::vector< double > & get_knot_vector() const
Definition: BSpline.h:137
std::vector< double > basisFun_
Definition: BSpline.h:181
BSpline(const int order, const int dimension, const bool enableValueClipping=true)
Definition: BSpline.C:192
const int n4_
Definition: BSpline.h:425
double minIndepVarVal_
Definition: BSpline.h:179
std::vector< double > & get_control_pts()
Definition: BSpline.h:136
BSpline1D * sp1_
Definition: BSpline.h:339
double get_minval() const
Definition: BSpline.h:142
BSpline * clone() const
copy this object and return a BSpline pointer
Definition: BSpline.h:489
int npts_
Definition: BSpline.h:178
virtual BSpline * clone() const =0
Copy this object and return a BSpline pointer.
BSpline * clone() const
copy this object and return a BSpline pointer
Definition: BSpline.h:124
double get_maxval() const
Definition: BSpline.h:141
BSpline1D * sp1_
Definition: BSpline.h:427
Base class for B-Splines.
Definition: BSpline.h:26
std::vector< const BSpline1D * > dim2Splines_
Definition: BSpline.h:253
const std::vector< double > & get_basisfun() const
Definition: BSpline.h:144
int order_
Definition: BSpline.h:74
int get_npts() const
Definition: BSpline.h:139
const std::vector< double > & get_control_pts() const
Definition: BSpline.h:135
BSpline1D * sp1_
Definition: BSpline.h:254
virtual double value(const double *) const =0
Evaluate the dependent variable via interpolation at the given value of the dependent variable(s)...
BSpline * clone() const
copy this object and return a BSpline pointer
Definition: BSpline.h:310
const int dim_
Definition: BSpline.h:75
const int n5_
Definition: BSpline.h:516
int get_order() const
Query the order of accuracy for this spline.
Definition: BSpline.h:45
int get_dimension() const
Query the dimensionality of this spline (number of independent variables)
Definition: BSpline.h:48
virtual void write_hdf5(H5IO &io) const =0
Write a spline to an HDF5 database.
const int n3_
Definition: BSpline.h:337
std::vector< const BSpline4D * > sp4d_
Definition: BSpline.h:517
std::vector< double > controlPts_
Definition: BSpline.h:180
std::vector< const BSpline3D * > sp3d_
Definition: BSpline.h:426
double value(const double &x) const
Definition: BSpline.h:133