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 char map_et_deriv_C[] = "$Header: /cvsroot/Lorene/C++/Source/Map/map_et_deriv.C,v 1.9 2012/01/17 10:33:33 j_penner Exp $" ;
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 #include "map.h"
00083 #include "cmp.h"
00084 #include "tensor.h"
00085
00086
00087
00088
00089
00090
00091 void Map_et::dsdxi(const Cmp& ci, Cmp& resu) const {
00092
00093 assert (ci.get_etat() != ETATNONDEF) ;
00094 assert (ci.get_mp()->get_mg() == mg) ;
00095
00096 if (ci.get_etat() == ETATZERO) {
00097 resu.set_etat_zero() ;
00098 }
00099 else {
00100 assert( ci.get_etat() == ETATQCQ ) ;
00101 assert( ci.check_dzpuis(0) ) ;
00102
00103 (ci.va).coef() ;
00104
00105 resu = (ci.va).dsdx() ;
00106
00107 (resu.va).base = (ci.va).dsdx().base ;
00108
00109 int nz = mg->get_nzone() ;
00110 if (mg->get_type_r(nz-1) == UNSURR) {
00111 resu.set_dzpuis(2) ;
00112
00113 }
00114
00115 }
00116
00117 }
00118
00119 void Map_et::dsdxi(const Scalar& uu, Scalar& resu) const {
00120
00121 assert (uu.get_etat() != ETATNONDEF) ;
00122 assert (uu.get_mp().get_mg() == mg) ;
00123
00124 if (uu.get_etat() == ETATZERO) {
00125 resu.set_etat_zero() ;
00126 }
00127 else {
00128 assert( uu.get_etat() == ETATQCQ ) ;
00129
00130 const Valeur& uuva = uu.get_spectral_va() ;
00131
00132 uuva.coef() ;
00133
00134 int nz = mg->get_nzone() ;
00135 int nzm1 = nz - 1 ;
00136
00137 if ( uu.get_dzpuis() == 0 ) {
00138 resu = uuva.dsdx() ;
00139
00140 if (mg->get_type_r(nzm1) == UNSURR) {
00141 resu.set_dzpuis(2) ;
00142
00143 }
00144 }
00145 else {
00146 assert(mg->get_type_r(nzm1) == UNSURR) ;
00147
00148 int dzp = uu.get_dzpuis() ;
00149
00150 resu = uuva.dsdx() ;
00151 resu.annule_domain(nzm1) ;
00152
00153
00154 Valeur tmp_ced = uuva.dsdx() ;
00155 Base_val sauve_base( tmp_ced.get_base() ) ;
00156 tmp_ced = tmp_ced ;
00157 tmp_ced.set_base(sauve_base) ;
00158
00159 tmp_ced = tmp_ced.mult_x() ;
00160 tmp_ced = tmp_ced / xsr ;
00161
00162 tmp_ced.annule(0, nz-2) ;
00163 tmp_ced.set(nzm1) -= dzp * uuva(nzm1) ;
00164
00165
00166 resu.set_spectral_va() += tmp_ced ;
00167
00168 resu.set_dzpuis(dzp+1) ;
00169
00170 }
00171
00172 resu.set_spectral_base( uuva.dsdx().get_base() ) ;
00173
00174 }
00175
00176 }
00177
00178
00179
00180
00181
00182
00183 void Map_et::dsdr(const Cmp& ci, Cmp& resu) const {
00184
00185 assert (ci.get_etat() != ETATNONDEF) ;
00186 assert (ci.get_mp()->get_mg() == mg) ;
00187
00188 if (ci.get_etat() == ETATZERO) {
00189 resu.set_etat_zero() ;
00190 }
00191 else {
00192 assert( ci.get_etat() == ETATQCQ ) ;
00193 assert( ci.check_dzpuis(0) ) ;
00194
00195 (ci.va).coef() ;
00196
00197 resu = (ci.va).dsdx() * dxdr ;
00198
00199 (resu.va).base = (ci.va).dsdx().base ;
00200
00201 int nz = mg->get_nzone() ;
00202 if (mg->get_type_r(nz-1) == UNSURR) {
00203 resu.set_dzpuis(2) ;
00204
00205 }
00206
00207 }
00208
00209 }
00210
00211 void Map_et::dsdr(const Scalar& uu, Scalar& resu) const {
00212
00213 assert (uu.get_etat() != ETATNONDEF) ;
00214 assert (uu.get_mp().get_mg() == mg) ;
00215
00216 if (uu.get_etat() == ETATZERO) {
00217 resu.set_etat_zero() ;
00218 }
00219 else {
00220 assert( uu.get_etat() == ETATQCQ ) ;
00221
00222 const Valeur& uuva = uu.get_spectral_va() ;
00223
00224 uuva.coef() ;
00225
00226 int nz = mg->get_nzone() ;
00227 int nzm1 = nz - 1 ;
00228
00229 if ( uu.get_dzpuis() == 0 ) {
00230 resu = uuva.dsdx() * dxdr ;
00231
00232 if (mg->get_type_r(nzm1) == UNSURR) {
00233 resu.set_dzpuis(2) ;
00234
00235 }
00236 }
00237 else {
00238 assert(mg->get_type_r(nzm1) == UNSURR) ;
00239
00240 int dzp = uu.get_dzpuis() ;
00241
00242 resu = uuva.dsdx() * dxdr ;
00243 resu.annule_domain(nzm1) ;
00244
00245
00246 Valeur tmp_ced = uuva.dsdx() ;
00247 Base_val sauve_base( tmp_ced.get_base() ) ;
00248 tmp_ced = tmp_ced * dxdr ;
00249 tmp_ced.set_base(sauve_base) ;
00250
00251 tmp_ced = tmp_ced.mult_x() ;
00252 tmp_ced = tmp_ced / xsr ;
00253
00254 tmp_ced.annule(0, nz-2) ;
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 void Map_et::dsdradial(const Scalar& uu, Scalar& resu) const {
00271
00272 assert (uu.get_etat() != ETATNONDEF) ;
00273 assert (uu.get_mp().get_mg() == mg) ;
00274
00275 if (uu.get_etat() == ETATZERO) {
00276 resu.set_etat_zero() ;
00277 }
00278 else {
00279 assert( uu.get_etat() == ETATQCQ ) ;
00280
00281 const Valeur& uuva = uu.get_spectral_va() ;
00282
00283 uuva.coef() ;
00284
00285 int nz = mg->get_nzone() ;
00286 int nzm1 = nz - 1 ;
00287
00288 if ( uu.get_dzpuis() == 0 ) {
00289 resu = uuva.dsdx() * dxdr ;
00290
00291 if (mg->get_type_r(nzm1) == UNSURR) {
00292 resu.set_dzpuis(2) ;
00293
00294 }
00295 }
00296 else {
00297 assert(mg->get_type_r(nzm1) == UNSURR) ;
00298
00299 int dzp = uu.get_dzpuis() ;
00300
00301 resu = uuva.dsdx() * dxdr ;
00302 resu.annule_domain(nzm1) ;
00303
00304
00305 Valeur tmp_ced = uuva.dsdx() ;
00306 Base_val sauve_base( tmp_ced.get_base() ) ;
00307 tmp_ced = tmp_ced * dxdr ;
00308 tmp_ced.set_base(sauve_base) ;
00309
00310 tmp_ced = tmp_ced.mult_x() ;
00311 tmp_ced = tmp_ced / xsr ;
00312
00313 tmp_ced.annule(0, nz-2) ;
00314 tmp_ced.set(nzm1) -= dzp * uuva(nzm1) ;
00315
00316
00317 resu.set_spectral_va() += tmp_ced ;
00318
00319 resu.set_dzpuis(dzp+1) ;
00320
00321 }
00322
00323 resu.set_spectral_base( uuva.dsdx().get_base() ) ;
00324
00325 }
00326
00327 }
00328
00329
00330
00331
00332
00333 void Map_et::srdsdt(const Cmp& ci, Cmp& resu) const {
00334
00335 assert (ci.get_etat() != ETATNONDEF) ;
00336 assert (ci.get_mp()->get_mg() == mg) ;
00337
00338 if (ci.get_etat() == ETATZERO) {
00339 resu.set_etat_zero() ;
00340 }
00341 else {
00342
00343 assert( ci.get_etat() == ETATQCQ ) ;
00344 assert( ci.check_dzpuis(0) ) ;
00345
00346 (ci.va).coef() ;
00347
00348
00349
00350 Valeur srdfdt = ci.va ;
00351
00352 srdfdt = srdfdt.dsdt() ;
00353 srdfdt = srdfdt.sx() ;
00354
00355 Base_val sauve_base( srdfdt.base ) ;
00356
00357 srdfdt = srdfdt * xsr ;
00358
00359 srdfdt.base = sauve_base ;
00360
00361
00362
00363
00364 Valeur adfdx = ci.va ;
00365
00366 adfdx = adfdx.dsdx() ;
00367
00368 sauve_base = adfdx.base ;
00369 adfdx = adfdx * dxdr * srdrdt ;
00370 adfdx.base = sauve_base ;
00371
00372
00373
00374
00375 resu = srdfdt - adfdx ;
00376
00377 int nz = mg->get_nzone() ;
00378 if (mg->get_type_r(nz-1) == UNSURR) {
00379 resu.set_dzpuis(2) ;
00380
00381 }
00382
00383 }
00384
00385 }
00386
00387 void Map_et::srdsdt(const Scalar& uu, Scalar& resu) const {
00388
00389 assert (uu.get_etat() != ETATNONDEF) ;
00390 assert (uu.get_mp().get_mg() == mg) ;
00391
00392 if (uu.get_etat() == ETATZERO) {
00393 resu.set_etat_zero() ;
00394 }
00395 else {
00396
00397 assert( uu.get_etat() == ETATQCQ ) ;
00398
00399 const Valeur& uuva = uu.get_spectral_va() ;
00400 uuva.coef() ;
00401
00402 int nz = mg->get_nzone() ;
00403 int nzm1 = nz - 1 ;
00404
00405
00406
00407 Valeur srdfdt = uuva ;
00408
00409 srdfdt = srdfdt.dsdt() ;
00410
00411 srdfdt = srdfdt.sx() ;
00412
00413 Base_val sauve_base( srdfdt.base ) ;
00414
00415 srdfdt = srdfdt * xsr ;
00416
00417 srdfdt.base = sauve_base ;
00418
00419
00420
00421 Valeur adfdx = uuva ;
00422
00423 adfdx = adfdx.dsdx() ;
00424
00425 sauve_base = adfdx.base ;
00426 adfdx = adfdx * dxdr * srdrdt ;
00427 adfdx.base = sauve_base ;
00428
00429 if (uu.get_dzpuis() == 0) {
00430
00431
00432
00433
00434 resu = srdfdt - adfdx ;
00435
00436
00437 if (mg->get_type_r(nz-1) == UNSURR) {
00438 resu.set_dzpuis(2) ;
00439
00440 }
00441
00442 }
00443
00444 else {
00445 assert(mg->get_type_r(nzm1) == UNSURR) ;
00446
00447 int dzp = uu.get_dzpuis() ;
00448
00449 Valeur tmp = srdfdt - adfdx ;
00450 tmp.annule(nzm1) ;
00451
00452
00453
00454
00455 Valeur tmp_ced = - adfdx ;
00456
00457 tmp_ced.annule(0, nz-2) ;
00458
00459 tmp_ced = tmp_ced.mult_x() ;
00460
00461 tmp_ced = tmp_ced / xsr ;
00462
00463 tmp_ced = tmp_ced + uuva.dsdt() ;
00464 tmp_ced.annule(0, nz-2) ;
00465
00466
00467 resu = tmp + tmp_ced ;
00468
00469 resu.set_dzpuis(dzp+1) ;
00470 }
00471
00472 }
00473
00474 }
00475
00476
00477
00478
00479
00480
00481 void Map_et::srstdsdp(const Cmp& ci, Cmp& resu) const {
00482
00483 assert (ci.get_etat() != ETATNONDEF) ;
00484 assert (ci.get_mp()->get_mg() == mg) ;
00485
00486 if (ci.get_etat() == ETATZERO) {
00487 resu.set_etat_zero() ;
00488 }
00489 else {
00490
00491 assert( ci.get_etat() == ETATQCQ) ;
00492 assert( ci.check_dzpuis(0) ) ;
00493
00494 (ci.va).coef() ;
00495
00496
00497
00498
00499 Valeur srstdfdp = ci.va ;
00500
00501 srstdfdp = srstdfdp.dsdp() ;
00502 srstdfdp = srstdfdp.ssint() ;
00503 srstdfdp = srstdfdp.sx() ;
00504
00505 Base_val sauve_base( srstdfdp.base ) ;
00506
00507 srstdfdp = srstdfdp * xsr ;
00508
00509 srstdfdp.base = sauve_base ;
00510
00511
00512
00513 Valeur bdfdx = ci.va ;
00514
00515 bdfdx = bdfdx.dsdx() ;
00516
00517 sauve_base = bdfdx.base ;
00518 bdfdx = bdfdx * dxdr * srstdrdp ;
00519 bdfdx.base = sauve_base ;
00520
00521
00522
00523
00524 resu = srstdfdp - bdfdx ;
00525
00526 int nz = mg->get_nzone() ;
00527 if (mg->get_type_r(nz-1) == UNSURR) {
00528 resu.set_dzpuis(2) ;
00529
00530 }
00531
00532 }
00533
00534 }
00535
00536 void Map_et::srstdsdp(const Scalar& uu, Scalar& resu) const {
00537
00538 assert (uu.get_etat() != ETATNONDEF) ;
00539 assert (uu.get_mp().get_mg() == mg) ;
00540
00541 if (uu.get_etat() == ETATZERO) {
00542 resu.set_etat_zero() ;
00543 }
00544 else {
00545
00546 assert( uu.get_etat() == ETATQCQ ) ;
00547
00548 const Valeur& uuva = uu.get_spectral_va() ;
00549 uuva.coef() ;
00550
00551 int nz = mg->get_nzone() ;
00552 int nzm1 = nz - 1 ;
00553
00554
00555
00556
00557 Valeur srstdfdp = uuva ;
00558
00559 srstdfdp = srstdfdp.dsdp() ;
00560 srstdfdp = srstdfdp.ssint() ;
00561 srstdfdp = srstdfdp.sx() ;
00562
00563 Base_val sauve_base( srstdfdp.base ) ;
00564
00565 srstdfdp = srstdfdp * xsr ;
00566
00567 srstdfdp.base = sauve_base ;
00568
00569
00570
00571 Valeur bdfdx = uuva ;
00572
00573 bdfdx = bdfdx.dsdx() ;
00574
00575 sauve_base = bdfdx.base ;
00576 bdfdx = bdfdx * dxdr * srstdrdp ;
00577 bdfdx.base = sauve_base ;
00578
00579
00580 if (uu.get_dzpuis() == 0) {
00581
00582
00583
00584 resu = srstdfdp - bdfdx ;
00585
00586
00587 if (mg->get_type_r(nz-1) == UNSURR) {
00588 resu.set_dzpuis(2) ;
00589
00590 }
00591 }
00592
00593 else {
00594 assert(mg->get_type_r(nzm1) == UNSURR) ;
00595
00596 int dzp = uu.get_dzpuis() ;
00597
00598 Valeur tmp = srstdfdp - bdfdx ;
00599 tmp.annule(nzm1) ;
00600
00601
00602
00603 Valeur tmp_ced = - bdfdx ;
00604 tmp_ced.annule(0, nz-2) ;
00605
00606 tmp_ced = tmp_ced.mult_x() ;
00607
00608 tmp_ced = tmp_ced / xsr ;
00609
00610 tmp_ced = tmp_ced + uuva.dsdp().ssint() ;
00611 tmp_ced.annule(0, nz-2) ;
00612
00613
00614 resu = tmp + tmp_ced ;
00615
00616 resu.set_dzpuis(dzp+1) ;
00617 }
00618 }
00619 }
00620
00621
00622
00623
00624
00625 void Map_et::dsdt(const Scalar& ci, Scalar& resu) const {
00626
00627 assert (ci.get_etat() != ETATNONDEF) ;
00628 assert (ci.get_mp().get_mg() == mg) ;
00629
00630 if (ci.get_etat() == ETATZERO) {
00631 resu.set_etat_zero() ;
00632 }
00633 else {
00634
00635
00636
00637 assert( ci.get_etat() == ETATQCQ ) ;
00638
00639
00640
00641
00642
00643 const Valeur& dfdt = ci.get_spectral_va().dsdt() ;
00644
00645
00646
00647
00648
00649 Valeur adfdx = ci.get_spectral_va().dsdx() ;
00650
00651 Base_val sauve_base = adfdx.get_base() ;
00652
00653 adfdx = adfdx * dxdr * drdt ;
00654
00655 adfdx.set_base( sauve_base ) ;
00656
00657
00658
00659
00660 resu = dfdt - adfdx ;
00661
00662 }
00663
00664 }
00665
00666
00667
00668
00669
00670 void Map_et::stdsdp(const Scalar& ci, Scalar& resu) const {
00671
00672 assert (ci.get_etat() != ETATNONDEF) ;
00673 assert (ci.get_mp().get_mg() == mg) ;
00674
00675 if (ci.get_etat() == ETATZERO) {
00676 resu.set_etat_zero() ;
00677 }
00678 else {
00679
00680 assert( ci.get_etat() == ETATQCQ ) ;
00681
00682
00683
00684
00685
00686
00687 const Valeur& stdfdp = ci.get_spectral_va().stdsdp() ;
00688
00689
00690
00691
00692
00693 Valeur adfdx = ci.get_spectral_va().dsdx() ;
00694
00695 Base_val sauve_base = adfdx.get_base() ;
00696
00697 adfdx = adfdx * dxdr * stdrdp ;
00698
00699 adfdx.set_base( sauve_base ) ;
00700
00701
00702
00703
00704 resu = stdfdp - adfdx ;
00705
00706 }
00707
00708 }
00709
00710
00711