4 #include "utilitaires.h" 9 #include "param_elliptic.h" 14 Sym_tensor secmembre_kerr (
const Sym_tensor& hij,
const Sym_tensor& aa,
const Scalar& nn,
const Scalar& ppsi,
const Vector& bb) {
16 const int nz = (*(hij.get_mp().get_mg())).get_nzone();
19 const Vector& beta = bb;
20 const Sym_tensor& hh = hij;
23 const Scalar& psi4 = ppsi*ppsi*ppsi*ppsi;
24 Scalar ln_psi =
log(ppsi); ln_psi.std_spectral_base();
26 const Scalar qq = nn*ppsi*ppsi;
29 const Metric_flat& ff = (hij.get_mp()).flat_met_spher() ;
31 const Sym_tensor& tgam_uu = ff.con() + hh;
33 const Metric tgam(tgam_uu);
35 const Base_vect_spher& otriad = hij.get_mp().get_bvect_spher();
39 Scalar qpig(hij.get_mp()); qpig.annule_hard(); qpig.std_spectral_base();
40 Sym_tensor strain_tens = hij;
41 for (
int ii=1; ii<=3; ii++)
42 for(
int jj=1; jj<=3; jj++)
43 { strain_tens.set(ii,jj).annule_hard();
45 strain_tens.std_spectral_base();
49 Vector beta_point = bb;
51 for (
int ii=1; ii<=3; ii++)
53 { beta_point.set(ii).annule_hard();
55 beta_point.annule_domain(nz-1) ;
59 beta_point.std_spectral_base();
60 Scalar nn_point(hij.get_mp());
61 nn_point.annule_hard();
62 nn_point.annule_domain(nz -1);
64 nn_point.std_spectral_base();
66 Sym_tensor hh_point = hij;
67 for (
int ii=1; ii<=3; ii++)
68 for(
int jj=1; jj<=3; jj++)
69 { hh_point.set(ii,jj).annule_hard();
71 hh_point.annule_domain(nz-1);
72 hh_point.std_spectral_base();
87 const Sym_tensor& tgam_dd = tgam.cov() ;
89 const Tensor_sym& dtgam = tgam_dd.derive_cov(ff) ;
90 const Tensor_sym& dhh = hh.derive_cov(ff) ;
91 const Vector& dln_psi = ln_psi.derive_cov(ff) ;
92 const Vector& tdln_psi_u = ln_psi.derive_con(tgam) ;
93 const Vector& tdnn_u = nn.derive_con(tgam) ;
94 const Vector& dqq = qq.derive_cov(ff) ;
95 const Scalar& div_beta = beta.divergence(ff) ;
97 Scalar tmp(hij.get_mp()) ;
98 Sym_tensor sym_tmp(hij.get_mp(), CON, otriad) ;
103 Sym_tensor ricci_star(hij.get_mp(), CON, otriad) ;
105 ricci_star =
contract(hh, 0, 1, dhh.derive_cov(ff), 2, 3) ;
111 for (
int i=1; i<=3; i++) {
112 for (
int j=1; j<=i; j++) {
114 for (
int k=1; k<=3; k++) {
115 for (
int l=1; l<=3; l++) {
116 tmp += dhh(i,k,l) * dhh(j,l,k) ;
119 sym_tmp.set(i,j) = tmp ;
122 ricci_star -= sym_tmp ;
123 for (
int i=1; i<=3; i++) {
124 for (
int j=1; j<=i; j++) {
126 for (
int k=1; k<=3; k++) {
127 for (
int l=1; l<=3; l++) {
128 for (
int m=1; m<=3; m++) {
129 for (
int n=1; n<=3; n++) {
131 tmp += 0.5 * tgam_uu(i,k)* tgam_uu(j,l)
132 * dhh(m,n,k) * dtgam(m,n,l)
133 + tgam_dd(n,l) * dhh(m,n,k)
134 * (tgam_uu(i,k) * dhh(j,l,m) + tgam_uu(j,k) * dhh(i,l,m) )
135 - tgam_dd(k,l) *tgam_uu(m,n) * dhh(i,k,m) * dhh(j,l,n) ;
140 sym_tmp.set(i,j) = tmp ;
143 ricci_star += sym_tmp ;
145 ricci_star = 0.5 * ricci_star ;
152 contract(dhh, 0, 1, dtgam, 0, 1), 0, 1 )
154 contract(dhh, 0, 1, dtgam, 0, 2), 0, 1 ) ;
159 Sym_tensor ss(hij.get_mp(), CON, otriad) ;
161 sym_tmp = nn * (ricci_star + 8.* tdln_psi_u * tdln_psi_u)
162 + 4.*( tdln_psi_u * tdnn_u + tdnn_u * tdln_psi_u )
163 - 0.3333333333333333 *
164 ( nn * (tricci_scal + 8.*
contract(dln_psi, 0, tdln_psi_u, 0) )
165 + 8.*
contract(dln_psi, 0, tdnn_u, 0) ) *tgam_uu ;
167 ss = sym_tmp / psi4 ;
170 contract(tgam_uu, 1, dqq.derive_cov(ff), 0), 1) ;
172 sym_tmp.inc_dzpuis() ;
176 for (
int i=1; i<=3; i++) {
177 for (
int j=1; j<=i; j++) {
179 for (
int k=1; k<=3; k++) {
180 for (
int l=1; l<=3; l++) {
181 tmp += ( hh(i,k)*dhh(l,j,k) + hh(k,j)*dhh(i,l,k)
182 - hh(k,l)*dhh(i,j,k) ) * dqq(l) ;
185 sym_tmp.set(i,j) += 0.5 * tmp ;
189 tmp = qq.derive_con(tgam).divergence(tgam) ;
194 sym_tmp -= 0.3333333333333333 * tmp *tgam_uu ;
196 ss -= sym_tmp / (psi4*ppsi*ppsi) ;
198 for (
int i=1; i<=3; i++) {
199 for (
int j=1; j<=i; j++) {
201 for (
int k=1; k<=3; k++) {
202 for (
int l=1; l<=3; l++) {
203 tmp += tgam_dd(k,l) * aa(i,k) * aa(j,l) ;
206 sym_tmp.set(i,j) = tmp ;
210 tmp = psi4 * strain_tens.trace(tgam) ;
212 ss += (2.*nn) * ( sym_tmp);
214 Sym_tensor ss2 =2.*nn*( qpig*(psi4*strain_tens - 0.33333333333333 * tmp * tgam_uu));
230 Sym_tensor lbh = hh.derive_lie(beta) ;
232 Sym_tensor source_hh =
234 + 2.* hh_point.derive_lie(beta);
237 source_hh.inc_dzpuis() ;
241 source_hh += 2.* nn * ss ;
245 Vector vtmp = beta_point ;
248 sym_tmp = hh.derive_lie(vtmp) ;
249 sym_tmp.inc_dzpuis(2) ;
254 + 1.3333333333333333 * div_beta* (hh_point - lbh)
255 + 2. * (nn_point - nn.derive_lie(beta)) * aa ;
258 for (
int i=1; i<=3; i++) {
259 for (
int j=1; j<=i; j++) {
261 for (
int k=1; k<=3; k++) {
262 tmp += ( hh.derive_con(ff)(k,j,i)
263 + hh.derive_con(ff)(i,k,j)
264 - hh.derive_con(ff)(i,j,k) ) * dqq(k) ;
266 sym_tmp.set(i,j) = tmp ;
270 source_hh -= nn / (psi4*ppsi*ppsi) * sym_tmp ;
272 tmp = beta_point.divergence(ff) - div_beta.derive_lie(beta) ;
277 source_hh += 0.6666666666666666*
278 ( tmp - 0.6666666666666666* div_beta * div_beta ) * hh ;
283 Sym_tensor l_beta = beta.ope_killing_conf(ff) ;
285 sym_tmp = beta_point.ope_killing_conf(ff) - l_beta.derive_lie(beta) ;
287 sym_tmp.inc_dzpuis() ;
291 source_hh += 0.6666666666666666* div_beta * l_beta - sym_tmp ;
Cmp log(const Cmp &)
Neperian logarithm.
void inc_dzpuis()
dzpuis += 1 ;
Tenseur contract(const Tenseur &, int id1, int id2)
Self contraction of two indices of a Tenseur .