154 Matrice _laplacien_mat_pas_prevu(
int n,
int l,
double echelle,
int puis) {
155 cout <<
"laplacien pas prevu..." << endl ;
156 cout <<
"n : " << n << endl ;
157 cout <<
"l : " << l << endl ;
158 cout <<
"puissance : " << puis << endl ;
159 cout <<
"echelle : " << echelle << endl ;
172 Matrice _laplacien_mat_r_jaco02 (
int n,
int l,
double,
int) {
174 const int nmax = 200 ;
175 static Matrice* tab[nmax] ;
176 static int nb_dejafait = 0 ;
177 static int l_dejafait[nmax] ;
178 static int nr_dejafait[nmax] ;
183 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
184 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
189 if (nb_dejafait >= nmax) {
190 cout <<
"_laplacien_mat_r_jaco02 : trop de matrices" << endl ;
196 l_dejafait[nb_dejafait] = l ;
197 nr_dejafait[nb_dejafait] = n ;
203 tab[nb_dejafait] =
new Matrice(d2 + 2.*sxd -(l*(l+1))*sx2) ;
205 indice = nb_dejafait ;
209 return *tab[indice] ;
218 Matrice _laplacien_mat_r_chebp (
int n,
int l,
double,
int) {
220 const int nmax = 200 ;
221 static Matrice* tab[nmax] ;
222 static int nb_dejafait = 0 ;
223 static int l_dejafait[nmax] ;
224 static int nr_dejafait[nmax] ;
229 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
230 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
235 if (nb_dejafait >= nmax) {
236 cout <<
"_laplacien_mat_r_chebp : trop de matrices" << endl ;
242 l_dejafait[nb_dejafait] = l ;
243 nr_dejafait[nb_dejafait] = n ;
249 tab[nb_dejafait] =
new Matrice(d2 + 2.*sxd -(l*(l+1))*sx2) ;
251 indice = nb_dejafait ;
255 return *tab[indice] ;
265 Matrice _laplacien_mat_r_chebi (
int n,
int l,
double,
int) {
267 const int nmax = 200 ;
268 static Matrice* tab[nmax] ;
269 static int nb_dejafait = 0 ;
270 static int l_dejafait[nmax] ;
271 static int nr_dejafait[nmax] ;
276 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
277 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
282 if (nb_dejafait >= nmax) {
283 cout <<
"_laplacien_mat_r_chebi : trop de matrices" << endl ;
289 l_dejafait[nb_dejafait] = l ;
290 nr_dejafait[nb_dejafait] = n ;
296 tab[nb_dejafait] =
new Matrice(d2 + 2.*sxd - (l*(l+1))*sx2) ;
297 indice = nb_dejafait ;
301 return *tab[indice] ;
311 Matrice _laplacien_mat_r_chebu(
int n,
int l,
double,
int puis) {
316 res = _laplacien_mat_r_chebu_quatre (n, l) ;
319 res = _laplacien_mat_r_chebu_trois (n, l) ;
322 res = _laplacien_mat_r_chebu_deux (n, l) ;
325 res = _laplacien_mat_r_chebu_cinq (n, l) ;
335 Matrice _laplacien_mat_r_chebu_quatre (
int n,
int l) {
337 const int nmax = 200 ;
338 static Matrice* tab[nmax] ;
339 static int nb_dejafait = 0 ;
340 static int l_dejafait[nmax] ;
341 static int nr_dejafait[nmax] ;
346 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
347 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
352 if (nb_dejafait >= nmax) {
353 cout <<
"_laplacien_mat_r_chebu_quatre : trop de matrices" << endl ;
359 l_dejafait[nb_dejafait] = l ;
360 nr_dejafait[nb_dejafait] = n ;
365 tab[nb_dejafait] =
new Matrice(dd-(l*(l+1))*xx) ;
366 indice = nb_dejafait ;
370 return *tab[indice] ;
374 Matrice _laplacien_mat_r_chebu_trois (
int n,
int l) {
376 const int nmax = 200 ;
377 static Matrice* tab[nmax] ;
378 static int nb_dejafait = 0 ;
379 static int l_dejafait[nmax] ;
380 static int nr_dejafait[nmax] ;
385 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
386 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
391 if (nb_dejafait >= nmax) {
392 cout <<
"_laplacien_mat_r_chebu_trois : trop de matrices" << endl ;
398 l_dejafait[nb_dejafait] = l ;
399 nr_dejafait[nb_dejafait] = n ;
404 tab[nb_dejafait] =
new Matrice(xd2 -(l*(l+1))*sx) ;
406 indice = nb_dejafait ;
410 return *tab[indice] ;
415 Matrice _laplacien_mat_r_chebu_deux (
int n,
int l) {
417 const int nmax = 200 ;
418 static Matrice* tab[nmax] ;
419 static int nb_dejafait = 0 ;
420 static int l_dejafait[nmax] ;
421 static int nr_dejafait[nmax] ;
426 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
427 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
432 if (nb_dejafait >= nmax) {
433 cout <<
"_laplacien_mat_r_chebu_deux : trop de matrices" << endl ;
439 l_dejafait[nb_dejafait] = l ;
440 nr_dejafait[nb_dejafait] = n ;
442 Diff_x2dsdx2 x2dd(
R_CHEBU, n) ;
445 tab[nb_dejafait] =
new Matrice(x2dd - (l*(l+1))*
id) ;
447 indice = nb_dejafait ;
451 return *tab[indice] ;
455 Matrice _laplacien_mat_r_chebu_cinq (
int n,
int l) {
457 const int nmax = 200 ;
458 static Matrice* tab[nmax] ;
459 static int nb_dejafait = 0 ;
460 static int l_dejafait[nmax] ;
461 static int nr_dejafait[nmax] ;
466 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
467 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
472 if (nb_dejafait >= nmax) {
473 cout <<
"_laplacien_mat_r_chebu_cinq : trop de matrices" << endl ;
479 l_dejafait[nb_dejafait] = l ;
480 nr_dejafait[nb_dejafait] = n ;
482 Diff_x2dsdx2 x2dd(
R_CHEBU, n) ;
486 tab[nb_dejafait] =
new Matrice( x2dd + 6.*xd1 + (6-l*(l+1))*
id ) ;
488 indice = nb_dejafait ;
492 return *tab[indice] ;
500 Matrice _laplacien_mat_r_cheb (
int n,
int l,
double echelle,
int) {
502 const int nmax = 200 ;
503 static Matrice* tab[nmax] ;
504 static int nb_dejafait = 0 ;
505 static int l_dejafait[nmax] ;
506 static int nr_dejafait[nmax] ;
507 static double vieux_echelle = 0;
510 if (vieux_echelle != echelle) {
511 for (
int i=0 ; i<nb_dejafait ; i++) {
513 nr_dejafait[i] = -1 ;
518 vieux_echelle = echelle ;
524 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
525 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
530 if (nb_dejafait >= nmax) {
531 cout <<
"_laplacien_mat_r_cheb : trop de matrices" << endl ;
537 l_dejafait[nb_dejafait] = l ;
538 nr_dejafait[nb_dejafait] = n ;
540 Diff_dsdx2 d2(
R_CHEB, n) ;
541 Diff_xdsdx2 xd2(
R_CHEB, n) ;
542 Diff_x2dsdx2 x2d2(
R_CHEB, n) ;
544 Diff_xdsdx xd1(
R_CHEB, n) ;
548 new Matrice(x2d2 + (2*echelle)*xd2 + (echelle*echelle)*d2
549 + 2*xd1 + (2*echelle)*d1 - (l*(l+1))*
id) ;
550 indice = nb_dejafait ;
554 return *tab[indice] ;
561 Matrice laplacien_mat(
int n,
int l,
double echelle,
int puis,
int base_r)
565 static Matrice (*laplacien_mat[
MAX_BASE])(int, int, double, int) ;
572 laplacien_mat[i] = _laplacien_mat_pas_prevu ;
575 laplacien_mat[
R_CHEB >>
TRA_R] = _laplacien_mat_r_cheb ;
576 laplacien_mat[
R_CHEBU >>
TRA_R] = _laplacien_mat_r_chebu ;
577 laplacien_mat[
R_CHEBP >>
TRA_R] = _laplacien_mat_r_chebp ;
578 laplacien_mat[
R_CHEBI >>
TRA_R] = _laplacien_mat_r_chebi ;
582 return laplacien_mat[base_r](n, l, echelle, puis) ;
#define R_JACO02
base de Jacobi(0,2) ordinaire (finjac)
#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
#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)