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
28char 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
66namespace Lorene {
67void basename_r_unknown(int, int, int, char*) ;
68void basename_r_cheb(int, int, int, char*) ;
69void basename_r_chebp(int, int, int, char*) ;
70void basename_r_chebi(int, int, int, char*) ;
71void basename_r_chebpim_p(int, int, int, char*) ;
72void basename_r_chebpim_i(int, int, int, char*) ;
73void basename_r_chebpi_p(int, int, int, char*) ;
74void basename_r_chebpi_i(int, int, int, char*) ;
75void basename_r_leg(int, int, int, char*) ;
76void basename_r_legp(int, int, int, char*) ;
77void basename_r_legi(int, int, int, char*) ;
78void basename_r_jaco02(int, int, int, char*) ;
79
80 //----------------------------//
81 // Base_val method //
82 //----------------------------//
83
84void 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
131void basename_r_unknown(int, int, int, char*) {
132 cout << "Base_val::name_r : unknwon basis !" << endl ;
133 abort() ;
134}
135
136
137void 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
150void 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
164void 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
178void 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
195void 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
211void 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
227void 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
242void 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
255void 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
269void 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
282void 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}
void name_r(int l, int k, int j, int i, char *basename) const
Name of the basis function in r ( )
int * b
Array (size: nzone ) of the spectral basis in each domain.
Definition base_val.h:331
int nzone
Number of domains (zones)
Definition base_val.h:327
#define R_LEGP
base de Legendre paire (rare) seulement
#define MAX_BASE
Nombre max. de bases differentes.
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
#define R_JACO02
base de Jacobi(0,2) ordinaire (finjac)
#define R_LEGI
base de Legendre impaire (rare) seulement
#define R_CHEBI
base de Cheb. impaire (rare) seulement
#define MSQ_R
Extraction de l'info sur R.
#define R_CHEBPIM_I
Cheb. pair-impair suivant m, impair pour m=0.
#define R_CHEBPI_I
Cheb. pair-impair suivant l impair pour l=0.
#define R_LEG
base de Legendre ordinaire (fin)
#define R_CHEBPIM_P
Cheb. pair-impair suivant m, pair pour m=0.
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
#define R_CHEB
base de Chebychev ordinaire (fin)
#define R_CHEBP
base de Cheb. paire (rare) seulement
#define R_CHEBPI_P
Cheb. pair-impair suivant l pair pour l=0.
Lorene prototypes.
Definition app_hor.h:64