LORENE
base_val_name_r.C
1 /*
2  * Method Base_val::name_r
3  *
4  * (see file base_val.h for documentation).
5  *
6  */
7 
8 /*
9  * Copyright (c) 2003 Eric Gourgoulhon.
10  *
11  * This file is part of LORENE.
12  *
13  * LORENE is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License version 2
15  * as published by the Free Software Foundation.
16  *
17  * LORENE is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with LORENE; if not, write to the Free Software
24  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25  *
26  */
27 
28 char base_val_name_r_C[] = "$Header: /cvsroot/Lorene/C++/Source/Base_val/base_val_name_r.C,v 1.6 2014/10/13 08:52:39 j_novak Exp $" ;
29 
30 /*
31  * $Id: base_val_name_r.C,v 1.6 2014/10/13 08:52:39 j_novak Exp $
32  * $Log: base_val_name_r.C,v $
33  * Revision 1.6 2014/10/13 08:52:39 j_novak
34  * Lorene classes and functions now belong to the namespace Lorene.
35  *
36  * Revision 1.5 2014/10/06 15:12:57 j_novak
37  * Modified #include directives to use c++ syntax.
38  *
39  * Revision 1.4 2013/01/11 08:20:11 j_novak
40  * New radial spectral bases with Legendre polynomials (R_LEG, R_LEGP, R_LEGI).
41  *
42  * Revision 1.3 2007/12/11 15:28:09 jl_cornou
43  * Jacobi(0,2) polynomials partially implemented
44  *
45  * Revision 1.2 2004/11/23 15:08:01 m_forot
46  * Added the bases for the cases without any equatorial symmetry
47  * (T_COSSIN_C, T_COSSIN_S, T_LEG, R_CHEBPI_P, R_CHEBPI_I).
48  *
49  * Revision 1.1 2003/10/19 19:49:40 e_gourgoulhon
50  * First version
51  *
52  *
53  *
54  * $Header: /cvsroot/Lorene/C++/Source/Base_val/base_val_name_r.C,v 1.6 2014/10/13 08:52:39 j_novak Exp $
55  *
56  */
57 
58 // C headers
59 #include <cstring>
60 #include <cstdlib>
61 
62 // Lorene headers
63 #include "base_val.h"
64 
65 // Local prototypes
66 namespace Lorene {
67 void basename_r_unknown(int, int, int, char*) ;
68 void basename_r_cheb(int, int, int, char*) ;
69 void basename_r_chebp(int, int, int, char*) ;
70 void basename_r_chebi(int, int, int, char*) ;
71 void basename_r_chebpim_p(int, int, int, char*) ;
72 void basename_r_chebpim_i(int, int, int, char*) ;
73 void basename_r_chebpi_p(int, int, int, char*) ;
74 void basename_r_chebpi_i(int, int, int, char*) ;
75 void basename_r_leg(int, int, int, char*) ;
76 void basename_r_legp(int, int, int, char*) ;
77 void basename_r_legi(int, int, int, char*) ;
78 void basename_r_jaco02(int, int, int, char*) ;
79 
80  //----------------------------//
81  // Base_val method //
82  //----------------------------//
83 
84 void Base_val::name_r(int l, int k, int j, int i, char* name) const {
85 
86  // Array of actual base name functions
87  static void(*vbasename_r[MAX_BASE])(int, int, int, char*) ;
88 
89  static bool first_call = true ;
90 
91  // Initializations at first call
92  // -----------------------------
93  if ( first_call ) {
94 
95  first_call = false ;
96 
97  for (int ib=0 ; ib<MAX_BASE ; ib++) {
98  vbasename_r[ib] = basename_r_unknown ;
99  }
100 
101  vbasename_r[R_CHEB >> TRA_R] = basename_r_cheb ;
102  vbasename_r[R_CHEBP >> TRA_R] = basename_r_chebp ;
103  vbasename_r[R_CHEBI >> TRA_R] = basename_r_chebi ;
104  vbasename_r[R_CHEBPIM_P >> TRA_R] = basename_r_chebpim_p ;
105  vbasename_r[R_CHEBPIM_I >> TRA_R] = basename_r_chebpim_i ;
106  vbasename_r[R_CHEBU >> TRA_R] = basename_r_cheb ;
107  vbasename_r[R_CHEBPI_P >> TRA_R] = basename_r_chebpi_p ;
108  vbasename_r[R_CHEBPI_I >> TRA_R] = basename_r_chebpi_i ;
109  vbasename_r[R_LEG >> TRA_R] = basename_r_leg ;
110  vbasename_r[R_LEGP >> TRA_R] = basename_r_legp ;
111  vbasename_r[R_LEGI >> TRA_R] = basename_r_legi ;
112  vbasename_r[R_JACO02 >> TRA_R] = basename_r_jaco02 ;
113  }
114 
115  // Call to the function adapted to the basis in domain l
116  //------------------------------------------------------
117 
118  assert( (l>=0) && (l<nzone) ) ;
119 
120  int base_r = ( b[l] & MSQ_R ) >> TRA_R ;
121 
122  vbasename_r[base_r](k, j, i, name) ;
123 
124 }
125 
126 
127  //-------------------------------//
128  // individual basis functions //
129  //-------------------------------//
130 
131 void basename_r_unknown(int, int, int, char*) {
132  cout << "Base_val::name_r : unknwon basis !" << endl ;
133  abort() ;
134 }
135 
136 
137 void basename_r_cheb(int, int, int i, char* name) {
138 
139  assert( i>=0 ) ;
140 
141  strcpy(name, "T") ;
142 
143  char cxr[4] ;
144  assert( i < 1000) ;
145  sprintf(cxr, "%d", i) ;
146  strcat(name, cxr) ;
147 }
148 
149 
150 void basename_r_chebp(int, int, int i, char* name) {
151 
152  assert( i>=0 ) ;
153 
154  strcpy(name, "T") ;
155 
156  int xr = 2*i ;
157  char cxr[4] ;
158  assert( xr < 1000) ;
159  sprintf(cxr, "%d", xr) ;
160  strcat(name, cxr) ;
161 }
162 
163 
164 void basename_r_chebi(int, int, int i, char* name) {
165 
166  assert( i>=0 ) ;
167 
168  strcpy(name, "T") ;
169 
170  int xr = 2*i + 1 ;
171  char cxr[4] ;
172  assert( xr < 1000) ;
173  sprintf(cxr, "%d", xr) ;
174  strcat(name, cxr) ;
175 }
176 
177 
178 void basename_r_chebpim_p(int k, int, int i, char* name) {
179 
180  assert( k>=0 ) ;
181  assert( i>=0 ) ;
182 
183  int m = k / 2 ;
184  int xr = (m%2 == 0) ? 2*i : 2*i + 1 ;
185 
186  strcpy(name, "T") ;
187 
188  char cxr[4] ;
189  assert( xr < 1000) ;
190  sprintf(cxr, "%d", xr) ;
191  strcat(name, cxr) ;
192 }
193 
194 
195 void basename_r_chebpim_i(int k, int, int i, char* name) {
196 
197  assert( k>=0 ) ;
198  assert( i>=0 ) ;
199 
200  int m = k / 2 ;
201  int xr = (m%2 == 0) ? 2*i + 1 : 2*i ;
202 
203  strcpy(name, "T") ;
204 
205  char cxr[4] ;
206  assert( xr < 1000) ;
207  sprintf(cxr, "%d", xr) ;
208  strcat(name, cxr) ;
209 }
210 
211 void basename_r_chebpi_p(int , int j, int i, char* name) {
212 
213  assert( j>=0 ) ;
214  assert( i>=0 ) ;
215 
216  int xr = (j%2 == 0) ? 2*i : 2*i + 1 ;
217 
218  strcpy(name, "T") ;
219 
220  char cxr[4] ;
221  assert( xr < 1000) ;
222  sprintf(cxr, "%d", xr) ;
223  strcat(name, cxr) ;
224 }
225 
226 
227 void basename_r_chebpi_i(int , int j, int i, char* name) {
228 
229  assert( j>=0 ) ;
230  assert( i>=0 ) ;
231 
232  int xr = (j%2 == 0) ? 2*i + 1 : 2*i ;
233 
234  strcpy(name, "T") ;
235 
236  char cxr[4] ;
237  assert( xr < 1000) ;
238  sprintf(cxr, "%d", xr) ;
239  strcat(name, cxr) ;
240 }
241 
242 void basename_r_leg(int, int, int i, char* name) {
243 
244  assert( i>=0 ) ;
245 
246  strcpy(name, "P") ;
247 
248  char cxr[4] ;
249  assert( i < 1000) ;
250  sprintf(cxr, "%d", i) ;
251  strcat(name, cxr) ;
252 }
253 
254 
255 void basename_r_legp(int, int, int i, char* name) {
256 
257  assert( i>=0 ) ;
258 
259  strcpy(name, "P") ;
260 
261  int xr = 2*i ;
262  char cxr[4] ;
263  assert( xr < 1000) ;
264  sprintf(cxr, "%d", xr) ;
265  strcat(name, cxr) ;
266 }
267 
268 
269 void basename_r_legi(int, int, int i, char* name) {
270 
271  assert( i>=0 ) ;
272 
273  strcpy(name, "P") ;
274 
275  int xr = 2*i + 1 ;
276  char cxr[4] ;
277  assert( xr < 1000) ;
278  sprintf(cxr, "%d", xr) ;
279  strcat(name, cxr) ;
280 }
281 
282 void basename_r_jaco02(int, int, int i, char* name) {
283 
284  assert( i>=0 ) ;
285 
286  strcpy(name, "J") ;
287 
288  char cxr[4] ;
289  assert( i < 1000) ;
290  sprintf(cxr, "%d", i) ;
291  strcat(name, cxr) ;
292 }
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 }
R_CHEB
#define R_CHEB
base de Chebychev ordinaire (fin)
Definition: type_parite.h:166
Lorene::Base_val::b
int * b
Array (size: nzone ) of the spectral basis in each domain.
Definition: base_val.h:331
R_CHEBPI_I
#define R_CHEBPI_I
Cheb. pair-impair suivant l impair pour l=0.
Definition: type_parite.h:174
Lorene
Lorene prototypes.
Definition: app_hor.h:64
R_JACO02
#define R_JACO02
base de Jacobi(0,2) ordinaire (finjac)
Definition: type_parite.h:188
R_LEGP
#define R_LEGP
base de Legendre paire (rare) seulement
Definition: type_parite.h:184
R_LEGI
#define R_LEGI
base de Legendre impaire (rare) seulement
Definition: type_parite.h:186
R_CHEBP
#define R_CHEBP
base de Cheb. paire (rare) seulement
Definition: type_parite.h:168
R_CHEBI
#define R_CHEBI
base de Cheb. impaire (rare) seulement
Definition: type_parite.h:170
TRA_R
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
Definition: type_parite.h:158
Lorene::Base_val::name_r
void name_r(int l, int k, int j, int i, char *basename) const
Name of the basis function in r ( )
Definition: base_val_name_r.C:84
Lorene::Base_val::nzone
int nzone
Number of domains (zones)
Definition: base_val.h:327
MSQ_R
#define MSQ_R
Extraction de l'info sur R.
Definition: type_parite.h:152
R_CHEBPIM_I
#define R_CHEBPIM_I
Cheb. pair-impair suivant m, impair pour m=0.
Definition: type_parite.h:178
R_CHEBPIM_P
#define R_CHEBPIM_P
Cheb. pair-impair suivant m, pair pour m=0.
Definition: type_parite.h:176
R_CHEBPI_P
#define R_CHEBPI_P
Cheb. pair-impair suivant l pair pour l=0.
Definition: type_parite.h:172
MAX_BASE
#define MAX_BASE
Nombre max. de bases differentes.
Definition: type_parite.h:144
R_CHEBU
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
Definition: type_parite.h:180
R_LEG
#define R_LEG
base de Legendre ordinaire (fin)
Definition: type_parite.h:182