55 #include "type_parite.h" 73 Matrice _nondeg_ptens_rr_pas_prevu(
const Matrice &,
int ,
double,
int) ;
74 Matrice _nondeg_ptens_rr_cheb (
const Matrice&,
int,
double,
int) ;
75 Matrice _nondeg_ptens_rr_chebp (
const Matrice&,
int,
double,
int) ;
76 Matrice _nondeg_ptens_rr_chebi (
const Matrice&,
int,
double,
int) ;
77 Matrice _nondeg_ptens_rr_chebu (
const Matrice&,
int,
double,
int) ;
84 Matrice _nondeg_ptens_rr_pas_prevu(
const Matrice &lap,
int l,
double echelle,
int puis) {
85 cout <<
"Construction non degeneree pas prevue..." << endl ;
86 cout <<
"l : " << l << endl ;
87 cout <<
"lap : " << lap << endl ;
88 cout <<
"echelle : " << echelle << endl ;
89 cout <<
" puis : " << puis << endl ;
102 Matrice _nondeg_ptens_rr_cheb (
const Matrice &lap,
int l,
double echelle,
int) {
107 const int nmax = 200 ;
108 static Matrice* tab[nmax] ;
109 static int nb_dejafait = 0 ;
110 static int l_dejafait[nmax] ;
111 static int nr_dejafait[nmax] ;
112 static double vieux_echelle = 0;
115 if (vieux_echelle != echelle) {
116 for (
int i=0 ; i<nb_dejafait ; i++) {
118 nr_dejafait[i] = -1 ;
121 vieux_echelle = echelle ;
128 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
129 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
134 if (nb_dejafait >= nmax) {
135 cout <<
"_nondeg_ptens_rr_cheb : trop de matrices" << endl ;
141 l_dejafait[nb_dejafait] = l ;
142 nr_dejafait[nb_dejafait] = n ;
147 Matrice res(n-2, n-2) ;
149 for (
int i=0 ; i<n-2 ; i++)
150 for (
int j=0 ; j<n-2 ; j++)
151 res.set(i, j) = lap(i, j+2) ;
155 tab[nb_dejafait] =
new Matrice(res) ;
162 return *tab[indice] ;
172 Matrice _nondeg_ptens_rr_chebp (
const Matrice &lap,
int l,
double,
int) {
177 const int nmax = 200 ;
178 static Matrice* tab[nmax] ;
179 static int nb_dejafait = 0 ;
180 static int l_dejafait[nmax] ;
181 static int nr_dejafait[nmax] ;
186 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
187 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
192 if (nb_dejafait >= nmax) {
193 cout <<
"_nondeg_ptens_rr_chebp : trop de matrices" << endl ;
199 l_dejafait[nb_dejafait] = l ;
200 nr_dejafait[nb_dejafait] = n ;
205 Matrice res(n-1, n-1) ;
207 for (
int i=0 ; i<n-1 ; i++)
208 for (
int j=0 ; j<n-1 ; j++)
209 res.set(i, j) = lap(i, j+1) ;
212 tab[nb_dejafait] =
new Matrice(res) ;
217 Matrice res(n-2, n-2) ;
219 for (
int i=0 ;i<n-2 ; i++)
220 for (
int j=0 ; j<n-2 ; j++)
221 res.set(i, j) = lap(i, j+2) ;
225 tab[nb_dejafait] =
new Matrice(res) ;
232 return *tab[indice] ;
242 Matrice _nondeg_ptens_rr_chebi (
const Matrice &lap,
int l,
double,
int) {
246 const int nmax = 200 ;
247 static Matrice* tab[nmax] ;
248 static int nb_dejafait = 0 ;
249 static int l_dejafait[nmax] ;
250 static int nr_dejafait[nmax] ;
255 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
256 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
261 if (nb_dejafait >= nmax) {
262 cout <<
"_nondeg_ptens_rr_chebi : trop de matrices" << endl ;
268 l_dejafait[nb_dejafait] = l ;
269 nr_dejafait[nb_dejafait] = n ;
275 Matrice res(n-2, n-2) ;
277 for (
int i=0 ;i<n-2 ; i++)
278 for (
int j=0 ; j<n-2 ; j++)
279 res.set(i, j) = lap(i, j+2) ;
283 tab[nb_dejafait] =
new Matrice(res) ;
289 return *tab[indice] ;
300 Matrice _nondeg_ptens_rr_chebu (
const Matrice &lap,
int l,
double,
int puis) {
303 cout <<
"_ope_ptens_rr_mat_r_chebu : only the case dzpuis = 4 " 304 <<
'\n' <<
"is implemented! \n" 305 <<
"dzpuis = " << puis << endl ;
308 int n = lap.get_dim(0) ;
310 const int nmax = 200;
311 static Matrice* tab[nmax] ;
312 static int nb_dejafait = 0 ;
313 static int l_dejafait[nmax] ;
314 static int nr_dejafait[nmax] ;
319 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
320 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
325 if (nb_dejafait >= nmax) {
326 cout <<
"_nondeg_ptens_rr_chebu : trop de matrices" << endl ;
331 l_dejafait[nb_dejafait] = l ;
332 nr_dejafait[nb_dejafait] = n ;
334 Matrice res(n-3, n-3) ;
336 for (
int i=0 ;i<n-3 ; i++)
337 for (
int j=0 ; j<n-3 ; j++)
338 res.set(i, j) = lap(i, j+3) ;
342 tab[nb_dejafait] =
new Matrice(res) ;
349 return *tab[indice] ;
358 Matrice nondeg_ptens_rr(
const Matrice &lap,
int l,
double echelle,
int puis,
int base_r)
362 static Matrice (*nondeg_ptens_rr[
MAX_BASE])(
const Matrice&, int, double, int) ;
369 nondeg_ptens_rr[i] = _nondeg_ptens_rr_pas_prevu ;
372 nondeg_ptens_rr[
R_CHEB >>
TRA_R] = _nondeg_ptens_rr_cheb ;
373 nondeg_ptens_rr[
R_CHEBU >>
TRA_R] = _nondeg_ptens_rr_chebu ;
374 nondeg_ptens_rr[
R_CHEBP >>
TRA_R] = _nondeg_ptens_rr_chebp ;
375 nondeg_ptens_rr[
R_CHEBI >>
TRA_R] = _nondeg_ptens_rr_chebi ;
378 Matrice res(nondeg_ptens_rr[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)