59 #include "type_parite.h" 77 Matrice _nondeg_pvect_r_pas_prevu(
const Matrice &,
int ,
double,
int) ;
78 Matrice _nondeg_pvect_r_cheb (
const Matrice&,
int,
double,
int) ;
79 Matrice _nondeg_pvect_r_chebp (
const Matrice&,
int,
double,
int) ;
80 Matrice _nondeg_pvect_r_chebi (
const Matrice&,
int,
double,
int) ;
81 Matrice _nondeg_pvect_r_chebu (
const Matrice&,
int,
double,
int) ;
88 Matrice _nondeg_pvect_r_pas_prevu(
const Matrice &lap,
int l,
double echelle,
int puis) {
89 cout <<
"Construction non degeneree pas prevue..." << endl ;
90 cout <<
"l : " << l << endl ;
91 cout <<
"lap : " << lap << endl ;
92 cout <<
"echelle : " << echelle << endl ;
93 cout <<
" puis : " << puis << endl ;
106 Matrice _nondeg_pvect_r_cheb (
const Matrice &lap,
int l,
double echelle,
int) {
111 const int nmax = 200 ;
112 static Matrice* tab[nmax] ;
113 static int nb_dejafait = 0 ;
114 static int l_dejafait[nmax] ;
115 static int nr_dejafait[nmax] ;
116 static double vieux_echelle = 0;
119 if (vieux_echelle != echelle) {
120 for (
int i=0 ; i<nb_dejafait ; i++) {
122 nr_dejafait[i] = -1 ;
125 vieux_echelle = echelle ;
132 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
133 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
138 if (nb_dejafait >= nmax) {
139 cout <<
"_nondeg_pvect_r_cheb : trop de matrices" << endl ;
145 l_dejafait[nb_dejafait] = l ;
146 nr_dejafait[nb_dejafait] = n ;
151 Matrice res(n-2, n-2) ;
153 for (
int i=0 ; i<n-2 ; i++)
154 for (
int j=0 ; j<n-2 ; j++)
155 res.set(i, j) = lap(i, j+2) ;
159 tab[nb_dejafait] =
new Matrice(res) ;
166 return *tab[indice] ;
176 Matrice _nondeg_pvect_r_chebp (
const Matrice &lap,
int l,
double,
int) {
181 const int nmax = 200 ;
182 static Matrice* tab[nmax] ;
183 static int nb_dejafait = 0 ;
184 static int l_dejafait[nmax] ;
185 static int nr_dejafait[nmax] ;
190 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
191 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
196 if (nb_dejafait >= nmax) {
197 cout <<
"_nondeg_pvect_r_chebp : trop de matrices" << endl ;
203 l_dejafait[nb_dejafait] = l ;
204 nr_dejafait[nb_dejafait] = n ;
206 assert (div(l, 2).rem == 1) ;
209 Matrice res(n-1, n-1) ;
211 for (
int i=0 ; i<n-1 ; i++)
212 for (
int j=0 ; j<n-1 ; j++)
213 res.set(i, j) = lap(i, j+1) ;
216 tab[nb_dejafait] =
new Matrice(res) ;
221 Matrice res(n-2, n-2) ;
223 for (
int i=0 ;i<n-2 ; i++)
224 for (
int j=0 ; j<n-2 ; j++)
225 res.set(i, j) = lap(i, j+2) ;
229 tab[nb_dejafait] =
new Matrice(res) ;
236 return *tab[indice] ;
246 Matrice _nondeg_pvect_r_chebi (
const Matrice &lap,
int l,
double,
int) {
250 const int nmax = 200 ;
251 static Matrice* tab[nmax] ;
252 static int nb_dejafait = 0 ;
253 static int l_dejafait[nmax] ;
254 static int nr_dejafait[nmax] ;
259 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
260 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
265 if (nb_dejafait >= nmax) {
266 cout <<
"_nondeg_pvect_r_chebi : trop de matrices" << endl ;
272 l_dejafait[nb_dejafait] = l ;
273 nr_dejafait[nb_dejafait] = n ;
276 assert (div(l, 2).rem == 0) ;
280 Matrice res(n-1, n-1) ;
282 for (
int i=0 ; i<n-1 ; i++)
283 for (
int j=0 ; j<n-1 ; j++)
284 res.set(i, j) = lap(i, j+1) ;
287 tab[nb_dejafait] =
new Matrice(res) ;
292 Matrice res(n-2, n-2) ;
294 for (
int i=0 ;i<n-2 ; i++)
295 for (
int j=0 ; j<n-2 ; j++)
296 res.set(i, j) = lap(i, j+2) ;
300 tab[nb_dejafait] =
new Matrice(res) ;
307 return *tab[indice] ;
318 Matrice _nondeg_pvect_r_chebu (
const Matrice &lap,
int l,
double,
int puis) {
321 cout <<
"_ope_pvect_r_mat_r_chebu : only the case dzpuis = 4 " 322 <<
'\n' <<
"is implemented! \n" 323 <<
"dzpuis = " << puis << endl ;
326 int n = lap.get_dim(0) ;
328 const int nmax = 200;
329 static Matrice* tab[nmax] ;
330 static int nb_dejafait = 0 ;
331 static int l_dejafait[nmax] ;
332 static int nr_dejafait[nmax] ;
337 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
338 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
343 if (nb_dejafait >= nmax) {
344 cout <<
"_nondeg_pvect_r_chebu : trop de matrices" << endl ;
349 l_dejafait[nb_dejafait] = l ;
350 nr_dejafait[nb_dejafait] = n ;
352 Matrice res(n-3, n-3) ;
354 for (
int i=0 ;i<n-3 ; i++)
355 for (
int j=0 ; j<n-3 ; j++)
356 res.set(i, j) = lap(i, j+3) ;
360 tab[nb_dejafait] =
new Matrice(res) ;
367 return *tab[indice] ;
376 Matrice nondeg_pvect_r(
const Matrice &lap,
int l,
double echelle,
int puis,
int base_r)
380 static Matrice (*nondeg_pvect_r[
MAX_BASE])(
const Matrice&, int, double, int) ;
387 nondeg_pvect_r[i] = _nondeg_pvect_r_pas_prevu ;
390 nondeg_pvect_r[
R_CHEB >>
TRA_R] = _nondeg_pvect_r_cheb ;
391 nondeg_pvect_r[
R_CHEBU >>
TRA_R] = _nondeg_pvect_r_chebu ;
392 nondeg_pvect_r[
R_CHEBP >>
TRA_R] = _nondeg_pvect_r_chebp ;
393 nondeg_pvect_r[
R_CHEBI >>
TRA_R] = _nondeg_pvect_r_chebi ;
396 Matrice res(nondeg_pvect_r[base_r](lap, l, echelle, puis)) ;
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
#define R_CHEBI
base de Cheb. impaire (rare) seulement
#define R_CHEBP
base de Cheb. paire (rare) seulement
int get_dim(int i) const
Returns the dimension of the matrix.
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
#define MAX_BASE
Nombre max. de bases differentes.
#define R_CHEB
base de Chebychev ordinaire (fin)