56 #include "type_parite.h" 64 Matrice _helmholtz_plus_mat_pas_prevu(
int,
int,
double,
double,
double) {
65 cout <<
"Helmholtz plus : base not implemented..." << endl ;
79 Matrice _helmholtz_plus_mat_r_chebp (
int n,
int lq,
double alpha,
double,
92 double* vect =
new double[n] ;
94 for (
int i=0 ; i<n ; i++) {
95 for (
int j=0 ; j<n ; j++)
99 for (
int j=0 ; j<n ; j++)
100 dd.set(j, i) = vect[j] ;
103 for (
int i=0 ; i<n ; i++) {
104 for (
int j=0 ; j<n ; j++)
107 sxdsdx_1d (n, &vect,
R_CHEBP) ;
108 for (
int j=0 ; j<n ; j++)
109 xd.set(j, i) = vect[j] ;
112 for (
int i=0 ; i<n ; i++) {
113 for (
int j=0 ; j<n ; j++)
117 for (
int j=0 ; j<n ; j++)
118 sx2.set(j, i) = vect[j] ;
121 for (
int i=0 ; i<n ; i++) {
122 for (
int j=0 ; j<n ; j++)
130 res = dd+2*xd-lq*(lq+1)*sx2+masse*masse*alpha*alpha*xx ;
140 Matrice _helmholtz_plus_mat_r_cheb (
int n,
int lq,
double alpha,
double beta,
147 double echelle = beta / alpha ;
156 double* vect =
new double[n] ;
158 for (
int i=0 ; i<n ; i++) {
159 for (
int j=0 ; j<n ; j++)
162 d2sdx2_1d (n, &vect,
R_CHEB) ;
163 vect[i] += masse*masse*alpha*alpha ;
164 for (
int j=0 ; j<n ; j++)
165 dd.set(j, i) = vect[j]*echelle*echelle ;
168 for (
int i=0 ; i<n ; i++) {
169 for (
int j=0 ; j<n ; j++)
172 d2sdx2_1d (n, &vect,
R_CHEB) ;
173 vect[i] += masse*masse*alpha*alpha ;
174 multx_1d (n, &vect,
R_CHEB) ;
175 for (
int j=0 ; j<n ; j++)
176 dd.set(j, i) += 2*echelle*vect[j] ;
179 for (
int i=0 ; i<n ; i++) {
180 for (
int j=0 ; j<n ; j++)
183 d2sdx2_1d (n, &vect,
R_CHEB) ;
184 vect[i] += masse*masse*alpha*alpha ;
185 multx_1d (n, &vect,
R_CHEB) ;
186 multx_1d (n, &vect,
R_CHEB) ;
187 for (
int j=0 ; j<n ; j++)
188 dd.set(j, i) += vect[j] ;
191 for (
int i=0 ; i<n ; i++) {
192 for (
int j=0 ; j<n ; j++)
195 sxdsdx_1d (n, &vect,
R_CHEB) ;
196 for (
int j=0 ; j<n ; j++)
197 xd.set(j, i) = vect[j]*echelle ;
200 for (
int i=0 ; i<n ; i++) {
201 for (
int j=0 ; j<n ; j++)
204 sxdsdx_1d (n, &vect,
R_CHEB) ;
205 multx_1d (n, &vect,
R_CHEB) ;
206 for (
int j=0 ; j<n ; j++)
207 xd.set(j, i) += vect[j] ;
210 for (
int i=0 ; i<n ; i++) {
211 for (
int j=0 ; j<n ; j++)
214 sx2_1d (n, &vect,
R_CHEB) ;
215 for (
int j=0 ; j<n ; j++)
216 xx.set(j, i) = vect[j] ;
222 res = dd+2*xd - lq*(lq+1)*xx;
232 Matrice helmholtz_plus_mat(
int n,
int lq,
double alpha,
double beta,
double masse,
237 static Matrice (*helmholtz_plus_mat[
MAX_BASE])(int, int, double, double, double);
244 helmholtz_plus_mat[i] = _helmholtz_plus_mat_pas_prevu ;
247 helmholtz_plus_mat[
R_CHEB >>
TRA_R] = _helmholtz_plus_mat_r_cheb ;
248 helmholtz_plus_mat[
R_CHEBP >>
TRA_R] = _helmholtz_plus_mat_r_chebp ;
251 Matrice res(helmholtz_plus_mat[base_r](n, lq, alpha, beta, masse)) ;
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
#define R_CHEBP
base de Cheb. paire (rare) seulement
#define MAX_BASE
Nombre max. de bases differentes.
#define R_CHEB
base de Chebychev ordinaire (fin)