123 #include "type_parite.h" 144 Tbl _solp_pas_prevu (
const Matrice &lap,
const Matrice &nondege,
double alpha,
145 double beta,
const Tbl &source,
int puis) {
146 cout <<
" Solution particuliere pas prevue ..... : "<< endl ;
147 cout <<
" Laplacien : " << endl << lap << endl ;
148 cout <<
" Non degenere : " << endl << nondege << endl ;
149 cout <<
" Source : " << &source << endl ;
150 cout <<
" Alpha : " << alpha << endl ;
151 cout <<
" Beta : " << beta << endl ;
152 cout <<
" Puiss : " << puis << endl ;
164 Tbl _solp_r_cheb (
const Matrice &lap,
const Matrice &nondege,
double alpha,
165 double beta,
const Tbl &source,
int) {
168 int dege = n-nondege.get_dim(0) ;
171 Tbl source_aux(source*alpha*alpha) ;
172 Tbl xso(source_aux) ;
173 Tbl xxso(source_aux) ;
174 multx_1d(n, &xso.t,
R_CHEB) ;
175 multx_1d(n, &xxso.t,
R_CHEB) ;
176 multx_1d(n, &xxso.t,
R_CHEB) ;
177 source_aux = beta*beta/alpha/alpha*source_aux+2*beta/alpha*xso+xxso ;
178 source_aux = combinaison(source_aux, 0,
R_CHEB) ;
182 for (
int i=0 ; i<n-dege ; i++)
183 so.set(i) = source_aux(i) ;
185 Tbl auxi(nondege.inverse(so)) ;
189 for (
int i=dege ; i<n ; i++)
190 res.set(i) = auxi(i-dege) ;
192 for (
int i=0 ; i<dege ; i++)
201 Tbl _solp_r_jaco02 (
const Matrice &lap,
const Matrice &nondege,
double alpha,
202 double,
const Tbl &source,
int) {
205 int dege = n-nondege.get_dim(0) ;
208 Tbl source_aux(source*alpha*alpha) ;
209 source_aux = combinaison(source_aux, 0,
R_JACO02) ;
213 for (
int i=0 ; i<n-dege ; i++)
214 so.set(i) = source_aux(i) ;
216 Tbl auxi(nondege.inverse(so)) ;
220 for (
int i=dege ; i<n ; i++)
221 res.set(i) = auxi(i-dege) ;
223 for (
int i=0 ; i<dege ; i++)
233 Tbl _solp_r_chebp (
const Matrice &lap,
const Matrice &nondege,
double alpha,
234 double ,
const Tbl &source,
int) {
237 int dege = n-nondege.get_dim(0) ;
238 assert ((dege==2) || (dege == 1)) ;
239 Tbl source_aux(alpha*alpha*source) ;
240 source_aux = combinaison(source_aux, 0,
R_CHEBP) ;
244 for (
int i=0 ; i<n-dege ; i++)
245 so.set(i) = source_aux(i);
247 Tbl auxi(nondege.inverse(so)) ;
251 for (
int i=dege ; i<n ; i++)
252 res.set(i) = auxi(i-dege) ;
254 for (
int i=0 ; i<dege ; i++)
259 for (
int i=0 ; i<n ; i++)
262 else somme += res(i) ;
274 Tbl _solp_r_chebi (
const Matrice &lap,
const Matrice &nondege,
double alpha,
275 double,
const Tbl &source,
int) {
279 int dege = n-nondege.get_dim(0) ;
280 assert ((dege == 2) || (dege ==1)) ;
281 Tbl source_aux(source*alpha*alpha) ;
282 source_aux = combinaison(source_aux, 0,
R_CHEBI) ;
286 for (
int i=0 ; i<n-dege ; i++)
287 so.set(i) = source_aux(i);
289 Tbl auxi(nondege.inverse(so)) ;
293 for (
int i=dege ; i<n ; i++)
294 res.set(i) = auxi(i-dege) ;
296 for (
int i=0 ; i<dege ; i++)
301 for (
int i=0 ; i<n ; i++)
303 somme -= (2*i+1)*res(i) ;
304 else somme += (2*i+1)*res(i) ;
317 Tbl _solp_r_chebu (
const Matrice &lap,
const Matrice &nondege,
double alpha,
318 double,
const Tbl &source,
int puis) {
325 res = _solp_r_chebu_cinq (lap, nondege, source) ;
328 res = _solp_r_chebu_quatre (lap, nondege, alpha, source) ;
331 res = _solp_r_chebu_trois (lap, nondege, alpha, source) ;
334 res = _solp_r_chebu_deux (lap, nondege, source) ;
345 Tbl _solp_r_chebu_quatre (
const Matrice &lap,
const Matrice &nondege,
double alpha,
349 int dege = n-nondege.get_dim(0) ;
350 assert ((dege==3) || (dege ==2)) ;
351 Tbl source_aux(source*alpha*alpha) ;
352 source_aux = combinaison(source_aux, 4,
R_CHEBU) ;
356 for (
int i=0 ; i<n-dege ; i++)
357 so.set(i) = source_aux(i);
359 Tbl auxi(nondege.inverse(so)) ;
363 for (
int i=dege ; i<n ; i++)
364 res.set(i) = auxi(i-dege) ;
366 for (
int i=0 ; i<dege ; i++)
371 for (
int i=0 ; i<n ; i++)
372 somme += i*i*res(i) ;
373 double somme_deux = somme ;
374 for (
int i=0 ; i<n ; i++)
375 somme_deux -= res(i) ;
376 res.set(1) = -somme ;
377 res.set(0) = somme_deux ;
382 for (
int i=0 ; i<n ; i++)
384 res.set(0) = -somme ;
390 Tbl _solp_r_chebu_trois (
const Matrice &lap,
const Matrice &nondege,
double alpha,
394 int dege = n-nondege.get_dim(0) ;
397 Tbl source_aux(source*alpha) ;
398 source_aux = combinaison(source_aux, 3,
R_CHEBU) ;
402 for (
int i=0 ; i<n-dege ; i++)
403 so.set(i) = source_aux(i);
405 Tbl auxi(nondege.inverse(so)) ;
409 for (
int i=dege ; i<n ; i++)
410 res.set(i) = auxi(i-dege) ;
412 for (
int i=0 ; i<dege ; i++)
416 for (
int i=0 ; i<n ; i++)
418 res.set(0) = -somme ;
424 Tbl _solp_r_chebu_deux (
const Matrice &lap,
const Matrice &nondege,
428 int dege = n-nondege.get_dim(0) ;
429 assert ((dege==1) || (dege ==2)) ;
430 Tbl source_aux(combinaison(source, 2,
R_CHEBU)) ;
434 for (
int i=0 ; i<n-dege ; i++)
435 so.set(i) = source_aux(i);
437 Tbl auxi(nondege.inverse(so)) ;
441 for (
int i=dege ; i<n ; i++)
442 res.set(i) = auxi(i-dege) ;
444 for (
int i=0 ; i<dege ; i++)
449 for (
int i=0 ; i<n ; i++)
452 res.set(0) = -somme ;
459 Tbl _solp_r_chebu_cinq (
const Matrice &lap,
const Matrice &nondege,
463 int dege = n-nondege.get_dim(0) ;
465 Tbl source_aux(combinaison(source, 5,
R_CHEBU)) ;
469 for (
int i=0 ; i<n-dege ; i++)
470 so.set(i) = source_aux(i);
472 Tbl auxi(nondege.inverse(so)) ;
476 for (
int i=dege ; i<n ; i++)
477 res.set(i) = auxi(i-dege) ;
479 for (
int i=0 ; i<dege ; i++)
484 for (
int i=0 ; i<n ; i++)
487 res.set(0) = -somme ;
499 Tbl solp(
const Matrice &lap,
const Matrice &nondege,
double alpha,
500 double beta,
const Tbl &source,
int puis,
int base_r) {
503 static Tbl (*solp[
MAX_BASE])(
const Matrice&,
const Matrice&, double, double,
511 solp[i] = _solp_pas_prevu ;
521 return solp[base_r](lap, nondege, alpha, beta, source, 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
int get_dim(int i) const
Gives the i-th dimension (ie dim.dim[i])
#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)