23char helmholtz_plus_mat_C[] =
"$$" ;
53#include "type_parite.h"
61Matrice _helmholtz_plus_mat_pas_prevu(
int,
int,
double,
double,
double) {
62 cout <<
"Helmholtz plus : base not implemented..." << endl ;
76Matrice _helmholtz_plus_mat_r_chebp (
int n,
int lq,
double alpha,
double,
89 double* vect =
new double[n] ;
91 for (
int i=0 ; i<n ; i++) {
92 for (
int j=0 ; j<n ; j++)
96 for (
int j=0 ; j<n ; j++)
97 dd.set(j, i) = vect[j] ;
100 for (
int i=0 ; i<n ; i++) {
101 for (
int j=0 ; j<n ; j++)
104 sxdsdx_1d (n, &vect,
R_CHEBP) ;
105 for (
int j=0 ; j<n ; j++)
106 xd.set(j, i) = vect[j] ;
109 for (
int i=0 ; i<n ; i++) {
110 for (
int j=0 ; j<n ; j++)
114 for (
int j=0 ; j<n ; j++)
115 sx2.set(j, i) = vect[j] ;
118 for (
int i=0 ; i<n ; i++) {
119 for (
int j=0 ; j<n ; j++)
127 res = dd+2*xd-lq*(lq+1)*sx2+masse*masse*alpha*alpha*xx ;
137Matrice _helmholtz_plus_mat_r_cheb (
int n,
int lq,
double alpha,
double beta,
144 double echelle = beta / alpha ;
153 double* vect =
new double[n] ;
155 for (
int i=0 ; i<n ; i++) {
156 for (
int j=0 ; j<n ; j++)
159 d2sdx2_1d (n, &vect,
R_CHEB) ;
160 vect[i] += masse*masse*alpha*alpha ;
161 for (
int j=0 ; j<n ; j++)
162 dd.set(j, i) = vect[j]*echelle*echelle ;
165 for (
int i=0 ; i<n ; i++) {
166 for (
int j=0 ; j<n ; j++)
169 d2sdx2_1d (n, &vect,
R_CHEB) ;
170 vect[i] += masse*masse*alpha*alpha ;
171 multx_1d (n, &vect,
R_CHEB) ;
172 for (
int j=0 ; j<n ; j++)
173 dd.set(j, i) += 2*echelle*vect[j] ;
176 for (
int i=0 ; i<n ; i++) {
177 for (
int j=0 ; j<n ; j++)
180 d2sdx2_1d (n, &vect,
R_CHEB) ;
181 vect[i] += masse*masse*alpha*alpha ;
182 multx_1d (n, &vect,
R_CHEB) ;
183 multx_1d (n, &vect,
R_CHEB) ;
184 for (
int j=0 ; j<n ; j++)
185 dd.set(j, i) += vect[j] ;
188 for (
int i=0 ; i<n ; i++) {
189 for (
int j=0 ; j<n ; j++)
192 sxdsdx_1d (n, &vect,
R_CHEB) ;
193 for (
int j=0 ; j<n ; j++)
194 xd.set(j, i) = vect[j]*echelle ;
197 for (
int i=0 ; i<n ; i++) {
198 for (
int j=0 ; j<n ; j++)
201 sxdsdx_1d (n, &vect,
R_CHEB) ;
202 multx_1d (n, &vect,
R_CHEB) ;
203 for (
int j=0 ; j<n ; j++)
204 xd.set(j, i) += vect[j] ;
207 for (
int i=0 ; i<n ; i++) {
208 for (
int j=0 ; j<n ; j++)
211 sx2_1d (n, &vect,
R_CHEB) ;
212 for (
int j=0 ; j<n ; j++)
213 xx.set(j, i) = vect[j] ;
219 res = dd+2*xd - lq*(lq+1)*xx;
229Matrice helmholtz_plus_mat(
int n,
int lq,
double alpha,
double beta,
double masse,
234 static Matrice (*helmholtz_plus_mat[
MAX_BASE])(int, int, double, double, double);
241 helmholtz_plus_mat[i] = _helmholtz_plus_mat_pas_prevu ;
244 helmholtz_plus_mat[
R_CHEB >>
TRA_R] = _helmholtz_plus_mat_r_cheb ;
245 helmholtz_plus_mat[
R_CHEBP >>
TRA_R] = _helmholtz_plus_mat_r_chebp ;
248 Matrice res(helmholtz_plus_mat[base_r](n, lq, alpha, beta, masse)) ;
#define MAX_BASE
Nombre max. de bases differentes.
#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