20 #include "base_spectral.hpp"
21 #include "headcpp.hpp"
25 int mult_cos_1d_pasprevu (Array<double>&) {
26 cout <<
"mult_cos_1d not implemented." << endl ;
30 int mult_cos_1d_cossin (Array<double>& tab) {
31 assert (tab.get_ndim()==1) ;
32 int nr = tab.get_size(0) ;
34 Array<double> res (nr) ;
36 res.set(0) = 0.5*tab(2) ;
38 res.set(2) = tab(0) + 0.5*tab(4) ;
39 res.set(3) = 0.5*tab(5) ;
40 for (
int k=4; k<nr-2; k++)
41 res.set(k) = 0.5*(tab(2+k) + tab(k-2)) ;
43 res.set(nr-2) = 0.5*tab(nr-4) ;
50 int mult_cos_1d_cos (Array<double>& tab) {
51 assert (tab.get_ndim()==1) ;
52 int nr = tab.get_size(0) ;
54 Array<double> res (nr) ;
56 res.set(0) = 0.5*tab(1) ;
57 res.set(1) = tab(0) + 0.5*tab(2);
58 for (
int k=2; k<nr-1; k++)
60 res.set(k) = 0.5*(tab(k-1) + tab(k+1)) ;
68 int mult_cos_1d_sin (Array<double>& tab) {
69 assert (tab.get_ndim()==1) ;
70 int nr = tab.get_size(0) ;
72 Array<double> res (nr) ;
75 res.set(1) = 0.5*tab(2) ;
76 for (
int k=2; k<nr-1; k++)
78 res.set(k) = 0.5*(tab(k-1) + tab(k+1)) ;
86 int mult_cos_1d_cos_even (Array<double>& tab) {
87 assert (tab.get_ndim()==1) ;
88 int nr = tab.get_size(0) ;
90 Array<double> res (nr) ;
92 res.set(0) = tab(0) + 0.5*tab(1);
93 for (
int k=1; k<nr-1; k++)
95 res.set(k) = 0.5*(tab(k) + tab(k+1)) ;
103 int mult_cos_1d_cos_odd (Array<double>& tab) {
104 assert (tab.get_ndim()==1) ;
105 int nr = tab.get_size(0) ;
107 Array<double> res (nr) ;
109 res.set(0) = 0.5*tab(0) ;
110 for (
int k=1; k<nr; k++)
112 res.set(k) = 0.5*(tab(k-1) + tab(k)) ;
118 int mult_cos_1d_sin_even (Array<double>& tab) {
119 assert (tab.get_ndim()==1) ;
120 int nr = tab.get_size(0) ;
122 Array<double> res (nr) ;
124 res.set(0) = 0.5*tab(1) ;
125 for (
int k=1; k<nr-1; k++)
127 res.set(k) = 0.5*(tab(k) + tab(k+1)) ;
134 int mult_cos_1d_sin_odd (Array<double>& tab) {
135 assert (tab.get_ndim()==1) ;
136 int nr = tab.get_size(0) ;
138 Array<double> res (nr) ;
141 for (
int k=1; k<nr; k++)
143 res.set(k) = 0.5*(tab(k-1) + tab(k)) ;
149 int mult_cos_1d (
int base, Array<double>& tab) {
150 static int (*mult_cos_1d[NBR_MAX_BASE])(Array<double>&) ;
151 static bool premier_appel = true ;
155 premier_appel = false ;
157 for (
int i=0; i<NBR_MAX_BASE; i++)
158 mult_cos_1d[i] = mult_cos_1d_pasprevu ;
160 mult_cos_1d[COSSIN] = mult_cos_1d_cossin ;
161 mult_cos_1d[COS_EVEN] = mult_cos_1d_cos_even ;
162 mult_cos_1d[COS_ODD] = mult_cos_1d_cos_odd ;
163 mult_cos_1d[SIN_EVEN] = mult_cos_1d_sin_even ;
164 mult_cos_1d[SIN_ODD] = mult_cos_1d_sin_odd ;
165 mult_cos_1d[COS] = mult_cos_1d_cos ;
166 mult_cos_1d[SIN] = mult_cos_1d_sin ;
169 return mult_cos_1d[base](tab) ;