diff --git a/splinterpolator.h b/splinterpolator.h index 7978800045fe0069470aa1cf632b5089e5e45d80..f8fa35eed965dd01a23d359285ad8ed1172c9a2a 100644 --- a/splinterpolator.h +++ b/splinterpolator.h @@ -1638,11 +1638,17 @@ double Splinterpolator<T>::SplineColumn::init_fwd_sweep(double z, ExtrapolationT double z2i=z; for (unsigned int i=1; i<n; i++, ptr--, z2i*=z) iv += z2i * *ptr; } - else { + else if (et == Mirror) { double *ptr=&_col[1]; double z2i=z; for (unsigned int i=1; i<n; i++, ptr++, z2i*=z) iv += z2i * *ptr; } + // et == Constant || et == Zeros + else { + double *ptr=&_col[0]; + double z2i=z; + for (unsigned int i=0; i<n; i++, ptr++, z2i*=z) iv += z2i * *ptr; + } return(iv); } @@ -1669,9 +1675,14 @@ double Splinterpolator<T>::SplineColumn::init_bwd_sweep(double z, double lv, Ext } iv /= (z2i-1.0); } - else { + else if (et == Mirror) { iv = -z/(1.0-z*z) * (2.0*_col[_sz-1] - lv); } + // et == Constant || et == Zeros + else { + iv = z / (z - 1) * _col[_sz-1]; + } + return(iv); }