23 char comb_lin_helmholtz_minusC[] =
"$Header $" ;
65 #include "type_parite.h" 71 Matrice _cl_helmholtz_minus_pas_prevu (
const Matrice& so) {
72 cout <<
"CL Helmholtz minus not implemented" << endl ;
84 Matrice _cl_helmholtz_minus_r_cheb (
const Matrice& source) {
87 assert (n==source.get_dim(1)) ;
89 Matrice barre(source) ;
91 for (
int i=0 ; i<n-2 ; i++) {
92 for (
int j=0 ; j<n ; j++)
93 barre.set(i, j) = ((1+dirac)*source(i, j)-source(i+2, j))
99 for (
int i=0 ; i<n-4 ; i++)
100 for (
int j=0 ; j<n ; j++)
101 res.set(i, j) = barre(i, j)-barre(i+2, j) ;
111 Matrice _cl_helmholtz_minus_r_chebu (
const Matrice& source) {
114 assert (n==source.get_dim(1)) ;
116 Matrice barre(source) ;
118 for (
int i=0 ; i<n-2 ; i++) {
119 for (
int j=0 ; j<n ; j++)
120 barre.set(i, j) = ((1+dirac)*source(i, j)-source(i+2, j)) ;
121 if (i==0) dirac = 0 ;
124 Matrice tilde(barre) ;
125 for (
int i=0 ; i<n-4 ; i++)
126 for (
int j=0 ; j<n ; j++)
127 tilde.set(i, j) = (barre(i, j)-barre(i+2, j)) ;
130 for (
int i=0 ; i<n-4 ; i++)
131 for (
int j=0 ; j<n ; j++)
132 hat.set(i, j) = (tilde(i, j)+tilde(i+1, j)) ;
135 for (
int i=0 ; i<n-4 ; i++)
136 for (
int j=0 ; j<n ; j++)
137 res.set(i, j) = hat(i, j)-hat(i+1, j) ;
147 Matrice _cl_helmholtz_minus_r_chebp (
const Matrice &source) {
149 assert (n==source.get_dim(1)) ;
151 Matrice barre(source) ;
154 for (
int i=0 ; i<n-2 ; i++) {
155 for (
int j=0 ; j<n ; j++)
156 barre.set(i, j) = (1+dirac)*source(i, j)-source(i+2, j) ;
157 if (i==0) dirac = 0 ;
160 Matrice tilde(barre) ;
161 for (
int i=0 ; i<n-4 ; i++)
162 for (
int j=0 ; j<n ; j++)
163 tilde.set(i, j) = barre(i, j)-barre(i+2, j) ;
166 for (
int i=0 ; i<n-4 ; i++)
167 for (
int j=0 ; j<n ; j++)
168 res.set(i, j) = tilde(i, j)-tilde(i+1, j) ;
177 Matrice _cl_helmholtz_minus_r_chebi (
const Matrice &source) {
179 assert (n==source.get_dim(1)) ;
181 Matrice barre(source) ;
183 for (
int i=0 ; i<n-2 ; i++)
184 for (
int j=0 ; j<n ; j++)
185 barre.set(i, j) = source(i, j)-source(i+2, j) ;
187 Matrice tilde(barre) ;
188 for (
int i=0 ; i<n-4 ; i++)
189 for (
int j=0 ; j<n ; j++)
190 tilde.set(i, j) = barre(i, j)-barre(i+2, j) ;
193 for (
int i=0 ; i<n-4 ; i++)
194 for (
int j=0 ; j<n ; j++)
195 res.set(i, j) = tilde(i, j)-tilde(i+1, j) ;
203 Matrice cl_helmholtz_minus (
const Matrice &source,
int base_r) {
206 static Matrice (*cl_helmholtz_minus[
MAX_BASE]) (
const Matrice &) ;
213 cl_helmholtz_minus[i] = _cl_helmholtz_minus_pas_prevu ;
216 cl_helmholtz_minus[
R_CHEB >>
TRA_R] = _cl_helmholtz_minus_r_cheb ;
217 cl_helmholtz_minus[
R_CHEBU >>
TRA_R] = _cl_helmholtz_minus_r_chebu ;
218 cl_helmholtz_minus[
R_CHEBP >>
TRA_R] = _cl_helmholtz_minus_r_chebp ;
219 cl_helmholtz_minus[
R_CHEBI >>
TRA_R] = _cl_helmholtz_minus_r_chebi ;
222 Matrice res(cl_helmholtz_minus[base_r](source)) ;
232 Tbl _cl_helmholtz_minus_pas_prevu (
const Tbl &so) {
234 cout <<
"Linear combination for Helmholtz minus not implemented..." << endl ;
243 Tbl _cl_helmholtz_minus_r_cheb (
const Tbl& source) {
249 for (
int i=0 ; i<n-2 ; i++) {
250 barre.set(i) = ((1+dirac)*source(i)-source(i+2))
252 if (i==0) dirac = 0 ;
256 for (
int i=0 ; i<n-4 ; i++)
257 res.set(i) = barre(i)-barre(i+2) ;
267 Tbl _cl_helmholtz_minus_r_chebu (
const Tbl& source) {
273 for (
int i=0 ; i<n-2 ; i++) {
274 barre.set(i) = ((1+dirac)*source(i)-source(i+2)) ;
275 if (i==0) dirac = 0 ;
279 for (
int i=0 ; i<n-4 ; i++)
280 tilde.set(i) = (barre(i)-barre(i+2)) ;
283 for (
int i=0 ; i<n-4 ; i++)
284 hat.set(i) = (tilde(i)+tilde(i+1)) ;
287 for (
int i=0 ; i<n-4 ; i++)
288 res.set(i) = hat(i)-hat(i+1) ;
298 Tbl _cl_helmholtz_minus_r_chebp (
const Tbl &source) {
303 for (
int i=0 ; i<n-2 ; i++) {
304 barre.set(i) = (1+dirac)*source(i)-source(i+2) ;
305 if (i==0) dirac = 0 ;
309 for (
int i=0 ; i<n-4 ; i++)
310 tilde.set(i) = barre(i)-barre(i+2) ;
313 for (
int i=0 ; i<n-4 ; i++)
314 res.set(i) = tilde(i)-tilde(i+1) ;
323 Tbl _cl_helmholtz_minus_r_chebi (
const Tbl &source) {
327 for (
int i=0 ; i<n-2 ; i++)
328 barre.set(i) = source(i)-source(i+2) ;
331 for (
int i=0 ; i<n-4 ; i++)
332 tilde.set(i) = barre(i)-barre(i+2) ;
335 for (
int i=0 ; i<n-4 ; i++)
336 res.set(i) = tilde(i)-tilde(i+1) ;
343 Tbl cl_helmholtz_minus (
const Tbl &source,
int base_r) {
346 static Tbl (*cl_helmholtz_minus[
MAX_BASE])(
const Tbl &) ;
353 cl_helmholtz_minus[i] = _cl_helmholtz_minus_pas_prevu ;
356 cl_helmholtz_minus[
R_CHEB >>
TRA_R] = _cl_helmholtz_minus_r_cheb ;
357 cl_helmholtz_minus[
R_CHEBU >>
TRA_R] = _cl_helmholtz_minus_r_chebu ;
358 cl_helmholtz_minus[
R_CHEBP >>
TRA_R] = _cl_helmholtz_minus_r_chebp ;
359 cl_helmholtz_minus[
R_CHEBI >>
TRA_R] = _cl_helmholtz_minus_r_chebi ;
362 Tbl res(cl_helmholtz_minus[base_r](source)) ;
#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
Returns the dimension of the matrix.
#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)