1 | /* |
2 | * z_spline.hpp |
3 | * |
4 | * Created on: May 8, 2017 |
5 | * Author: i-bird |
6 | */ |
7 | |
8 | #ifndef OPENFPM_NUMERICS_SRC_INTERPOLATION_Z_SPLINE_HPP_ |
9 | #define OPENFPM_NUMERICS_SRC_INTERPOLATION_Z_SPLINE_HPP_ |
10 | |
11 | #include "mp4_kernel.hpp" |
12 | |
13 | template<typename st, unsigned int ord> |
14 | class z_kernel |
15 | { |
16 | public: |
17 | |
18 | static const int np = 4; |
19 | |
20 | static inline st value(st x, size_t i) |
21 | { |
22 | std::cerr << __FILE__ << ":" << __LINE__ << ": Error this order has not been implemented" << std::endl; |
23 | return 0.0; |
24 | } |
25 | }; |
26 | |
27 | template<typename st> |
28 | class z_kernel<st,1> |
29 | { |
30 | public: |
31 | |
32 | static const int np = 2; |
33 | |
34 | static inline st value(st x, size_t i) |
35 | { |
36 | if (i == 0) |
37 | return x + 1; |
38 | else if (i == 1) |
39 | return 1-x; |
40 | return 0.0; |
41 | } |
42 | }; |
43 | |
44 | template<typename st> |
45 | class z_kernel<st,2>: public mp4_kernel<st> |
46 | { |
47 | |
48 | }; |
49 | |
50 | template<typename st> |
51 | class z_kernel<st,3> |
52 | { |
53 | public: |
54 | |
55 | static const int np = 6; |
56 | |
57 | static inline st value(st x, size_t i) |
58 | { |
59 | if (i == 0) |
60 | return 18.0 + ( 38.25 + (31.875 + ( 313.0/24.0 + (2.625 + 5.0/24.0*x)*x)*x)*x)*x; |
61 | else if (i == 1) |
62 | return -4.0 + (-18.75 + (-30.625 + (-545.0/24.0 + ( -7.875 - 25.0/24.0*x)*x)*x)*x)*x; |
63 | else if (i == 2) |
64 | return 1.0 + (-1.25 +(35.0/12.0 +(5.25 + 25.0/12.0*x)*x)*x)*x*x; |
65 | else if (i == 3) |
66 | return 1.0 + (-1.25 +(-35.0/12.0 +(5.25 - 25.0/12.0*x)*x)*x)*x*x; |
67 | else if (i == 4) |
68 | return -4.0 + (18.75 + (-30.625 + (545.0/24.0 + ( -7.875 + 25.0/24.0*x)*x)*x)*x)*x; |
69 | else if (i == 5) |
70 | return 18.0 + (-38.25 + (31.875 + (-313.0/24.0 + (2.625 - 5.0/24.0*x)*x)*x)*x)*x; |
71 | |
72 | return 0.0; |
73 | } |
74 | }; |
75 | |
76 | template<typename st> |
77 | class z_kernel<st,4> |
78 | { |
79 | public: |
80 | |
81 | static const int np = 8; |
82 | |
83 | static inline st value(st x, size_t i) |
84 | { |
85 | if (i == 0) |
86 | return 726.4 + ( 1491.2 + (58786.0/45.0 + ( 633.0 + (26383.0/144.0 + (22807.0/720.0 + (727.0/240.0 + 89.0/720.0*x)*x)*x)*x)*x)*x)*x; |
87 | else if (i == 1) |
88 | return -440 +( -1297.45 + ( -117131/72.0 + ( -1123.5 + ( -66437.0/144.0 + ( -81109.0/720.0 + ( -727.0/48.0 - 623.0/720.0*x)*x)*x)*x)*x)*x)*x; |
89 | else if (i == 2) |
90 | return 27.6 + (8617.0/60.0 +(321.825 +(395.5 +( 284.8125 + (119.7875 +(27.2625 + 623.0/240.0*x)*x)*x)*x)*x)*x)*x; |
91 | else if (i == 3) |
92 | return 1.0 + (( -49.0/36.0 + (( -959.0/144.0 + ( -2569.0/144.0 + ( -727.0/48.0 - 623.0/144.0*x)*x)*x)*x)*x)*x)*x; |
93 | else if (i == 4) |
94 | return 1.0 + (( -49.0/36.0 + (( -959.0/144.0 + ( 2569.0/144.0 + ( -727.0/48.0 + 623.0/144.0*x)*x)*x)*x)*x)*x)*x; |
95 | else if (i == 5) |
96 | return 27.6 + (-8617.0/60.0 +(321.825 +(-395.5 +( 284.8125 + (-119.7875 +(27.2625 - 623.0/240.0*x)*x)*x)*x)*x)*x)*x; |
97 | else if (i == 6) |
98 | return -440 +( 1297.45 + ( -117131/72.0 + ( 1123.5 + ( -66437.0/144.0 + ( 81109.0/720.0 + ( -727.0/48.0 + 623.0/720.0*x)*x)*x)*x)*x)*x)*x; |
99 | else if (i == 7) |
100 | return 726.4 + ( -1491.2 + (58786.0/45.0 + ( -633.0 + (26383.0/144.0 + (-22807.0/720.0 + (727.0/240.0 - 89.0/720.0*x)*x)*x)*x)*x)*x)*x; |
101 | |
102 | return 0.0; |
103 | } |
104 | }; |
105 | |
106 | #endif /* OPENFPM_NUMERICS_SRC_INTERPOLATION_Z_SPLINE_HPP_ */ |
107 | |