28char ope_ptens_rr_mat_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Ope_elementary/Ope_pois_vect_r/ope_ptens_rr_mat.C,v 1.3 2014/10/13 08:53:34 j_novak Exp $" ;
53#include "type_parite.h"
77Matrice _ope_ptens_rr_mat_pas_prevu(
int,
int,
double,
int) ;
78Matrice _ope_ptens_rr_mat_r_chebp(
int,
int,
double,
int) ;
79Matrice _ope_ptens_rr_mat_r_chebi(
int,
int,
double,
int) ;
80Matrice _ope_ptens_rr_mat_r_chebu(
int,
int,
double,
int) ;
81Matrice _ope_ptens_rr_mat_r_cheb(
int,
int,
double,
int) ;
87Matrice _ope_ptens_rr_mat_pas_prevu(
int n,
int l,
double echelle,
int puis) {
88 cout <<
"laplacien tens_rr pas prevu..." << endl ;
89 cout <<
"n : " << n << endl ;
90 cout <<
"l : " << l << endl ;
91 cout <<
"puissance : " << puis << endl ;
92 cout <<
"echelle : " << echelle << endl ;
105Matrice _ope_ptens_rr_mat_r_chebp (
int n,
int l,
double,
int) {
107 const int nmax = 100 ;
108 static Matrice* tab[nmax] ;
109 static int nb_dejafait = 0 ;
110 static int l_dejafait[nmax] ;
111 static int nr_dejafait[nmax] ;
116 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
117 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
122 if (nb_dejafait >= nmax) {
123 cout <<
"_ope_ptens_rr_mat_r_chebp : trop de matrices" << endl ;
129 l_dejafait[nb_dejafait] = l ;
130 nr_dejafait[nb_dejafait] = n ;
139 double* vect =
new double[n] ;
141 for (
int i=0 ; i<n ; i++) {
142 for (
int j=0 ; j<n ; j++)
145 d2sdx2_1d (n, &vect,
R_CHEBP) ;
147 for (
int j=0 ; j<n ; j++)
148 dd.set(j, i) = vect[j] ;
151 for (
int i=0 ; i<n ; i++) {
152 for (
int j=0 ; j<n ; j++)
155 sxdsdx_1d (n, &vect,
R_CHEBP) ;
156 for (
int j=0 ; j<n ; j++)
157 xd.set(j, i) = vect[j] ;
161 for (
int i=0 ; i<n ; i++) {
162 for (
int j=0 ; j<n ; j++)
166 for (
int j=0 ; j<n ; j++)
167 xx.set(j, i) = vect[j] ;
173 res = dd+6*xd+(6-l*(l+1))*xx ;
174 tab[nb_dejafait] =
new Matrice(res) ;
181 return *tab[indice] ;
191Matrice _ope_ptens_rr_mat_r_chebi (
int n,
int l,
double,
int) {
193 const int nmax = 100 ;
194 static Matrice* tab[nmax] ;
195 static int nb_dejafait = 0 ;
196 static int l_dejafait[nmax] ;
197 static int nr_dejafait[nmax] ;
202 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
203 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
208 if (nb_dejafait >= nmax) {
209 cout <<
"_ope_ptens_rr_mat_r_chebi : trop de matrices" << endl ;
215 l_dejafait[nb_dejafait] = l ;
216 nr_dejafait[nb_dejafait] = n ;
225 double* vect =
new double[n] ;
227 for (
int i=0 ; i<n ; i++) {
228 for (
int j=0 ; j<n ; j++)
231 d2sdx2_1d (n, &vect,
R_CHEBI) ;
232 for (
int j=0 ; j<n ; j++)
233 dd.set(j, i) = vect[j] ;
236 for (
int i=0 ; i<n ; i++) {
237 for (
int j=0 ; j<n ; j++)
240 sxdsdx_1d (n, &vect,
R_CHEBI) ;
241 for (
int j=0 ; j<n ; j++)
242 xd.set(j, i) = vect[j] ;
245 for (
int i=0 ; i<n ; i++) {
246 for (
int j=0 ; j<n ; j++)
250 for (
int j=0 ; j<n ; j++)
251 xx.set(j, i) = vect[j] ;
257 res = dd+6*xd+(6-l*(l+1))*xx ;
258 tab[nb_dejafait] =
new Matrice(res) ;
265 return *tab[indice] ;
275Matrice _ope_ptens_rr_mat_r_chebu(
int n,
int l,
double,
int puis) {
278 cout <<
"_ope_ptens_rr_mat_r_chebu : only the case dzpuis = 4 "
279 <<
'\n' <<
"is implemented! \n"
280 <<
"dzpuis = " << puis << endl ;
284 const int nmax = 200 ;
285 static Matrice* tab[nmax] ;
286 static int nb_dejafait = 0 ;
287 static int l_dejafait[nmax] ;
288 static int nr_dejafait[nmax] ;
293 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
294 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
299 if (nb_dejafait >= nmax) {
300 cout <<
"_ope_ptens_rr_mat_r_chebu : trop de matrices" << endl ;
305 l_dejafait[nb_dejafait] = l ;
306 nr_dejafait[nb_dejafait] = n ;
315 double* vect =
new double[n] ;
317 for (
int i=0 ; i<n ; i++) {
318 for (
int j=0 ; j<n ; j++)
321 d2sdx2_1d (n, &vect,
R_CHEBU) ;
322 for (
int j=0 ; j<n ; j++)
323 dd.set(j, i) = vect[j] ;
326 for (
int i=0 ; i<n ; i++) {
327 for (
int j=0 ; j<n ; j++)
331 sxm1_1d_cheb (n, vect) ;
332 for (
int j=0 ; j<n ; j++)
333 xd.set(j, i) = vect[j] ;
336 for (
int i=0 ; i<n ; i++) {
337 for (
int j=0 ; j<n ; j++)
341 for (
int j=0 ; j<n ; j++)
342 xx.set(j, i) = vect[j] ;
348 res = dd - 4*xd + (6 -l*(l+1))*xx ;
349 tab[nb_dejafait] =
new Matrice(res) ;
356 return *tab[indice] ;
365Matrice _ope_ptens_rr_mat_r_cheb (
int n,
int l,
double echelle,
int) {
367 const int nmax = 200 ;
368 static Matrice* tab[nmax] ;
369 static int nb_dejafait = 0 ;
370 static int l_dejafait[nmax] ;
371 static int nr_dejafait[nmax] ;
372 static double vieux_echelle = 0;
375 if (vieux_echelle != echelle) {
376 for (
int i=0 ; i<nb_dejafait ; i++) {
378 nr_dejafait[i] = -1 ;
383 vieux_echelle = echelle ;
389 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
390 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
395 if (nb_dejafait >= nmax) {
396 cout <<
"_ope_ptens_rr_mat_r_cheb : trop de matrices" << endl ;
402 l_dejafait[nb_dejafait] = l ;
403 nr_dejafait[nb_dejafait] = n ;
412 double* vect =
new double[n] ;
414 for (
int i=0 ; i<n ; i++) {
415 for (
int j=0 ; j<n ; j++)
418 d2sdx2_1d (n, &vect,
R_CHEB) ;
419 for (
int j=0 ; j<n ; j++)
420 dd.set(j, i) = vect[j]*echelle*echelle ;
423 for (
int i=0 ; i<n ; i++) {
424 for (
int j=0 ; j<n ; j++)
427 d2sdx2_1d (n, &vect,
R_CHEB) ;
428 multx_1d (n, &vect,
R_CHEB) ;
429 for (
int j=0 ; j<(n>i+1 ? i+1 : n) ; j++)
430 dd.set(j, i) += 2*echelle*vect[j] ;
433 for (
int i=0 ; i<n ; i++) {
434 for (
int j=0 ; j<n ; j++)
437 d2sdx2_1d (n, &vect,
R_CHEB) ;
438 multx_1d (n, &vect,
R_CHEB) ;
439 multx_1d (n, &vect,
R_CHEB) ;
440 for (
int j=0 ; j<(n>i+1 ? i+1 : n) ; j++)
441 dd.set(j, i) += vect[j] ;
444 for (
int i=0 ; i<n ; i++) {
445 for (
int j=0 ; j<n ; j++)
448 sxdsdx_1d (n, &vect,
R_CHEB) ;
449 for (
int j=0 ; j<n ; j++)
450 xd.set(j, i) = vect[j]*echelle ;
453 for (
int i=0 ; i<n ; i++) {
454 for (
int j=0 ; j<n ; j++)
457 sxdsdx_1d (n, &vect,
R_CHEB) ;
458 multx_1d (n, &vect,
R_CHEB) ;
459 for (
int j=0 ; j<(n>i+1 ? i+1 : n) ; j++)
460 xd.set(j, i) += vect[j] ;
463 for (
int i=0 ; i<n ; i++) {
464 for (
int j=0 ; j<n ; j++)
467 sx2_1d (n, &vect,
R_CHEB) ;
468 for (
int j=0 ; j<n ; j++)
469 xx.set(j, i) = vect[j] ;
475 res = dd + 6*xd + (6 - l*(l+1))*xx ;
476 tab[nb_dejafait] =
new Matrice(res) ;
483 return *tab[indice] ;
491Matrice ope_ptens_rr_mat(
int n,
int l,
double echelle,
int puis,
int base_r)
495 static Matrice (*ope_ptens_rr_mat[
MAX_BASE])(int, int, double, int) ;
502 ope_ptens_rr_mat[i] = _ope_ptens_rr_mat_pas_prevu ;
505 ope_ptens_rr_mat[
R_CHEB >>
TRA_R] = _ope_ptens_rr_mat_r_cheb ;
506 ope_ptens_rr_mat[
R_CHEBU >>
TRA_R] = _ope_ptens_rr_mat_r_chebu ;
507 ope_ptens_rr_mat[
R_CHEBP >>
TRA_R] = _ope_ptens_rr_mat_r_chebp ;
508 ope_ptens_rr_mat[
R_CHEBI >>
TRA_R] = _ope_ptens_rr_mat_r_chebi ;
511 Matrice res(ope_ptens_rr_mat[base_r](n, l, echelle, puis)) ;
#define MAX_BASE
Nombre max. de bases differentes.
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
#define R_CHEBI
base de Cheb. impaire (rare) seulement
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
#define R_CHEB
base de Chebychev ordinaire (fin)
#define R_CHEBP
base de Cheb. paire (rare) seulement