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_st_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Operators/op_mult_st.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_st_pas_prevu(Tbl * tb, int& base) {
00083 cout << "mult_st pas prevu..." << endl ;
00084 cout << "Tbl: " << tb << " base: " << base << endl ;
00085 abort () ;
00086 exit(-1) ;
00087 }
00088
00089
00090
00091
00092
00093 void _mult_st_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_SIN ;
00103 break ;
00104 case(R_CHEBPI_I):
00105 b = R_CHEBPI_P | base_p | T_SIN ;
00106 break ;
00107 default:
00108 b = base_r | base_p | T_SIN ;
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
00168 xci -= nr ;
00169 for (int i=0 ; i<nr ; i++ ) {
00170 xco[i] += 0.5*xci[i] ;
00171 }
00172 xco -= nr ;
00173 for (int i=0; i<nr; i++) {
00174 xco[i] = 0 ;
00175 }
00176
00177 xci += nr*nt ;
00178 xco += nr*nt ;
00179
00180
00181 xci += nr*nt ;
00182 xco += nr*nt ;
00183
00184
00185 for (int k=2 ; k<np+1 ; k++) {
00186
00187
00188
00189 xci += nr * (nt-1) ;
00190 xco += nr * (nt-1) ;
00191
00192
00193 for (int i=0 ; i<nr ; i++) {
00194 som[i] = -0.5*xci[i] ;
00195 xco[i] = 0. ;
00196 }
00197
00198
00199 for (int j=nt-2 ; j > 0 ; j--) {
00200
00201 xci -= 2*nr ;
00202 xco -= nr ;
00203
00204 for (int i=0 ; i<nr ; i++ ) {
00205 som[i] += 0.5*xci[i] ;
00206 xco[i] = som[i] ;
00207 }
00208 xci += nr ;
00209 for (int i=0; i<nr; i++) {
00210 som[i] = -0.5*xci[i] ;
00211 }
00212 }
00213
00214 xci -= nr ;
00215 for (int i = 0; i<nr; i++) {
00216 xco[i] += 0.5*xci[i] ;
00217 }
00218 xco -= nr ;
00219 for (int i=0; i<nr; i++) {
00220 xco[i] = 0 ;
00221 }
00222
00223 xci += nr*nt ;
00224 xco += nr*nt ;
00225 }
00226
00227
00228 delete [] tb->t ;
00229 tb->t = xo ;
00230
00231
00232 delete [] som ;
00233
00234
00235 int base_r = b & MSQ_R ;
00236 int base_p = b & MSQ_P ;
00237 switch(base_r){
00238 case(R_CHEBPI_P):
00239 b = R_CHEBPI_I | base_p | T_SIN ;
00240 break ;
00241 case(R_CHEBPI_I):
00242 b = R_CHEBPI_P | base_p | T_SIN ;
00243 break ;
00244 default:
00245 b = base_r | base_p | T_SIN ;
00246 break;
00247 }
00248 }
00249
00250
00251
00252
00253
00254 void _mult_st_t_sin(Tbl* tb, int & b)
00255 {
00256
00257 if (tb->get_etat() == ETATZERO) {
00258 int base_r = b & MSQ_R ;
00259 int base_p = b & MSQ_P ;
00260 switch(base_r){
00261 case(R_CHEBPI_P):
00262 b = R_CHEBPI_I | base_p | T_COS ;
00263 break ;
00264 case(R_CHEBPI_I):
00265 b = R_CHEBPI_P | base_p | T_COS ;
00266 break ;
00267 default:
00268 b = base_r | base_p | T_COS ;
00269 break;
00270 }
00271 return ;
00272 }
00273
00274
00275 assert(tb->get_etat() == ETATQCQ) ;
00276
00277
00278 int nr = (tb->dim).dim[0] ;
00279 int nt = (tb->dim).dim[1] ;
00280 int np = (tb->dim).dim[2] ;
00281 np = np - 2 ;
00282
00283
00284 double* som = new double [nr] ;
00285
00286
00287 double* xo = new double[(tb->dim).taille] ;
00288
00289
00290 for (int i=0; i<(tb->dim).taille; i++) {
00291 xo[i] = 0 ;
00292 }
00293
00294
00295 double* xi = tb->t ;
00296 double* xci = xi ;
00297 double* xco = xo ;
00298
00299
00300
00301
00302
00303 xci += nr * (nt-1) ;
00304 xco += nr * (nt-1) ;
00305
00306
00307 for (int i=0 ; i<nr ; i++) {
00308 som[i] = 0.5*xci[i] ;
00309 xco[i] = 0. ;
00310 }
00311
00312
00313 for (int j=nt-2 ; j > 0 ; j--) {
00314
00315 xci -= 2*nr ;
00316 xco -= nr ;
00317
00318 for (int i=0 ; i<nr ; i++ ) {
00319 som[i] -= 0.5*xci[i] ;
00320 xco[i] = som[i] ;
00321 }
00322 xci += nr ;
00323 for (int i=0; i<nr; i++) {
00324 som[i] = 0.5*xci[i] ;
00325 }
00326 }
00327
00328 xci -= nr ;
00329 xco -= nr ;
00330 for (int i =0; i<nr ; i++) {
00331 xco[i] = som[i] ;
00332 }
00333
00334 xci += nr*nt ;
00335 xco += nr*nt ;
00336
00337
00338 xci += nr*nt ;
00339 xco += nr*nt ;
00340
00341
00342 for (int k=2 ; k<np+1 ; k++) {
00343
00344
00345
00346 xci += nr * (nt-1) ;
00347 xco += nr * (nt-1) ;
00348
00349
00350 for (int i=0 ; i<nr ; i++) {
00351 som[i] = 0.5*xci[i] ;
00352 xco[i] = 0. ;
00353 }
00354
00355
00356 for (int j=nt-2 ; j > 0 ; j--) {
00357
00358 xci -= 2*nr ;
00359 xco -= nr ;
00360
00361 for (int i=0 ; i<nr ; i++ ) {
00362 som[i] -= 0.5*xci[i] ;
00363 xco[i] = som[i] ;
00364 }
00365 xci += nr ;
00366 for (int i=0 ; i<nr ; i++ ) {
00367 som[i] = 0.5*xci[i] ;
00368 }
00369 }
00370
00371 xci -= nr ;
00372 xco -= nr ;
00373 for (int i=0; i<nr; i++) {
00374 xco[i] = som[i] ;
00375 }
00376
00377 xci += nr*nt ;
00378 xco += nr*nt ;
00379 }
00380
00381
00382 delete [] tb->t ;
00383 tb->t = xo ;
00384
00385
00386 delete [] som ;
00387
00388
00389 int base_r = b & MSQ_R ;
00390 int base_p = b & MSQ_P ;
00391 switch(base_r){
00392 case(R_CHEBPI_P):
00393 b = R_CHEBPI_I | base_p | T_COS ;
00394 break ;
00395 case(R_CHEBPI_I):
00396 b = R_CHEBPI_P | base_p | T_COS ;
00397 break ;
00398 default:
00399 b = base_r | base_p | T_COS ;
00400 break;
00401 }
00402 }
00403
00404
00405
00406
00407 void _mult_st_t_cos_p(Tbl* tb, int & b)
00408 {
00409
00410
00411 if (tb->get_etat() == ETATZERO) {
00412 int base_r = b & MSQ_R ;
00413 int base_p = b & MSQ_P ;
00414 b = base_r | base_p | T_SIN_I ;
00415 return ;
00416 }
00417
00418
00419 assert(tb->get_etat() == ETATQCQ) ;
00420
00421
00422 int nr = (tb->dim).dim[0] ;
00423 int nt = (tb->dim).dim[1] ;
00424 int np = (tb->dim).dim[2] ;
00425 np = np - 2 ;
00426
00427
00428 double* som = new double [nr] ;
00429
00430
00431 double* xo = new double[(tb->dim).taille] ;
00432
00433
00434 for (int i=0; i<(tb->dim).taille; i++) {
00435 xo[i] = 0 ;
00436 }
00437
00438
00439 double* xi = tb->t ;
00440 double* xci = xi ;
00441 double* xco = xo ;
00442
00443
00444
00445
00446
00447 xci += nr * (nt-1) ;
00448 xco += nr * (nt-1) ;
00449
00450
00451 for (int i=0 ; i<nr ; i++) {
00452 som[i] = -0.5*xci[i] ;
00453 xco[i] = 0. ;
00454 }
00455
00456
00457 for (int j=nt-2 ; j > 0 ; j--) {
00458
00459 xci -= nr ;
00460 xco -= nr ;
00461
00462 for (int i=0 ; i<nr ; i++ ) {
00463 som[i] += 0.5*xci[i] ;
00464 xco[i] = som[i] ;
00465 som[i] = -0.5*xci[i] ;
00466 }
00467 }
00468 if (nt > 1) {
00469
00470 xci -= nr ;
00471 xco -= nr ;
00472 for (int i=0 ; i<nr ; i++ ) {
00473 xco[i] = som[i]+xci[i] ;
00474 }
00475 }
00476
00477 xci += nr*nt ;
00478 xco += nr*nt ;
00479
00480
00481 xci += nr*nt ;
00482 xco += nr*nt ;
00483
00484
00485 for (int k=2 ; k<np+1 ; k++) {
00486
00487
00488
00489 xci += nr * (nt-1) ;
00490 xco += nr * (nt-1) ;
00491
00492
00493 for (int i=0 ; i<nr ; i++) {
00494 som[i] = -0.5*xci[i] ;
00495 xco[i] = 0. ;
00496 }
00497
00498
00499 for (int j=nt-2 ; j > 0 ; j--) {
00500
00501 xci -= nr ;
00502 xco -= nr ;
00503
00504 for (int i=0 ; i<nr ; i++ ) {
00505 som[i] += 0.5*xci[i] ;
00506 xco[i] = som[i] ;
00507 som[i] = -0.5*xci[i] ;
00508 }
00509 }
00510
00511 xci -= nr ;
00512 xco -= nr ;
00513 for (int i = 0; i<nr; i++) {
00514 xco[i] = xci[i] + som[i] ;
00515 }
00516
00517 xci += nr*nt ;
00518 xco += nr*nt ;
00519 }
00520
00521
00522 delete [] tb->t ;
00523 tb->t = xo ;
00524
00525
00526 delete [] som ;
00527
00528
00529 int base_r = b & MSQ_R ;
00530 int base_p = b & MSQ_P ;
00531 b = base_r | base_p | T_SIN_I ;
00532 }
00533
00534
00535
00536
00537
00538 void _mult_st_t_sin_p(Tbl* tb, int & b)
00539 {
00540
00541 if (tb->get_etat() == ETATZERO) {
00542 int base_r = b & MSQ_R ;
00543 int base_p = b & MSQ_P ;
00544 b = base_r | base_p | T_COS_I ;
00545 return ;
00546 }
00547
00548
00549 assert(tb->get_etat() == ETATQCQ) ;
00550
00551
00552 int nr = (tb->dim).dim[0] ;
00553 int nt = (tb->dim).dim[1] ;
00554 int np = (tb->dim).dim[2] ;
00555 np = np - 2 ;
00556
00557
00558 double* som = new double [nr] ;
00559
00560
00561 double* xo = new double[(tb->dim).taille] ;
00562
00563
00564 for (int i=0; i<(tb->dim).taille; i++) {
00565 xo[i] = 0 ;
00566 }
00567
00568
00569 double* xi = tb->t ;
00570 double* xci = xi ;
00571 double* xco = xo ;
00572
00573
00574
00575
00576
00577 xci += nr * (nt-1) ;
00578 xco += nr * (nt-1) ;
00579
00580
00581 for (int i=0 ; i<nr ; i++) {
00582 som[i] = 0.5*xci[i] ;
00583 xco[i] = 0. ;
00584 }
00585
00586
00587 for (int j=nt-2 ; j > 0 ; j--) {
00588
00589 xci -= nr ;
00590 xco -= nr ;
00591
00592 for (int i=0 ; i<nr ; i++ ) {
00593 som[i] -= 0.5*xci[i] ;
00594 xco[i] = som[i] ;
00595 som[i] = 0.5*xci[i] ;
00596 }
00597 }
00598 if (nt > 1) {
00599
00600 xci -= nr ;
00601 xco -= nr ;
00602 for (int i =0; i<nr ; i++) {
00603 xco[i] = som[i] ;
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_COS_I ;
00662
00663 }
00664
00665
00666
00667
00668 void _mult_st_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_COS_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
00728 for (int i=0 ; i<nr ; i++) {
00729 xco[i] = som[i] ;
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
00765 for (int i=0 ; i<nr ; i++) {
00766 xco[i] = som[i] ;
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_COS_P ;
00784
00785 }
00786
00787
00788
00789 void _mult_st_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_SIN_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 for (int i=0; i<nr; i++) {
00849 xco[i] = 0. ;
00850 }
00851
00852 xci += nr*nt ;
00853 xco += nr*nt ;
00854
00855
00856 xci += nr*nt ;
00857 xco += nr*nt ;
00858
00859
00860 for (int k=2 ; k<np+1 ; k++) {
00861
00862
00863
00864 xci += nr * (nt-1) ;
00865 xco += nr * (nt-1) ;
00866
00867
00868 for (int i=0 ; i<nr ; i++) {
00869 som[i] = 0. ;
00870 }
00871
00872
00873 for (int j=nt-1 ; j > 0 ; j--) {
00874
00875 xci -= nr ;
00876
00877 for (int i=0 ; i<nr ; i++ ) {
00878 som[i] += 0.5*xci[i] ;
00879 xco[i] = som[i] ;
00880 som[i] = -0.5*xci[i] ;
00881 }
00882 xco -= nr ;
00883 }
00884 for (int i=0; i<nr; i++) {
00885 xco[i] = 0. ;
00886 }
00887
00888
00889 xci += nr*nt ;
00890 xco += nr*nt ;
00891 }
00892
00893
00894 delete [] tb->t ;
00895 tb->t = xo ;
00896
00897
00898 delete [] som ;
00899
00900
00901 int base_r = b & MSQ_R ;
00902 int base_p = b & MSQ_P ;
00903 b = base_r | base_p | T_SIN_P ;
00904
00905 }
00906
00907
00908
00909 void _mult_st_t_cossin_cp(Tbl* tb, int & b)
00910 {
00911
00912 if (tb->get_etat() == ETATZERO) {
00913 int base_r = b & MSQ_R ;
00914 int base_p = b & MSQ_P ;
00915 b = base_r | base_p | T_COSSIN_SI ;
00916 return ;
00917 }
00918
00919
00920 assert(tb->get_etat() == ETATQCQ) ;
00921
00922
00923 int nr = (tb->dim).dim[0] ;
00924 int nt = (tb->dim).dim[1] ;
00925 int np = (tb->dim).dim[2] ;
00926 np = np - 2 ;
00927
00928
00929 double* som = new double [nr] ;
00930
00931
00932 double* xo = new double[(tb->dim).taille] ;
00933
00934
00935 for (int i=0; i<(tb->dim).taille; i++) {
00936 xo[i] = 0 ;
00937 }
00938
00939
00940 double* xi = tb->t ;
00941 double* xci = xi ;
00942 double* xco = xo ;
00943
00944
00945 int m = 0 ;
00946
00947
00948 xci += nr * (nt-1) ;
00949 xco += nr * (nt-1) ;
00950
00951
00952 for (int i=0 ; i<nr ; i++) {
00953 som[i] = -0.5*xci[i] ;
00954 xco[i] = 0. ;
00955 }
00956
00957
00958 for (int j=nt-2 ; j > 0 ; j--) {
00959
00960 xci -= nr ;
00961 xco -= nr ;
00962
00963 for (int i=0 ; i<nr ; i++ ) {
00964 som[i] += 0.5*xci[i] ;
00965 xco[i] = som[i] ;
00966 som[i] = -0.5*xci[i] ;
00967 }
00968 }
00969
00970 xci -= nr ;
00971 xco -= nr ;
00972 for (int i = 0; i<nr; i++) {
00973 xco[i] = xci[i] + som[i] ;
00974 }
00975
00976 xci += nr*nt ;
00977 xco += nr*nt ;
00978
00979
00980 xci += nr*nt ;
00981 xco += nr*nt ;
00982
00983
00984 for (int k=2 ; k<np+1 ; k++) {
00985 m = (k/2) % 2 ;
00986
00987 switch(m) {
00988 case 0:
00989
00990
00991 xci += nr * (nt-1) ;
00992 xco += nr * (nt-1) ;
00993
00994
00995 for (int i=0 ; i<nr ; i++) {
00996 som[i] = -0.5*xci[i] ;
00997 xco[i] = 0. ;
00998 }
00999
01000
01001 for (int j=nt-2 ; j > 0 ; j--) {
01002
01003 xci -= nr ;
01004 xco -= nr ;
01005
01006 for (int i=0 ; i<nr ; i++ ) {
01007 som[i] += 0.5*xci[i] ;
01008 xco[i] = som[i] ;
01009 som[i] = -0.5*xci[i] ;
01010 }
01011 }
01012
01013 xci -= nr ;
01014 xco -= nr ;
01015 for (int i = 0; i<nr; i++) {
01016 xco[i] = xci[i] + som[i] ;
01017 }
01018
01019 xci += nr*nt ;
01020 xco += nr*nt ;
01021 break ;
01022
01023 case 1:
01024
01025
01026 xci += nr * (nt-1) ;
01027 xco += nr * (nt-1) ;
01028
01029
01030 for (int i=0 ; i<nr ; i++) {
01031 som[i] = 0. ;
01032 }
01033
01034
01035 for (int j=nt-1 ; j > 0 ; j--) {
01036
01037 xci -= nr ;
01038
01039 for (int i=0 ; i<nr ; i++ ) {
01040 som[i] -= 0.5*xci[i] ;
01041 xco[i] = som[i] ;
01042 som[i] = 0.5*xci[i] ;
01043 }
01044 xco -= nr ;
01045 }
01046
01047 for (int i=0 ; i<nr ; i++) {
01048 xco[i] = som[i] ;
01049 }
01050
01051 xci += nr*nt ;
01052 xco += nr*nt ;
01053 break;
01054 }
01055 }
01056
01057
01058 delete [] tb->t ;
01059 tb->t = xo ;
01060
01061
01062 delete [] som ;
01063
01064
01065 int base_r = b & MSQ_R ;
01066 int base_p = b & MSQ_P ;
01067 b = base_r | base_p | T_COSSIN_SI ;
01068 }
01069
01070
01071
01072
01073 void _mult_st_t_cossin_ci(Tbl* tb, int & b)
01074 {
01075
01076 if (tb->get_etat() == ETATZERO) {
01077 int base_r = b & MSQ_R ;
01078 int base_p = b & MSQ_P ;
01079 b = base_r | base_p | T_COSSIN_SP ;
01080 return ;
01081 }
01082
01083
01084 assert(tb->get_etat() == ETATQCQ) ;
01085
01086
01087 int nr = (tb->dim).dim[0] ;
01088 int nt = (tb->dim).dim[1] ;
01089 int np = (tb->dim).dim[2] ;
01090 np = np - 2 ;
01091
01092
01093 double* som = new double [nr] ;
01094
01095
01096 double* xo = new double[(tb->dim).taille] ;
01097
01098
01099 for (int i=0; i<(tb->dim).taille; i++) {
01100 xo[i] = 0 ;
01101 }
01102
01103
01104 double* xi = tb->t ;
01105 double* xci = xi ;
01106 double* xco = xo ;
01107
01108
01109 int m = 0 ;
01110
01111
01112 xci += nr * (nt-1) ;
01113 xco += nr * (nt-1) ;
01114
01115
01116 for (int i=0 ; i<nr ; i++) {
01117 som[i] = 0. ;
01118 }
01119
01120
01121 for (int j=nt-1 ; j > 0 ; j--) {
01122
01123 xci -= nr ;
01124
01125 for (int i=0 ; i<nr ; i++ ) {
01126 som[i] += 0.5*xci[i] ;
01127 xco[i] = som[i] ;
01128 som[i] = -0.5*xci[i] ;
01129 }
01130 xco -= nr ;
01131 }
01132 for (int i=0; i<nr; i++) {
01133 xco[i] = 0. ;
01134 }
01135
01136
01137 xci += nr*nt ;
01138 xco += nr*nt ;
01139
01140
01141 xci += nr*nt ;
01142 xco += nr*nt ;
01143
01144
01145 for (int k=2 ; k<np+1 ; k++) {
01146 m = (k/2) % 2 ;
01147
01148 switch(m) {
01149 case 0:
01150
01151
01152 xci += nr * (nt-1) ;
01153 xco += nr * (nt-1) ;
01154
01155
01156 for (int i=0 ; i<nr ; i++) {
01157 som[i] = 0. ;
01158 }
01159
01160
01161 for (int j=nt-1 ; j > 0 ; j--) {
01162
01163 xci -= nr ;
01164
01165 for (int i=0 ; i<nr ; i++ ) {
01166 som[i] += 0.5*xci[i] ;
01167 xco[i] = som[i] ;
01168 som[i] = -0.5*xci[i] ;
01169 }
01170 xco -= nr ;
01171 }
01172 for (int i=0; i<nr; i++) {
01173 xco[i] = 0. ;
01174 }
01175
01176
01177 xci += nr*nt ;
01178 xco += nr*nt ;
01179 break ;
01180
01181 case 1:
01182
01183
01184 xci += nr * (nt-1) ;
01185 xco += nr * (nt-1) ;
01186
01187
01188 for (int i=0 ; i<nr ; i++) {
01189 som[i] = 0.5*xci[i] ;
01190 xco[i] = 0. ;
01191 }
01192
01193
01194 for (int j=nt-2 ; j > 0 ; j--) {
01195
01196 xci -= nr ;
01197 xco -= nr ;
01198
01199 for (int i=0 ; i<nr ; i++ ) {
01200 som[i] -= 0.5*xci[i] ;
01201 xco[i] = som[i] ;
01202 som[i] = 0.5*xci[i] ;
01203 }
01204 }
01205
01206 xci -= nr ;
01207 xco -= nr ;
01208 for (int i=0; i<nr; i++) {
01209 xco[i] = som[i] ;
01210 }
01211
01212 xci += nr*nt ;
01213 xco += nr*nt ;
01214 break ;
01215 }
01216 }
01217
01218
01219 delete [] tb->t ;
01220 tb->t = xo ;
01221
01222
01223 delete [] som ;
01224
01225
01226 int base_r = b & MSQ_R ;
01227 int base_p = b & MSQ_P ;
01228 b = base_r | base_p | T_COSSIN_SP ;
01229 }
01230
01231
01232
01233
01234 void _mult_st_t_cossin_si(Tbl* tb, int & b)
01235 {
01236
01237 if (tb->get_etat() == ETATZERO) {
01238 int base_r = b & MSQ_R ;
01239 int base_p = b & MSQ_P ;
01240 b = base_r | base_p | T_COSSIN_CP ;
01241 return ;
01242 }
01243
01244
01245 assert(tb->get_etat() == ETATQCQ) ;
01246
01247
01248 int nr = (tb->dim).dim[0] ;
01249 int nt = (tb->dim).dim[1] ;
01250 int np = (tb->dim).dim[2] ;
01251 np = np - 2 ;
01252
01253
01254 double* som = new double [nr] ;
01255
01256
01257 double* xo = new double[(tb->dim).taille] ;
01258
01259
01260 for (int i=0; i<(tb->dim).taille; i++) {
01261 xo[i] = 0 ;
01262 }
01263
01264
01265 double* xi = tb->t ;
01266 double* xci = xi ;
01267 double* xco = xo ;
01268
01269
01270 int m = 0 ;
01271
01272
01273 xci += nr * (nt-1) ;
01274 xco += nr * (nt-1) ;
01275
01276
01277 for (int i=0 ; i<nr ; i++) {
01278 som[i] = 0. ;
01279 }
01280
01281
01282 for (int j=nt-1 ; j > 0 ; j--) {
01283
01284 xci -= nr ;
01285
01286 for (int i=0 ; i<nr ; i++ ) {
01287 som[i] -= 0.5*xci[i] ;
01288 xco[i] = som[i] ;
01289 som[i] = 0.5*xci[i] ;
01290 }
01291 xco -= nr ;
01292 }
01293
01294 for (int i=0 ; i<nr ; i++) {
01295 xco[i] = som[i] ;
01296 }
01297
01298 xci += nr*nt ;
01299 xco += nr*nt ;
01300
01301
01302 xci += nr*nt ;
01303 xco += nr*nt ;
01304
01305
01306 for (int k=2 ; k<np+1 ; k++) {
01307 m = (k/2) % 2 ;
01308
01309 switch(m) {
01310 case 0:
01311
01312
01313 xci += nr * (nt-1) ;
01314 xco += nr * (nt-1) ;
01315
01316
01317 for (int i=0 ; i<nr ; i++) {
01318 som[i] = 0. ;
01319 }
01320
01321
01322 for (int j=nt-1 ; j > 0 ; j--) {
01323
01324 xci -= nr ;
01325
01326 for (int i=0 ; i<nr ; i++ ) {
01327 som[i] -= 0.5*xci[i] ;
01328 xco[i] = som[i] ;
01329 som[i] = 0.5*xci[i] ;
01330 }
01331 xco -= nr ;
01332 }
01333
01334 for (int i=0 ; i<nr ; i++) {
01335 xco[i] = som[i] ;
01336 }
01337
01338 xci += nr*nt ;
01339 xco += nr*nt ;
01340 break ;
01341
01342 case 1:
01343
01344
01345 xci += nr * (nt-1) ;
01346 xco += nr * (nt-1) ;
01347
01348
01349 for (int i=0 ; i<nr ; i++) {
01350 som[i] = -0.5*xci[i] ;
01351 xco[i] = 0. ;
01352 }
01353
01354
01355 for (int j=nt-2 ; j > 0 ; j--) {
01356
01357 xci -= nr ;
01358 xco -= nr ;
01359
01360 for (int i=0 ; i<nr ; i++ ) {
01361 som[i] += 0.5*xci[i] ;
01362 xco[i] = som[i] ;
01363 som[i] = -0.5*xci[i] ;
01364 }
01365 }
01366
01367 xci -= nr ;
01368 xco -= nr ;
01369 for (int i = 0; i<nr; i++) {
01370 xco[i] = xci[i] + som[i] ;
01371 }
01372
01373 xci += nr*nt ;
01374 xco += nr*nt ;
01375 break ;
01376 }
01377 }
01378
01379
01380 delete [] tb->t ;
01381 tb->t = xo ;
01382
01383
01384 delete [] som ;
01385
01386
01387 int base_r = b & MSQ_R ;
01388 int base_p = b & MSQ_P ;
01389 b = base_r | base_p | T_COSSIN_CP ;
01390
01391
01392 }
01393
01394
01395
01396 void _mult_st_t_cossin_sp(Tbl* tb, int & b)
01397 {
01398
01399 if (tb->get_etat() == ETATZERO) {
01400 int base_r = b & MSQ_R ;
01401 int base_p = b & MSQ_P ;
01402 b = base_r | base_p | T_COSSIN_CI ;
01403 return ;
01404 }
01405
01406
01407 assert(tb->get_etat() == ETATQCQ) ;
01408
01409
01410 int nr = (tb->dim).dim[0] ;
01411 int nt = (tb->dim).dim[1] ;
01412 int np = (tb->dim).dim[2] ;
01413 np = np - 2 ;
01414
01415
01416 double* som = new double [nr] ;
01417
01418
01419 double* xo = new double[(tb->dim).taille] ;
01420
01421
01422 for (int i=0; i<(tb->dim).taille; i++) {
01423 xo[i] = 0 ;
01424 }
01425
01426
01427 double* xi = tb->t ;
01428 double* xci = xi ;
01429 double* xco = xo ;
01430
01431
01432 int m = 0 ;
01433
01434
01435 xci += nr * (nt-1) ;
01436 xco += nr * (nt-1) ;
01437
01438
01439 for (int i=0 ; i<nr ; i++) {
01440 som[i] = 0.5*xci[i] ;
01441 xco[i] = 0. ;
01442 }
01443
01444
01445 for (int j=nt-2 ; j > 0 ; j--) {
01446
01447 xci -= nr ;
01448 xco -= nr ;
01449
01450 for (int i=0 ; i<nr ; i++ ) {
01451 som[i] -= 0.5*xci[i] ;
01452 xco[i] = som[i] ;
01453 som[i] = 0.5*xci[i] ;
01454 }
01455 }
01456
01457 xci -= nr ;
01458 xco -= nr ;
01459 for (int i=0; i<nr; i++) {
01460 xco[i] = som[i] ;
01461 }
01462
01463 xci += nr*nt ;
01464 xco += nr*nt ;
01465
01466
01467 xci += nr*nt ;
01468 xco += nr*nt ;
01469
01470 for (int k=2 ; k<np+1 ; k++) {
01471 m = (k/2) % 2 ;
01472
01473 switch(m) {
01474 case 1:
01475
01476
01477 xci += nr * (nt-1) ;
01478 xco += nr * (nt-1) ;
01479
01480
01481 for (int i=0 ; i<nr ; i++) {
01482 som[i] = 0. ;
01483 }
01484
01485
01486 for (int j=nt-1 ; j > 0 ; j--) {
01487
01488 xci -= nr ;
01489
01490 for (int i=0 ; i<nr ; i++ ) {
01491 som[i] += 0.5*xci[i] ;
01492 xco[i] = som[i] ;
01493 som[i] = -0.5*xci[i] ;
01494 }
01495 xco -= nr ;
01496 }
01497 for (int i=0; i<nr; i++) {
01498 xco[i] = 0. ;
01499 }
01500
01501
01502 xci += nr*nt ;
01503 xco += nr*nt ;
01504 break ;
01505
01506 case 0:
01507
01508
01509 xci += nr * (nt-1) ;
01510 xco += nr * (nt-1) ;
01511
01512
01513 for (int i=0 ; i<nr ; i++) {
01514 som[i] = 0.5*xci[i] ;
01515 xco[i] = 0. ;
01516 }
01517
01518
01519 for (int j=nt-2 ; j > 0 ; j--) {
01520
01521 xci -= nr ;
01522 xco -= nr ;
01523
01524 for (int i=0 ; i<nr ; i++ ) {
01525 som[i] -= 0.5*xci[i] ;
01526 xco[i] = som[i] ;
01527 som[i] = 0.5*xci[i] ;
01528 }
01529 }
01530
01531 xci -= nr ;
01532 xco -= nr ;
01533 for (int i=0; i<nr; i++) {
01534 xco[i] = som[i] ;
01535 }
01536
01537 xci += nr*nt ;
01538 xco += nr*nt ;
01539 break ;
01540 }
01541 }
01542
01543
01544 delete [] tb->t ;
01545 tb->t = xo ;
01546
01547
01548 delete [] som ;
01549
01550
01551 int base_r = b & MSQ_R ;
01552 int base_p = b & MSQ_P ;
01553 b = base_r | base_p | T_COSSIN_CI ;
01554
01555 }
01556
01557
01558
01559
01560 void _mult_st_t_cossin_c(Tbl* tb, int & b)
01561 {
01562
01563 if (tb->get_etat() == ETATZERO) {
01564 int base_r = b & MSQ_R ;
01565 int base_p = b & MSQ_P ;
01566 switch(base_r){
01567 case(R_CHEBPI_P):
01568 b = R_CHEBPI_I | base_p | T_COSSIN_S ;
01569 break ;
01570 case(R_CHEBPI_I):
01571 b = R_CHEBPI_P | base_p | T_COSSIN_S ;
01572 break ;
01573 default:
01574 b = base_r | base_p | T_COSSIN_S ;
01575 break;
01576 }
01577 return ;
01578 }
01579
01580
01581 assert(tb->get_etat() == ETATQCQ) ;
01582
01583
01584 int nr = (tb->dim).dim[0] ;
01585 int nt = (tb->dim).dim[1] ;
01586 int np = (tb->dim).dim[2] ;
01587 np = np - 2 ;
01588
01589
01590 double* som = new double [nr] ;
01591
01592
01593 double* xo = new double[(tb->dim).taille] ;
01594
01595
01596 for (int i=0; i<(tb->dim).taille; i++) {
01597 xo[i] = 0 ;
01598 }
01599
01600
01601 double* xi = tb->t ;
01602 double* xci = xi ;
01603 double* xco = xo ;
01604
01605
01606 int m = 0 ;
01607
01608
01609 xci += nr * (nt-1) ;
01610 xco += nr * (nt-1) ;
01611
01612
01613 for (int i=0 ; i<nr ; i++) {
01614 som[i] = -0.5*xci[i] ;
01615 xco[i] = 0. ;
01616 }
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] = 0. ;
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] = 0. ;
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. ;
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 xci -= nr;
01725 xco -= nr;
01726
01727 for (int i=0 ; i<nr ; i++) {
01728 xco[i] = som[i] ;
01729 }
01730
01731 xci += nr*nt ;
01732 xco += nr*nt ;
01733 break;
01734 }
01735 }
01736
01737
01738 delete [] tb->t ;
01739 tb->t = xo ;
01740
01741
01742 delete [] som ;
01743
01744
01745 int base_r = b & MSQ_R ;
01746 int base_p = b & MSQ_P ;
01747 switch(base_r){
01748 case(R_CHEBPI_P):
01749 b = R_CHEBPI_I | base_p | T_COSSIN_S ;
01750 break ;
01751 case(R_CHEBPI_I):
01752 b = R_CHEBPI_P | base_p | T_COSSIN_S ;
01753 break ;
01754 default:
01755 b = base_r | base_p | T_COSSIN_S ;
01756 break;
01757 }
01758 }
01759
01760
01761
01762
01763 void _mult_st_t_cossin_s(Tbl* tb, int & b)
01764 {
01765
01766 if (tb->get_etat() == ETATZERO) {
01767 int base_r = b & MSQ_R ;
01768 int base_p = b & MSQ_P ;
01769 switch(base_r){
01770 case(R_CHEBPI_P):
01771 b = R_CHEBPI_I | base_p | T_COSSIN_C ;
01772 break ;
01773 case(R_CHEBPI_I):
01774 b = R_CHEBPI_P | base_p | T_COSSIN_C ;
01775 break ;
01776 default:
01777 b = base_r | base_p | T_COSSIN_C ;
01778 break;
01779 }
01780 return ;
01781 }
01782
01783
01784 assert(tb->get_etat() == ETATQCQ) ;
01785
01786
01787 int nr = (tb->dim).dim[0] ;
01788 int nt = (tb->dim).dim[1] ;
01789 int np = (tb->dim).dim[2] ;
01790 np = np - 2 ;
01791
01792
01793 double* som = new double [nr] ;
01794
01795
01796 double* xo = new double[(tb->dim).taille] ;
01797
01798
01799 for (int i=0; i<(tb->dim).taille; i++) {
01800 xo[i] = 0 ;
01801 }
01802
01803
01804 double* xi = tb->t ;
01805 double* xci = xi ;
01806 double* xco = xo ;
01807
01808
01809 int m = 0 ;
01810
01811
01812 xci += nr * (nt-1) ;
01813 xco += nr * (nt-1) ;
01814
01815
01816 for (int i=0 ; i<nr ; i++) {
01817 som[i] = 0.5*xci[i] ;
01818 xco[i] = 0. ;
01819 }
01820
01821
01822 for (int j=nt-2 ; j > 0 ; j--) {
01823
01824 xci -= 2*nr ;
01825 xco -= nr ;
01826
01827 for (int i=0 ; i<nr ; i++ ) {
01828 som[i] -= 0.5*xci[i] ;
01829 xco[i] = som[i] ;
01830 }
01831 xci += nr ;
01832 for (int i=0 ; i<nr ; i++ ) {
01833 som[i] = 0.5*xci[i] ;
01834 }
01835 }
01836
01837 xci -= nr ;
01838 xco -= nr ;
01839 for (int i=0; i<nr; i++) {
01840 xco[i] = som[i] ;
01841 }
01842
01843 xci += nr*nt ;
01844 xco += nr*nt ;
01845
01846
01847 xci += nr*nt ;
01848 xco += nr*nt ;
01849
01850 for (int k=2 ; k<np+1 ; k++) {
01851 m = (k/2) % 2 ;
01852
01853 switch(m) {
01854 case 1:
01855
01856
01857 xci += nr * (nt-1) ;
01858 xco += nr * (nt-1) ;
01859
01860
01861 for (int i=0 ; i<nr ; i++) {
01862 som[i] = -0.5*xci[i] ;
01863 xco[i] = 0.0;
01864 }
01865
01866
01867 for (int j=nt-2 ; j > 0 ; j--) {
01868
01869 xci -= 2*nr ;
01870 xco -= nr ;
01871
01872 for (int i=0 ; i<nr ; i++ ) {
01873 som[i] += 0.5*xci[i] ;
01874 xco[i] = som[i] ;
01875 }
01876 xci +=nr ;
01877 for (int i=0 ; i<nr ; i++ ) {
01878 som[i] = -0.5*xci[i] ;
01879 }
01880 }
01881 xci -= nr ;
01882 for (int i=0; i<nr; i++) {
01883 xco[i] += 0.5*xci[i] ;
01884 }
01885 xco -= nr ;
01886 for (int i=0; i<nr; i++) {
01887 xco[i] = 0. ;
01888 }
01889
01890
01891 xci += nr*nt ;
01892 xco += nr*nt ;
01893 break ;
01894
01895 case 0:
01896
01897
01898 xci += nr * (nt-1) ;
01899 xco += nr * (nt-1) ;
01900
01901
01902 for (int i=0 ; i<nr ; i++) {
01903 som[i] = 0.5*xci[i] ;
01904 xco[i] = 0. ;
01905 }
01906
01907
01908 for (int j=nt-2 ; j > 0 ; j--) {
01909
01910 xci -= 2*nr ;
01911 xco -= nr ;
01912
01913 for (int i=0 ; i<nr ; i++ ) {
01914 som[i] -= 0.5*xci[i] ;
01915 xco[i] = som[i] ;
01916 }
01917 xci += nr ;
01918 for (int i=0 ; i<nr ; i++ ) {
01919 som[i] = 0.5*xci[i] ;
01920 }
01921 }
01922
01923 xci -= nr ;
01924 xco -= nr ;
01925 for (int i=0; i<nr; i++) {
01926 xco[i] = som[i] ;
01927 }
01928
01929 xci += nr*nt ;
01930 xco += nr*nt ;
01931 break ;
01932 }
01933 }
01934
01935
01936 delete [] tb->t ;
01937 tb->t = xo ;
01938
01939
01940 delete [] som ;
01941
01942
01943 int base_r = b & MSQ_R ;
01944 int base_p = b & MSQ_P ;
01945 switch(base_r){
01946 case(R_CHEBPI_P):
01947 b = R_CHEBPI_I | base_p | T_COSSIN_C ;
01948 break ;
01949 case(R_CHEBPI_I):
01950 b = R_CHEBPI_P | base_p | T_COSSIN_C ;
01951 break ;
01952 default:
01953 b = base_r | base_p | T_COSSIN_C ;
01954 break;
01955 }
01956 }