00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 char map_radial_r_manip_C[] = "$Header: /cvsroot/Lorene/C++/Source/Map/map_radial_r_manip.C,v 1.11 2005/05/25 16:11:04 j_novak Exp $" ;
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
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132 #include "cmp.h"
00133 #include "tensor.h"
00134
00135
00136
00137
00138
00139
00140 void Map_radial::mult_r(Scalar& uu) const {
00141
00142
00143 assert(uu.get_etat() != ETATNONDEF) ;
00144
00145
00146 if (uu.get_etat() == ETATZERO) {
00147 return ;
00148 }
00149
00150 assert((uu.get_etat() == ETATQCQ)||(uu.get_etat() == ETATUN)) ;
00151
00152 uu.set_etat_qcq() ;
00153
00154 int nz = mg->get_nzone() ;
00155 int nzm1 = nz-1 ;
00156
00157
00158 if (mg->get_type_r(nzm1) == UNSURR) {
00159
00160
00161
00162
00163
00164 Scalar uu_ext = uu ;
00165 uu_ext.annule(0, nzm1-1) ;
00166
00167 uu.annule_domain(nzm1) ;
00168
00169
00170
00171
00172 Valeur& val = uu.set_spectral_va() ;
00173 assert(val.get_mg() == mg) ;
00174
00175 val = val.mult_x() ;
00176
00177
00178 Base_val sauve_base = val.base ;
00179 val = val / xsr ;
00180
00181 val.base = sauve_base ;
00182
00183
00184
00185
00186 Valeur& val_ext = uu_ext.set_spectral_va() ;
00187 val_ext.sxm1_zec() ;
00188
00189 sauve_base = val_ext.base ;
00190 val_ext = xsr * val_ext ;
00191 val_ext.base = sauve_base ;
00192
00193
00194
00195
00196 uu = uu + uu_ext ;
00197
00198 }
00199 else{
00200
00201 Valeur& val = uu.set_spectral_va() ;
00202 val = val.mult_x() ;
00203
00204
00205 Base_val sauve_base = val.base ;
00206 val = val / xsr ;
00207
00208 val.base = sauve_base ;
00209 }
00210
00211
00212 }
00213
00214
00215 void Map_radial::mult_r(Cmp& ci) const {
00216
00217
00218 assert(ci.get_etat() != ETATNONDEF) ;
00219
00220
00221 if (ci.get_etat() == ETATZERO) {
00222 return ;
00223 }
00224
00225 assert(ci.get_etat() == ETATQCQ) ;
00226
00227 int nz = mg->get_nzone() ;
00228 int nzm1 = nz-1 ;
00229
00230
00231 if (mg->get_type_r(nzm1) == UNSURR) {
00232
00233
00234
00235
00236
00237 Cmp ci_ext = ci ;
00238 ci_ext.annule(0, nzm1-1) ;
00239
00240 ci.annule(nzm1) ;
00241
00242
00243
00244
00245 Valeur& val = ci.va ;
00246 assert(val.get_mg() == mg) ;
00247
00248 val = val.mult_x() ;
00249
00250
00251 Base_val sauve_base = val.base ;
00252 val = val / xsr ;
00253
00254 val.base = sauve_base ;
00255
00256
00257
00258
00259
00260
00261
00262
00263 ci_ext.set_dzpuis (ci.get_dzpuis()-1) ;
00264
00265
00266
00267
00268 ci = ci + ci_ext ;
00269
00270 }
00271 else{
00272
00273 Valeur& uu = ci.va ;
00274 uu = uu.mult_x() ;
00275
00276
00277 Base_val sauve_base = uu.base ;
00278 uu = uu / xsr ;
00279
00280 uu.base = sauve_base ;
00281 }
00282
00283
00284 }
00285
00286
00287
00288
00289
00290
00291
00292 void Map_radial::mult_r_zec(Scalar& ci) const {
00293
00294
00295 assert(ci.get_etat() != ETATNONDEF) ;
00296
00297
00298 if (ci.get_etat() == ETATZERO) {
00299 return ;
00300 }
00301
00302 assert((ci.get_etat() == ETATQCQ)||(ci.get_etat() == ETATUN)) ;
00303
00304 ci.set_etat_qcq() ;
00305
00306
00307 Valeur& uu = ci.set_spectral_va() ;
00308 assert(uu.get_mg() == mg) ;
00309
00310 int nz = mg->get_nzone() ;
00311 int nzm1 = nz-1 ;
00312
00313
00314 if (mg->get_type_r(nzm1) == UNSURR) {
00315
00316
00317
00318
00319 Valeur val = uu ;
00320 val.annule(nzm1) ;
00321
00322
00323
00324 Valeur val_ext = uu ;
00325 val_ext.annule(0, nzm1-1) ;
00326
00327 val_ext.sxm1_zec() ;
00328
00329 Base_val sauve_base = val_ext.base ;
00330 val_ext = xsr * val_ext ;
00331 val_ext.base = sauve_base ;
00332
00333
00334 uu = val + val_ext ;
00335
00336 }
00337 else{
00338
00339
00340 return ;
00341
00342 }
00343
00344
00345 }
00346
00347
00348
00349
00350
00351 void Map_radial::mult_rsint(Scalar& ci) const {
00352
00353 assert(ci.get_etat() != ETATNONDEF) ;
00354
00355 if (ci.get_etat() == ETATZERO) {
00356 return ;
00357 }
00358
00359 assert((ci.get_etat() == ETATQCQ)||(ci.get_etat() == ETATUN)) ;
00360
00361 ci.set_etat_qcq() ;
00362
00363 Valeur& val = ci.set_spectral_va() ;
00364 assert(val.get_mg() == mg) ;
00365
00366 int nz = mg->get_nzone() ;
00367 int nzm1 = nz-1 ;
00368
00369
00370
00371
00372 val = val.mult_st() ;
00373
00374
00375
00376
00377 Scalar ci_ext(*this) ;
00378
00379 if (mg->get_type_r(nzm1) == UNSURR) {
00380
00381
00382
00383
00384 ci_ext = ci ;
00385 ci_ext.annule(0, nzm1-1) ;
00386 ci.annule_domain(nzm1) ;
00387
00388
00389
00390 Valeur& val_ext = ci_ext.set_spectral_va() ;
00391 assert(val_ext.get_mg() == mg) ;
00392
00393 val_ext.sxm1_zec() ;
00394
00395 Base_val sauve_base = val_ext.base ;
00396 val_ext = val_ext * xsr ;
00397 val_ext.base = sauve_base ;
00398
00399 }
00400 else{
00401
00402
00403 ci_ext = 0 ;
00404
00405 }
00406
00407
00408
00409 val = val.mult_x() ;
00410
00411
00412 Base_val sauve_base = val.base ;
00413 val = val / xsr ;
00414
00415 val.base = sauve_base ;
00416
00417
00418
00419
00420 ci = ci + ci_ext ;
00421
00422 }
00423
00424
00425
00426
00427
00428
00429
00430 void Map_radial::div_rsint(Scalar& ci) const {
00431
00432 assert(ci.get_etat() != ETATNONDEF) ;
00433
00434 if (ci.get_etat() == ETATZERO) {
00435 return ;
00436 }
00437
00438 assert((ci.get_etat() == ETATQCQ)||(ci.get_etat() == ETATUN)) ;
00439
00440 ci.set_etat_qcq() ;
00441
00442 Valeur& val = ci.set_spectral_va() ;
00443 assert(val.get_mg() == mg) ;
00444
00445 int nz = mg->get_nzone() ;
00446 int nzm1 = nz-1 ;
00447
00448
00449
00450
00451 val = val.ssint() ;
00452
00453
00454
00455
00456
00457 Scalar ci_ext(*this) ;
00458
00459 if (mg->get_type_r(nzm1) == UNSURR) {
00460
00461
00462
00463
00464
00465 ci_ext = ci ;
00466 ci_ext.annule(0, nzm1-1) ;
00467 ci.annule_domain(nzm1) ;
00468
00469
00470
00471 Valeur& val_ext = ci_ext.set_spectral_va() ;
00472 assert(val_ext.get_mg() == mg) ;
00473
00474 val_ext = val_ext.mult_x() ;
00475
00476 Base_val sauve_base = val_ext.base ;
00477 val_ext = val_ext / xsr ;
00478 val_ext.base = sauve_base ;
00479
00480 }
00481 else{
00482
00483
00484 ci_ext = 0 ;
00485
00486 }
00487
00488
00489
00490
00491 val = val.sx() ;
00492
00493
00494 Base_val sauve_base = val.base ;
00495 val = val * xsr ;
00496
00497 val.base = sauve_base ;
00498
00499
00500
00501
00502 ci = ci + ci_ext ;
00503
00504 }
00505
00506
00507
00508
00509
00510 void Map_radial::div_r(Scalar& ci) const {
00511
00512 assert(ci.get_etat() != ETATNONDEF) ;
00513
00514 if (ci.get_etat() == ETATZERO) {
00515 return ;
00516 }
00517
00518 assert((ci.get_etat() == ETATQCQ)||(ci.get_etat() == ETATUN)) ;
00519
00520 ci.set_etat_qcq() ;
00521
00522 Valeur& val = ci.set_spectral_va() ;
00523 assert(val.get_mg() == mg) ;
00524
00525 int nz = mg->get_nzone() ;
00526 int nzm1 = nz-1 ;
00527
00528 Scalar ci_ext(*this) ;
00529
00530 if (mg->get_type_r(nzm1) == UNSURR) {
00531
00532
00533
00534
00535
00536 ci_ext = ci ;
00537 ci_ext.annule(0, nzm1-1) ;
00538 ci.annule_domain(nzm1) ;
00539
00540
00541
00542 Valeur& val_ext = ci_ext.set_spectral_va() ;
00543 assert(val_ext.get_mg() == mg) ;
00544
00545 val_ext = val_ext.mult_x() ;
00546
00547 Base_val sauve_base = val_ext.base ;
00548 val_ext = val_ext / xsr ;
00549 val_ext.base = sauve_base ;
00550
00551 }
00552 else{
00553
00554
00555 ci_ext = 0 ;
00556
00557 }
00558
00559
00560
00561
00562 val = val.sx() ;
00563
00564
00565 Base_val sauve_base = val.base ;
00566 val = val * xsr ;
00567
00568 val.base = sauve_base ;
00569
00570
00571
00572
00573 ci = ci + ci_ext ;
00574
00575 }
00576
00577
00578
00579
00580
00581 void Map_radial::div_r_zec(Scalar& uu) const {
00582
00583
00584 assert(uu.get_etat() != ETATNONDEF) ;
00585
00586
00587 if (uu.get_etat() == ETATZERO) {
00588 return ;
00589 }
00590
00591 assert((uu.get_etat() == ETATQCQ)||(uu.get_etat() == ETATUN)) ;
00592
00593 uu.set_etat_qcq() ;
00594
00595
00596 const Valeur& vu = uu.get_spectral_va() ;
00597 assert(vu.get_mg() == mg) ;
00598
00599 int nz = mg->get_nzone() ;
00600 int nzm1 = nz-1 ;
00601
00602 if (mg->get_type_r(nzm1) == UNSURR) {
00603
00604
00605
00606 Valeur val = vu ;
00607 val.annule(nzm1) ;
00608
00609
00610
00611 Valeur val_ext = vu ;
00612 val_ext.annule(0, nzm1-1) ;
00613
00614 val_ext.mult_xm1_zec() ;
00615
00616 Base_val sauve_base = val_ext.base ;
00617 val_ext = val_ext / xsr ;
00618 val_ext.base = sauve_base ;
00619
00620
00621 uu.set_spectral_va() = val + val_ext ;
00622
00623 }
00624 else{
00625
00626
00627 return ;
00628
00629 }
00630
00631
00632 }
00633
00634
00635
00636
00637
00638
00639 void Map_radial::dec_dzpuis(Scalar& ci) const {
00640
00641
00642 assert(ci.get_etat() != ETATNONDEF) ;
00643
00644 int nz = mg->get_nzone() ;
00645 int nzm1 = nz-1 ;
00646
00647
00648 if (ci.get_etat() == ETATZERO) {
00649 ci.set_dzpuis( ci.get_dzpuis() - 1 ) ;
00650 return ;
00651 }
00652
00653 if (mg->get_type_r(nzm1) != UNSURR)
00654 return ;
00655
00656 assert((ci.get_etat() == ETATQCQ)||(ci.get_etat() == ETATUN)) ;
00657
00658 ci.set_etat_qcq() ;
00659
00660 Valeur& uu = ci.set_spectral_va() ;
00661 assert(uu.get_mg() == mg) ;
00662
00663
00664
00665
00666 Valeur uu_ext = uu ;
00667 uu_ext.annule(0, nzm1-1) ;
00668
00669 uu.annule(nzm1) ;
00670
00671
00672
00673
00674 uu_ext.mult_xm1_zec() ;
00675
00676 Base_val sauve_base = uu_ext.base ;
00677 uu_ext = uu_ext / xsr ;
00678 uu_ext.base = sauve_base ;
00679
00680
00681
00682 uu = uu + uu_ext ;
00683
00684 ci.set_dzpuis( ci.get_dzpuis() - 1 ) ;
00685
00686 }
00687
00688
00689
00690
00691
00692 void Map_radial::inc_dzpuis(Scalar& ci) const {
00693
00694
00695 assert(ci.get_etat() != ETATNONDEF) ;
00696
00697 int nz = mg->get_nzone() ;
00698 int nzm1 = nz-1 ;
00699
00700
00701 if (ci.get_etat() == ETATZERO) {
00702 ci.set_dzpuis( ci.get_dzpuis() + 1 ) ;
00703 return ;
00704 }
00705 if (mg->get_type_r(nzm1) != UNSURR) return ;
00706
00707 assert((ci.get_etat() == ETATQCQ)||(ci.get_etat() == ETATUN)) ;
00708
00709 ci.set_etat_qcq() ;
00710
00711 Valeur& uu = ci.set_spectral_va() ;
00712 assert(uu.get_mg() == mg) ;
00713
00714
00715
00716
00717 Valeur uu_ext = uu ;
00718 uu_ext.annule(0, nzm1-1) ;
00719
00720 uu.annule(nzm1) ;
00721
00722
00723
00724
00725 uu_ext.sxm1_zec() ;
00726
00727 Base_val sauve_base = uu_ext.base ;
00728 uu_ext = uu_ext * xsr ;
00729 uu_ext.base = sauve_base ;
00730
00731
00732
00733 uu = uu + uu_ext ;
00734
00735 ci.set_dzpuis( ci.get_dzpuis() + 1 ) ;
00736
00737 }
00738
00739
00740
00741
00742
00743
00744 void Map_radial::dec2_dzpuis(Scalar& ci) const {
00745
00746
00747 assert(ci.get_etat() != ETATNONDEF) ;
00748
00749 int nz = mg->get_nzone() ;
00750 int nzm1 = nz-1 ;
00751
00752
00753 if (ci.get_etat() == ETATZERO) {
00754 ci.set_dzpuis( ci.get_dzpuis() - 2 ) ;
00755 return ;
00756 }
00757 if (mg->get_type_r(nzm1) != UNSURR) return ;
00758
00759 assert((ci.get_etat() == ETATQCQ)||(ci.get_etat() == ETATUN)) ;
00760
00761 ci.set_etat_qcq() ;
00762
00763 Valeur& uu = ci.set_spectral_va() ;
00764 assert(uu.get_mg() == mg) ;
00765
00766
00767
00768
00769 Valeur uu_ext = uu ;
00770 uu_ext.annule(0, nzm1-1) ;
00771
00772 uu.annule(nzm1) ;
00773
00774
00775
00776
00777 uu_ext.mult2_xm1_zec() ;
00778
00779 Base_val sauve_base = uu_ext.base ;
00780 uu_ext = uu_ext / (xsr*xsr) ;
00781 uu_ext.base = sauve_base ;
00782
00783
00784
00785 uu = uu + uu_ext ;
00786
00787 ci.set_dzpuis( ci.get_dzpuis() - 2 ) ;
00788
00789 }
00790
00791
00792
00793
00794
00795 void Map_radial::inc2_dzpuis(Scalar& ci) const {
00796
00797
00798 assert(ci.get_etat() != ETATNONDEF) ;
00799
00800 int nz = mg->get_nzone() ;
00801 int nzm1 = nz-1 ;
00802
00803
00804 if (ci.get_etat() == ETATZERO) {
00805 ci.set_dzpuis( ci.get_dzpuis() + 2 ) ;
00806 return ;
00807 }
00808 if (mg->get_type_r(nzm1) != UNSURR) return ;
00809
00810 assert((ci.get_etat() == ETATQCQ)||(ci.get_etat() == ETATUN)) ;
00811
00812 ci.set_etat_qcq() ;
00813
00814 Valeur& uu = ci.set_spectral_va() ;
00815 assert(uu.get_mg() == mg) ;
00816
00817
00818
00819
00820 Valeur uu_ext = uu ;
00821 uu_ext.annule(0, nzm1-1) ;
00822
00823 uu.annule(nzm1) ;
00824
00825
00826
00827
00828 uu_ext.sxm1_zec() ;
00829 uu_ext.sxm1_zec() ;
00830
00831 Base_val sauve_base = uu_ext.base ;
00832 uu_ext = uu_ext * (xsr*xsr) ;
00833 uu_ext.base = sauve_base ;
00834
00835
00836
00837 uu = uu + uu_ext ;
00838
00839 ci.set_dzpuis( ci.get_dzpuis() + 2 ) ;
00840
00841 }
00842