map_log_fait.C

00001 /*
00002  *   Copyright (c) 2004 Philippe Granclement
00003  *
00004  *   This file is part of LORENE.
00005  *
00006  *   LORENE is free software; you can redistribute it and/or modify
00007  *   it under the terms of the GNU General Public License as published by
00008  *   the Free Software Foundation; either version 2 of the License, or
00009  *   (at your option) any later version.
00010  *
00011  *   LORENE is distributed in the hope that it will be useful,
00012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *   GNU General Public License for more details.
00015  *
00016  *   You should have received a copy of the GNU General Public License
00017  *   along with LORENE; if not, write to the Free Software
00018  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  *
00020  */
00021 
00022 
00023 char map_log_fait_C[] = "$Header: /cvsroot/Lorene/C++/Source/Map/map_log_fait.C,v 1.1 2004/06/22 08:49:58 p_grandclement Exp $" ;
00024 
00025 /*
00026  * $Id: map_log_fait.C,v 1.1 2004/06/22 08:49:58 p_grandclement Exp $
00027  * $Log: map_log_fait.C,v $
00028  * Revision 1.1  2004/06/22 08:49:58  p_grandclement
00029  * Addition of everything needed for using the logarithmic mapping
00030  *
00031  *
00032  *
00033  * $Header: /cvsroot/Lorene/C++/Source/Map/map_log_fait.C,v 1.1 2004/06/22 08:49:58 p_grandclement Exp $
00034  *
00035  */
00036 
00037 // Includes
00038 #include <assert.h>
00039 #include <stdlib.h>
00040 #include <math.h>
00041 
00042 #include "mtbl.h"
00043 #include "map.h"
00044 #include "proto.h"
00045 
00046             //----------------//
00047             // Coord. radiale //
00048             //----------------//
00049 
00050 Mtbl* map_log_fait_r(const Map* cvi) {
00051 
00052     // recup du changement de variable
00053     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00054     const Mg3d* mg = cv->get_mg() ;
00055     int nz = mg->get_nzone() ;
00056     
00057     // Le resultat
00058     Mtbl* mti = new Mtbl(mg) ;
00059     mti->set_etat_qcq() ;
00060     
00061     // Pour le confort
00062     Tbl alpha = cv->alpha ;
00063     Tbl beta = cv->beta ;
00064     Itbl type_var = cv->type_var ;
00065 
00066     int i, j, k ;
00067     for (int l=0 ; l<nz ; l++) {
00068     int ir = mg->get_nr(l);
00069     int it = mg->get_nt(l) ;
00070     int ip = mg->get_np(l) ;
00071     const Grille3d* g = mg->get_grille3d(l) ;
00072     Tbl* tb = (mti->t)[l] ;
00073     tb->set_etat_qcq() ;
00074     double* p_r = tb->t ;
00075     
00076     switch (type_var(l)) {
00077     case AFFINE : {
00078 
00079       switch(mg->get_type_r(l)) {
00080       case FIN: case RARE:
00081         for (k=0 ; k<ip ; k++) {
00082           for (j=0 ; j<it ; j++) {
00083         for (i=0 ; i<ir ; i++) {
00084           *p_r = alpha(l) * (g->x)[i] + beta(l) ;
00085           p_r++ ;
00086         }       // Fin de boucle sur r
00087           } // Fin de boucle sur theta
00088         }       // Fin de boucle sur phi
00089         break ;
00090         
00091       case UNSURR:
00092         for (k=0 ; k<ip ; k++) {
00093           for (j=0 ; j<it ; j++) {
00094         for (i=0 ; i<ir ; i++) {
00095           *p_r = 1./(alpha(l) * (g->x)[i] + beta(l)) ;
00096           p_r++ ;
00097         }       // Fin de boucle sur r
00098           } // Fin de boucle sur theta
00099         }       // Fin de boucle sur phi
00100         break ;
00101         
00102       default:
00103         cout << "Map_log_fait_r: unknown type_r !\n" ;
00104         abort () ;
00105         exit(-1) ;
00106         
00107       }     // Fin du switch 1
00108       break ;
00109     }
00110 
00111     case LOG : {
00112       switch(mg->get_type_r(l)) {
00113       case FIN:
00114         for (k=0 ; k<ip ; k++) {
00115           for (j=0 ; j<it ; j++) {
00116         for (i=0 ; i<ir ; i++) {
00117           *p_r = exp(alpha(l) * (g->x)[i] + beta(l)) ;
00118           p_r++ ;
00119         }       // Fin de boucle sur r
00120           } // Fin de boucle sur theta
00121         }       // Fin de boucle sur phi
00122         break ;
00123       default: {
00124         cout << "Map_log_fait_r: unknown type_r !\n" ;
00125         abort () ;
00126         exit(-1) ;
00127       }
00128       }     // Fin du switch 2
00129       break ;
00130     }
00131     default: {
00132       cout << "Map_log_fait_r: unknown type_r !\n" ;
00133       abort () ;
00134       exit(-1) ;
00135     }
00136     }
00137  
00138     }       // Fin de boucle sur zone
00139     
00140     // Termine
00141     return mti ;
00142 }
00143 
00144             //--------------//
00145             // Coord. Theta //
00146             //--------------//
00147 
00148 Mtbl* map_log_fait_tet(const Map* cvi) {
00149 
00150     // recup du changement de variable
00151     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00152     const Mg3d* mg = cv->get_mg() ;
00153     int nz = mg->get_nzone() ;
00154         
00155     // Le resultat
00156     Mtbl* mti = new Mtbl(mg) ;
00157     mti->set_etat_qcq() ;
00158     
00159     int i, j, k ;
00160     for (int l=0 ; l<nz ; l++) {
00161     int ir = mg->get_nr(l);
00162     int it = mg->get_nt(l);
00163     int ip = mg->get_np(l);
00164     const Grille3d* g = mg->get_grille3d(l) ;
00165     Tbl* tb = (mti->t)[l] ;
00166     tb->set_etat_qcq() ;
00167     double* p_r = tb->t ;
00168     for (k=0 ; k<ip ; k++) {
00169         for (j=0 ; j<it ; j++) {
00170         for (i=0 ; i<ir ; i++) {
00171             *p_r = (g->tet)[j] ;
00172             p_r++ ;
00173         }   // Fin de boucle sur r
00174         }   // Fin de boucle sur theta
00175     }   // Fin de boucle sur phi
00176     }   // Fin de boucle sur zone
00177 
00178     // Termine
00179     return mti ;    
00180 }
00181 
00182             //------------//
00183             // Coord. Phi //
00184             //------------//
00185 
00186 Mtbl* map_log_fait_phi(const Map* cvi) {
00187 
00188     // recup du changement de variable
00189     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00190     const Mg3d* mg = cv->get_mg() ;
00191     int nz = mg->get_nzone() ;
00192     
00193     // Le resultat
00194     Mtbl* mti = new Mtbl(mg) ;
00195     mti->set_etat_qcq() ;
00196     
00197     int i, j, k ;
00198     for (int l=0 ; l<nz ; l++) {
00199     int ir = mg->get_nr(l);
00200     int it = mg->get_nt(l);
00201     int ip = mg->get_np(l);
00202     const Grille3d* g = mg->get_grille3d(l) ;
00203     Tbl* tb = (mti->t)[l] ;
00204     tb->set_etat_qcq() ;
00205     double* p_r = tb->t ;
00206     for (k=0 ; k<ip ; k++) {
00207         for (j=0 ; j<it ; j++) {
00208         for (i=0 ; i<ir ; i++) {
00209             *p_r = (g->phi)[k] ;
00210             p_r++ ;
00211         }   // Fin de boucle sur r
00212         }   // Fin de boucle sur theta
00213     }   // Fin de boucle sur phi
00214     }   // Fin de boucle sur zone
00215    
00216     // Termine
00217     return mti ; 
00218 }
00219 
00220             //----------//
00221             // Coord. X //
00222             //----------//
00223 
00224 Mtbl* map_log_fait_x(const Map* cvi) {
00225 
00226     // recup de la grille
00227     const Mg3d* mg = cvi->get_mg() ;
00228     
00229     // Le resultat
00230     Mtbl* mti = new Mtbl(mg) ;
00231     
00232     *mti = (cvi->r) * (cvi->sint) * (cvi->cosp) ;
00233 
00234     // Termine
00235     return mti ;
00236 }
00237 
00238             //----------//
00239             // Coord. Y //
00240             //----------//
00241 
00242 Mtbl* map_log_fait_y(const Map* cvi) {
00243 
00244     // recup de la grille
00245     const Mg3d* mg = cvi->get_mg() ;
00246     
00247     // Le resultat
00248     Mtbl* mti = new Mtbl(mg) ;
00249     
00250     *mti = (cvi->r) * (cvi->sint) * (cvi->sinp) ;
00251    
00252     // Termine
00253     return mti ; 
00254 }
00255 
00256             //----------//
00257             // Coord. Z //
00258             //----------//
00259 
00260 Mtbl* map_log_fait_z(const Map* cvi) {
00261 
00262     // recup de la grille
00263     const Mg3d* mg = cvi->get_mg() ;
00264     
00265     // Le resultat
00266     Mtbl* mti = new Mtbl(mg) ;
00267     
00268     *mti = (cvi->r) * (cvi->cost) ;
00269     
00270     // Termine
00271     return mti ;
00272 }
00273 
00274             //--------------------//
00275             // Coord. X "absolue" //
00276             //--------------------//
00277 
00278 Mtbl* map_log_fait_xa(const Map* cvi) {
00279 
00280     // recup de la grille
00281     const Mg3d* mg = cvi->get_mg() ;
00282     
00283     // Le resultat
00284     Mtbl* mti = new Mtbl(mg) ;
00285     
00286     double r_phi = cvi->get_rot_phi() ; 
00287     double t_x = cvi->get_ori_x() ; 
00288 
00289     if ( fabs(r_phi) < 1.e-14 ) {   
00290     *mti = (cvi->x) + t_x ; 
00291     }
00292     else if ( fabs(r_phi - M_PI) < 1.e-14 ) {
00293     *mti = - (cvi->x) + t_x ;   
00294     }
00295     else {
00296     Mtbl phi = cvi->phi + r_phi ;
00297     *mti = (cvi->r) * (cvi->sint) * cos(phi) + t_x ;
00298     }
00299 
00300     // Termine
00301     return mti ;
00302 }
00303 
00304             //--------------------//
00305             // Coord. Y "absolue" //
00306             //--------------------//
00307 
00308 Mtbl* map_log_fait_ya(const Map* cvi) {
00309 
00310     // recup de la grille
00311     const Mg3d* mg = cvi->get_mg() ;
00312     
00313     // Le resultat
00314     Mtbl* mti = new Mtbl(mg) ;
00315     
00316     double r_phi = cvi->get_rot_phi() ; 
00317     double t_y = cvi->get_ori_y() ; 
00318 
00319     if ( fabs(r_phi) < 1.e-14 ) {   
00320     *mti = (cvi->y) + t_y ; 
00321     }
00322     else if ( fabs(r_phi - M_PI) < 1.e-14 ) {
00323     *mti = - (cvi->y) + t_y ;   
00324     }
00325     else {
00326     Mtbl phi = cvi->phi + r_phi ;
00327     *mti = (cvi->r) * (cvi->sint) * sin(phi) + t_y ;
00328     }
00329 
00330     // Termine
00331     return mti ;
00332 }
00333 
00334             //--------------------//
00335             // Coord. Z "absolue" //
00336             //--------------------//
00337 
00338 Mtbl* map_log_fait_za(const Map* cvi) {
00339 
00340     // recup de la grille
00341     const Mg3d* mg = cvi->get_mg() ;
00342     
00343     double t_z = cvi->get_ori_z() ; 
00344 
00345     // Le resultat
00346     Mtbl* mti = new Mtbl(mg) ;
00347     
00348     *mti = (cvi->r) * (cvi->cost) + t_z ; 
00349 
00350     // Termine
00351     return mti ;       
00352 }
00353 
00354             //---------------//
00355             // Trigonometrie //
00356             //---------------//
00357 
00358 Mtbl* map_log_fait_sint(const Map* cvi) {
00359 
00360     // recup du changement de variable
00361     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00362     const Mg3d* mg = cv->get_mg() ;
00363     int nz = mg->get_nzone() ;
00364     
00365     // Le resultat
00366     Mtbl* mti = new Mtbl(mg) ;
00367     mti->set_etat_qcq() ;
00368     
00369     int i, j, k ;
00370     for (int l=0 ; l<nz ; l++) {
00371     int ir = mg->get_nr(l);
00372     int it = mg->get_nt(l);
00373     int ip = mg->get_np(l);
00374     const Grille3d* g = mg->get_grille3d(l) ;
00375     Tbl* tb = (mti->t)[l] ;
00376     tb->set_etat_qcq() ;
00377     double* p_r = tb->t ;
00378     for (k=0 ; k<ip ; k++) {
00379         for (j=0 ; j<it ; j++) {
00380         for (i=0 ; i<ir ; i++) {
00381             *p_r = sin(g->tet[j]) ;
00382             p_r++ ;
00383         }   // Fin de boucle sur r
00384         }   // Fin de boucle sur theta
00385     }   // Fin de boucle sur phi
00386     }   // Fin de boucle sur zone
00387     
00388     // Termine
00389     return mti ;
00390 }
00391 
00392 Mtbl* map_log_fait_cost(const Map* cvi) {
00393 
00394     // recup du changement de variable
00395     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00396     const Mg3d* mg = cv->get_mg() ;
00397     int nz = mg->get_nzone() ;
00398     
00399     // Le resultat
00400     Mtbl* mti = new Mtbl(mg) ;
00401     mti->set_etat_qcq() ;
00402     
00403     int i, j, k ;
00404     for (int l=0 ; l<nz ; l++) {
00405     int ir = mg->get_nr(l);
00406     int it = mg->get_nt(l);
00407     int ip = mg->get_np(l);
00408     const Grille3d* g = mg->get_grille3d(l) ;
00409     Tbl* tb = (mti->t)[l] ;
00410     tb->set_etat_qcq() ;
00411     double* p_r = tb->t ;
00412     for (k=0 ; k<ip ; k++) {
00413         for (j=0 ; j<it ; j++) {
00414         for (i=0 ; i<ir ; i++) {
00415             *p_r = cos(g->tet[j]) ;
00416             p_r++ ;
00417         }   // Fin de boucle sur r
00418         }   // Fin de boucle sur theta
00419     }   // Fin de boucle sur phi
00420     }   // Fin de boucle sur zone
00421     
00422     // Termine
00423     return mti ;
00424 }
00425 
00426 Mtbl* map_log_fait_sinp(const Map* cvi) {
00427 
00428     // recup du changement de variable
00429     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00430     const Mg3d* mg = cv->get_mg() ;
00431     int nz = mg->get_nzone() ;
00432     
00433     // Le resultat
00434     Mtbl* mti = new Mtbl(mg) ;
00435     mti->set_etat_qcq() ;
00436     
00437     int i, j, k ;
00438     for (int l=0 ; l<nz ; l++) {
00439     int ir = mg->get_nr(l);
00440     int it = mg->get_nt(l);
00441     int ip = mg->get_np(l);
00442     const Grille3d* g = mg->get_grille3d(l) ;
00443     Tbl* tb = (mti->t)[l] ;
00444     tb->set_etat_qcq() ;
00445     double* p_r = tb->t ;
00446     for (k=0 ; k<ip ; k++) {
00447         for (j=0 ; j<it ; j++) {
00448         for (i=0 ; i<ir ; i++) {
00449             *p_r = sin(g->phi[k]) ;
00450             p_r++ ;
00451         }   // Fin de boucle sur r
00452         }   // Fin de boucle sur theta
00453     }   // Fin de boucle sur phi
00454     }   // Fin de boucle sur zone
00455     
00456     // Termine
00457     return mti ;
00458 }
00459 
00460 Mtbl* map_log_fait_cosp(const Map* cvi) {
00461 
00462     // recup du changement de variable
00463     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00464     const Mg3d* mg = cv->get_mg() ;
00465     int nz = mg->get_nzone() ;
00466     
00467     // Le resultat
00468     Mtbl* mti = new Mtbl(mg) ;
00469     mti->set_etat_qcq() ;
00470     
00471     int i, j, k ;
00472     for (int l=0 ; l<nz ; l++) {
00473     int ir = mg->get_nr(l);
00474     int it = mg->get_nt(l);
00475     int ip = mg->get_np(l);
00476     const Grille3d* g = mg->get_grille3d(l) ;
00477     Tbl* tb = (mti->t)[l] ;
00478     tb->set_etat_qcq() ;
00479     double* p_r = tb->t ;
00480     for (k=0 ; k<ip ; k++) {
00481         for (j=0 ; j<it ; j++) {
00482         for (i=0 ; i<ir ; i++) {
00483             *p_r = cos(g->phi[k]) ;
00484             p_r++ ;
00485         }   // Fin de boucle sur r
00486         }   // Fin de boucle sur theta
00487     }   // Fin de boucle sur phi
00488     }   // Fin de boucle sur zone
00489     
00490     // Termine
00491     return mti ;
00492 }
00493 
00494 /*
00495  ************************************************************************
00496  *  x/R dans le noyau,  1/R dans les coquilles,  (x-1)/U dans la ZEC
00497  ************************************************************************
00498  */
00499 
00500 Mtbl* map_log_fait_xsr(const Map* cvi) {
00501 
00502     // recup du changement de variable
00503     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00504     const Mg3d* mg = cv->get_mg() ;
00505     int nz = mg->get_nzone() ;
00506     
00507     // Le resultat
00508     Mtbl* mti = new Mtbl(mg) ;
00509     mti->set_etat_qcq() ;
00510         
00511     // Pour le confort
00512     Tbl alpha = cv->alpha ;
00513     Tbl beta = cv->beta ;
00514     Itbl type_var = cv->type_var ;
00515 
00516     int i, j, k ;
00517     for (int l=0 ; l<nz ; l++) {
00518     int ir = mg->get_nr(l);
00519     int it = mg->get_nt(l) ;
00520     int ip = mg->get_np(l) ;
00521     const Grille3d* g = mg->get_grille3d(l) ;
00522     Tbl* tb = (mti->t)[l] ;
00523     tb->set_etat_qcq() ;
00524     double* p_r = tb->t ;
00525     
00526     switch (type_var(l)) {
00527     case AFFINE : {
00528       
00529       switch(mg->get_type_r(l)) {
00530         
00531       case RARE: {
00532         for (k=0 ; k<ip ; k++) {
00533           for (j=0 ; j<it ; j++) {
00534         for (i=0 ; i<ir ; i++) {
00535           *p_r = 1. / alpha(l) ;
00536           p_r++ ;
00537         }       // Fin de boucle sur r
00538           } // Fin de boucle sur theta
00539         }       // Fin de boucle sur phi
00540         break ; 
00541       }
00542       case FIN: { 
00543         for (k=0 ; k<ip ; k++) {
00544           for (j=0 ; j<it ; j++) {
00545         for (i=0 ; i<ir ; i++) {
00546           *p_r = 1. / ( alpha(l) * (g->x)[i] + beta(l) ) ;
00547           p_r++ ;
00548         }       // Fin de boucle sur r
00549           } // Fin de boucle sur theta
00550         }       // Fin de boucle sur phi
00551         break ;
00552       }
00553       case UNSURR: {
00554         for (k=0 ; k<ip ; k++) {
00555           for (j=0 ; j<it ; j++) {
00556         for (i=0 ; i<ir ; i++) {
00557           *p_r = 1. / alpha(l) ;
00558           p_r++ ;
00559         }       // Fin de boucle sur r
00560           } // Fin de boucle sur theta
00561         }       // Fin de boucle sur phi
00562         break ;
00563       }
00564       default: {
00565         cout << "map_log_fait_xsr: unknown type_r !" << endl ;
00566         abort() ;
00567       }
00568       }     // Fin du switch 1 
00569       break ;
00570     }
00571       
00572     case LOG: {
00573       switch (mg->get_type_r(l)) {
00574       case FIN: { 
00575         for (k=0 ; k<ip ; k++) {
00576           for (j=0 ; j<it ; j++) {
00577         for (i=0 ; i<ir ; i++) {
00578           *p_r = 1. / exp( alpha(l) * (g->x)[i] + beta(l) ) ;
00579           p_r++ ;
00580         }       // Fin de boucle sur r
00581           } // Fin de boucle sur theta
00582         }       // Fin de boucle sur phi
00583         break ;
00584       }
00585       default: {
00586         cout << "map_log_fait_xsr: unknown type_r !" << endl ;
00587         abort() ;
00588       }
00589       }
00590       break ;
00591     }
00592 
00593     default:
00594       cout << "map_log_fait_xsr: unknown type_r !" << endl ;
00595       abort() ; 
00596     }           // Fin de boucle sur zone
00597     }
00598     // Termine
00599     return mti ;
00600 
00601 }
00602 
00603 /*
00604  ************************************************************************
00605  *              1/(dR/dx)       ( -1/(dU/dx) ds la ZEC )
00606  ************************************************************************
00607  */
00608 
00609 Mtbl* map_log_fait_dxdr(const Map* cvi) {
00610 
00611  // recup du changement de variable
00612     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00613     const Mg3d* mg = cv->get_mg() ;
00614     int nz = mg->get_nzone() ;
00615     
00616     // Le resultat
00617     Mtbl* mti = new Mtbl(mg) ;
00618     mti->set_etat_qcq() ;
00619         
00620     // Pour le confort
00621     Tbl alpha = cv->alpha ;
00622     Tbl beta = cv->beta ;
00623     Itbl type_var = cv->type_var ;
00624 
00625     int i, j, k ;
00626     for (int l=0 ; l<nz ; l++) {
00627     int ir = mg->get_nr(l);
00628     int it = mg->get_nt(l) ;
00629     int ip = mg->get_np(l) ;
00630     const Grille3d* g = mg->get_grille3d(l) ;
00631     Tbl* tb = (mti->t)[l] ;
00632     tb->set_etat_qcq() ;
00633     double* p_r = tb->t ;
00634     
00635     switch (type_var(l)) {
00636     case AFFINE : {
00637       switch(mg->get_type_r(l)) {
00638         
00639       case RARE: case FIN:
00640         for (k=0 ; k<ip ; k++) {
00641           for (j=0 ; j<it ; j++) {
00642         for (i=0 ; i<ir ; i++) {
00643           *p_r = 1. / alpha(l) ;
00644           p_r++ ;
00645         }       // Fin de boucle sur r
00646           } // Fin de boucle sur theta
00647         }       // Fin de boucle sur phi
00648         break ; 
00649         
00650         
00651       case UNSURR:
00652         for (k=0 ; k<ip ; k++) {
00653           for (j=0 ; j<it ; j++) {
00654         for (i=0 ; i<ir ; i++) {
00655           *p_r = - 1. / alpha(l) ;
00656           p_r++ ;
00657         }       // Fin de boucle sur r
00658           } // Fin de boucle sur theta
00659         }       // Fin de boucle sur phi
00660         break ;
00661         
00662       default:
00663         cout << "map_log_fait_dxdr: unknown type_r !" << endl ;
00664         abort() ;
00665         
00666       }     // Fin du switch 1 
00667       break ;
00668     }
00669     case LOG : {
00670       switch(mg->get_type_r(l)) {
00671       case FIN: 
00672         for (k=0 ; k<ip ; k++) {
00673           for (j=0 ; j<it ; j++) {
00674         for (i=0 ; i<ir ; i++) {
00675           *p_r = 1./ (alpha(l) * exp(alpha(l) * (g->x)[i] + beta(l))) ;
00676           p_r++ ;
00677         }       // Fin de boucle sur r
00678           } // Fin de boucle sur theta
00679         }       // Fin de boucle sur phi
00680         break ;
00681       
00682       default:
00683         cout << "map_log_fait_dxdr: unknown type_r !" << endl ;
00684         abort() ;
00685       }
00686       break ;
00687     }
00688 
00689     default:
00690       cout << "map_log_fait_dxdr: unknown type_r !" << endl ;
00691       abort() ; 
00692     }           // Fin de boucle sur zone
00693     }
00694     // Termine
00695     return mti ;
00696 
00697 }
00698       
00699 
00700   
00701 /*
00702  ************************************************************************
00703  *              dR/dtheta
00704  ************************************************************************
00705  */
00706 
00707 Mtbl* map_log_fait_drdt(const Map* cvi) {
00708 
00709     // recup de la grille 
00710     const Mg3d* mg = cvi->get_mg() ;
00711     
00712     // Le resultat est nul : 
00713     Mtbl* mti = new Mtbl(mg) ;
00714     mti->set_etat_zero() ; 
00715 
00716     return mti ; 
00717 } 
00718 
00719 /*
00720  ************************************************************************
00721  *              1/sin(theta) dR/dphi
00722  ************************************************************************
00723  */
00724 
00725 Mtbl* map_log_fait_stdrdp(const Map* cvi) {
00726 
00727     // recup de la grille 
00728     const Mg3d* mg = cvi->get_mg() ;
00729     
00730     // Le resultat est nul : 
00731     Mtbl* mti = new Mtbl(mg) ;
00732     mti->set_etat_zero() ; 
00733 
00734     return mti ; 
00735 } 
00736 
00737 /*
00738  ************************************************************************
00739  *              1/R dR/dtheta
00740  ************************************************************************
00741  */
00742 
00743 Mtbl* map_log_fait_srdrdt(const Map* cvi) {
00744 
00745     // recup de la grille 
00746     const Mg3d* mg = cvi->get_mg() ;
00747     
00748     // Le resultat est nul : 
00749     Mtbl* mti = new Mtbl(mg) ;
00750     mti->set_etat_zero() ; 
00751 
00752     return mti ; 
00753 } 
00754 
00755 /*
00756  ************************************************************************
00757  *              1/(R sin(theta)) dR/dphi
00758  ************************************************************************
00759  */
00760 
00761 Mtbl* map_log_fait_srstdrdp(const Map* cvi) {
00762 
00763     // recup de la grille 
00764     const Mg3d* mg = cvi->get_mg() ;
00765     
00766     // Le resultat est nul : 
00767     Mtbl* mti = new Mtbl(mg) ;
00768     mti->set_etat_zero() ; 
00769 
00770     return mti ; 
00771 } 
00772 
00773 /*
00774  ************************************************************************
00775  *              1/R^2 dR/dtheta
00776  ************************************************************************
00777  */
00778 
00779 Mtbl* map_log_fait_sr2drdt(const Map* cvi) {
00780 
00781     // recup de la grille 
00782     const Mg3d* mg = cvi->get_mg() ;
00783     
00784     // Le resultat est nul : 
00785     Mtbl* mti = new Mtbl(mg) ;
00786     mti->set_etat_zero() ; 
00787 
00788     return mti ; 
00789 } 
00790 
00791 /*
00792  ************************************************************************
00793  *              1/(R^2 sin(theta)) dR/dphi
00794  ************************************************************************
00795  */
00796 
00797 Mtbl* map_log_fait_sr2stdrdp(const Map* cvi) {
00798 
00799     // recup de la grille 
00800     const Mg3d* mg = cvi->get_mg() ;
00801     
00802     // Le resultat est nul : 
00803     Mtbl* mti = new Mtbl(mg) ;
00804     mti->set_etat_zero() ; 
00805 
00806     return mti ; 
00807 } 
00808 
00809 /*
00810  ************************************************************************
00811  *              d^2R/dx^2
00812  ************************************************************************
00813  */
00814 
00815 Mtbl* map_log_fait_d2rdx2(const Map* cvi) {
00816  // recup du changement de variable
00817     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00818     const Mg3d* mg = cv->get_mg() ;
00819     int nz = mg->get_nzone() ;
00820     
00821     // Le resultat
00822     Mtbl* mti = new Mtbl(mg) ;
00823     mti->set_etat_qcq() ;
00824         
00825     // Pour le confort
00826     Tbl alpha = cv->alpha ;
00827     Tbl beta = cv->beta ;
00828     Itbl type_var = cv->type_var ;
00829 
00830     int i, j, k ;
00831     for (int l=0 ; l<nz ; l++) {
00832     int ir = mg->get_nr(l);
00833     int it = mg->get_nt(l) ;
00834     int ip = mg->get_np(l) ;
00835     const Grille3d* g = mg->get_grille3d(l) ;
00836     Tbl* tb = (mti->t)[l] ;
00837     tb->set_etat_qcq() ;
00838     double* p_r = tb->t ;
00839     
00840     switch (type_var(l)) {
00841     case AFFINE : {
00842       switch(mg->get_type_r(l)) {
00843         
00844       case RARE: case FIN : case UNSURR:
00845         for (k=0 ; k<ip ; k++) {
00846           for (j=0 ; j<it ; j++) {
00847         for (i=0 ; i<ir ; i++) {
00848           *p_r = 0. ;
00849           p_r++ ;
00850         }       // Fin de boucle sur r
00851           } // Fin de boucle sur theta
00852         }       // Fin de boucle sur phi
00853         break ; 
00854        
00855       default:
00856         cout << "map_log_fait_d2rdx2: unknown type_r !" << endl ;
00857         abort() ;
00858         
00859       }     // Fin du switch 1 
00860       break ;
00861     }
00862     case LOG : {
00863       switch(mg->get_type_r(l)) {
00864       case FIN: 
00865         for (k=0 ; k<ip ; k++) {
00866           for (j=0 ; j<it ; j++) {
00867         for (i=0 ; i<ir ; i++) {
00868           *p_r = exp (alpha(l) * (g->x)[i] + beta(l)) * 
00869             alpha(l)*alpha(l) ;
00870           p_r++ ;
00871         }       // Fin de boucle sur r
00872           } // Fin de boucle sur theta
00873         }       // Fin de boucle sur phi
00874         break ;
00875       
00876       default:
00877         cout << "map_log_fait_d2rdx2: unknown type_r !" << endl ;
00878         abort() ;
00879       }
00880       break ;
00881     }
00882     default:
00883       cout << "map_log_fait_d2rdx2: unknown type_r !" << endl ;
00884       abort() ; 
00885     }           // Fin de boucle sur zone
00886     }
00887     // Termine
00888     return mti ;
00889 
00890 } 
00891 
00892 /*
00893  *****************************************************************************
00894  *  1/R^2 (  1/sin(th) d/dth( sin(th) dR/dth ) + 1/sin(th)^2 d^2R/dphi^2  )         
00895  *****************************************************************************
00896  */
00897 
00898 Mtbl* map_log_fait_lapr_tp(const Map* cvi) {
00899 
00900     // recup de la grille 
00901     const Mg3d* mg = cvi->get_mg() ;
00902     
00903     // Le resultat est nul : 
00904     Mtbl* mti = new Mtbl(mg) ;
00905     mti->set_etat_zero() ; 
00906 
00907     return mti ; 
00908 } 
00909 
00910 /*
00911  ************************************************************************
00912  *              d^2R/dthdx
00913  ************************************************************************
00914  */
00915 
00916 Mtbl* map_log_fait_d2rdtdx(const Map* cvi) {
00917 
00918     // recup de la grille 
00919     const Mg3d* mg = cvi->get_mg() ;
00920     
00921     // Le resultat est nul : 
00922     Mtbl* mti = new Mtbl(mg) ;
00923     mti->set_etat_zero() ; 
00924 
00925     return mti ; 
00926 } 
00927 
00928 /*
00929  ************************************************************************
00930  *              1/sin(th) d^2R/dphidx
00931  ************************************************************************
00932  */
00933 
00934 Mtbl* map_log_fait_sstd2rdpdx(const Map* cvi) {
00935 
00936     // recup de la grille 
00937     const Mg3d* mg = cvi->get_mg() ;
00938     
00939     // Le resultat est nul : 
00940     Mtbl* mti = new Mtbl(mg) ;
00941     mti->set_etat_zero() ; 
00942 
00943     return mti ; 
00944 } 
00945 
00946 /*
00947  ************************************************************************
00948  *              d^2R/dtheta^2
00949  ************************************************************************
00950  */
00951 
00952 Mtbl* map_log_fait_sr2d2rdt2(const Map* cvi) {
00953 
00954     // recup de la grille 
00955     const Mg3d* mg = cvi->get_mg() ;
00956     
00957     // Le resultat est nul : 
00958     Mtbl* mti = new Mtbl(mg) ;
00959     mti->set_etat_zero() ; 
00960 
00961     return mti ; 
00962 } 
00963 
00964 /*
00965  ************************************************************************
00966  *              1/(dR/dx)       ( -1/(dU/dx) ds la ZEC )
00967  ************************************************************************
00968  */
00969 
00970 Mtbl* map_log_fait_dxdlnr(const Map* cvi) {
00971 
00972  // recup du changement de variable
00973     const Map_log* cv = static_cast<const Map_log*>(cvi) ;
00974     const Mg3d* mg = cv->get_mg() ;
00975     int nz = mg->get_nzone() ;
00976     
00977     // Le resultat
00978     Mtbl* mti = new Mtbl(mg) ;
00979     mti->set_etat_qcq() ;
00980         
00981     // Pour le confort
00982     Tbl alpha = cv->alpha ;
00983     Tbl beta = cv->beta ;
00984     Itbl type_var = cv->type_var ;
00985 
00986     int i, j, k ;
00987     for (int l=0 ; l<nz ; l++) {
00988     int ir = mg->get_nr(l);
00989     int it = mg->get_nt(l) ;
00990     int ip = mg->get_np(l) ;
00991     Tbl* tb = (mti->t)[l] ;
00992     tb->set_etat_qcq() ;
00993     double* p_r = tb->t ;
00994     
00995     switch (type_var(l)) {
00996     case AFFINE : {
00997       switch(mg->get_type_r(l)) {
00998         
00999       case RARE: case FIN:
01000         for (k=0 ; k<ip ; k++) {
01001           for (j=0 ; j<it ; j++) {
01002         for (i=0 ; i<ir ; i++) {
01003           *p_r = 1. / alpha(l) ;
01004           p_r++ ;
01005         }       // Fin de boucle sur r
01006           } // Fin de boucle sur theta
01007         }       // Fin de boucle sur phi
01008         break ; 
01009         
01010         
01011       case UNSURR:
01012         for (k=0 ; k<ip ; k++) {
01013           for (j=0 ; j<it ; j++) {
01014         for (i=0 ; i<ir ; i++) {
01015           *p_r = - 1. / alpha(l) ;
01016           p_r++ ;
01017         }       // Fin de boucle sur r
01018           } // Fin de boucle sur theta
01019         }       // Fin de boucle sur phi
01020         break ;
01021         
01022       default:
01023         cout << "map_log_fait_dxdr: unknown type_r !" << endl ;
01024         abort() ;
01025         
01026       }     // Fin du switch 1 
01027       break ;
01028     }
01029     case LOG : {
01030       switch(mg->get_type_r(l)) {
01031       case FIN: 
01032         for (k=0 ; k<ip ; k++) {
01033           for (j=0 ; j<it ; j++) {
01034         for (i=0 ; i<ir ; i++) {
01035           *p_r = 1./ alpha(l) ;
01036           p_r++ ;
01037         }       // Fin de boucle sur r
01038           } // Fin de boucle sur theta
01039         }       // Fin de boucle sur phi
01040         break ;
01041       
01042       default:
01043         cout << "map_log_fait_dxdr: unknown type_r !" << endl ;
01044         abort() ;
01045       }
01046       break ;
01047     }
01048 
01049     default:
01050       cout << "map_log_fait_dxdr: unknown type_r !" << endl ;
01051       abort() ; 
01052     }           // Fin de boucle sur zone
01053     }
01054     // Termine
01055     return mti ;
01056 
01057 }

Generated on Tue Feb 7 01:35:18 2012 for LORENE by  doxygen 1.4.6