base_val_name_r.C

00001 /*
00002  *  Method Base_val::name_r
00003  *
00004  *  (see file base_val.h for documentation). 
00005  *
00006  */
00007 
00008 /*
00009  *   Copyright (c) 2003 Eric Gourgoulhon. 
00010  *
00011  *   This file is part of LORENE.
00012  *
00013  *   LORENE is free software; you can redistribute it and/or modify
00014  *   it under the terms of the GNU General Public License version 2
00015  *   as published by the Free Software Foundation.
00016  *
00017  *   LORENE is distributed in the hope that it will be useful,
00018  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  *   GNU General Public License for more details.
00021  *
00022  *   You should have received a copy of the GNU General Public License
00023  *   along with LORENE; if not, write to the Free Software
00024  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00025  *
00026  */
00027 
00028 char base_val_name_r_C[] = "$Header: /cvsroot/Lorene/C++/Source/Base_val/base_val_name_r.C,v 1.3 2007/12/11 15:28:09 jl_cornou Exp $" ;
00029 
00030 /*
00031  * $Id: base_val_name_r.C,v 1.3 2007/12/11 15:28:09 jl_cornou Exp $
00032  * $Log: base_val_name_r.C,v $
00033  * Revision 1.3  2007/12/11 15:28:09  jl_cornou
00034  * Jacobi(0,2) polynomials partially implemented
00035  *
00036  * Revision 1.2  2004/11/23 15:08:01  m_forot
00037  * Added the bases for the cases without any equatorial symmetry
00038  * (T_COSSIN_C, T_COSSIN_S, T_LEG, R_CHEBPI_P, R_CHEBPI_I).
00039  *
00040  * Revision 1.1  2003/10/19 19:49:40  e_gourgoulhon
00041  * First version
00042  *
00043  *
00044  *
00045  * $Header: /cvsroot/Lorene/C++/Source/Base_val/base_val_name_r.C,v 1.3 2007/12/11 15:28:09 jl_cornou Exp $
00046  *
00047  */
00048 
00049 // C headers
00050 #include <string.h>
00051 #include <stdlib.h>
00052 
00053 // Lorene headers
00054 #include "base_val.h"
00055 
00056 // Local prototypes
00057 void basename_r_unknown(int, int, int, char*) ; 
00058 void basename_r_cheb(int, int, int, char*) ; 
00059 void basename_r_chebp(int, int, int, char*) ; 
00060 void basename_r_chebi(int, int, int, char*) ; 
00061 void basename_r_chebpim_p(int, int, int, char*) ; 
00062 void basename_r_chebpim_i(int, int, int, char*) ; 
00063 void basename_r_chebpi_p(int, int, int, char*) ; 
00064 void basename_r_chebpi_i(int, int, int, char*) ; 
00065 void basename_r_jaco02(int, int, int, char*) ;
00066 
00067             //----------------------------//
00068             //      Base_val method       //
00069             //----------------------------//
00070 
00071 void Base_val::name_r(int l, int k, int j, int i, char* name) const {
00072 
00073     // Array of actual base name functions
00074     static void(*vbasename_r[MAX_BASE])(int, int, int, char*) ;  
00075 
00076     static bool first_call = true ;
00077 
00078     // Initializations at first call
00079     // -----------------------------
00080     if ( first_call ) {
00081 
00082         first_call = false ;
00083 
00084         for (int ib=0 ; ib<MAX_BASE ; ib++) {
00085             vbasename_r[ib] = basename_r_unknown ;
00086         }
00087 
00088         vbasename_r[R_CHEB >> TRA_R] = basename_r_cheb ;
00089         vbasename_r[R_CHEBP >> TRA_R] = basename_r_chebp ;
00090         vbasename_r[R_CHEBI >> TRA_R] = basename_r_chebi ;
00091         vbasename_r[R_CHEBPIM_P >> TRA_R] = basename_r_chebpim_p ;
00092         vbasename_r[R_CHEBPIM_I >> TRA_R] = basename_r_chebpim_i ;
00093         vbasename_r[R_CHEBU >> TRA_R] = basename_r_cheb ;
00094         vbasename_r[R_CHEBPI_P >> TRA_R] = basename_r_chebpi_p ;
00095         vbasename_r[R_CHEBPI_I >> TRA_R] = basename_r_chebpi_i ;
00096         vbasename_r[R_JACO02 >> TRA_R] = basename_r_jaco02 ;
00097     }
00098     
00099     // Call to the function adapted to the basis in domain l
00100     //------------------------------------------------------
00101     
00102     assert( (l>=0) && (l<nzone) ) ; 
00103     
00104     int base_r = ( b[l] & MSQ_R ) >> TRA_R ;
00105     
00106     vbasename_r[base_r](k, j, i, name) ; 
00107 
00108 }
00109     
00110     
00111             //-------------------------------//
00112             //  individual basis functions   //
00113             //-------------------------------//
00114     
00115 void basename_r_unknown(int, int, int, char*) {
00116     cout << "Base_val::name_r : unknwon basis !" << endl ; 
00117     abort() ; 
00118 } 
00119 
00120 
00121 void basename_r_cheb(int, int, int i, char* name) {
00122 
00123     assert( i>=0 ) ; 
00124 
00125     strcpy(name, "T") ; 
00126         
00127     char cxr[4] ;
00128     assert( i < 1000) ; 
00129     sprintf(cxr, "%d", i) ; 
00130     strcat(name, cxr) ; 
00131 }   
00132 
00133 
00134 void basename_r_chebp(int, int, int i, char* name) {
00135 
00136     assert( i>=0 ) ; 
00137 
00138     strcpy(name, "T") ; 
00139         
00140     int xr = 2*i ; 
00141     char cxr[4] ;
00142     assert( xr < 1000) ; 
00143     sprintf(cxr, "%d", xr) ; 
00144     strcat(name, cxr) ; 
00145 }   
00146 
00147 
00148 void basename_r_chebi(int, int, int i, char* name) {
00149 
00150     assert( i>=0 ) ; 
00151 
00152     strcpy(name, "T") ; 
00153         
00154     int xr = 2*i + 1 ; 
00155     char cxr[4] ;
00156     assert( xr < 1000) ; 
00157     sprintf(cxr, "%d", xr) ; 
00158     strcat(name, cxr) ; 
00159 }   
00160 
00161 
00162 void basename_r_chebpim_p(int k, int, int i, char* name) {
00163 
00164     assert( k>=0 ) ; 
00165     assert( i>=0 ) ; 
00166 
00167     int m = k / 2 ; 
00168     int xr = (m%2 == 0) ? 2*i : 2*i + 1 ; 
00169 
00170     strcpy(name, "T") ; 
00171         
00172     char cxr[4] ;
00173     assert( xr < 1000) ; 
00174     sprintf(cxr, "%d", xr) ; 
00175     strcat(name, cxr) ; 
00176 }   
00177 
00178 
00179 void basename_r_chebpim_i(int k, int, int i, char* name) {
00180 
00181     assert( k>=0 ) ; 
00182     assert( i>=0 ) ; 
00183 
00184     int m = k / 2 ; 
00185     int xr = (m%2 == 0) ? 2*i + 1 : 2*i ; 
00186 
00187     strcpy(name, "T") ; 
00188         
00189     char cxr[4] ;
00190     assert( xr < 1000) ; 
00191     sprintf(cxr, "%d", xr) ; 
00192     strcat(name, cxr) ; 
00193 }   
00194 
00195 void basename_r_chebpi_p(int , int j, int i, char* name) {
00196 
00197     assert( j>=0 ) ; 
00198     assert( i>=0 ) ; 
00199 
00200     int xr = (j%2 == 0) ? 2*i : 2*i + 1 ; 
00201 
00202     strcpy(name, "T") ; 
00203         
00204     char cxr[4] ;
00205     assert( xr < 1000) ; 
00206     sprintf(cxr, "%d", xr) ; 
00207     strcat(name, cxr) ; 
00208 }   
00209 
00210 
00211 void basename_r_chebpi_i(int , int j, int i, char* name) {
00212 
00213     assert( j>=0 ) ; 
00214     assert( i>=0 ) ; 
00215 
00216     int xr = (j%2 == 0) ? 2*i + 1 : 2*i ; 
00217 
00218     strcpy(name, "T") ; 
00219         
00220     char cxr[4] ;
00221     assert( xr < 1000) ; 
00222     sprintf(cxr, "%d", xr) ; 
00223     strcat(name, cxr) ; 
00224 }   
00225 
00226 
00227 void basename_r_jaco02(int, int, int i, char* name) {
00228 
00229     assert( i>=0 ) ; 
00230 
00231     strcpy(name, "J") ; 
00232         
00233     char cxr[4] ;
00234     assert( i < 1000) ; 
00235     sprintf(cxr, "%d", i) ; 
00236     strcat(name, cxr) ; 
00237 }   
00238 
00239 
00240 
00241 
00242 
00243 
00244 
00245 
00246 

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