nullite_plm.C

00001 /*
00002  *   Copyright (c) 1999-2001 Philippe Grandclement
00003  *   Copyright (c) 2000-2001 Eric Gourgoulhon
00004  *
00005  *   This file is part of LORENE.
00006  *
00007  *   LORENE is free software; you can redistribute it and/or modify
00008  *   it under the terms of the GNU General Public License as published by
00009  *   the Free Software Foundation; either version 2 of the License, or
00010  *   (at your option) any later version.
00011  *
00012  *   LORENE is distributed in the hope that it will be useful,
00013  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  *   GNU General Public License for more details.
00016  *
00017  *   You should have received a copy of the GNU General Public License
00018  *   along with LORENE; if not, write to the Free Software
00019  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00020  *
00021  */
00022 
00023 
00024 char nullite_plm_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/nullite_plm.C,v 1.6 2009/10/23 12:54:47 j_novak Exp $" ;
00025 
00026 /*
00027  * $Id: nullite_plm.C,v 1.6 2009/10/23 12:54:47 j_novak Exp $
00028  * $Log: nullite_plm.C,v $
00029  * Revision 1.6  2009/10/23 12:54:47  j_novak
00030  * New base T_LEG_MI
00031  *
00032  * Revision 1.5  2009/10/13 19:45:01  j_novak
00033  * New base T_LEG_MP.
00034  *
00035  * Revision 1.4  2005/02/16 15:19:55  m_forot
00036  * Add the case T_LEG
00037  *
00038  * Revision 1.3  2003/09/16 12:11:59  j_novak
00039  * Added the base T_LEG_II.
00040  *
00041  * Revision 1.2  2002/10/16 14:36:57  j_novak
00042  * Reorganization of #include instructions of standard C++, in order to
00043  * use experimental version 3 of gcc.
00044  *
00045  * Revision 1.1.1.1  2001/11/20 15:19:28  e_gourgoulhon
00046  * LORENE
00047  *
00048  * Revision 2.8  2000/10/04  14:56:34  eric
00049  * nullite_plm_nonsym_anti : borne_sup est mise toujours egale a nt-2
00050  *   (et non plus a nt-1 dans le cas m pair).
00051  * Ajout des bases T_LEG_IP et T_LEG_PI (deja dans la version 2.7).
00052  *
00053  * Revision 2.7  2000/10/03  14:20:09  eric
00054  * *** empty log message ***
00055  *
00056  * Revision 2.6  1999/12/16  16:41:27  phil
00057  * *** empty log message ***
00058  *
00059  * Revision 2.5  1999/12/16  16:16:45  phil
00060  * correction cas nt = 1
00061  *
00062  * Revision 2.4  1999/09/16  12:05:51  phil
00063  * correction des cas antisym en z=0
00064  *
00065  * Revision 2.3  1999/09/14  17:52:47  phil
00066  * *** empty log message ***
00067  *
00068  * Revision 2.2  1999/09/14  17:41:48  phil
00069  * On commence l'ajout des cas antisymetriques en z=0
00070  *
00071  * Revision 2.1  1999/04/13  13:49:10  phil
00072  * *** empty log message ***
00073  *
00074  * Revision 2.0  1999/04/13  13:31:15  phil
00075  * *** empty log message ***
00076  *
00077  *
00078  * $Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/nullite_plm.C,v 1.6 2009/10/23 12:54:47 j_novak Exp $
00079  *
00080  */
00081 
00082 // Entetes C
00083 #include <stdlib.h>
00084 
00085 // Entete Lorene
00086 #include "headcpp.h"
00087 #include "type_parite.h"
00088 #include "base_val.h"
00089 
00090 
00091 // fonction testant la nullite des fonctions de developpements
00092 // j indice en theta -- nt nbre de points en theta
00093 // k indice en phi   -- np nbre de points en phi
00094 
00095      //-------------------------------------------------------
00096     // Developpement en P_COSSIN pour phi et T_LEG en theta
00097        //---------------------------------------------------------
00098 
00099 int nullite_plm_t_leg (int j, int nt, int k, int np) {
00100 
00101     int m = (k%2 == 0) ? k/2 : (k-1)/2 ;
00102     int borne_sup = nt-1 ;
00103     int borne_inf = m ;
00104     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00105     return 0 ; else return 1 ; 
00106 }
00107 
00108 
00109      //-------------------------------------------------------
00110     // Developpement en P_COSSIN pour phi et T_LEG_P en theta
00111        //---------------------------------------------------------
00112 
00113 int nullite_plm_nonsym (int j, int nt, int k, int np) {
00114 
00115     int m = (k%2 == 0) ? k/2 : (k-1)/2 ;
00116     int borne_sup = (m%2 == 0) ? nt-1 : nt-2 ;
00117     int borne_inf = (m%2 == 0) ? m/2 : (m-1)/2 ;
00118     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00119     return 0 ; else return 1 ; 
00120 }
00121 
00122      //-------------------------------------------------------
00123     // Developpement en P_COSSIN pour phi et T_LEG_I en theta
00124        //---------------------------------------------------------
00125 
00126 int nullite_plm_nonsym_anti (int j, int nt, int k, int np) {
00127 
00128     int m = (k%2 == 0) ? k/2 : (k-1)/2 ;
00129 
00130     int borne_sup = nt-2 ;
00131 
00132     int borne_inf = (m%2 == 0) ? m/2 : (m-1)/2 ;
00133     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00134     return 0 ; else return 1 ; 
00135 }
00136 
00137 
00138 
00139 
00140      //------------------------------------------------------
00141     // Developpement en P_COSSIN_P pour phi et T_LEG_PP en theta
00142        //------------------------------------------------------
00143 
00144 int nullite_plm_sym (int j, int nt, int k, int np) {
00145     
00146     int m = (k%2 == 0) ? k : k-1 ;
00147     int borne_inf = m/2 ;
00148     int borne_sup = nt-1 ;
00149     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00150     return 0 ; else return 1 ; 
00151 }
00152 
00153 
00154      //-------------------------------------------------------
00155     // Developpement en P_COSSIN_P pour phi et T_LEG_IP en theta
00156        //---------------------------------------------------------
00157 
00158 int nullite_plm_t_leg_ip(int j, int nt, int k, int np) {
00159 
00160     int m = (k%2 == 0) ? k : k-1 ;
00161     int borne_sup =  nt-2 ;
00162     int borne_inf =  m/2 ;
00163     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00164     return 0 ; else return 1 ; 
00165 }
00166 
00167 
00168      //-------------------------------------------------------
00169     // Developpement en P_COSSIN_I pour phi et T_LEG_PI en theta
00170        //---------------------------------------------------------
00171 
00172 int nullite_plm_t_leg_pi(int j, int nt, int k, int np) {
00173 
00174     int m ;
00175     if (k<=2) {
00176     m = 1 ; 
00177     }
00178     else{
00179     m = (k%2 == 0) ? k-1 : k ; 
00180     }
00181     
00182     int borne_sup =  nt-2 ;
00183     int borne_inf =  (m-1)/2 ;
00184     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00185     return 0 ; else return 1 ; 
00186 }
00187 
00188      //-------------------------------------------------------
00189     // Developpement en P_COSSIN_I pour phi et T_LEG_II en theta
00190        //---------------------------------------------------------
00191 
00192 int nullite_plm_t_leg_ii(int j, int nt, int k, int np) {
00193 
00194     int m ;
00195     if (k<=2) {
00196     m = 1 ; 
00197     }
00198     else{
00199     m = (k%2 == 0) ? k-1 : k ; 
00200     }
00201     
00202     int borne_sup =  nt-2 ;
00203     int borne_inf =  (m+1)/2 ;
00204     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00205     return 0 ; else return 1 ; 
00206 }
00207 
00208      //----------------------------------------------------------
00209     // Developpement en P_COSSIN_P pour phi et T_LEG_MP en theta
00210        //------------------------------------------------------------
00211 
00212 int nullite_plm_t_leg_mp (int j, int nt, int k, int np) {
00213     
00214     int m = (k%2 == 0) ? k : k-1 ;
00215     int borne_inf = m ;
00216     int borne_sup = nt-1 ;
00217     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00218     return 0 ; else return 1 ; 
00219 }
00220 
00221 
00222      //----------------------------------------------------------
00223     // Developpement en P_COSSIN_P pour phi et T_LEG_MI en theta
00224        //------------------------------------------------------------
00225 
00226 int nullite_plm_t_leg_mi (int j, int nt, int k, int np) {
00227     
00228     int m = 2*( (k-1) / 2) + 1 ;
00229     int borne_inf = m ;
00230     int borne_sup = nt-1 ;
00231     if ((j<borne_inf) || (j>borne_sup) || (k==1) || (k>np)) 
00232     return 0 ; else return 1 ; 
00233 }
00234 
00235 
00236 
00237 
00238         //-----------------------------
00239            //       La fonction 
00240           //-------------------------------
00241           
00242 int nullite_plm (int j, int nt, int k, int np, Base_val base) {
00243     
00244     // on recupere les bases angulaires dans le noyau :
00245     // elles doivent etre identiques dans toutes les zones.
00246     
00247     int base_t = (base.b[0] & MSQ_T) ;
00248     int base_p = (base.b[0] & MSQ_P) ;
00249     int result ;
00250    
00251     switch (base_p) {
00252     case P_COSSIN :
00253         // cas sym ou antisym en z=0 ...
00254         switch (base_t) {
00255         case T_LEG_P :
00256           result = nullite_plm_nonsym (j, nt, k, np) ;
00257           break ;  
00258         
00259         
00260         case T_LEG_I :
00261           result = nullite_plm_nonsym_anti (j, nt, k, np) ;
00262           break ;  
00263 
00264         case T_LEG :
00265           result = nullite_plm_t_leg (j, nt, k, np) ;
00266           break ;     
00267         
00268         default :
00269             cout << "nullite_plm : cas inconnu ..." << endl ;
00270             abort() ;
00271         }
00272         break ;
00273 
00274     case P_COSSIN_P :
00275         switch (base_t) {
00276         case T_LEG_PP :
00277           result = nullite_plm_sym (j, nt, k, np) ;
00278           break ;  
00279         
00280         
00281         case T_LEG_IP :
00282           result = nullite_plm_t_leg_ip (j, nt, k, np) ;
00283           break ;  
00284         
00285         case T_LEG_MP :
00286           result = nullite_plm_t_leg_mp (j, nt, k, np) ;
00287           break ;  
00288         
00289         default :
00290             cout << "nullite_plm : cas inconnu ..." << endl ;
00291             abort() ;
00292         }
00293         break ;
00294     
00295     case P_COSSIN_I :
00296         switch (base_t) {
00297         case T_LEG_PI :
00298           result = nullite_plm_t_leg_pi (j, nt, k, np) ;
00299           break ;  
00300         
00301         case T_LEG_II :
00302           result = nullite_plm_t_leg_ii (j, nt, k, np) ;
00303           break ;  
00304         
00305         case T_LEG_MI :
00306           result = nullite_plm_t_leg_mi (j, nt, k, np) ;
00307           break ;  
00308         
00309         default :
00310             cout << "nullite_plm : cas inconnu ..." << endl ;
00311             abort() ;
00312         }
00313         break ;
00314     
00315     default :
00316         cout << "nullite_plm : cas inconnu ..." << endl ;
00317         abort() ;
00318     }
00319     
00320     return result ;
00321 }

Generated on Tue Feb 7 01:35:18 2012 for LORENE by  doxygen 1.4.6