32 #include "ope_elementary.h" 39 Matrice _helmholtz_minus_2d_mat_pas_prevu(
int,
int,
double,
double,
41 cout <<
"Operateur pas prevu..." << endl ;
54 Matrice _helmholtz_minus_2d_mat_r_chebu_deux(
int,
int,
double,
double) ;
56 Matrice _helmholtz_minus_2d_mat_r_chebu(
int n,
int l,
double masse,
57 double alpha,
double,
int puis) {
58 Matrice res(n-2, n-2) ;
62 res = _helmholtz_minus_2d_mat_r_chebu_deux (n, l, masse, alpha) ;
72 Matrice _helmholtz_minus_2d_mat_r_chebu_deux (
int n,
int l,
double masse,
75 Matrice res(n-2, n-2) ;
77 double* vect =
new double[n] ;
78 double* vect_bis =
new double[n] ;
79 double* vect_dd =
new double[n] ;
80 double* vect_d =
new double[n] ;
82 for (
int i=0 ; i<n-2 ; i++) {
83 for (
int j=0 ; j<n ; j++)
90 for (
int j=0 ; j<n ; j++)
91 vect_bis[j] = vect[j] ;
93 d2sdx2_1d (n, &vect_bis,
R_CHEBU) ;
94 mult2_xm1_1d_cheb (n, vect_bis, vect_dd) ;
97 for (
int j=0 ; j<n ; j++)
98 vect_bis[j] = vect[j] ;
100 dsdx_1d (n, &vect_bis,
R_CHEBU) ;
101 mult_xm1_1d_cheb (n, vect_bis, vect_d) ;
104 for (
int j=0 ; j<n ; j++)
105 vect_bis[j] = vect[j] ;
106 sx2_1d (n, &vect_bis,
R_CHEBU) ;
108 for (
int j=0 ; j<n-2 ; j++)
109 res.set(j,i) = vect_dd[j] + vect_d[j] - l*l*vect[j] - masse*masse/alpha/alpha*vect_bis[j] ;
126 Matrice _helmholtz_minus_2d_mat_r_cheb (
int n,
int l,
double masse,
127 double alf,
double bet,
int) {
129 double echelle = bet / alf ;
138 double* vect =
new double[n] ;
140 for (
int i=0 ; i<n ; i++) {
141 for (
int j=0 ; j<n ; j++)
144 d2sdx2_1d (n, &vect,
R_CHEB) ;
145 vect[i] -= masse*masse*alf*alf ;
146 for (
int j=0 ; j<n ; j++)
147 dd.set(j, i) = vect[j]*echelle*echelle ;
150 for (
int i=0 ; i<n ; i++) {
151 for (
int j=0 ; j<n ; j++)
154 d2sdx2_1d (n, &vect,
R_CHEB) ;
155 vect[i] -= masse*masse*alf*alf ;
156 multx_1d (n, &vect,
R_CHEB) ;
157 for (
int j=0 ; j< n ; j++)
158 dd.set(j, i) += 2*echelle*vect[j] ;
161 for (
int i=0 ; i<n ; i++) {
162 for (
int j=0 ; j<n ; j++)
165 d2sdx2_1d (n, &vect,
R_CHEB) ;
166 vect[i] -= masse*masse*alf*alf ;
167 multx_1d (n, &vect,
R_CHEB) ;
168 multx_1d (n, &vect,
R_CHEB) ;
169 for (
int j=0 ; j<n ; j++)
170 dd.set(j, i) += vect[j] ;
173 for (
int i=0 ; i<n ; i++) {
174 for (
int j=0 ; j<n ; j++)
177 sxdsdx_1d (n, &vect,
R_CHEB) ;
178 for (
int j=0 ; j<n ; j++)
179 xd.set(j, i) = vect[j]*echelle ;
182 for (
int i=0 ; i<n ; i++) {
183 for (
int j=0 ; j<n ; j++)
186 sxdsdx_1d (n, &vect,
R_CHEB) ;
187 multx_1d (n, &vect,
R_CHEB) ;
188 for (
int j=0 ; j<(n>i+1 ? i+1 : n) ; j++)
189 xd.set(j, i) += vect[j] ;
192 for (
int i=0 ; i<n ; i++) {
193 for (
int j=0 ; j<n ; j++)
196 sx2_1d (n, &vect,
R_CHEB) ;
197 for (
int j=0 ; j<n ; j++)
198 xx.set(j, i) = vect[j] ;
216 double, double, int);
223 helmholtz_minus_2d_mat[i] = _helmholtz_minus_2d_mat_pas_prevu ;
226 helmholtz_minus_2d_mat[
R_CHEB >>
TRA_R] = _helmholtz_minus_2d_mat_r_cheb ;
227 helmholtz_minus_2d_mat[
R_CHEBU >>
TRA_R] = _helmholtz_minus_2d_mat_r_chebu ;
double alpha
Parameter of the associated mapping.
double beta
Parameter of the associated mapping.
Matrice * ope_mat
Pointer on the matrix representation of the operator.
int base_r
Radial basis of decomposition.
double masse
The mass term.
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
int dzpuis
the associated dzpuis, if in the compactified domain.
int l_quant
quantum number
int nr
Number of radial points.
virtual void do_ope_mat() const
Computes the matrix of the operator.
#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)