00001 /* 00002 * Copyright (c) 1999-2001 Eric Gourgoulhon 00003 * 00004 * This file is part of LORENE. 00005 * 00006 * LORENE is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation; either version 2 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * LORENE is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with LORENE; if not, write to the Free Software 00018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 * 00020 */ 00021 00022 00023 char citcossincp_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/FFT991/citcossincp.C,v 1.1 2004/12/21 17:06:01 j_novak Exp $" ; 00024 00025 00026 /* 00027 * Transformation inverse cos(l*theta) ou sin(l*theta) (suivant la 00028 * parite de l'indice m en phi) sur le deuxieme indice (theta) 00029 * d'un tableau 3-D representant une fonction symetrique par rapport 00030 * au plan z=0. 00031 * Utilise la routine FFT Fortran FFT991 00032 * 00033 * Entree: 00034 * ------- 00035 * int* deg : tableau du nombre effectif de degres de liberte dans chacune 00036 * des 3 dimensions: le nombre de points de collocation 00037 * en theta est nt = deg[1] et doit etre de la forme 00038 * nt = 2^p 3^q 5^r + 1 00039 * int* dimc : tableau du nombre d'elements de cc dans chacune des trois 00040 * dimensions. 00041 * On doit avoir dimc[1] >= deg[1] = nt. 00042 * 00043 * double* cf : tableau des coefficients c_l de la fonction definis 00044 * comme suit (a r et phi fixes) 00045 * 00046 * pour m pair: 00047 * f(theta) = som_{l=0}^{nt-1} c_l cos( l theta ) . 00048 * pour m impair: 00049 * f(theta) = som_{l=0}^{nt-2} c_l sin( l theta ) . 00050 * 00051 * L'espace memoire correspondant a ce 00052 * pointeur doit etre dimc[0]*dimc[1]*dimc[2] et doit 00053 * avoir ete alloue avant l'appel a la routine. 00054 * Le coefficient c_l (0 <= l <= nt-1) doit etre stoke dans 00055 * le tableau cf comme suit 00056 * c_l = cf[ dimc[1]*dimc[2] * j + k + dimc[2] * l ] 00057 * ou j et k sont les indices correspondant a 00058 * phi et r respectivement. 00059 * 00060 * int* dimf : tableau du nombre d'elements de ff dans chacune des trois 00061 * dimensions. 00062 * On doit avoir dimf[1] >= deg[1] = nt. 00063 * 00064 * Sortie: 00065 * ------- 00066 * double* ff : tableau des valeurs de la fonction aux nt points de 00067 * de collocation 00068 * 00069 * theta_l = pi l/(nt-1) 0 <= l <= nt-1 00070 * 00071 * L'espace memoire correspondant a ce 00072 * pointeur doit etre dimf[0]*dimf[1]*dimf[2] et doit 00073 * avoir ete alloue avant l'appel a la routine. 00074 * Les valeurs de la fonction sont stokees 00075 * dans le tableau ff comme suit 00076 * f( theta_l ) = ff[ dimf[1]*dimf[2] * j + k + dimf[2] * l ] 00077 * ou j et k sont les indices correspondant a 00078 * phi et r respectivement. 00079 * 00080 * NB: Si le pointeur cf est egal a ff, la routine ne travaille que sur un 00081 * seul tableau, qui constitue une entree/sortie. 00082 * 00083 */ 00084 00085 /* 00086 * $Id: citcossincp.C,v 1.1 2004/12/21 17:06:01 j_novak Exp $ 00087 * $Log: citcossincp.C,v $ 00088 * Revision 1.1 2004/12/21 17:06:01 j_novak 00089 * Added all files for using fftw3. 00090 * 00091 * Revision 1.5 2004/11/23 15:13:50 m_forot 00092 * Added the bases for the cases without any equatorial symmetry 00093 * (T_COSSIN_C, T_COSSIN_S, T_LEG, R_CHEBPI_P, R_CHEBPI_I). 00094 * 00095 * 00096 * $Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/FFT991/citcossincp.C,v 1.1 2004/12/21 17:06:01 j_novak Exp $ 00097 * 00098 */ 00099 // headers du C 00100 #include <assert.h> 00101 #include <stdlib.h> 00102 00103 // Prototypes of F77 subroutines 00104 #include "headcpp.h" 00105 #include "proto_f77.h" 00106 00107 // Prototypage des sous-routines utilisees: 00108 int* facto_ini(int ) ; 00109 double* trigo_ini(int ) ; 00110 double* cheb_ini(const int) ; 00111 double* chebimp_ini(const int ) ; 00112 //***************************************************************************** 00113 00114 void citcossincp(const int* deg, const int* dimc, double* cf, const int* dimf, 00115 double* ff) 00116 { 00117 00118 int i, j, k ; 00119 00120 // Dimensions des tableaux ff et cf : 00121 int n1f = dimf[0] ; 00122 int n2f = dimf[1] ; 00123 int n3f = dimf[2] ; 00124 int n1c = dimc[0] ; 00125 int n2c = dimc[1] ; 00126 int n3c = dimc[2] ; 00127 00128 // Nombres de degres de liberte en theta : 00129 int nt = deg[1] ; 00130 00131 // Tests de dimension: 00132 if (nt > n2f) { 00133 cout << "citcossincp: nt > n2f : nt = " << nt << " , n2f = " 00134 << n2f << endl ; 00135 abort () ; 00136 exit(-1) ; 00137 } 00138 if (nt > n2c) { 00139 cout << "citcossincp: nt > n2c : nt = " << nt << " , n2c = " 00140 << n2c << endl ; 00141 abort () ; 00142 exit(-1) ; 00143 } 00144 if (n1c > n1f) { 00145 cout << "citcossincp: n1c > n1f : n1c = " << n1c << " , n1f = " 00146 << n1f << endl ; 00147 abort () ; 00148 exit(-1) ; 00149 } 00150 if (n3c > n3f) { 00151 cout << "citcossincp: n3c > n3f : n3c = " << n3c << " , n3f = " 00152 << n3f << endl ; 00153 abort () ; 00154 exit(-1) ; 00155 } 00156 00157 // Nombre de points pour la FFT: 00158 int nm1 = nt - 1; 00159 int nm1s2 = nm1 / 2; 00160 00161 // Recherche des tables pour la FFT: 00162 int* facto = facto_ini(nm1) ; 00163 double* trigo = trigo_ini(nm1) ; 00164 00165 // Recherche de la table des sin(psi) : 00166 double* sinp = cheb_ini(nt); 00167 00168 // Recherche de la table des sin( theta_l ) : 00169 double* sinth = chebimp_ini(nt); 00170 00171 // tableau de travail t1 et g 00172 // (la dimension nm1+2 = nt+1 est exigee par la routine fft991) 00173 double* g = (double*)( malloc( (nm1+2)*sizeof(double) ) ) ; 00174 double* t1 = (double*)( malloc( (nm1+2)*sizeof(double) ) ) ; 00175 00176 // Parametres pour la routine FFT991 00177 int jump = 1 ; 00178 int inc = 1 ; 00179 int lot = 1 ; 00180 int isign = 1 ; 00181 00182 // boucle sur phi et r (les boucles vont resp. de 0 a dimf[0]-1 00183 // et 0 a dimf[2]) 00184 00185 int n2n3f = n2f * n3f ; 00186 int n2n3c = n2c * n3c ; 00187 00188 //======================================================================= 00189 // Cas m pair 00190 //======================================================================= 00191 00192 j = 0 ; 00193 00194 while (j<n1f-1) { //le dernier coef en phi n'est pas considere 00195 // (car nul) 00196 00197 //----------------------------------------------------------------------- 00198 // partie cos(m phi) avec m pair : transformation cos(2 l theta) inverse 00199 //----------------------------------------------------------------------- 00200 00201 for (k=0; k<n3c; k++) { 00202 00203 int i0 = n2n3c * j + k ; // indice de depart 00204 double* cf0 = cf + i0 ; // tableau des donnees a transformer 00205 00206 i0 = n2n3f * j + k ; // indice de depart 00207 double* ff0 = ff + i0 ; // tableau resultat 00208 00209 /* 00210 * NB: dans les commentaires qui suivent, psi designe la variable de [0, pi] 00211 * reliee a x par x = cos(psi/2) et F(psi) = f(x(psi)). 00212 */ 00213 00214 // Calcul des coefficients de Fourier de la fonction 00215 // G(psi) = F+(psi) + F_(psi) sin(psi) 00216 // en fonction des coefficients en cos(2l theta) de f: 00217 00218 // Coefficients impairs de G 00219 //-------------------------- 00220 00221 double c1 = cf0[n3c] ; 00222 00223 double som = 0; 00224 ff0[n3f] = 0 ; 00225 for ( i = 3; i < nt; i += 2 ) { 00226 ff0[ n3f*i ] = cf0[ n3c*i ] - c1 ; 00227 som += ff0[ n3f*i ] ; 00228 } 00229 00230 // Valeur en psi=0 de la partie antisymetrique de F, F_ : 00231 double fmoins0 = nm1s2 * c1 + som ; 00232 00233 // Coef. impairs de G 00234 // NB: le facteur 0.25 est du a la normalisation de fft991; si fft991 00235 // donnait exactement les coef. des sinus, ce facteur serait -0.5. 00236 g[1] = 0 ; 00237 for ( i = 3; i < nt; i += 2 ) { 00238 g[i] = 0.25 * ( ff0[ n3f*i ] - ff0[ n3f*(i-2) ] ) ; 00239 } 00240 g[nt] = 0 ; 00241 00242 00243 // Coefficients pairs de G 00244 //------------------------ 00245 // Ces coefficients sont egaux aux coefficients pairs du developpement de 00246 // f. 00247 // NB: le facteur 0.5 est du a la normalisation de fft991; si fft991 00248 // donnait exactement les coef. des cosinus, ce facteur serait 1. 00249 00250 g[0] = cf0[0] ; 00251 for (i=2; i<nm1; i += 2 ) g[i] = 0.5 * cf0[ n3c*i ] ; 00252 g[nm1] = cf0[ n3c*nm1 ] ; 00253 00254 // Transformation de Fourier inverse de G 00255 //--------------------------------------- 00256 00257 // FFT inverse 00258 F77_fft991( g, t1, trigo, facto, &inc, &jump, &nm1, &lot, &isign) ; 00259 00260 // Valeurs de f deduites de celles de G 00261 //------------------------------------- 00262 00263 for ( i = 1; i < nm1s2 ; i++ ) { 00264 // ... indice du pt symetrique de psi par rapport a pi/2: 00265 int isym = nm1 - i ; 00266 00267 double fp = 0.5 * ( g[i] + g[isym] ) ; 00268 double fm = 0.5 * ( g[i] - g[isym] ) / sinp[i] ; 00269 ff0[ n3f*i ] = fp + fm ; 00270 ff0[ n3f*isym ] = fp - fm ; 00271 } 00272 00273 //... cas particuliers: 00274 ff0[0] = g[0] + fmoins0 ; 00275 ff0[ n3f*nm1 ] = g[0] - fmoins0 ; 00276 ff0[ n3f*nm1s2 ] = g[nm1s2] ; 00277 00278 00279 } // fin de la boucle sur r 00280 00281 //----------------------------------------------------------------------- 00282 // partie sin(m phi) avec m pair : transformation cos(2 l theta) inverse 00283 //----------------------------------------------------------------------- 00284 00285 j++ ; 00286 00287 if ( (j != 1) && (j != n1f-1 ) ) { 00288 // on effectue le calcul seulement dans les cas ou les coef en phi ne sont 00289 // pas nuls 00290 00291 for (k=0; k<n3c; k++) { 00292 00293 int i0 = n2n3c * j + k ; // indice de depart 00294 double* cf0 = cf + i0 ; // tableau des donnees a transformer 00295 00296 i0 = n2n3f * j + k ; // indice de depart 00297 double* ff0 = ff + i0 ; // tableau resultat 00298 00299 /* 00300 * NB: dans les commentaires qui suivent, psi designe la variable de [0, pi] 00301 * reliee a x par x = cos(psi/2) et F(psi) = f(x(psi)). 00302 */ 00303 00304 // Calcul des coefficients de Fourier de la fonction 00305 // G(psi) = F+(psi) + F_(psi) sin(psi) 00306 // en fonction des coefficients en cos(2l theta) de f: 00307 00308 // Coefficients impairs de G 00309 //-------------------------- 00310 00311 double c1 = cf0[n3c] ; 00312 00313 double som = 0; 00314 ff0[n3f] = 0 ; 00315 for ( i = 3; i < nt; i += 2 ) { 00316 ff0[ n3f*i ] = cf0[ n3c*i ] - c1 ; 00317 som += ff0[ n3f*i ] ; 00318 } 00319 00320 // Valeur en psi=0 de la partie antisymetrique de F, F_ : 00321 double fmoins0 = nm1s2 * c1 + som ; 00322 00323 // Coef. impairs de G 00324 // NB: le facteur 0.25 est du a la normalisation de fft991; si fft991 00325 // donnait exactement les coef. des sinus, ce facteur serait -0.5. 00326 g[1] = 0 ; 00327 for ( i = 3; i < nt; i += 2 ) { 00328 g[i] = 0.25 * ( ff0[ n3f*i ] - ff0[ n3f*(i-2) ] ) ; 00329 } 00330 g[nt] = 0 ; 00331 00332 00333 // Coefficients pairs de G 00334 //------------------------ 00335 // Ces coefficients sont egaux aux coefficients pairs du developpement de 00336 // f. 00337 // NB: le facteur 0.5 est du a la normalisation de fft991; si fft991 00338 // donnait exactement les coef. des cosinus, ce facteur serait 1. 00339 00340 g[0] = cf0[0] ; 00341 for (i=2; i<nm1; i += 2 ) g[i] = 0.5 * cf0[ n3c*i ] ; 00342 g[nm1] = cf0[ n3c*nm1 ] ; 00343 00344 // Transformation de Fourier inverse de G 00345 //--------------------------------------- 00346 00347 // FFT inverse 00348 F77_fft991( g, t1, trigo, facto, &inc, &jump, &nm1, &lot, &isign) ; 00349 00350 // Valeurs de f deduites de celles de G 00351 //------------------------------------- 00352 00353 for ( i = 1; i < nm1s2 ; i++ ) { 00354 // ... indice du pt symetrique de psi par rapport a pi/2: 00355 int isym = nm1 - i ; 00356 00357 double fp = 0.5 * ( g[i] + g[isym] ) ; 00358 double fm = 0.5 * ( g[i] - g[isym] ) / sinp[i] ; 00359 ff0[ n3f*i ] = fp + fm ; 00360 ff0[ n3f*isym ] = fp - fm ; 00361 } 00362 00363 //... cas particuliers: 00364 ff0[0] = g[0] + fmoins0 ; 00365 ff0[ n3f*nm1 ] = g[0] - fmoins0 ; 00366 ff0[ n3f*nm1s2 ] = g[nm1s2] ; 00367 00368 00369 } // fin de la boucle sur r 00370 00371 } // fin du cas ou le calcul etait necessaire (i.e. ou les 00372 // coef en phi n'etaient pas nuls) 00373 00374 // On passe au cas m pair suivant: 00375 j+=3 ; 00376 00377 } // fin de la boucle sur les cas m pair 00378 00379 //## 00380 if (n1f<=3) { // cas m=0 seulement (symetrie axiale) 00381 free (t1) ; 00382 free (g) ; 00383 return ; 00384 } 00385 00386 //======================================================================= 00387 // Cas m impair 00388 //======================================================================= 00389 00390 j = 2 ; 00391 00392 while (j<n1f-1) { //le dernier coef en phi n'est pas considere 00393 // (car nul) 00394 00395 //-------------------------------------------------------------------------- 00396 // partie cos(m phi) avec m impair : transformation sin((2 l+1) theta) inv. 00397 //-------------------------------------------------------------------------- 00398 00399 for (k=0; k<n3c; k++) { 00400 00401 int i0 = n2n3c * j + k ; // indice de depart 00402 double* cf0 = cf + i0 ; // tableau des donnees a transformer 00403 00404 i0 = n2n3f * j + k ; // indice de depart 00405 double* ff0 = ff + i0 ; // tableau resultat 00406 00407 // Calcul des coefficients du developpement en cos(2 l theta) 00408 // de la fonction h(theta) := f(theta) sin(theta) 00409 // en fonction de ceux de f (le resultat est stoke dans le tableau t1) : 00410 t1[0] = .5 * cf0[0] ; 00411 for (i=1; i<nm1; i++) { 00412 t1[i] = .5 * ( cf0[ n3c*i ] - cf0[ n3c*(i-1) ] ) ; 00413 } 00414 t1[nm1] = -.5 * cf0[ n3c*(nt-2) ] ; 00415 00416 /* 00417 * NB: dans les commentaires qui suivent, psi designe la variable de [0, pi] 00418 * reliee a theta par psi = 2 theta et F(psi) = h(theta(psi)). 00419 */ 00420 00421 // Calcul des coefficients de Fourier de la fonction 00422 // G(psi) = F+(psi) + F_(psi) sin(psi) 00423 // en fonction des coefficients en cos(2l theta) de h: 00424 00425 // Coefficients impairs de G 00426 //-------------------------- 00427 00428 double c1 = t1[1] ; 00429 00430 double som = 0; 00431 ff0[n3f] = 0 ; 00432 for ( i = 3; i < nt; i += 2 ) { 00433 ff0[ n3f*i ] = t1[i] - c1 ; 00434 som += ff0[ n3f*i ] ; 00435 } 00436 00437 // Valeur en psi=0 de la partie antisymetrique de F, F_ : 00438 double fmoins0 = nm1s2 * c1 + som ; 00439 00440 // Coef. impairs de G 00441 // NB: le facteur 0.25 est du a la normalisation de fft991; si fft991 00442 // donnait exactement les coef. des sinus, ce facteur serait -0.5. 00443 g[1] = 0 ; 00444 for ( i = 3; i < nt; i += 2 ) { 00445 g[i] = 0.25 * ( ff0[ n3f*i ] - ff0[ n3f*(i-2) ] ) ; 00446 } 00447 g[nt] = 0 ; 00448 00449 00450 // Coefficients pairs de G 00451 //------------------------ 00452 // Ces coefficients sont egaux aux coefficients pairs du developpement de 00453 // h. 00454 // NB: le facteur 0.5 est du a la normalisation de fft991; si fft991 00455 // donnait exactement les coef. des cosinus, ce facteur serait 1. 00456 00457 g[0] = t1[0] ; 00458 for (i=2; i<nm1; i += 2 ) g[i] = 0.5 * t1[i] ; 00459 g[nm1] = t1[nm1] ; 00460 00461 // Transformation de Fourier inverse de G 00462 //--------------------------------------- 00463 00464 // FFT inverse 00465 F77_fft991( g, t1, trigo, facto, &inc, &jump, &nm1, &lot, &isign) ; 00466 00467 // Valeurs de f deduites de celles de G 00468 //------------------------------------- 00469 00470 for ( i = 1; i < nm1s2 ; i++ ) { 00471 // ... indice du pt symetrique de psi par rapport a pi/2: 00472 int isym = nm1 - i ; 00473 00474 double fp = 0.5 * ( g[i] + g[isym] ) ; 00475 double fm = 0.5 * ( g[i] - g[isym] ) / sinp[i] ; 00476 ff0[ n3f*i ] = ( fp + fm ) / sinth[i] ; 00477 ff0[ n3f*isym ] = ( fp - fm ) / sinth[isym] ; 00478 } 00479 00480 //... cas particuliers: 00481 ff0[0] = 0 ; 00482 ff0[ n3f*nm1 ] = g[0] - fmoins0 ; 00483 ff0[ n3f*nm1s2 ] = g[nm1s2] / sinth[nm1s2]; 00484 00485 00486 } // fin de la boucle sur r 00487 00488 //-------------------------------------------------------------------------- 00489 // partie sin(m phi) avec m impair : transformation sin((2 l+1) theta) inv. 00490 //-------------------------------------------------------------------------- 00491 00492 j++ ; 00493 00494 if ( j != n1f-1 ) { 00495 // on effectue le calcul seulement dans les cas ou les coef en phi ne sont 00496 // pas nuls 00497 00498 for (k=0; k<n3c; k++) { 00499 00500 int i0 = n2n3c * j + k ; // indice de depart 00501 double* cf0 = cf + i0 ; // tableau des donnees a transformer 00502 00503 i0 = n2n3f * j + k ; // indice de depart 00504 double* ff0 = ff + i0 ; // tableau resultat 00505 00506 // Calcul des coefficients du developpement en cos(2 l theta) 00507 // de la fonction h(theta) := f(theta) sin(theta) 00508 // en fonction de ceux de f (le resultat est stoke dans le tableau t1) : 00509 t1[0] = .5 * cf0[0] ; 00510 for (i=1; i<nm1; i++) { 00511 t1[i] = .5 * ( cf0[ n3c*i ] - cf0[ n3c*(i-1) ] ) ; 00512 } 00513 t1[nm1] = -.5 * cf0[ n3c*(nt-2) ] ; 00514 00515 /* 00516 * NB: dans les commentaires qui suivent, psi designe la variable de [0, pi] 00517 * reliee a theta par psi = 2 theta et F(psi) = h(theta(psi)). 00518 */ 00519 00520 // Calcul des coefficients de Fourier de la fonction 00521 // G(psi) = F+(psi) + F_(psi) sin(psi) 00522 // en fonction des coefficients en cos(2l theta) de h: 00523 00524 // Coefficients impairs de G 00525 //-------------------------- 00526 00527 double c1 = t1[1] ; 00528 00529 double som = 0; 00530 ff0[n3f] = 0 ; 00531 for ( i = 3; i < nt; i += 2 ) { 00532 ff0[ n3f*i ] = t1[i] - c1 ; 00533 som += ff0[ n3f*i ] ; 00534 } 00535 00536 // Valeur en psi=0 de la partie antisymetrique de F, F_ : 00537 double fmoins0 = nm1s2 * c1 + som ; 00538 00539 // Coef. impairs de G 00540 // NB: le facteur 0.25 est du a la normalisation de fft991; si fft991 00541 // donnait exactement les coef. des sinus, ce facteur serait -0.5. 00542 g[1] = 0 ; 00543 for ( i = 3; i < nt; i += 2 ) { 00544 g[i] = 0.25 * ( ff0[ n3f*i ] - ff0[ n3f*(i-2) ] ) ; 00545 } 00546 g[nt] = 0 ; 00547 00548 00549 // Coefficients pairs de G 00550 //------------------------ 00551 // Ces coefficients sont egaux aux coefficients pairs du developpement de 00552 // h. 00553 // NB: le facteur 0.5 est du a la normalisation de fft991; si fft991 00554 // donnait exactement les coef. des cosinus, ce facteur serait 1. 00555 00556 g[0] = t1[0] ; 00557 for (i=2; i<nm1; i += 2 ) g[i] = 0.5 * t1[i] ; 00558 g[nm1] = t1[nm1] ; 00559 00560 // Transformation de Fourier inverse de G 00561 //--------------------------------------- 00562 00563 // FFT inverse 00564 F77_fft991( g, t1, trigo, facto, &inc, &jump, &nm1, &lot, &isign) ; 00565 00566 // Valeurs de f deduites de celles de G 00567 //------------------------------------- 00568 00569 for ( i = 1; i < nm1s2 ; i++ ) { 00570 // ... indice du pt symetrique de psi par rapport a pi/2: 00571 int isym = nm1 - i ; 00572 00573 double fp = 0.5 * ( g[i] + g[isym] ) ; 00574 double fm = 0.5 * ( g[i] - g[isym] ) / sinp[i] ; 00575 ff0[ n3f*i ] = ( fp + fm ) / sinth[i] ; 00576 ff0[ n3f*isym ] = ( fp - fm ) / sinth[isym] ; 00577 } 00578 00579 //... cas particuliers: 00580 ff0[0] = 0 ; 00581 ff0[ n3f*nm1 ] = g[0] - fmoins0 ; 00582 ff0[ n3f*nm1s2 ] = g[nm1s2] / sinth[nm1s2]; 00583 00584 00585 } // fin de la boucle sur r 00586 00587 } // fin du cas ou le calcul etait necessaire (i.e. ou les 00588 // coef en phi n'etaient pas nuls) 00589 00590 // On passe au cas m impair suivant: 00591 j+=3 ; 00592 00593 } // fin de la boucle sur les cas m impair 00594 00595 // Menage 00596 free (t1) ; 00597 free (g) ; 00598 00599 }
1.4.6