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 #ifndef __SYM_TENSOR_H_
00028 #define __SYM_TENSOR_H_
00029
00030
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 class Sym_tensor_trans ;
00202 class Sym_tensor_tt ;
00203
00204
00205
00206
00207
00208
00209
00210
00219 class Sym_tensor : public Tensor_sym {
00220
00221
00222
00223 protected:
00235 mutable Sym_tensor_trans* p_transverse[N_MET_MAX] ;
00236
00242 mutable Vector* p_longit_pot[N_MET_MAX] ;
00243
00256 mutable Scalar* p_eta ;
00257
00270 mutable Scalar* p_mu ;
00271
00289 mutable Scalar* p_www ;
00290
00308 mutable Scalar* p_xxx ;
00309
00311 mutable Scalar* p_ttt ;
00312
00318 mutable Scalar* p_aaa ;
00319
00330 mutable Scalar* p_tilde_b ;
00331
00342 mutable Scalar* p_tilde_c ;
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352 public:
00366 Sym_tensor(const Map& map, const Itbl& tipe, const Base_vect& triad_i) ;
00367
00376 Sym_tensor(const Map& map, int tipe, const Base_vect& triad_i) ;
00377
00378 Sym_tensor(const Sym_tensor& a) ;
00379
00383 Sym_tensor(const Tensor& a) ;
00384
00395 Sym_tensor(const Map& map, const Base_vect& triad_i, FILE* fich) ;
00396
00397 virtual ~Sym_tensor() ;
00398
00399
00400
00401
00402
00403 protected:
00404 virtual void del_deriv() const;
00405
00407 void set_der_0x0() const ;
00408
00413 virtual void del_derive_met(int i) const ;
00414
00418 void set_der_met_0x0(int i) const ;
00419
00420
00421
00422
00423 public:
00425 virtual void operator=(const Sym_tensor& a) ;
00426
00428 virtual void operator=(const Tensor_sym& a) ;
00429
00435 virtual void operator=(const Tensor& a) ;
00436
00442 void set_longit_trans( const Vector& v, const Sym_tensor_trans& a) ;
00443
00450 void set_auxiliary( const Scalar& trr, const Scalar& eta_over_r, const
00451 Scalar& mu_over_r, const Scalar& www, const Scalar&
00452 xxx, const Scalar& ttt ) ;
00453
00459 virtual void exponential_filter_r(int lzmin, int lzmax, int p,
00460 double alpha= -16.) ;
00461
00467 virtual void exponential_filter_ylm(int lzmin, int lzmax, int p,
00468 double alpha= -16.) ;
00469
00470
00471
00472 public:
00473
00474
00478 const Vector& divergence(const Metric&) const ;
00479
00483 Sym_tensor derive_lie(const Vector& v) const ;
00484
00502 const Sym_tensor_trans& transverse(const Metric& gam, Param* par = 0x0,
00503 int method_poisson = 6) const ;
00504
00515 const Vector& longit_pot(const Metric& gam, Param* par = 0x0,
00516 int method_poisson = 6) const ;
00517
00519 virtual const Scalar& eta(Param* par = 0x0) const ;
00520
00522 const Scalar& mu(Param* par = 0x0) const ;
00523
00525 const Scalar& www() const ;
00526
00528 const Scalar& xxx() const ;
00529
00531 const Scalar& ttt() const ;
00532
00538 const Scalar& compute_A(bool output_ylm = true, Param* par = 0x0) const ;
00539
00545 const Scalar& compute_tilde_B(bool output_ylm = true, Param* par = 0x0) const ;
00546
00553 Scalar compute_tilde_B_tt(bool output_ylm = true, Param* par = 0x0) const ;
00554
00560 const Scalar& compute_tilde_C(bool output_ylm = true, Param* par = 0x0) const ;
00561
00562
00563
00564
00565
00566 protected:
00570 Scalar get_tilde_B_from_TT_trace(const Scalar& tilde_B_tt_in, const Scalar&
00571 trace) const ;
00572
00573
00574
00575 protected:
00580 Sym_tensor* inverse() const ;
00581
00582
00583
00584 friend class Metric ;
00585
00586 } ;
00587
00588
00589
00590
00591
00592
00593
00604 class Sym_tensor_trans: public Sym_tensor {
00605
00606
00607
00608 protected:
00610 const Metric* const met_div ;
00611
00613 mutable Scalar* p_trace ;
00614
00616 mutable Sym_tensor_tt* p_tt ;
00617
00618
00619
00620 public:
00628 Sym_tensor_trans(const Map& map, const Base_vect& triad_i,
00629 const Metric& met) ;
00630
00631 Sym_tensor_trans(const Sym_tensor_trans& ) ;
00632
00644 Sym_tensor_trans(const Map& map, const Base_vect& triad_i,
00645 const Metric& met, FILE* fich) ;
00646
00647 virtual ~Sym_tensor_trans() ;
00648
00649
00650
00651
00652 protected:
00653 virtual void del_deriv() const;
00654
00656 void set_der_0x0() const ;
00657
00658
00659
00660
00661 public:
00665 const Metric& get_met_div() const {return *met_div ; } ;
00666
00667
00668
00669
00670 public:
00672 virtual void operator=(const Sym_tensor_trans& a) ;
00673
00675 virtual void operator=(const Sym_tensor& a) ;
00676
00678 virtual void operator=(const Tensor_sym& a) ;
00679
00681 virtual void operator=(const Tensor& a) ;
00682
00688 void set_tt_trace(const Sym_tensor_tt& a, const Scalar& h,
00689 Param* par = 0x0) ;
00690
00691
00692
00694 const Scalar& the_trace() const ;
00695
00700 const Sym_tensor_tt& tt_part(Param* par = 0x0) const ;
00701
00702 protected:
00718 void sol_Dirac_A(const Scalar& aaa, Scalar& tilde_mu, Scalar& xxx,
00719 const Param* par_bc = 0x0) const ;
00720
00721
00748 void sol_Dirac_tilde_B(const Scalar& tilde_b, const Scalar& hh, Scalar& hrr,
00749 Scalar& tilde_eta, Scalar& www, Param* par_bc=0x0,
00750 Param* par_mat=0x0) const ;
00751
00756 void sol_Dirac_l01(const Scalar& hh, Scalar& hrr, Scalar& tilde_eta,
00757 Param* par_mat) const ;
00758
00759
00760
00761 public:
00762
00763
00764
00770 void sol_Dirac_Abound(const Scalar& aaa, Scalar& tilde_mu, Scalar& x_new,
00771 Scalar bound_mu, const Param* par_bc);
00772
00773
00780 void sol_Dirac_A2(const Scalar& aaa, Scalar& tilde_mu, Scalar& x_new,
00781 Scalar bound_mu, const Param* par_bc);
00782
00788 void sol_Dirac_BC2(const Scalar& bb, const Scalar& cc, const Scalar& hh,
00789 Scalar& hrr, Scalar& tilde_eta, Scalar& ww, Scalar bound_eta,double dir, double neum, double rhor, Param* par_bc, Param* par_mat);
00790
00791
00797 void sol_Dirac_BC3(const Scalar& bb, const Scalar& hh,
00798 Scalar& hrr, Scalar& tilde_eta, Scalar& ww, Scalar bound_hrr, Scalar bound_eta, Param* par_bc, Param* par_mat);
00799
00800
00801
00802
00803
00804 void sol_Dirac_l01_bound(const Scalar& hh, Scalar& hrr, Scalar& tilde_eta, Scalar& bound_hrr, Scalar& bound_eta, Param* par_mat) ;
00805
00806
00807 void sol_Dirac_l01_2(const Scalar& hh, Scalar& hrr, Scalar& tilde_eta, Param* par_mat) ;
00808
00809
00814 void sol_elliptic_ABC(Sym_tensor& source, Scalar aaa, Scalar bbb, Scalar ccc) ;
00815
00816
00817
00831 void trace_from_det_one(const Sym_tensor_tt& htt,
00832 double precis = 1.e-14, int it_max = 100) ;
00833
00848 void set_hrr_mu_det_one(const Scalar& hrr, const Scalar& mu_in,
00849 double precis = 1.e-14, int it_max = 100) ;
00850
00865 void set_tt_part_det_one(const Sym_tensor_tt& hijtt, const
00866 Scalar* h_prev = 0x0, Param* par_mat = 0x0,
00867 double precis = 1.e-14, int it_max = 100) ;
00868
00887 void set_AtBtt_det_one(const Scalar& a_in, const Scalar& tbtt_in,
00888 const Scalar* h_prev = 0x0, Param* par_bc = 0x0,
00889 Param* par_mat = 0x0, double precis = 1.e-14,
00890 int it_max = 100) ;
00891
00899 void set_AtB_trace(const Scalar& a_in, const Scalar& tb_in, const
00900 Scalar& trace, Param* par_bc = 0x0, Param* par_mat = 0x0) ;
00901
00915 Sym_tensor_trans poisson(const Scalar* h_guess = 0x0) const ;
00916 } ;
00917
00918
00919
00920
00921
00922
00923
00934 class Sym_tensor_tt: public Sym_tensor_trans {
00935
00936
00937
00938
00939 protected:
00942 mutable Scalar* p_khi ;
00943
00944
00945
00946
00947 public:
00955 Sym_tensor_tt(const Map& map, const Base_vect& triad_i,
00956 const Metric& met) ;
00957
00958 Sym_tensor_tt(const Sym_tensor_tt& ) ;
00959
00971 Sym_tensor_tt(const Map& map, const Base_vect& triad_i,
00972 const Metric& met, FILE* fich) ;
00973
00974 virtual ~Sym_tensor_tt() ;
00975
00976
00977
00978
00979 protected:
00980 virtual void del_deriv() const;
00981
00983 void set_der_0x0() const ;
00984
00985
00986
00987
00988
00989 public:
00991 virtual void operator=(const Sym_tensor_tt& a) ;
00992
00994 virtual void operator=(const Sym_tensor_trans& a) ;
00995
00997 virtual void operator=(const Sym_tensor& a) ;
00998
01000 virtual void operator=(const Tensor_sym& a) ;
01001
01003 virtual void operator=(const Tensor& a) ;
01004
01016 void set_rr_eta_mu(const Scalar& hrr, const Scalar& eta_i,
01017 const Scalar& mu_i) ;
01018
01030 void set_rr_mu(const Scalar& hrr, const Scalar& mu_i) ;
01031
01032
01044 void set_khi_eta_mu(const Scalar& khi_i, const Scalar& eta_i,
01045 const Scalar& mu_i) ;
01046
01060 void set_khi_mu(const Scalar& khi_i, const Scalar& mu_i, int dzp = 0,
01061 Param* par1 = 0x0, Param* par2 = 0x0,
01062 Param* par3 = 0x0) ;
01063
01071 void set_A_tildeB(const Scalar& a_in, const Scalar& tb_in, Param* par_bc = 0x0,
01072 Param* par_mat = 0x0) ;
01073
01074
01075
01076
01077 public:
01081 const Scalar& khi() const ;
01082
01084 virtual const Scalar& eta(Param* par = 0x0) const ;
01085
01086 protected:
01093 void update(int dzp, Param* par1 = 0x0, Param* par2 = 0x0) ;
01094
01095 public:
01107 Sym_tensor_tt poisson(int dzfin = 2) const ;
01108
01109
01110
01111 } ;
01112
01113
01114
01115
01116 #endif