00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __BHOLE_H_
00030 #define __BHOLE_H_
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229 class Tenseur ;
00230 class Tenseur_sym ;
00231 class Map_af ;
00232 class Bhole_binaire ;
00233 class Et_bin_nsbh ;
00234
00235 #include "tenseur.h"
00236
00237 #define COROT 0
00238 #define IRROT 1
00239
00263 class Bhole {
00264
00265
00266 protected:
00267
00268 Map_af& mp ;
00269 double rayon ;
00270 double omega ;
00271 double omega_local ;
00272 int rot_state ;
00273 double lapse_hori ;
00274
00278 double* boost ;
00279 double regul ;
00280
00281 Tenseur n_auto ;
00282 Tenseur n_comp ;
00283 Tenseur n_tot ;
00284
00285 Tenseur psi_auto ;
00286 Tenseur psi_comp ;
00287 Tenseur psi_tot ;
00288
00289 Tenseur grad_n_tot ;
00290 Tenseur grad_psi_tot ;
00291
00292 Tenseur shift_auto ;
00293
00294 Tenseur_sym taij_auto ;
00295 Tenseur_sym taij_comp ;
00296
00300 Tenseur_sym taij_tot ;
00301
00302 Tenseur_sym tkij_auto ;
00303 Tenseur_sym tkij_tot ;
00304
00313 Cmp decouple ;
00314
00315
00316 public:
00321 Bhole (Map_af& mapping) ;
00322 Bhole (const Bhole&) ;
00323 Bhole (Map_af&, FILE*, bool old=false) ;
00324 ~Bhole() ;
00325
00326 public:
00327
00328 void sauve (FILE* fich) const ;
00329
00330 public:
00331 void operator= (const Bhole&) ;
00332
00334 const Map_af& get_mp() const {return mp;} ;
00335
00337 Map_af& set_mp() {return mp; } ;
00338
00342 double get_rayon() const {return rayon;} ;
00343
00347 void set_rayon(double ray) {rayon = ray ;} ;
00348
00352 double get_omega() const {return omega;} ;
00356 void set_omega(double ome) {omega = ome ;} ;
00360 double get_omega_local() const {return omega_local;} ;
00364 void set_omega_local(double ome) {omega_local = ome ;} ;
00368 double get_rot_state() const {return rot_state;} ;
00372 void set_rot_state(int rotation) {rot_state = rotation;} ;
00377 double* get_boost () const {return boost;} ;
00378 void set_boost (double vx, double vy, double vz) {
00379 boost[0] = vx ; boost[1] = vy ; boost[2] = vz ;
00380 }
00381
00385 double get_regul() const {return regul;} ;
00386
00390 const Tenseur& get_n_auto() const {return n_auto ;} ;
00394 Cmp return_n_auto() const {return n_auto() ;} ;
00398 const Tenseur& get_n_comp() const {return n_comp ;} ;
00402 const Tenseur& get_n_tot() const {return n_tot ;} ;
00403
00407 const Tenseur& get_psi_auto() const {return psi_auto ;} ;
00411 Cmp return_psi_auto() const {return psi_auto() ;} ;
00415 const Tenseur& get_psi_comp() const {return psi_comp ;} ;
00419 const Tenseur& get_psi_tot() const {return psi_tot ;} ;
00420
00424 const Tenseur& get_grad_psi_tot() const {return grad_psi_tot ;} ;
00425
00429 const Tenseur& get_grad_n_tot() const {return grad_n_tot ;} ;
00430
00431
00435 const Tenseur& get_shift_auto() const {return shift_auto ;} ;
00436
00437 Cmp return_shift_auto(int i) const {return shift_auto(i) ;} ;
00438
00442 const Tenseur& get_taij_auto() const {return taij_auto ;} ;
00446 const Tenseur& get_taij_comp() const {return taij_comp ;} ;
00450 const Tenseur& get_taij_tot() const {return taij_tot ;}
00451
00455 const Tenseur& get_tkij_tot() const {return tkij_tot ;}
00459 const Tenseur& get_tkij_auto() const {return tkij_auto ;}
00463 const Cmp get_decouple() const {return decouple ;}
00464
00465 Cmp& set_n_auto() {return n_auto.set() ;}
00466 Cmp& set_psi_auto() {return psi_auto.set() ;}
00467
00468 void set_lapse_hori(double xx) {lapse_hori = xx;}
00469 public:
00470
00477 void fait_n_comp (const Bhole& comp) ;
00478
00485 void fait_psi_comp (const Bhole& comp) ;
00492 void fait_n_comp (const Et_bin_nsbh& comp) ;
00493
00500 void fait_psi_comp (const Et_bin_nsbh& comp) ;
00501
00505 void fait_taij_auto () ;
00506
00507
00520 void regularise_shift (const Tenseur& comp) ;
00521
00528 double viriel_seul () const ;
00529
00539 void init_bhole () ;
00540
00567 void init_kerr (double masse, double moment) ;
00568
00580 void solve_lapse_seul (double relax) ;
00581
00595 void solve_psi_seul (double relax) ;
00596
00612 void solve_shift_seul (double precis, double relax) ;
00613
00623 void regularise_seul () ;
00636 void solve_lapse_with_ns (double relax, int bound_nn,
00637 double lim_nn) ;
00638
00652 void solve_psi_with_ns (double relax) ;
00653
00670 void solve_shift_with_ns (const Et_bin_nsbh& ns,
00671 double precis, double relax,
00672 int bound_nn, double lim_nn) ;
00673
00674 void equilibrium (const Et_bin_nsbh& ns, double precis, double relax,
00675 int bound_nn, double lim_nn) ;
00676 void update_metric (const Et_bin_nsbh& ns) ;
00677
00678
00683 void fait_tkij() ;
00684
00686 double area() const ;
00687
00694 double masse_adm_seul () const ;
00695
00702 double masse_komar_seul() const ;
00703
00712 double moment_seul_inf() const ;
00713
00722 double moment_seul_hor() const ;
00723
00724
00725
00726
00727 double local_momentum() const ;
00728
00732 void init_bhole_phi () ;
00733
00740 void init_bhole_seul () ;
00741
00742 friend class Bhole_binaire ;
00743 friend class Bin_ns_bh ;
00744 } ;
00745
00752 class Bhole_binaire {
00753
00754
00755 private:
00756
00757 Bhole hole1 ;
00758 Bhole hole2 ;
00759
00760
00761 Bhole* holes[2] ;
00762
00763 double pos_axe ;
00764 double omega ;
00765
00766 public:
00767
00768 Bhole_binaire(Map_af& mp1, Map_af& mp2) ;
00769 Bhole_binaire(const Bhole_binaire& ) ;
00770 ~Bhole_binaire() ;
00771
00772 public:
00773
00774 void operator=(const Bhole_binaire&) ;
00775
00780 Bhole& set(int i)
00781 { assert( (i==1) || (i==2) );
00782 return *holes[i-1] ;} ;
00786 void set_omega(double ome) {omega = ome ;
00787 hole1.set_omega (ome) ;
00788 hole2.set_omega (ome) ;} ;
00789
00790 void set_pos_axe (double) ;
00791
00792 public:
00793
00798 const Bhole& operator()(int i) const
00799 { assert( (i==1) || (i==2) );
00800 return *holes[i-1] ;} ;
00801
00803 double get_omega() const {return omega; } ;
00804
00812 void init_bhole_binaire() ;
00813
00818 double viriel() const ;
00832 void solve_lapse (double precis, double relax) ;
00833
00849 void solve_psi (double precis, double relax) ;
00850
00867 void solve_shift (double precis, double relax) ;
00868
00878 void fait_tkij () ;
00879
00886 void fait_decouple () ;
00887
00888 public:
00896 void set_statiques (double precis, double relax) ;
00897
00908 void coal (double precis, double relax, int nbre_ome, double search_ome,
00909 double m1, double m2, const int sortie = 0) ;
00910
00911
00916 double adm_systeme() const ;
00917
00922 double komar_systeme() const ;
00923
00929 double moment_systeme_inf() ;
00930
00938 double moment_systeme_hor() const ;
00939
00945 double distance_propre(const int nr = 65) const ;
00946
00947 Tbl linear_momentum_systeme_inf() const ;
00948
00952 void solve_phi (double precision, double relax) ;
00956 void init_phi() ;
00957 } ;
00958
00959 #endif