LORENE
std_base_scal.C
1/*
2 * Copyright (c) 1999-2001 Eric Gourgoulhon
3 *
4 * This file is part of LORENE.
5 *
6 * LORENE is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * LORENE is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with LORENE; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
22
23
24
25/*
26 * Ensemble des routines de manipulation de base spectrales dans
27 * le cas scalaire.
28 *
29 */
30
31/*
32 * $Id: std_base_scal.C,v 1.9 2016/12/05 16:18:02 j_novak Exp $
33 * $Log: std_base_scal.C,v $
34 * Revision 1.9 2016/12/05 16:18:02 j_novak
35 * Suppression of some global variables (file names, loch, ...) to prevent redefinitions
36 *
37 * Revision 1.8 2014/10/13 08:53:14 j_novak
38 * Lorene classes and functions now belong to the namespace Lorene.
39 *
40 * Revision 1.7 2014/10/06 15:16:04 j_novak
41 * Modified #include directives to use c++ syntax.
42 *
43 * Revision 1.6 2013/06/05 14:54:46 j_novak
44 * Removed the FINJAC sampling (now BASE_JAC02 in Mg3d).
45 *
46 * Revision 1.5 2007/12/11 15:28:17 jl_cornou
47 * Jacobi(0,2) polynomials partially implemented
48 *
49 * Revision 1.4 2005/10/25 08:56:37 p_grandclement
50 * addition of std_spectral_base in the case of odd functions near the origin
51 *
52 * Revision 1.3 2004/11/23 15:13:50 m_forot
53 * Added the bases for the cases without any equatorial symmetry
54 * (T_COSSIN_C, T_COSSIN_S, T_LEG, R_CHEBPI_P, R_CHEBPI_I).
55 *
56 * Revision 1.2 2002/10/16 14:36:57 j_novak
57 * Reorganization of #include instructions of standard C++, in order to
58 * use experimental version 3 of gcc.
59 *
60 * Revision 1.1.1.1 2001/11/20 15:19:28 e_gourgoulhon
61 * LORENE
62 *
63 * Revision 2.2 1999/10/20 15:31:52 eric
64 * La routine Valeur::std_base_scal() se trouve desormais dans le
65 * fichier valeur.C.
66 *
67 * Revision 2.1 1999/03/01 15:00:43 eric
68 * *** empty log message ***
69 *
70 * Revision 2.0 1999/02/22 15:30:33 hyc
71 * *** empty log message ***
72 *
73 *
74 * $Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/std_base_scal.C,v 1.9 2016/12/05 16:18:02 j_novak Exp $
75 *
76 */
77
78// Headers C
79#include <cstdlib>
80
81// Lorene
82#include "headcpp.h"
83#include "type_parite.h"
84
85
86 //------------------------------//
87 // Le plus simple: cas une zone //
88 //------------------------------//
89
90// Cree la base standart pour une zone
91namespace Lorene {
92int std_base_scal_1z(int type_r, int type_t, int type_p) {
93
94 // Base d'echantillonnage en (r,theta,phi) a determiner :
95 int base_l = 0 ;
96
97 // proccess phi
98 switch ( type_p ) {
99 case NONSYM :
100 // Cas sans symetrie sur phi : phi dans [0, 2 pi[
101 base_l = P_COSSIN ; // developpement en cos,sin(m*phi)
102 // Base en theta:
103 switch ( type_t ) {
104 case NONSYM :
105 // pas de symetrie en theta : theta dans [0,pi]
106 base_l = base_l | T_COSSIN_C ; // developpement en
107 // cos(l*theta) pour m pair
108 // sin(l*theta) pour m impair
109
110
111 // Base en r :
112 switch ( type_r ) {
113 case FIN :
114 // echantillonnage fin
115 base_l = base_l | R_CHEB ; // developpement en T_k(x)
116 break ;
117
118 case RARE :
119 // echantillonnage rarefie
120 base_l = base_l | R_CHEBPI_P ; // developpement en
121 // T_{2k}(x) pour l pair
122 // T_{2k+1}(x) pour l impair
123 break ;
124
125 case UNSURR :
126 // echantillonnage fin (1/r)
127 base_l = base_l | R_CHEBU ; // developpement en T_k(x)
128 break ;
129
130 default :
131 cout <<
132 "std_base_scal : le cas type_p, type_t, type_r = "
133 << type_p << " " << type_t << " " << type_r << endl ;
134 cout << " n'est pas prevu ! " << endl ;
135 abort () ;
136 }
137 break ; // fin du cas type_t = NONSYM
138
139 case SYM : // en theta
140 // symetrie theta -> pi - theta : theta dans [0, pi/2]
141 base_l = base_l | T_COSSIN_CP ; // developpement en
142 // cos(2*l*theta) pour m pair
143 // sin((2*l+1)*theta) pour m impair
144 // Base en r :
145 switch ( type_r ) {
146 case FIN :
147 // echantillonnage fin
148 base_l = base_l | R_CHEB ; // developpement en T_k(x)
149 break ;
150
151 case RARE :
152 // echantillonnage rarefie
153 base_l = base_l | R_CHEBPIM_P ; // developpement en
154 // T_{2k}(x) pour m pair
155 // T_{2k+1}(x) pour m impair
156 break ;
157
158 case UNSURR :
159 // echantillonnage fin (1/r)
160 base_l = base_l | R_CHEBU ; // developpement en T_k(x)
161 break ;
162
163 default :
164 cout <<
165 "std_base_scal : le cas type_p, type_t, type_r = "
166 << type_p<< " " << type_t<< " " <<type_r << endl ;
167 cout << " n'est pas prevu ! " << endl ;
168 abort () ;
169 }
170 break ; // fin du cas type_t = SYM
171
172 default :
173 cout <<
174 "std_base_scal : le cas type_p, type_t = "
175 << type_p<< " " <<type_t << endl ;
176 cout << " n'est pas prevu ! " << endl ;
177 abort () ;
178 } // fin des cas sur type_t
179 break ; // fin du cas sans symetrie pour phi
180
181
182 case SYM : // en phi
183 // Cas symetrie phi -> phi + pi : phi in [0, pi]
184 base_l = P_COSSIN_P ; // developpement en cos,sin(2*m*phi)
185 // Base en theta:
186 switch ( type_t ) {
187 case NONSYM :
188 // pas de symetrie en theta : theta dans [0,pi]
189 base_l = base_l | T_COS ; // developpement en cos(l*theta) seulement
190 // (puisque m est toujours pair)
191 // Base en r :
192 switch ( type_r ) {
193 case FIN : // echantillonnage fin
194 base_l = base_l | R_CHEB ; // developpement en T_k(x)
195 break ;
196
197 case RARE : // echantillonnage rarefie
198 base_l = base_l | R_CHEBPI_P ; // developpement en
199 // T_{2k}(x) pour l pair
200 // T_{2k+1}(x) pour l impair
201 break ;
202
203 case UNSURR : // echantillonnage fin (1/r)
204 base_l = base_l | R_CHEBU ; // developpement en T_k(x)
205 break ;
206
207 default :
208 cout <<
209 "std_base_scal : le cas type_p, type_t, type_r = "
210 << type_p<< " " <<type_t<< " " <<type_r << endl ;
211 cout << " n'est pas prevu ! " << endl ;
212 abort () ;
213 }
214 break ; // fin du cas type_t = NONSYM
215
216 case SYM : // symetrie theta -> pi - theta : theta dans [0, pi/2]
217 base_l = base_l | T_COS_P ; // developpement en cos(2*l*theta)
218 // (puisque m est toujours pair)
219 // Base en r :
220 switch ( type_r ) {
221 case FIN : // echantillonnage fin
222 base_l = base_l | R_CHEB ; // developpement en T_k(x)
223 break ;
224
225 case RARE : // echantillonnage rarefie
226 base_l = base_l | R_CHEBP ; // developpement en T_{2k}(x)
227 break ;
228
229 case UNSURR : // echantillonnage fin (1/r)
230 base_l = base_l | R_CHEBU ; // developpement en T_k(x)
231 break ;
232
233 default :
234 cout <<
235 "std_base_scal : le cas type_p, type_t, type_r = "
236 << type_p<< " " <<type_t<< " " <<type_r << endl ;
237 cout << " n'est pas prevu ! " << endl ;
238 abort () ;
239 }
240 break ; // fin du cas type_t = SYM
241
242 default :
243 cout <<
244 "std_base_scal : le cas type_p, type_t = "
245 << type_p<< " " <<type_t << endl ;
246 cout << " n'est pas prevu ! " << endl ;
247 abort () ;
248 } // fin des cas sur type_t
249 break ; // fin du cas symetrie phi -> phi + pi
250
251 default :
252 cout <<
253 "std_base_scal : le cas type_p = " << type_p << endl ;
254 cout << " n'est pas prevu ! " << endl ;
255 abort () ;
256 } // Fin des cas en phi
257
258 // On range le resultat
259 return base_l ;
260}
261
262 //----------------------------------------//
263 // Le plus simple: cas une zone cas impair //
264 //----------------------------------------//
265
266// Cree la base standart pour une zone
267int std_base_scal_odd_1z(int type_r, int type_t, int type_p) {
268
269 // Base d'echantillonnage en (r,theta,phi) a determiner :
270 int base_l = 0 ;
271
272 // proccess phi
273 switch ( type_p ) {
274 case NONSYM :
275 // Cas sans symetrie sur phi : phi dans [0, 2 pi[
276 base_l = P_COSSIN ; // developpement en cos,sin(m*phi)
277 // Base en theta:
278 switch ( type_t ) {
279 case NONSYM :
280 // pas de symetrie en theta : theta dans [0,pi]
281 base_l = base_l | T_COSSIN_C ; // developpement en
282 // cos(l*theta) pour m pair
283 // sin(l*theta) pour m impair
284
285
286 // Base en r :
287 switch ( type_r ) {
288 case FIN :
289 // echantillonnage fin
290 base_l = base_l | R_CHEB ; // developpement en T_k(x)
291 break ;
292
293 case RARE :
294 // echantillonnage rarefie
295 base_l = base_l | R_CHEBPI_I ; // developpement en
296 // T_{2k}(x) pour l impair
297 // T_{2k+1}(x) pour l pair
298 break ;
299
300 case UNSURR :
301 // echantillonnage fin (1/r)
302 base_l = base_l | R_CHEBU ; // developpement en T_k(x)
303 break ;
304
305 default :
306 cout <<
307 "std_base_scal : le cas type_p, type_t, type_r = "
308 << type_p << " " << type_t << " " << type_r << endl ;
309 cout << " n'est pas prevu ! " << endl ;
310 abort () ;
311 }
312 break ; // fin du cas type_t = NONSYM
313
314 case SYM : // en theta
315 // symetrie theta -> pi - theta : theta dans [0, pi/2]
316 base_l = base_l | T_COSSIN_CP ; // developpement en
317 // cos(2*l*theta) pour m pair
318 // sin((2*l+1)*theta) pour m impair
319 // Base en r :
320 switch ( type_r ) {
321 case FIN :
322 // echantillonnage fin
323 base_l = base_l | R_CHEB ; // developpement en T_k(x)
324 break ;
325
326 case RARE :
327 // echantillonnage rarefie
328 base_l = base_l | R_CHEBPIM_I ; // developpement en
329 // T_{2k}(x) pour m impair
330 // T_{2k+1}(x) pour m pair
331 break ;
332
333 case UNSURR :
334 // echantillonnage fin (1/r)
335 base_l = base_l | R_CHEBU ; // developpement en T_k(x)
336 break ;
337
338 default :
339 cout <<
340 "std_base_scal : le cas type_p, type_t, type_r = "
341 << type_p<< " " << type_t<< " " <<type_r << endl ;
342 cout << " n'est pas prevu ! " << endl ;
343 abort () ;
344 }
345 break ; // fin du cas type_t = SYM
346
347 default :
348 cout <<
349 "std_base_scal : le cas type_p, type_t = "
350 << type_p<< " " <<type_t << endl ;
351 cout << " n'est pas prevu ! " << endl ;
352 abort () ;
353 } // fin des cas sur type_t
354 break ; // fin du cas sans symetrie pour phi
355
356
357 case SYM : // en phi
358 // Cas symetrie phi -> phi + pi : phi in [0, pi]
359 base_l = P_COSSIN_P ; // developpement en cos,sin(2*m*phi)
360 // Base en theta:
361 switch ( type_t ) {
362 case NONSYM :
363 // pas de symetrie en theta : theta dans [0,pi]
364 base_l = base_l | T_COS ; // developpement en cos(l*theta) seulement
365 // (puisque m est toujours pair)
366 // Base en r :
367 switch ( type_r ) {
368 case FIN : // echantillonnage fin
369 base_l = base_l | R_CHEB ; // developpement en T_k(x)
370 break ;
371
372 case RARE : // echantillonnage rarefie
373 base_l = base_l | R_CHEBPI_I ; // developpement en
374 // T_{2k}(x) pour l impair
375 // T_{2k+1}(x) pour l pair
376 break ;
377
378 case UNSURR : // echantillonnage fin (1/r)
379 base_l = base_l | R_CHEBU ; // developpement en T_k(x)
380 break ;
381
382 default :
383 cout <<
384 "std_base_scal : le cas type_p, type_t, type_r = "
385 << type_p<< " " <<type_t<< " " <<type_r << endl ;
386 cout << " n'est pas prevu ! " << endl ;
387 abort () ;
388 }
389 break ; // fin du cas type_t = NONSYM
390
391 case SYM : // symetrie theta -> pi - theta : theta dans [0, pi/2]
392 base_l = base_l | T_COS_P ; // developpement en cos(2*l*theta)
393 // (puisque m est toujours pair)
394 // Base en r :
395 switch ( type_r ) {
396 case FIN : // echantillonnage fin
397 base_l = base_l | R_CHEB ; // developpement en T_k(x)
398 break ;
399
400 case RARE : // echantillonnage rarefie
401 base_l = base_l | R_CHEBI ; // developpement en T_{2k+1}(x)
402 break ;
403
404 case UNSURR : // echantillonnage fin (1/r)
405 base_l = base_l | R_CHEBU ; // developpement en T_k(x)
406 break ;
407
408 default :
409 cout <<
410 "std_base_scal : le cas type_p, type_t, type_r = "
411 << type_p<< " " <<type_t<< " " <<type_r << endl ;
412 cout << " n'est pas prevu ! " << endl ;
413 abort () ;
414 }
415 break ; // fin du cas type_t = SYM
416
417 default :
418 cout <<
419 "std_base_scal : le cas type_p, type_t = "
420 << type_p<< " " <<type_t << endl ;
421 cout << " n'est pas prevu ! " << endl ;
422 abort () ;
423 } // fin des cas sur type_t
424 break ; // fin du cas symetrie phi -> phi + pi
425
426 default :
427 cout <<
428 "std_base_scal : le cas type_p = " << type_p << endl ;
429 cout << " n'est pas prevu ! " << endl ;
430 abort () ;
431 } // Fin des cas en phi
432
433 // On range le resultat
434 return base_l ;
435}
436
437}
#define P_COSSIN_P
dev. sur Phi = 2*phi, freq. paires
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
#define R_CHEBI
base de Cheb. impaire (rare) seulement
#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 T_COS_P
dev. cos seulement, harmoniques paires
#define P_COSSIN
dev. standart
#define R_CHEBPIM_P
Cheb. pair-impair suivant m, pair pour m=0.
#define T_COSSIN_CP
cos pair-sin impair alternes, cos pour m=0
#define R_CHEB
base de Chebychev ordinaire (fin)
#define T_COS
dev. cos seulement
#define R_CHEBP
base de Cheb. paire (rare) seulement
#define T_COSSIN_C
dev. cos-sin alternes, cos pour m=0
#define R_CHEBPI_P
Cheb. pair-impair suivant l pair pour l=0.
Lorene prototypes.
Definition app_hor.h:67