From 433217f811bce10d1c1b2278c6d90a2b7abb55d4 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauldmccarthy@gmail.com> Date: Fri, 6 Sep 2024 16:38:18 +0100 Subject: [PATCH] ENH,RF: Implement clamped extrapolation boundary condition for coefficient initialisation --- splinterpolator.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/splinterpolator.h b/splinterpolator.h index a9b1426..2fab71c 100644 --- a/splinterpolator.h +++ b/splinterpolator.h @@ -1643,11 +1643,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); } @@ -1674,9 +1680,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); } -- GitLab