proto.h

00001 /*
00002  *  Prototypes of non class-member functions
00003  *
00004  */
00005 
00006 /*
00007  *   Copyright (c) 1999-2000 Jean-Alain Marck
00008  *   Copyright (c) 1999-2001 Philippe Grandclement
00009  *   Copyright (c) 1999-2002 Eric Gourgoulhon
00010  *   Copyright (c) 2002-2003 Jerome Novak
00011  *
00012  *   This file is part of LORENE.
00013  *
00014  *   LORENE is free software; you can redistribute it and/or modify
00015  *   it under the terms of the GNU General Public License as published by
00016  *   the Free Software Foundation; either version 2 of the License, or
00017  *   (at your option) any later version.
00018  *
00019  *   LORENE is distributed in the hope that it will be useful,
00020  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00021  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00022  *   GNU General Public License for more details.
00023  *
00024  *   You should have received a copy of the GNU General Public License
00025  *   along with LORENE; if not, write to the Free Software
00026  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00027  *
00028  */
00029 
00030 
00031 #ifndef __PROTO_H_
00032 #define __PROTO_H_
00033 
00034 
00035 /*
00036  * $Id: proto.h,v 1.47 2010/10/22 08:08:40 j_novak Exp $
00037  * $Log: proto.h,v $
00038  * Revision 1.47  2010/10/22 08:08:40  j_novak
00039  * Removal of the method Star_rot_dirac::lambda_grv2() and call to the C++ version of integrale2d.
00040  *
00041  * Revision 1.46  2010/01/20 14:53:50  n_vasset
00042  * Adding spectral cutoff functions for use in elliptic tensor equations.
00043  *
00044  * Revision 1.45  2009/10/23 12:55:46  j_novak
00045  * New base T_LEG_MI
00046  *
00047  * Revision 1.44  2009/10/13 13:50:39  j_novak
00048  * New base T_LEG_MP.
00049  *
00050  * Revision 1.43  2009/08/31 19:39:07  n_vasset
00051  * removal of obsolete function get_kerr()
00052  *
00053  * Revision 1.42  2008/11/27 12:12:38  j_novak
00054  * New function to initialize parameters for wave equation.
00055  *
00056  * Revision 1.41  2008/08/20 11:51:25  n_vasset
00057  * new functions to solve the Kerr problem, using degenerate elliptic operators
00058  *
00059  * Revision 1.40  2008/08/19 06:41:59  j_novak
00060  * Minor modifications to avoid warnings with gcc 4.3. Most of them concern
00061  * cast-type operations, and constant strings that must be defined as const char*
00062  *
00063  * Revision 1.39  2008/07/18 12:28:41  j_novak
00064  * Corrected some mistakes.
00065  *
00066  * Revision 1.38  2008/07/18 09:17:35  j_novak
00067  * New function tilde_laplacian().
00068  *
00069  * Revision 1.37  2008/07/11 13:20:08  j_novak
00070  * Miscellaneous functions for the system wave equation.
00071  *
00072  * Revision 1.36  2008/07/10 10:34:35  p_grandclement
00073  * forgot this one
00074  *
00075  * Revision 1.35  2007/12/11 15:28:05  jl_cornou
00076  * Jacobi(0,2) polynomials partially implemented
00077  *
00078  * Revision 1.34  2007/05/06 10:48:08  p_grandclement
00079  * Modification of a few operators for the vorton project
00080  *
00081  * Revision 1.33  2007/01/23 17:08:43  j_novak
00082  * New function pois_vect_r0.C to solve the l=0 part of the vector Poisson
00083  * equation, which involves only the r-component.
00084  *
00085  * Revision 1.32  2006/04/27 09:12:29  p_grandclement
00086  * First try at irrotational black holes
00087  *
00088  * Revision 1.31  2006/04/10 15:19:18  j_novak
00089  * New definition of 1D operators dsdx and sx in the nucleus (bases R_CHEBP and
00090  * R_CHEBI).
00091  *
00092  * Revision 1.30  2005/11/30 11:09:03  p_grandclement
00093  * Changes for the Bin_ns_bh project
00094  *
00095  * Revision 1.29  2005/08/26 14:02:38  p_grandclement
00096  * Modification of the elliptic solver that matches with an oscillatory exterior solution
00097  * small correction in Poisson tau also...
00098  *
00099  * Revision 1.28  2005/06/09 07:56:25  f_limousin
00100  * Implement a new function sol_elliptic_boundary() and
00101  * Vector::poisson_boundary(...) which solve the vectorial poisson
00102  * equation (method 6) with an inner boundary condition.
00103  *
00104  * Revision 1.27  2005/05/13 08:50:29  j_novak
00105  * Added the function int1d_chebi.
00106  *
00107  * Revision 1.26  2005/02/16 15:04:07  m_forot
00108  * Add int1D_cheb function
00109  *
00110  * Revision 1.25  2005/02/08 10:08:57  f_limousin
00111  * Add neumann_binaire(...), dirichlet_binaire(...) and
00112  * poisson_vect_binaire(...) with Scalars and Vectors in argument.
00113  *
00114  * Revision 1.24  2004/12/17 13:35:00  m_forot
00115  * Add the case T_LEG
00116  *
00117  * Revision 1.23  2004/11/23 15:05:40  m_forot
00118  * Added prototypes for all new functions in the case there is no
00119  * symmetry in theta.
00120  *
00121  * Revision 1.22  2004/09/28 15:59:47  f_limousin
00122  * Add function poisson_vect_boundary which is the same as
00123  * poisson_vect_frontiere but for the new classes Tensor and Scalar.
00124  *
00125  * Revision 1.21  2004/08/24 09:14:40  p_grandclement
00126  * Addition of some new operators, like Poisson in 2d... It now requieres the
00127  * GSL library to work.
00128  *
00129  * Also, the way a variable change is stored by a Param_elliptic is changed and
00130  * no longer uses Change_var but rather 2 Scalars. The codes using that feature
00131  * will requiere some modification. (It should concern only the ones about monopoles)
00132  *
00133  * Revision 1.20  2004/06/22 08:49:57  p_grandclement
00134  * Addition of everything needed for using the logarithmic mapping
00135  *
00136  * Revision 1.19  2004/03/17 15:58:47  p_grandclement
00137  * Slight modification of sol_elliptic_no_zec
00138  *
00139  * Revision 1.18  2004/02/17 09:21:38  j_novak
00140  * New functions for calculating values of the derivatives of a function
00141  * using its Chebyshev coefficients.
00142  *
00143  * Revision 1.17  2004/02/11 09:47:44  p_grandclement
00144  * Addition of a new elliptic solver, matching with the homogeneous solution
00145  * at the outer shell and not solving in the external domain (more details
00146  * coming soon ; check your local Lorene dealer...)
00147  *
00148  * Revision 1.16  2004/02/09 08:55:30  j_novak
00149  * Corrected error in the arguments of _solp_r_chebu_cinq
00150  *
00151  * Revision 1.15  2004/02/06 10:53:51  j_novak
00152  * New dzpuis = 5 -> dzpuis = 3 case (not ready yet).
00153  *
00154  * Revision 1.14  2004/01/28 16:46:22  p_grandclement
00155  * Addition of the sol_elliptic_fixe_der_zero stuff
00156  *
00157  * Revision 1.13  2004/01/15 09:15:36  p_grandclement
00158  * Modification and addition of the Helmholtz operators
00159  *
00160  * Revision 1.12  2003/12/11 14:48:47  p_grandclement
00161  * Addition of ALL (and that is a lot !) the files needed for the general elliptic solver ... UNDER DEVELOPEMENT...
00162  *
00163  * Revision 1.11  2003/09/16 13:07:40  j_novak
00164  * New files for coefficient trnasformation to/from the T_LEG_II base.
00165  *
00166  * Revision 1.10  2003/09/16 08:53:05  j_novak
00167  * Addition of the T_LEG_II base (odd in theta, only for odd m) and the
00168  * transformation functions from and to T_SIN_P.
00169  *
00170  * Revision 1.9  2003/06/18 08:45:26  j_novak
00171  * In class Mg3d: added the member get_radial, returning only a radial grid
00172  * For dAlembert solver: the way the coefficients of the operator are defined has been changed.
00173  *
00174  * Revision 1.8  2003/02/13 16:40:24  p_grandclement
00175  * Addition of various things for the Bin_ns_bh project, non of them being
00176  * completely tested
00177  *
00178  * Revision 1.7  2002/11/12 17:45:19  j_novak
00179  * Added transformation function for T_COS basis.
00180  *
00181  * Revision 1.6  2002/09/09 13:00:39  e_gourgoulhon
00182  * Modification of declaration of Fortran 77 prototypes for
00183  * a better portability (in particular on IBM AIX systems):
00184  * All Fortran subroutine names are now written F77_* and are
00185  * defined in the new file C++/Include/proto_f77.h.
00186  *
00187  * Revision 1.5  2002/05/11 12:39:08  e_gourgoulhon
00188  * Added declaration of som_tet_cossin_si.
00189  *
00190  * Revision 1.4  2002/05/05 16:24:48  e_gourgoulhon
00191  * Added som_tet_cossin_sp
00192  *
00193  * Revision 1.3  2002/01/03 15:30:27  j_novak
00194  * Some comments modified.
00195  *
00196  * Revision 1.2  2002/01/02 14:07:56  j_novak
00197  * Dalembert equation is now solved in the shells. However, the number of
00198  * points in theta and phi must be the same in each domain. The solver is not
00199  * completely tested (beta version!).
00200  *
00201  * Revision 1.1.1.1  2001/11/20 15:19:27  e_gourgoulhon
00202  * LORENE
00203  *
00204  * Revision 2.69  2001/05/07  09:11:26  phil
00205  * *** empty log message ***
00206  *
00207  * Revision 2.68  2001/04/03  12:41:23  phil
00208  * modification de itemax dans separation
00209  *
00210  * Revision 2.67  2001/03/22  10:40:13  phil
00211  * modification prototypage se separation
00212  *
00213  * Revision 2.66  2001/03/02  10:21:26  phil
00214  * *** empty log message ***
00215  *
00216  * Revision 2.65  2001/03/02  10:18:47  phil
00217  * modif parametrage separation
00218  *
00219  * Revision 2.64  2001/02/28  11:23:30  phil
00220  * ajout separation
00221  *
00222  * Revision 2.63  2001/01/29  14:30:10  phil
00223  * ajout type rotation
00224  *
00225  * Revision 2.62  2000/12/13  15:42:14  phil
00226  * ajout des trucs relatifs a Lindquist
00227  *
00228  * Revision 2.61  2000/12/04  13:33:28  novak
00229  * *** empty log message ***
00230  *
00231  * Revision 2.60  2000/12/04 13:29:08  novak
00232  * Added prototypes for the dalembertian
00233  *
00234  * Revision 2.59  2000/10/19 10:07:49  phil
00235  * ajout de regle
00236  *
00237  * Revision 2.58  2000/10/19  09:35:44  phil
00238  * *** empty log message ***
00239  *
00240  * Revision 2.57  2000/10/04  14:40:34  eric
00241  * *** empty log message ***
00242  *
00243  * Revision 2.56  2000/09/29  14:02:06  eric
00244  * *** empty log message ***
00245  *
00246  * Revision 2.55  2000/09/28  10:01:36  eric
00247  * *** empty log message ***
00248  *
00249  * Revision 2.54  2000/09/08  16:26:26  eric
00250  * *** empty log message ***
00251  *
00252  * Revision 2.53  2000/09/08  16:07:43  eric
00253  * *** empty log message ***
00254  *
00255  * Revision 2.52  2000/09/07  15:07:40  eric
00256  * *** empty log message ***
00257  *
00258  * Revision 2.51  2000/09/06  13:59:53  eric
00259  * *** empty log message ***
00260  *
00261  * Revision 2.50  2000/06/06  12:42:55  phil
00262  * ajout de Cmp division_xpun (const Cmp&,int)
00263  *
00264  * Revision 2.49  2000/05/22  13:33:15  phil
00265  * ajout des trucs pour poisson avec dzpuis == 3
00266  *
00267  * Revision 2.48  2000/04/03  17:01:01  phil
00268  * ajout de sxpun_1d
00269  *
00270  * Revision 2.47  2000/03/16  16:28:30  phil
00271  * *** empty log message ***
00272  *
00273  * Revision 2.46  2000/03/09  13:52:55  phil
00274  * *** empty log message ***
00275  *
00276  * Revision 2.45  2000/03/09  13:42:34  phil
00277  * vire les trucs relatifs a Poisson compacts
00278  *
00279  * Revision 2.44  2000/03/06  10:27:07  eric
00280  * Ajout des protos som_*_symy et som_*_asymy.
00281  *
00282  * Revision 2.43  2000/01/20  14:07:59  phil
00283  * vire poisson_vect et xksk
00284  *
00285  * Revision 2.42  1999/12/15  09:41:52  eric
00286  * *** empty log message ***
00287  *
00288  *
00289  * $Header: /cvsroot/Lorene/C++/Include/proto.h,v 1.47 2010/10/22 08:08:40 j_novak Exp $
00290  *
00291  */
00292 
00293 class Param ;
00294 class Tbl ;
00295 class Mtbl ;
00296 class Mtbl_cf ;
00297 class Map_af ;
00298 class Matrice ;
00299 class Valeur ;
00300 class Base_val ;
00301 class Cmp ;
00302 class Tenseur ;
00303 class Scalar ;
00304 class Tensor ;
00305 class Sym_tensor ;
00306 class Vector ;
00307 class Param_elliptic ;
00308 
00309 
00310 // Routines calcul de coefficients
00311 // -------------------------------
00312 double* cheb_ini(const int) ;
00313 double* chebimp_ini(const int) ;
00314 void four1d(const int, double* ) ;
00315 void chebyf1d(const int, double* ) ; 
00316 void chebyr1d(const int, double* ) ;
00317 void cfpcossin(const int* ,const int* ,  double* ) ;
00318 void cfpcossini(const int* ,const int* ,  double* ) ;
00319 void cftcos(const int*, const int*, double*, const int*, double*) ;
00320 void cftsin(const int*, const int*, double*, const int*, double*) ;
00321 void cftcosp(const int*, const int*, double*, const int*, double*) ;
00322 void cftcosi(const int*, const int*, double*, const int*, double*) ;
00323 void cftsinp(const int*, const int*, double*, const int*, double*) ;
00324 void cftsini(const int*, const int*, double*, const int*, double*) ;
00325 void cftcossincp(const int*, const int*, double*, const int*, double*) ;
00326 void cftcossinsi(const int*, const int*, double*, const int*, double*) ;
00327 void cftcossinsp(const int*, const int*, double*, const int*, double*) ;
00328 void cftcossinci(const int*, const int*, double*, const int*, double*) ;
00329 void cftcossins(const int*, const int*, double*, const int*, double*) ;
00330 void cftcossinc(const int*, const int*, double*, const int*, double*) ;
00331 void cftleg(const int*, const int*, double*, const int*, double*) ;
00332 void cftlegmp(const int*, const int*, double*, const int*, double*) ;
00333 void cftlegmi(const int*, const int*, double*, const int*, double*) ;
00334 void cftlegp(const int*, const int*, double*, const int*, double*) ;
00335 void cftlegpp(const int*, const int*, double*, const int*, double*) ;
00336 void cftlegi(const int*, const int*, double*, const int*, double*) ;
00337 void cftlegip(const int*, const int*, double*, const int*, double*) ;
00338 void cftlegpi(const int*, const int*, double*, const int*, double*) ;
00339 void cftlegii(const int*, const int*, double*, const int*, double*) ;
00340 void cfrcheb(const int*, const int*, double*, const int*, double*) ;
00341 void cfrchebp(const int*, const int*, double*, const int*, double*) ;
00342 void cfrchebi(const int*, const int*, double*, const int*, double*) ;
00343 void cfrchebpimp(const int*, const int*, double*, const int*, double*) ;
00344 void cfrchebpimi(const int*, const int*, double*, const int*, double*) ;
00345 void cfrchebpip(const int*, const int*, double*, const int*, double*) ;
00346 void cfrchebpii(const int*, const int*, double*, const int*, double*) ;
00347 void cipcossin(const int* , const int* , const int* , double* , double* ) ;
00348 void cipcossini(const int* , const int* , const int* , double* , double* ) ;
00349 void citcos(const int*, const int*, double*, const int*, double*) ;
00350 void citcosp(const int*, const int*, double*, const int*, double*) ;
00351 void citcosi(const int*, const int*, double*, const int*, double*) ;
00352 void citsinp(const int*, const int*, double*, const int*, double*) ;
00353 void citsini(const int*, const int*, double*, const int*, double*) ;
00354 void citcossincp(const int*, const int*, double*, const int*, double*) ;
00355 void citcossinsi(const int*, const int*, double*, const int*, double*) ;
00356 void citcossinsp(const int*, const int*, double*, const int*, double*) ;
00357 void citcossinci(const int*, const int*, double*, const int*, double*) ;
00358 void citcossins(const int*, const int*, double*, const int*, double*) ;
00359 void citcossinc(const int*, const int*, double*, const int*, double*) ;
00360 void citleg(const int*, const int*, double*, const int*, double*) ;
00361 void citlegmp(const int*, const int*, double*, const int*, double*) ;
00362 void citlegmi(const int*, const int*, double*, const int*, double*) ;
00363 void citlegp(const int*, const int*, double*, const int*, double*) ;
00364 void citlegpp(const int*, const int*, double*, const int*, double*) ;
00365 void citlegi(const int*, const int*, double*, const int*, double*) ;
00366 void citlegip(const int*, const int*, double*, const int*, double*) ;
00367 void citlegpi(const int*, const int*, double*, const int*, double*) ;
00368 void citlegii(const int*, const int*, double*, const int*, double*) ;
00369 void circheb(const int*, const int*, double*, const int*, double*) ;
00370 void circhebp(const int*, const int*, double*, const int*, double*) ;
00371 void circhebi(const int*, const int*, double*, const int*, double*) ;
00372 void circhebpimp(const int*, const int*, double*, const int*, double*) ;
00373 void circhebpimi(const int*, const int*, double*, const int*, double*) ;
00374 void circhebpip(const int*, const int*, double*, const int*, double*) ;
00375 void circhebpii(const int*, const int*, double*, const int*, double*) ;
00376 double* legendre(int , int ) ;
00377 double* legendre_norm(int , int ) ;
00378 double* mat_cossincp_legp(int, int) ;   
00379 double* mat_cossinci_legi(int, int) ; 
00380 double* mat_cossinc_leg(int, int) ;   
00381 double* mat_cosp_legpp(int, int) ;   
00382 double* mat_cosi_legip(int, int) ;   
00383 double* mat_sini_legpi(int, int) ;   
00384 double* mat_sinp_legii(int, int) ;   
00385 double* mat_cos_legmp(int, int) ;   
00386 double* mat_sin_legmi(int, int) ;   
00387 double* mat_legp_cossincp(int,  int) ;
00388 double* mat_legi_cossinci(int,  int) ;
00389 double* mat_leg_cossinc(int,  int) ;
00390 double* mat_legpp_cosp(int, int) ;   
00391 double* mat_legip_cosi(int, int) ;   
00392 double* mat_legpi_sini(int, int) ;   
00393 double* mat_legii_sinp(int, int) ;   
00394 double* mat_legmp_cos(int, int) ;   
00395 double* mat_legmi_sin(int, int) ;   
00396 void chb_cossincp_legp(const int* , const double* , double* ) ;
00397 void chb_legp_cossincp(const int* , const double* , double* ) ;
00398 void chb_cossinc_leg(const int* , const double* , double* ) ;
00399 void chb_leg_cossinc(const int* , const double* , double* ) ;
00400 void chb_cosp_legpp(const int* , const double* , double* ) ;
00401 void chb_legpp_cosp(const int* , const double* , double* ) ;
00402 void chb_cosi_legip(const int* , const double* , double* ) ;
00403 void chb_legip_cosi(const int* , const double* , double* ) ;
00404 void chb_sini_legpi(const int* , const double* , double* ) ;
00405 void chb_legpi_sini(const int* , const double* , double* ) ;
00406 void chb_cossinci_legi(const int* , const double* , double* ) ;
00407 void chb_legi_cossinci(const int* , const double* , double* ) ;
00408 void chb_sinp_legii(const int* , const double* , double* ) ;
00409 void chb_legii_sinp(const int* , const double* , double* ) ;
00410 void chb_cos_legmp(const int* , const double* , double* ) ;
00411 void chb_legmp_cos(const int* , const double* , double* ) ;
00412 void chb_sin_legmi(const int* , const double* , double* ) ;
00413 void chb_legmi_sin(const int* , const double* , double* ) ;
00414 
00415 double int1d_chebp(int, const double* ) ;
00416 double int1d_chebi(int, const double* ) ;
00417 double int1d_cheb(int, const double* ) ;
00418 
00419 double* jacobi(int, double) ;
00420 double* pointsgausslobatto(int) ;
00421 Tbl jacobipointsgl(int) ;
00422 double* coeffjaco(int, double*) ;
00423 void cfrjaco02(const int*, const int*, double*, const int*, double*);
00424 
00425 // Routines calcul de coef inverse
00426 void cipcossin(const int* , const int* , const int* , double* , double* ) ;
00427 void citcosp(const int*, const int*, double*, const int*, double*) ;
00428 void citcosi(const int*, const int*, double*, const int*, double*) ;
00429 void citcos(const int*, const int*, double*, const int*, double*) ;
00430 void citsin(const int*, const int*, double*, const int*, double*) ;
00431 void citsinp(const int*, const int*, double*, const int*, double*) ;
00432 void citsini(const int*, const int*, double*, const int*, double*) ;
00433 void citcossincp(const int*, const int*, double*, const int*, double*) ;
00434 void citcossinsi(const int*, const int*, double*, const int*, double*) ;
00435 void citcossinsp(const int*, const int*, double*, const int*, double*) ;
00436 void citcossinci(const int*, const int*, double*, const int*, double*) ;
00437 void citcossins(const int*, const int*, double*, const int*, double*) ;
00438 void citcossinc(const int*, const int*, double*, const int*, double*) ;
00439 void citlegp(const int*, const int*, double*, const int*, double*) ;
00440 void citlegpp(const int*, const int*, double*, const int*, double*) ;
00441 void citlegi(const int*, const int*, double*, const int*, double*) ;
00442 void circheb(const int*, const int*, double*, const int*, double*) ;
00443 void circhebp(const int*, const int*, double*, const int*, double*) ;
00444 void circhebi(const int*, const int*, double*, const int*, double*) ;
00445 void circhebpimp(const int*, const int*, double*, const int*, double*) ;
00446 void circhebpimi(const int*, const int*, double*, const int*, double*) ;
00447 void cirjaco02(const int*, const int*, double* , const int*, double*) ;
00448 
00449 // Routines calculant la matrice du laplacien
00450 Matrice _laplacien_mat_pas_prevu(int, int, double, int) ;
00451 Matrice _laplacien_mat_r_chebp(int, int, double, int) ;
00452 Matrice _laplacien_mat_r_chebi(int, int, double, int) ;
00453 Matrice _laplacien_mat_r_chebu(int, int, double, int) ;
00454 Matrice _laplacien_mat_r_chebu_deux(int, int) ;
00455 Matrice _laplacien_mat_r_chebu_trois(int, int) ;
00456 Matrice _laplacien_mat_r_chebu_quatre(int, int) ;
00457 Matrice _laplacien_mat_r_chebu_cinq(int, int) ;
00458 Matrice _laplacien_mat_r_cheb(int, int, double, int) ;
00459 Matrice laplacien_mat(int , int , double , int, int ) ;
00460 
00461 //Routines de passage a bande versions Matrice et Tbl
00462 Matrice _cl_pas_prevu (const Matrice&, int, double, int) ;
00463 Matrice _cl_r_cheb (const Matrice&, int, double, int) ;
00464 Matrice _cl_r_chebi (const Matrice&, int, double, int) ;
00465 Matrice _cl_r_chebu (const Matrice&, int, double, int) ;
00466 Matrice _cl_r_chebu_cinq (const Matrice&, int) ;
00467 Matrice _cl_r_chebu_quatre (const Matrice&, int) ;
00468 Matrice _cl_r_chebu_trois (const Matrice&, int) ;
00469 Matrice _cl_r_chebu_deux (const Matrice&, int) ;
00470 Matrice _cl_r_chebp (const Matrice&, int, double, int) ;
00471 Matrice combinaison (const Matrice&, int, double, int, int) ;
00472 
00473 Tbl _cl_pas_prevu (const Tbl&, int) ;
00474 Tbl _cl_r_cheb (const Tbl&, int) ;
00475 Tbl _cl_r_chebi (const Tbl&, int) ;
00476 Tbl _cl_r_chebu (const Tbl&, int) ;
00477 Tbl _cl_r_chebu_deux (const Tbl&) ;
00478 Tbl _cl_r_chebu_trois (const Tbl&) ;
00479 Tbl _cl_r_chebu_quatre (const Tbl&) ;
00480 Tbl _cl_r_chebu_cinq (const Tbl&) ;
00481 Tbl _cl_r_chebp (const Tbl&, int) ;
00482 Tbl combinaison (const Tbl&, int, int) ;
00483 
00484 
00485 // Routines de preparation du laplacien inversible
00486 Matrice _prepa_nondege_pas_prevu(const Matrice &, int , double, int) ;
00487 Matrice _prepa_nondege_r_cheb (const Matrice&, int, double, int) ;
00488 Matrice _prepa_nondege_r_chebp (const Matrice&, int, double, int) ;
00489 Matrice _prepa_nondege_r_chebi (const Matrice&, int, double, int) ;
00490 Matrice _prepa_nondege_r_chebu (const Matrice&, int, double, int) ;
00491 Matrice _prepa_nondege_r_chebu_deux (const Matrice&, int) ;
00492 Matrice _prepa_nondege_r_chebu_trois (const Matrice&, int) ;
00493 Matrice _prepa_nondege_r_chebu_quatre (const Matrice&, int) ;
00494 Matrice _prepa_nondege_r_chebu_cinq (const Matrice&, int) ;
00495 Matrice prepa_nondege (const Matrice&, int, double, int, int) ;
00496 
00497 //Routines de calcul de la solution particuliere
00498 Tbl _solp_pas_prevu(const Matrice&, const Matrice&, double, double, const Tbl&, int) ;
00499 Tbl _solp_r_cheb (const Matrice&, const  Matrice&, double, double, const Tbl&, int) ;
00500 Tbl _solp_r_chebp (const Matrice&, const  Matrice&, double, double, const Tbl&, int) ;
00501 Tbl _solp_r_chebi (const Matrice&, const Matrice&, double, double, const Tbl&, int) ;
00502 Tbl _solp_r_chebu (const Matrice&, const Matrice&, double, double, const Tbl&, int) ;
00503 Tbl _solp_r_chebu_deux (const Matrice&, const Matrice&, const Tbl&) ;
00504 Tbl _solp_r_chebu_trois (const Matrice&, const Matrice&, double, const Tbl&) ;
00505 Tbl _solp_r_chebu_quatre (const Matrice&, const Matrice&, double, const Tbl&) ;
00506 Tbl _solp_r_chebu_cinq (const Matrice&, const Matrice&, const Tbl&) ;
00507 Tbl solp (const Matrice&, const Matrice&, double, double, const Tbl&, int, int) ;
00508 
00509 //Routines de calcul des solutions homogenes
00510 Tbl _solh_pas_prevu (int, int, double) ;
00511 Tbl _solh_r_cheb (int, int, double) ;
00512 Tbl _solh_r_chebp (int, int, double) ;
00513 Tbl _solh_r_chebi (int, int, double) ;
00514 Tbl _solh_r_chebu (int, int, double) ;
00515 Tbl solh (int, int, double, int) ;
00516 
00517 // Routines helmholtz minus :
00518 Matrice helmholtz_minus_mat(int , int, double , double , double, int ) ;
00519 Matrice cl_helmholtz_minus (const Matrice&, int) ;
00520 Tbl cl_helmholtz_minus (const Tbl&, int) ;
00521 Matrice prepa_helmholtz_minus_nondege (const Matrice&, int) ;
00522 Tbl solp_helmholtz_minus (const Matrice&, const Matrice&, const Tbl&, 
00523               double, double, int, int) ;
00524 Tbl solh_helmholtz_minus (int, int, double, double, double, int) ;
00525 
00526 // Routines helmholtz plus :
00527 Matrice helmholtz_plus_mat(int , int, double , double , double, int ) ;
00528 Matrice cl_helmholtz_plus (const Matrice&, int) ;
00529 Tbl cl_helmholtz_plus (const Tbl&, int) ;
00530 Matrice prepa_helmholtz_plus_nondege (const Matrice&, int) ;
00531 Tbl solp_helmholtz_plus (const Matrice&, const Matrice&, const Tbl&, 
00532               double, double, int) ;
00533 Tbl solh_helmholtz_plus (int, int, double, double, double, int) ;
00534 
00535 
00536 //Routines de calcul des valeurs limites 
00537 Tbl val_solh (int, double, double, int) ;
00538 Tbl val_solp (const Tbl&, double, int) ;
00539 
00540 double val1_dern_1d (int, const Tbl&, int) ;
00541 double valm1_dern_1d (int, const Tbl&, int) ;
00542 
00543 
00544 //Routines de derivations version 1d
00545 void _d2sdx2_1d_pas_prevu(int, double*, double* ) ;
00546 void _d2sdx2_1d_r_chebu(int, double*, double* ) ;
00547 void _d2sdx2_1d_r_cheb(int, double*, double* ) ;
00548 void _d2sdx2_1d_r_chebp(int, double*, double* ) ;
00549 void _d2sdx2_1d_r_chebi(int, double*, double * ) ;
00550 void d2sdx2_1d(int, double** , int) ;
00551 
00552 void _dsdx_1d_pas_prevu(int, double*, double* ) ;
00553 void _dsdx_1d_r_chebu(int, double*, double* ) ;
00554 void _dsdx_1d_r_chebp(int, double*, double* ) ;
00555 void _dsdx_1d_r_chebi(int, double*, double* ) ;
00556 void dsdx_1d(int, double** , int) ;
00557 
00558 void _multx_1d_pas_prevu(int, double*, double* ) ;
00559 void _multx_1d_r_cheb(int, double*, double* ) ;
00560 void multx_1d(int, double **, int) ;
00561 void multxpun_1d(int, double **, int) ;
00562 
00563 void _sx_1d_pas_prevu(int, double*, double* ) ;
00564 void _sx_1d_r_chebi(int, double*, double* ) ;
00565 void _sx_1d_r_chebp(int, double*, double* ) ;
00566 void sx_1d(int, double **, int) ;
00567 
00568 void _sx2_1d_pas_prevu(int, double*, double*) ;
00569 void _sx2_1d_identite(int, double*, double*) ;
00570 void _sx2_1d_r_chebp(int, double*, double*) ;
00571 void _sx2_1d_r_chebi(int, double*, double*) ;
00572 void _sxm12_1d_r_chebu(int, double *, double*) ;
00573 void sx2_1d(int, double**, int) ;
00574 
00575 void _sxdsdx_1d_pas_prevu(int, double*, double*) ;
00576 void _dsdx_1d_r_cheb(int, double*, double*) ;
00577 void _sxdsdx_1d_r_chebi(int, double*, double*) ;
00578 void _sxdsdx_1d_r_chebp(int, double*, double*) ;
00579 void sxdsdx_1d(int, double** , int) ;
00580 
00581 //Routines de derivations (pour sol_dalembert)
00582 void _dsdx_r_chebp(Tbl *, int &) ;
00583 void _dsdx_r_chebi(Tbl *, int &) ;
00584 
00585 // Resolution de l'equation de Poisson
00586 int nullite_plm_sym (int, int, int, int) ;
00587 int nullite_plm_nonsym (int, int, int, int) ;
00588 int nullite_plm_nonsym_anti (int, int, int, int) ;
00589 int nullite_plm (int, int, int, int, Base_val) ;
00590 
00591 void donne_lm_sym (int, int, int, int, int&, int&, int&) ;
00592 void donne_lm_nonsym (int, int, int, int, int&, int&, int&) ;
00593 void donne_lm_nonsym_anti (int, int, int, int, int&, int&, int&) ;
00594 void donne_lm (int, int, int, int, Base_val, int&, int&, int&) ;
00595 
00596 
00597 // Les sommations en r :
00598 void som_r_pas_prevu
00599     (double*, const int, const int, const int, const double, double*) ;
00600 void som_r_cheb
00601     (double*, const int, const int, const int, const double, double*) ;
00602 void som_r_chebi
00603     (double*, const int, const int, const int, const double, double*) ;    
00604 void som_r_chebp
00605     (double*, const int, const int, const int, const double, double*) ;
00606 void som_r_chebu
00607     (double*, const int, const int, const int, const double, double*) ; 
00608 void som_r_chebpim_p
00609     (double*, const int, const int, const int, const double, double*) ;
00610 void som_r_chebpim_i
00611     (double*, const int, const int, const int, const double, double*) ;
00612 void som_r_chebpi_p
00613     (double*, const int, const int, const int, const double, double*) ;
00614 void som_r_chebpi_i
00615     (double*, const int, const int, const int, const double, double*) ;
00616 void som_r_cheb_symy
00617     (double*, const int, const int, const int, const double, double*) ;
00618 void som_r_chebu_symy
00619     (double*, const int, const int, const int, const double, double*) ; 
00620 void som_r_chebpim_p_symy
00621     (double*, const int, const int, const int, const double, double*) ;
00622 void som_r_chebpim_i_symy
00623     (double*, const int, const int, const int, const double, double*) ;
00624 void som_r_cheb_asymy
00625     (double*, const int, const int, const int, const double, double*) ;
00626 void som_r_chebu_asymy
00627     (double*, const int, const int, const int, const double, double*) ; 
00628 void som_r_chebpim_p_asymy
00629     (double*, const int, const int, const int, const double, double*) ;
00630 void som_r_chebpim_i_asymy
00631     (double*, const int, const int, const int, const double, double*) ;
00632 void som_r_jaco02
00633     (double*, const int, const int, const int, const double, double*) ;
00634     
00635 // Les sommations en theta :
00636 void som_tet_pas_prevu
00637     (double*, const int, const int, const double, double*) ;
00638 void som_tet_cos
00639     (double*, const int, const int, const double, double* ) ;
00640 void som_tet_cos_p
00641     (double*, const int, const int, const double, double* ) ;
00642 void som_tet_cos_i
00643     (double*, const int, const int, const double, double* ) ;
00644 void som_tet_sin
00645     (double*, const int, const int, const double, double* ) ;
00646 void som_tet_sin_p
00647     (double*, const int, const int, const double, double* ) ;
00648 void som_tet_sin_i
00649     (double*, const int, const int, const double, double* ) ;
00650 void som_tet_cossin_cp
00651     (double*, const int, const int, const double, double* ) ;
00652 void som_tet_cossin_ci
00653     (double*, const int, const int, const double, double* ) ;
00654 void som_tet_cossin_c
00655     (double*, const int, const int, const double, double* ) ;
00656 void som_tet_cossin_s
00657     (double*, const int, const int, const double, double* ) ;
00658 void som_tet_cossin_sp
00659     (double*, const int, const int, const double, double* ) ;
00660 void som_tet_cossin_si
00661     (double*, const int, const int, const double, double* ) ;
00662 void som_tet_cossin_cp_symy
00663     (double*, const int, const int, const double, double* ) ;
00664 void som_tet_cossin_ci_symy
00665     (double*, const int, const int, const double, double* ) ;
00666 void som_tet_cossin_cp_asymy
00667     (double*, const int, const int, const double, double* ) ;
00668 void som_tet_cossin_ci_asymy
00669     (double*, const int, const int, const double, double* ) ;
00670 
00671 // Les sommations en phi : 
00672 void som_phi_pas_prevu
00673     (double*, const int, const double, double* ) ;
00674 void som_phi_cossin
00675     (double*, const int, const double, double* ) ;
00676 void som_phi_cossin_p
00677     (double*, const int, const double, double* ) ;
00678 void som_phi_cossin_i
00679     (double*, const int, const double, double* ) ;
00680 void som_phi_cossin_symy
00681     (double*, const int, const double, double* ) ;
00682 void som_phi_cossin_asymy
00683     (double*, const int, const double, double* ) ;
00684 
00685 // les divisions et multiplications par x-1 :
00686 void sxm1_1d_cheb(int, double*) ;
00687 void mult_xm1_1d_cheb(int, const double*, double*) ;
00688 void mult2_xm1_1d_cheb(int, const double*, double*) ;
00689 
00690 // x * dsdx ...
00691 void _xdsdx_1d_pas_prevu (int, double*, double*) ;
00692 void _xdsdx_1d_r_cheb (int, double*, double*) ;
00693 void _xdsdx_1d_r_chebp (int, double*, double*) ;
00694 void _xdsdx_1d_r_chebi (int, double*, double*) ;
00695 void xdsdx_1d(int, double**, int) ;
00696 
00697 // Multiplication par x^2
00698 void multx2_1d(int, double **, int) ;
00699 void _multx2_1d_r_cheb(int, double* , double *);
00700 void _multx2_1d_r_chebp(int, double* , double *);
00701 void _multx2_1d_r_chebi(int, double* , double *);
00702 void _multx2_1d_pas_prevu(int, double* , double *);
00703 
00704 // division par (x+1)
00705 void sxpun_1d(int, double **, int)  ;
00706 void _sxpun_1d_r_cheb(int, double* , double *);
00707 void _sxpun_1d_pas_prevu(int, double* , double *);
00708 Cmp division_xpun (const Cmp&, int) ;
00709 
00710 // Fonctions liees a la resolution des l'equation des ondes
00711 void get_operateur_dal(const Param&, const int&, const int&, 
00712                int&, Matrice& );
00713 Tbl dal_inverse(const int&, const int&, const Matrice&, const Tbl&, 
00714         const bool) ;
00715 Mtbl_cf sol_dalembert(Param&, const Map_af&, const Mtbl_cf&) ;
00716 
00717 void runge_kutta3_wave_sys(double, const Scalar&, const Scalar&, Scalar& , Scalar&, int dl=0 ) ;
00718 void evolve_outgoing_BC(double, int, const Scalar&, Scalar&, Tbl&, Tbl&, Tbl&, int dl=0) ;
00719 void tilde_laplacian(const Scalar& B_in, Scalar& tilde_lap, int dl=-1) ;
00720 void initialize_outgoing_BC(int, const Scalar& , const Scalar& , Tbl&) ;
00721 
00722 // Fonctions liees aux operateurs elliptiques degeneres: obtention d'espaces-temps de type Kerr
00723 void tensorelliptic ( Scalar source, Scalar& resu, double fitd1, double fit2d1, double fit0d2 = 0., double fit1d2 = 0., double fit0d3 = 0., double fit1d3 = 0.);
00724  void tensorellipticBt ( Scalar source, Scalar& resu, double fitd1, double fit2d1, double fit0d2 = 0., double fit1d2 = 0., double fit0d3 = 0., double fit1d3 = 0.);
00725 void tensorellipticCt ( Scalar source, Scalar& resu, double fitd1, double fit2d1, double fit0d2, double fit1d2, double fit0d3, double fit1d3);
00726 
00727  Sym_tensor secmembre_kerr ( const Sym_tensor& hij, const Sym_tensor& aa,const Scalar& nn,const Scalar& ppsi,const Vector& bb);
00728 
00729  Sym_tensor boundfree_tensBC( Sym_tensor source, Vector Beta, Scalar Psi, Scalar Nn, Sym_tensor hij_guess, double precision , int loopmax = 250) ;
00730 
00731 // Fonctions diverses : 
00732 void c_est_pas_fait(char * ) ;
00733 
00734 
00735 // Trucs utilises pour poisson_compact :
00736 Matrice lap_cpt_mat(int, int, int) ;
00737 Matrice xdsdx_mat(int, int, int) ;
00738 Matrice combinaison_cpt (const Matrice &, int, int) ;
00739 Tbl combinaison_cpt (const Tbl &, int) ;
00740 
00741 // Trucs binaires :
00742 void dirichlet_binaire (const Cmp& source_un, const Cmp& source_deux, 
00743             const Valeur& boundary_un, const Valeur& boundary_deux,
00744                 Cmp& sol_un, Cmp& sol_deux, int num_front, 
00745                 double precision) ;
00746 void dirichlet_binaire (const Cmp& source_un, const Cmp& source_deux, 
00747             double bound_un, double bound_deux, 
00748                 Cmp& sol_un, Cmp& sol_deux, int num_front, 
00749                 double precision) ;
00750 void dirichlet_binaire (const Scalar& source_un, const Scalar& source_deux, 
00751             const Valeur& boundary_un, const Valeur& boundary_deux,
00752             Scalar& sol_un, Scalar& sol_deux, int num_front, 
00753             double precision) ;
00754 
00755 void neumann_binaire (const Cmp& source_un, const Cmp& source_deux, 
00756               const Valeur& boundary_un, const Valeur& boundary_deux, 
00757               Cmp& sol_un, Cmp& sol_deux, int num_front, 
00758               double precision) ;
00759 void neumann_binaire (const Cmp& source_un, const Cmp& source_deux, 
00760               double bound_un, double bound_deux, 
00761               Cmp& sol_un, Cmp& sol_deux, int num_front, 
00762               double precision) ;
00763 void neumann_binaire (const Scalar& source_un, const Scalar& source_deux, 
00764               const Valeur& boundary_un, const Valeur& boundary_deux,
00765               Scalar& sol_un, Scalar& sol_deux, int num_front, 
00766               double precision) ;
00767 
00768 void poisson_vect_frontiere (double lambda, const Tenseur& source, Tenseur& shift, 
00769         const Valeur& lim_x, const Valeur& lim_y, const Valeur& lim_z, 
00770         int num_front, double precision, int itermax) ;
00771 void poisson_vect_boundary (double lambda, const Vector& source, Vector& shift,
00772         const Valeur& lim_x, const Valeur& lim_y, const Valeur& lim_z, 
00773         int num_front, double precision, int itermax) ;
00774 
00775 void poisson_vect_binaire ( double lambda, 
00776         const Tenseur& source_un, const Tenseur& source_deux, 
00777         const Valeur& bound_x_un, const Valeur& bound_y_un, 
00778         const Valeur& bound_z_un, const Valeur& bound_x_deux, 
00779         const Valeur& bound_y_deux, const Valeur& bound_z_deux, 
00780         Tenseur& sol_un, Tenseur& sol_deux, int num_front, double precision) ;
00781 void poisson_vect_binaire ( double lambda, 
00782         const Vector& source_un, const Vector& source_deux, 
00783         const Valeur& bound_x_un, const Valeur& bound_y_un, 
00784         const Valeur& bound_z_un, const Valeur& bound_x_deux, 
00785         const Valeur& bound_y_deux, const Valeur& bound_z_deux, 
00786         Vector& sol_un, Vector& sol_deux, int num_front, double precision) ;
00787 
00788 // Elliptic solvers :
00789 Mtbl_cf elliptic_solver  (const Param_elliptic&, const Mtbl_cf&) ;
00790 
00791 Mtbl_cf elliptic_solver_boundary  (const Param_elliptic& ope_var, const Mtbl_cf& source, const Mtbl_cf& bound, double fact_dir, double fact_neu ) ;
00792 
00793 Mtbl_cf elliptic_solver_no_zec  (const Param_elliptic&, const Mtbl_cf&, 
00794                  double val) ;
00795 Mtbl_cf elliptic_solver_only_zec  (const Param_elliptic&, const Mtbl_cf&, 
00796                  double val) ;
00797 Mtbl_cf elliptic_solver_sin_zec  (const Param_elliptic&, const Mtbl_cf&, double*, double*) ;
00798 Mtbl_cf elliptic_solver_fixe_der_zero  (double, 
00799                         const Param_elliptic&, 
00800                         const Mtbl_cf&) ;
00801 
00802 // Integrale 2D pour les etoiles en rotation
00803 double integrale2d(const Scalar&) ;
00804 
00805 // Solution de la composante r de Poisson vectoriel, pour l=0 uniquement
00806 Scalar pois_vect_r0(const Scalar& ) ; 
00807 
00808 // Regularisation du shift :
00809 double regle (Tenseur& shift_auto, const Tenseur& shift_comp, double omega, double) ;
00810 
00811 // Trucs pour la solution de Misner-Lindquist
00812 double serie_lindquist_plus (double rayon, double distance, double xa, double ya, 
00813     double za, double precision, double itemax) ;
00814 
00815 double serie_lindquist_moins (double rayon, double distance, double xa, double ya, 
00816     double za, double precision, double itemax) ;
00817 
00818 double adm_serie (double rayon, double distance, double precision) ;
00819 
00820 double bare_serie (double rayon, double distance, double precision) ;
00821 
00822 void set_lindquist (Cmp& psi_un, Cmp& psi_deux, double rayon, double precision) ;
00823 
00824 void separation (const Cmp& c1, const Cmp& c2, Cmp& res1, Cmp& res2, int decrois, 
00825     int puiss, int lmax, double precision, const double relax = 0.5, const int itemax = 100, const int flag = 1) ;
00826 
00827 // Spectral cutoff used in tensor elliptic solvers, and solving for stationary black hole spacetimes
00828  
00829 void coupe_l_tous( Sym_tensor& hij,Sym_tensor& aa, Scalar& nn,Scalar& ppsi, Vector& bb, int ntt, int cutoff);
00830 void tensor_coupe_l( Sym_tensor& ten, int ntt, int cutoff);
00831 
00832 
00833 #endif

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