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
00030
00031 #ifndef __ETOILE_H_
00032 #define __ETOILE_H_
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
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363 #include "tenseur.h"
00364 class Eos ;
00365 class Bhole ;
00366
00367
00368
00369
00370
00371
00411 class Etoile {
00412
00413
00414
00415 protected:
00416 Map& mp ;
00417
00421 int nzet ;
00422
00426 bool relativistic ;
00427
00431 double unsurc2 ;
00432
00438 int k_div ;
00439
00440 const Eos& eos ;
00441
00442
00443
00445 Tenseur ent ;
00446
00447 Tenseur nbar ;
00448 Tenseur ener ;
00449 Tenseur press ;
00450
00451
00452
00453 Tenseur ener_euler ;
00454
00456 Tenseur s_euler ;
00457
00459 Tenseur gam_euler ;
00460
00462 Tenseur u_euler ;
00463
00464
00465
00466
00472 Tenseur logn_auto ;
00473
00479 Tenseur logn_auto_regu ;
00480
00485 Tenseur logn_auto_div ;
00486
00489 Tenseur d_logn_auto_div ;
00490
00494 Tenseur beta_auto ;
00495
00497 Tenseur nnn ;
00498
00500 Tenseur shift ;
00501
00503 Tenseur a_car ;
00504
00505
00506
00507 protected:
00509 mutable double* p_ray_eq ;
00510
00512 mutable double* p_ray_eq_pis2 ;
00513
00515 mutable double* p_ray_eq_pi ;
00516
00518 mutable double* p_ray_eq_3pis2 ;
00519
00521 mutable double* p_ray_pole ;
00522
00527 mutable Itbl* p_l_surf ;
00528
00533 mutable Tbl* p_xi_surf ;
00534
00535 mutable double* p_mass_b ;
00536 mutable double* p_mass_g ;
00537
00538
00539
00540
00541 public:
00542
00552 Etoile(Map& mp_i, int nzet_i, bool relat, const Eos& eos_i) ;
00553
00554
00555 Etoile(const Etoile& ) ;
00556
00564 Etoile(Map& mp_i, const Eos& eos_i, FILE* fich) ;
00565
00566 virtual ~Etoile() ;
00567
00568
00569
00570
00571 protected:
00573 virtual void del_deriv() const ;
00574
00576 virtual void set_der_0x0() const ;
00577
00581 virtual void del_hydro_euler() ;
00582
00583
00584
00585
00586 public:
00588 void operator=(const Etoile&) ;
00589
00591 Map& set_mp() {return mp; } ;
00592
00594 void set_enthalpy(const Cmp& ) ;
00595
00599 virtual void equation_of_state() ;
00600
00605 virtual void hydro_euler() ;
00606
00616 virtual void equilibrium_spher(double ent_c, double precis = 1.e-14, const Tbl* ent_limit = 0x0 ) ;
00617
00627 void equil_spher_regular(double ent_c, double precis = 1.e-14) ;
00628
00637 virtual void equil_spher_falloff(double ent_c,
00638 double precis = 1.e-14) ;
00639
00640
00641
00642 public:
00644 const Map& get_mp() const {return mp; } ;
00645
00647 int get_nzet() const {return nzet; } ;
00648
00652 bool is_relativistic() const {return relativistic; } ;
00653
00655 const Eos& get_eos() const {return eos; } ;
00656
00658 const Tenseur& get_ent() const {return ent;} ;
00659
00661 const Tenseur& get_nbar() const {return nbar;} ;
00662
00664 const Tenseur& get_ener() const {return ener;} ;
00665
00667 const Tenseur& get_press() const {return press;} ;
00668
00670 const Tenseur& get_ener_euler() const {return ener_euler;} ;
00671
00673 const Tenseur& get_s_euler() const {return s_euler;} ;
00674
00676 const Tenseur& get_gam_euler() const {return gam_euler;} ;
00677
00679 const Tenseur& get_u_euler() const {return u_euler;} ;
00680
00686 const Tenseur& get_logn_auto() const {return logn_auto;} ;
00687
00693 const Tenseur& get_logn_auto_regu() const {return logn_auto_regu;} ;
00694
00700 const Tenseur& get_logn_auto_div() const {return logn_auto_div;} ;
00701
00704 const Tenseur& get_d_logn_auto_div() const {return d_logn_auto_div;} ;
00705
00709 const Tenseur& get_beta_auto() const {return beta_auto;} ;
00710
00712 const Tenseur& get_nnn() const {return nnn;} ;
00713
00715 const Tenseur& get_shift() const {return shift;} ;
00716
00718 const Tenseur& get_a_car() const {return a_car;} ;
00719
00720
00721
00722 public:
00723 virtual void sauve(FILE* ) const ;
00724
00726 friend ostream& operator<<(ostream& , const Etoile& ) ;
00727
00728 protected:
00730 virtual ostream& operator>>(ostream& ) const ;
00731
00732
00733
00734 public:
00736 double ray_eq() const ;
00737
00739 double ray_eq_pis2() const ;
00740
00742 double ray_eq_pi() const ;
00743
00745 double ray_eq_3pis2() const ;
00746
00748 double ray_pole() const ;
00749
00751 double ray_eq(int kk) const ;
00752
00760 virtual const Itbl& l_surf() const ;
00761
00769 const Tbl& xi_surf() const ;
00770
00772 virtual double mass_b() const ;
00773
00775 virtual double mass_g() const ;
00776
00777 };
00778 ostream& operator<<(ostream& , const Etoile& ) ;
00779
00780
00781
00782
00783
00784
00799 class Etoile_bin : public Etoile {
00800
00801
00802
00803 protected:
00807 bool irrotational ;
00808
00813 const Base_vect& ref_triad ;
00814
00818 Tenseur psi0 ;
00819
00823 Tenseur d_psi ;
00824
00829 Tenseur wit_w ;
00830
00834 Tenseur loggam ;
00835
00839 Tenseur logn_comp ;
00840
00844 Tenseur d_logn_auto ;
00845
00849 Tenseur d_logn_auto_regu ;
00850
00854 Tenseur d_logn_comp ;
00855
00859 Tenseur beta_comp ;
00860
00864 Tenseur d_beta_auto ;
00865
00869 Tenseur d_beta_comp ;
00870
00874 Tenseur shift_auto ;
00875
00880 Tenseur shift_comp ;
00881
00893 Tenseur w_shift ;
00894
00903 Tenseur khi_shift ;
00904
00910 Tenseur_sym tkij_auto ;
00911
00917 Tenseur_sym tkij_comp ;
00918
00923 Tenseur akcar_auto ;
00924
00929 Tenseur akcar_comp ;
00930
00935 Tenseur bsn ;
00936
00938 Tenseur pot_centri ;
00939
00944 Cmp ssjm1_logn ;
00945
00950 Cmp ssjm1_beta ;
00951
00958 Cmp ssjm1_khi ;
00959
00968 Tenseur ssjm1_wshift ;
00969
00974 Cmp ssjm1_psi ;
00975
00985 Cmp decouple ;
00986
00987
00988
00989 protected:
00991 mutable double* p_xa_barycenter ;
00992
00993
00994
00995
00996 public:
01012 Etoile_bin(Map& mp_i, int nzet_i, bool relat, const Eos& eos_i,
01013 bool irrot, const Base_vect& ref_triad_i) ;
01014
01015
01016 Etoile_bin(const Etoile_bin& ) ;
01017
01030 Etoile_bin(Map& mp_i, const Eos& eos_i, const Base_vect& ref_triad_i,
01031 FILE* fich) ;
01032
01033 virtual ~Etoile_bin() ;
01034
01035
01036
01037
01038 protected:
01040 virtual void del_deriv() const ;
01041
01043 virtual void set_der_0x0() const ;
01044
01048 virtual void del_hydro_euler() ;
01049
01050
01051
01052
01053 public:
01055 void operator=(const Etoile_bin& ) ;
01056
01060 Tenseur& set_logn_comp() ;
01061
01063 Tenseur& set_pot_centri() ;
01064
01066 Tenseur& set_w_shift() ;
01067
01069 Tenseur& set_khi_shift() ;
01070
01071
01072
01073 public:
01077 bool is_irrotational() const {return irrotational; } ;
01078
01080 const Tenseur& get_psi0() const {return psi0;} ;
01081
01085 const Tenseur& get_d_psi() const {return d_psi;} ;
01086
01091 const Tenseur& get_wit_w() const {return wit_w;} ;
01092
01096 const Tenseur& get_loggam() const {return loggam;} ;
01097
01101 const Tenseur& get_logn_comp() const {return logn_comp;} ;
01102
01106 const Tenseur& get_d_logn_auto() const {return d_logn_auto;} ;
01107
01111 const Tenseur& get_d_logn_auto_regu() const {return d_logn_auto_regu;} ;
01112
01116 const Tenseur& get_d_logn_comp() const {return d_logn_comp;} ;
01117
01121 const Tenseur& get_beta_comp() const {return beta_comp;} ;
01122
01126 const Tenseur& get_d_beta_auto() const {return d_beta_auto;} ;
01127
01131 const Tenseur& get_d_beta_comp() const {return d_beta_comp;} ;
01132
01137 const Tenseur& get_shift_auto() const {return shift_auto;} ;
01138
01143 const Tenseur& get_shift_comp() const {return shift_comp;} ;
01144
01157 const Tenseur& get_w_shift() const {return w_shift;} ;
01158
01171 const Tenseur& get_khi_shift() const {return khi_shift;} ;
01172
01177 const Tenseur_sym& get_tkij_auto() const {return tkij_auto;} ;
01178
01183 const Tenseur_sym& get_tkij_comp() const {return tkij_comp;} ;
01184
01189 const Tenseur& get_akcar_auto() const {return akcar_auto;} ;
01190
01195 const Tenseur& get_akcar_comp() const {return akcar_comp;} ;
01196
01201 const Tenseur& get_bsn() const {return bsn;} ;
01202
01204 const Tenseur& get_pot_centri() const {return pot_centri;} ;
01209 const Cmp get_decouple() const {return decouple ;}
01210
01211
01212
01213 public:
01214 virtual void sauve(FILE* ) const ;
01215
01216 protected:
01218 virtual ostream& operator>>(ostream& ) const ;
01219
01220
01221
01222 public:
01224 virtual double mass_b() const ;
01225
01227 virtual double mass_g() const ;
01228
01237 virtual double xa_barycenter() const ;
01238
01239
01240
01241
01242 public:
01250 virtual Tenseur sprod(const Tenseur& t1, const Tenseur& t2) const ;
01251
01264 virtual void hydro_euler() ;
01265
01283 void update_metric(const Etoile_bin& comp) ;
01284
01293 void update_metric(const Etoile_bin& comp, const Etoile_bin& star_prev,
01294 double relax) ;
01295
01310 void update_metric_der_comp(const Etoile_bin& comp) ;
01311
01322 virtual void kinematics(double omega, double x_axe) ;
01323
01327 void fait_d_psi() ;
01328
01337 void fait_shift_auto() ;
01338
01342 virtual void extrinsic_curvature() ;
01343
01344
01383 void equilibrium(double ent_c,
01384 int mermax, int mermax_poisson,
01385 double relax_poisson, int mermax_potvit,
01386 double relax_potvit, double thres_adapt,
01387 const Tbl& fact, Tbl& diff, const Tbl* ent_limit = 0x0) ;
01388
01428 void equil_regular(double ent_c, int mermax, int mermax_poisson,
01429 double relax_poisson, int mermax_potvit,
01430 double relax_potvit, double thres_adapt,
01431 const Tbl& fact, Tbl& diff) ;
01432
01446 double velocity_potential(int mermax, double precis, double relax) ;
01447
01459 void relaxation(const Etoile_bin& star_prev, double relax_ent,
01460 double relax_met, int mer, int fmer_met) ;
01461
01462 friend class Bin_ns_bh ;
01463 };
01464
01465
01466
01467
01468
01469
01470
01482 class Etoile_rot : public Etoile {
01483
01484
01485
01486 protected:
01487 double omega ;
01488
01490 Tenseur bbb ;
01491
01493 Tenseur b_car ;
01494
01496 Tenseur nphi ;
01497
01501 Tenseur tnphi ;
01502
01504 Tenseur uuu ;
01505
01507 Tenseur& logn ;
01508
01512 Tenseur nuf ;
01513
01517 Tenseur nuq ;
01518
01520 Tenseur& dzeta ;
01521
01523 Tenseur tggg ;
01524
01536 Tenseur w_shift ;
01537
01546 Tenseur khi_shift ;
01547
01553 Tenseur_sym tkij ;
01554
01572 Tenseur ak_car ;
01573
01578 Cmp ssjm1_nuf ;
01579
01584 Cmp ssjm1_nuq ;
01585
01589 Cmp ssjm1_dzeta ;
01590
01594 Cmp ssjm1_tggg ;
01595
01602 Cmp ssjm1_khi ;
01603
01611 Tenseur ssjm1_wshift ;
01612
01613
01614
01615 protected:
01616
01617 mutable double* p_angu_mom ;
01618 mutable double* p_tsw ;
01619 mutable double* p_grv2 ;
01620 mutable double* p_grv3 ;
01621 mutable double* p_r_circ ;
01622 mutable double* p_aplat ;
01623 mutable double* p_z_eqf ;
01624 mutable double* p_z_eqb ;
01625 mutable double* p_z_pole ;
01626 mutable double* p_mom_quad ;
01627 mutable double* p_r_isco ;
01628 mutable double* p_f_isco ;
01629
01630 mutable double* p_espec_isco ;
01632 mutable double* p_lspec_isco ;
01633 mutable double* p_f_eq ;
01634
01635
01636
01637
01638
01639 public:
01648 Etoile_rot(Map& mp_i, int nzet_i, bool relat, const Eos& eos_i) ;
01649
01650
01651 Etoile_rot(const Etoile_rot& ) ;
01652
01660 Etoile_rot(Map& mp_i, const Eos& eos_i, FILE* fich) ;
01661
01662 virtual ~Etoile_rot() ;
01663
01664
01665
01666
01667 protected:
01669 virtual void del_deriv() const ;
01670
01672 virtual void set_der_0x0() const ;
01673
01677 virtual void del_hydro_euler() ;
01678
01679
01680
01681
01682 public:
01684 void operator=(const Etoile_rot& ) ;
01685
01686
01687
01688 public:
01692 virtual double get_omega_c() const ;
01693
01695 const Tenseur& get_bbb() const {return bbb;} ;
01696
01698 const Tenseur& get_b_car() const {return b_car;} ;
01699
01701 const Tenseur& get_nphi() const {return nphi;} ;
01702
01706 const Tenseur& get_tnphi() const {return tnphi;} ;
01707
01709 const Tenseur& get_uuu() const {return uuu;} ;
01710
01712 const Tenseur& get_logn() const {return logn;} ;
01713
01717 const Tenseur& get_nuf() const {return nuf;} ;
01718
01722 const Tenseur& get_nuq() const {return nuq;} ;
01723
01725 const Tenseur& get_dzeta() const {return dzeta;} ;
01726
01728 const Tenseur& get_tggg() const {return tggg;} ;
01729
01742 const Tenseur& get_w_shift() const {return w_shift;} ;
01743
01756 const Tenseur& get_khi_shift() const {return khi_shift;} ;
01757
01763 const Tenseur_sym& get_tkij() const {return tkij;} ;
01764
01782 const Tenseur& get_ak_car() const {return ak_car;} ;
01783
01784
01785
01786 public:
01787 virtual void sauve(FILE* ) const ;
01788
01790 virtual void display_poly(ostream& ) const ;
01791
01792 protected:
01794 virtual ostream& operator>>(ostream& ) const ;
01795
01797 virtual void partial_display(ostream& ) const ;
01798
01799
01800
01801 public:
01802
01810 virtual const Itbl& l_surf() const ;
01811
01812 virtual double mass_b() const ;
01813 virtual double mass_g() const ;
01814 virtual double angu_mom() const ;
01815 virtual double tsw() const ;
01816
01820 virtual double grv2() const ;
01821
01833 virtual double grv3(ostream* ost = 0x0) const ;
01834
01835 virtual double r_circ() const ;
01836 virtual double aplat() const ;
01837 virtual double z_eqf() const ;
01838 virtual double z_eqb() const ;
01839 virtual double z_pole() const ;
01840
01850 virtual double mom_quad() const ;
01851
01858 virtual double r_isco(ostream* ost = 0x0) const ;
01859
01861 virtual double f_isco() const ;
01862
01864 virtual double espec_isco() const ;
01865
01867 virtual double lspec_isco() const ;
01868
01869
01880 virtual double f_eccentric(double ecc, double periast,
01881 ostream* ost = 0x0) const ;
01882
01884 virtual double f_eq() const ;
01885
01886
01887
01888
01889 public:
01900 virtual void hydro_euler() ;
01901
01911 void update_metric() ;
01912
01921 void fait_shift() ;
01922
01926 void fait_nphi() ;
01927
01931 void extrinsic_curvature() ;
01932
01962 static double lambda_grv2(const Cmp& sou_m, const Cmp& sou_q) ;
01963
02043 virtual void equilibrium(double ent_c, double omega0, double fact_omega,
02044 int nzadapt, const Tbl& ent_limit,
02045 const Itbl& icontrol, const Tbl& control,
02046 double mbar_wanted, double aexp_mass,
02047 Tbl& diff, Param* = 0x0) ;
02048
02049
02050 };
02051
02052
02053
02054
02055 #endif