20 #include "base_spectral.hpp"
21 #include "headcpp.hpp"
24 int div_cos_1d_pasprevu (Array<double>&) {
25 cout <<
"div_cos_1d not implemented." << endl ;
29 int div_cos_1d_cos_even (Array<double>& tab) {
30 assert (tab.get_ndim()==1) ;
31 int nr = tab.get_size(0) ;
33 Array<double> res (nr) ;
38 for (
int k=nr-2; k>=0; k--) {
39 somme -= 2*signe*tab(k+1) ;
41 res.set(k) = (k%2==0) ? somme : -somme;
47 int div_cos_1d_sin_odd (Array<double>& tab) {
48 assert (tab.get_ndim()==1) ;
49 int nr = tab.get_size(0) ;
51 Array<double> res (nr) ;
56 for (
int k=nr-2; k>0; k--) {
57 somme -= 2*signe*tab(k) ;
59 res.set(k) = (k%2==0) ? -somme : +somme ;
66 int div_cos_1d_cos_odd (Array<double>& tab) {
67 assert (tab.get_ndim()==1) ;
68 int nr = tab.get_size(0) ;
70 Array<double> res (nr) ;
75 for (
int k=nr-2; k>=0; k--) {
76 somme += 2*tab(k)*signe ;
77 res.set(k) = (k%2==0) ? somme : -somme;
85 int div_cos_1d_sin_even (Array<double>& tab) {
86 assert (tab.get_ndim()==1) ;
87 int nr = tab.get_size(0) ;
89 Array<double> res (nr) ;
94 for (
int k=nr-2; k>=0; k--) {
95 somme -= 2*tab(k+1)*signe ;
97 res.set(k) = (k%2==0) ? -somme : somme;
103 int div_cos_1d (
int base, Array<double>& tab) {
104 static int (*div_cos_1d[NBR_MAX_BASE])(Array<double>&) ;
105 static bool premier_appel = true ;
109 premier_appel = false ;
111 for (
int i=0; i<NBR_MAX_BASE; i++)
112 div_cos_1d[i] = div_cos_1d_pasprevu ;
114 div_cos_1d[COS_EVEN] = div_cos_1d_cos_even ;
115 div_cos_1d[SIN_ODD] = div_cos_1d_sin_odd ;
116 div_cos_1d[COS_ODD] = div_cos_1d_cos_odd ;
117 div_cos_1d[SIN_EVEN] = div_cos_1d_sin_even ;
120 return div_cos_1d[base](tab) ;