map.h

00001 /*
00002  *  Definition of Lorene classes Map
00003  *               Map_radial
00004  *               Map_af
00005  *               Map_et
00006  *                               Map_log
00007  *
00008  */
00009 
00010 /*
00011  *   Copyright (c) 1999-2000 Jean-Alain Marck
00012  *   Copyright (c) 1999-2003 Eric Gourgoulhon
00013  *   Copyright (c) 1999-2001 Philippe Grandclement
00014  *   Copyright (c) 2000-2001 Jerome Novak
00015  *   Copyright (c) 2000-2001 Keisuke Taniguchi
00016  *
00017  *   This file is part of LORENE.
00018  *
00019  *   LORENE is free software; you can redistribute it and/or modify
00020  *   it under the terms of the GNU General Public License as published by
00021  *   the Free Software Foundation; either version 2 of the License, or
00022  *   (at your option) any later version.
00023  *
00024  *   LORENE is distributed in the hope that it will be useful,
00025  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00026  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00027  *   GNU General Public License for more details.
00028  *
00029  *   You should have received a copy of the GNU General Public License
00030  *   along with LORENE; if not, write to the Free Software
00031  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00032  *
00033  */
00034 
00035 
00036 #ifndef __MAP_H_ 
00037 #define __MAP_H_ 
00038 
00039 /*
00040  * $Id: map.h,v 1.56 2012/01/24 14:58:54 j_novak Exp $
00041  * $Log: map.h,v $
00042  * Revision 1.56  2012/01/24 14:58:54  j_novak
00043  * Removed functions XXX_fait_xi()
00044  *
00045  * Revision 1.55  2012/01/17 15:34:20  j_penner
00046  * *** empty log message ***
00047  *
00048  * Revision 1.54  2012/01/17 10:20:07  j_penner
00049  * added a member cxi that allows for direct access to the computational coordinates in each domain
00050  *
00051  * Revision 1.53  2008/09/29 13:23:51  j_novak
00052  * Implementation of the angular mapping associated with an affine
00053  * mapping. Things must be improved to take into account the domain index.
00054  *
00055  * Revision 1.52  2007/10/16 21:52:10  e_gourgoulhon
00056  * Added method poisson_compact for multi-domains.
00057  *
00058  * Revision 1.51  2007/05/15 12:44:18  p_grandclement
00059  * Scalar version of reevaluate
00060  *
00061  * Revision 1.50  2007/05/06 10:48:08  p_grandclement
00062  * Modification of a few operators for the vorton project
00063  *
00064  * Revision 1.49  2007/01/16 15:05:59  n_vasset
00065  * New constructor (taking a Scalar in mono-domain angular grid for
00066  * boundary) for function sol_elliptic_boundary
00067  *
00068  * Revision 1.48  2006/08/31 12:10:51  j_novak
00069  * More comments for Map_af::avance_dalembert().
00070  *
00071  * Revision 1.47  2006/05/26 09:00:09  j_novak
00072  * New members for multiplication or division by cos(theta).
00073  *
00074  * Revision 1.46  2006/04/25 07:21:54  p_grandclement
00075  * Various changes for the NS_BH project
00076  *
00077  * Revision 1.45  2005/11/30 11:09:03  p_grandclement
00078  * Changes for the Bin_ns_bh project
00079  *
00080  * Revision 1.44  2005/11/24 09:25:06  j_novak
00081  * Added the Scalar version for the Laplacian
00082  *
00083  * Revision 1.43  2005/09/15 15:51:25  j_novak
00084  * The "rotation" (change of triad) methods take now Scalars as default
00085  * arguments.
00086  *
00087  * Revision 1.42  2005/08/26 14:02:38  p_grandclement
00088  * Modification of the elliptic solver that matches with an oscillatory exterior solution
00089  * small correction in Poisson tau also...
00090  *
00091  * Revision 1.41  2005/08/25 12:14:07  p_grandclement
00092  * Addition of a new method to solve the scalar Poisson equation, based on a multi-domain Tau-method
00093  *
00094  * Revision 1.40  2005/06/09 07:56:24  f_limousin
00095  * Implement a new function sol_elliptic_boundary() and
00096  * Vector::poisson_boundary(...) which solve the vectorial poisson
00097  * equation (method 6) with an inner boundary condition.
00098  *
00099  * Revision 1.39  2005/04/04 21:30:41  e_gourgoulhon
00100  *  Added argument lambda to method poisson_angu
00101  *  to treat the generalized angular Poisson equation:
00102  *     Lap_ang u + lambda u = source.
00103  *
00104  * Revision 1.38  2004/12/29 16:37:22  k_taniguchi
00105  * Addition of some functions with the multipole falloff condition.
00106  *
00107  * Revision 1.37  2004/12/02 09:33:04  p_grandclement
00108  * *** empty log message ***
00109  *
00110  * Revision 1.36  2004/11/30 20:42:05  k_taniguchi
00111  * Addition of some functions with the falloff condition and a method
00112  * to resize the external shell.
00113  *
00114  * Revision 1.35  2004/11/23 12:39:12  f_limousin
00115  * Intoduce function poisson_dir_neu(...) to solve a scalar poisson
00116  * equation with a mixed boundary condition (Dirichlet + Neumann).
00117  *
00118  * Revision 1.34  2004/10/11 15:08:59  j_novak
00119  * The radial manipulation functions take Scalar as arguments, instead of Cmp.
00120  * Added a conversion operator from Scalar to Cmp.
00121  * The Cmp radial manipulation function make conversion to Scalar, call to the
00122  * Map_radial version with a Scalar argument and back.
00123  *
00124  * Revision 1.33  2004/10/08 13:34:35  j_novak
00125  * Scalar::div_r() does not need to pass through Cmp version anymore.
00126  *
00127  * Revision 1.32  2004/08/24 09:14:40  p_grandclement
00128  * Addition of some new operators, like Poisson in 2d... It now requieres the
00129  * GSL library to work.
00130  *
00131  * Also, the way a variable change is stored by a Param_elliptic is changed and
00132  * no longer uses Change_var but rather 2 Scalars. The codes using that feature
00133  * will requiere some modification. (It should concern only the ones about monopoles)
00134  *
00135  * Revision 1.31  2004/07/27 08:24:26  j_novak
00136  * Modif. comments
00137  *
00138  * Revision 1.30  2004/07/26 16:02:21  j_novak
00139  * Added a flag to specify whether the primitive should be zero either at r=0
00140  * or at r going to infinity.
00141  *
00142  * Revision 1.29  2004/06/22 08:49:57  p_grandclement
00143  * Addition of everything needed for using the logarithmic mapping
00144  *
00145  * Revision 1.28  2004/06/14 15:23:53  e_gourgoulhon
00146  * Added virtual function primr for computation of radial primitives.
00147  *
00148  * Revision 1.27  2004/03/31 11:22:23  f_limousin
00149  * Methods Map_et::poisson_interne and Map_af::poisson_interne have been
00150  * implemented to solve the continuity equation for strange stars.
00151  *
00152  * Revision 1.26  2004/03/22 13:12:41  j_novak
00153  * Modification of comments to use doxygen instead of doc++
00154  *
00155  * Revision 1.24  2004/03/01 09:57:02  j_novak
00156  * the wave equation is solved with Scalars. It now accepts a grid with a
00157  * compactified external domain, which the solver ignores and where it copies
00158  * the values of the field from one time-step to the next.
00159  *
00160  * Revision 1.23  2004/02/11 09:47:44  p_grandclement
00161  * Addition of a new elliptic solver, matching with the homogeneous solution
00162  * at the outer shell and not solving in the external domain (more details
00163  * coming soon ; check your local Lorene dealer...)
00164  *
00165  * Revision 1.22  2004/01/29 08:50:01  p_grandclement
00166  * Modification of Map::operator==(const Map&) and addition of the surface
00167  * integrales using Scalar.
00168  *
00169  * Revision 1.21  2004/01/28 16:46:22  p_grandclement
00170  * Addition of the sol_elliptic_fixe_der_zero stuff
00171  *
00172  * Revision 1.20  2004/01/28 10:35:52  j_novak
00173  * Added new methods mult_r() for Scalars. These do not change the dzpuis flag.
00174  *
00175  * Revision 1.19  2004/01/27 09:33:46  j_novak
00176  * New method Map_radial::div_r_zec
00177  *
00178  * Revision 1.18  2004/01/26 16:16:15  j_novak
00179  * Methods of gradient for Scalar s. The input can have any dzpuis.
00180  *
00181  * Revision 1.17  2004/01/19 21:38:21  e_gourgoulhon
00182  * Corrected sign error in comments of Map_radial::dxdr.
00183  *
00184  * Revision 1.16  2003/12/30 22:52:47  e_gourgoulhon
00185  * Class Map: added methods flat_met_spher() and flat_met_cart() to get
00186  * flat metric associated with the coordinates described by the mapping.
00187  *
00188  * Revision 1.15  2003/12/11 14:48:47  p_grandclement
00189  * Addition of ALL (and that is a lot !) the files needed for the general elliptic solver ... UNDER DEVELOPEMENT...
00190  *
00191  * Revision 1.14  2003/11/06 14:43:37  e_gourgoulhon
00192  * Gave a name to const arguments in certain method prototypes (e.g.
00193  * constructors) to correct a bug of DOC++.
00194  *
00195  * Revision 1.13  2003/11/04 22:54:49  e_gourgoulhon
00196  * Added new virtual methods mult_cost, mult_sint and div_sint.
00197  *
00198  * Revision 1.12  2003/10/16 08:49:21  j_novak
00199  * Added a flag to decide wether the output is in the Ylm or in the standard base.
00200  *
00201  * Revision 1.11  2003/10/15 21:08:22  e_gourgoulhon
00202  * Added method poisson_angu.
00203  *
00204  * Revision 1.10  2003/10/15 16:03:35  j_novak
00205  * Added the angular Laplace operator for Scalar.
00206  *
00207  * Revision 1.9  2003/10/15 10:27:33  e_gourgoulhon
00208  * Classes Map, Map_af and Map_et: added new methods dsdt, stdsdp and div_tant.
00209  * Class Map_radial: added new Coord's : drdt and stdrdp.
00210  *
00211  * Revision 1.8  2003/06/20 14:14:53  f_limousin
00212  * Add the operator== to compare two Cmp.
00213  *
00214  * Revision 1.7  2003/06/20 09:27:09  j_novak
00215  * Modif commentaires.
00216  *
00217  * Revision 1.6  2002/10/16 14:36:29  j_novak
00218  * Reorganization of #include instructions of standard C++, in order to
00219  * use experimental version 3 of gcc.
00220  *
00221  * Revision 1.5  2002/09/13 09:17:33  j_novak
00222  * Modif. commentaires
00223  *
00224  * Revision 1.4  2002/06/17 14:05:16  j_novak
00225  * friend functions are now also declared outside the class definition
00226  *
00227  * Revision 1.3  2002/05/07 07:06:37  e_gourgoulhon
00228  * Compatibily with xlC compiler on IBM SP2:
00229  *   added declaration of functions map_af_fait_* and map_et_fait_*
00230  *   outside the classes declarations.
00231  *
00232  * Revision 1.2  2002/01/15 15:53:06  p_grandclement
00233  * I have had a constructor fot map_et using the equation of the surface
00234  * of the star.
00235  *
00236  * Revision 1.1.1.1  2001/11/20 15:19:27  e_gourgoulhon
00237  * LORENE
00238  *
00239  * Revision 2.110  2001/10/29  15:31:55  novak
00240  * Ajout de Map_radial::div_r
00241  *
00242  * Revision 2.109  2001/10/16 10:02:49  novak
00243  * *** empty log message ***
00244  *
00245  * Revision 2.108  2001/07/19 14:01:00  novak
00246  * new arguments for Map_af::dalembert
00247  *
00248  * Revision 2.107  2001/02/26 17:28:31  eric
00249  * Ajout de la fonction virtuelle resize.
00250  *
00251  * Revision 2.106  2001/01/10  11:03:00  phil
00252  * ajout de homothetie interne
00253  *
00254  * Revision 2.105  2001/01/02  10:51:55  phil
00255  * ajout integrale de surface a l'infini
00256  *
00257  * Revision 2.104  2000/10/23  13:59:48  eric
00258  * Map_et::adapt: changement des arguments (en autre, ajout de nz_search).
00259  *
00260  * Revision 2.103  2000/10/20  09:39:19  phil
00261  * changement commentaires
00262  *
00263  * Revision 2.102  2000/10/19  14:33:23  novak
00264  * corrige oubli pour Map_et?
00265  *
00266  * Revision 2.101  2000/10/19 14:11:20  novak
00267  * Ajout des fonctions membres Map::dalembert et Map_af::dalembert
00268  * (etat experimental)
00269  *
00270  * Revision 2.100  2000/10/09  13:46:39  eric
00271  * Ajout de la fonction virtuelle poisson2d.
00272  *
00273  * Revision 2.99  2000/09/19  15:28:55  phil
00274  * *** empty log message ***
00275  *
00276  * Revision 2.98  2000/09/19  15:24:19  phil
00277  * ajout du passage de cartesienne en spheriques
00278  *
00279  * Revision 2.97  2000/09/19  13:05:38  phil
00280  * ajout integrale_surface
00281  *
00282  * Revision 2.96  2000/09/11  15:54:03  eric
00283  * Suppression des methodes deriv_x, deriv_y et deriv_z.
00284  * Introduction des methodes comp_x_from_spherical, etc...
00285  *
00286  * Revision 2.95  2000/09/07  15:27:58  keisuke
00287  * Add a new argument Cmp& uu in Map_af::poisson_regular and Map_et::poisson_regular.
00288  *
00289  * Revision 2.94  2000/09/04  15:30:56  keisuke
00290  * Modify the arguments of Map_af::poisson_regular and Map_et::poisson_regular.
00291  *
00292  * Revision 2.93  2000/09/04  13:36:19  keisuke
00293  * Modify the explanation for "uu_div" in Map_et::poisson_regular.
00294  *
00295  * Revision 2.92  2000/08/31  15:50:12  keisuke
00296  * Modify Map_af::poisson_regular.
00297  * Add Map_et::poisson_regular and Map::poisson_regular.
00298  *
00299  * Revision 2.91  2000/08/31  13:03:22  eric
00300  * Ajout de la fonction virtuelle mult_rsint.
00301  *
00302  * Revision 2.90  2000/08/28  16:17:37  keisuke
00303  * Add "int nzet" in the argumant of Map_af::poisson_regular.
00304  *
00305  * Revision 2.89  2000/08/18  11:10:12  eric
00306  * Classe Map_et: ajout de l'operateur d'affectation a un autre Map_et.
00307  *
00308  * Revision 2.88  2000/08/11  08:50:18  keisuke
00309  * Modif Map_af::poisson_regular
00310  *
00311  * Revision 2.87  2000/08/10  12:54:00  keisuke
00312  * Ajout de Map_af::poisson_regular
00313  *
00314  * Revision 2.86  2000/07/20  14:21:07  eric
00315  * Ajout de la fonction div_rsint.
00316  *
00317  * Revision 2.85  2000/05/25  13:54:41  eric
00318  * Modif commentaires
00319  *
00320  * Revision 2.84  2000/05/22  14:38:51  phil
00321  * ajout de inc_dzpuis et dec_dzpuis
00322  *
00323  * Revision 2.83  2000/04/27  15:18:54  phil
00324  * *** empty log message ***
00325  *
00326  * Revision 2.82  2000/03/20  13:33:23  phil
00327  * commentaires
00328  *
00329  * Revision 2.81  2000/03/17  17:32:48  phil
00330  * *** empty log message ***
00331  *
00332  * Revision 2.80  2000/03/17  17:01:54  phil
00333  * *** empty log message ***
00334  *
00335  * Revision 2.79  2000/03/17  16:58:48  phil
00336  * ajout de poisson_frontiere
00337  *
00338  * Revision 2.78  2000/03/06  11:29:51  eric
00339  * Ajout du membre reeavaluate_symy.
00340  *
00341  * Revision 2.77  2000/02/15  15:08:21  eric
00342  * Changement du Param dans Map_et::adapt : fact_echelle est desormais
00343  * passe en double_mod.
00344  *
00345  * Revision 2.76  2000/02/15  10:26:25  phil
00346  * commentaire +
00347  * suppression de poisson_vect et poisson_vect_oohara
00348  *
00349  * Revision 2.75  2000/02/11  13:37:43  eric
00350  * Ajout de la fonction convert_absolute.
00351  *
00352  * Revision 2.74  2000/02/09  09:53:37  phil
00353  * ajout de poisson_vect_oohara
00354  *
00355  * Revision 2.73  2000/01/26  13:07:02  eric
00356  * Reprototypage complet des routines de derivation:
00357  *  le resultat est desormais suppose alloue a l'exterieur de la routine
00358  *  et est passe en argument (Cmp& resu), si bien que le prototypage
00359  *  complet devient:
00360  *      void DERIV(const Cmp& ci, Cmp& resu)
00361  *
00362  * Revision 2.72  2000/01/24  17:08:21  eric
00363  * Class Map_af : suppression de la fonction convert.
00364  *                suppression du constructeur par convertion d'un Map_et.
00365  *                ajout du constructeur par conversion d'un Map.
00366  *
00367  * Revision 2.71  2000/01/24  16:41:43  eric
00368  * Ajout de la fonction virtuelle operator=(const Map_af& ).
00369  * Classe Map_af : ajout de la fonction convert(const Map& ).
00370  *
00371  * Revision 2.70  2000/01/21  12:48:34  phil
00372  * changement prototypage de Map::poisson_vect
00373  *
00374  * Revision 2.69  2000/01/20  16:35:05  phil
00375  * *** empty log message ***
00376  *
00377  * Revision 2.68  2000/01/20  15:44:42  phil
00378  * *** empty log message ***
00379  *
00380  * Revision 2.67  2000/01/20  15:31:56  phil
00381  * *** empty log message ***
00382  *
00383  * Revision 2.66  2000/01/20  14:18:06  phil
00384  * *** empty log message ***
00385  *
00386  * Revision 2.65  2000/01/20  13:16:34  phil
00387  * *** empty log message ***
00388  *
00389  * Revision 2.64  2000/01/20  12:51:24  phil
00390  * *** empty log message ***
00391  *
00392  * Revision 2.63  2000/01/20  12:45:28  phil
00393  * *** empty log message ***
00394  *
00395  * Revision 2.62  2000/01/20  12:40:27  phil
00396  * *** empty log message ***
00397  *
00398  * Revision 2.61  2000/01/20  11:27:54  phil
00399  * ajout de poisson_vect
00400  *
00401  * Revision 2.60  2000/01/13  15:31:55  eric
00402  * Modif commentaires/
00403  *
00404  * Revision 2.59  2000/01/12  16:02:57  eric
00405  * Modif commentaires poisson_compact.
00406  *
00407  * Revision 2.58  2000/01/12  12:54:23  eric
00408  * Ajout du Cmp null, *p_cmp_zero, et de la methode associee cmp_zero().
00409  *
00410  * Revision 2.57  2000/01/10  13:27:43  eric
00411  * Ajout des bases vectorielles associees aux coordonnees :
00412  *  membres bvect_spher et bvect_cart.
00413  *
00414  * Revision 2.56  2000/01/10  09:12:47  eric
00415  * Reprototypage de poisson_compact : Valeur -> Cmp, Tenseur.
00416  * Suppression de poisson_compact_boucle.
00417  * poisson_compact est desormais implementee au niveau Map_radial.
00418  *
00419  * Revision 2.55  2000/01/04  15:23:11  eric
00420  * Classe Map_radial : les data sont listees en premier
00421  * Introduction de la fonction reevalutate.
00422  *
00423  * Revision 2.54  2000/01/03  13:30:32  eric
00424  * Ajout de la fonction adapt.
00425  *
00426  * Revision 2.53  1999/12/22  17:09:52  eric
00427  * Modif commentaires.
00428  *
00429  * Revision 2.52  1999/12/21  16:26:25  eric
00430  * Ajout du constructeur par conversion Map_af::Map_af(const Map_et&).
00431  * Ajout des fonctions Map_af::set_alpha et Map_af::set_beta.
00432  *
00433  * Revision 2.51  1999/12/21  13:01:29  eric
00434  * Changement de prototype de la routine poisson : la solution est
00435  *  desormais passee en argument (et non plus en valeur de retour)
00436  *  pour permettre l'initialisation de methodes de resolution iterative.
00437  *
00438  * Revision 2.50  1999/12/21  10:12:09  eric
00439  * Modif commentaires.
00440  *
00441  * Revision 2.49  1999/12/21  10:06:05  eric
00442  * Ajout de l'argument Param& a poisson.
00443  *
00444  * Revision 2.48  1999/12/20  15:44:35  eric
00445  * Modif commentaires.
00446  *
00447  * Revision 2.47  1999/12/20  10:47:45  eric
00448  * Modif commentaires.
00449  *
00450  * Revision 2.46  1999/12/20  10:24:12  eric
00451  * Ajout des fonctions de lecture des parametres de Map_et:
00452  *   get_alpha(), get_beta(), get_ff(), get_gg().
00453  *
00454  * Revision 2.45  1999/12/16  14:50:08  eric
00455  * Modif commentaires.
00456  *
00457  * Revision 2.44  1999/12/16  14:17:54  eric
00458  * Introduction de l'argument const Param& par dans val_lx et val_lx_jk.
00459  * (en remplacement de l'argument Tbl& param).
00460  *
00461  * Revision 2.43  1999/12/09  10:45:24  eric
00462  * Ajout de la fonction virtuelle integrale.
00463  *
00464  * Revision 2.42  1999/12/07  14:50:47  eric
00465  * Changement ordre des arguments val_r, val_lx
00466  * val_r_kj --> val_r_jk
00467  * val_lx_kj -->val_lx_jk
00468  *
00469  * Revision 2.41  1999/12/06  16:45:20  eric
00470  * Surcharge de val_lx avec la version sans param.
00471  *
00472  * Revision 2.40  1999/12/06  15:33:44  eric
00473  * Ajout des fonctions val_r_kj et val_lx_kj.
00474  *
00475  * Revision 2.39  1999/12/06  13:11:54  eric
00476  * Introduction des fonctions val_r, val_lx et homothetie.
00477  *
00478  * Revision 2.38  1999/12/02  14:28:22  eric
00479  * Reprototypage de la fonction poisson: Valeur -> Cmp.
00480  *
00481  * Revision 2.37  1999/11/30  14:19:33  eric
00482  * Reprototypage complet des fonctions membres mult_r, mult_r_zec,
00483  *  dec2_dzpuis et inc2_dzpuis : Valeur --> Cmp
00484  *
00485  * Revision 2.36  1999/11/29  13:17:57  eric
00486  * Modif commentaires.
00487  *
00488  * Revision 2.35  1999/11/29  12:55:42  eric
00489  * Changement prototype de la fonction laplacien : Valeur --> Cmp.
00490  *
00491  * Revision 2.34  1999/11/25  16:27:27  eric
00492  * Reorganisation complete du calcul des derivees partielles.
00493  *
00494  * Revision 2.33  1999/11/24  16:31:17  eric
00495  * Map_et: ajout des fonctions set_ff et set_gg.
00496  *
00497  * Revision 2.32  1999/11/24  14:31:48  eric
00498  * Map_af: les membres alpha et beta deviennent prives.
00499  * Map_af: introduction des fonctions get_alpha() et get_beta().
00500  *
00501  * Revision 2.31  1999/11/24  11:22:09  eric
00502  * Map_et : Coords rendus publics
00503  * Map_et : fonctions de constructions amies.
00504  *
00505  * Revision 2.30  1999/11/22  10:32:39  eric
00506  * Introduction de la classe Map_et.
00507  * Constructeurs de Map rendus protected.
00508  * Fonction del_coord() rebaptisee reset_coord().
00509  *
00510  * Revision 2.29  1999/10/27  16:44:41  phil
00511  * ajout de mult_r_zec
00512  *
00513  * Revision 2.28  1999/10/19  14:40:37  phil
00514  * ajout de inc2_dzpuis()
00515  *
00516  * Revision 2.27  1999/10/15  14:12:20  eric
00517  * *** empty log message ***
00518  *
00519  * Revision 2.26  1999/10/14  14:26:06  eric
00520  * Depoussierage.
00521  * Documentation.
00522  *
00523  * Revision 2.25  1999/10/11  11:16:29  phil
00524  * changement prototypage de poisson_compact_boucle
00525  *
00526  * Revision 2.24  1999/10/11  10:48:51  phil
00527  * changement de nom pour poisson a support compact
00528  *
00529  * Revision 2.23  1999/10/04  09:20:58  phil
00530  * changement de prototypage de void Map_af::poisson_nul
00531  *
00532  * Revision 2.22  1999/09/30  18:38:32  phil
00533  * *** empty log message ***
00534  *
00535  * Revision 2.21  1999/09/30  18:33:10  phil
00536  * ajout de poisson_nul et poisson_nul_boucle
00537  *
00538  * Revision 2.20  1999/09/30  16:45:54  phil
00539  * ajout de Map_af::poisson_nul(const Valeur&, int, int)
00540  *
00541  * Revision 2.19  1999/09/16  13:15:40  phil
00542  * ajout de Valeur mult_r (const Valeur &)
00543  *
00544  * Revision 2.18  1999/09/15  10:42:11  phil
00545  * ajout de Valeur dec2_dzpuis(const Valeur&)
00546  *
00547  * Revision 2.17  1999/09/14  13:45:45  phil
00548  * suppression de la divergence
00549  *
00550  * Revision 2.16  1999/09/13  15:09:07  phil
00551  * ajout de Map_af::divergence
00552  *
00553  * Revision 2.15  1999/09/13  13:52:23  phil
00554  * ajout des derivations partielles par rapport a x,y et z.
00555  *
00556  * Revision 2.14  1999/09/07  14:35:20  phil
00557  * ajout de la fonction Valeur** gradient(const Valeur&)
00558  *
00559  * Revision 2.13  1999/04/26  16:37:43  phil
00560  * *** empty log message ***
00561  *
00562  * Revision 2.12  1999/04/26  16:33:28  phil
00563  * *** empty log message ***
00564  *
00565  * Revision 2.11  1999/04/26  13:53:04  phil
00566  * *** empty log message ***
00567  *
00568  * Revision 2.10  1999/04/26  13:51:19  phil
00569  * ajout de Map_af::laplacien  (2versions)
00570  *
00571  * Revision 2.9  1999/04/14  09:04:01  phil
00572  * *** empty log message ***
00573  *
00574  * Revision 2.8  1999/04/14  08:53:27  phil
00575  * *** empty log message ***
00576  *
00577  * Revision 2.7  1999/04/13  17:45:25  phil
00578  * *** empty log message ***
00579  *
00580  * Revision 2.6  1999/04/13  17:02:41  phil
00581  * ,
00582  *
00583  * Revision 2.5  1999/04/13  17:00:41  phil
00584  * ajout de la resolution de poisson affine
00585  *
00586  * Revision 2.4  1999/03/04  13:10:53  eric
00587  * Ajout des Coord representant les derivees du changement de variable
00588  * dans la classe Map_radial.
00589  *
00590  * Revision 2.3  1999/03/01  17:00:38  eric
00591  * *** empty log message ***
00592  *
00593  * Revision 2.2  1999/03/01  16:44:41  eric
00594  * Operateurs << et >> sur les ostream.
00595  * L'operateur >> est virtuel.
00596  *
00597  * Revision 2.1  1999/02/22  15:21:45  hyc
00598  * *** empty log message ***
00599  *
00600  *
00601  * Revision 2.0  1999/01/15  09:10:39  hyc
00602  * *** empty log message ***
00603  *
00604  * $Header: /cvsroot/Lorene/C++/Include/map.h,v 1.56 2012/01/24 14:58:54 j_novak Exp $
00605  *
00606  */
00607 
00608 #include <stdio.h>
00609 
00610 #include "coord.h"
00611 #include "base_vect.h"
00612 #include "valeur.h"
00613 #include "tbl.h"
00614 #include "itbl.h"
00615 
00616 class Scalar ;
00617 class Cmp ;
00618 class Param ; 
00619 class Map_af ; 
00620 class Map_et ; 
00621 class Tenseur ;
00622 class Param_elliptic ;
00623 class Metric_flat ; 
00624 class Tbl ;
00625 class Itbl ;
00626 
00627             //------------------------------------//
00628             //            class Map               //
00629             //------------------------------------//
00630 
00660 class Map {
00661 
00662     // Data : 
00663     // ----
00664     protected:
00666     const Mg3d* mg ; 
00667      
00668     double ori_x ;      
00669     double ori_y ;      
00670     double ori_z ;      
00671     double rot_phi ;    
00672     
00679     Base_vect_spher bvect_spher ; 
00680 
00687     Base_vect_cart bvect_cart ; 
00688     
00692         mutable Metric_flat* p_flat_met_spher ; 
00693 
00697         mutable Metric_flat* p_flat_met_cart ; 
00698 
00703     Cmp* p_cmp_zero ; 
00704 
00705     mutable Map_af* p_mp_angu ; 
00706 
00707     public:
00708     Coord r ;   
00709     Coord tet ; 
00710     Coord phi ; 
00711     Coord sint ;    
00712     Coord cost ;    
00713     Coord sinp ;    
00714     Coord cosp ;    
00715 
00716     Coord x ;   
00717     Coord y ;   
00718     Coord z ;   
00719 
00720     Coord xa ;  
00721     Coord ya ;  
00722     Coord za ;  
00723     
00724 
00725     // Constructors, destructor : 
00726     // ------------------------
00727 
00728     protected:
00729     explicit Map(const Mg3d& ) ;    
00730     Map(const Map &) ;      
00731     Map(const Mg3d&, FILE* ) ; 
00732 
00733     public: 
00734     virtual ~Map() ;        
00735     
00736     // Memory management
00737     // -----------------
00738     protected:
00739     virtual void reset_coord() ;  
00740     
00741     // Outputs
00742     // -------
00743     private:
00744     virtual ostream& operator>>(ostream &) const = 0 ;    
00745 
00746     public:
00747     virtual void sauve(FILE* ) const ;  
00748     
00749 
00750     // Extraction of information
00751     // -------------------------
00752 
00753     public:
00755     const Mg3d* get_mg() const {return mg; };
00756 
00758     double get_ori_x() const {return ori_x;} ; 
00760     double get_ori_y() const {return ori_y;} ; 
00762     double get_ori_z() const {return ori_z;} ; 
00763 
00765     double get_rot_phi() const {return rot_phi;} ; 
00766     
00773     const Base_vect_spher& get_bvect_spher() const {return bvect_spher;} ; 
00774 
00781     const Base_vect_cart& get_bvect_cart() const {return bvect_cart;} ; 
00782 
00786         const Metric_flat& flat_met_spher() const ; 
00787 
00791         const Metric_flat& flat_met_cart() const ; 
00792 
00797     const Cmp& cmp_zero() const {return *p_cmp_zero;} ; 
00798 
00802     virtual const Map_af& mp_angu(int) const = 0 ;
00803     
00814     void convert_absolute(double xx, double yy, double zz, 
00815                   double& rr, double& theta, double& pphi) const ; 
00816 
00825     virtual double val_r(int l, double xi, double theta, double pphi) 
00826                  const = 0 ; 
00827     
00836     virtual void val_lx(double rr, double theta, double pphi, 
00837                 int& l, double& xi) const = 0 ; 
00838     
00851     virtual void val_lx(double rr, double theta, double pphi, 
00852                 const Param& par, int& l, double& xi) const = 0 ;
00853 
00854 
00856     virtual bool operator==(const Map& ) const = 0;  
00857 
00858  
00859     
00860     // Modification of the origin, the orientation and the radial scale:
00861     // ----------------------------------------------------------------
00862     public:
00863     void set_ori(double xa0, double ya0, double za0) ;  
00864     void set_rot_phi(double phi0) ;     
00865 
00870     virtual void homothetie(double lambda) = 0 ;    
00871 
00881     virtual void resize(int l, double lambda) = 0 ; 
00882 
00883     // Modification of the mapping
00884     // ---------------------------
00885     public:
00887     virtual void operator=(const Map_af& ) = 0 ;
00888 
00894     virtual void adapt(const Cmp& ent, const Param& par, int nbr=0) = 0 ; 
00895 
00896     // Values of a Cmp at the new grid points
00897     // --------------------------------------
00898 
00911     virtual void reevaluate(const Map* mp_prev, int nzet, 
00912                 Cmp& uu) const = 0 ; 
00913 
00927     virtual void reevaluate_symy(const Map* mp_prev, int nzet, 
00928                 Cmp& uu) const = 0 ; 
00929 
00942     virtual void reevaluate(const Map* mp_prev, int nzet, 
00943                 Scalar& uu) const = 0 ; 
00944 
00958     virtual void reevaluate_symy(const Map* mp_prev, int nzet, 
00959                 Scalar& uu) const = 0 ; 
00960 
00961     // Differential operators:
00962     // ----------------------
00963     public:
00970     virtual void dsdxi(const Cmp& ci, Cmp& resu) const = 0 ;        
00971 
00978     virtual void dsdr(const Cmp& ci, Cmp& resu) const = 0 ;         
00979 
00986     virtual void srdsdt(const Cmp& ci, Cmp& resu) const = 0 ;       
00987     
00995     virtual void srstdsdp(const Cmp& ci, Cmp& resu) const = 0 ;         
00996     
01004     virtual void dsdxi(const Scalar& uu, Scalar& resu) const = 0 ;
01005 
01013     virtual void dsdr(const Scalar& uu, Scalar& resu) const = 0 ;   
01014     
01023     virtual void dsdradial(const Scalar& uu, Scalar& resu) const = 0 ;  
01024 
01032     virtual void srdsdt(const Scalar& uu, Scalar& resu) const = 0 ;         
01033     
01041     virtual void srstdsdp(const Scalar& uu, Scalar& resu) const = 0 ;       
01042     
01047     virtual void dsdt(const Scalar& uu, Scalar& resu) const = 0 ;       
01048 
01053     virtual void stdsdp(const Scalar& uu, Scalar& resu) const = 0 ;         
01054 
01065     virtual void laplacien(const Scalar& uu, int zec_mult_r, 
01066                    Scalar& lap) const = 0 ; 
01067     
01069     virtual void laplacien(const Cmp& uu, int zec_mult_r, 
01070                    Cmp& lap) const = 0 ; 
01071     
01078     virtual void lapang(const Scalar& uu, Scalar& lap) const = 0 ; 
01079 
01080 
01091     virtual void primr(const Scalar& uu, Scalar& resu, 
01092                bool null_infty) const = 0 ;         
01093 
01094      
01095     // Various linear operators
01096     // ------------------------
01097     public: 
01101     virtual void mult_r(Scalar& uu) const = 0 ; 
01102 
01106     virtual void mult_r(Cmp& ci) const = 0 ; 
01107 
01111     virtual void mult_r_zec(Scalar& ) const = 0 ;
01112 
01115     virtual void mult_rsint(Scalar& ) const = 0 ; 
01116 
01119     virtual void div_rsint(Scalar& ) const = 0 ; 
01120 
01123     virtual void div_r(Scalar& ) const = 0 ; 
01124 
01128     virtual void div_r_zec(Scalar& ) const = 0 ;
01129 
01132     virtual void mult_cost(Scalar& ) const = 0 ; 
01133 
01136     virtual void div_cost(Scalar& ) const = 0 ; 
01137 
01140     virtual void mult_sint(Scalar& ) const = 0 ; 
01141 
01144     virtual void div_sint(Scalar& ) const = 0 ; 
01145 
01148     virtual void div_tant(Scalar& ) const = 0 ; 
01149 
01159     virtual void comp_x_from_spherical(const Scalar& v_r, const Scalar& v_theta, 
01160                        const Scalar& v_phi, Scalar& v_x) const = 0 ; 
01162     virtual void comp_x_from_spherical(const Cmp& v_r, const Cmp& v_theta, 
01163                        const Cmp& v_phi, Cmp& v_x) const = 0 ; 
01164 
01174     virtual void comp_y_from_spherical(const Scalar& v_r, const Scalar& v_theta, 
01175                        const Scalar& v_phi, Scalar& v_y) const = 0 ; 
01176     
01178     virtual void comp_y_from_spherical(const Cmp& v_r, const Cmp& v_theta, 
01179                        const Cmp& v_phi, Cmp& v_y) const = 0 ; 
01180     
01189     virtual void comp_z_from_spherical(const Scalar& v_r, const Scalar& v_theta, 
01190                        Scalar& v_z) const = 0 ; 
01191     
01193     virtual void comp_z_from_spherical(const Cmp& v_r, const Cmp& v_theta, 
01194                        Cmp& v_z) const = 0 ; 
01195     
01205     virtual void comp_r_from_cartesian(const Scalar& v_x, const Scalar& v_y, 
01206                        const Scalar& v_z, Scalar& v_r) const = 0 ; 
01208     virtual void comp_r_from_cartesian(const Cmp& v_x, const Cmp& v_y, 
01209                        const Cmp& v_z, Cmp& v_r) const = 0 ; 
01210     
01220     virtual void comp_t_from_cartesian(const Scalar& v_x, const Scalar& v_y, 
01221                        const Scalar& v_z, Scalar& v_t) const = 0 ; 
01222     
01224     virtual void comp_t_from_cartesian(const Cmp& v_x, const Cmp& v_y, 
01225                        const Cmp& v_z, Cmp& v_t) const = 0 ; 
01226     
01235     virtual void comp_p_from_cartesian(const Scalar& v_x, const Scalar& v_y, 
01236                        Scalar& v_p) const = 0 ; 
01237     
01239     virtual void comp_p_from_cartesian(const Cmp& v_x, const Cmp& v_y, 
01240                        Cmp& v_p) const = 0 ; 
01241     
01246     virtual void dec_dzpuis(Scalar& ) const = 0 ; 
01247     
01252     virtual void dec2_dzpuis(Scalar& ) const = 0 ; 
01253     
01258     virtual void inc_dzpuis(Scalar& ) const = 0 ; 
01259     
01264     virtual void inc2_dzpuis(Scalar& ) const = 0 ; 
01265     
01273     virtual Tbl* integrale(const Cmp&) const = 0 ; 
01274     
01275     // PDE resolution :
01276     // --------------
01277     public:
01288     virtual void poisson(const Cmp& source, Param& par, Cmp& uu) const = 0 ;
01289     
01300     virtual void poisson_tau(const Cmp& source, Param& par, Cmp& uu) const = 0 ;
01301     
01302     virtual void poisson_falloff(const Cmp& source, Param& par, Cmp& uu,
01303                      int k_falloff) const = 0 ;
01304 
01305     virtual void poisson_ylm(const Cmp& source, Param& par, Cmp& pot,
01306                  int nylm, double* intvec) const = 0 ;
01307 
01330     virtual void poisson_regular(const Cmp& source, int k_div, int nzet,
01331                      double unsgam1, Param& par, Cmp& uu,
01332                      Cmp& uu_regu, Cmp& uu_div,
01333                      Tenseur& duu_div, Cmp& source_regu,
01334                      Cmp& source_div) const = 0 ;
01335 
01349     virtual void poisson_compact(const Cmp& source, const Cmp& aa, 
01350                      const Tenseur& bb, const Param& par, 
01351                      Cmp& psi) const = 0 ;
01352 
01367     virtual void poisson_compact(int nzet, const Cmp& source, const Cmp& aa, 
01368                      const Tenseur& bb, const Param& par, 
01369                      Cmp& psi) const = 0 ;
01370 
01388     virtual void poisson_angu(const Scalar& source, Param& par, 
01389                     Scalar& uu, double lambda=0) const = 0 ;
01390 
01391     
01392     public:
01416     virtual Param* donne_para_poisson_vect (Param& para, int i) const = 0;
01417     
01438     virtual void poisson_frontiere (const Cmp& source,const Valeur& limite,
01439                     int raccord, int num_front, Cmp& pot, 
01440                     double = 0., double = 0.) const = 0 ;
01441     
01442     virtual void poisson_frontiere_double (const Cmp& source, const Valeur& lim_func,
01443             const Valeur& lim_der, int num_zone, Cmp& pot) const = 0 ;
01444     
01445 
01456     virtual void poisson_interne (const Cmp& source, const Valeur& limite,
01457              Param& par, Cmp& pot) const = 0 ;
01458 
01459 
01481     virtual void poisson2d(const Cmp& source_mat, const Cmp& source_quad, 
01482                    Param& par, Cmp& uu) const = 0 ;
01483 
01497     virtual void dalembert(Param& par, Scalar& fJp1, const Scalar& fJ, 
01498                    const Scalar& fJm1, const Scalar& source) const = 0 ;
01499 
01500     // Friend functions : 
01501     // ----------------
01502     friend ostream& operator<<(ostream& , const Map& ) ;    
01503 };
01504 ostream& operator<<(ostream& , const Map& ) ; 
01505 
01506 
01507 
01508             //------------------------------------//
01509             //          class Map_radial          //
01510             //------------------------------------//
01511 
01512 
01513 
01526 class Map_radial : public Map {
01527 
01528     // Data : 
01529     // ----
01530 
01531     // 0th order derivatives of the mapping
01532     // - - - - - - - - - - - - - - - - - - 
01533     public:
01539     Coord xsr ;     
01540     
01541     // 1st order derivatives of the mapping
01542     // - - - - - - - - - - - - - - - - - - 
01543     public:
01550     Coord dxdr ;        
01551     
01558     Coord drdt ; 
01559 
01566     Coord stdrdp ; 
01567 
01574     Coord srdrdt ;      
01575 
01582     Coord srstdrdp ;        
01583 
01590     Coord sr2drdt ;     
01591     
01598     Coord sr2stdrdp ;   
01599 
01600     // 2nd order derivatives of the mapping
01601     // - - - - - - - - - - - - - - - - - - 
01602     public:
01609     Coord d2rdx2 ;      
01610     
01621     Coord lapr_tp ;     
01622     
01623 
01630     Coord d2rdtdx ;     
01631     
01638     Coord sstd2rdpdx ;  
01639 
01640 
01647     Coord sr2d2rdt2 ;
01648     
01649 
01650     // Constructors, destructor : 
01651     // ------------------------
01652 
01653     protected:
01655     Map_radial(const Mg3d& mgrid ) ;            
01656     Map_radial(const Map_radial& mp) ;   
01657     Map_radial (const Mg3d&, FILE* ) ; 
01658 
01659     public: 
01660     virtual ~Map_radial() ;         
01661 
01662     // Memory management
01663     // -----------------
01664     protected:
01665     virtual void reset_coord() ;  
01666     // Modification of the mapping
01667     // ---------------------------
01668     public:
01670     virtual void operator=(const Map_af& ) = 0 ;
01671         
01672     // Outputs
01673     // -------
01674     public:  
01675     virtual void sauve(FILE* ) const ;  
01676    
01677     // Extraction of information
01678     // -------------------------
01688     virtual double val_r_jk(int l, double xi, int j, int k) const = 0 ; 
01689     
01700     virtual void val_lx_jk(double rr, int j, int k, const Param& par, 
01701                    int& l, double& xi) const = 0 ; 
01702 
01704     virtual bool operator==(const Map& ) const = 0;  
01705 
01706     // Values of a Cmp at the new grid points
01707     // --------------------------------------
01720     virtual void reevaluate(const Map* mp_prev, int nzet, Cmp& uu) const ; 
01721 
01735     virtual void reevaluate_symy(const Map* mp_prev, int nzet, Cmp& uu) 
01736                     const ; 
01737     
01750     virtual void reevaluate(const Map* mp_prev, int nzet, Scalar& uu) const ; 
01751 
01765     virtual void reevaluate_symy(const Map* mp_prev, int nzet, Scalar& uu) 
01766                     const ; 
01767 
01768     // Various linear operators
01769     // ------------------------
01770     public: 
01774     virtual void mult_r(Scalar& uu) const ; 
01775 
01779     virtual void mult_r(Cmp& ci) const ; 
01780 
01785     virtual void mult_r_zec(Scalar& ) const ;
01786 
01789     virtual void mult_rsint(Scalar& ) const ; 
01790 
01793     virtual void div_rsint(Scalar& ) const ; 
01794 
01797     virtual void div_r(Scalar& ) const ; 
01798 
01802     virtual void div_r_zec(Scalar& ) const ;
01803 
01806     virtual void mult_cost(Scalar& ) const ; 
01807 
01810     virtual void div_cost(Scalar& ) const  ; 
01811 
01814     virtual void mult_sint(Scalar& ) const ; 
01815 
01818     virtual void div_sint(Scalar& ) const  ; 
01819 
01822     virtual void div_tant(Scalar& ) const  ; 
01823 
01833     virtual void comp_x_from_spherical(const Scalar& v_r, const Scalar& v_theta, 
01834                        const Scalar& v_phi, Scalar& v_x) const ; 
01835     
01837     virtual void comp_x_from_spherical(const Cmp& v_r, const Cmp& v_theta, 
01838                        const Cmp& v_phi, Cmp& v_x) const ; 
01839     
01849     virtual void comp_y_from_spherical(const Scalar& v_r, const Scalar& v_theta, 
01850                        const Scalar& v_phi, Scalar& v_y) const ; 
01851     
01853     virtual void comp_y_from_spherical(const Cmp& v_r, const Cmp& v_theta, 
01854                        const Cmp& v_phi, Cmp& v_y) const ; 
01855     
01864     virtual void comp_z_from_spherical(const Scalar& v_r, const Scalar& v_theta, 
01865                        Scalar& v_z) const ; 
01866     
01868     virtual void comp_z_from_spherical(const Cmp& v_r, const Cmp& v_theta, 
01869                        Cmp& v_z) const ; 
01870     
01880     virtual void comp_r_from_cartesian(const Scalar& v_x, const Scalar& v_y, 
01881                        const Scalar& v_z, Scalar& v_r) const ; 
01882     
01884     virtual void comp_r_from_cartesian(const Cmp& v_x, const Cmp& v_y, 
01885                        const Cmp& v_z, Cmp& v_r) const ; 
01886     
01896     virtual void comp_t_from_cartesian(const Scalar& v_x, const Scalar& v_y, 
01897                        const Scalar& v_z, Scalar& v_t) const ; 
01898     
01900     virtual void comp_t_from_cartesian(const Cmp& v_x, const Cmp& v_y, 
01901                        const Cmp& v_z, Cmp& v_t) const ; 
01902     
01911     virtual void comp_p_from_cartesian(const Scalar& v_x, const Scalar& v_y, 
01912                        Scalar& v_p) const ; 
01913     
01915     virtual void comp_p_from_cartesian(const Cmp& v_x, const Cmp& v_y, 
01916                        Cmp& v_p) const ; 
01917     
01923     virtual void dec_dzpuis(Scalar& ) const ; 
01924 
01930     virtual void dec2_dzpuis(Scalar& ) const ; 
01931 
01937     virtual void inc_dzpuis(Scalar& ) const ; 
01938     
01944     virtual void inc2_dzpuis(Scalar& ) const ; 
01945     
01946 
01947     // PDE resolution :
01948     // --------------
01949     public:
01972     virtual void poisson_compact(const Cmp& source, const Cmp& aa, 
01973                      const Tenseur& bb, const Param& par, 
01974                      Cmp& psi) const ;
01975 
01990     virtual void poisson_compact(int nzet, const Cmp& source, const Cmp& aa, 
01991                      const Tenseur& bb, const Param& par, 
01992                      Cmp& psi) const ;
01993 
01994 };
01995 
01996 
01997             //------------------------------------//
01998             //            class Map_af            //
01999             //------------------------------------//
02000 
02001 
02002 
02017 class Map_af : public Map_radial {
02018 
02019     // Data :
02020     // ----
02021     private:
02023     double* alpha ;  
02025     double* beta ;    
02026     
02027     // Constructors, destructor : 
02028     // ------------------------
02029     public:
02041     Map_af(const Mg3d& mgrille, const double* r_limits) ;   
02054     Map_af(const Mg3d& mgrille, const Tbl& r_limits) ;  
02055     
02056     Map_af(const Map_af& ) ;      
02057     Map_af(const Mg3d&, FILE* ) ; 
02058     
02070     explicit Map_af(const Map& ) ;      
02071 
02072     virtual ~Map_af() ;       
02073 
02074     // Assignment
02075     // ----------
02076     public: 
02078     virtual void operator=(const Map_af& ) ;
02079         
02080     // Memory management
02081     // -----------------
02082     private:
02084     void set_coord() ;  
02085 
02086     // Extraction of information
02087     // -------------------------
02088     public:
02090     const double* get_alpha() const ; 
02091 
02093     const double* get_beta() const ; 
02094 
02098     virtual const Map_af& mp_angu(int) const ;
02099     
02109     virtual double val_r(int l, double xi, double theta, double pphi) const ; 
02110 
02120     virtual void val_lx(double rr, double theta, double pphi,
02121                 int& l, double& xi) const ; 
02122     
02132     virtual void val_lx(double rr, double theta, double pphi, 
02133                 const Param& par, int& l, double& xi) const ; 
02134         
02144     virtual double val_r_jk(int l, double xi, int j, int k) const ; 
02145     
02155     virtual void val_lx_jk(double rr, int j, int k, const Param& par, 
02156                    int& l, double& xi) const ; 
02157 
02159     virtual bool operator==(const Map& ) const ;  
02160 
02161 
02162     // Outputs
02163     // -------
02164     public:
02165     virtual void sauve(FILE* ) const ;    
02166     
02167     private:
02168     virtual ostream& operator>>(ostream &) const ;    
02169 
02170     // Modification of the mapping
02171     // ---------------------------
02172     public:
02177     virtual void homothetie(double lambda) ;
02178     
02188     virtual void resize(int l, double lambda) ; 
02189 
02195     void homothetie_interne(double lambda) ;
02196     
02199     virtual void adapt(const Cmp& ent, const Param& par, int nbr=0) ; 
02200 
02202     void set_alpha(double alpha0, int l) ;
02203 
02205     void set_beta(double beta0, int l) ;  
02206 
02207     // Differential operators:
02208     // ----------------------
02209     public:
02216     virtual void dsdxi(const Cmp& ci, Cmp& resu) const ;        
02217 
02224     virtual void dsdr(const Cmp& ci, Cmp& resu) const ;         
02225 
02232     virtual void srdsdt(const Cmp& ci, Cmp& resu) const ;       
02233     
02241     virtual void srstdsdp(const Cmp& ci, Cmp& resu) const ;         
02242 
02250     virtual void dsdr(const Scalar& uu, Scalar& resu) const  ;  
02251 
02259     virtual void dsdxi(const Scalar& uu, Scalar& resu) const  ;  
02260         
02268     virtual void dsdradial(const Scalar&, Scalar&) const  ;         
02269 
02277     virtual void srdsdt(const Scalar& uu, Scalar& resu) const  ;        
02278     
02286     virtual void srstdsdp(const Scalar& uu, Scalar& resu) const ;       
02287         
02292     virtual void dsdt(const Scalar& uu, Scalar& resu) const ;       
02293 
02298     virtual void stdsdp(const Scalar& uu, Scalar& resu) const ;         
02299 
02310     virtual void laplacien(const Scalar& uu, int zec_mult_r, 
02311                    Scalar& lap) const ; 
02312     
02314     virtual void laplacien(const Cmp& uu, int zec_mult_r, 
02315                    Cmp& lap) const  ; 
02316     
02323     virtual void lapang(const Scalar& uu, Scalar& lap) const ; 
02324     
02325 
02336     virtual void primr(const Scalar& uu, Scalar& resu,
02337                bool null_infty) const ;         
02338 
02339      
02347     virtual Tbl* integrale(const Cmp&) const ; 
02348     
02349      
02350     // PDE resolution :
02351     // --------------
02352     public:
02360     virtual void poisson(const Cmp& source, Param& par, Cmp& uu) const ;
02361 
02369     virtual void poisson_tau(const Cmp& source, Param& par, Cmp& uu) const ;
02370     
02371     virtual void poisson_falloff(const Cmp& source, Param& par, Cmp& uu,
02372                      int k_falloff) const ;
02373 
02374     virtual void poisson_ylm(const Cmp& source, Param& par, Cmp& pot,
02375                  int nylm, double* intvec) const ;
02376 
02398     virtual void poisson_regular(const Cmp& source, int k_div, int nzet,
02399                      double unsgam1, Param& par, Cmp& uu,
02400                      Cmp& uu_regu, Cmp& uu_div,
02401                      Tenseur& duu_div, Cmp& source_regu,
02402                      Cmp& source_div) const ;
02403 
02421     virtual void poisson_angu(const Scalar& source, Param& par, 
02422                     Scalar& uu, double lambda=0) const ;
02423 
02433     virtual Param* donne_para_poisson_vect (Param& par, int i) const ;
02434     
02439     virtual void poisson_frontiere (const Cmp&, const Valeur&, int, int, Cmp&, double = 0., double = 0.) const ;
02440 
02446     virtual void poisson_frontiere_double (const Cmp& source, const Valeur& lim_func,
02447             const Valeur& lim_der, int num_zone, Cmp& pot) const  ;
02448 
02459     virtual void poisson_interne (const Cmp& source, const Valeur& limite,
02460              Param& par, Cmp& pot) const ;
02461 
02466     double integrale_surface (const Cmp& ci, double rayon) const ;
02467     
02472     double integrale_surface (const Scalar& ci, double rayon) const ;
02473     
02474     double integrale_surface_falloff (const Cmp& ci) const ;
02475 
02480     double integrale_surface_infini (const Cmp& ci) const ;
02481     
02486     double integrale_surface_infini (const Scalar& ci) const ;
02487     
02495     void sol_elliptic (Param_elliptic& params, 
02496                const Scalar& so,  Scalar& uu) const ;
02497 
02498 
02510     void sol_elliptic_boundary (Param_elliptic& params, 
02511                const Scalar& so,  Scalar& uu, const Mtbl_cf& bound, 
02512                double fact_dir, double fact_neu ) const ;
02513 
02518     void sol_elliptic_boundary (Param_elliptic& params, 
02519                const Scalar& so,  Scalar& uu, const Scalar& bound, 
02520                double fact_dir, double fact_neu ) const ;
02521 
02531     void sol_elliptic_no_zec (Param_elliptic& params, 
02532                   const Scalar& so, Scalar& uu, double val) const ;
02533 
02543     void sol_elliptic_only_zec (Param_elliptic& params, 
02544                   const Scalar& so, Scalar& uu, double val) const ;
02545 
02551     void sol_elliptic_sin_zec (Param_elliptic& params, 
02552                   const Scalar& so, Scalar& uu, 
02553                     double* coefs, double*) const ;
02564     void sol_elliptic_fixe_der_zero (double val, 
02565                      Param_elliptic& params, 
02566                      const Scalar& so, Scalar& uu) const ;
02567     
02592     virtual void poisson2d(const Cmp& source_mat, const Cmp& source_quad, 
02593                    Param& par, Cmp& uu) const ;
02601     void sol_elliptic_2d(Param_elliptic&, 
02602                  const Scalar&, Scalar&) const ;
02610     void sol_elliptic_pseudo_1d(Param_elliptic&, 
02611                  const Scalar&, Scalar&) const ;
02612 
02641     virtual void dalembert(Param& par, Scalar& fJp1, const Scalar& fJ, 
02642                    const Scalar& fJm1, const Scalar& source) const ;
02643 
02644     // Building functions for the Coord's
02645     // ----------------------------------
02646     friend Mtbl* map_af_fait_r(const Map* ) ;
02647     friend Mtbl* map_af_fait_tet(const Map* ) ;
02648     friend Mtbl* map_af_fait_phi(const Map* ) ;
02649     friend Mtbl* map_af_fait_sint(const Map* ) ;
02650     friend Mtbl* map_af_fait_cost(const Map* ) ;
02651     friend Mtbl* map_af_fait_sinp(const Map* ) ;
02652     friend Mtbl* map_af_fait_cosp(const Map* ) ;
02653 
02654     friend Mtbl* map_af_fait_x(const Map* ) ;
02655     friend Mtbl* map_af_fait_y(const Map* ) ;
02656     friend Mtbl* map_af_fait_z(const Map* ) ;
02657 
02658     friend Mtbl* map_af_fait_xa(const Map* ) ;
02659     friend Mtbl* map_af_fait_ya(const Map* ) ;
02660     friend Mtbl* map_af_fait_za(const Map* ) ;
02661 
02662     friend Mtbl* map_af_fait_xsr(const Map* ) ;
02663     friend Mtbl* map_af_fait_dxdr(const Map* ) ;
02664     friend Mtbl* map_af_fait_drdt(const Map* ) ;
02665     friend Mtbl* map_af_fait_stdrdp(const Map* ) ;
02666     friend Mtbl* map_af_fait_srdrdt(const Map* ) ;
02667     friend Mtbl* map_af_fait_srstdrdp(const Map* ) ;
02668     friend Mtbl* map_af_fait_sr2drdt(const Map* ) ;
02669     friend Mtbl* map_af_fait_sr2stdrdp(const Map* ) ;
02670     friend Mtbl* map_af_fait_d2rdx2(const Map* ) ;
02671     friend Mtbl* map_af_fait_lapr_tp(const Map* ) ;
02672     friend Mtbl* map_af_fait_d2rdtdx(const Map* ) ;
02673     friend Mtbl* map_af_fait_sstd2rdpdx(const Map* ) ;
02674     friend Mtbl* map_af_fait_sr2d2rdt2(const Map* ) ;
02675 
02676 };
02677 
02678      Mtbl* map_af_fait_r(const Map* ) ;
02679      Mtbl* map_af_fait_tet(const Map* ) ;
02680      Mtbl* map_af_fait_phi(const Map* ) ;
02681      Mtbl* map_af_fait_sint(const Map* ) ;
02682      Mtbl* map_af_fait_cost(const Map* ) ;
02683      Mtbl* map_af_fait_sinp(const Map* ) ;
02684      Mtbl* map_af_fait_cosp(const Map* ) ;
02685 
02686      Mtbl* map_af_fait_x(const Map* ) ;
02687      Mtbl* map_af_fait_y(const Map* ) ;
02688      Mtbl* map_af_fait_z(const Map* ) ;
02689 
02690      Mtbl* map_af_fait_xa(const Map* ) ;
02691      Mtbl* map_af_fait_ya(const Map* ) ;
02692      Mtbl* map_af_fait_za(const Map* ) ;
02693 
02694      Mtbl* map_af_fait_xsr(const Map* ) ;
02695      Mtbl* map_af_fait_dxdr(const Map* ) ;
02696      Mtbl* map_af_fait_drdt(const Map* ) ;
02697      Mtbl* map_af_fait_stdrdp(const Map* ) ;
02698      Mtbl* map_af_fait_srdrdt(const Map* ) ;
02699      Mtbl* map_af_fait_srstdrdp(const Map* ) ;
02700      Mtbl* map_af_fait_sr2drdt(const Map* ) ;
02701      Mtbl* map_af_fait_sr2stdrdp(const Map* ) ;
02702      Mtbl* map_af_fait_d2rdx2(const Map* ) ;
02703      Mtbl* map_af_fait_lapr_tp(const Map* ) ;
02704      Mtbl* map_af_fait_d2rdtdx(const Map* ) ;
02705      Mtbl* map_af_fait_sstd2rdpdx(const Map* ) ;
02706      Mtbl* map_af_fait_sr2d2rdt2(const Map* ) ;
02707 
02708 
02709 
02710 
02711             //------------------------------------//
02712             //            class Map_et            //
02713             //------------------------------------//
02714 
02715 
02716 
02742 class Map_et : public Map_radial {
02743 
02744     // Data :
02745     // ----
02746     private:
02748     double* alpha ;   
02750     double* beta ;    
02751 
02755     Tbl** aa ;    
02756 
02760     Tbl** daa ;   
02761     
02765     Tbl** ddaa ;      
02766     
02768     Tbl aasx ; 
02769      
02771     Tbl aasx2 ; 
02772      
02776     Tbl zaasx ; 
02777       
02781     Tbl zaasx2 ; 
02782       
02786     Tbl** bb ;    
02787 
02791     Tbl** dbb ;   
02792     
02796     Tbl** ddbb ;      
02797     
02799     Tbl bbsx ; 
02800      
02802     Tbl bbsx2 ; 
02803      
02809     Valeur ff ; 
02810       
02816     Valeur gg ; 
02817       
02818     public:
02824     Coord rsxdxdr ;
02825      
02831     Coord rsx2drdx ;
02832       
02833     // Constructors, destructor : 
02834     // ------------------------
02835     public:
02847     Map_et(const Mg3d& mgrille, const double* r_limits) ;   
02848     
02866     Map_et(const Mg3d& mgrille, const double* r_limits,const Tbl& tab); 
02867     Map_et(const Map_et& ) ;      
02868     Map_et(const Mg3d&, FILE* ) ; 
02869 
02870     virtual ~Map_et() ;       
02871 
02872     // Assignment
02873     // ----------
02874     public:
02876     virtual void operator=(const Map_et& mp) ;
02877     
02879     virtual void operator=(const Map_af& mpa) ;
02880     
02882     void set_ff(const Valeur& ) ; 
02884     void set_gg(const Valeur& ) ; 
02885 
02886     // Memory management
02887     // -----------------
02888     private:
02890     void set_coord() ;      
02891     protected:
02893     virtual void reset_coord() ;
02894     
02895     private: 
02897     void fait_poly() ;  
02898     
02899     // Extraction of information
02900     // -------------------------
02901     public:
02905     virtual const Map_af& mp_angu(int) const ;
02906     
02910     const double* get_alpha() const ; 
02911 
02915     const double* get_beta() const ; 
02916 
02918     const Valeur& get_ff() const ; 
02919 
02921     const Valeur& get_gg() const ; 
02922     
02932     virtual double val_r(int l, double xi, double theta, double pphi) const ; 
02933 
02943     virtual void val_lx(double rr, double theta, double pphi,
02944                 int& l, double& xi) const ; 
02945     
02964     virtual void val_lx(double rr, double theta, double pphi, 
02965                 const Param& par, int& l, double& xi) const ; 
02966         
02968     virtual bool operator==(const Map& ) const ;  
02969 
02979     virtual double val_r_jk(int l, double xi, int j, int k) const ; 
02980     
02997     virtual void val_lx_jk(double rr, int j, int k, const Param& par, 
02998                    int& l, double& xi) const ; 
02999 
03000 
03001 
03002     // Outputs
03003     // -------
03004     public:
03005     virtual void sauve(FILE* ) const ;    
03006     
03007     private:
03008     virtual ostream& operator>>(ostream &) const ;    
03009 
03010     // Modification of the radial scale
03011     // --------------------------------
03012     public:
03017     virtual void homothetie(double lambda) ;    
03018 
03028     virtual void resize(int l, double lambda) ; 
03029 
03036     void resize_extr(double lambda) ;
03037 
03039     void set_alpha(double alpha0, int l) ;
03040 
03042     void set_beta(double beta0, int l) ;  
03043 
03044     // Modification of the mapping
03045     // ---------------------------
03090     virtual void adapt(const Cmp& ent, const Param& par, int nbr_filtre = 0)  ; 
03091 
03092     // Differential operators:
03093     // ----------------------
03094     public:
03101     virtual void dsdxi(const Cmp& ci, Cmp& resu) const ;        
03102 
03109     virtual void dsdr(const Cmp& ci, Cmp& resu) const ;         
03110 
03117     virtual void srdsdt(const Cmp& ci, Cmp& resu) const ;       
03118     
03126     virtual void srstdsdp(const Cmp& ci, Cmp& resu) const ;             
03127 
03135     virtual void dsdxi(const Scalar& uu, Scalar& resu) const ;
03136 
03144     virtual void dsdr(const Scalar& uu, Scalar& resu) const ;
03145     
03154     virtual void dsdradial(const Scalar& uu, Scalar& resu) const ;          
03155     
03163     virtual void srdsdt(const Scalar& uu, Scalar& resu) const ;         
03164     
03172     virtual void srstdsdp(const Scalar& uu, Scalar& resu) const ;       
03173     
03178     virtual void dsdt(const Scalar& uu, Scalar& resu) const ;       
03179 
03184     virtual void stdsdp(const Scalar& uu, Scalar& resu) const ;         
03185 
03196     virtual void laplacien(const Scalar& uu, int zec_mult_r, 
03197                    Scalar& lap) const ; 
03198     
03200     virtual void laplacien(const Cmp& uu, int zec_mult_r, 
03201                    Cmp& lap) const  ; 
03202     
03209     virtual void lapang(const Scalar& uu, Scalar& lap) const ; 
03210     
03211 
03222     virtual void primr(const Scalar& uu, Scalar& resu,
03223                bool null_infty) const ;         
03224 
03225      
03233     virtual Tbl* integrale(const Cmp&) const ; 
03234     
03235      
03236     // PDE resolution :
03237     // --------------
03238     public:
03276     virtual void poisson(const Cmp& source, Param& par, Cmp& uu) const ;
03277 
03315     virtual void poisson_tau(const Cmp& source, Param& par, Cmp& uu) const ;
03316     
03317     virtual void poisson_falloff(const Cmp& source, Param& par, Cmp& uu,
03318                      int k_falloff) const ;
03319 
03320     virtual void poisson_ylm(const Cmp& source, Param& par, Cmp& uu,
03321                  int nylm, double* intvec) const ;
03322 
03358     virtual void poisson_regular(const Cmp& source, int k_div, int nzet,
03359                      double unsgam1, Param& par, Cmp& uu,
03360                      Cmp& uu_regu, Cmp& uu_div,
03361                      Tenseur& duu_div, Cmp& source_regu,
03362                      Cmp& source_div) const ;
03363 
03381     virtual void poisson_angu(const Scalar& source, Param& par, 
03382                     Scalar& uu, double lambda=0) const ;
03383 
03407     virtual Param* donne_para_poisson_vect (Param& para, int i) const ;
03408     
03412     virtual void poisson_frontiere (const Cmp&, const Valeur&, int, int, 
03413                     Cmp&, double = 0., double = 0.) const ;
03414     virtual void poisson_frontiere_double (const Cmp& source, 
03415             const Valeur& lim_func, const Valeur& lim_der, 
03416             int num_zone, Cmp& pot) const  ;
03417 
03428     virtual void poisson_interne (const Cmp& source, const Valeur& limite,
03429              Param& par, Cmp& pot) const ;
03430 
03431 
03470     virtual void poisson2d(const Cmp& source_mat, const Cmp& source_quad, 
03471                    Param& par, Cmp& uu) const ;
03472 
03476     virtual void dalembert(Param& par, Scalar& fJp1, const Scalar& fJ, 
03477                    const Scalar& fJm1, const Scalar& source) const ;
03478 
03479 
03480 
03481 
03482     // Building functions for the Coord's
03483     // ----------------------------------
03484     friend Mtbl* map_et_fait_r(const Map* ) ;
03485     friend Mtbl* map_et_fait_tet(const Map* ) ;
03486     friend Mtbl* map_et_fait_phi(const Map* ) ;
03487     friend Mtbl* map_et_fait_sint(const Map* ) ;
03488     friend Mtbl* map_et_fait_cost(const Map* ) ;
03489     friend Mtbl* map_et_fait_sinp(const Map* ) ;
03490     friend Mtbl* map_et_fait_cosp(const Map* ) ;
03491 
03492     friend Mtbl* map_et_fait_x(const Map* ) ;
03493     friend Mtbl* map_et_fait_y(const Map* ) ;
03494     friend Mtbl* map_et_fait_z(const Map* ) ;
03495 
03496     friend Mtbl* map_et_fait_xa(const Map* ) ;
03497     friend Mtbl* map_et_fait_ya(const Map* ) ;
03498     friend Mtbl* map_et_fait_za(const Map* ) ;
03499 
03500     friend Mtbl* map_et_fait_xsr(const Map* ) ;
03501     friend Mtbl* map_et_fait_dxdr(const Map* ) ;
03502     friend Mtbl* map_et_fait_drdt(const Map* ) ;
03503     friend Mtbl* map_et_fait_stdrdp(const Map* ) ;
03504     friend Mtbl* map_et_fait_srdrdt(const Map* ) ;
03505     friend Mtbl* map_et_fait_srstdrdp(const Map* ) ;
03506     friend Mtbl* map_et_fait_sr2drdt(const Map* ) ;
03507     friend Mtbl* map_et_fait_sr2stdrdp(const Map* ) ;
03508     friend Mtbl* map_et_fait_d2rdx2(const Map* ) ;
03509     friend Mtbl* map_et_fait_lapr_tp(const Map* ) ;
03510     friend Mtbl* map_et_fait_d2rdtdx(const Map* ) ;
03511     friend Mtbl* map_et_fait_sstd2rdpdx(const Map* ) ;
03512     friend Mtbl* map_et_fait_sr2d2rdt2(const Map* ) ;
03513 
03514     friend Mtbl* map_et_fait_rsxdxdr(const Map* ) ;
03515     friend Mtbl* map_et_fait_rsx2drdx(const Map* ) ;
03516 
03517 };
03518 
03519      Mtbl* map_et_fait_r(const Map* ) ;
03520      Mtbl* map_et_fait_tet(const Map* ) ;
03521      Mtbl* map_et_fait_phi(const Map* ) ;
03522      Mtbl* map_et_fait_sint(const Map* ) ;
03523      Mtbl* map_et_fait_cost(const Map* ) ;
03524      Mtbl* map_et_fait_sinp(const Map* ) ;
03525      Mtbl* map_et_fait_cosp(const Map* ) ;
03526 
03527      Mtbl* map_et_fait_x(const Map* ) ;
03528      Mtbl* map_et_fait_y(const Map* ) ;
03529      Mtbl* map_et_fait_z(const Map* ) ;
03530 
03531      Mtbl* map_et_fait_xa(const Map* ) ;
03532      Mtbl* map_et_fait_ya(const Map* ) ;
03533      Mtbl* map_et_fait_za(const Map* ) ;
03534 
03535      Mtbl* map_et_fait_xsr(const Map* ) ;
03536      Mtbl* map_et_fait_dxdr(const Map* ) ;
03537      Mtbl* map_et_fait_drdt(const Map* ) ;
03538      Mtbl* map_et_fait_stdrdp(const Map* ) ;
03539      Mtbl* map_et_fait_srdrdt(const Map* ) ;
03540      Mtbl* map_et_fait_srstdrdp(const Map* ) ;
03541      Mtbl* map_et_fait_sr2drdt(const Map* ) ;
03542      Mtbl* map_et_fait_sr2stdrdp(const Map* ) ;
03543      Mtbl* map_et_fait_d2rdx2(const Map* ) ;
03544      Mtbl* map_et_fait_lapr_tp(const Map* ) ;
03545      Mtbl* map_et_fait_d2rdtdx(const Map* ) ;
03546      Mtbl* map_et_fait_sstd2rdpdx(const Map* ) ;
03547      Mtbl* map_et_fait_sr2d2rdt2(const Map* ) ;
03548 
03549      Mtbl* map_et_fait_rsxdxdr(const Map* ) ;
03550      Mtbl* map_et_fait_rsx2drdx(const Map* ) ;
03551 
03552             //------------------------------------//
03553             //            class Map_log            //
03554             //------------------------------------//
03555 
03556 #define AFFINE 0
03557 #define LOG 1
03558 
03573 class Map_log : public Map_radial {
03574 
03575     // Data :
03576     // ----
03577     private:
03579     Tbl alpha ;  
03581     Tbl beta ;
03585     Itbl type_var ;
03586 
03587  public:
03593     Coord dxdlnr ;
03594 
03595  private:
03596     void set_coord() ;
03597 
03598     // Constructors, destructor : 
03599     // ------------------------
03600     public:
03613     Map_log (const Mg3d& mgrille, const Tbl& r_limits, const Itbl& typevar) ;   
03614     
03615     
03616     Map_log (const Map_log& ) ;      
03617     Map_log (const Mg3d&, FILE* ) ; 
03618 
03619     virtual ~Map_log() ;          
03620     
03624     virtual const Map_af& mp_angu(int) const ;
03625     
03627     double get_alpha (int l) const {return alpha(l) ;} ;
03629     double get_beta (int l) const {return beta(l) ;} ;
03631     int get_type (int l) const {return type_var(l) ;} ;
03632     
03640     void sol_elliptic (Param_elliptic& params, 
03641                const Scalar& so,  Scalar& uu) const ;
03642 
03643 
03655     void sol_elliptic_boundary (Param_elliptic& params, 
03656                const Scalar& so,  Scalar& uu, const Mtbl_cf& bound, 
03657                double fact_dir, double fact_neu ) const ;
03658 
03662     void sol_elliptic_boundary (Param_elliptic& params, 
03663                const Scalar& so,  Scalar& uu, const Scalar& bound, 
03664                double fact_dir, double fact_neu ) const ;
03665 
03666 
03676     void sol_elliptic_no_zec (Param_elliptic& params, 
03677                const Scalar& so,  Scalar& uu, double) const ;
03678 
03679     
03680     virtual void sauve(FILE*) const ; 
03681 
03683     virtual void operator=(const Map_af& mpa) ;
03684 
03685     
03686     virtual ostream& operator>> (ostream&) const ; 
03687 
03697     virtual double val_r (int l, double xi, double theta, double pphi) const ;
03698 
03708     virtual void val_lx (double rr, double theta, double pphi, int& l, double& xi) const ;
03709     
03719     virtual void val_lx (double rr, double theta, double pphi, const Param& par, int& l, double& xi) const ;
03720 
03721     
03722     virtual bool operator== (const Map&) const ;   
03723     
03733     virtual double val_r_jk (int l, double xi, int j, int k) const ;
03734     
03744     virtual void val_lx_jk (double rr, int j, int k, const Param& par, int& l, double& xi) const ;
03745     
03752     virtual void dsdr (const Scalar& ci, Scalar& resu) const ;
03753     
03760     virtual void dsdxi (const Scalar& ci, Scalar& resu) const ;
03761     
03770     virtual void dsdradial (const Scalar& uu, Scalar& resu) const ;
03771 
03772     virtual void homothetie (double) ; 
03773     virtual void resize (int, double) ;
03774     virtual void adapt (const Cmp&, const Param&, int) ;
03775     virtual void dsdr (const Cmp&, Cmp&) const ;
03776     virtual void dsdxi (const Cmp&, Cmp&) const ;
03777     virtual void srdsdt (const Cmp&, Cmp&) const ;
03778     virtual void srstdsdp (const Cmp&, Cmp&) const ;
03779     virtual void srdsdt (const Scalar&, Scalar&) const ;
03780     virtual void srstdsdp (const Scalar&, Scalar&) const ;
03781     virtual void dsdt (const Scalar&, Scalar&) const ;
03782     virtual void stdsdp (const Scalar&, Scalar&) const ;
03783     virtual void laplacien (const Scalar&, int, Scalar&) const ;
03784     virtual void laplacien (const Cmp&, int, Cmp&) const ;
03785     virtual void lapang (const Scalar&, Scalar&) const ;
03786     virtual Tbl* integrale (const Cmp&) const ;
03787     virtual void poisson (const Cmp&, Param&, Cmp&) const ;
03788     virtual void poisson_tau (const Cmp&, Param&, Cmp&) const ;
03789     virtual void poisson_regular (const Cmp&, int, int, double, Param&, Cmp&, Cmp&, Cmp&, 
03790                       Tenseur&, Cmp&, Cmp&) const ;
03791     virtual void poisson_angu (const Scalar&, Param&, Scalar&, double=0) const ;
03792     virtual Param* donne_para_poisson_vect (Param&, int) const ;
03793     virtual void poisson_frontiere (const Cmp&, const Valeur&, int, int, Cmp&, double = 0., double = 0.) const ;
03794     virtual void poisson_frontiere_double (const Cmp&, const Valeur&, const Valeur&, int, Cmp&) const ;
03795     virtual void poisson_interne (const Cmp&, const Valeur&, Param&, Cmp&) const ;
03796     virtual void poisson2d (const Cmp&, const Cmp&, Param&, Cmp&) const ;
03797     virtual void dalembert (Param&, Scalar&, const Scalar&, const Scalar&, const Scalar&) const ;
03798 
03799 
03800     // Building functions for the Coord's
03801     // ----------------------------------
03802     friend Mtbl* map_log_fait_r(const Map* ) ;
03803     friend Mtbl* map_log_fait_tet(const Map* ) ;
03804     friend Mtbl* map_log_fait_phi(const Map* ) ;
03805     friend Mtbl* map_log_fait_sint(const Map* ) ;
03806     friend Mtbl* map_log_fait_cost(const Map* ) ;
03807     friend Mtbl* map_log_fait_sinp(const Map* ) ;
03808     friend Mtbl* map_log_fait_cosp(const Map* ) ;
03809     
03810     friend Mtbl* map_log_fait_x(const Map* ) ;
03811     friend Mtbl* map_log_fait_y(const Map* ) ;
03812     friend Mtbl* map_log_fait_z(const Map* ) ;
03813     
03814     friend Mtbl* map_log_fait_xa(const Map* ) ;
03815     friend Mtbl* map_log_fait_ya(const Map* ) ;
03816     friend Mtbl* map_log_fait_za(const Map* ) ;
03817     
03818     friend Mtbl* map_log_fait_xsr(const Map* ) ;
03819     friend Mtbl* map_log_fait_dxdr(const Map* ) ;
03820     friend Mtbl* map_log_fait_drdt(const Map* ) ;
03821     friend Mtbl* map_log_fait_stdrdp(const Map* ) ;
03822     friend Mtbl* map_log_fait_srdrdt(const Map* ) ;
03823     friend Mtbl* map_log_fait_srstdrdp(const Map* ) ;
03824     friend Mtbl* map_log_fait_sr2drdt(const Map* ) ;
03825     friend Mtbl* map_log_fait_sr2stdrdp(const Map* ) ;
03826     friend Mtbl* map_log_fait_d2rdx2(const Map* ) ;
03827     friend Mtbl* map_log_fait_lapr_tp(const Map* ) ;
03828     friend Mtbl* map_log_fait_d2rdtdx(const Map* ) ;
03829     friend Mtbl* map_log_fait_sstd2rdpdx(const Map* ) ;
03830     friend Mtbl* map_log_fait_sr2d2rdt2(const Map* ) ;
03831     friend Mtbl* map_log_fait_dxdlnr(const Map* ) ;
03832     
03833 };
03834 
03835 Mtbl* map_log_fait_r(const Map* ) ;
03836 Mtbl* map_log_fait_tet(const Map* ) ;
03837 Mtbl* map_log_fait_phi(const Map* ) ;
03838 Mtbl* map_log_fait_sint(const Map* ) ;
03839 Mtbl* map_log_fait_cost(const Map* ) ;
03840 Mtbl* map_log_fait_sinp(const Map* ) ;
03841 Mtbl* map_log_fait_cosp(const Map* ) ;
03842 
03843 Mtbl* map_log_fait_x(const Map* ) ;
03844 Mtbl* map_log_fait_y(const Map* ) ;
03845 Mtbl* map_log_fait_z(const Map* ) ;
03846 
03847 Mtbl* map_log_fait_xa(const Map* ) ;
03848 Mtbl* map_log_fait_ya(const Map* ) ;
03849 Mtbl* map_log_fait_za(const Map* ) ;
03850 
03851 Mtbl* map_log_fait_xsr(const Map* ) ;
03852 Mtbl* map_log_fait_dxdr(const Map* ) ;
03853 Mtbl* map_log_fait_drdt(const Map* ) ;
03854 Mtbl* map_log_fait_stdrdp(const Map* ) ;
03855 Mtbl* map_log_fait_srdrdt(const Map* ) ;
03856 Mtbl* map_log_fait_srstdrdp(const Map* ) ;
03857 Mtbl* map_log_fait_sr2drdt(const Map* ) ;
03858 Mtbl* map_log_fait_sr2stdrdp(const Map* ) ;
03859 Mtbl* map_log_fait_d2rdx2(const Map* ) ;
03860 Mtbl* map_log_fait_lapr_tp(const Map* ) ;
03861 Mtbl* map_log_fait_d2rdtdx(const Map* ) ;
03862 Mtbl* map_log_fait_sstd2rdpdx(const Map* ) ;
03863 Mtbl* map_log_fait_sr2d2rdt2(const Map* ) ;
03864 
03865 Mtbl* map_log_fait_dxdlnr (const Map*) ;
03866 
03867 #endif

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