citlegii.C

00001 /*
00002  *   Copyright (c) 2003 Jerome Novak
00003  *
00004  *   This file is part of LORENE.
00005  *
00006  *   LORENE is free software; you can redistribute it and/or modify
00007  *   it under the terms of the GNU General Public License as published by
00008  *   the Free Software Foundation; either version 2 of the License, or
00009  *   (at your option) any later version.
00010  *
00011  *   LORENE is distributed in the hope that it will be useful,
00012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *   GNU General Public License for more details.
00015  *
00016  *   You should have received a copy of the GNU General Public License
00017  *   along with LORENE; if not, write to the Free Software
00018  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  *
00020  */
00021 
00022 
00023 char citlegii_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/citlegii.C,v 1.1 2003/09/16 13:07:41 j_novak Exp $" ;
00024 
00025 /*
00026  * Transformation inverse fonctions de Legendre associees sur le deuxieme indice
00027  *  (theta) d'un tableau 3-D representant une fonction symetrique par 
00028  *  rapport au plan z=0 et antisymetrique par le retournement 
00029  *  (x, y, z) --> (-x, -y, z).
00030  *
00031  * Entree:
00032  * -------
00033  *   int* deg   : tableau du nombre effectif de degres de liberte dans chacune 
00034  *        des 3 dimensions: le nombre de points de collocation
00035  *        en theta est  nt = deg[1] et doit etre de la forme
00036  *          nt = 2^p 3^q 5^r + 1 
00037  *   int* dimc  : tableau du nombre d'elements de cc dans chacune des trois 
00038  *            dimensions.
00039  *        On doit avoir  dimc[1] >= deg[1] = nt. 
00040  *
00041  *   double* cf :  tableau des coefficients a_j du develop. en fonctions de
00042  *          Legendre associees P_l^m (l pair, m impair)
00043  *
00044  *          f(theta) = 
00045  *              som_{l=(m-1)/2}^{nt-2} a_j P_{2j}^m( cos(theta) )
00046  *
00047  *          avec m impair.        
00048  *
00049  *          P_l^m(x) represente la fonction de Legendre associee
00050  *             de degre l et d'ordre m normalisee de facon a ce que
00051  *
00052  *          int_0^pi [ P_l^m(cos(theta)) ]^2  sin(theta) dtheta = 1
00053  *
00054  *          L'espace memoire correspondant au pointeur cfo doit etre 
00055  *              nr*nt*(np+2) et doit avoir ete alloue avant 
00056  *          l'appel a la routine.    
00057  *          Le coefficient a_j (0 <= j <= nt-1) est stoke dans le 
00058  *          tableau cfo comme suit
00059  *                a_j = cfo[ nr*nt* k + i + nr* j ]
00060  *          ou k et i sont les indices correspondant a phi et r 
00061  *          respectivement: m = 2( k/2 ).
00062  *          NB: pour j<(m+1)/2,  a_j = 0
00063  *
00064  *
00065  *   int* dimf  : tableau du nombre d'elements de ff dans chacune des trois 
00066  *            dimensions.
00067  *        On doit avoir  dimf[1] >= deg[1] = nt. 
00068  *
00069  * Sortie:
00070  * -------
00071  *   double* ff : tableau des valeurs de la fonction aux nt points de
00072  *                        de collocation
00073  *
00074  *            theta_l =  pi/2 l/(nt-1)       0 <= l <= nt-1 
00075  *
00076  *            L'espace memoire correspondant a ce
00077  *                        pointeur doit etre dimf[0]*dimf[1]*dimf[2] et doit 
00078  *            avoir ete alloue avant l'appel a la routine.   
00079  *            Les valeurs de la fonction sont stokees
00080  *            dans le tableau ff comme suit
00081  *          f( theta_l ) = ff[ dimf[1]*dimf[2] * k + i + dimf[2] * l ]
00082  *           ou k et i sont les indices correspondant a
00083  *           phi et r respectivement.
00084  *
00085  * NB: Si le pointeur cf est egal a ff, la routine ne travaille que sur un 
00086  *     seul tableau, qui constitue une entree/sortie.
00087  *
00088  */
00089 
00090 /*
00091  * $Id: citlegii.C,v 1.1 2003/09/16 13:07:41 j_novak Exp $
00092  * $Log: citlegii.C,v $
00093  * Revision 1.1  2003/09/16 13:07:41  j_novak
00094  * New files for coefficient trnasformation to/from the T_LEG_II base.
00095  *
00096  *
00097  * $Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/citlegii.C,v 1.1 2003/09/16 13:07:41 j_novak Exp $
00098  *
00099  */
00100 
00101 // headers du C
00102 #include <assert.h>
00103 
00104 // headers bien de chez nous
00105 #include "proto.h"
00106 //*****************************************************************************
00107 
00108 void citlegii(const int* deg, const int* dimc, double* cf, const int* dimf,
00109            double* ff)
00110 {
00111 
00112     // Limitations de la routine:
00113     assert(dimc[0]==deg[0]+2) ;
00114     assert(dimc[1]==deg[1]) ;
00115     assert(dimc[2]==deg[2]) ;
00116 
00117 
00118     // Tableau de travail :
00119     int taille = dimc[0]*dimc[1]*dimc[2] ;
00120     double* cf_cs =  new double[taille] ;   
00121 
00122 //------------------------------------------------
00123 // 1/ Transformation Legendre ---> sin( 2j theta)
00124 //------------------------------------------------
00125 
00126     chb_legii_sinp(deg , cf, cf_cs) ;  
00127 
00128 //--------------------------------------------------------------
00129 // 2/ Transformation sin( (2j+1) theta) ---> esp. des configurations
00130 //--------------------------------------------------------------
00131 
00132     citsinp(deg, dimc, cf_cs, dimf, ff) ;
00133 
00134     // Menage
00135     delete [] cf_cs ; 
00136     
00137 }

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