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