00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 char map_et_fait_C[] = "$Header: /cvsroot/Lorene/C++/Source/Map/map_et_fait.C,v 1.6 2012/01/24 14:59:12 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 #include <assert.h>
00058 #include <stdlib.h>
00059 #include <math.h>
00060
00061 #include "map.h"
00062
00063
00064
00065
00066
00067 Mtbl* map_et_fait_r(const Map* cvi) {
00068
00069
00070 const Map_et* cv = static_cast<const Map_et*>(cvi) ;
00071 const Mg3d* mg = cv->get_mg() ;
00072 int nz = mg->get_nzone() ;
00073
00074
00075 Mtbl* mti = new Mtbl(mg) ;
00076 mti->set_etat_qcq() ;
00077
00078
00079 const double* alpha = cv->alpha ;
00080 const double* beta = cv->beta ;
00081 const Valeur& ff = cv->ff ;
00082 const Valeur& gg = cv->gg ;
00083
00084 for (int l=0 ; l<nz ; l++) {
00085
00086 const Grille3d* g = mg->get_grille3d(l) ;
00087
00088 const Tbl& aa = *((cv->aa)[l]) ;
00089 const Tbl& bb = *((cv->bb)[l]) ;
00090
00091 Tbl* tb = (mti->t)[l] ;
00092 tb->set_etat_qcq() ;
00093 double* p_r = tb->t ;
00094
00095 int np = mg->get_np(l) ;
00096 int nt = mg->get_nt(l) ;
00097 int nr = mg->get_nr(l) ;
00098
00099 switch(mg->get_type_r(l)) {
00100
00101 case FIN: case RARE: case FINJAC: {
00102
00103 for (int k=0 ; k<np ; k++) {
00104 for (int j=0 ; j<nt ; j++) {
00105 for (int i=0 ; i<nr ; i++) {
00106 *p_r = alpha[l] * ( (g->x)[i]
00107 + aa(i) * ff(l, k, j, 0)
00108 + bb(i) * gg(l, k, j, 0)
00109 ) + beta[l] ;
00110 p_r++ ;
00111 }
00112 }
00113 }
00114 break ;
00115 }
00116
00117 case UNSURR: {
00118 for (int k=0 ; k<np ; k++) {
00119 for (int j=0 ; j<nt ; j++) {
00120 for (int i=0 ; i<nr ; i++) {
00121 *p_r = 1./( alpha[l] * (
00122 (g->x)[i] + aa(i) * ff(l, k, j, 0)
00123 )
00124 + beta[l] ) ;
00125 p_r++ ;
00126 }
00127 }
00128 }
00129 break ;
00130 }
00131
00132 default: {
00133 cout << "map_et_fait_r: Unknown type_r !" << endl ;
00134 abort () ;
00135 }
00136
00137 }
00138 }
00139
00140
00141 return mti ;
00142 }
00143
00144
00145
00146
00147
00148 Mtbl* map_et_fait_tet(const Map* cvi) {
00149
00150
00151 const Map_et* cv = static_cast<const Map_et*>(cvi) ;
00152 const Mg3d* mg = cv->get_mg() ;
00153 int nz = mg->get_nzone() ;
00154
00155
00156 Mtbl* mti = new Mtbl(mg) ;
00157 mti->set_etat_qcq() ;
00158
00159 for (int l=0 ; l<nz ; l++) {
00160 int nr = mg->get_nr(l);
00161 int nt = mg->get_nt(l);
00162 int np = mg->get_np(l);
00163 const Grille3d* g = mg->get_grille3d(l) ;
00164 Tbl* tb = (mti->t)[l] ;
00165 tb->set_etat_qcq() ;
00166 double* p_r = tb->t ;
00167 for (int k=0 ; k<np ; k++) {
00168 for (int j=0 ; j<nt ; j++) {
00169 for (int i=0 ; i<nr ; i++) {
00170 *p_r = (g->tet)[j] ;
00171 p_r++ ;
00172 }
00173 }
00174 }
00175 }
00176
00177
00178 return mti ;
00179 }
00180
00181
00182
00183
00184
00185 Mtbl* map_et_fait_phi(const Map* cvi) {
00186
00187
00188 const Map_et* cv = static_cast<const Map_et*>(cvi) ;
00189 const Mg3d* mg = cv->get_mg() ;
00190 int nz = mg->get_nzone() ;
00191
00192
00193 Mtbl* mti = new Mtbl(mg) ;
00194 mti->set_etat_qcq() ;
00195
00196 for (int l=0 ; l<nz ; l++) {
00197 int nr = mg->get_nr(l);
00198 int nt = mg->get_nt(l);
00199 int np = mg->get_np(l);
00200 const Grille3d* g = mg->get_grille3d(l) ;
00201 Tbl* tb = (mti->t)[l] ;
00202 tb->set_etat_qcq() ;
00203 double* p_r = tb->t ;
00204 for (int k=0 ; k<np ; k++) {
00205 for (int j=0 ; j<nt ; j++) {
00206 for (int i=0 ; i<nr ; i++) {
00207 *p_r = (g->phi)[k] ;
00208 p_r++ ;
00209 }
00210 }
00211 }
00212 }
00213
00214
00215 return mti ;
00216 }
00217
00218
00219
00220
00221
00222 Mtbl* map_et_fait_x(const Map* cvi) {
00223
00224
00225 const Mg3d* mg = cvi->get_mg() ;
00226
00227
00228 Mtbl* mti = new Mtbl(mg) ;
00229
00230 *mti = (cvi->r) * (cvi->sint) * (cvi->cosp) ;
00231
00232
00233 return mti ;
00234 }
00235
00236
00237
00238
00239
00240 Mtbl* map_et_fait_y(const Map* cvi) {
00241
00242
00243 const Mg3d* mg = cvi->get_mg() ;
00244
00245
00246 Mtbl* mti = new Mtbl(mg) ;
00247
00248 *mti = (cvi->r) * (cvi->sint) * (cvi->sinp) ;
00249
00250
00251 return mti ;
00252 }
00253
00254
00255
00256
00257
00258 Mtbl* map_et_fait_z(const Map* cvi) {
00259
00260
00261 const Mg3d* mg = cvi->get_mg() ;
00262
00263
00264 Mtbl* mti = new Mtbl(mg) ;
00265
00266 *mti = (cvi->r) * (cvi->cost) ;
00267
00268
00269 return mti ;
00270 }
00271
00272
00273
00274
00275
00276 Mtbl* map_et_fait_xa(const Map* cvi) {
00277
00278
00279 const Mg3d* mg = cvi->get_mg() ;
00280
00281
00282 Mtbl* mti = new Mtbl(mg) ;
00283
00284 double r_phi = cvi->get_rot_phi() ;
00285 double t_x = cvi->get_ori_x() ;
00286
00287 if ( fabs(r_phi) < 1.e-14 ) {
00288 *mti = (cvi->x) + t_x ;
00289 }
00290 else if ( fabs(r_phi - M_PI) < 1.e-14 ) {
00291 *mti = - (cvi->x) + t_x ;
00292 }
00293 else {
00294 Mtbl phi = cvi->phi + r_phi ;
00295 *mti = (cvi->r) * (cvi->sint) * cos(phi) + t_x ;
00296 }
00297
00298
00299 return mti ;
00300 }
00301
00302
00303
00304
00305
00306 Mtbl* map_et_fait_ya(const Map* cvi) {
00307
00308
00309 const Mg3d* mg = cvi->get_mg() ;
00310
00311
00312 Mtbl* mti = new Mtbl(mg) ;
00313
00314 double r_phi = cvi->get_rot_phi() ;
00315 double t_y = cvi->get_ori_y() ;
00316
00317 if ( fabs(r_phi) < 1.e-14 ) {
00318 *mti = (cvi->y) + t_y ;
00319 }
00320 else if ( fabs(r_phi - M_PI) < 1.e-14 ) {
00321 *mti = - (cvi->y) + t_y ;
00322 }
00323 else {
00324 Mtbl phi = cvi->phi + r_phi ;
00325 *mti = (cvi->r) * (cvi->sint) * sin(phi) + t_y ;
00326 }
00327
00328
00329 return mti ;
00330 }
00331
00332
00333
00334
00335
00336 Mtbl* map_et_fait_za(const Map* cvi) {
00337
00338
00339 const Mg3d* mg = cvi->get_mg() ;
00340
00341 double t_z = cvi->get_ori_z() ;
00342
00343
00344 Mtbl* mti = new Mtbl(mg) ;
00345
00346 *mti = (cvi->r) * (cvi->cost) + t_z ;
00347
00348
00349 return mti ;
00350 }
00351
00352
00353
00354
00355
00356 Mtbl* map_et_fait_sint(const Map* cvi) {
00357
00358
00359 const Map_et* cv = static_cast<const Map_et*>(cvi) ;
00360 const Mg3d* mg = cv->get_mg() ;
00361 int nz = mg->get_nzone() ;
00362
00363
00364 Mtbl* mti = new Mtbl(mg) ;
00365 mti->set_etat_qcq() ;
00366
00367 for (int l=0 ; l<nz ; l++) {
00368 int nr = mg->get_nr(l);
00369 int nt = mg->get_nt(l);
00370 int np = mg->get_np(l);
00371 const Grille3d* g = mg->get_grille3d(l) ;
00372 Tbl* tb = (mti->t)[l] ;
00373 tb->set_etat_qcq() ;
00374 double* p_r = tb->t ;
00375 for (int k=0 ; k<np ; k++) {
00376 for (int j=0 ; j<nt ; j++) {
00377 for (int i=0 ; i<nr ; i++) {
00378 *p_r = sin(g->tet[j]) ;
00379 p_r++ ;
00380 }
00381 }
00382 }
00383 }
00384
00385
00386 return mti ;
00387 }
00388
00389 Mtbl* map_et_fait_cost(const Map* cvi) {
00390
00391
00392 const Map_et* cv = static_cast<const Map_et*>(cvi) ;
00393 const Mg3d* mg = cv->get_mg() ;
00394 int nz = mg->get_nzone() ;
00395
00396
00397 Mtbl* mti = new Mtbl(mg) ;
00398 mti->set_etat_qcq() ;
00399
00400 for (int l=0 ; l<nz ; l++) {
00401 int nr = mg->get_nr(l);
00402 int nt = mg->get_nt(l);
00403 int np = mg->get_np(l);
00404 const Grille3d* g = mg->get_grille3d(l) ;
00405 Tbl* tb = (mti->t)[l] ;
00406 tb->set_etat_qcq() ;
00407 double* p_r = tb->t ;
00408 for (int k=0 ; k<np ; k++) {
00409 for (int j=0 ; j<nt ; j++) {
00410 for (int i=0 ; i<nr ; i++) {
00411 *p_r = cos(g->tet[j]) ;
00412 p_r++ ;
00413 }
00414 }
00415 }
00416 }
00417
00418
00419 return mti ;
00420 }
00421
00422 Mtbl* map_et_fait_sinp(const Map* cvi) {
00423
00424
00425 const Map_et* cv = static_cast<const Map_et*>(cvi) ;
00426 const Mg3d* mg = cv->get_mg() ;
00427 int nz = mg->get_nzone() ;
00428
00429
00430 Mtbl* mti = new Mtbl(mg) ;
00431 mti->set_etat_qcq() ;
00432
00433 for (int l=0 ; l<nz ; l++) {
00434 int nr = mg->get_nr(l);
00435 int nt = mg->get_nt(l);
00436 int np = mg->get_np(l);
00437 const Grille3d* g = mg->get_grille3d(l) ;
00438 Tbl* tb = (mti->t)[l] ;
00439 tb->set_etat_qcq() ;
00440 double* p_r = tb->t ;
00441 for (int k=0 ; k<np ; k++) {
00442 for (int j=0 ; j<nt ; j++) {
00443 for (int i=0 ; i<nr ; i++) {
00444 *p_r = sin(g->phi[k]) ;
00445 p_r++ ;
00446 }
00447 }
00448 }
00449 }
00450
00451
00452 return mti ;
00453 }
00454
00455 Mtbl* map_et_fait_cosp(const Map* cvi) {
00456
00457
00458 const Map_et* cv = static_cast<const Map_et*>(cvi) ;
00459 const Mg3d* mg = cv->get_mg() ;
00460 int nz = mg->get_nzone() ;
00461
00462
00463 Mtbl* mti = new Mtbl(mg) ;
00464 mti->set_etat_qcq() ;
00465
00466 for (int l=0 ; l<nz ; l++) {
00467 int nr = mg->get_nr(l);
00468 int nt = mg->get_nt(l);
00469 int np = mg->get_np(l);
00470 const Grille3d* g = mg->get_grille3d(l) ;
00471 Tbl* tb = (mti->t)[l] ;
00472 tb->set_etat_qcq() ;
00473 double* p_r = tb->t ;
00474 for (int k=0 ; k<np ; k++) {
00475 for (int j=0 ; j<nt ; j++) {
00476 for (int i=0 ; i<nr ; i++) {
00477 *p_r = cos(g->phi[k]) ;
00478 p_r++ ;
00479 }
00480 }
00481 }
00482 }
00483
00484
00485 return mti ;
00486 }
00487
00488
00489
00490
00491
00492
00493
00494 Mtbl* map_et_fait_xsr(const Map* cvi) {
00495
00496
00497 const Map_et* cv = static_cast<const Map_et*>(cvi) ;
00498 const Mg3d* mg = cv->get_mg() ;
00499 int nz = mg->get_nzone() ;
00500
00501
00502 Mtbl* mti = new Mtbl(mg) ;
00503 mti->set_etat_qcq() ;
00504
00505
00506 const double* alpha = cv->alpha ;
00507 const double* beta = cv->beta ;
00508 const Valeur& ff = cv->ff ;
00509 const Valeur& gg = cv->gg ;
00510 const Tbl& asx = cv->aasx ;
00511 const Tbl& bsx = cv->bbsx ;
00512 const Tbl& asxm1 = cv->zaasx ;
00513
00514 for (int l=0 ; l<nz ; l++) {
00515 int nr = mg->get_nr(l);
00516 int nt = mg->get_nt(l) ;
00517 int np = mg->get_np(l) ;
00518 const Grille3d* g = mg->get_grille3d(l) ;
00519
00520 const Tbl& aa = *((cv->aa)[l]) ;
00521 const Tbl& bb = *((cv->bb)[l]) ;
00522
00523 Tbl* tb = (mti->t)[l] ;
00524 tb->set_etat_qcq() ;
00525 double* p_r = tb->t ;
00526
00527 switch(mg->get_type_r(l)) {
00528
00529 case RARE: {
00530 assert(beta[l]==0) ;
00531 for (int k=0 ; k<np ; k++) {
00532 for (int j=0 ; j<nt ; j++) {
00533 for (int i=0 ; i<nr ; i++) {
00534 *p_r = 1. / ( alpha[l] * ( 1. + asx(i) * ff(l, k, j, 0)
00535 + bsx(i) * gg(l, k, j, 0)
00536 ) ) ;
00537 p_r++ ;
00538 }
00539 }
00540 }
00541 break ;
00542 }
00543
00544 case FINJAC: {
00545 for (int k=0 ; k<np ; k++) {
00546 for (int j=0 ; j<nt ; j++) {
00547 for (int i=0 ; i<nr ; i++) {
00548 *p_r = 1. / ( alpha[l] * ( (g->x)[i]
00549 + aa(i) * ff(l, k, j, 0)
00550 + bb(i) * gg(l, k, j, 0)
00551 ) + beta[l] );
00552 p_r++ ;
00553 }
00554 }
00555 }
00556 break ;
00557 }
00558
00559 case FIN: {
00560 for (int k=0 ; k<np ; k++) {
00561 for (int j=0 ; j<nt ; j++) {
00562 for (int i=0 ; i<nr ; i++) {
00563 *p_r = 1. / ( alpha[l] * ( (g->x)[i]
00564 + aa(i) * ff(l, k, j, 0)
00565 + bb(i) * gg(l, k, j, 0)
00566 ) + beta[l] );
00567 p_r++ ;
00568 }
00569 }
00570 }
00571 break ;
00572 }
00573
00574 case UNSURR: {
00575 assert(beta[l] == - alpha[l]) ;
00576 for (int k=0 ; k<np ; k++) {
00577 for (int j=0 ; j<nt ; j++) {
00578 for (int i=0 ; i<nr ; i++) {
00579 *p_r = 1. / ( alpha[l] * ( 1.
00580 + asxm1(i) * ff(l, k, j, 0)
00581 ) ) ;
00582 p_r++ ;
00583 }
00584 }
00585 }
00586 break ;
00587 }
00588
00589 default: {
00590 cout << "map_et_fait_xsr: unknown type_r !" << endl ;
00591 abort() ;
00592 }
00593
00594 }
00595 }
00596
00597
00598 return mti ;
00599
00600 }
00601