20 #include "base_spectral.hpp"
21 #include "headcpp.hpp"
22 #include "matrice.hpp"
26 int mult_xm1_1d_pasprevu (Array<double>&) {
27 cout <<
"mult_xm1_1d not implemented." << endl ;
32 int mult_xm1_1d_cheb (Array<double>& so) {
33 assert (so.get_ndim()==1) ;
34 int nr = so.get_size(0) ;
35 Array<double> res (nr) ;
37 res.set(0) = -so(0) + 0.5*so(1) ;
38 res.set(1) = so(0) - so(1) + 0.5*so(2) ;
39 for (
int i=2 ; i<nr-1 ; i++)
40 res.set(i) = 0.5*so(i-1) - so(i) + 0.5*so(i+1) ;
41 res.set(nr-1) = 0.5*so(nr-2) - so(nr-1) ;
47 int mult_xm1_1d_leg (Array<double>& so) {
48 assert (so.get_ndim()==1) ;
49 int nr = so.get_size(0) ;
50 Array<double> res (nr) ;
52 res.set(0) = -so(0) + so(1)/3. ;
53 for (
int i=1 ; i<nr-1 ; i++)
54 res.set(i) = double(i)/double(2*i-1)*so(i-1) - so(i) + double(i+1)/double(2*i+3)*so(i+1) ;
55 res.set(nr-1) = double(nr-1)/double(2*nr-3)*so(nr-2) - so(nr-1) ;
61 int mult_xm1_1d (
int base, Array<double>& so) {
62 static int (*mult_xm1_1d[NBR_MAX_BASE])(Array<double>&) ;
63 static bool premier_appel = true ;
67 premier_appel = false ;
69 for (
int i=0; i<NBR_MAX_BASE; i++)
70 mult_xm1_1d[i] = mult_xm1_1d_pasprevu ;
72 mult_xm1_1d[CHEB] = mult_xm1_1d_cheb ;
73 mult_xm1_1d[LEG] = mult_xm1_1d_leg ;;
76 return mult_xm1_1d[base](so) ;