std_base_scal.C

00001 /*
00002  *   Copyright (c) 1999-2001 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 std_base_scal_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/std_base_scal.C,v 1.5 2007/12/11 15:28:17 jl_cornou Exp $" ;
00024 
00025 /*
00026  * Ensemble des routines de manipulation de base spectrales dans 
00027  * le cas scalaire.
00028  * 
00029  */
00030 
00031 /*
00032  * $Id: std_base_scal.C,v 1.5 2007/12/11 15:28:17 jl_cornou Exp $
00033  * $Log: std_base_scal.C,v $
00034  * Revision 1.5  2007/12/11 15:28:17  jl_cornou
00035  * Jacobi(0,2) polynomials partially implemented
00036  *
00037  * Revision 1.4  2005/10/25 08:56:37  p_grandclement
00038  * addition of std_spectral_base in the case of odd functions near the origin
00039  *
00040  * Revision 1.3  2004/11/23 15:13:50  m_forot
00041  * Added the bases for the cases without any equatorial symmetry
00042  * (T_COSSIN_C, T_COSSIN_S, T_LEG, R_CHEBPI_P, R_CHEBPI_I).
00043  *
00044  * Revision 1.2  2002/10/16 14:36:57  j_novak
00045  * Reorganization of #include instructions of standard C++, in order to
00046  * use experimental version 3 of gcc.
00047  *
00048  * Revision 1.1.1.1  2001/11/20 15:19:28  e_gourgoulhon
00049  * LORENE
00050  *
00051  * Revision 2.2  1999/10/20  15:31:52  eric
00052  * La routine Valeur::std_base_scal() se trouve desormais dans le
00053  * fichier valeur.C.
00054  *
00055  * Revision 2.1  1999/03/01  15:00:43  eric
00056  * *** empty log message ***
00057  *
00058  * Revision 2.0  1999/02/22  15:30:33  hyc
00059  * *** empty log message ***
00060  *
00061  *
00062  * $Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/std_base_scal.C,v 1.5 2007/12/11 15:28:17 jl_cornou Exp $
00063  *
00064  */
00065 
00066 // Headers C
00067 #include <stdlib.h>
00068 
00069 // Lorene
00070 #include "headcpp.h"
00071 #include "type_parite.h"
00072 
00073 
00074             //------------------------------//
00075             // Le plus simple: cas une zone //
00076             //------------------------------//
00077 
00078 // Cree la base standart pour une zone
00079 int std_base_scal_1z(int type_r, int type_t, int type_p) {
00080     
00081   // Base d'echantillonnage en (r,theta,phi) a determiner :
00082   int base_l  = 0 ;
00083   
00084   // proccess phi
00085   switch ( type_p ) {
00086   case NONSYM :     
00087     // Cas sans symetrie sur phi : phi dans [0, 2 pi[
00088     base_l = P_COSSIN ;     // developpement en cos,sin(m*phi)
00089     // Base en theta:
00090     switch ( type_t ) {
00091     case NONSYM :   
00092       // pas de symetrie en theta : theta dans [0,pi]    
00093       base_l = base_l | T_COSSIN_C ; // developpement en 
00094       //    cos(l*theta) pour m pair
00095       //    sin(l*theta) pour m impair
00096       
00097       
00098       // Base en r :
00099       switch ( type_r ) {
00100       case FIN :             
00101     // echantillonnage fin
00102     base_l = base_l | R_CHEB  ; // developpement en T_k(x) 
00103     break ;
00104 
00105       case FINJAC : 
00106         // echantillonnage fin de Jacobi
00107     base_l = base_l | R_JACO02 ; // développement en J_k(x)
00108     break ;
00109     
00110       case RARE :        
00111     // echantillonnage rarefie
00112     base_l = base_l | R_CHEBPI_P ;  // developpement en 
00113     //  T_{2k}(x) pour l pair
00114     //  T_{2k+1}(x) pour l impair
00115     break ;
00116     
00117       case UNSURR :             
00118     // echantillonnage fin (1/r)
00119     base_l = base_l | R_CHEBU  ; // developpement en T_k(x) 
00120     break ;
00121     
00122       default : 
00123     cout << 
00124       "std_base_scal : le cas type_p, type_t, type_r = " 
00125          << type_p << " " << type_t << " " <<  type_r << endl ;
00126     cout << " n'est pas prevu ! " << endl ;
00127     abort () ;
00128       }
00129       break ;   // fin du cas type_t = NONSYM
00130       
00131     case SYM :      // en theta
00132       // symetrie theta -> pi - theta :  theta dans [0, pi/2]       
00133       base_l = base_l | T_COSSIN_CP ; // developpement en 
00134       // cos(2*l*theta) pour m pair
00135       // sin((2*l+1)*theta) pour m impair
00136       // Base en r :
00137       switch ( type_r ) {
00138       case FIN :             
00139     // echantillonnage fin
00140     base_l = base_l | R_CHEB  ; // developpement en T_k(x) 
00141     break ;
00142 
00143       case FINJAC :
00144     // echantillonnage fin de Jacobi
00145     base_l = base_l | R_JACO02 ; // développement en J_k(x)
00146     break ;
00147     
00148       case RARE :        
00149     // echantillonnage rarefie
00150     base_l = base_l | R_CHEBPIM_P ;  // developpement en 
00151     //  T_{2k}(x) pour m pair
00152     //  T_{2k+1}(x) pour m impair
00153     break ;
00154     
00155       case UNSURR :             
00156     // echantillonnage fin (1/r)
00157     base_l = base_l | R_CHEBU  ; // developpement en T_k(x) 
00158     break ;
00159     
00160       default : 
00161     cout << 
00162       "std_base_scal : le cas type_p, type_t, type_r = " 
00163          << type_p<< " " << type_t<< " " <<type_r << endl ;
00164     cout << " n'est pas prevu ! " << endl ;
00165     abort () ;
00166       }
00167       break ;   // fin du cas type_t = SYM
00168       
00169     default : 
00170       cout << 
00171     "std_base_scal : le cas type_p, type_t = " 
00172        << type_p<< " " <<type_t << endl ;
00173       cout << " n'est pas prevu ! " << endl ;
00174       abort () ;
00175     }   // fin des cas sur type_t 
00176     break ; // fin du cas sans symetrie pour phi 
00177     
00178     
00179   case SYM :    // en phi
00180     // Cas symetrie phi -> phi + pi :  phi in [0, pi]
00181     base_l = P_COSSIN_P ;       // developpement en cos,sin(2*m*phi)
00182     // Base en theta:
00183     switch ( type_t ) {
00184     case NONSYM :   
00185       // pas de symetrie en theta : theta dans [0,pi]    
00186       base_l = base_l | T_COS ;   // developpement en cos(l*theta) seulement
00187       //  (puisque m est toujours pair) 
00188       // Base en r :
00189       switch ( type_r ) {
00190       case FIN :        // echantillonnage fin 
00191     base_l = base_l | R_CHEB  ; // developpement en T_k(x) 
00192     break ;
00193 
00194       case FINJAC :
00195     // echantillonnage fin de Jacobi
00196     base_l = base_l | R_JACO02 ; // developpement en J_k(x)
00197     break ;
00198     
00199       case RARE :       // echantillonnage rarefie       
00200     base_l = base_l | R_CHEBPI_P ;  // developpement en 
00201     //  T_{2k}(x) pour l pair
00202     //  T_{2k+1}(x) pour l impair
00203     break ;
00204     
00205       case UNSURR :   // echantillonnage fin (1/r)      
00206     base_l = base_l | R_CHEBU  ; // developpement en T_k(x) 
00207     break ;
00208     
00209       default : 
00210     cout << 
00211       "std_base_scal : le cas type_p, type_t, type_r = " 
00212          << type_p<< " " <<type_t<< " " <<type_r << endl ;
00213     cout << " n'est pas prevu ! " << endl ;
00214     abort () ;
00215       }
00216       break ;   // fin du cas type_t = NONSYM
00217       
00218     case SYM :  // symetrie theta -> pi - theta :  theta dans [0, pi/2]
00219       base_l = base_l | T_COS_P ;   // developpement en cos(2*l*theta)
00220       //  (puisque m est toujours pair)
00221       // Base en r :
00222       switch ( type_r ) {
00223       case FIN :    // echantillonnage fin   
00224     base_l = base_l | R_CHEB  ; // developpement en T_k(x) 
00225     break ;
00226     
00227       case FINJAC :
00228     // echantillonnage fin de Jacobi
00229     base_l = base_l | R_JACO02 ; // developpement en J_k(x)
00230     break ;
00231 
00232       case RARE :       // echantillonnage rarefie   
00233     base_l = base_l | R_CHEBP ;  // developpement en T_{2k}(x) 
00234     break ;
00235     
00236       case UNSURR :   // echantillonnage fin (1/r) 
00237     base_l = base_l | R_CHEBU  ; // developpement en T_k(x) 
00238     break ;
00239     
00240       default : 
00241     cout << 
00242       "std_base_scal : le cas type_p, type_t, type_r = " 
00243          << type_p<< " " <<type_t<< " " <<type_r << endl ;
00244     cout << " n'est pas prevu ! " << endl ;
00245     abort () ;
00246       }
00247       break ;   // fin du cas type_t = SYM
00248             
00249     default : 
00250       cout << 
00251     "std_base_scal : le cas type_p, type_t = " 
00252        << type_p<< " " <<type_t << endl ;
00253       cout << " n'est pas prevu ! " << endl ;
00254       abort () ;
00255     }   // fin des cas sur type_t 
00256     break ; // fin du cas symetrie phi -> phi + pi
00257     
00258   default : 
00259     cout << 
00260       "std_base_scal : le cas type_p = " << type_p << endl ;
00261     cout << " n'est pas prevu ! " << endl ;
00262     abort () ;
00263   } // Fin des cas en phi
00264   
00265   // On range le resultat
00266   return base_l ;
00267 }
00268 
00269              //----------------------------------------//
00270             // Le plus simple: cas une zone cas impair //
00271             //----------------------------------------//
00272 
00273 // Cree la base standart pour une zone
00274 int std_base_scal_odd_1z(int type_r, int type_t, int type_p) {
00275     
00276   // Base d'echantillonnage en (r,theta,phi) a determiner :
00277   int base_l  = 0 ;
00278   
00279   // proccess phi
00280   switch ( type_p ) {
00281   case NONSYM :     
00282     // Cas sans symetrie sur phi : phi dans [0, 2 pi[
00283     base_l = P_COSSIN ;     // developpement en cos,sin(m*phi)
00284     // Base en theta:
00285     switch ( type_t ) {
00286     case NONSYM :   
00287       // pas de symetrie en theta : theta dans [0,pi]    
00288       base_l = base_l | T_COSSIN_C ; // developpement en 
00289       //    cos(l*theta) pour m pair
00290       //    sin(l*theta) pour m impair
00291       
00292       
00293       // Base en r :
00294       switch ( type_r ) {
00295       case FIN :             
00296     // echantillonnage fin
00297     base_l = base_l | R_CHEB  ; // developpement en T_k(x) 
00298     break ; 
00299 
00300       case FINJAC :
00301     // echantillonnage fin de Jacobi
00302     base_l = base_l | R_JACO02 ; //developpement en J_k(x)
00303     break ;
00304     
00305       case RARE :        
00306     // echantillonnage rarefie
00307     base_l = base_l | R_CHEBPI_I ;  // developpement en 
00308     //  T_{2k}(x) pour l impair
00309     //  T_{2k+1}(x) pour l pair
00310     break ;
00311     
00312       case UNSURR :             
00313     // echantillonnage fin (1/r)
00314     base_l = base_l | R_CHEBU  ; // developpement en T_k(x) 
00315     break ;
00316     
00317       default : 
00318     cout << 
00319       "std_base_scal : le cas type_p, type_t, type_r = " 
00320          << type_p << " " << type_t << " " <<  type_r << endl ;
00321     cout << " n'est pas prevu ! " << endl ;
00322     abort () ;
00323       }
00324       break ;   // fin du cas type_t = NONSYM
00325       
00326     case SYM :      // en theta
00327       // symetrie theta -> pi - theta :  theta dans [0, pi/2]       
00328       base_l = base_l | T_COSSIN_CP ; // developpement en 
00329       // cos(2*l*theta) pour m pair
00330       // sin((2*l+1)*theta) pour m impair
00331       // Base en r :
00332       switch ( type_r ) {
00333       case FIN :             
00334     // echantillonnage fin
00335     base_l = base_l | R_CHEB  ; // developpement en T_k(x) 
00336     break ;
00337     
00338       case FINJAC :
00339     // echantillonnage fin de Jacobi
00340     base_l = base_l | R_JACO02 ; //developpement en J_k(x)
00341     break ;
00342 
00343       case RARE :        
00344     // echantillonnage rarefie
00345     base_l = base_l | R_CHEBPIM_I ;  // developpement en 
00346     //  T_{2k}(x) pour m impair
00347     //  T_{2k+1}(x) pour m pair
00348     break ;
00349     
00350       case UNSURR :             
00351     // echantillonnage fin (1/r)
00352     base_l = base_l | R_CHEBU  ; // developpement en T_k(x) 
00353     break ;
00354     
00355       default : 
00356     cout << 
00357       "std_base_scal : le cas type_p, type_t, type_r = " 
00358          << type_p<< " " << type_t<< " " <<type_r << endl ;
00359     cout << " n'est pas prevu ! " << endl ;
00360     abort () ;
00361       }
00362       break ;   // fin du cas type_t = SYM
00363       
00364     default : 
00365       cout << 
00366     "std_base_scal : le cas type_p, type_t = " 
00367        << type_p<< " " <<type_t << endl ;
00368       cout << " n'est pas prevu ! " << endl ;
00369       abort () ;
00370     }   // fin des cas sur type_t 
00371     break ; // fin du cas sans symetrie pour phi 
00372     
00373     
00374   case SYM :    // en phi
00375     // Cas symetrie phi -> phi + pi :  phi in [0, pi]
00376     base_l = P_COSSIN_P ;       // developpement en cos,sin(2*m*phi)
00377     // Base en theta:
00378     switch ( type_t ) {
00379     case NONSYM :   
00380       // pas de symetrie en theta : theta dans [0,pi]    
00381       base_l = base_l | T_COS ;   // developpement en cos(l*theta) seulement
00382       //  (puisque m est toujours pair) 
00383       // Base en r :
00384       switch ( type_r ) {
00385       case FIN :        // echantillonnage fin 
00386     base_l = base_l | R_CHEB  ; // developpement en T_k(x) 
00387     break ;
00388 
00389       case FINJAC :
00390     // echantillonnage fin de Jacobi
00391     base_l = base_l | R_JACO02 ; //developpement en J_k(x)
00392     break ;
00393     
00394       case RARE :       // echantillonnage rarefie       
00395     base_l = base_l | R_CHEBPI_I ;  // developpement en 
00396     //  T_{2k}(x) pour l impair
00397     //  T_{2k+1}(x) pour l pair
00398     break ;
00399     
00400       case UNSURR :   // echantillonnage fin (1/r)      
00401     base_l = base_l | R_CHEBU  ; // developpement en T_k(x) 
00402     break ;
00403     
00404       default : 
00405     cout << 
00406       "std_base_scal : le cas type_p, type_t, type_r = " 
00407          << type_p<< " " <<type_t<< " " <<type_r << endl ;
00408     cout << " n'est pas prevu ! " << endl ;
00409     abort () ;
00410       }
00411       break ;   // fin du cas type_t = NONSYM
00412       
00413     case SYM :  // symetrie theta -> pi - theta :  theta dans [0, pi/2]
00414       base_l = base_l | T_COS_P ;   // developpement en cos(2*l*theta)
00415       //  (puisque m est toujours pair)
00416       // Base en r :
00417       switch ( type_r ) {
00418       case FIN :    // echantillonnage fin   
00419     base_l = base_l | R_CHEB  ; // developpement en T_k(x) 
00420     break ;
00421     
00422       case FINJAC :
00423     // echantillonnage fin de Jacobi
00424     base_l = base_l | R_JACO02 ; //developpement en J_k(x)
00425     break ;
00426 
00427       case RARE :       // echantillonnage rarefie   
00428     base_l = base_l | R_CHEBI ;  // developpement en T_{2k+1}(x) 
00429     break ;
00430     
00431       case UNSURR :   // echantillonnage fin (1/r) 
00432     base_l = base_l | R_CHEBU  ; // developpement en T_k(x) 
00433     break ;
00434     
00435       default : 
00436     cout << 
00437       "std_base_scal : le cas type_p, type_t, type_r = " 
00438          << type_p<< " " <<type_t<< " " <<type_r << endl ;
00439     cout << " n'est pas prevu ! " << endl ;
00440     abort () ;
00441       }
00442       break ;   // fin du cas type_t = SYM
00443             
00444     default : 
00445       cout << 
00446     "std_base_scal : le cas type_p, type_t = " 
00447        << type_p<< " " <<type_t << endl ;
00448       cout << " n'est pas prevu ! " << endl ;
00449       abort () ;
00450     }   // fin des cas sur type_t 
00451     break ; // fin du cas symetrie phi -> phi + pi
00452     
00453   default : 
00454     cout << 
00455       "std_base_scal : le cas type_p = " << type_p << endl ;
00456     cout << " n'est pas prevu ! " << endl ;
00457     abort () ;
00458   } // Fin des cas en phi
00459   
00460   // On range le resultat
00461   return base_l ;
00462 }
00463 

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