map_et_fait.C

00001 /*
00002  *   Copyright (c) 1999-2003 Eric Gourgoulhon
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_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  * $Id: map_et_fait.C,v 1.6 2012/01/24 14:59:12 j_novak Exp $
00027  * $Log: map_et_fait.C,v $
00028  * Revision 1.6  2012/01/24 14:59:12  j_novak
00029  * Removed functions XXX_fait_xi()
00030  *
00031  * Revision 1.5  2012/01/17 10:33:59  j_penner
00032  * added a routine to construct the computational coordinate xi
00033  *
00034  * Revision 1.4  2008/08/27 08:48:42  jl_cornou
00035  * Added R_JACO02 case
00036  *
00037  * Revision 1.3  2003/10/15 10:38:47  e_gourgoulhon
00038  * Changed cast (const Map_et*) into static_cast<const Map_et*>.
00039  *
00040  * Revision 1.2  2002/10/16 14:36:41  j_novak
00041  * Reorganization of #include instructions of standard C++, in order to
00042  * use experimental version 3 of gcc.
00043  *
00044  * Revision 1.1.1.1  2001/11/20 15:19:27  e_gourgoulhon
00045  * LORENE
00046  *
00047  * Revision 1.1  1999/11/24  11:23:00  eric
00048  * Initial revision
00049  *
00050  *
00051  * $Header: /cvsroot/Lorene/C++/Source/Map/map_et_fait.C,v 1.6 2012/01/24 14:59:12 j_novak Exp $
00052  *
00053  */
00054 
00055 
00056 // Includes
00057 #include <assert.h>
00058 #include <stdlib.h>
00059 #include <math.h>
00060 
00061 #include "map.h"
00062 
00063             //----------------//
00064             // Coord. radiale //
00065             //----------------//
00066 
00067 Mtbl* map_et_fait_r(const Map* cvi) {
00068 
00069     // recup du changement de variable
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     // Le resultat
00075     Mtbl* mti = new Mtbl(mg) ;
00076     mti->set_etat_qcq() ;
00077     
00078     // Pour le confort
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             }       // Fin de boucle sur r
00112         }   // Fin de boucle sur theta
00113         }       // Fin de boucle sur phi
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             }       // Fin de boucle sur r
00127         }   // Fin de boucle sur theta
00128         }       // Fin de boucle sur phi
00129         break ;
00130         }
00131         
00132         default: {
00133         cout << "map_et_fait_r: Unknown type_r !" << endl ;
00134         abort () ;
00135         }
00136         
00137     }       // Fin du switch
00138     }           // Fin de boucle sur zone
00139     
00140     // Termine
00141     return mti ;
00142 }
00143 
00144             //--------------//
00145             // Coord. Theta //
00146             //--------------//
00147 
00148 Mtbl* map_et_fait_tet(const Map* cvi) {
00149 
00150     // recup du changement de variable
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     // Le resultat
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         }   // Fin de boucle sur r
00173         }   // Fin de boucle sur theta
00174     }   // Fin de boucle sur phi
00175     }   // Fin de boucle sur zone
00176 
00177     // Termine
00178     return mti ;    
00179 }
00180 
00181             //------------//
00182             // Coord. Phi //
00183             //------------//
00184 
00185 Mtbl* map_et_fait_phi(const Map* cvi) {
00186 
00187     // recup du changement de variable
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     // Le resultat
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         }   // Fin de boucle sur r
00210         }   // Fin de boucle sur theta
00211     }   // Fin de boucle sur phi
00212     }   // Fin de boucle sur zone
00213    
00214     // Termine
00215     return mti ; 
00216 }
00217 
00218             //----------//
00219             // Coord. X //
00220             //----------//
00221 
00222 Mtbl* map_et_fait_x(const Map* cvi) {
00223 
00224     // recup de la grille
00225     const Mg3d* mg = cvi->get_mg() ;
00226     
00227     // Le resultat
00228     Mtbl* mti = new Mtbl(mg) ;
00229     
00230     *mti = (cvi->r) * (cvi->sint) * (cvi->cosp) ;
00231 
00232     // Termine
00233     return mti ;
00234 }
00235 
00236             //----------//
00237             // Coord. Y //
00238             //----------//
00239 
00240 Mtbl* map_et_fait_y(const Map* cvi) {
00241 
00242     // recup de la grille
00243     const Mg3d* mg = cvi->get_mg() ;
00244     
00245     // Le resultat
00246     Mtbl* mti = new Mtbl(mg) ;
00247     
00248     *mti = (cvi->r) * (cvi->sint) * (cvi->sinp) ;
00249    
00250     // Termine
00251     return mti ; 
00252 }
00253 
00254             //----------//
00255             // Coord. Z //
00256             //----------//
00257 
00258 Mtbl* map_et_fait_z(const Map* cvi) {
00259 
00260     // recup de la grille
00261     const Mg3d* mg = cvi->get_mg() ;
00262     
00263     // Le resultat
00264     Mtbl* mti = new Mtbl(mg) ;
00265     
00266     *mti = (cvi->r) * (cvi->cost) ;
00267     
00268     // Termine
00269     return mti ;
00270 }
00271 
00272             //--------------------//
00273             // Coord. X "absolue" //
00274             //--------------------//
00275 
00276 Mtbl* map_et_fait_xa(const Map* cvi) {
00277 
00278     // recup de la grille
00279     const Mg3d* mg = cvi->get_mg() ;
00280     
00281     // Le resultat
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     // Termine
00299     return mti ;
00300 }
00301 
00302             //--------------------//
00303             // Coord. Y "absolue" //
00304             //--------------------//
00305 
00306 Mtbl* map_et_fait_ya(const Map* cvi) {
00307 
00308     // recup de la grille
00309     const Mg3d* mg = cvi->get_mg() ;
00310     
00311     // Le resultat
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     // Termine
00329     return mti ;
00330 }
00331 
00332             //--------------------//
00333             // Coord. Z "absolue" //
00334             //--------------------//
00335 
00336 Mtbl* map_et_fait_za(const Map* cvi) {
00337 
00338     // recup de la grille
00339     const Mg3d* mg = cvi->get_mg() ;
00340     
00341     double t_z = cvi->get_ori_z() ; 
00342 
00343     // Le resultat
00344     Mtbl* mti = new Mtbl(mg) ;
00345     
00346     *mti = (cvi->r) * (cvi->cost) + t_z ; 
00347 
00348     // Termine
00349     return mti ;       
00350 }
00351 
00352             //---------------//
00353             // Trigonometrie //
00354             //---------------//
00355 
00356 Mtbl* map_et_fait_sint(const Map* cvi) {
00357 
00358     // recup du changement de variable
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     // Le resultat
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         }   // Fin de boucle sur r
00381         }   // Fin de boucle sur theta
00382     }   // Fin de boucle sur phi
00383     }   // Fin de boucle sur zone
00384     
00385     // Termine
00386     return mti ;
00387 }
00388 
00389 Mtbl* map_et_fait_cost(const Map* cvi) {
00390 
00391     // recup du changement de variable
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     // Le resultat
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         }   // Fin de boucle sur r
00414         }   // Fin de boucle sur theta
00415     }   // Fin de boucle sur phi
00416     }   // Fin de boucle sur zone
00417     
00418     // Termine
00419     return mti ;
00420 }
00421 
00422 Mtbl* map_et_fait_sinp(const Map* cvi) {
00423 
00424     // recup du changement de variable
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     // Le resultat
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         }   // Fin de boucle sur r
00447         }   // Fin de boucle sur theta
00448     }   // Fin de boucle sur phi
00449     }   // Fin de boucle sur zone
00450     
00451     // Termine
00452     return mti ;
00453 }
00454 
00455 Mtbl* map_et_fait_cosp(const Map* cvi) {
00456 
00457     // recup du changement de variable
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     // Le resultat
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         }   // Fin de boucle sur r
00480         }   // Fin de boucle sur theta
00481     }   // Fin de boucle sur phi
00482     }   // Fin de boucle sur zone
00483     
00484     // Termine
00485     return mti ;
00486 }
00487 
00488 /*
00489  ************************************************************************
00490  *  x/R dans le noyau,  1/R dans les coquilles,  (x-1)/U dans la ZEC
00491  ************************************************************************
00492  */
00493 
00494 Mtbl* map_et_fait_xsr(const Map* cvi) {
00495 
00496     // recup du changement de variable
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     // Le resultat
00502     Mtbl* mti = new Mtbl(mg) ;
00503     mti->set_etat_qcq() ;
00504         
00505     // Pour le confort
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             }       // Fin de boucle sur r
00539         }   // Fin de boucle sur theta
00540         }       // Fin de boucle sur phi
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             }       // Fin de boucle sur r
00554         }   // Fin de boucle sur theta
00555         }       // Fin de boucle sur phi
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             }       // Fin de boucle sur r
00569         }   // Fin de boucle sur theta
00570         }       // Fin de boucle sur phi
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             }       // Fin de boucle sur r
00584         }   // Fin de boucle sur theta
00585         }       // Fin de boucle sur phi
00586         break ;
00587         }
00588         
00589         default: {
00590         cout << "map_et_fait_xsr: unknown type_r !" << endl ;
00591         abort() ;
00592         }
00593         
00594     }       // Fin du switch
00595     }           // Fin de boucle sur zone
00596 
00597     // Termine
00598     return mti ;
00599 
00600 }
00601 

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