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 
108 namespace Lorene {
109 int 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 
123 int 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 
136 int 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 
154 int 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 
168 int 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 
182 int 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 
202 int 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 
222 int 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 
236 int 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 
252 int 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 }
#define T_LEG
fct. de Legendre associees
Definition: type_parite.h:236
#define T_LEG_MP
fct. de Legendre associees avec m pair
Definition: type_parite.h:238
#define P_COSSIN
dev. standart
Definition: type_parite.h:245
#define T_LEG_PI
fct. de Legendre associees paires avec m impair
Definition: type_parite.h:224
#define T_LEG_MI
fct. de Legendre associees avec m impair
Definition: type_parite.h:240
Lorene prototypes.
Definition: app_hor.h:67
#define MSQ_P
Extraction de l&#39;info sur Phi.
Definition: type_parite.h:156
#define T_LEG_I
fct. de Legendre associees impaires
Definition: type_parite.h:220
#define MSQ_T
Extraction de l&#39;info sur Theta.
Definition: type_parite.h:154
#define T_LEG_IP
fct. de Legendre associees impaires avec m pair
Definition: type_parite.h:222
#define T_LEG_P
fct. de Legendre associees paires
Definition: type_parite.h:216
#define P_COSSIN_I
dev. sur Phi = 2*phi, freq. impaires
Definition: type_parite.h:249
#define P_COSSIN_P
dev. sur Phi = 2*phi, freq. paires
Definition: type_parite.h:247
#define T_LEG_II
fct. de Legendre associees impaires avec m impair
Definition: type_parite.h:226
#define T_LEG_PP
fct. de Legendre associees paires avec m pair
Definition: type_parite.h:218