56 #include "type_parite.h" 80 Matrice _ope_ptens_rr_mat_pas_prevu(
int,
int,
double,
int) ;
81 Matrice _ope_ptens_rr_mat_r_chebp(
int,
int,
double,
int) ;
82 Matrice _ope_ptens_rr_mat_r_chebi(
int,
int,
double,
int) ;
83 Matrice _ope_ptens_rr_mat_r_chebu(
int,
int,
double,
int) ;
84 Matrice _ope_ptens_rr_mat_r_cheb(
int,
int,
double,
int) ;
90 Matrice _ope_ptens_rr_mat_pas_prevu(
int n,
int l,
double echelle,
int puis) {
91 cout <<
"laplacien tens_rr pas prevu..." << endl ;
92 cout <<
"n : " << n << endl ;
93 cout <<
"l : " << l << endl ;
94 cout <<
"puissance : " << puis << endl ;
95 cout <<
"echelle : " << echelle << endl ;
108 Matrice _ope_ptens_rr_mat_r_chebp (
int n,
int l,
double,
int) {
110 const int nmax = 100 ;
111 static Matrice* tab[nmax] ;
112 static int nb_dejafait = 0 ;
113 static int l_dejafait[nmax] ;
114 static int nr_dejafait[nmax] ;
119 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
120 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
125 if (nb_dejafait >= nmax) {
126 cout <<
"_ope_ptens_rr_mat_r_chebp : trop de matrices" << endl ;
132 l_dejafait[nb_dejafait] = l ;
133 nr_dejafait[nb_dejafait] = n ;
142 double* vect =
new double[n] ;
144 for (
int i=0 ; i<n ; i++) {
145 for (
int j=0 ; j<n ; j++)
148 d2sdx2_1d (n, &vect,
R_CHEBP) ;
150 for (
int j=0 ; j<n ; j++)
151 dd.set(j, i) = vect[j] ;
154 for (
int i=0 ; i<n ; i++) {
155 for (
int j=0 ; j<n ; j++)
158 sxdsdx_1d (n, &vect,
R_CHEBP) ;
159 for (
int j=0 ; j<n ; j++)
160 xd.set(j, i) = vect[j] ;
164 for (
int i=0 ; i<n ; i++) {
165 for (
int j=0 ; j<n ; j++)
169 for (
int j=0 ; j<n ; j++)
170 xx.set(j, i) = vect[j] ;
176 res = dd+6*xd+(6-l*(l+1))*xx ;
177 tab[nb_dejafait] =
new Matrice(res) ;
184 return *tab[indice] ;
194 Matrice _ope_ptens_rr_mat_r_chebi (
int n,
int l,
double,
int) {
196 const int nmax = 100 ;
197 static Matrice* tab[nmax] ;
198 static int nb_dejafait = 0 ;
199 static int l_dejafait[nmax] ;
200 static int nr_dejafait[nmax] ;
205 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
206 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
211 if (nb_dejafait >= nmax) {
212 cout <<
"_ope_ptens_rr_mat_r_chebi : trop de matrices" << endl ;
218 l_dejafait[nb_dejafait] = l ;
219 nr_dejafait[nb_dejafait] = n ;
228 double* vect =
new double[n] ;
230 for (
int i=0 ; i<n ; i++) {
231 for (
int j=0 ; j<n ; j++)
234 d2sdx2_1d (n, &vect,
R_CHEBI) ;
235 for (
int j=0 ; j<n ; j++)
236 dd.set(j, i) = vect[j] ;
239 for (
int i=0 ; i<n ; i++) {
240 for (
int j=0 ; j<n ; j++)
243 sxdsdx_1d (n, &vect,
R_CHEBI) ;
244 for (
int j=0 ; j<n ; j++)
245 xd.set(j, i) = vect[j] ;
248 for (
int i=0 ; i<n ; i++) {
249 for (
int j=0 ; j<n ; j++)
253 for (
int j=0 ; j<n ; j++)
254 xx.set(j, i) = vect[j] ;
260 res = dd+6*xd+(6-l*(l+1))*xx ;
261 tab[nb_dejafait] =
new Matrice(res) ;
268 return *tab[indice] ;
278 Matrice _ope_ptens_rr_mat_r_chebu(
int n,
int l,
double,
int puis) {
281 cout <<
"_ope_ptens_rr_mat_r_chebu : only the case dzpuis = 4 " 282 <<
'\n' <<
"is implemented! \n" 283 <<
"dzpuis = " << puis << endl ;
287 const int nmax = 200 ;
288 static Matrice* tab[nmax] ;
289 static int nb_dejafait = 0 ;
290 static int l_dejafait[nmax] ;
291 static int nr_dejafait[nmax] ;
296 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
297 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
302 if (nb_dejafait >= nmax) {
303 cout <<
"_ope_ptens_rr_mat_r_chebu : trop de matrices" << endl ;
308 l_dejafait[nb_dejafait] = l ;
309 nr_dejafait[nb_dejafait] = n ;
318 double* vect =
new double[n] ;
320 for (
int i=0 ; i<n ; i++) {
321 for (
int j=0 ; j<n ; j++)
324 d2sdx2_1d (n, &vect,
R_CHEBU) ;
325 for (
int j=0 ; j<n ; j++)
326 dd.set(j, i) = vect[j] ;
329 for (
int i=0 ; i<n ; i++) {
330 for (
int j=0 ; j<n ; j++)
334 sxm1_1d_cheb (n, vect) ;
335 for (
int j=0 ; j<n ; j++)
336 xd.set(j, i) = vect[j] ;
339 for (
int i=0 ; i<n ; i++) {
340 for (
int j=0 ; j<n ; j++)
344 for (
int j=0 ; j<n ; j++)
345 xx.set(j, i) = vect[j] ;
351 res = dd - 4*xd + (6 -l*(l+1))*xx ;
352 tab[nb_dejafait] =
new Matrice(res) ;
359 return *tab[indice] ;
368 Matrice _ope_ptens_rr_mat_r_cheb (
int n,
int l,
double echelle,
int) {
370 const int nmax = 200 ;
371 static Matrice* tab[nmax] ;
372 static int nb_dejafait = 0 ;
373 static int l_dejafait[nmax] ;
374 static int nr_dejafait[nmax] ;
375 static double vieux_echelle = 0;
378 if (vieux_echelle != echelle) {
379 for (
int i=0 ; i<nb_dejafait ; i++) {
381 nr_dejafait[i] = -1 ;
386 vieux_echelle = echelle ;
392 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
393 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
398 if (nb_dejafait >= nmax) {
399 cout <<
"_ope_ptens_rr_mat_r_cheb : trop de matrices" << endl ;
405 l_dejafait[nb_dejafait] = l ;
406 nr_dejafait[nb_dejafait] = n ;
415 double* vect =
new double[n] ;
417 for (
int i=0 ; i<n ; i++) {
418 for (
int j=0 ; j<n ; j++)
421 d2sdx2_1d (n, &vect,
R_CHEB) ;
422 for (
int j=0 ; j<n ; j++)
423 dd.set(j, i) = vect[j]*echelle*echelle ;
426 for (
int i=0 ; i<n ; i++) {
427 for (
int j=0 ; j<n ; j++)
430 d2sdx2_1d (n, &vect,
R_CHEB) ;
431 multx_1d (n, &vect,
R_CHEB) ;
432 for (
int j=0 ; j<(n>i+1 ? i+1 : n) ; j++)
433 dd.set(j, i) += 2*echelle*vect[j] ;
436 for (
int i=0 ; i<n ; i++) {
437 for (
int j=0 ; j<n ; j++)
440 d2sdx2_1d (n, &vect,
R_CHEB) ;
441 multx_1d (n, &vect,
R_CHEB) ;
442 multx_1d (n, &vect,
R_CHEB) ;
443 for (
int j=0 ; j<(n>i+1 ? i+1 : n) ; j++)
444 dd.set(j, i) += vect[j] ;
447 for (
int i=0 ; i<n ; i++) {
448 for (
int j=0 ; j<n ; j++)
451 sxdsdx_1d (n, &vect,
R_CHEB) ;
452 for (
int j=0 ; j<n ; j++)
453 xd.set(j, i) = vect[j]*echelle ;
456 for (
int i=0 ; i<n ; i++) {
457 for (
int j=0 ; j<n ; j++)
460 sxdsdx_1d (n, &vect,
R_CHEB) ;
461 multx_1d (n, &vect,
R_CHEB) ;
462 for (
int j=0 ; j<(n>i+1 ? i+1 : n) ; j++)
463 xd.set(j, i) += vect[j] ;
466 for (
int i=0 ; i<n ; i++) {
467 for (
int j=0 ; j<n ; j++)
470 sx2_1d (n, &vect,
R_CHEB) ;
471 for (
int j=0 ; j<n ; j++)
472 xx.set(j, i) = vect[j] ;
478 res = dd + 6*xd + (6 - l*(l+1))*xx ;
479 tab[nb_dejafait] =
new Matrice(res) ;
486 return *tab[indice] ;
494 Matrice ope_ptens_rr_mat(
int n,
int l,
double echelle,
int puis,
int base_r)
498 static Matrice (*ope_ptens_rr_mat[
MAX_BASE])(int, int, double, int) ;
505 ope_ptens_rr_mat[i] = _ope_ptens_rr_mat_pas_prevu ;
508 ope_ptens_rr_mat[
R_CHEB >>
TRA_R] = _ope_ptens_rr_mat_r_cheb ;
509 ope_ptens_rr_mat[
R_CHEBU >>
TRA_R] = _ope_ptens_rr_mat_r_chebu ;
510 ope_ptens_rr_mat[
R_CHEBP >>
TRA_R] = _ope_ptens_rr_mat_r_chebp ;
511 ope_ptens_rr_mat[
R_CHEBI >>
TRA_R] = _ope_ptens_rr_mat_r_chebi ;
514 Matrice res(ope_ptens_rr_mat[base_r](n, 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
#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)