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
91 namespace Lorene {
92 int 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
267 int 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
dev. standart
Definition: type_parite.h:245
#define R_CHEBPI_I
Cheb. pair-impair suivant l impair pour l=0.
Definition: type_parite.h:174
Lorene prototypes.
Definition: app_hor.h:67
#define T_COS
dev. cos seulement
Definition: type_parite.h:196
#define R_CHEBI
base de Cheb. impaire (rare) seulement
Definition: type_parite.h:170
#define R_CHEBP
base de Cheb. paire (rare) seulement
Definition: type_parite.h:168
#define T_COS_P
dev. cos seulement, harmoniques paires
Definition: type_parite.h:200
#define T_COSSIN_C
dev. cos-sin alternes, cos pour m=0
Definition: type_parite.h:192
#define R_CHEBPIM_I
Cheb. pair-impair suivant m, impair pour m=0.
Definition: type_parite.h:178
#define R_CHEBPIM_P
Cheb. pair-impair suivant m, pair pour m=0.
Definition: type_parite.h:176
#define R_CHEBPI_P
Cheb. pair-impair suivant l pair pour l=0.
Definition: type_parite.h:172
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
Definition: type_parite.h:180
#define P_COSSIN_P
dev. sur Phi = 2*phi, freq. paires
Definition: type_parite.h:247
#define T_COSSIN_CP
cos pair-sin impair alternes, cos pour m=0
Definition: type_parite.h:208
#define R_CHEB
base de Chebychev ordinaire (fin)
Definition: type_parite.h:166