From 03c08dac33f18d884a591f56df7a54cb24cffc61 Mon Sep 17 00:00:00 2001 From: Cristian C Lalescu <Cristian.Lalescu@ds.mpg.de> Date: Tue, 14 Jan 2020 10:37:33 +0100 Subject: [PATCH] add more interpolation specializations --- cpp/particles/particles_generic_interp.hpp | 268 ++++++++++++++++----- 1 file changed, 214 insertions(+), 54 deletions(-) diff --git a/cpp/particles/particles_generic_interp.hpp b/cpp/particles/particles_generic_interp.hpp index da48641c..01f90569 100644 --- a/cpp/particles/particles_generic_interp.hpp +++ b/cpp/particles/particles_generic_interp.hpp @@ -32,6 +32,9 @@ class particles_generic_interp; #include "Lagrange_polys.hpp" #include "spline.hpp" +/*****************************************************************************/ +/* Lagrange interpolation */ + template <> class particles_generic_interp<double, 1,0>{ public: @@ -43,122 +46,137 @@ public: }; template <> -class particles_generic_interp<double, 1,1>{ +class particles_generic_interp<double, 2,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n1_m1(in_derivative, in_part_val, poly_val); + beta_Lagrange_n2(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 1,2>{ +class particles_generic_interp<double, 3,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n1_m2(in_derivative, in_part_val, poly_val); + beta_Lagrange_n3(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 2,0>{ +class particles_generic_interp<double, 4,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n2(in_derivative, in_part_val, poly_val); + beta_Lagrange_n4(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 2,1>{ +class particles_generic_interp<double, 5,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n2_m1(in_derivative, in_part_val, poly_val); + beta_Lagrange_n5(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 2,2>{ +class particles_generic_interp<double, 6,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n2_m2(in_derivative, in_part_val, poly_val); + beta_Lagrange_n6(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 3,0>{ +class particles_generic_interp<double, 7,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n3(in_derivative, in_part_val, poly_val); + beta_Lagrange_n7(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 3,1>{ +class particles_generic_interp<double, 8,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n3_m1(in_derivative, in_part_val, poly_val); + beta_Lagrange_n8(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 3,2>{ +class particles_generic_interp<double, 9,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n3_m2(in_derivative, in_part_val, poly_val); + beta_Lagrange_n9(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 4,0>{ +class particles_generic_interp<double, 10,0>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n4(in_derivative, in_part_val, poly_val); + beta_Lagrange_n10(in_derivative, in_part_val, poly_val); } }; +/*****************************************************************************/ + +/*****************************************************************************/ +/* spline C1 */ + template <> -class particles_generic_interp<double, 4,1>{ +class particles_generic_interp<double, 1,1>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n4_m1(in_derivative, in_part_val, poly_val); + beta_n1_m1(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 4,2>{ +class particles_generic_interp<double, 2,1>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n4_m2(in_derivative, in_part_val, poly_val); + beta_n2_m1(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 5,0>{ +class particles_generic_interp<double, 3,1>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n5(in_derivative, in_part_val, poly_val); + beta_n3_m1(in_derivative, in_part_val, poly_val); + } +}; + +template <> +class particles_generic_interp<double, 4,1>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n4_m1(in_derivative, in_part_val, poly_val); } }; @@ -173,95 +191,127 @@ public: }; template <> -class particles_generic_interp<double, 5,2>{ +class particles_generic_interp<double, 6,1>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n5_m2(in_derivative, in_part_val, poly_val); + beta_n6_m1(in_derivative, in_part_val, poly_val); } }; +template <> +class particles_generic_interp<double, 7,1>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n7_m1(in_derivative, in_part_val, poly_val); + } +}; template <> -class particles_generic_interp<double, 6,0>{ +class particles_generic_interp<double, 8,1>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n6(in_derivative, in_part_val, poly_val); + beta_n8_m1(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 6,1>{ +class particles_generic_interp<double, 9,1>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n6_m1(in_derivative, in_part_val, poly_val); + beta_n9_m1(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 6,2>{ +class particles_generic_interp<double, 10,1>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n6_m2(in_derivative, in_part_val, poly_val); + beta_n10_m1(in_derivative, in_part_val, poly_val); } }; +/*****************************************************************************/ + +/*****************************************************************************/ +/* spline C2 */ template <> -class particles_generic_interp<double, 7,0>{ +class particles_generic_interp<double, 1,2>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n7(in_derivative, in_part_val, poly_val); + beta_n1_m2(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 7,1>{ +class particles_generic_interp<double, 2,2>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n7_m1(in_derivative, in_part_val, poly_val); + beta_n2_m2(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 7,2>{ +class particles_generic_interp<double, 3,2>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n7_m2(in_derivative, in_part_val, poly_val); + beta_n3_m2(in_derivative, in_part_val, poly_val); } }; +template <> +class particles_generic_interp<double, 4,2>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n4_m2(in_derivative, in_part_val, poly_val); + } +}; template <> -class particles_generic_interp<double, 8,0>{ +class particles_generic_interp<double, 5,2>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n8(in_derivative, in_part_val, poly_val); + beta_n5_m2(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 8,1>{ +class particles_generic_interp<double, 6,2>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n8_m1(in_derivative, in_part_val, poly_val); + beta_n6_m2(in_derivative, in_part_val, poly_val); + } +}; + +template <> +class particles_generic_interp<double, 7,2>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n7_m2(in_derivative, in_part_val, poly_val); } }; @@ -275,67 +325,177 @@ public: } }; +template <> +class particles_generic_interp<double, 9,2>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n9_m2(in_derivative, in_part_val, poly_val); + } +}; template <> -class particles_generic_interp<double, 9, 0>{ +class particles_generic_interp<double, 10,2>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n9(in_derivative, in_part_val, poly_val); + beta_n10_m2(in_derivative, in_part_val, poly_val); } }; +/*****************************************************************************/ + +/*****************************************************************************/ +/* spline C3 */ + template <> -class particles_generic_interp<double, 9,1>{ +class particles_generic_interp<double, 3,3>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n9_m1(in_derivative, in_part_val, poly_val); + beta_n3_m3(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 9,2>{ +class particles_generic_interp<double, 4,3>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n9_m2(in_derivative, in_part_val, poly_val); + beta_n4_m3(in_derivative, in_part_val, poly_val); } }; +template <> +class particles_generic_interp<double, 5,3>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n5_m3(in_derivative, in_part_val, poly_val); + } +}; template <> -class particles_generic_interp<double, 10,0>{ +class particles_generic_interp<double, 6,3>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_Lagrange_n10(in_derivative, in_part_val, poly_val); + beta_n6_m3(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 10,1>{ +class particles_generic_interp<double, 7,3>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n10_m1(in_derivative, in_part_val, poly_val); + beta_n7_m3(in_derivative, in_part_val, poly_val); } }; template <> -class particles_generic_interp<double, 10,2>{ +class particles_generic_interp<double, 8,3>{ public: using real_number = double; void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { - beta_n10_m2(in_derivative, in_part_val, poly_val); + beta_n8_m3(in_derivative, in_part_val, poly_val); + } +}; + +template <> +class particles_generic_interp<double, 9,3>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n9_m3(in_derivative, in_part_val, poly_val); } }; +template <> +class particles_generic_interp<double, 10,3>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n10_m3(in_derivative, in_part_val, poly_val); + } +}; + +/*****************************************************************************/ + +/*****************************************************************************/ +/* spline C4 */ + +template <> +class particles_generic_interp<double, 5,4>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n5_m4(in_derivative, in_part_val, poly_val); + } +}; + +template <> +class particles_generic_interp<double, 6,4>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n6_m4(in_derivative, in_part_val, poly_val); + } +}; + +template <> +class particles_generic_interp<double, 7,4>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n7_m4(in_derivative, in_part_val, poly_val); + } +}; + +template <> +class particles_generic_interp<double, 8,4>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n8_m4(in_derivative, in_part_val, poly_val); + } +}; + +template <> +class particles_generic_interp<double, 9,4>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n9_m4(in_derivative, in_part_val, poly_val); + } +}; + +template <> +class particles_generic_interp<double, 10,4>{ +public: + using real_number = double; + + void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const { + beta_n10_m4(in_derivative, in_part_val, poly_val); + } +}; + +/*****************************************************************************/ + #endif//PARTICLES_INTERP_SPLINE_HPP -- GitLab