43 #ifndef SCI_CUBICPWI_H__
44 #define SCI_CUBICPWI_H__
62 template <
class T> std::ostream&
63 operator<<(std::ostream& out, Array1<T> a)
65 for (
int i = 0; i < a.size(); i++){
66 std::cout << a[i] << std::endl;
84 inline bool get_value(
double,
double&);
95 res = p[i].a + w * (p[i].b + w * (p[i].c + p[i].d * w));
127 if (this->data_valid && (i = this->get_interval(w)) >= 0) {
128 w -= this->points[i];
129 res = T(X[i].a + w * (X[i].b + w * (X[i].c + X[i].d * w)),
130 Y[i].a + w * (Y[i].b + w * (Y[i].c + Y[i].d * w)),
131 Z[i].a + w * (Z[i].b + w * (Z[i].c + Z[i].d * w)));
142 template <
class T>
bool
145 int sz = vals.size();
153 for (
int i = 0; i < sz; i++) {
163 std::cout <<
"Derivatives are done!!!" << std::endl;
167 for (
int i = 0; i < sz; i++) {
170 return set_data(pts, vals, drvs);
178 template <
class T>
bool
184 if (this->fill_data(pts) && (sz = this->points.size()) > 1 &&
185 sz == vals.size() && sz == drvs.size()) {
187 std::cout <<
"Inside set_data!!!" << std::endl;
202 for (
int i=0; i < sz; i++) {
206 drvX[i] = drvs[i].x();
207 drvY[i] = drvs[i].y();
208 drvZ[i] = drvs[i].z();
211 this->data_valid =
true;
212 double delta, a, b, c, d;
214 for (
int i = 0; i < sz-1; i++)
215 if ( (delta = this->points[i+1] - this->points[i]) > 10e-9) {
218 c = ((3 * (vx[i+1] - vx[i]) / delta) - 2 * drvX[i] - drvX[i+1]) / delta;
219 d = (drvX[i] + drvX[i+1] - (2 * (vx[i+1] - vx[i]) / delta)) / (delta * delta);
226 std::cout <<
"Interval: " << this->points[i] <<
", " << this->points[i+1] << std::endl;
227 std::cout <<
"Coeff. are for X: " << X[i].a << std::endl << X[i].b
228 << std::endl << X[i].c << std::endl << X[i].d << std::endl;
232 c = (3 * (vy[i+1] - vy[i]) / delta - 2 * drvY[i] - drvY[i+1]) / delta;
233 d = (drvY[i] + drvY[i+1] - 2 * (vy[i+1] - vy[i]) / delta) / (delta * delta);
240 std::cout <<
"Interval: " << this->points[i] <<
", " << this->points[i+1] << std::endl;
241 std::cout <<
"Coeff. are for Y: " << Y[i].a << std::endl << Y[i].b
242 << std::endl << Y[i].c << std::endl << Y[i].d << std::endl;
246 c = (3* (vz[i+1] - vz[i]) / delta- 2 * drvZ[i] - drvZ[i+1]) / delta;
247 d = (drvZ[i] + drvZ[i+1] - 2 * (vz[i+1] - vz[i]) / delta) / (delta * delta);
256 std::cout <<
"Delta is small!!! " << std::endl;
262 return this->data_valid;
267 #endif //SCI_CUBICPWI_H__
Definition: CubicPWI.h:60
Interface to dynamic 1D array class.
bool set_data(const Array1< double > &, const Array1< T > &)
Definition: CubicPWI.h:143
double c
Definition: CubicPWI.h:74
Definition: PiecewiseInterp.h:60
bool get_value(double, double &)
Definition: CubicPWI.h:90
#define SCISHARE
Definition: share.h:39
Definition: CubicPWI.h:60
EndCondition
Definition: CubicPWI.h:60
Definition: CubicPWI.h:71
bool set_tangents(const Array1< double > &pts, const Array1< double > &vals, Array1< double > &r, EndCondition end_conds)
Definition: CubicPWI.cc:60
Definition: CubicPWI.h:60
double b
Definition: CubicPWI.h:73
double d
Definition: CubicPWI.h:75
Definition: CubicPWI.h:102
double a
Definition: CubicPWI.h:72
Array1< double > points
Definition: PiecewiseInterp.h:66
bool get_value(double, T &)
Definition: CubicPWI.h:124
Definition: CubicPWI.h:60
Cubic3DPWI()
Definition: CubicPWI.h:104
Definition: CubicPWI.h:78
bool data_valid
Definition: PiecewiseInterp.h:62