LORENE
proto.h
1/*
2 * Prototypes of non class-member functions
3 *
4 */
5
6/*
7 * Copyright (c) 1999-2000 Jean-Alain Marck
8 * Copyright (c) 1999-2001 Philippe Grandclement
9 * Copyright (c) 1999-2002 Eric Gourgoulhon
10 * Copyright (c) 2002-2003 Jerome Novak
11 *
12 * This file is part of LORENE.
13 *
14 * LORENE is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 2 of the License, or
17 * (at your option) any later version.
18 *
19 * LORENE is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with LORENE; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 *
28 */
29
30
31#ifndef __PROTO_H_
32#define __PROTO_H_
33
34
35/*
36 * $Id: proto.h,v 1.52 2021/11/24 13:12:17 g_servignat Exp $
37 * $Log: proto.h,v $
38 * Revision 1.52 2021/11/24 13:12:17 g_servignat
39 * Addition of new method mult_xm1_shell(int) to multiply by (\xi +1) in a given shell.
40 *
41 * Revision 1.51 2014/10/13 08:52:36 j_novak
42 * Lorene classes and functions now belong to the namespace Lorene.
43 *
44 * Revision 1.50 2013/06/13 14:18:18 j_novak
45 * Inclusion of new bases R_LEG, R_LEGP and R_LEGI.
46 *
47 * Revision 1.49 2013/06/06 15:31:31 j_novak
48 * Functions to compute Legendre coefficients (not fully tested yet).
49 *
50 * Revision 1.48 2013/06/05 15:06:10 j_novak
51 * Legendre bases are treated as standard bases, when the multi-grid
52 * (Mg3d) is built with BASE_LEG.
53 *
54 * Revision 1.47 2010/10/22 08:08:40 j_novak
55 * Removal of the method Star_rot_dirac::lambda_grv2() and call to the C++ version of integrale2d.
56 *
57 * Revision 1.46 2010/01/20 14:53:50 n_vasset
58 * Adding spectral cutoff functions for use in elliptic tensor equations.
59 *
60 * Revision 1.45 2009/10/23 12:55:46 j_novak
61 * New base T_LEG_MI
62 *
63 * Revision 1.44 2009/10/13 13:50:39 j_novak
64 * New base T_LEG_MP.
65 *
66 * Revision 1.43 2009/08/31 19:39:07 n_vasset
67 * removal of obsolete function get_kerr()
68 *
69 * Revision 1.42 2008/11/27 12:12:38 j_novak
70 * New function to initialize parameters for wave equation.
71 *
72 * Revision 1.41 2008/08/20 11:51:25 n_vasset
73 * new functions to solve the Kerr problem, using degenerate elliptic operators
74 *
75 * Revision 1.40 2008/08/19 06:41:59 j_novak
76 * Minor modifications to avoid warnings with gcc 4.3. Most of them concern
77 * cast-type operations, and constant strings that must be defined as const char*
78 *
79 * Revision 1.39 2008/07/18 12:28:41 j_novak
80 * Corrected some mistakes.
81 *
82 * Revision 1.38 2008/07/18 09:17:35 j_novak
83 * New function tilde_laplacian().
84 *
85 * Revision 1.37 2008/07/11 13:20:08 j_novak
86 * Miscellaneous functions for the system wave equation.
87 *
88 * Revision 1.36 2008/07/10 10:34:35 p_grandclement
89 * forgot this one
90 *
91 * Revision 1.35 2007/12/11 15:28:05 jl_cornou
92 * Jacobi(0,2) polynomials partially implemented
93 *
94 * Revision 1.34 2007/05/06 10:48:08 p_grandclement
95 * Modification of a few operators for the vorton project
96 *
97 * Revision 1.33 2007/01/23 17:08:43 j_novak
98 * New function pois_vect_r0.C to solve the l=0 part of the vector Poisson
99 * equation, which involves only the r-component.
100 *
101 * Revision 1.32 2006/04/27 09:12:29 p_grandclement
102 * First try at irrotational black holes
103 *
104 * Revision 1.31 2006/04/10 15:19:18 j_novak
105 * New definition of 1D operators dsdx and sx in the nucleus (bases R_CHEBP and
106 * R_CHEBI).
107 *
108 * Revision 1.30 2005/11/30 11:09:03 p_grandclement
109 * Changes for the Bin_ns_bh project
110 *
111 * Revision 1.29 2005/08/26 14:02:38 p_grandclement
112 * Modification of the elliptic solver that matches with an oscillatory exterior solution
113 * small correction in Poisson tau also...
114 *
115 * Revision 1.28 2005/06/09 07:56:25 f_limousin
116 * Implement a new function sol_elliptic_boundary() and
117 * Vector::poisson_boundary(...) which solve the vectorial poisson
118 * equation (method 6) with an inner boundary condition.
119 *
120 * Revision 1.27 2005/05/13 08:50:29 j_novak
121 * Added the function int1d_chebi.
122 *
123 * Revision 1.26 2005/02/16 15:04:07 m_forot
124 * Add int1D_cheb function
125 *
126 * Revision 1.25 2005/02/08 10:08:57 f_limousin
127 * Add neumann_binaire(...), dirichlet_binaire(...) and
128 * poisson_vect_binaire(...) with Scalars and Vectors in argument.
129 *
130 * Revision 1.24 2004/12/17 13:35:00 m_forot
131 * Add the case T_LEG
132 *
133 * Revision 1.23 2004/11/23 15:05:40 m_forot
134 * Added prototypes for all new functions in the case there is no
135 * symmetry in theta.
136 *
137 * Revision 1.22 2004/09/28 15:59:47 f_limousin
138 * Add function poisson_vect_boundary which is the same as
139 * poisson_vect_frontiere but for the new classes Tensor and Scalar.
140 *
141 * Revision 1.21 2004/08/24 09:14:40 p_grandclement
142 * Addition of some new operators, like Poisson in 2d... It now requieres the
143 * GSL library to work.
144 *
145 * Also, the way a variable change is stored by a Param_elliptic is changed and
146 * no longer uses Change_var but rather 2 Scalars. The codes using that feature
147 * will requiere some modification. (It should concern only the ones about monopoles)
148 *
149 * Revision 1.20 2004/06/22 08:49:57 p_grandclement
150 * Addition of everything needed for using the logarithmic mapping
151 *
152 * Revision 1.19 2004/03/17 15:58:47 p_grandclement
153 * Slight modification of sol_elliptic_no_zec
154 *
155 * Revision 1.18 2004/02/17 09:21:38 j_novak
156 * New functions for calculating values of the derivatives of a function
157 * using its Chebyshev coefficients.
158 *
159 * Revision 1.17 2004/02/11 09:47:44 p_grandclement
160 * Addition of a new elliptic solver, matching with the homogeneous solution
161 * at the outer shell and not solving in the external domain (more details
162 * coming soon ; check your local Lorene dealer...)
163 *
164 * Revision 1.16 2004/02/09 08:55:30 j_novak
165 * Corrected error in the arguments of _solp_r_chebu_cinq
166 *
167 * Revision 1.15 2004/02/06 10:53:51 j_novak
168 * New dzpuis = 5 -> dzpuis = 3 case (not ready yet).
169 *
170 * Revision 1.14 2004/01/28 16:46:22 p_grandclement
171 * Addition of the sol_elliptic_fixe_der_zero stuff
172 *
173 * Revision 1.13 2004/01/15 09:15:36 p_grandclement
174 * Modification and addition of the Helmholtz operators
175 *
176 * Revision 1.12 2003/12/11 14:48:47 p_grandclement
177 * Addition of ALL (and that is a lot !) the files needed for the general elliptic solver ... UNDER DEVELOPEMENT...
178 *
179 * Revision 1.11 2003/09/16 13:07:40 j_novak
180 * New files for coefficient trnasformation to/from the T_LEG_II base.
181 *
182 * Revision 1.10 2003/09/16 08:53:05 j_novak
183 * Addition of the T_LEG_II base (odd in theta, only for odd m) and the
184 * transformation functions from and to T_SIN_P.
185 *
186 * Revision 1.9 2003/06/18 08:45:26 j_novak
187 * In class Mg3d: added the member get_radial, returning only a radial grid
188 * For dAlembert solver: the way the coefficients of the operator are defined has been changed.
189 *
190 * Revision 1.8 2003/02/13 16:40:24 p_grandclement
191 * Addition of various things for the Bin_ns_bh project, non of them being
192 * completely tested
193 *
194 * Revision 1.7 2002/11/12 17:45:19 j_novak
195 * Added transformation function for T_COS basis.
196 *
197 * Revision 1.6 2002/09/09 13:00:39 e_gourgoulhon
198 * Modification of declaration of Fortran 77 prototypes for
199 * a better portability (in particular on IBM AIX systems):
200 * All Fortran subroutine names are now written F77_* and are
201 * defined in the new file C++/Include/proto_f77.h.
202 *
203 * Revision 1.5 2002/05/11 12:39:08 e_gourgoulhon
204 * Added declaration of som_tet_cossin_si.
205 *
206 * Revision 1.4 2002/05/05 16:24:48 e_gourgoulhon
207 * Added som_tet_cossin_sp
208 *
209 * Revision 1.3 2002/01/03 15:30:27 j_novak
210 * Some comments modified.
211 *
212 * Revision 1.2 2002/01/02 14:07:56 j_novak
213 * Dalembert equation is now solved in the shells. However, the number of
214 * points in theta and phi must be the same in each domain. The solver is not
215 * completely tested (beta version!).
216 *
217 * Revision 1.1.1.1 2001/11/20 15:19:27 e_gourgoulhon
218 * LORENE
219 *
220 * Revision 2.69 2001/05/07 09:11:26 phil
221 * *** empty log message ***
222 *
223 * Revision 2.68 2001/04/03 12:41:23 phil
224 * modification de itemax dans separation
225 *
226 * Revision 2.67 2001/03/22 10:40:13 phil
227 * modification prototypage se separation
228 *
229 * Revision 2.66 2001/03/02 10:21:26 phil
230 * *** empty log message ***
231 *
232 * Revision 2.65 2001/03/02 10:18:47 phil
233 * modif parametrage separation
234 *
235 * Revision 2.64 2001/02/28 11:23:30 phil
236 * ajout separation
237 *
238 * Revision 2.63 2001/01/29 14:30:10 phil
239 * ajout type rotation
240 *
241 * Revision 2.62 2000/12/13 15:42:14 phil
242 * ajout des trucs relatifs a Lindquist
243 *
244 * Revision 2.61 2000/12/04 13:33:28 novak
245 * *** empty log message ***
246 *
247 * Revision 2.60 2000/12/04 13:29:08 novak
248 * Added prototypes for the dalembertian
249 *
250 * Revision 2.59 2000/10/19 10:07:49 phil
251 * ajout de regle
252 *
253 * Revision 2.58 2000/10/19 09:35:44 phil
254 * *** empty log message ***
255 *
256 * Revision 2.57 2000/10/04 14:40:34 eric
257 * *** empty log message ***
258 *
259 * Revision 2.56 2000/09/29 14:02:06 eric
260 * *** empty log message ***
261 *
262 * Revision 2.55 2000/09/28 10:01:36 eric
263 * *** empty log message ***
264 *
265 * Revision 2.54 2000/09/08 16:26:26 eric
266 * *** empty log message ***
267 *
268 * Revision 2.53 2000/09/08 16:07:43 eric
269 * *** empty log message ***
270 *
271 * Revision 2.52 2000/09/07 15:07:40 eric
272 * *** empty log message ***
273 *
274 * Revision 2.51 2000/09/06 13:59:53 eric
275 * *** empty log message ***
276 *
277 * Revision 2.50 2000/06/06 12:42:55 phil
278 * ajout de Cmp division_xpun (const Cmp&,int)
279 *
280 * Revision 2.49 2000/05/22 13:33:15 phil
281 * ajout des trucs pour poisson avec dzpuis == 3
282 *
283 * Revision 2.48 2000/04/03 17:01:01 phil
284 * ajout de sxpun_1d
285 *
286 * Revision 2.47 2000/03/16 16:28:30 phil
287 * *** empty log message ***
288 *
289 * Revision 2.46 2000/03/09 13:52:55 phil
290 * *** empty log message ***
291 *
292 * Revision 2.45 2000/03/09 13:42:34 phil
293 * vire les trucs relatifs a Poisson compacts
294 *
295 * Revision 2.44 2000/03/06 10:27:07 eric
296 * Ajout des protos som_*_symy et som_*_asymy.
297 *
298 * Revision 2.43 2000/01/20 14:07:59 phil
299 * vire poisson_vect et xksk
300 *
301 * Revision 2.42 1999/12/15 09:41:52 eric
302 * *** empty log message ***
303 *
304 *
305 * $Header: /cvsroot/Lorene/C++/Include/proto.h,v 1.52 2021/11/24 13:12:17 g_servignat Exp $
306 *
307 */
308
309namespace Lorene {
310class Param ;
311class Tbl ;
312class Mtbl ;
313class Mtbl_cf ;
314class Map_af ;
315class Matrice ;
316class Valeur ;
317class Base_val ;
318class Cmp ;
319class Tenseur ;
320class Scalar ;
321class Tensor ;
322class Sym_tensor ;
323class Vector ;
324class Param_elliptic ;
325
326
327// Routines calcul de coefficients
328// -------------------------------
329double* cheb_ini(const int) ;
330double* chebimp_ini(const int) ;
331void four1d(const int, double* ) ;
332void chebyf1d(const int, double* ) ;
333void chebyr1d(const int, double* ) ;
334void cfpcossin(const int* ,const int* , double* ) ;
335void cfpcossini(const int* ,const int* , double* ) ;
336void cftcos(const int*, const int*, double*, const int*, double*) ;
337void cftsin(const int*, const int*, double*, const int*, double*) ;
338void cftcosp(const int*, const int*, double*, const int*, double*) ;
339void cftcosi(const int*, const int*, double*, const int*, double*) ;
340void cftsinp(const int*, const int*, double*, const int*, double*) ;
341void cftsini(const int*, const int*, double*, const int*, double*) ;
342void cftcossincp(const int*, const int*, double*, const int*, double*) ;
343void cftcossinsi(const int*, const int*, double*, const int*, double*) ;
344void cftcossinsp(const int*, const int*, double*, const int*, double*) ;
345void cftcossinci(const int*, const int*, double*, const int*, double*) ;
346void cftcossins(const int*, const int*, double*, const int*, double*) ;
347void cftcossinc(const int*, const int*, double*, const int*, double*) ;
348void cftleg(const int*, const int*, double*, const int*, double*) ;
349void cftlegmp(const int*, const int*, double*, const int*, double*) ;
350void cftlegmi(const int*, const int*, double*, const int*, double*) ;
351void cftlegp(const int*, const int*, double*, const int*, double*) ;
352void cftlegpp(const int*, const int*, double*, const int*, double*) ;
353void cftlegi(const int*, const int*, double*, const int*, double*) ;
354void cftlegip(const int*, const int*, double*, const int*, double*) ;
355void cftlegpi(const int*, const int*, double*, const int*, double*) ;
356void cftlegii(const int*, const int*, double*, const int*, double*) ;
357void cfrcheb(const int*, const int*, double*, const int*, double*) ;
358void cfrchebp(const int*, const int*, double*, const int*, double*) ;
359void cfrchebi(const int*, const int*, double*, const int*, double*) ;
360void cfrchebpimp(const int*, const int*, double*, const int*, double*) ;
361void cfrchebpimi(const int*, const int*, double*, const int*, double*) ;
362void cfrchebpip(const int*, const int*, double*, const int*, double*) ;
363void cfrchebpii(const int*, const int*, double*, const int*, double*) ;
364void cipcossin(const int* , const int* , const int* , double* , double* ) ;
365void cipcossini(const int* , const int* , const int* , double* , double* ) ;
366void citcos(const int*, const int*, double*, const int*, double*) ;
367void citcosp(const int*, const int*, double*, const int*, double*) ;
368void citcosi(const int*, const int*, double*, const int*, double*) ;
369void citsinp(const int*, const int*, double*, const int*, double*) ;
370void citsini(const int*, const int*, double*, const int*, double*) ;
371void citcossincp(const int*, const int*, double*, const int*, double*) ;
372void citcossinsi(const int*, const int*, double*, const int*, double*) ;
373void citcossinsp(const int*, const int*, double*, const int*, double*) ;
374void citcossinci(const int*, const int*, double*, const int*, double*) ;
375void citcossins(const int*, const int*, double*, const int*, double*) ;
376void citcossinc(const int*, const int*, double*, const int*, double*) ;
377void citleg(const int*, const int*, double*, const int*, double*) ;
378void citlegmp(const int*, const int*, double*, const int*, double*) ;
379void citlegmi(const int*, const int*, double*, const int*, double*) ;
380void citlegp(const int*, const int*, double*, const int*, double*) ;
381void citlegpp(const int*, const int*, double*, const int*, double*) ;
382void citlegi(const int*, const int*, double*, const int*, double*) ;
383void citlegip(const int*, const int*, double*, const int*, double*) ;
384void citlegpi(const int*, const int*, double*, const int*, double*) ;
385void citlegii(const int*, const int*, double*, const int*, double*) ;
386void circheb(const int*, const int*, double*, const int*, double*) ;
387void circhebp(const int*, const int*, double*, const int*, double*) ;
388void circhebi(const int*, const int*, double*, const int*, double*) ;
389void cirleg(const int*, const int*, double*, const int*, double*) ;
390void cirlegp(const int*, const int*, double*, const int*, double*) ;
391void cirlegi(const int*, const int*, double*, const int*, double*) ;
392void circhebpimp(const int*, const int*, double*, const int*, double*) ;
393void circhebpimi(const int*, const int*, double*, const int*, double*) ;
394void circhebpip(const int*, const int*, double*, const int*, double*) ;
395void circhebpii(const int*, const int*, double*, const int*, double*) ;
396double* legendre(int , int ) ;
397double* legendre_norm(int , int ) ;
398double* mat_cossincp_legp(int, int) ;
399double* mat_cossinci_legi(int, int) ;
400double* mat_cossinc_leg(int, int) ;
401double* mat_cosp_legpp(int, int) ;
402double* mat_cosi_legip(int, int) ;
403double* mat_sini_legpi(int, int) ;
404double* mat_sinp_legii(int, int) ;
405double* mat_cos_legmp(int, int) ;
406double* mat_sin_legmi(int, int) ;
407double* mat_legp_cossincp(int, int) ;
408double* mat_legi_cossinci(int, int) ;
409double* mat_leg_cossinc(int, int) ;
410double* mat_legpp_cosp(int, int) ;
411double* mat_legip_cosi(int, int) ;
412double* mat_legpi_sini(int, int) ;
413double* mat_legii_sinp(int, int) ;
414double* mat_legmp_cos(int, int) ;
415double* mat_legmi_sin(int, int) ;
416void chb_cossincp_legp(const int* , const double* , double* ) ;
417void chb_legp_cossincp(const int* , const double* , double* ) ;
418void chb_cossinc_leg(const int* , const double* , double* ) ;
419void chb_leg_cossinc(const int* , const double* , double* ) ;
420void chb_cosp_legpp(const int* , const double* , double* ) ;
421void chb_legpp_cosp(const int* , const double* , double* ) ;
422void chb_cosi_legip(const int* , const double* , double* ) ;
423void chb_legip_cosi(const int* , const double* , double* ) ;
424void chb_sini_legpi(const int* , const double* , double* ) ;
425void chb_legpi_sini(const int* , const double* , double* ) ;
426void chb_cossinci_legi(const int* , const double* , double* ) ;
427void chb_legi_cossinci(const int* , const double* , double* ) ;
428void chb_sinp_legii(const int* , const double* , double* ) ;
429void chb_legii_sinp(const int* , const double* , double* ) ;
430void chb_cos_legmp(const int* , const double* , double* ) ;
431void chb_legmp_cos(const int* , const double* , double* ) ;
432void chb_sin_legmi(const int* , const double* , double* ) ;
433void chb_legmi_sin(const int* , const double* , double* ) ;
434
435double int1d_chebp(int, const double* ) ;
436double int1d_chebi(int, const double* ) ;
437double int1d_cheb(int, const double* ) ;
438
439//Routines Legendre en r
440void cirleg(const int*, const int*, double*, const int*, double*) ;
441void cirlegp(const int*, const int*, double*, const int*, double*) ;
442void cirlegi(const int*, const int*, double*, const int*, double*) ;
443void cfrleg(const int*, const int*, double*, const int*, double*) ;
444void cfrlegp(const int*, const int*, double*, const int*, double*) ;
445void cfrlegi(const int*, const int*, double*, const int*, double*) ;
446void legendre_collocation_points(int, double*) ;
447
448// Routines Jacobi
449double* jacobi(int, double) ;
450double* pointsgausslobatto(int) ;
451Tbl jacobipointsgl(int) ;
452double* coeffjaco(int, double*) ;
453void cfrjaco02(const int*, const int*, double*, const int*, double*);
454
455// Routines calcul de coef inverse
456void cipcossin(const int* , const int* , const int* , double* , double* ) ;
457void citcosp(const int*, const int*, double*, const int*, double*) ;
458void citcosi(const int*, const int*, double*, const int*, double*) ;
459void citcos(const int*, const int*, double*, const int*, double*) ;
460void citsin(const int*, const int*, double*, const int*, double*) ;
461void citsinp(const int*, const int*, double*, const int*, double*) ;
462void citsini(const int*, const int*, double*, const int*, double*) ;
463void citcossincp(const int*, const int*, double*, const int*, double*) ;
464void citcossinsi(const int*, const int*, double*, const int*, double*) ;
465void citcossinsp(const int*, const int*, double*, const int*, double*) ;
466void citcossinci(const int*, const int*, double*, const int*, double*) ;
467void citcossins(const int*, const int*, double*, const int*, double*) ;
468void citcossinc(const int*, const int*, double*, const int*, double*) ;
469void citlegp(const int*, const int*, double*, const int*, double*) ;
470void citlegpp(const int*, const int*, double*, const int*, double*) ;
471void citlegi(const int*, const int*, double*, const int*, double*) ;
472void circheb(const int*, const int*, double*, const int*, double*) ;
473void circhebp(const int*, const int*, double*, const int*, double*) ;
474void circhebi(const int*, const int*, double*, const int*, double*) ;
475void circhebpimp(const int*, const int*, double*, const int*, double*) ;
476void circhebpimi(const int*, const int*, double*, const int*, double*) ;
477void cirjaco02(const int*, const int*, double* , const int*, double*) ;
478
479// Routines calculant la matrice du laplacien
480Matrice _laplacien_mat_pas_prevu(int, int, double, int) ;
481Matrice _laplacien_mat_r_chebp(int, int, double, int) ;
482Matrice _laplacien_mat_r_chebi(int, int, double, int) ;
483Matrice _laplacien_mat_r_chebu(int, int, double, int) ;
484Matrice _laplacien_mat_r_chebu_deux(int, int) ;
485Matrice _laplacien_mat_r_chebu_trois(int, int) ;
486Matrice _laplacien_mat_r_chebu_quatre(int, int) ;
487Matrice _laplacien_mat_r_chebu_cinq(int, int) ;
488Matrice _laplacien_mat_r_cheb(int, int, double, int) ;
489Matrice laplacien_mat(int , int , double , int, int ) ;
490
491//Routines de passage a bande versions Matrice et Tbl
492Matrice _cl_pas_prevu (const Matrice&, int, double, int) ;
493Matrice _cl_r_cheb (const Matrice&, int, double, int) ;
494Matrice _cl_r_chebi (const Matrice&, int, double, int) ;
495Matrice _cl_r_chebu (const Matrice&, int, double, int) ;
496Matrice _cl_r_chebu_cinq (const Matrice&, int) ;
497Matrice _cl_r_chebu_quatre (const Matrice&, int) ;
498Matrice _cl_r_chebu_trois (const Matrice&, int) ;
499Matrice _cl_r_chebu_deux (const Matrice&, int) ;
500Matrice _cl_r_chebp (const Matrice&, int, double, int) ;
501Matrice combinaison (const Matrice&, int, double, int, int) ;
502
503Tbl _cl_pas_prevu (const Tbl&, int) ;
504Tbl _cl_r_cheb (const Tbl&, int) ;
505Tbl _cl_r_chebi (const Tbl&, int) ;
506Tbl _cl_r_chebu (const Tbl&, int) ;
507Tbl _cl_r_chebu_deux (const Tbl&) ;
508Tbl _cl_r_chebu_trois (const Tbl&) ;
509Tbl _cl_r_chebu_quatre (const Tbl&) ;
510Tbl _cl_r_chebu_cinq (const Tbl&) ;
511Tbl _cl_r_chebp (const Tbl&, int) ;
512Tbl combinaison (const Tbl&, int, int) ;
513
514
515// Routines de preparation du laplacien inversible
516Matrice _prepa_nondege_pas_prevu(const Matrice &, int , double, int) ;
517Matrice _prepa_nondege_r_cheb (const Matrice&, int, double, int) ;
518Matrice _prepa_nondege_r_chebp (const Matrice&, int, double, int) ;
519Matrice _prepa_nondege_r_chebi (const Matrice&, int, double, int) ;
520Matrice _prepa_nondege_r_chebu (const Matrice&, int, double, int) ;
521Matrice _prepa_nondege_r_chebu_deux (const Matrice&, int) ;
522Matrice _prepa_nondege_r_chebu_trois (const Matrice&, int) ;
523Matrice _prepa_nondege_r_chebu_quatre (const Matrice&, int) ;
524Matrice _prepa_nondege_r_chebu_cinq (const Matrice&, int) ;
525Matrice prepa_nondege (const Matrice&, int, double, int, int) ;
526
527//Routines de calcul de la solution particuliere
528Tbl _solp_pas_prevu(const Matrice&, const Matrice&, double, double, const Tbl&, int) ;
529Tbl _solp_r_cheb (const Matrice&, const Matrice&, double, double, const Tbl&, int) ;
530Tbl _solp_r_chebp (const Matrice&, const Matrice&, double, double, const Tbl&, int) ;
531Tbl _solp_r_chebi (const Matrice&, const Matrice&, double, double, const Tbl&, int) ;
532Tbl _solp_r_chebu (const Matrice&, const Matrice&, double, double, const Tbl&, int) ;
533Tbl _solp_r_chebu_deux (const Matrice&, const Matrice&, const Tbl&) ;
534Tbl _solp_r_chebu_trois (const Matrice&, const Matrice&, double, const Tbl&) ;
535Tbl _solp_r_chebu_quatre (const Matrice&, const Matrice&, double, const Tbl&) ;
536Tbl _solp_r_chebu_cinq (const Matrice&, const Matrice&, const Tbl&) ;
537Tbl solp (const Matrice&, const Matrice&, double, double, const Tbl&, int, int) ;
538
539//Routines de calcul des solutions homogenes
540Tbl _solh_pas_prevu (int, int, double) ;
541Tbl _solh_r_cheb (int, int, double) ;
542Tbl _solh_r_chebp (int, int, double) ;
543Tbl _solh_r_chebi (int, int, double) ;
544Tbl _solh_r_chebu (int, int, double) ;
545Tbl solh (int, int, double, int) ;
546
547// Routines helmholtz minus :
548Matrice helmholtz_minus_mat(int , int, double , double , double, int ) ;
549Matrice cl_helmholtz_minus (const Matrice&, int) ;
550Tbl cl_helmholtz_minus (const Tbl&, int) ;
551Matrice prepa_helmholtz_minus_nondege (const Matrice&, int) ;
552Tbl solp_helmholtz_minus (const Matrice&, const Matrice&, const Tbl&,
553 double, double, int, int) ;
554Tbl solh_helmholtz_minus (int, int, double, double, double, int) ;
555
556// Routines helmholtz plus :
557Matrice helmholtz_plus_mat(int , int, double , double , double, int ) ;
558Matrice cl_helmholtz_plus (const Matrice&, int) ;
559Tbl cl_helmholtz_plus (const Tbl&, int) ;
560Matrice prepa_helmholtz_plus_nondege (const Matrice&, int) ;
561Tbl solp_helmholtz_plus (const Matrice&, const Matrice&, const Tbl&,
562 double, double, int) ;
563Tbl solh_helmholtz_plus (int, int, double, double, double, int) ;
564
565
566//Routines de calcul des valeurs limites
567Tbl val_solh (int, double, double, int) ;
568Tbl val_solp (const Tbl&, double, int) ;
569
570double val1_dern_1d (int, const Tbl&, int) ;
571double valm1_dern_1d (int, const Tbl&, int) ;
572
573
574//Routines de derivations version 1d
575void _d2sdx2_1d_pas_prevu(int, double*, double* ) ;
576void _d2sdx2_1d_r_chebu(int, double*, double* ) ;
577void _d2sdx2_1d_r_cheb(int, double*, double* ) ;
578void _d2sdx2_1d_r_chebp(int, double*, double* ) ;
579void _d2sdx2_1d_r_chebi(int, double*, double * ) ;
580void d2sdx2_1d(int, double** , int) ;
581
582void _dsdx_1d_pas_prevu(int, double*, double* ) ;
583void _dsdx_1d_r_chebu(int, double*, double* ) ;
584void _dsdx_1d_r_chebp(int, double*, double* ) ;
585void _dsdx_1d_r_chebi(int, double*, double* ) ;
586void dsdx_1d(int, double** , int) ;
587
588void _multx_1d_pas_prevu(int, double*, double* ) ;
589void _multx_1d_r_cheb(int, double*, double* ) ;
590void multx_1d(int, double **, int) ;
591void multxpun_1d(int, double **, int) ;
592
593void _sx_1d_pas_prevu(int, double*, double* ) ;
594void _sx_1d_r_chebi(int, double*, double* ) ;
595void _sx_1d_r_chebp(int, double*, double* ) ;
596void sx_1d(int, double **, int) ;
597
598void _sx2_1d_pas_prevu(int, double*, double*) ;
599void _sx2_1d_identite(int, double*, double*) ;
600void _sx2_1d_r_chebp(int, double*, double*) ;
601void _sx2_1d_r_chebi(int, double*, double*) ;
602void _sxm12_1d_r_chebu(int, double *, double*) ;
603void sx2_1d(int, double**, int) ;
604
605void _sxdsdx_1d_pas_prevu(int, double*, double*) ;
606void _dsdx_1d_r_cheb(int, double*, double*) ;
607void _sxdsdx_1d_r_chebi(int, double*, double*) ;
608void _sxdsdx_1d_r_chebp(int, double*, double*) ;
609void sxdsdx_1d(int, double** , int) ;
610
611//Routines de derivations (pour sol_dalembert)
612void _dsdx_r_chebp(Tbl *, int &) ;
613void _dsdx_r_chebi(Tbl *, int &) ;
614
615// Resolution de l'equation de Poisson
616int nullite_plm_sym (int, int, int, int) ;
617int nullite_plm_nonsym (int, int, int, int) ;
618int nullite_plm_nonsym_anti (int, int, int, int) ;
619int nullite_plm (int, int, int, int, Base_val) ;
620
621void donne_lm_sym (int, int, int, int, int&, int&, int&) ;
622void donne_lm_nonsym (int, int, int, int, int&, int&, int&) ;
623void donne_lm_nonsym_anti (int, int, int, int, int&, int&, int&) ;
624void donne_lm (int, int, int, int, Base_val, int&, int&, int&) ;
625
626
627// Les sommations en r :
628void som_r_pas_prevu
629 (double*, const int, const int, const int, const double, double*) ;
630void som_r_cheb
631 (double*, const int, const int, const int, const double, double*) ;
632void som_r_chebi
633 (double*, const int, const int, const int, const double, double*) ;
634void som_r_chebp
635 (double*, const int, const int, const int, const double, double*) ;
636void som_r_chebu
637 (double*, const int, const int, const int, const double, double*) ;
638void som_r_chebpim_p
639 (double*, const int, const int, const int, const double, double*) ;
640void som_r_chebpim_i
641 (double*, const int, const int, const int, const double, double*) ;
642void som_r_chebpi_p
643 (double*, const int, const int, const int, const double, double*) ;
644void som_r_chebpi_i
645 (double*, const int, const int, const int, const double, double*) ;
646void som_r_cheb_symy
647 (double*, const int, const int, const int, const double, double*) ;
648void som_r_chebu_symy
649 (double*, const int, const int, const int, const double, double*) ;
650void som_r_chebpim_p_symy
651 (double*, const int, const int, const int, const double, double*) ;
652void som_r_chebpim_i_symy
653 (double*, const int, const int, const int, const double, double*) ;
654void som_r_cheb_asymy
655 (double*, const int, const int, const int, const double, double*) ;
656void som_r_chebu_asymy
657 (double*, const int, const int, const int, const double, double*) ;
658void som_r_chebpim_p_asymy
659 (double*, const int, const int, const int, const double, double*) ;
660void som_r_chebpim_i_asymy
661 (double*, const int, const int, const int, const double, double*) ;
662void som_r_leg
663 (double*, const int, const int, const int, const double, double*) ;
664void som_r_legi
665 (double*, const int, const int, const int, const double, double*) ;
666void som_r_legp
667 (double*, const int, const int, const int, const double, double*) ;
668void som_r_jaco02
669 (double*, const int, const int, const int, const double, double*) ;
670
671// Les sommations en theta :
672void som_tet_pas_prevu
673 (double*, const int, const int, const double, double*) ;
674void som_tet_cos
675 (double*, const int, const int, const double, double* ) ;
676void som_tet_cos_p
677 (double*, const int, const int, const double, double* ) ;
678void som_tet_cos_i
679 (double*, const int, const int, const double, double* ) ;
680void som_tet_sin
681 (double*, const int, const int, const double, double* ) ;
682void som_tet_sin_p
683 (double*, const int, const int, const double, double* ) ;
684void som_tet_sin_i
685 (double*, const int, const int, const double, double* ) ;
686void som_tet_cossin_cp
687 (double*, const int, const int, const double, double* ) ;
688void som_tet_cossin_ci
689 (double*, const int, const int, const double, double* ) ;
690void som_tet_cossin_c
691 (double*, const int, const int, const double, double* ) ;
692void som_tet_cossin_s
693 (double*, const int, const int, const double, double* ) ;
694void som_tet_cossin_sp
695 (double*, const int, const int, const double, double* ) ;
696void som_tet_cossin_si
697 (double*, const int, const int, const double, double* ) ;
698void som_tet_cossin_cp_symy
699 (double*, const int, const int, const double, double* ) ;
700void som_tet_cossin_ci_symy
701 (double*, const int, const int, const double, double* ) ;
702void som_tet_cossin_cp_asymy
703 (double*, const int, const int, const double, double* ) ;
704void som_tet_cossin_ci_asymy
705 (double*, const int, const int, const double, double* ) ;
706
707// Les sommations en phi :
708void som_phi_pas_prevu
709 (double*, const int, const double, double* ) ;
710void som_phi_cossin
711 (double*, const int, const double, double* ) ;
712void som_phi_cossin_p
713 (double*, const int, const double, double* ) ;
714void som_phi_cossin_i
715 (double*, const int, const double, double* ) ;
716void som_phi_cossin_symy
717 (double*, const int, const double, double* ) ;
718void som_phi_cossin_asymy
719 (double*, const int, const double, double* ) ;
720
721// les divisions et multiplications par x-1 :
722void sxm1_1d_cheb(int, double*) ;
723void mult_xm1_1d_cheb(int, const double*, double*) ;
724void mult2_xm1_1d_cheb(int, const double*, double*) ;
725
726// Multiplication par x+1
727void mult_xp1_1d_cheb(int, const double*, double*) ;
728
729// x * dsdx ...
730void _xdsdx_1d_pas_prevu (int, double*, double*) ;
731void _xdsdx_1d_r_cheb (int, double*, double*) ;
732void _xdsdx_1d_r_chebp (int, double*, double*) ;
733void _xdsdx_1d_r_chebi (int, double*, double*) ;
734void xdsdx_1d(int, double**, int) ;
735
736// Multiplication par x^2
737void multx2_1d(int, double **, int) ;
738void _multx2_1d_r_cheb(int, double* , double *);
739void _multx2_1d_r_chebp(int, double* , double *);
740void _multx2_1d_r_chebi(int, double* , double *);
741void _multx2_1d_pas_prevu(int, double* , double *);
742
743// division par (x+1)
744void sxpun_1d(int, double **, int) ;
745void _sxpun_1d_r_cheb(int, double* , double *);
746void _sxpun_1d_pas_prevu(int, double* , double *);
747Cmp division_xpun (const Cmp&, int) ;
748
749// Fonctions liees a la resolution des l'equation des ondes
750void get_operateur_dal(const Param&, const int&, const int&,
751 int&, Matrice& );
752Tbl dal_inverse(const int&, const int&, const Matrice&, const Tbl&,
753 const bool) ;
754Mtbl_cf sol_dalembert(Param&, const Map_af&, const Mtbl_cf&) ;
755
756void runge_kutta3_wave_sys(double, const Scalar&, const Scalar&, Scalar& , Scalar&, int dl=0 ) ;
757void evolve_outgoing_BC(double, int, const Scalar&, Scalar&, Tbl&, Tbl&, Tbl&, int dl=0) ;
758void tilde_laplacian(const Scalar& B_in, Scalar& tilde_lap, int dl=-1) ;
759void initialize_outgoing_BC(int, const Scalar& , const Scalar& , Tbl&) ;
760
761// Fonctions liees aux operateurs elliptiques degeneres: obtention d'espaces-temps de type Kerr
762void tensorelliptic ( Scalar source, Scalar& resu, double fitd1, double fit2d1, double fit0d2 = 0., double fit1d2 = 0., double fit0d3 = 0., double fit1d3 = 0.);
763 void tensorellipticBt ( Scalar source, Scalar& resu, double fitd1, double fit2d1, double fit0d2 = 0., double fit1d2 = 0., double fit0d3 = 0., double fit1d3 = 0.);
764void tensorellipticCt ( Scalar source, Scalar& resu, double fitd1, double fit2d1, double fit0d2, double fit1d2, double fit0d3, double fit1d3);
765
766 Sym_tensor secmembre_kerr ( const Sym_tensor& hij, const Sym_tensor& aa,const Scalar& nn,const Scalar& ppsi,const Vector& bb);
767
768 Sym_tensor boundfree_tensBC( Sym_tensor source, Vector Beta, Scalar Psi, Scalar Nn, Sym_tensor hij_guess, double precision , int loopmax = 250) ;
769
770// Trucs utilises pour poisson_compact :
771Matrice lap_cpt_mat(int, int, int) ;
772Matrice xdsdx_mat(int, int, int) ;
773Matrice combinaison_cpt (const Matrice &, int, int) ;
774Tbl combinaison_cpt (const Tbl &, int) ;
775
776// Trucs binaires :
777void dirichlet_binaire (const Cmp& source_un, const Cmp& source_deux,
778 const Valeur& boundary_un, const Valeur& boundary_deux,
779 Cmp& sol_un, Cmp& sol_deux, int num_front,
780 double precision) ;
781void dirichlet_binaire (const Cmp& source_un, const Cmp& source_deux,
782 double bound_un, double bound_deux,
783 Cmp& sol_un, Cmp& sol_deux, int num_front,
784 double precision) ;
785void dirichlet_binaire (const Scalar& source_un, const Scalar& source_deux,
786 const Valeur& boundary_un, const Valeur& boundary_deux,
787 Scalar& sol_un, Scalar& sol_deux, int num_front,
788 double precision) ;
789
790void neumann_binaire (const Cmp& source_un, const Cmp& source_deux,
791 const Valeur& boundary_un, const Valeur& boundary_deux,
792 Cmp& sol_un, Cmp& sol_deux, int num_front,
793 double precision) ;
794void neumann_binaire (const Cmp& source_un, const Cmp& source_deux,
795 double bound_un, double bound_deux,
796 Cmp& sol_un, Cmp& sol_deux, int num_front,
797 double precision) ;
798void neumann_binaire (const Scalar& source_un, const Scalar& source_deux,
799 const Valeur& boundary_un, const Valeur& boundary_deux,
800 Scalar& sol_un, Scalar& sol_deux, int num_front,
801 double precision) ;
802
803void poisson_vect_frontiere (double lambda, const Tenseur& source, Tenseur& shift,
804 const Valeur& lim_x, const Valeur& lim_y, const Valeur& lim_z,
805 int num_front, double precision, int itermax) ;
806void poisson_vect_boundary (double lambda, const Vector& source, Vector& shift,
807 const Valeur& lim_x, const Valeur& lim_y, const Valeur& lim_z,
808 int num_front, double precision, int itermax) ;
809
810void poisson_vect_binaire ( double lambda,
811 const Tenseur& source_un, const Tenseur& source_deux,
812 const Valeur& bound_x_un, const Valeur& bound_y_un,
813 const Valeur& bound_z_un, const Valeur& bound_x_deux,
814 const Valeur& bound_y_deux, const Valeur& bound_z_deux,
815 Tenseur& sol_un, Tenseur& sol_deux, int num_front, double precision) ;
816void poisson_vect_binaire ( double lambda,
817 const Vector& source_un, const Vector& source_deux,
818 const Valeur& bound_x_un, const Valeur& bound_y_un,
819 const Valeur& bound_z_un, const Valeur& bound_x_deux,
820 const Valeur& bound_y_deux, const Valeur& bound_z_deux,
821 Vector& sol_un, Vector& sol_deux, int num_front, double precision) ;
822
823// Elliptic solvers :
824Mtbl_cf elliptic_solver (const Param_elliptic&, const Mtbl_cf&) ;
825
826Mtbl_cf elliptic_solver_boundary (const Param_elliptic& ope_var, const Mtbl_cf& source, const Mtbl_cf& bound, double fact_dir, double fact_neu ) ;
827
828Mtbl_cf elliptic_solver_no_zec (const Param_elliptic&, const Mtbl_cf&,
829 double val) ;
830Mtbl_cf elliptic_solver_only_zec (const Param_elliptic&, const Mtbl_cf&,
831 double val) ;
832Mtbl_cf elliptic_solver_sin_zec (const Param_elliptic&, const Mtbl_cf&, double*, double*) ;
833Mtbl_cf elliptic_solver_fixe_der_zero (double,
834 const Param_elliptic&,
835 const Mtbl_cf&) ;
836
837// Integrale 2D pour les etoiles en rotation
838double integrale2d(const Scalar&) ;
839
840// Solution de la composante r de Poisson vectoriel, pour l=0 uniquement
841Scalar pois_vect_r0(const Scalar& ) ;
842
843// Regularisation du shift :
844double regle (Tenseur& shift_auto, const Tenseur& shift_comp, double omega, double) ;
845
846// Trucs pour la solution de Misner-Lindquist
847double serie_lindquist_plus (double rayon, double distance, double xa, double ya,
848 double za, double precision, double itemax) ;
849
850double serie_lindquist_moins (double rayon, double distance, double xa, double ya,
851 double za, double precision, double itemax) ;
852
853double adm_serie (double rayon, double distance, double precision) ;
854
855double bare_serie (double rayon, double distance, double precision) ;
856
857void set_lindquist (Cmp& psi_un, Cmp& psi_deux, double rayon, double precision) ;
858
859void separation (const Cmp& c1, const Cmp& c2, Cmp& res1, Cmp& res2, int decrois,
860 int puiss, int lmax, double precision, const double relax = 0.5, const int itemax = 100, const int flag = 1) ;
861
862// Spectral cutoff used in tensor elliptic solvers, and solving for stationary black hole spacetimes
863
864void coupe_l_tous( Sym_tensor& hij,Sym_tensor& aa, Scalar& nn,Scalar& ppsi, Vector& bb, int ntt, int cutoff);
865void tensor_coupe_l( Sym_tensor& ten, int ntt, int cutoff);
866
867
868}
869#endif
Bases of the spectral expansions.
Definition base_val.h:325
Component of a tensorial field *** DEPRECATED : use class Scalar instead ***.
Definition cmp.h:446
Affine radial mapping.
Definition map.h:2042
Matrix handling.
Definition matrice.h:152
Coefficients storage for the multi-domain spectral method.
Definition mtbl_cf.h:196
Multi-domain array.
Definition mtbl.h:118
This class contains the parameters needed to call the general elliptic solver.
Parameter storage.
Definition param.h:125
Tensor field of valence 0 (or component of a tensorial field).
Definition scalar.h:393
Class intended to describe valence-2 symmetric tensors.
Definition sym_tensor.h:226
Basic array class.
Definition tbl.h:161
Tensor handling *** DEPRECATED : use class Tensor instead ***.
Definition tenseur.h:304
Tensor handling.
Definition tensor.h:294
Values and coefficients of a (real-value) function.
Definition valeur.h:297
Tensor field of valence 1.
Definition vector.h:188
Lorene prototypes.
Definition app_hor.h:67
Coord xa
Absolute x coordinate.
Definition map.h:742
Coord za
Absolute z coordinate.
Definition map.h:744
Coord ya
Absolute y coordinate.
Definition map.h:743