00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 char op_lapang_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Operators/op_lapang.C,v 1.7 2009/10/23 12:55:04 j_novak 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
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 #include <stdlib.h>
00081
00082
00083 #include "mtbl_cf.h"
00084 #include "grilles.h"
00085 #include "type_parite.h"
00086
00087
00088
00089
00090
00091
00092 void _lapang_pas_prevu(Mtbl_cf* mt, int l) {
00093 cout << "Unknwon theta basis in the operator Mtbl_cf::lapang() !" << endl ;
00094 cout << " basis : " << hex << (mt->base).b[l] << endl ;
00095 abort () ;
00096 }
00097
00098
00099
00100
00101 void _lapang_t_leg(Mtbl_cf* mt, int l)
00102 {
00103
00104 Tbl* tb = mt->t[l] ;
00105
00106
00107 if (tb->get_etat() == ETATZERO) {
00108 return ;
00109 }
00110
00111 int k, j, i ;
00112
00113 int nr = mt->get_mg()->get_nr(l) ;
00114 int nt = mt->get_mg()->get_nt(l) ;
00115 int np = mt->get_mg()->get_np(l) ;
00116
00117 int np1 = ( np == 1 ) ? 1 : np+1 ;
00118
00119 double* tuu = tb->t ;
00120
00121
00122
00123 for (j=0 ; j<nt ; j++) {
00124 int ll = j ;
00125 double xl = - ll*(ll+1) ;
00126 for (i=0 ; i<nr ; i++) {
00127 tuu[i] *= xl ;
00128 }
00129 tuu += nr ;
00130 }
00131
00132
00133 tuu += nt*nr ;
00134
00135
00136 for (k=2 ; k<np1 ; k++) {
00137 int m = k/2 ;
00138 tuu += (m/2)*nr ;
00139 for (j=m/2 ; j<nt ; j++) {
00140 int ll = j;
00141 double xl = - ll*(ll+1) ;
00142 for (i=0 ; i<nr ; i++) {
00143 tuu[i] *= xl ;
00144 }
00145 tuu += nr ;
00146 }
00147 }
00148
00149
00150 }
00151
00152
00153
00154
00155
00156 void _lapang_t_leg_p(Mtbl_cf* mt, int l)
00157 {
00158
00159 Tbl* tb = mt->t[l] ;
00160
00161
00162 if (tb->get_etat() == ETATZERO) {
00163 return ;
00164 }
00165
00166 int k, j, i ;
00167
00168 int nr = mt->get_mg()->get_nr(l) ;
00169 int nt = mt->get_mg()->get_nt(l) ;
00170 int np = mt->get_mg()->get_np(l) ;
00171
00172 int np1 = ( np == 1 ) ? 1 : np+1 ;
00173
00174 double* tuu = tb->t ;
00175
00176
00177
00178 for (j=0 ; j<nt ; j++) {
00179 int ll = 2*j ;
00180 double xl = - ll*(ll+1) ;
00181 for (i=0 ; i<nr ; i++) {
00182 tuu[i] *= xl ;
00183 }
00184 tuu += nr ;
00185 }
00186
00187
00188 tuu += nt*nr ;
00189
00190
00191 for (k=2 ; k<np1 ; k++) {
00192 int m = k/2 ;
00193 tuu += (m/2)*nr ;
00194 for (j=m/2 ; j<nt ; j++) {
00195 int ll = 2*j + (m%2) ;
00196 double xl = - ll*(ll+1) ;
00197 for (i=0 ; i<nr ; i++) {
00198 tuu[i] *= xl ;
00199 }
00200 tuu += nr ;
00201 }
00202 }
00203
00204
00205 }
00206
00207
00208
00209
00210
00211 void _lapang_t_leg_pp(Mtbl_cf* mt, int l)
00212 {
00213
00214 Tbl* tb = mt->t[l] ;
00215
00216
00217 if (tb->get_etat() == ETATZERO) {
00218 return ;
00219 }
00220
00221 int k, j, i ;
00222
00223 int nr = mt->get_mg()->get_nr(l) ;
00224 int nt = mt->get_mg()->get_nt(l) ;
00225 int np = mt->get_mg()->get_np(l) ;
00226
00227 int np1 = ( np == 1 ) ? 1 : np+1 ;
00228
00229 double* tuu = tb->t ;
00230
00231
00232
00233 for (j=0 ; j<nt ; j++) {
00234 int ll = 2*j ;
00235 double xl = - ll*(ll+1) ;
00236 for (i=0 ; i<nr ; i++) {
00237 tuu[i] *= xl ;
00238 }
00239 tuu += nr ;
00240 }
00241
00242
00243 tuu += nt*nr ;
00244
00245
00246 for (k=2 ; k<np1 ; k++) {
00247 int m = 2*(k/2);
00248 tuu += (m/2)*nr ;
00249 for (j=m/2 ; j<nt ; j++) {
00250 int ll = 2*j ;
00251 double xl = - ll*(ll+1) ;
00252 for (i=0 ; i<nr ; i++) {
00253 tuu[i] *= xl ;
00254 }
00255 tuu += nr ;
00256 }
00257 }
00258
00259
00260 }
00261
00262
00263
00264
00265
00266 void _lapang_t_leg_i(Mtbl_cf* mt, int l)
00267 {
00268
00269 Tbl* tb = mt->t[l] ;
00270
00271
00272 if (tb->get_etat() == ETATZERO) {
00273 return ;
00274 }
00275
00276 int k, j, i ;
00277
00278 int nr = mt->get_mg()->get_nr(l) ;
00279 int nt = mt->get_mg()->get_nt(l) ;
00280 int np = mt->get_mg()->get_np(l) ;
00281
00282 int np1 = ( np == 1 ) ? 1 : np+1 ;
00283
00284 double* tuu = tb->t ;
00285
00286
00287
00288 for (j=0 ; j<nt-1 ; j++) {
00289 int ll = 2*j+1 ;
00290 double xl = - ll*(ll+1) ;
00291 for (i=0 ; i<nr ; i++) {
00292 tuu[i] *= xl ;
00293 }
00294 tuu += nr ;
00295 }
00296 tuu += nr ;
00297
00298
00299 tuu += nt*nr ;
00300
00301
00302 for (k=2 ; k<np1 ; k++) {
00303 int m = k/2 ;
00304 tuu += ((m+1)/2)*nr ;
00305 for (j=(m+1)/2 ; j<nt-1 ; j++) {
00306 int ll = 2*j + ((m+1)%2) ;
00307 double xl = - ll*(ll+1) ;
00308 for (i=0 ; i<nr ; i++) {
00309 tuu[i] *= xl ;
00310 }
00311 tuu += nr ;
00312 }
00313 tuu += nr ;
00314 }
00315
00316
00317 }
00318
00319
00320
00321
00322
00323 void _lapang_t_leg_ip(Mtbl_cf* mt, int l)
00324 {
00325
00326 Tbl* tb = mt->t[l] ;
00327
00328
00329 if (tb->get_etat() == ETATZERO) {
00330 return ;
00331 }
00332
00333 int k, j, i ;
00334
00335 int nr = mt->get_mg()->get_nr(l) ;
00336 int nt = mt->get_mg()->get_nt(l) ;
00337 int np = mt->get_mg()->get_np(l) ;
00338
00339 int np1 = ( np == 1 ) ? 1 : np+1 ;
00340
00341 double* tuu = tb->t ;
00342
00343
00344
00345 for (j=0 ; j<nt-1 ; j++) {
00346 int ll = 2*j+1 ;
00347 double xl = - ll*(ll+1) ;
00348 for (i=0 ; i<nr ; i++) {
00349 tuu[i] *= xl ;
00350 }
00351 tuu += nr ;
00352 }
00353 tuu += nr ;
00354
00355
00356 tuu += nt*nr ;
00357
00358
00359 for (k=2 ; k<np1 ; k++) {
00360 int m = 2*(k/2);
00361 tuu += (m/2)*nr ;
00362 for (j=m/2 ; j<nt-1 ; j++) {
00363 int ll = 2*j+1 ;
00364 double xl = - ll*(ll+1) ;
00365 for (i=0 ; i<nr ; i++) {
00366 tuu[i] *= xl ;
00367 }
00368 tuu += nr ;
00369 }
00370 tuu += nr ;
00371 }
00372
00373
00374 assert (tuu == tb->t + (np+1)*nt*nr) ;
00375
00376
00377 }
00378
00379
00380
00381
00382
00383 void _lapang_t_leg_pi(Mtbl_cf* mt, int l)
00384 {
00385
00386 Tbl* tb = mt->t[l] ;
00387
00388
00389 if (tb->get_etat() == ETATZERO) {
00390 return ;
00391 }
00392
00393 int k, j, i ;
00394
00395 int nr = mt->get_mg()->get_nr(l) ;
00396 int nt = mt->get_mg()->get_nt(l) ;
00397 int np = mt->get_mg()->get_np(l) ;
00398
00399 double* tuu = tb->t ;
00400
00401
00402
00403
00404 for (j=0 ; j<nt-1 ; j++) {
00405 int ll = 2*j+1 ;
00406 double xl = - ll*(ll+1) ;
00407 for (i=0 ; i<nr ; i++) {
00408 tuu[i] *= xl ;
00409 }
00410 tuu += nr ;
00411 }
00412 tuu += nr ;
00413
00414 if (np==1) {
00415 return ;
00416 }
00417
00418
00419
00420 tuu += nt*nr ;
00421
00422
00423
00424 for (j=0 ; j<nt-1 ; j++) {
00425 int ll = 2*j+1 ;
00426 double xl = - ll*(ll+1) ;
00427 for (i=0 ; i<nr ; i++) {
00428 tuu[i] *= xl ;
00429 }
00430 tuu += nr ;
00431 }
00432 tuu += nr ;
00433
00434
00435
00436 for (k=3 ; k<np+1 ; k++) {
00437 int m = (k%2 == 0) ? k-1 : k ;
00438 tuu += (m-1)/2*nr ;
00439 for (j=(m-1)/2 ; j<nt-1 ; j++) {
00440 int ll = 2*j+1 ;
00441 double xl = - ll*(ll+1) ;
00442 for (i=0 ; i<nr ; i++) {
00443 tuu[i] *= xl ;
00444 }
00445 tuu += nr ;
00446 }
00447 tuu += nr ;
00448 }
00449
00450
00451 assert (tuu == tb->t + (np+1)*nt*nr) ;
00452
00453
00454 }
00455
00456
00457
00458
00459
00460 void _lapang_t_leg_ii(Mtbl_cf* mt, int l)
00461 {
00462
00463 Tbl* tb = mt->t[l] ;
00464
00465
00466 if (tb->get_etat() == ETATZERO) {
00467 return ;
00468 }
00469
00470 int k, j, i ;
00471
00472 int nr = mt->get_mg()->get_nr(l) ;
00473 int nt = mt->get_mg()->get_nt(l) ;
00474 int np = mt->get_mg()->get_np(l) ;
00475
00476 double* tuu = tb->t ;
00477
00478
00479
00480
00481 for (j=0 ; j<nt-1 ; j++) {
00482 int ll = 2*j ;
00483 double xl = - ll*(ll+1) ;
00484 for (i=0 ; i<nr ; i++) {
00485 tuu[i] *= xl ;
00486 }
00487 tuu += nr ;
00488 }
00489 tuu += nr ;
00490
00491 if (np==1) {
00492 return ;
00493 }
00494
00495
00496
00497 tuu += nt*nr ;
00498
00499
00500
00501 for (j=0 ; j<nt-1 ; j++) {
00502 int ll = 2*j ;
00503 double xl = - ll*(ll+1) ;
00504 for (i=0 ; i<nr ; i++) {
00505 tuu[i] *= xl ;
00506 }
00507 tuu += nr ;
00508 }
00509 tuu += nr ;
00510
00511
00512
00513 for (k=3 ; k<np+1 ; k++) {
00514 int m = (k%2 == 0) ? k-1 : k ;
00515 tuu += (m+1)/2*nr ;
00516 for (j=(m+1)/2 ; j<nt-1 ; j++) {
00517 int ll = 2*j ;
00518 double xl = - ll*(ll+1) ;
00519 for (i=0 ; i<nr ; i++) {
00520 tuu[i] *= xl ;
00521 }
00522 tuu += nr ;
00523 }
00524 tuu += nr ;
00525 }
00526
00527
00528 assert (tuu == tb->t + (np+1)*nt*nr) ;
00529
00530
00531 }
00532
00533
00534
00535
00536
00537 void _lapang_t_leg_mp(Mtbl_cf* mt, int l)
00538 {
00539
00540 Tbl* tb = mt->t[l] ;
00541
00542
00543 if (tb->get_etat() == ETATZERO) {
00544 return ;
00545 }
00546
00547 int k, j, i ;
00548
00549 int nr = mt->get_mg()->get_nr(l) ;
00550 int nt = mt->get_mg()->get_nt(l) ;
00551 int np = mt->get_mg()->get_np(l) ;
00552
00553 int np1 = ( np == 1 ) ? 1 : np+1 ;
00554
00555 double* tuu = tb->t ;
00556
00557
00558
00559 for (j=0 ; j<nt ; j++) {
00560 int ll = j ;
00561 double xl = - ll*(ll+1) ;
00562 for (i=0 ; i<nr ; i++) {
00563 tuu[i] *= xl ;
00564 }
00565 tuu += nr ;
00566 }
00567
00568
00569 tuu += nt*nr ;
00570
00571
00572 for (k=2 ; k<np1 ; k++) {
00573 int m = 2*(k/2);
00574 tuu += m*nr ;
00575 for (j=m ; j<nt ; j++) {
00576 int ll = j ;
00577 double xl = - ll*(ll+1) ;
00578 for (i=0 ; i<nr ; i++) {
00579 tuu[i] *= xl ;
00580 }
00581 tuu += nr ;
00582 }
00583 }
00584
00585
00586 }
00587
00588
00589
00590
00591 void _lapang_t_leg_mi(Mtbl_cf* mt, int l)
00592 {
00593
00594 Tbl* tb = mt->t[l] ;
00595
00596
00597 if (tb->get_etat() == ETATZERO) {
00598 return ;
00599 }
00600
00601 int k, j, i ;
00602
00603 int nr = mt->get_mg()->get_nr(l) ;
00604 int nt = mt->get_mg()->get_nt(l) ;
00605 int np = mt->get_mg()->get_np(l) ;
00606
00607 int np1 = ( np == 1 ) ? 1 : np+1 ;
00608
00609 double* tuu = tb->t ;
00610
00611
00612
00613 for (j=0 ; j<nt ; j++) {
00614 int ll = j ;
00615 double xl = - ll*(ll+1) ;
00616 for (i=0 ; i<nr ; i++) {
00617 tuu[i] *= xl ;
00618 }
00619 tuu += nr ;
00620 }
00621
00622
00623 tuu += nt*nr ;
00624
00625
00626 for (k=2 ; k<np1 ; k++) {
00627 int m = 2*((k-1)/2) + 1;
00628 tuu += m*nr ;
00629 for (j=m ; j<nt ; j++) {
00630 int ll = j ;
00631 double xl = - ll*(ll+1) ;
00632 for (i=0 ; i<nr ; i++) {
00633 tuu[i] *= xl ;
00634 }
00635 tuu += nr ;
00636 }
00637 }
00638
00639
00640 }