base_val_name_phi.C

00001 /*
00002  *  Method Base_val::name_phi
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_phi_C[] = "$Header: /cvsroot/Lorene/C++/Source/Base_val/base_val_name_phi.C,v 1.2 2012/01/17 14:44:27 j_penner Exp $" ;
00029 
00030 /*
00031  * $Id: base_val_name_phi.C,v 1.2 2012/01/17 14:44:27 j_penner Exp $
00032  * $Log: base_val_name_phi.C,v $
00033  * Revision 1.2  2012/01/17 14:44:27  j_penner
00034  * Modified phi variables to only use 16 integers in arrays
00035  *
00036  * Revision 1.1  2003/10/19 19:49:40  e_gourgoulhon
00037  * First version
00038  *
00039  *
00040  *
00041  * $Header: /cvsroot/Lorene/C++/Source/Base_val/base_val_name_phi.C,v 1.2 2012/01/17 14:44:27 j_penner Exp $
00042  *
00043  */
00044 
00045 // C headers
00046 #include <string.h>
00047 #include <stdlib.h>
00048 
00049 // Lorene headers
00050 #include "base_val.h"
00051 
00052 // Local prototypes
00053 void basename_p_unknown(int, char*) ; 
00054 void basename_p_cossin(int, char*) ; 
00055 void basename_p_cossin_p(int, char*) ; 
00056 void basename_p_cossin_i(int, char*) ; 
00057 
00058             //----------------------------//
00059             //      Base_val method       //
00060             //----------------------------//
00061 
00062 void Base_val::name_phi(int l, int k, char* name) const {
00063 
00064     // Array of actual base name functions
00065     static void(*vbasename_p[MAX_BASE_2])(int, char*) ;  
00066 
00067     static bool first_call = true ;
00068 
00069     // Initializations at first call
00070     // -----------------------------
00071     if ( first_call ) {
00072 
00073         first_call = false ;
00074 
00075         for (int i=0 ; i<MAX_BASE_2 ; i++) {
00076             vbasename_p[i] = basename_p_unknown ;
00077         }
00078 
00079         vbasename_p[P_COSSIN >> TRA_P] = basename_p_cossin ;
00080         vbasename_p[P_COSSIN_P >> TRA_P] = basename_p_cossin_p ;
00081         vbasename_p[P_COSSIN_I >> TRA_P] = basename_p_cossin_i ;
00082 
00083     }
00084     
00085     // Call to the function adapted to the basis in domain l
00086     //------------------------------------------------------
00087     
00088     assert( (l>=0) && (l<nzone) ) ; 
00089 
00090     int base_p = ( b[l] & MSQ_P ) >> TRA_P ;
00091     
00092     vbasename_p[base_p](k, name) ; 
00093 
00094 }
00095     
00096     
00097             //-------------------------------//
00098             //  individual basis functions   //
00099             //-------------------------------//
00100     
00101 void basename_p_unknown(int, char*) {
00102     cout << "Base_val::name_phi : unknwon basis !" << endl ; 
00103     abort() ; 
00104 } 
00105 
00106 
00107 void basename_p_cossin(int k, char* name) {
00108 
00109     assert( k>=0 ) ; 
00110 
00111     if (k%2 == 0) {
00112         strcpy(name, "cos") ; 
00113     }       
00114     else {
00115         if (k == 1) {
00116             strcpy(name, "unused") ; 
00117             return ;
00118         }
00119         else { 
00120             strcpy(name, "sin") ; 
00121         }
00122     }
00123         
00124     int m = k / 2 ; 
00125         
00126     char cm[4] ;
00127     assert( m < 1000) ; 
00128     sprintf(cm, "%d", m) ; 
00129     strcat(name, cm) ; 
00130     strcat(name, "p") ; 
00131 
00132 }   
00133 
00134     
00135     
00136 void basename_p_cossin_p(int k, char* name) {
00137 
00138     assert( k>=0 ) ; 
00139 
00140     if (k%2 == 0) {
00141         strcpy(name, "cos") ; 
00142     }       
00143     else {
00144         if (k == 1) {
00145             strcpy(name, "unused") ; 
00146             return ;
00147         }
00148         else { 
00149             strcpy(name, "sin") ; 
00150         }
00151     }
00152         
00153     int m = 2 * (k / 2) ; 
00154         
00155     char cm[4] ;
00156     assert( m < 1000) ; 
00157     sprintf(cm, "%d", m) ; 
00158     strcat(name, cm) ; 
00159     strcat(name, "p") ; 
00160 
00161 } 
00162 
00163 
00164 void basename_p_cossin_i(int k, char* name) {
00165 
00166     assert( k>=0 ) ; 
00167 
00168     if (k == 0) {
00169         strcpy(name, "cos1p") ; 
00170         return  ;       
00171     }
00172 
00173     if (k%2 == 0) {
00174         strcpy(name, "sin") ; 
00175     }       
00176     else {
00177         if (k == 1) {
00178             strcpy(name, "unused") ; 
00179             return ;
00180         }
00181         else { 
00182             strcpy(name, "cos") ; 
00183         }
00184     }
00185         
00186     int m = 2 * ((k-1) / 2) + 1 ; 
00187         
00188     char cm[4] ;
00189     assert( m < 1000) ; 
00190     sprintf(cm, "%d", m) ; 
00191     strcat(name, cm) ; 
00192     strcat(name, "p") ; 
00193 
00194 } 
00195 
00196 
00197     
00198     
00199     
00200     
00201     
00202     
00203     
00204     
00205     
00206     
00207     
00208     
00209     

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