00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 char som_symy_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Operators/som_symy.C,v 1.1.1.1 2001/11/20 15:19:29 e_gourgoulhon Exp $" ;
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 #include <math.h>
00063
00064
00065
00066
00067
00068
00069
00073
00074 void som_r_cheb_symy
00075 (double* ti, const int nr, const int nt, const int np, const double x,
00076 double* trtp) {
00077
00078
00079 int i, j, k ;
00080 double* pi = ti ;
00081 double* po = trtp ;
00082
00083
00084 double* cheb = new double [nr] ;
00085 cheb[0] = 1. ;
00086 cheb[1] = x ;
00087 for (i=2; i<nr; i++) {
00088 cheb[i] = 2*x* cheb[i-1] - cheb[i-2] ;
00089 }
00090
00091
00092 for (j=0 ; j<nt ; j++) {
00093 *po = 0 ;
00094
00095 for (i=0 ; i<nr ; i++) {
00096 *po += (*pi) * cheb[i] ;
00097 pi++ ;
00098 }
00099 po++ ;
00100 }
00101
00102 if (np > 1) {
00103
00104
00105 pi += nr*nt ;
00106 po += nt ;
00107
00108
00109
00110 for (k=2 ; k<np+1 ; k+=2) {
00111 for (j=0 ; j<nt ; j++) {
00112
00113 *po = 0 ;
00114 for (i=0 ; i<nr ; i++) {
00115 *po += (*pi) * cheb[i] ;
00116 pi++ ;
00117 }
00118 po++ ;
00119 }
00120
00121 pi += nr*nt ;
00122 po += nt ;
00123 }
00124
00125 }
00126
00127
00128 delete [] cheb ;
00129 }
00130
00131
00132
00136
00137 void som_r_chebu_symy
00138 (double* ti, const int nr, const int nt, const int np, const double x, double* trtp) {
00139
00140
00141 int i, j, k ;
00142 double* pi = ti ;
00143 double* po = trtp ;
00144
00145
00146 double* cheb = new double [nr] ;
00147 cheb[0] = 1. ;
00148 cheb[1] = x ;
00149 for (i=2; i<nr; i++) {
00150 cheb[i] = 2*x* cheb[i-1] - cheb[i-2] ;
00151 }
00152
00153
00154 for (j=0 ; j<nt ; j++) {
00155 *po = 0 ;
00156
00157 for (i=0 ; i<nr ; i++) {
00158 *po += (*pi) * cheb[i] ;
00159 pi++ ;
00160 }
00161 po++ ;
00162 }
00163
00164 if (np > 1) {
00165
00166
00167 pi += nr*nt ;
00168 po += nt ;
00169
00170
00171
00172 for (k=2 ; k<np+1 ; k+=2) {
00173 for (j=0 ; j<nt ; j++) {
00174
00175 *po = 0 ;
00176 for (i=0 ; i<nr ; i++) {
00177 *po += (*pi) * cheb[i] ;
00178 pi++ ;
00179 }
00180 po++ ;
00181 }
00182
00183 pi += nr*nt ;
00184 po += nt ;
00185 }
00186
00187 }
00188
00189
00190 delete [] cheb ;
00191
00192 }
00193
00197
00198 void som_r_chebpim_p_symy
00199 (double* ti, const int nr, const int nt, const int np, const double x, double* trtp) {
00200
00201
00202 int i, j, k ;
00203 double* pi = ti ;
00204 double* po = trtp ;
00205
00206
00207 double* cheb = new double [2*nr] ;
00208 cheb[0] = 1. ;
00209 cheb[1] = x ;
00210 for (i=2 ; i<2*nr ; i++) {
00211 cheb[i] = 2*x* cheb[i-1] - cheb[i-2] ;
00212 }
00213
00214
00215 int m = 0;
00216 for (j=0 ; j<nt ; j++) {
00217 *po = 0 ;
00218
00219 for (i=0 ; i<nr ; i++) {
00220 *po += (*pi) * cheb[2*i] ;
00221 pi++ ;
00222 }
00223 po++ ;
00224 }
00225
00226 if (np > 1) {
00227
00228
00229 pi += nr*nt ;
00230 po += nt ;
00231
00232
00233
00234 for (k=2 ; k<np+1 ; k+=2) {
00235 m = (k/2) % 2 ;
00236 for (j=0 ; j<nt ; j++) {
00237
00238 *po = 0 ;
00239 for (i=0 ; i<nr ; i++) {
00240 *po += (*pi) * cheb[2*i + m] ;
00241 pi++ ;
00242 }
00243 po++ ;
00244 }
00245
00246 pi += nr*nt ;
00247 po += nt ;
00248 }
00249
00250 }
00251
00252
00253 delete [] cheb ;
00254
00255 }
00256
00260
00261 void som_r_chebpim_i_symy
00262 (double* ti, const int nr, const int nt, const int np, const double x, double* trtp) {
00263
00264
00265 int i, j, k ;
00266 double* pi = ti ;
00267 double* po = trtp ;
00268
00269
00270 double* cheb = new double [2*nr] ;
00271 cheb[0] = 1. ;
00272 cheb[1] = x ;
00273 for (i=2 ; i<2*nr ; i++) {
00274 cheb[i] = 2*x* cheb[i-1] - cheb[i-2] ;
00275 }
00276
00277
00278 int m = 0;
00279 for (j=0 ; j<nt ; j++) {
00280 *po = 0 ;
00281
00282 for (i=0 ; i<nr ; i++) {
00283 *po += (*pi) * cheb[2*i+1] ;
00284 pi++ ;
00285 }
00286 po++ ;
00287 }
00288
00289 if (np > 1) {
00290
00291
00292 pi += nr*nt ;
00293 po += nt ;
00294
00295
00296
00297 for (k=2 ; k<np+1 ; k+=2) {
00298 m = (k/2) % 2 ;
00299 for (j=0 ; j<nt ; j++) {
00300
00301 *po = 0 ;
00302 for (i=0 ; i<nr ; i++) {
00303 *po += (*pi) * cheb[2*i + 1 - m] ;
00304 pi++ ;
00305 }
00306 po++ ;
00307 }
00308
00309 pi += nr*nt ;
00310 po += nt ;
00311 }
00312
00313 }
00314
00315
00316 delete [] cheb ;
00317
00318 }
00319
00320
00321
00322
00323
00324
00325
00329
00330 void som_tet_cossin_cp_symy
00331 (double* ti, const int nt, const int np,
00332 const double tet, double* to) {
00333
00334
00335 int j, k ;
00336 double* pi = ti ;
00337 double* po = to ;
00338
00339
00340 double* cossin = new double [2*nt] ;
00341 for (j=0 ; j<2*nt ; j +=2) {
00342 cossin[j] = cos(j * tet) ;
00343 cossin[j+1] = sin((j+1) * tet) ;
00344 }
00345
00346
00347 *po = 0 ;
00348 for (j=0 ; j<nt ; j++) {
00349 *po += (*pi) * cossin[2*j] ;
00350 pi++ ;
00351 }
00352 po++ ;
00353
00354 if (np > 1) {
00355
00356
00357 pi += nt ;
00358 po++ ;
00359
00360
00361 for (k=2 ; k<np+1 ; k+=2) {
00362 int m = (k/2) % 2 ;
00363 (*po) = 0 ;
00364 for (j=0 ; j<nt ; j++) {
00365 *po += (*pi) * cossin[2*j + m] ;
00366 pi++ ;
00367 }
00368 po++ ;
00369
00370
00371 pi += nt ;
00372 po++ ;
00373
00374 }
00375 }
00376
00377
00378 delete [] cossin ;
00379 }
00380
00384
00385 void som_tet_cossin_ci_symy
00386 (double* ti, const int nt, const int np,
00387 const double tet, double* to) {
00388
00389
00390 int j, k ;
00391 double* pi = ti ;
00392 double* po = to ;
00393
00394
00395 double* cossin = new double [2*nt] ;
00396 for (j=0 ; j<2*nt ; j +=2) {
00397 cossin[j] = cos((j+1) * tet) ;
00398 cossin[j+1] = sin(j * tet) ;
00399 }
00400
00401
00402 *po = 0 ;
00403 for (j=0 ; j<nt ; j++) {
00404 *po += (*pi) * cossin[2*j] ;
00405 pi++ ;
00406 }
00407 po++ ;
00408
00409 if (np > 1) {
00410
00411
00412 pi += nt ;
00413 po++ ;
00414
00415
00416 for (k=2 ; k<np+1 ; k+=2) {
00417 int m = (k/2) % 2 ;
00418 (*po) = 0 ;
00419 for (j=0 ; j<nt ; j++) {
00420 *po += (*pi) * cossin[2*j + m] ;
00421 pi++ ;
00422 }
00423 po++ ;
00424
00425
00426 pi += nt ;
00427 po++ ;
00428
00429 }
00430 }
00431
00432
00433 delete [] cossin ;
00434 }
00435
00436
00437
00438
00439
00440
00441 void som_phi_cossin_symy
00442 (double* ti, const int np, const double phi, double* xo) {
00443
00444 *xo = ti[0] ;
00445
00446
00447 for (int k=2 ; k<np-1 ; k +=2 ) {
00448 int m = k/2 ;
00449 *xo += ti[k] * cos(m * phi) ;
00450 }
00451 *xo += ti[np] * cos(np/2 * phi) ;
00452 }
00453