32 #ifndef HEX_ECS_BSPLINE 33 #define HEX_ECS_BSPLINE 37 #include "hex-arrays.h" 100 Complex
bspline (
int i,
int iknot,
int k, Complex r)
const;
114 Complex
dspline (
int i,
int iknot,
int k, Complex r)
const;
129 void B (
int i,
int iknot,
int n,
const Complex* x, Complex* y)
const;
138 void dB (
int i,
int iknot,
int n,
const Complex* x, Complex* y)
const;
149 return R1_ + (r - R1_) * rotation_;
153 return R2_ + (r - R2_) * rotation_;
168 return R1_ + (z.real() - R1_) / rotation_.real();
172 return R2_ + (z.real() - R2_) / rotation_.real();
186 Complex
clamp (Complex z, Real a, Real b)
const;
197 cArray
zip (
const cArrayView coeff,
const rArrayView grid)
const;
210 cArray
zip (
const cArrayView coeff,
const rArrayView xgrid,
const rArrayView ygrid)
const;
224 const cArrayView coeff,
225 const rArrayView xgrid,
226 const rArrayView ygrid,
237 int knot (Complex x)
const;
249 Complex
eval (
const cArrayView coeff, Real x)
const;
261 Complex
eval (
const cArrayView coeff, Real x, Real y)
const;
266 cArrayView
t ()
const {
return t_; }
269 Complex
const &
t (
int i)
const {
return t_[i]; }
275 int Nknot ()
const {
return Nknot_; }
281 int order ()
const {
return order_; }
288 int iR1 ()
const {
return cknots1_.empty() ? 0 : cknots1_.size() - 1; }
296 int iR2 ()
const {
return cknots2_.empty() ? t_.size() - 1 : t_.size() - cknots2_.size(); }
299 Real
R1 ()
const {
return R1_; }
302 Real
R2 ()
const {
return R2_; }
305 Real
Rmin ()
const {
return Rmin_; }
308 Real
Rmax ()
const {
return Rmax_; };
314 rArray
const &
rknots ()
const {
return rknots_; }
317 rArray
const &
cknots1 ()
const {
return cknots1_; }
318 rArray
const &
cknots2 ()
const {
return cknots2_; }
326 std::size_t
hash ()
const;
334 rArray cknots1_, cknots2_;
373 mutable rArrays work_;
376 static const std::size_t work_size_;
381 #endif // HEX_ECS_BSPLINE Real R1() const
Beginning of the real grid.
Definition: bspline.h:299
rArray const & cknots1() const
complex knots
Definition: bspline.h:317
Real ECStheta() const
ECS rotation angle.
Definition: bspline.h:311
std::size_t hash() const
Return (almost) unique identification for this B-spline object.
Definition: bspline.cpp:503
Complex clamp(Complex z, Real a, Real b) const
Restrict value into a given range.
Definition: bspline.cpp:522
Real unrotate(Complex z) const
Apply the inverse ECS transformation.
Definition: bspline.h:164
int Nknot() const
Number of knots.
Definition: bspline.h:275
int order() const
B-spline order.
Definition: bspline.h:281
Real R2() const
End of the real grid.
Definition: bspline.h:302
Complex eval(const cArrayView coeff, Real x) const
Evaluate 1D B-spline expansion.
Definition: bspline.cpp:457
B-spline environment.
Definition: bspline.h:57
int knot(Complex x) const
Get knot index for coordinate.
Definition: bspline.cpp:431
cArray zip(const cArrayView coeff, const rArrayView grid) const
Zip 1D expansion.
Definition: bspline.cpp:169
void B(int i, int iknot, int n, const Complex *x, Complex *y) const
B-spline.
Definition: bspline.cpp:115
Real Rmax() const
End of the grid (unrotated).
Definition: bspline.h:308
Bspline(int order, Real th, rArrayView cknots1, rArrayView rknots, rArrayView cknots2)
Constructor.
Definition: bspline.cpp:372
Complex dspline(int i, int iknot, int k, Complex r) const
Evaluate derivative of a B-spline.
Definition: bspline.cpp:96
int Nreknot() const
Number of real knots.
Definition: bspline.h:278
int Nspline() const
Number of B-splines.
Definition: bspline.h:272
Complex bspline(int i, int iknot, int k, Complex r) const
Evaluate B-spline.
Definition: bspline.cpp:62
rArray const & rknots() const
real knots
Definition: bspline.h:314
rArray const & cknots2() const
Definition: bspline.h:318
cArrayView t() const
B-spline knot sequence.
Definition: bspline.h:266
Complex rotate(Real r) const
Apply the ECS transformation.
Definition: bspline.h:145
int iR2() const
Index of knot between real grid and trailing complex grid.
Definition: bspline.h:296
int iR1() const
Index of knot between leading complex grid and real grid.
Definition: bspline.h:288
Complex const & t(int i) const
B-spline knot sequence.
Definition: bspline.h:269
Real Rmin() const
Beginning of the grid (unrotated).
Definition: bspline.h:305
void dB(int i, int iknot, int n, const Complex *x, Complex *y) const
Derivative of a B-spline.
Definition: bspline.cpp:157