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 char 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
88 namespace Lorene {
89 int 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
264 int 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 }
P_COSSIN
#define P_COSSIN
dev. standart
Definition: type_parite.h:245
R_CHEB
#define R_CHEB
base de Chebychev ordinaire (fin)
Definition: type_parite.h:166
T_COS
#define T_COS
dev. cos seulement
Definition: type_parite.h:196
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_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
T_COSSIN_C
#define T_COSSIN_C
dev. cos-sin alternes, cos pour m=0
Definition: type_parite.h:192
T_COS_P
#define T_COS_P
dev. cos seulement, harmoniques paires
Definition: type_parite.h:200
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
T_COSSIN_CP
#define T_COSSIN_CP
cos pair-sin impair alternes, cos pour m=0
Definition: type_parite.h:208
P_COSSIN_P
#define P_COSSIN_P
dev. sur Phi = 2*phi, freq. paires
Definition: type_parite.h:247
R_CHEBU
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
Definition: type_parite.h:180