LORENE
nullite_plm.C
1/*
2 * Copyright (c) 1999-2001 Philippe Grandclement
3 * Copyright (c) 2000-2001 Eric Gourgoulhon
4 *
5 * This file is part of LORENE.
6 *
7 * LORENE is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * LORENE is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with LORENE; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 */
22
23
24
25
26/*
27 * $Id: nullite_plm.C,v 1.9 2016/12/05 16:18:02 j_novak Exp $
28 * $Log: nullite_plm.C,v $
29 * Revision 1.9 2016/12/05 16:18:02 j_novak
30 * Suppression of some global variables (file names, loch, ...) to prevent redefinitions
31 *
32 * Revision 1.8 2014/10/13 08:53:14 j_novak
33 * Lorene classes and functions now belong to the namespace Lorene.
34 *
35 * Revision 1.7 2014/10/06 15:16:04 j_novak
36 * Modified #include directives to use c++ syntax.
37 *
38 * Revision 1.6 2009/10/23 12:54:47 j_novak
39 * New base T_LEG_MI
40 *
41 * Revision 1.5 2009/10/13 19:45:01 j_novak
42 * New base T_LEG_MP.
43 *
44 * Revision 1.4 2005/02/16 15:19:55 m_forot
45 * Add the case T_LEG
46 *
47 * Revision 1.3 2003/09/16 12:11:59 j_novak
48 * Added the base T_LEG_II.
49 *
50 * Revision 1.2 2002/10/16 14:36:57 j_novak
51 * Reorganization of #include instructions of standard C++, in order to
52 * use experimental version 3 of gcc.
53 *
54 * Revision 1.1.1.1 2001/11/20 15:19:28 e_gourgoulhon
55 * LORENE
56 *
57 * Revision 2.8 2000/10/04 14:56:34 eric
58 * nullite_plm_nonsym_anti : borne_sup est mise toujours egale a nt-2
59 * (et non plus a nt-1 dans le cas m pair).
60 * Ajout des bases T_LEG_IP et T_LEG_PI (deja dans la version 2.7).
61 *
62 * Revision 2.7 2000/10/03 14:20:09 eric
63 * *** empty log message ***
64 *
65 * Revision 2.6 1999/12/16 16:41:27 phil
66 * *** empty log message ***
67 *
68 * Revision 2.5 1999/12/16 16:16:45 phil
69 * correction cas nt = 1
70 *
71 * Revision 2.4 1999/09/16 12:05:51 phil
72 * correction des cas antisym en z=0
73 *
74 * Revision 2.3 1999/09/14 17:52:47 phil
75 * *** empty log message ***
76 *
77 * Revision 2.2 1999/09/14 17:41:48 phil
78 * On commence l'ajout des cas antisymetriques en z=0
79 *
80 * Revision 2.1 1999/04/13 13:49:10 phil
81 * *** empty log message ***
82 *
83 * Revision 2.0 1999/04/13 13:31:15 phil
84 * *** empty log message ***
85 *
86 *
87 * $Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/nullite_plm.C,v 1.9 2016/12/05 16:18:02 j_novak Exp $
88 *
89 */
90
91// Entetes C
92#include <cstdlib>
93
94// Entete Lorene
95#include "headcpp.h"
96#include "type_parite.h"
97#include "base_val.h"
98
99
100// fonction testant la nullite des fonctions de developpements
101// j indice en theta -- nt nbre de points en theta
102// k indice en phi -- np nbre de points en phi
103
104 //-------------------------------------------------------
105 // Developpement en P_COSSIN pour phi et T_LEG en theta
106 //---------------------------------------------------------
107
108namespace Lorene {
109int nullite_plm_t_leg (int j, int nt, int k, int np) {
110
111 int m = (k%2 == 0) ? k/2 : (k-1)/2 ;
112 int borne_sup = nt-1 ;
113 int borne_inf = m ;
114 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
115 return 0 ; else return 1 ;
116}
117
118
119 //-------------------------------------------------------
120 // Developpement en P_COSSIN pour phi et T_LEG_P en theta
121 //---------------------------------------------------------
122
123int nullite_plm_nonsym (int j, int nt, int k, int np) {
124
125 int m = (k%2 == 0) ? k/2 : (k-1)/2 ;
126 int borne_sup = (m%2 == 0) ? nt-1 : nt-2 ;
127 int borne_inf = (m%2 == 0) ? m/2 : (m-1)/2 ;
128 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
129 return 0 ; else return 1 ;
130}
131
132 //-------------------------------------------------------
133 // Developpement en P_COSSIN pour phi et T_LEG_I en theta
134 //---------------------------------------------------------
135
136int nullite_plm_nonsym_anti (int j, int nt, int k, int np) {
137
138 int m = (k%2 == 0) ? k/2 : (k-1)/2 ;
139
140 int borne_sup = nt-2 ;
141
142 int borne_inf = (m%2 == 0) ? m/2 : (m-1)/2 ;
143 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
144 return 0 ; else return 1 ;
145}
146
147
148
149
150 //------------------------------------------------------
151 // Developpement en P_COSSIN_P pour phi et T_LEG_PP en theta
152 //------------------------------------------------------
153
154int nullite_plm_sym (int j, int nt, int k, int np) {
155
156 int m = (k%2 == 0) ? k : k-1 ;
157 int borne_inf = m/2 ;
158 int borne_sup = nt-1 ;
159 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
160 return 0 ; else return 1 ;
161}
162
163
164 //-------------------------------------------------------
165 // Developpement en P_COSSIN_P pour phi et T_LEG_IP en theta
166 //---------------------------------------------------------
167
168int nullite_plm_t_leg_ip(int j, int nt, int k, int np) {
169
170 int m = (k%2 == 0) ? k : k-1 ;
171 int borne_sup = nt-2 ;
172 int borne_inf = m/2 ;
173 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
174 return 0 ; else return 1 ;
175}
176
177
178 //-------------------------------------------------------
179 // Developpement en P_COSSIN_I pour phi et T_LEG_PI en theta
180 //---------------------------------------------------------
181
182int nullite_plm_t_leg_pi(int j, int nt, int k, int np) {
183
184 int m ;
185 if (k<=2) {
186 m = 1 ;
187 }
188 else{
189 m = (k%2 == 0) ? k-1 : k ;
190 }
191
192 int borne_sup = nt-2 ;
193 int borne_inf = (m-1)/2 ;
194 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
195 return 0 ; else return 1 ;
196}
197
198 //-------------------------------------------------------
199 // Developpement en P_COSSIN_I pour phi et T_LEG_II en theta
200 //---------------------------------------------------------
201
202int nullite_plm_t_leg_ii(int j, int nt, int k, int np) {
203
204 int m ;
205 if (k<=2) {
206 m = 1 ;
207 }
208 else{
209 m = (k%2 == 0) ? k-1 : k ;
210 }
211
212 int borne_sup = nt-2 ;
213 int borne_inf = (m+1)/2 ;
214 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
215 return 0 ; else return 1 ;
216}
217
218 //----------------------------------------------------------
219 // Developpement en P_COSSIN_P pour phi et T_LEG_MP en theta
220 //------------------------------------------------------------
221
222int nullite_plm_t_leg_mp (int j, int nt, int k, int np) {
223
224 int m = (k%2 == 0) ? k : k-1 ;
225 int borne_inf = m ;
226 int borne_sup = nt-1 ;
227 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
228 return 0 ; else return 1 ;
229}
230
231
232 //----------------------------------------------------------
233 // Developpement en P_COSSIN_P pour phi et T_LEG_MI en theta
234 //------------------------------------------------------------
235
236int nullite_plm_t_leg_mi (int j, int nt, int k, int np) {
237
238 int m = 2*( (k-1) / 2) + 1 ;
239 int borne_inf = m ;
240 int borne_sup = nt-1 ;
241 if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np))
242 return 0 ; else return 1 ;
243}
244
245
246
247
248 //-----------------------------
249 // La fonction
250 //-------------------------------
251
252int nullite_plm (int j, int nt, int k, int np, Base_val base) {
253
254 // on recupere les bases angulaires dans le noyau :
255 // elles doivent etre identiques dans toutes les zones.
256
257 int base_t = (base.b[0] & MSQ_T) ;
258 int base_p = (base.b[0] & MSQ_P) ;
259 int result ;
260
261 switch (base_p) {
262 case P_COSSIN :
263 // cas sym ou antisym en z=0 ...
264 switch (base_t) {
265 case T_LEG_P :
266 result = nullite_plm_nonsym (j, nt, k, np) ;
267 break ;
268
269
270 case T_LEG_I :
271 result = nullite_plm_nonsym_anti (j, nt, k, np) ;
272 break ;
273
274 case T_LEG :
275 result = nullite_plm_t_leg (j, nt, k, np) ;
276 break ;
277
278 default :
279 cout << "nullite_plm : cas inconnu ..." << endl ;
280 abort() ;
281 }
282 break ;
283
284 case P_COSSIN_P :
285 switch (base_t) {
286 case T_LEG_PP :
287 result = nullite_plm_sym (j, nt, k, np) ;
288 break ;
289
290
291 case T_LEG_IP :
292 result = nullite_plm_t_leg_ip (j, nt, k, np) ;
293 break ;
294
295 case T_LEG_MP :
296 result = nullite_plm_t_leg_mp (j, nt, k, np) ;
297 break ;
298
299 default :
300 cout << "nullite_plm : cas inconnu ..." << endl ;
301 abort() ;
302 }
303 break ;
304
305 case P_COSSIN_I :
306 switch (base_t) {
307 case T_LEG_PI :
308 result = nullite_plm_t_leg_pi (j, nt, k, np) ;
309 break ;
310
311 case T_LEG_II :
312 result = nullite_plm_t_leg_ii (j, nt, k, np) ;
313 break ;
314
315 case T_LEG_MI :
316 result = nullite_plm_t_leg_mi (j, nt, k, np) ;
317 break ;
318
319 default :
320 cout << "nullite_plm : cas inconnu ..." << endl ;
321 abort() ;
322 }
323 break ;
324
325 default :
326 cout << "nullite_plm : cas inconnu ..." << endl ;
327 abort() ;
328 }
329
330 return result ;
331}
332}
Bases of the spectral expansions.
Definition base_val.h:325
#define T_LEG_MP
fct. de Legendre associees avec m pair
#define P_COSSIN_P
dev. sur Phi = 2*phi, freq. paires
#define T_LEG_PI
fct. de Legendre associees paires avec m impair
#define T_LEG
fct. de Legendre associees
#define T_LEG_P
fct. de Legendre associees paires
#define T_LEG_IP
fct. de Legendre associees impaires avec m pair
#define P_COSSIN
dev. standart
#define P_COSSIN_I
dev. sur Phi = 2*phi, freq. impaires
#define T_LEG_MI
fct. de Legendre associees avec m impair
#define MSQ_T
Extraction de l'info sur Theta.
#define T_LEG_II
fct. de Legendre associees impaires avec m impair
#define T_LEG_I
fct. de Legendre associees impaires
#define MSQ_P
Extraction de l'info sur Phi.
#define T_LEG_PP
fct. de Legendre associees paires avec m pair
Lorene prototypes.
Definition app_hor.h:67