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_mult_ct_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Operators/op_mult_ct.C,v 1.6 2009/10/09 14:00:54 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 #include "tbl.h"
00076
00077
00078
00079
00080
00081
00082 void _mult_ct_pas_prevu(Tbl * tb, int& base) {
00083 cout << "mult_ct pas prevu..." << endl ;
00084 cout << "Tbl: " << tb << " base: " << base << endl ;
00085 abort () ;
00086 exit(-1) ;
00087 }
00088
00089
00090
00091
00092
00093 void _mult_ct_t_cos(Tbl* tb, int & b)
00094 {
00095
00096
00097 if (tb->get_etat() == ETATZERO) {
00098 int base_r = b & MSQ_R ;
00099 int base_p = b & MSQ_P ;
00100 switch(base_r){
00101 case(R_CHEBPI_P):
00102 b = R_CHEBPI_I | base_p | T_COS ;
00103 break ;
00104 case(R_CHEBPI_I):
00105 b = R_CHEBPI_P | base_p | T_COS ;
00106 break ;
00107 default:
00108 b = base_r | base_p | T_COS ;
00109 break;
00110 }
00111 return ;
00112 }
00113
00114
00115 assert(tb->get_etat() == ETATQCQ) ;
00116
00117
00118 int nr = (tb->dim).dim[0] ;
00119 int nt = (tb->dim).dim[1] ;
00120 int np = (tb->dim).dim[2] ;
00121 np = np - 2 ;
00122
00123
00124 double* som = new double [nr] ;
00125
00126
00127 double* xo = new double[(tb->dim).taille] ;
00128
00129
00130 for (int i=0; i<(tb->dim).taille; i++) {
00131 xo[i] = 0 ;
00132 }
00133
00134
00135 double* xi = tb->t ;
00136 double* xci = xi ;
00137 double* xco = xo ;
00138
00139
00140
00141
00142
00143 xci += nr * (nt-1) ;
00144 xco += nr * (nt-1) ;
00145
00146
00147 for (int i=0 ; i<nr ; i++) {
00148 som[i] = 0.5*xci[i] ;
00149 xco[i] = 0. ;
00150 }
00151
00152
00153 for (int j=nt-2 ; j > 0 ; j--) {
00154
00155 xci -= 2*nr ;
00156 xco -= nr ;
00157
00158 for (int i=0 ; i<nr ; i++ ) {
00159 som[i] += 0.5*xci[i] ;
00160 xco[i] = som[i] ;
00161 }
00162 xci += nr ;
00163 for (int i=0; i<nr; i++)
00164 som[i] = 0.5*xci[i] ;
00165 }
00166
00167 xci -= nr ;
00168 for (int i=0 ; i<nr ; i++ ) {
00169 xco[i] += 0.5*xci[i] ;
00170 }
00171 xco -= nr ;
00172 for (int i=0; i<nr; i++)
00173 xco[i] = som[i] ;
00174
00175
00176 xci += nr*nt ;
00177 xco += nr*nt ;
00178
00179
00180 xci += nr*nt ;
00181 xco += nr*nt ;
00182
00183
00184 for (int k=2 ; k<np+1 ; k++) {
00185
00186
00187
00188 xci += nr * (nt-1) ;
00189 xco += nr * (nt-1) ;
00190
00191
00192 for (int i=0 ; i<nr ; i++) {
00193 som[i] = 0.5*xci[i] ;
00194 xco[i] = 0. ;
00195 }
00196
00197
00198 for (int j=nt-2 ; j > 0 ; j--) {
00199
00200 xci -= 2*nr ;
00201 xco -= nr ;
00202
00203 for (int i=0 ; i<nr ; i++ ) {
00204 som[i] += 0.5*xci[i] ;
00205 xco[i] = som[i] ;
00206 }
00207 xci += nr ;
00208 for (int i=0; i<nr; i++)
00209 som[i] = 0.5*xci[i] ;
00210 }
00211
00212 xci -= nr ;
00213 for (int i = 0; i<nr; i++) {
00214 xco[i] += 0.5*xci[i] ;
00215 }
00216 xco -= nr ;
00217 for (int i=0; i<nr; i++)
00218 xco[i] = som[i] ;
00219
00220 xci += nr*nt ;
00221 xco += nr*nt ;
00222 }
00223
00224
00225 delete [] tb->t ;
00226 tb->t = xo ;
00227
00228
00229 delete [] som ;
00230
00231
00232 int base_r = b & MSQ_R ;
00233 int base_p = b & MSQ_P ;
00234 switch(base_r){
00235 case(R_CHEBPI_P):
00236 b = R_CHEBPI_I | base_p | T_COS ;
00237 break ;
00238 case(R_CHEBPI_I):
00239 b = R_CHEBPI_P | base_p | T_COS ;
00240 break ;
00241 default:
00242 b = base_r | base_p | T_COS ;
00243 break;
00244 }
00245 }
00246
00247
00248
00249
00250
00251 void _mult_ct_t_sin(Tbl* tb, int & b)
00252 {
00253
00254 if (tb->get_etat() == ETATZERO) {
00255 int base_r = b & MSQ_R ;
00256 int base_p = b & MSQ_P ;
00257 switch(base_r){
00258 case(R_CHEBPI_P):
00259 b = R_CHEBPI_I | base_p | T_SIN ;
00260 break ;
00261 case(R_CHEBPI_I):
00262 b = R_CHEBPI_P | base_p | T_SIN ;
00263 break ;
00264 default:
00265 b = base_r | base_p | T_SIN ;
00266 break;
00267 }
00268 return ;
00269 }
00270
00271
00272 assert(tb->get_etat() == ETATQCQ) ;
00273
00274
00275 int nr = (tb->dim).dim[0] ;
00276 int nt = (tb->dim).dim[1] ;
00277 int np = (tb->dim).dim[2] ;
00278 np = np - 2 ;
00279
00280
00281 double* som = new double [nr] ;
00282
00283
00284 double* xo = new double[(tb->dim).taille] ;
00285
00286
00287 for (int i=0; i<(tb->dim).taille; i++) {
00288 xo[i] = 0 ;
00289 }
00290
00291
00292 double* xi = tb->t ;
00293 double* xci = xi ;
00294 double* xco = xo ;
00295
00296
00297
00298
00299
00300 xci += nr * (nt-1) ;
00301 xco += nr * (nt-1) ;
00302
00303
00304 for (int i=0 ; i<nr ; i++) {
00305 som[i] = 0.5*xci[i] ;
00306 xco[i] = 0. ;
00307 }
00308
00309
00310 for (int j=nt-2 ; j > 0 ; j--) {
00311
00312 xci -= 2*nr ;
00313 xco -= nr ;
00314
00315 for (int i=0 ; i<nr ; i++ ) {
00316 som[i] += 0.5*xci[i] ;
00317 xco[i] = som[i] ;
00318 }
00319 xci += nr ;
00320 for (int i=0; i<nr; i++) {
00321 som[i] = 0.5*xci[i] ;
00322 }
00323 }
00324
00325 xci -= nr ;
00326 xco -= nr ;
00327 for (int i =0; i<nr ; i++) {
00328 xco[i] = 0. ;
00329 }
00330
00331 xci += nr*nt ;
00332 xco += nr*nt ;
00333
00334
00335 xci += nr*nt ;
00336 xco += nr*nt ;
00337
00338
00339 for (int k=2 ; k<np+1 ; k++) {
00340
00341
00342
00343 xci += nr * (nt-1) ;
00344 xco += nr * (nt-1) ;
00345
00346
00347 for (int i=0 ; i<nr ; i++) {
00348 som[i] = 0.5*xci[i] ;
00349 xco[i] = 0. ;
00350 }
00351
00352
00353 for (int j=nt-2 ; j > 0 ; j--) {
00354
00355 xci -= 2*nr ;
00356 xco -= nr ;
00357
00358 for (int i=0 ; i<nr ; i++ ) {
00359 som[i] += 0.5*xci[i] ;
00360 xco[i] = som[i] ;
00361 }
00362 xci += nr ;
00363 for (int i=0; i<nr; i++) {
00364 som[i] = 0.5*xci[i] ;
00365 }
00366 }
00367
00368 xci -= nr ;
00369 xco -= nr ;
00370 for (int i=0; i<nr; i++) {
00371 xco[i] = 0.0 ;
00372 }
00373
00374 xci += nr*nt ;
00375 xco += nr*nt ;
00376 }
00377
00378
00379 delete [] tb->t ;
00380 tb->t = xo ;
00381
00382
00383 delete [] som ;
00384
00385
00386 int base_r = b & MSQ_R ;
00387 int base_p = b & MSQ_P ;
00388 switch(base_r){
00389 case(R_CHEBPI_P):
00390 b = R_CHEBPI_I | base_p | T_SIN ;
00391 break ;
00392 case(R_CHEBPI_I):
00393 b = R_CHEBPI_P | base_p | T_SIN ;
00394 break ;
00395 default:
00396 b = base_r | base_p | T_SIN ;
00397 break;
00398 }
00399 }
00400
00401
00402
00403
00404 void _mult_ct_t_cos_p(Tbl* tb, int & b)
00405 {
00406
00407
00408 if (tb->get_etat() == ETATZERO) {
00409 int base_r = b & MSQ_R ;
00410 int base_p = b & MSQ_P ;
00411 b = base_r | base_p | T_COS_I ;
00412 return ;
00413 }
00414
00415
00416 assert(tb->get_etat() == ETATQCQ) ;
00417
00418
00419 int nr = (tb->dim).dim[0] ;
00420 int nt = (tb->dim).dim[1] ;
00421 int np = (tb->dim).dim[2] ;
00422 np = np - 2 ;
00423
00424
00425 double* som = new double [nr] ;
00426
00427
00428 double* xo = new double[(tb->dim).taille] ;
00429
00430
00431 for (int i=0; i<(tb->dim).taille; i++) {
00432 xo[i] = 0 ;
00433 }
00434
00435
00436 double* xi = tb->t ;
00437 double* xci = xi ;
00438 double* xco = xo ;
00439
00440
00441
00442
00443
00444 xci += nr * (nt-1) ;
00445 xco += nr * (nt-1) ;
00446
00447
00448 for (int i=0 ; i<nr ; i++) {
00449 som[i] = 0.5*xci[i] ;
00450 xco[i] = 0. ;
00451 }
00452
00453
00454 for (int j=nt-2 ; j > 0 ; j--) {
00455
00456 xci -= nr ;
00457 xco -= nr ;
00458
00459 for (int i=0 ; i<nr ; i++ ) {
00460 som[i] += 0.5*xci[i] ;
00461 xco[i] = som[i] ;
00462 som[i] = 0.5*xci[i] ;
00463 }
00464 }
00465
00466 if (nt > 1) {
00467
00468 xci -= nr ;
00469 xco -= nr ;
00470 for (int i=0 ; i<nr ; i++ ) {
00471 xco[i] = som[i]+xci[i] ;
00472 }
00473 }
00474
00475
00476 xci += nr*nt ;
00477 xco += nr*nt ;
00478
00479
00480 xci += nr*nt ;
00481 xco += nr*nt ;
00482
00483
00484 for (int k=2 ; k<np+1 ; k++) {
00485
00486
00487
00488 xci += nr * (nt-1) ;
00489 xco += nr * (nt-1) ;
00490
00491
00492 for (int i=0 ; i<nr ; i++) {
00493 som[i] = 0.5*xci[i] ;
00494 xco[i] = 0. ;
00495 }
00496
00497
00498 for (int j=nt-2 ; j > 0 ; j--) {
00499
00500 xci -= nr ;
00501 xco -= nr ;
00502
00503 for (int i=0 ; i<nr ; i++ ) {
00504 som[i] += 0.5*xci[i] ;
00505 xco[i] = som[i] ;
00506 som[i] = 0.5*xci[i] ;
00507 }
00508 }
00509
00510 xci -= nr ;
00511 xco -= nr ;
00512 for (int i = 0; i<nr; i++) {
00513 xco[i] = xci[i] + som[i] ;
00514 }
00515
00516 xci += nr*nt ;
00517 xco += nr*nt ;
00518 }
00519
00520
00521 delete [] tb->t ;
00522 tb->t = xo ;
00523
00524
00525 delete [] som ;
00526
00527
00528 int base_r = b & MSQ_R ;
00529 int base_p = b & MSQ_P ;
00530 b = base_r | base_p | T_COS_I ;
00531 }
00532
00533
00534
00535
00536
00537 void _mult_ct_t_sin_p(Tbl* tb, int & b)
00538 {
00539
00540 if (tb->get_etat() == ETATZERO) {
00541 int base_r = b & MSQ_R ;
00542 int base_p = b & MSQ_P ;
00543 b = base_r | base_p | T_SIN_I ;
00544 return ;
00545 }
00546
00547
00548 assert(tb->get_etat() == ETATQCQ) ;
00549
00550
00551 int nr = (tb->dim).dim[0] ;
00552 int nt = (tb->dim).dim[1] ;
00553 int np = (tb->dim).dim[2] ;
00554 np = np - 2 ;
00555
00556
00557 double* som = new double [nr] ;
00558
00559
00560 double* xo = new double[(tb->dim).taille] ;
00561
00562
00563 for (int i=0; i<(tb->dim).taille; i++) {
00564 xo[i] = 0 ;
00565 }
00566
00567
00568 double* xi = tb->t ;
00569 double* xci = xi ;
00570 double* xco = xo ;
00571
00572
00573
00574
00575
00576 xci += nr * (nt-1) ;
00577 xco += nr * (nt-1) ;
00578
00579
00580 for (int i=0 ; i<nr ; i++) {
00581 som[i] = 0.5*xci[i] ;
00582 xco[i] = 0. ;
00583 }
00584
00585
00586 for (int j=nt-2 ; j > 0 ; j--) {
00587
00588 xci -= nr ;
00589 xco -= nr ;
00590
00591 for (int i=0 ; i<nr ; i++ ) {
00592 som[i] += 0.5*xci[i] ;
00593 xco[i] = som[i] ;
00594 som[i] = 0.5*xci[i] ;
00595 }
00596 }
00597
00598 if (nt > 1) {
00599 xci -= nr ;
00600 xco -= nr ;
00601 for (int i =0; i<nr ; i++) {
00602 xco[i] = som[i] ;
00603 }
00604 }
00605
00606
00607 xci += nr*nt ;
00608 xco += nr*nt ;
00609
00610
00611 xci += nr*nt ;
00612 xco += nr*nt ;
00613
00614
00615 for (int k=2 ; k<np+1 ; k++) {
00616
00617
00618
00619 xci += nr * (nt-1) ;
00620 xco += nr * (nt-1) ;
00621
00622
00623 for (int i=0 ; i<nr ; i++) {
00624 som[i] = 0.5*xci[i] ;
00625 xco[i] = 0. ;
00626 }
00627
00628
00629 for (int j=nt-2 ; j > 0 ; j--) {
00630
00631 xci -= nr ;
00632 xco -= nr ;
00633
00634 for (int i=0 ; i<nr ; i++ ) {
00635 som[i] += 0.5*xci[i] ;
00636 xco[i] = som[i] ;
00637 som[i] = 0.5*xci[i] ;
00638 }
00639 }
00640
00641 xci -= nr ;
00642 xco -= nr ;
00643 for (int i=0; i<nr; i++) {
00644 xco[i] = som[i] ;
00645 }
00646
00647 xci += nr*nt ;
00648 xco += nr*nt ;
00649 }
00650
00651
00652 delete [] tb->t ;
00653 tb->t = xo ;
00654
00655
00656 delete [] som ;
00657
00658
00659 int base_r = b & MSQ_R ;
00660 int base_p = b & MSQ_P ;
00661 b = base_r | base_p | T_SIN_I ;
00662
00663 }
00664
00665
00666
00667
00668 void _mult_ct_t_sin_i(Tbl* tb, int & b)
00669 {
00670
00671 if (tb->get_etat() == ETATZERO) {
00672 int base_r = b & MSQ_R ;
00673 int base_p = b & MSQ_P ;
00674 b = base_r | base_p | T_SIN_P ;
00675 return ;
00676 }
00677
00678
00679 assert(tb->get_etat() == ETATQCQ) ;
00680
00681
00682 int nr = (tb->dim).dim[0] ;
00683 int nt = (tb->dim).dim[1] ;
00684 int np = (tb->dim).dim[2] ;
00685 np = np - 2 ;
00686
00687
00688 double* som = new double [nr] ;
00689
00690
00691 double* xo = new double[(tb->dim).taille] ;
00692
00693
00694 for (int i=0; i<(tb->dim).taille; i++) {
00695 xo[i] = 0 ;
00696 }
00697
00698
00699 double* xi = tb->t ;
00700 double* xci = xi ;
00701 double* xco = xo ;
00702
00703
00704
00705
00706
00707 xci += nr * (nt-1) ;
00708 xco += nr * (nt-1) ;
00709
00710
00711 for (int i=0 ; i<nr ; i++) {
00712 som[i] = 0. ;
00713 }
00714
00715
00716 for (int j=nt-1 ; j > 0 ; j--) {
00717
00718 xci -= nr ;
00719
00720 for (int i=0 ; i<nr ; i++ ) {
00721 som[i] += 0.5*xci[i] ;
00722 xco[i] = som[i] ;
00723 som[i] = 0.5*xci[i] ;
00724 }
00725 xco -= nr ;
00726 }
00727 for (int i=0; i<nr; i++) {
00728 xco[i] = 0. ;
00729 }
00730
00731
00732 xci += nr*nt ;
00733 xco += nr*nt ;
00734
00735
00736 xci += nr*nt ;
00737 xco += nr*nt ;
00738
00739
00740 for (int k=2 ; k<np+1 ; k++) {
00741
00742
00743
00744 xci += nr * (nt-1) ;
00745 xco += nr * (nt-1) ;
00746
00747
00748 for (int i=0 ; i<nr ; i++) {
00749 som[i] = 0. ;
00750 }
00751
00752
00753 for (int j=nt-1 ; j > 0 ; j--) {
00754
00755 xci -= nr ;
00756
00757 for (int i=0 ; i<nr ; i++ ) {
00758 som[i] += 0.5*xci[i] ;
00759 xco[i] = som[i] ;
00760 som[i] = 0.5*xci[i] ;
00761 }
00762 xco -= nr ;
00763 }
00764 for (int i=0; i<nr; i++) {
00765 xco[i] = 0. ;
00766 }
00767
00768
00769 xci += nr*nt ;
00770 xco += nr*nt ;
00771 }
00772
00773
00774 delete [] tb->t ;
00775 tb->t = xo ;
00776
00777
00778 delete [] som ;
00779
00780
00781 int base_r = b & MSQ_R ;
00782 int base_p = b & MSQ_P ;
00783 b = base_r | base_p | T_SIN_P ;
00784
00785 }
00786
00787
00788
00789 void _mult_ct_t_cos_i(Tbl* tb, int & b)
00790 {
00791
00792 if (tb->get_etat() == ETATZERO) {
00793 int base_r = b & MSQ_R ;
00794 int base_p = b & MSQ_P ;
00795 b = base_r | base_p | T_COS_P ;
00796 return ;
00797 }
00798
00799
00800 assert(tb->get_etat() == ETATQCQ) ;
00801
00802
00803 int nr = (tb->dim).dim[0] ;
00804 int nt = (tb->dim).dim[1] ;
00805 int np = (tb->dim).dim[2] ;
00806 np = np - 2 ;
00807
00808
00809 double* som = new double [nr] ;
00810
00811
00812 double* xo = new double[(tb->dim).taille] ;
00813
00814
00815 for (int i=0; i<(tb->dim).taille; i++) {
00816 xo[i] = 0 ;
00817 }
00818
00819
00820 double* xi = tb->t ;
00821 double* xci = xi ;
00822 double* xco = xo ;
00823
00824
00825
00826
00827
00828 xci += nr * (nt-1) ;
00829 xco += nr * (nt-1) ;
00830
00831
00832 for (int i=0 ; i<nr ; i++) {
00833 som[i] = 0. ;
00834 }
00835
00836
00837 for (int j=nt-1 ; j > 0 ; j--) {
00838
00839 xci -= nr ;
00840
00841 for (int i=0 ; i<nr ; i++ ) {
00842 som[i] += 0.5*xci[i] ;
00843 xco[i] = som[i] ;
00844 som[i] = 0.5*xci[i] ;
00845 }
00846 xco -= nr ;
00847 }
00848
00849 for (int i=0 ; i<nr ; i++) {
00850 xco[i] = som[i] ;
00851 }
00852
00853 xci += nr*nt ;
00854 xco += nr*nt ;
00855
00856
00857 xci += nr*nt ;
00858 xco += nr*nt ;
00859
00860
00861 for (int k=2 ; k<np+1 ; k++) {
00862
00863
00864
00865 xci += nr * (nt-1) ;
00866 xco += nr * (nt-1) ;
00867
00868
00869 for (int i=0 ; i<nr ; i++) {
00870 som[i] = 0. ;
00871 }
00872
00873
00874 for (int j=nt-1 ; j > 0 ; j--) {
00875
00876 xci -= nr ;
00877
00878 for (int i=0 ; i<nr ; i++ ) {
00879 som[i] += 0.5*xci[i] ;
00880 xco[i] = som[i] ;
00881 som[i] = 0.5*xci[i] ;
00882 }
00883 xco -= nr ;
00884 }
00885
00886 for (int i=0 ; i<nr ; i++) {
00887 xco[i] = som[i] ;
00888 }
00889
00890 xci += nr*nt ;
00891 xco += nr*nt ;
00892 }
00893
00894
00895 delete [] tb->t ;
00896 tb->t = xo ;
00897
00898
00899 delete [] som ;
00900
00901
00902 int base_r = b & MSQ_R ;
00903 int base_p = b & MSQ_P ;
00904 b = base_r | base_p | T_COS_P ;
00905
00906 }
00907
00908
00909
00910 void _mult_ct_t_cossin_cp(Tbl* tb, int & b)
00911 {
00912
00913 if (tb->get_etat() == ETATZERO) {
00914 int base_r = b & MSQ_R ;
00915 int base_p = b & MSQ_P ;
00916 b = base_r | base_p | T_COSSIN_CI ;
00917 return ;
00918 }
00919
00920
00921 assert(tb->get_etat() == ETATQCQ) ;
00922
00923
00924 int nr = (tb->dim).dim[0] ;
00925 int nt = (tb->dim).dim[1] ;
00926 int np = (tb->dim).dim[2] ;
00927 np = np - 2 ;
00928
00929
00930 double* som = new double [nr] ;
00931
00932
00933 double* xo = new double[(tb->dim).taille] ;
00934
00935
00936 for (int i=0; i<(tb->dim).taille; i++) {
00937 xo[i] = 0 ;
00938 }
00939
00940
00941 double* xi = tb->t ;
00942 double* xci = xi ;
00943 double* xco = xo ;
00944
00945
00946 int m = 0 ;
00947
00948
00949 xci += nr * (nt-1) ;
00950 xco += nr * (nt-1) ;
00951
00952
00953 for (int i=0 ; i<nr ; i++) {
00954 som[i] = 0.5*xci[i] ;
00955 xco[i] = 0. ;
00956 }
00957
00958
00959 for (int j=nt-2 ; j > 0 ; j--) {
00960
00961 xci -= nr ;
00962 xco -= nr ;
00963
00964 for (int i=0 ; i<nr ; i++ ) {
00965 som[i] += 0.5*xci[i] ;
00966 xco[i] = som[i] ;
00967 som[i] = 0.5*xci[i] ;
00968 }
00969 }
00970
00971 xci -= nr ;
00972 xco -= nr ;
00973 for (int i = 0; i<nr; i++) {
00974 xco[i] = xci[i] + som[i] ;
00975 }
00976
00977 xci += nr*nt ;
00978 xco += nr*nt ;
00979
00980
00981 xci += nr*nt ;
00982 xco += nr*nt ;
00983
00984
00985 for (int k=2 ; k<np+1 ; k++) {
00986 m = (k/2) % 2 ;
00987
00988 switch(m) {
00989 case 0:
00990
00991
00992 xci += nr * (nt-1) ;
00993 xco += nr * (nt-1) ;
00994
00995
00996 for (int i=0 ; i<nr ; i++) {
00997 som[i] = 0.5*xci[i] ;
00998 xco[i] = 0. ;
00999 }
01000
01001
01002 for (int j=nt-2 ; j > 0 ; j--) {
01003
01004 xci -= nr ;
01005 xco -= nr ;
01006
01007 for (int i=0 ; i<nr ; i++ ) {
01008 som[i] += 0.5*xci[i] ;
01009 xco[i] = som[i] ;
01010 som[i] = 0.5*xci[i] ;
01011 }
01012 }
01013
01014 xci -= nr ;
01015 xco -= nr ;
01016 for (int i = 0; i<nr; i++) {
01017 xco[i] = xci[i] + som[i] ;
01018 }
01019
01020 xci += nr*nt ;
01021 xco += nr*nt ;
01022 break ;
01023
01024 case 1:
01025
01026
01027 xci += nr * (nt-1) ;
01028 xco += nr * (nt-1) ;
01029
01030
01031 for (int i=0 ; i<nr ; i++) {
01032 som[i] = 0. ;
01033 }
01034
01035
01036 for (int j=nt-1 ; j > 0 ; j--) {
01037
01038 xci -= nr ;
01039
01040 for (int i=0 ; i<nr ; i++ ) {
01041 som[i] += 0.5*xci[i] ;
01042 xco[i] = som[i] ;
01043 som[i] = 0.5*xci[i] ;
01044 }
01045 xco -= nr ;
01046 }
01047 for (int i=0; i<nr; i++) {
01048 xco[i] = 0. ;
01049 }
01050
01051
01052 xci += nr*nt ;
01053 xco += nr*nt ;
01054 break;
01055 }
01056 }
01057
01058
01059 delete [] tb->t ;
01060 tb->t = xo ;
01061
01062
01063 delete [] som ;
01064
01065
01066 int base_r = b & MSQ_R ;
01067 int base_p = b & MSQ_P ;
01068 b = base_r | base_p | T_COSSIN_CI ;
01069 }
01070
01071
01072
01073
01074 void _mult_ct_t_cossin_ci(Tbl* tb, int & b)
01075 {
01076
01077 if (tb->get_etat() == ETATZERO) {
01078 int base_r = b & MSQ_R ;
01079 int base_p = b & MSQ_P ;
01080 b = base_r | base_p | T_COSSIN_CP ;
01081 return ;
01082 }
01083
01084
01085 assert(tb->get_etat() == ETATQCQ) ;
01086
01087
01088 int nr = (tb->dim).dim[0] ;
01089 int nt = (tb->dim).dim[1] ;
01090 int np = (tb->dim).dim[2] ;
01091 np = np - 2 ;
01092
01093
01094 double* som = new double [nr] ;
01095
01096
01097 double* xo = new double[(tb->dim).taille] ;
01098
01099
01100 for (int i=0; i<(tb->dim).taille; i++) {
01101 xo[i] = 0 ;
01102 }
01103
01104
01105 double* xi = tb->t ;
01106 double* xci = xi ;
01107 double* xco = xo ;
01108
01109
01110 int m = 0 ;
01111
01112
01113 xci += nr * (nt-1) ;
01114 xco += nr * (nt-1) ;
01115
01116
01117 for (int i=0 ; i<nr ; i++) {
01118 som[i] = 0. ;
01119 }
01120
01121
01122 for (int j=nt-1 ; j > 0 ; j--) {
01123
01124 xci -= nr ;
01125
01126 for (int i=0 ; i<nr ; i++ ) {
01127 som[i] += 0.5*xci[i] ;
01128 xco[i] = som[i] ;
01129 som[i] = 0.5*xci[i] ;
01130 }
01131 xco -= nr ;
01132 }
01133
01134 for (int i=0 ; i<nr ; i++) {
01135 xco[i] = som[i] ;
01136 }
01137
01138 xci += nr*nt ;
01139 xco += nr*nt ;
01140
01141
01142 xci += nr*nt ;
01143 xco += nr*nt ;
01144
01145
01146 for (int k=2 ; k<np+1 ; k++) {
01147 m = (k/2) % 2 ;
01148
01149 switch(m) {
01150 case 0:
01151
01152
01153 xci += nr * (nt-1) ;
01154 xco += nr * (nt-1) ;
01155
01156
01157 for (int i=0 ; i<nr ; i++) {
01158 som[i] = 0. ;
01159 }
01160
01161
01162 for (int j=nt-1 ; j > 0 ; j--) {
01163
01164 xci -= nr ;
01165
01166 for (int i=0 ; i<nr ; i++ ) {
01167 som[i] += 0.5*xci[i] ;
01168 xco[i] = som[i] ;
01169 som[i] = 0.5*xci[i] ;
01170 }
01171 xco -= nr ;
01172 }
01173
01174 for (int i=0 ; i<nr ; i++) {
01175 xco[i] = som[i] ;
01176 }
01177
01178 xci += nr*nt ;
01179 xco += nr*nt ;
01180 break ;
01181
01182 case 1:
01183
01184
01185 xci += nr * (nt-1) ;
01186 xco += nr * (nt-1) ;
01187
01188
01189 for (int i=0 ; i<nr ; i++) {
01190 som[i] = 0.5*xci[i] ;
01191 xco[i] = 0. ;
01192 }
01193
01194
01195 for (int j=nt-2 ; j > 0 ; j--) {
01196
01197 xci -= nr ;
01198 xco -= nr ;
01199
01200 for (int i=0 ; i<nr ; i++ ) {
01201 som[i] += 0.5*xci[i] ;
01202 xco[i] = som[i] ;
01203 som[i] = 0.5*xci[i] ;
01204 }
01205 }
01206
01207 xci -= nr ;
01208 xco -= nr ;
01209 for (int i=0; i<nr; i++) {
01210 xco[i] = som[i] ;
01211 }
01212
01213 xci += nr*nt ;
01214 xco += nr*nt ;
01215 break ;
01216 }
01217 }
01218
01219
01220 delete [] tb->t ;
01221 tb->t = xo ;
01222
01223
01224 delete [] som ;
01225
01226
01227 int base_r = b & MSQ_R ;
01228 int base_p = b & MSQ_P ;
01229 b = base_r | base_p | T_COSSIN_CP ;
01230 }
01231
01232
01233
01234
01235 void _mult_ct_t_cossin_si(Tbl* tb, int & b)
01236 {
01237
01238 if (tb->get_etat() == ETATZERO) {
01239 int base_r = b & MSQ_R ;
01240 int base_p = b & MSQ_P ;
01241 b = base_r | base_p | T_COSSIN_SP ;
01242 return ;
01243 }
01244
01245
01246 assert(tb->get_etat() == ETATQCQ) ;
01247
01248
01249 int nr = (tb->dim).dim[0] ;
01250 int nt = (tb->dim).dim[1] ;
01251 int np = (tb->dim).dim[2] ;
01252 np = np - 2 ;
01253
01254
01255 double* som = new double [nr] ;
01256
01257
01258 double* xo = new double[(tb->dim).taille] ;
01259
01260
01261 for (int i=0; i<(tb->dim).taille; i++) {
01262 xo[i] = 0 ;
01263 }
01264
01265
01266 double* xi = tb->t ;
01267 double* xci = xi ;
01268 double* xco = xo ;
01269
01270
01271 int m = 0 ;
01272
01273
01274 xci += nr * (nt-1) ;
01275 xco += nr * (nt-1) ;
01276
01277
01278 for (int i=0 ; i<nr ; i++) {
01279 som[i] = 0. ;
01280 }
01281
01282
01283 for (int j=nt-1 ; j > 0 ; j--) {
01284
01285 xci -= nr ;
01286
01287 for (int i=0 ; i<nr ; i++ ) {
01288 som[i] += 0.5*xci[i] ;
01289 xco[i] = som[i] ;
01290 som[i] = 0.5*xci[i] ;
01291 }
01292 xco -= nr ;
01293 }
01294 for (int i=0; i<nr; i++) {
01295 xco[i] = 0. ;
01296 }
01297
01298
01299 xci += nr*nt ;
01300 xco += nr*nt ;
01301
01302
01303 xci += nr*nt ;
01304 xco += nr*nt ;
01305
01306
01307 for (int k=2 ; k<np+1 ; k++) {
01308 m = (k/2) % 2 ;
01309
01310 switch(m) {
01311 case 0:
01312
01313
01314 xci += nr * (nt-1) ;
01315 xco += nr * (nt-1) ;
01316
01317
01318 for (int i=0 ; i<nr ; i++) {
01319 som[i] = 0. ;
01320 }
01321
01322
01323 for (int j=nt-1 ; j > 0 ; j--) {
01324
01325 xci -= nr ;
01326
01327 for (int i=0 ; i<nr ; i++ ) {
01328 som[i] += 0.5*xci[i] ;
01329 xco[i] = som[i] ;
01330 som[i] = 0.5*xci[i] ;
01331 }
01332 xco -= nr ;
01333 }
01334 for (int i=0; i<nr; i++) {
01335 xco[i] = 0. ;
01336 }
01337
01338
01339 xci += nr*nt ;
01340 xco += nr*nt ;
01341 break ;
01342
01343 case 1:
01344
01345
01346 xci += nr * (nt-1) ;
01347 xco += nr * (nt-1) ;
01348
01349
01350 for (int i=0 ; i<nr ; i++) {
01351 som[i] = 0.5*xci[i] ;
01352 xco[i] = 0. ;
01353 }
01354
01355
01356 for (int j=nt-2 ; j > 0 ; j--) {
01357
01358 xci -= nr ;
01359 xco -= nr ;
01360
01361 for (int i=0 ; i<nr ; i++ ) {
01362 som[i] += 0.5*xci[i] ;
01363 xco[i] = som[i] ;
01364 som[i] = 0.5*xci[i] ;
01365 }
01366 }
01367
01368 xci -= nr ;
01369 xco -= nr ;
01370 for (int i = 0; i<nr; i++) {
01371 xco[i] = xci[i] + som[i] ;
01372 }
01373
01374 xci += nr*nt ;
01375 xco += nr*nt ;
01376 break ;
01377 }
01378 }
01379
01380
01381 delete [] tb->t ;
01382 tb->t = xo ;
01383
01384
01385 delete [] som ;
01386
01387
01388 int base_r = b & MSQ_R ;
01389 int base_p = b & MSQ_P ;
01390 b = base_r | base_p | T_COSSIN_SP ;
01391
01392
01393 }
01394
01395
01396
01397 void _mult_ct_t_cossin_sp(Tbl* tb, int & b)
01398 {
01399
01400 if (tb->get_etat() == ETATZERO) {
01401 int base_r = b & MSQ_R ;
01402 int base_p = b & MSQ_P ;
01403 b = base_r | base_p | T_COSSIN_SI ;
01404 return ;
01405 }
01406
01407
01408 assert(tb->get_etat() == ETATQCQ) ;
01409
01410
01411 int nr = (tb->dim).dim[0] ;
01412 int nt = (tb->dim).dim[1] ;
01413 int np = (tb->dim).dim[2] ;
01414 np = np - 2 ;
01415
01416
01417 double* som = new double [nr] ;
01418
01419
01420 double* xo = new double[(tb->dim).taille] ;
01421
01422
01423 for (int i=0; i<(tb->dim).taille; i++) {
01424 xo[i] = 0 ;
01425 }
01426
01427
01428 double* xi = tb->t ;
01429 double* xci = xi ;
01430 double* xco = xo ;
01431
01432
01433 int m = 0 ;
01434
01435
01436 xci += nr * (nt-1) ;
01437 xco += nr * (nt-1) ;
01438
01439
01440 for (int i=0 ; i<nr ; i++) {
01441 som[i] = 0.5*xci[i] ;
01442 xco[i] = 0. ;
01443 }
01444
01445
01446 for (int j=nt-2 ; j > 0 ; j--) {
01447
01448 xci -= nr ;
01449 xco -= nr ;
01450
01451 for (int i=0 ; i<nr ; i++ ) {
01452 som[i] += 0.5*xci[i] ;
01453 xco[i] = som[i] ;
01454 som[i] = 0.5*xci[i] ;
01455 }
01456 }
01457
01458 xci -= nr ;
01459 xco -= nr ;
01460 for (int i=0; i<nr; i++) {
01461 xco[i] = som[i] ;
01462 }
01463
01464 xci += nr*nt ;
01465 xco += nr*nt ;
01466
01467
01468 xci += nr*nt ;
01469 xco += nr*nt ;
01470
01471 for (int k=2 ; k<np+1 ; k++) {
01472 m = (k/2) % 2 ;
01473
01474 switch(m) {
01475 case 1:
01476
01477
01478 xci += nr * (nt-1) ;
01479 xco += nr * (nt-1) ;
01480
01481
01482 for (int i=0 ; i<nr ; i++) {
01483 som[i] = 0. ;
01484 }
01485
01486
01487 for (int j=nt-1 ; j > 0 ; j--) {
01488
01489 xci -= nr ;
01490
01491 for (int i=0 ; i<nr ; i++ ) {
01492 som[i] += 0.5*xci[i] ;
01493 xco[i] = som[i] ;
01494 som[i] = 0.5*xci[i] ;
01495 }
01496 xco -= nr ;
01497 }
01498
01499 for (int i=0 ; i<nr ; i++) {
01500 xco[i] = som[i] ;
01501 }
01502
01503 xci += nr*nt ;
01504 xco += nr*nt ;
01505 break ;
01506
01507 case 0:
01508
01509
01510 xci += nr * (nt-1) ;
01511 xco += nr * (nt-1) ;
01512
01513
01514 for (int i=0 ; i<nr ; i++) {
01515 som[i] = 0.5*xci[i] ;
01516 xco[i] = 0. ;
01517 }
01518
01519
01520 for (int j=nt-2 ; j > 0 ; j--) {
01521
01522 xci -= nr ;
01523 xco -= nr ;
01524
01525 for (int i=0 ; i<nr ; i++ ) {
01526 som[i] += 0.5*xci[i] ;
01527 xco[i] = som[i] ;
01528 som[i] = 0.5*xci[i] ;
01529 }
01530 }
01531
01532 xci -= nr ;
01533 xco -= nr ;
01534 for (int i=0; i<nr; i++) {
01535 xco[i] = som[i] ;
01536 }
01537
01538 xci += nr*nt ;
01539 xco += nr*nt ;
01540 break ;
01541 }
01542 }
01543
01544
01545 delete [] tb->t ;
01546 tb->t = xo ;
01547
01548
01549 delete [] som ;
01550
01551
01552 int base_r = b & MSQ_R ;
01553 int base_p = b & MSQ_P ;
01554 b = base_r | base_p | T_COSSIN_SI ;
01555
01556 }
01557
01558
01559
01560
01561 void _mult_ct_t_cossin_c(Tbl* tb, int & b)
01562 {
01563
01564 if (tb->get_etat() == ETATZERO) {
01565 int base_r = b & MSQ_R ;
01566 int base_p = b & MSQ_P ;
01567 switch(base_r){
01568 case(R_CHEBPI_P):
01569 b = R_CHEBPI_I | base_p | T_COSSIN_C ;
01570 break ;
01571 case(R_CHEBPI_I):
01572 b = R_CHEBPI_P | base_p | T_COSSIN_C ;
01573 break ;
01574 default:
01575 b = base_r | base_p | T_COSSIN_C ;
01576 break;
01577 }
01578 return ;
01579 }
01580
01581
01582 assert(tb->get_etat() == ETATQCQ) ;
01583
01584
01585 int nr = (tb->dim).dim[0] ;
01586 int nt = (tb->dim).dim[1] ;
01587 int np = (tb->dim).dim[2] ;
01588 np = np - 2 ;
01589
01590
01591 double* som = new double [nr] ;
01592
01593
01594 double* xo = new double[(tb->dim).taille] ;
01595
01596
01597 for (int i=0; i<(tb->dim).taille; i++) {
01598 xo[i] = 0 ;
01599 }
01600
01601
01602 double* xi = tb->t ;
01603 double* xci = xi ;
01604 double* xco = xo ;
01605
01606
01607 int m = 0 ;
01608
01609
01610 xci += nr * (nt-1) ;
01611 xco += nr * (nt-1) ;
01612
01613
01614 for (int i=0 ; i<nr ; i++) {
01615 som[i] = 0.5*xci[i] ;
01616 xco[i] = 0. ;
01617 }
01618
01619
01620 for (int j=nt-2 ; j > 0 ; j--) {
01621
01622 xci -= 2*nr ;
01623 xco -= nr ;
01624
01625 for (int i=0 ; i<nr ; i++ ) {
01626 som[i] += 0.5*xci[i] ;
01627 xco[i] = som[i] ;
01628 }
01629 xci += nr ;
01630 for (int i=0 ; i<nr ; i++ ) {
01631 som[i] = 0.5*xci[i] ;
01632 }
01633 }
01634
01635 xci -= nr ;
01636 for (int i=0; i<nr; i++) {
01637 xco[i] += 0.5*xci[i] ;
01638 }
01639 xco -= nr ;
01640 for (int i = 0; i<nr; i++) {
01641 xco[i] = som[i] ;
01642 }
01643
01644 xci += nr*nt ;
01645 xco += nr*nt ;
01646
01647
01648 xci += nr*nt ;
01649 xco += nr*nt ;
01650
01651
01652 for (int k=2 ; k<np+1 ; k++) {
01653 m = (k/2) % 2 ;
01654
01655 switch(m) {
01656 case 0:
01657
01658
01659 xci += nr * (nt-1) ;
01660 xco += nr * (nt-1) ;
01661
01662
01663 for (int i=0 ; i<nr ; i++) {
01664 som[i] = 0.5*xci[i] ;
01665 xco[i] = 0. ;
01666 }
01667
01668
01669 for (int j=nt-2 ; j > 0 ; j--) {
01670
01671 xci -= 2*nr ;
01672 xco -= nr ;
01673
01674 for (int i=0 ; i<nr ; i++ ) {
01675 som[i] += 0.5*xci[i] ;
01676 xco[i] = som[i] ;
01677 }
01678 xci += nr ;
01679 for (int i=0 ; i<nr ; i++ ) {
01680 som[i] = 0.5*xci[i] ;
01681 }
01682 }
01683
01684 xci -= nr ;
01685 for (int i=0; i<nr; i++) {
01686 xco[i] += 0.5*xci[i] ;
01687 }
01688 xco -= nr ;
01689 for (int i = 0; i<nr; i++) {
01690 xco[i] = som[i] ;
01691 }
01692
01693 xci += nr*nt ;
01694 xco += nr*nt ;
01695 break ;
01696
01697 case 1:
01698
01699
01700 xci += nr * (nt-1) ;
01701 xco += nr * (nt-1) ;
01702
01703
01704 for (int i=0 ; i<nr ; i++) {
01705 som[i] = 0.5*xci[i] ;
01706 xco[i] = 0.0 ;
01707 }
01708
01709
01710 for (int j=nt-2 ; j > 0 ; j--) {
01711
01712 xci -= 2*nr ;
01713 xco -= nr ;
01714
01715 for (int i=0 ; i<nr ; i++ ) {
01716 som[i] += 0.5*xci[i] ;
01717 xco[i] = som[i] ;
01718 }
01719 xci += nr ;
01720 for (int i=0 ; i<nr ; i++ ) {
01721 som[i] = 0.5*xci[i] ;
01722 }
01723 }
01724
01725 xci -= nr ;
01726 xco -= nr ;
01727 for (int i=0; i<nr; i++) {
01728 xco[i] = 0. ;
01729 }
01730
01731
01732 xci += nr*nt ;
01733 xco += nr*nt ;
01734 break;
01735 }
01736 }
01737
01738
01739 delete [] tb->t ;
01740 tb->t = xo ;
01741
01742
01743 delete [] som ;
01744
01745
01746 int base_r = b & MSQ_R ;
01747 int base_p = b & MSQ_P ;
01748 switch(base_r){
01749 case(R_CHEBPI_P):
01750 b = R_CHEBPI_I | base_p | T_COSSIN_C ;
01751 break ;
01752 case(R_CHEBPI_I):
01753 b = R_CHEBPI_P | base_p | T_COSSIN_C ;
01754 break ;
01755 default:
01756 b = base_r | base_p | T_COSSIN_C ;
01757 break;
01758 }
01759 }
01760
01761
01762
01763
01764 void _mult_ct_t_cossin_s(Tbl* tb, int & b)
01765 {
01766
01767 if (tb->get_etat() == ETATZERO) {
01768 int base_r = b & MSQ_R ;
01769 int base_p = b & MSQ_P ;
01770 switch(base_r){
01771 case(R_CHEBPI_P):
01772 b = R_CHEBPI_I | base_p | T_COSSIN_S ;
01773 break ;
01774 case(R_CHEBPI_I):
01775 b = R_CHEBPI_P | base_p | T_COSSIN_S ;
01776 break ;
01777 default:
01778 b = base_r | base_p | T_COSSIN_S ;
01779 break;
01780 }
01781 return ;
01782 }
01783
01784
01785 assert(tb->get_etat() == ETATQCQ) ;
01786
01787
01788 int nr = (tb->dim).dim[0] ;
01789 int nt = (tb->dim).dim[1] ;
01790 int np = (tb->dim).dim[2] ;
01791 np = np - 2 ;
01792
01793
01794 double* som = new double [nr] ;
01795
01796
01797 double* xo = new double[(tb->dim).taille] ;
01798
01799
01800 for (int i=0; i<(tb->dim).taille; i++) {
01801 xo[i] = 0 ;
01802 }
01803
01804
01805 double* xi = tb->t ;
01806 double* xci = xi ;
01807 double* xco = xo ;
01808
01809
01810 int m = 0 ;
01811
01812
01813 xci += nr * (nt-1) ;
01814 xco += nr * (nt-1) ;
01815
01816
01817 for (int i=0 ; i<nr ; i++) {
01818 som[i] = 0.5*xci[i] ;
01819 xco[i] = 0. ;
01820 }
01821
01822
01823 for (int j=nt-2 ; j > 0 ; j--) {
01824
01825 xci -= 2*nr ;
01826 xco -= nr ;
01827
01828 for (int i=0 ; i<nr ; i++ ) {
01829 som[i] += 0.5*xci[i] ;
01830 xco[i] = som[i] ;
01831 }
01832 xci += nr ;
01833 for (int i=0 ; i<nr ; i++ ) {
01834 som[i] = 0.5*xci[i] ;
01835 }
01836 }
01837
01838 xci -= nr ;
01839 xco -= nr ;
01840 for (int i=0; i<nr; i++) {
01841 xco[i] = 0.0 ;
01842 }
01843
01844 xci += nr*nt ;
01845 xco += nr*nt ;
01846
01847
01848 xci += nr*nt ;
01849 xco += nr*nt ;
01850
01851 for (int k=2 ; k<np+1 ; k++) {
01852 m = (k/2) % 2 ;
01853
01854 switch(m) {
01855 case 1:
01856
01857
01858 xci += nr * (nt-1) ;
01859 xco += nr * (nt-1) ;
01860
01861
01862 for (int i=0 ; i<nr ; i++) {
01863 som[i] = 0.5*xci[i] ;
01864 xco[i] = 0.0 ;
01865 }
01866
01867
01868 for (int j=nt-2 ; j > 0 ; j--) {
01869
01870 xci -= 2*nr ;
01871 xco -= nr ;
01872
01873 for (int i=0 ; i<nr ; i++ ) {
01874 som[i] += 0.5*xci[i] ;
01875 xco[i] = som[i] ;
01876 }
01877 xci += nr ;
01878 for (int i=0 ; i<nr ; i++ ) {
01879 som[i] = 0.5*xci[i] ;
01880 }
01881 }
01882
01883
01884 xci -= nr ;
01885 for (int i=0; i<nr; i++) {
01886 xco[i] += 0.5*xci[i] ;
01887 }
01888 xco -= nr ;
01889 for (int i=0 ; i<nr ; i++) {
01890 xco[i] = som[i] ;
01891 }
01892
01893 xci += nr*nt ;
01894 xco += nr*nt ;
01895 break ;
01896
01897 case 0:
01898
01899
01900 xci += nr * (nt-1) ;
01901 xco += nr * (nt-1) ;
01902
01903
01904 for (int i=0 ; i<nr ; i++) {
01905 som[i] = 0.5*xci[i] ;
01906 xco[i] = 0. ;
01907 }
01908
01909
01910 for (int j=nt-2 ; j > 0 ; j--) {
01911
01912 xci -= 2*nr ;
01913 xco -= nr ;
01914
01915 for (int i=0 ; i<nr ; i++ ) {
01916 som[i] += 0.5*xci[i] ;
01917 xco[i] = som[i] ;
01918 }
01919 xci += nr ;
01920 for (int i=0 ; i<nr ; i++ ) {
01921 som[i] = 0.5*xci[i] ;
01922 }
01923 }
01924
01925 xci -= nr ;
01926 xco -= nr ;
01927 for (int i=0; i<nr; i++) {
01928 xco[i] = 0.0 ;
01929 }
01930
01931 xci += nr*nt ;
01932 xco += nr*nt ;
01933 break ;
01934 }
01935 }
01936
01937
01938 delete [] tb->t ;
01939 tb->t = xo ;
01940
01941
01942 delete [] som ;
01943
01944
01945 int base_r = b & MSQ_R ;
01946 int base_p = b & MSQ_P ;
01947 switch(base_r){
01948 case(R_CHEBPI_P):
01949 b = R_CHEBPI_I | base_p | T_COSSIN_S ;
01950 break ;
01951 case(R_CHEBPI_I):
01952 b = R_CHEBPI_P | base_p | T_COSSIN_S ;
01953 break ;
01954 default:
01955 b = base_r | base_p | T_COSSIN_S ;
01956 break;
01957 }
01958 }