23char helmholtz_minus_mat_C[] =
"$$" ;
64#include "type_parite.h"
73Matrice _helmholtz_minus_mat_pas_prevu(
int,
int,
double,
double,
double) {
74 cout <<
"Helmholtz minus : base not implemented..." << endl ;
85Matrice _helmholtz_minus_mat_r_chebu (
int n,
int lq,
double alpha,
86 double,
double masse) {
93 double* vect =
new double[n] ;
94 double* vect_bis =
new double[n] ;
95 double* vect_dd =
new double[n] ;
97 for (
int i=0 ; i<n-2 ; i++) {
99 for (
int j=0 ; j<n ; j++)
105 for (
int j=0 ; j<n ; j++)
106 vect_bis[j] = vect[j] ;
108 d2sdx2_1d (n, &vect_bis,
R_CHEBU) ;
109 mult2_xm1_1d_cheb (n, vect_bis, vect_dd) ;
112 for (
int j=0 ; j<n ; j++)
113 vect_bis[j] = vect[j] ;
114 sx2_1d (n, &vect_bis,
R_CHEBU) ;
116 for (
int j=0 ; j<n-2 ; j++)
117 res.set(j,i) = vect_dd[j] - lq*(lq+1)*vect[j]
118 - masse*masse*vect_bis[j]/alpha/alpha ;
133Matrice _helmholtz_minus_mat_r_cheb (
int n,
int lq,
double alpha,
double beta,
138 double echelle = beta / alpha ;
147 double* vect =
new double[n] ;
149 for (
int i=0 ; i<n ; i++) {
150 for (
int j=0 ; j<n ; j++)
153 d2sdx2_1d (n, &vect,
R_CHEB) ;
154 vect[i] -= masse*masse*alpha*alpha ;
155 for (
int j=0 ; j<n ; j++)
156 dd.set(j, i) = vect[j]*echelle*echelle ;
159 for (
int i=0 ; i<n ; i++) {
160 for (
int j=0 ; j<n ; j++)
163 d2sdx2_1d (n, &vect,
R_CHEB) ;
164 vect[i] -= masse*masse*alpha*alpha ;
165 multx_1d (n, &vect,
R_CHEB) ;
166 for (
int j=0 ; j<n ; j++)
167 dd.set(j, i) += 2*echelle*vect[j] ;
170 for (
int i=0 ; i<n ; i++) {
171 for (
int j=0 ; j<n ; j++)
174 d2sdx2_1d (n, &vect,
R_CHEB) ;
175 vect[i] -= masse*masse*alpha*alpha ;
176 multx_1d (n, &vect,
R_CHEB) ;
177 multx_1d (n, &vect,
R_CHEB) ;
178 for (
int j=0 ; j<n ; j++)
179 dd.set(j, i) += vect[j] ;
182 for (
int i=0 ; i<n ; i++) {
183 for (
int j=0 ; j<n ; j++)
186 sxdsdx_1d (n, &vect,
R_CHEB) ;
187 for (
int j=0 ; j<n ; j++)
188 xd.set(j, i) = vect[j]*echelle ;
191 for (
int i=0 ; i<n ; i++) {
192 for (
int j=0 ; j<n ; j++)
195 sxdsdx_1d (n, &vect,
R_CHEB) ;
196 multx_1d (n, &vect,
R_CHEB) ;
197 for (
int j=0 ; j<n ; j++)
198 xd.set(j, i) += vect[j] ;
201 for (
int i=0 ; i<n ; i++) {
202 for (
int j=0 ; j<n ; j++)
205 sx2_1d (n, &vect,
R_CHEB) ;
206 for (
int j=0 ; j<n ; j++)
207 xx.set(j, i) = vect[j] ;
213 res = dd+2*xd - lq*(lq+1)*xx;
224Matrice _helmholtz_minus_mat_r_chebp (
int n,
int lq,
double alpha,
double,
double masse) {
231 return Matrice(d2 + 2.*sxd -masse*masse*alpha*alpha*xx) ;
237 double* vect =
new double[n] ;
239 double* vect_sx2 =
new double[n] ;
240 double* vect_sxd =
new double[n] ;
241 double* vect_dd =
new double[n] ;
243 for (
int i=0 ; i<n-1 ; i++) {
244 for (
int j=0 ; j<n ; j++)
250 for (
int j=0 ; j<n ; j++)
251 vect_dd[j] = vect[j] ;
252 d2sdx2_1d (n, &vect_dd,
R_CHEBP) ;
253 for (
int j=0 ; j<n ; j++)
254 vect_sxd[j] = vect[j] ;
255 sxdsdx_1d (n, &vect_sxd,
R_CHEBP) ;
256 for (
int j=0 ; j<n ; j++)
257 vect_sx2[j] = vect[j] ;
258 sx2_1d (n, &vect_sx2,
R_CHEBP) ;
260 for (
int j=0 ; j<n-1 ; j++)
261 res.set(j,i) = vect_dd[j] +2*vect_sxd[j] - lq*(lq+1)*vect_sx2[j] - masse*masse*alpha*alpha*vect[j] ;
279Matrice _helmholtz_minus_mat_r_chebi (
int n,
int lq,
double alpha,
double,
double masse) {
287 return Matrice(d2 + 2.*sxd - (lq*(lq+1))*sx2- masse*masse*alpha*alpha*xx) ;
293 double* vect =
new double[n] ;
295 double* vect_sx2 =
new double[n] ;
296 double* vect_sxd =
new double[n] ;
297 double* vect_dd =
new double[n] ;
299 for (
int i=0 ; i<n-1 ; i++) {
300 for (
int j=0 ; j<n ; j++)
303 vect[i+1] = (2*i+1) ;
306 for (
int j=0 ; j<n ; j++)
307 vect_dd[j] = vect[j] ;
308 d2sdx2_1d (n, &vect_dd,
R_CHEBI) ;
309 for (
int j=0 ; j<n ; j++)
310 vect_sxd[j] = vect[j] ;
311 sxdsdx_1d (n, &vect_sxd,
R_CHEBI) ;
312 for (
int j=0 ; j<n ; j++)
313 vect_sx2[j] = vect[j] ;
314 sx2_1d (n, &vect_sx2,
R_CHEBI) ;
316 for (
int j=0 ; j<n-1 ; j++)
317 res.set(j,i) = vect_dd[j] +2*vect_sxd[j] - lq*(lq+1)*vect_sx2[j] - masse*masse*alpha*alpha*vect[j] ;
334Matrice helmholtz_minus_mat(
int n,
int lq,
335 double alpha,
double beta,
double masse,
341 double, double, double);
348 helmholtz_minus_mat[i] = _helmholtz_minus_mat_pas_prevu ;
351 helmholtz_minus_mat[
R_CHEB >>
TRA_R] = _helmholtz_minus_mat_r_cheb ;
352 helmholtz_minus_mat[
R_CHEBU >>
TRA_R] = _helmholtz_minus_mat_r_chebu ;
353 helmholtz_minus_mat[
R_CHEBP >>
TRA_R] = _helmholtz_minus_mat_r_chebp ;
354 helmholtz_minus_mat[
R_CHEBI >>
TRA_R] = _helmholtz_minus_mat_r_chebi ;
357 Matrice res(helmholtz_minus_mat[base_r](n, lq, alpha, beta, masse)) ;
Class for the elementary differential operator (see the base class Diff ).
Class for the elementary differential operator Identity (see the base class Diff ).
Class for the elementary differential operator division by (see the base class Diff ).
Class for the elementary differential operator (see the base class Diff ).
#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