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