20 #include "base_spectral.hpp"
21 #include "headcpp.hpp"
24 int div_sin_1d_pasprevu (Array<double>&) {
25 cout <<
"div_sin_1d not implemented." << endl ;
29 int div_sin_1d_cos (Array<double>& tab) {
30 assert (tab.get_ndim()==1) ;
32 int nr = tab.get_size(0) ;
34 Array<double> res (nr) ;
38 for (
int k=nr-2; k>=0; k-=2) {
40 res.set(k-1) = somme ;
43 for (
int k=nr-3; k>=0; k-=2) {
45 res.set(k+1) = somme ;
53 int div_sin_1d_sin (Array<double>& tab) {
54 assert (tab.get_ndim()==1) ;
55 int nr = tab.get_size(0) ;
57 Array<double> res (nr) ;
61 for (
int k=nr-2; k>=0; k-=2) {
63 res.set(k-1) = somme ;
66 for (
int k=nr-3; k>=0; k-=2) {
68 res.set(k+1) = somme ;
76 int div_sin_1d_cos_even (Array<double>& tab) {
77 assert (tab.get_ndim()==1) ;
78 int nr = tab.get_size(0) ;
80 Array<double> res (nr) ;
84 for (
int k=nr-2; k>=0; k--) {
92 int div_sin_1d_cos_odd (Array<double>& tab) {
93 assert (tab.get_ndim()==1) ;
94 int nr = tab.get_size(0) ;
96 Array<double> res (nr) ;
100 for (
int k=nr-2; k>=0; k--) {
110 int div_sin_1d_sin_even (Array<double>& tab) {
111 assert (tab.get_ndim()==1) ;
112 int nr = tab.get_size(0) ;
114 Array<double> res (nr) ;
118 for (
int k=nr-2; k>=0; k--) {
119 somme += 2*tab(k+1) ;
127 int div_sin_1d_sin_odd (Array<double>& tab) {
128 assert (tab.get_ndim()==1) ;
129 int nr = tab.get_size(0) ;
131 Array<double> res (nr) ;
135 for (
int k=nr-2; k>=0; k--) {
145 int div_sin_1d (
int base, Array<double>& tab) {
146 static int (*div_sin_1d[NBR_MAX_BASE])(Array<double>&) ;
147 static bool premier_appel = true ;
151 premier_appel = false ;
153 for (
int i=0; i<NBR_MAX_BASE; i++)
154 div_sin_1d[i] = div_sin_1d_pasprevu ;
156 div_sin_1d[COS_EVEN] = div_sin_1d_cos_even ;
157 div_sin_1d[COS_ODD] = div_sin_1d_cos_odd ;
158 div_sin_1d[SIN_EVEN] = div_sin_1d_sin_even ;
159 div_sin_1d[SIN_ODD] = div_sin_1d_sin_odd ;
160 div_sin_1d[COS] = div_sin_1d_cos ;
161 div_sin_1d[SIN] = div_sin_1d_sin ;
164 return div_sin_1d[base](tab) ;