120#include "utilitaires.h"
130 assert ((relax >0) && (relax<=1)) ;
132 cout <<
"-----------------------------------------------" << endl ;
133 cout <<
"Resolution LAPSE" << endl ;
159 source_un =
hole1.get_psi4()*(
hole1.nn*( aa_quad_un + 0.3333333333333333 *
175 derive_cov(
hole1.ff), 0)
177 .derive_cov(
hole1.ff), 0, 1 ) ;
181 source_un += tmp_un ;
196 source_deux =
hole2.get_psi4()*(
hole2.nn*( aa_quad_deux + 0.3333333333333333
211 derive_cov(
hole2.ff), 0)
213 .derive_cov(
hole2.ff), 0, 1 ) ;
217 source_deux += tmp_deux ;
219 cout <<
"source lapse" << endl <<
norme(source_un) << endl ;
234 lim_un =
hole1.boundary_nn_Dir(lim_nn) ;
235 lim_deux =
hole2.boundary_nn_Dir(lim_nn) ;
237 n_un_temp = n_un_temp - 1./2. ;
238 n_deux_temp = n_deux_temp - 1./2. ;
240 dirichlet_binaire (source_un, source_deux, lim_un, lim_deux,
241 n_un_temp, n_deux_temp, 0, precision) ;
247 lim_un =
hole1.boundary_nn_Neu(lim_nn) ;
248 lim_deux =
hole2.boundary_nn_Neu(lim_nn) ;
250 neumann_binaire (source_un, source_deux, lim_un, lim_deux,
251 n_un_temp, n_deux_temp, 0, precision) ;
256 cout <<
"Unexpected type of boundary conditions for the lapse!"
258 <<
" bound_nn = " << bound_nn << endl ;
265 n_un_temp = n_un_temp + 1./2. ;
266 n_deux_temp = n_deux_temp + 1./2. ;
274 int nz =
hole1.mp.get_mg()->get_nzone() ;
275 cout <<
"lapse auto" << endl <<
norme (n_un_temp) << endl ;
279 "Relative error in the resolution of the equation for the lapse : "
281 for (
int l=0; l<nz; l++) {
282 cout << tdiff_nn(l) <<
" " ;
289 n_un_temp = relax*n_un_temp + (1-relax)*lapse_un_old ;
290 n_deux_temp = relax*n_deux_temp + (1-relax)*lapse_deux_old ;
292 hole1.n_auto = n_un_temp ;
293 hole2.n_auto = n_deux_temp ;
306 assert ((relax>0) && (relax<=1)) ;
308 cout <<
"-----------------------------------------------" << endl ;
309 cout <<
"Resolution PSI" << endl ;
337 tmp_un = 0.125*
hole1.psi_auto * (
hole1.tgam).ricci_scal()
339 .derive_cov(
hole1.ff), 0, 1 ) ;
343 .derive_cov(
hole1.ff), 0) ;
345 source_un = tmp_un -
hole1.psi*
hole1.get_psi4()* ( 0.125* aa_quad_un
366 tmp_deux = 0.125*
hole2.psi_auto * (
hole2.tgam).ricci_scal()
368 .derive_cov(
hole2.ff), 0, 1 ) ;
372 .derive_cov(
hole2.ff), 0) ;
374 source_deux = tmp_deux -
hole2.psi*
hole2.get_psi4()* ( 0.125* aa_quad_deux
379 cout <<
"source psi" << endl <<
norme(source_un) << endl ;
394 lim_un =
hole1.boundary_psi_app_hor() ;
395 lim_deux =
hole2.boundary_psi_app_hor() ;
397 neumann_binaire (source_un, source_deux, lim_un, lim_deux,
398 psi_un_temp, psi_deux_temp, 0, precision) ;
403 cout <<
"Unexpected type of boundary conditions for psi!"
405 <<
" bound_psi = " << bound_psi << endl ;
412 psi_un_temp = psi_un_temp + 1./2. ;
413 psi_deux_temp = psi_deux_temp + 1./2. ;
421 int nz =
hole1.mp.get_mg()->get_nzone() ;
422 cout <<
"psi auto" << endl <<
norme (psi_un_temp) << endl ;
426 "Relative error in the resolution of the equation for psi : "
428 for (
int l=0; l<nz; l++) {
429 cout << tdiff_psi(l) <<
" " ;
436 psi_un_temp = relax*psi_un_temp + (1-relax)*psi_un_old ;
437 psi_deux_temp = relax*psi_deux_temp + (1-relax)*psi_deux_old ;
439 hole1.psi_auto = psi_un_temp ;
440 hole2.psi_auto = psi_deux_temp ;
445 hole1.set_der_0x0() ;
446 hole2.set_der_0x0() ;
459 cout <<
"------------------------------------------------" << endl ;
460 cout <<
"Resolution shift : Omega = " <<
omega << endl ;
490 tmp_vect_un = 2./3.*
hole1.trK.derive_con(
hole1.tgam)
494 source_un += 2.*
hole1.nn * ( tmp_vect_un
496 hole1.aa_auto, 0, 1) ) ;
500 .derive_cov(
hole1.ff), 1, 2)
502 .divergence(
hole1.ff).derive_cov(
hole1.ff), 0)
507 source_un -= vtmp_un ;
509 source_un += 2./3.*
hole1.beta_auto.divergence(
hole1.ff)
533 tmp_vect_deux = 2./3.*
hole2.trK.derive_con(
hole2.tgam)
537 source_deux += 2.*
hole2.nn * ( tmp_vect_deux
543 .derive_cov(
hole2.ff), 1, 2)
545 .divergence(
hole2.ff).derive_cov(
hole2.ff), 0)
550 source_deux -= vtmp_deux ;
552 source_deux += 2./3.*
hole2.beta_auto.divergence(
hole2.ff)
558 Vector source_1 (source_un) ;
559 Vector source_2 (source_deux) ;
563 cout <<
"source shift_x" << endl <<
norme(source_1(1)) << endl ;
564 cout <<
"source shift_y" << endl <<
norme(source_1(2)) << endl ;
565 cout <<
"source shift_z" << endl <<
norme(source_1(3)) << endl ;
568 for (
int i=1 ; i<=3 ; i++) {
580 Valeur lim_x_deux (
hole2.mp.get_mg()-> get_angu()) ;
581 Valeur lim_y_deux (
hole2.mp.get_mg()-> get_angu()) ;
582 Valeur lim_z_deux (
hole2.mp.get_mg()-> get_angu()) ;
584 switch (bound_beta) {
588 lim_x_un =
hole1.boundary_beta_x(
omega, omega_eff) ;
589 lim_y_un =
hole1.boundary_beta_y(
omega, omega_eff) ;
590 lim_z_un =
hole1.boundary_beta_z() ;
592 lim_x_deux =
hole2.boundary_beta_x(
omega, omega_eff) ;
593 lim_y_deux =
hole2.boundary_beta_y(
omega, omega_eff) ;
594 lim_z_deux =
hole2.boundary_beta_z() ;
599 cout <<
"Unexpected type of boundary conditions for beta!"
601 <<
" bound_beta = " << bound_beta << endl ;
617 poisson_vect_binaire (1./3., source_un, source_deux,
618 lim_x_un, lim_y_un, lim_z_un,
619 lim_x_deux, lim_y_deux, lim_z_deux,
620 beta1, beta2, 0, precision) ;
626 for (
int i=1 ; i<=3 ; i++) {
631 cout <<
"shift_auto x" << endl <<
norme(beta1(1)) << endl ;
632 cout <<
"shift_auto y" << endl <<
norme(beta1(2)) << endl ;
633 cout <<
"shift_auto z" << endl <<
norme(beta1(3)) << endl ;
641 int nz =
hole1.mp.get_mg()->get_nzone() ;
646 Tbl tdiff_beta_r =
diffrel(lap_beta(1), source_un(1)) ;
647 Tbl tdiff_beta_t =
diffrel(lap_beta(2), source_un(2)) ;
648 Tbl tdiff_beta_p =
diffrel(lap_beta(3), source_un(3)) ;
651 "Relative error in the resolution of the equation for beta : "
653 cout <<
"r component : " ;
654 for (
int l=0; l<nz; l++) {
655 cout << tdiff_beta_r(l) <<
" " ;
658 cout <<
"t component : " ;
659 for (
int l=0; l<nz; l++) {
660 cout << tdiff_beta_t(l) <<
" " ;
663 cout <<
"p component : " ;
664 for (
int l=0; l<nz; l++) {
665 cout << tdiff_beta_p(l) <<
" " ;
686 if (fabs(
hole1.mp.get_rot_phi()) < 1e-10){
714 if (fabs(
hole2.mp.get_rot_phi()) < 1e-10){
736 beta1_new = relax*(beta1+
hole1.decouple*omdsdp1) + (1-relax)*beta_un_old ;
737 beta2_new = relax*(beta2+
hole2.decouple*omdsdp2) + (1-relax)*beta_deux_old ;
739 hole1.beta_auto = beta1_new ;
740 hole2.beta_auto = beta2_new ;
748 int nnt =
hole1.mp.get_mg()->get_nt(1) ;
749 int nnp =
hole1.mp.get_mg()->get_np(1) ;
753 for (
int k=0; k<nnp; k++)
754 for (
int j=0; j<nnt; j++){
755 if (fabs((
hole1.n_auto+
hole1.n_comp).val_grid_point(1, k, j , 0)) < 1e-8){
762 double diff_un =
hole1.regularisation (
hole1.beta_auto,
764 double diff_deux =
hole2.regularisation (
hole2.beta_auto,
766 hole1.regul = diff_un ;
767 hole2.regul = diff_deux ;
void solve_psi(double precis, double relax, int bound_psi)
Solves the equation for the conformal factor : The fields are the total values excpet those with subs...
double omega
Angular velocity.
Single_hor hole1
Black hole one.
Single_hor hole2
Black hole two.
void solve_shift(double precis, double relax, int bound_beta, double omega_eff)
Solves the equation for the shift, using the Oohara-Nakarmure scheme : The fields are the total value...
void solve_lapse(double precis, double relax, int bound_nn, double lim_nn)
Solves the equation for the lapse : The fields are the total values except those with subscript ,...
Tensor field of valence 0 (or component of a tensorial field).
void raccord(int n)
Performs the matching of the nucleus with respect to the first shell.
void filtre(int n)
Sets the n lasts coefficients in r to 0 in the external domain.
const Scalar & laplacian(int ced_mult_r=4) const
Returns the Laplacian of *this.
virtual void std_spectral_base()
Sets the spectral bases of the Valeur va to the standard ones for a scalar field.
virtual void inc_dzpuis(int inc=1)
Increases by inc units the value of dzpuis and changes accordingly the values of the Scalar in the co...
Valeur & set_spectral_va()
Returns va (read/write version).
void annule_hard()
Sets the Scalar to zero in a hard way.
const Vector & derive_con(const Metric &gam) const
Returns the "contravariant" derivative of *this with respect to some metric , by raising the index of...
Class intended to describe valence-2 symmetric tensors.
Values and coefficients of a (real-value) function.
void set_base(const Base_val &)
Sets the bases for spectral expansions (member base ).
Tensor field of valence 1.
virtual void std_spectral_base()
Sets the standard spectal bases of decomposition for each component.
const Scalar & divergence(const Metric &) const
The divergence of this with respect to a Metric .
virtual void change_triad(const Base_vect &)
Sets a new vectorial basis (triad) of decomposition and modifies the components accordingly.
Scalar & set(int)
Read/write access to a component.
Tbl diffrel(const Cmp &a, const Cmp &b)
Relative difference between two Cmp (norme version).
Tbl norme(const Cmp &)
Sums of the absolute values of all the values of the Cmp in each domain.
virtual void dec_dzpuis(int dec=1)
Decreases by dec units the value of dzpuis and changes accordingly the values in the compactified ext...
const Tensor & derive_con(const Metric &gam) const
Returns the "contravariant" derivative of this with respect to some metric , by raising the last inde...
virtual void inc_dzpuis(int inc=1)
Increases by inc units the value of dzpuis and changes accordingly the values in the compactified ext...
Tensor derive_lie(const Vector &v) const
Computes the Lie derivative of this with respect to some vector field v.
void annule_domain(int l)
Sets the Tensor to zero in a given domain.
Tenseur contract(const Tenseur &, int id1, int id2)
Self contraction of two indices of a Tenseur .