20 #include "metric_AADS.hpp"
37 for (
int d(0) ; d <
m_nd ; ++d)
43 for (
int d(0) ; d <
m_nd ; ++d)
44 for (
int i(1) ; i <= dim ; ++i)
62 Metric_AADS::~Metric_AADS()
64 for (
int d(0) ; d <
m_nd ; ++d)
66 if (
p_h[d] !=
nullptr)
delete p_h[d];
68 if (
p_k[d] !=
nullptr)
delete p_k[d];
94 if(m_ads.p_met_cov[d] ==
nullptr) m_ads.compute_cov(d);
97 int place(m_place_syst + (d - syst->dom_min));
98 if (p_h[d] ==
nullptr) p_h[d] =
new Term_eq(*syst->term[place]);
99 else *p_h[d] = *syst->term[place];
101 if (p_met_cov[d] ==
nullptr) p_met_cov[d] =
new Term_eq(*m_ads.p_met_cov[d] + *p_h[d]);
102 else *p_met_cov[d] = *m_ads.p_met_cov[d] + *p_h[d];
106 if (p_met_cov[d] ==
nullptr) p_met_cov[d] =
new Term_eq(d, *m_ads.give_term(d, COV)->val_t + *p_hmet);
107 else *p_met_cov[d] =
Term_eq(d, *m_ads.give_term(d, COV)->val_t + *p_hmet);
110 m_doder = (p_met_cov[d]->der_t !=
nullptr);
115 if (p_met_cov[d] ==
nullptr) compute_cov(d);
116 if (m_ads.p_met_con[d] ==
nullptr) m_ads.compute_con(d);
117 int dim(espace.get_ndim());
133 gsl_permutation* p(gsl_permutation_calloc(dim));
137 int p1(
static_cast<int>(gsl_permutation_get(p, 0)) + 1);
138 int p2(
static_cast<int>(gsl_permutation_get(p, 1)) + 1);
139 int p3(
static_cast<int>(gsl_permutation_get(p, 2)) + 1);
140 detval += signature * (*p_met_cov[d]->val_t)(p1, 1)(d) * (*p_met_cov[d]->val_t)(p2, 2)(d) * (*p_met_cov[d]->val_t)(p3, 3)(d);
143 detder += signature *((*p_met_cov[d]->der_t)(p1, 1)(d) * (*p_met_cov[d]->val_t)(p2, 2)(d) * (*p_met_cov[d]->val_t)(p3, 3)(d)
144 + (*p_met_cov[d]->val_t)(p1, 1)(d) * (*p_met_cov[d]->der_t)(p2, 2)(d) * (*p_met_cov[d]->val_t)(p3, 3)(d)
145 + (*p_met_cov[d]->val_t)(p1, 1)(d) * (*p_met_cov[d]->val_t)(p2, 2)(d) * (*p_met_cov[d]->der_t)(p3, 3)(d));
147 }
while(gsl_permutation_next(p) == GSL_SUCCESS);
148 gsl_permutation_free(p);
151 for (
int i(1) ; i <= dim ; ++i)
153 for (
int j(i) ; j <= dim ; ++j)
157 p = gsl_permutation_calloc(dim - 1);
161 int p1(
static_cast<int>(gsl_permutation_get(p, 0)) + 1);
162 int p2(
static_cast<int>(gsl_permutation_get(p, 1)) + 1);
163 vector<int> index1, index2;
164 index1 = ind_com(i, j, p1, 1);
165 index2 = ind_com(i, j, p2, 2);
166 cmpval += pow(-1.0, i + j)*signature*(*p_met_cov[d]->val_t)(index1[0], index1[1])(d)*(*p_met_cov[d]->val_t)(index2[0],index2[1])(d);
168 cmpder += pow(-1.0, i + j)*signature*(*p_met_cov[d]->der_t)(index1[0], index1[1])(d)*(*p_met_cov[d]->val_t)(index2[0], index2[1])(d)
169 + pow(-1.0, i + j)*signature*(*p_met_cov[d]->val_t)(index1[0], index1[1])(d)*(*p_met_cov[d]->der_t)(index2[0], index2[1])(d);
170 }
while(gsl_permutation_next(p) == GSL_SUCCESS);
171 gsl_permutation_free(p);
175 der.
set_domain(d) = cmpder / detval - cmpval * detder / (detval*detval);
176 res[j - 1 + dim*(i - 1) - i*(i - 1)/2] =
new Term_eq (d, val, der);
178 else res[j - 1 + dim*(i - 1) - i*(i - 1)/2] =
new Term_eq (d, val);
185 for (
int i(1) ; i <= dim ; ++i)
186 for (
int j(i) ; j <= dim ; ++j)
187 resval.
set(i, j) = res[j - 1 + dim*(i - 1) - i*(i - 1)/2]->
get_val_t();
192 if (p_met_con[d] ==
nullptr) p_met_con[d] =
new Term_eq(d, resval);
193 else *p_met_con[d] =
Term_eq(d, resval);
197 for (
int i(1) ; i <= dim ; ++i)
198 for (
int j(i) ; j <= dim ; ++j)
199 resder.
set(i, j) = res[j - 1 + dim*(i - 1) - i*(i - 1)/2]->
get_der_t();
201 if (p_met_con[d] ==
nullptr) p_met_con[d] =
new Term_eq(d, resval, resder);
202 else *p_met_con[d] =
Term_eq(d, resval, resder);
205 for (
int i(0) ; i < dim*(dim + 1)/2 ; ++i)
delete res[i];
209 resval = *p_met_con[d]->val_t - *m_ads.give_term(d, CON)->val_t;
210 if (m_doder) resder = *p_met_con[d]->der_t - *m_ads.give_term(d, CON)->der_t;
213 if (p_k[d] ==
nullptr) p_k[d] =
new Term_eq(d, resval);
214 else *p_k[d] =
Term_eq(d, resval);
218 if (p_k[d] ==
nullptr) p_k[d] =
new Term_eq(d, resval, resder);
219 else *p_k[d] =
Term_eq(d, resval, resder);
226 int dim(espace.get_ndim());
227 int valence(so.get_val_t().get_valence());
228 int type_start(so.get_val_t().get_index_type (ind));
230 if (p_met_con[d] ==
nullptr and type_start == COV) compute_con(d);
231 if (p_met_cov[d] ==
nullptr and type_start == CON) compute_cov(d);
232 bool doder(so.der_t !=
nullptr and m_doder);
234 for (
int i(0) ; i < valence ; ++i) type_res.
set(i) = (i == ind) ? - so.get_val_t().get_index_type(i) : so.get_val_t().get_index_type(i);
235 Tensor val_res(espace, valence, type_res, *p_basis);
236 Tensor val_der(espace, valence, type_res, *p_basis);
245 for (
int k(0) ; k < dim ; ++k)
248 if (type_start == COV) cmpval += (*p_met_con[d]->val_t)(pos(ind) + 1, k + 1)(d) * (*so.val_t)(copie)(d);
249 else cmpval += (*p_met_cov[d]->val_t)(pos(ind) + 1, k + 1)(d) * (*so.val_t)(copie)(d);
255 for (
int k(0) ; k < dim ; ++k)
258 if (type_start == COV) cmpder += (*p_met_con[d]->val_t)(pos(ind) + 1, k + 1)(d) * (*so.der_t)(copie)(d)
259 + (*p_met_con[d]->der_t)(pos(ind) + 1, k + 1)(d) * (*so.val_t)(copie)(d);
261 else cmpder += (*p_met_cov[d]->val_t)(pos(ind) + 1, k + 1)(d) * (*so.der_t)(copie)(d)
262 + (*p_met_cov[d]->der_t)(pos(ind) + 1, k + 1)(d) * (*so.val_t)(copie)(d);
269 if (so.get_val_t().is_name_affected())
272 for (
int i(0) ; i < valence ; ++i) val_res.
set_name_ind(i, so.val_t->get_name_ind()[i]);
276 for (
int i(0) ; i < valence ; ++i) val_der.
set_name_ind(i, so.val_t->get_name_ind()[i]);
281 so.val_t =
new Tensor(val_res);
283 so.der_t = doder ?
new Tensor(val_der) :
nullptr;
286 if (type_start == CON) so = m_ads.div_eps(so, 2);
287 else if (type_start == COV) so = m_ads.mul_eps(so, 2);
292 if (p_met_cov[d] ==
nullptr) compute_cov(d);
293 if (p_met_con[d] ==
nullptr) compute_con(d);
294 if (m_ads.p_christo[d] ==
nullptr) m_ads.compute_christo(d);
296 int dim(espace.get_ndim());
298 type_ind.
set(0) = COV ; type_ind.
set(1) = COV ; type_ind.
set(2) = CON;
299 Tensor res_val(espace, 3, type_ind, *p_basis);
300 Tensor res_der(espace, 3, type_ind, *p_basis);
309 for (
int l(1) ; l <= dim ; ++l)
311 cmpval += 0.5 * m_ads.m_eps(d) * (*p_met_con[d]->val_t)(pos(2) + 1, l)(d)
312 * ( (*p_h[d]->val_t)(pos(1) + 1, l)(d).der_abs(pos(0) + 1)
313 + (*p_h[d]->val_t)(pos(0) + 1, l)(d).der_abs(pos(1) + 1)
314 - (*p_h[d]->val_t)(pos(0) + 1, pos(1) + 1)(d).der_abs(l) )
315 - (*p_met_con[d]->val_t)(pos(2) + 1, l)(d)
316 * ( (*p_h[d]->val_t)(pos(1) + 1, l)(d)*(*p_der_eps)(pos(0) + 1)(d)
317 + (*p_h[d]->val_t)(pos(0) + 1, l)(d)*(*p_der_eps)(pos(1) + 1)(d)
318 - (*p_h[d]->val_t)(pos(0) + 1, pos(1) + 1)(d)*(*p_der_eps)(l)(d));
319 for (
int m(1) ; m <= dim ; ++m) cmpval -= (*p_met_con[d]->val_t)(pos(2) + 1, l)(d)*(*m_ads.p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1, m)(d)*(*p_h[d]->val_t)(l,m)(d);
326 for (
int l(1) ; l <= dim ; ++l)
328 cmpder += 0.5 * m_ads.m_eps(d) * (*p_met_con[d]->der_t)(pos(2) + 1, l)(d)
329 * ( (*p_h[d]->val_t)(pos(1) + 1, l)(d).der_abs(pos(0) + 1)
330 + (*p_h[d]->val_t)(pos(0) + 1, l)(d).der_abs(pos(1) + 1)
331 - (*p_h[d]->val_t)(pos(0) + 1, pos(1) + 1)(d).der_abs(l) )
332 + 0.5 * m_ads.m_eps(d) * (*p_met_con[d]->val_t)(pos(2) + 1, l)(d)
333 * ( (*p_h[d]->der_t)(pos(1) + 1, l)(d).der_abs(pos(0) + 1)
334 + (*p_h[d]->der_t)(pos(0) + 1, l)(d).der_abs(pos(1) + 1)
335 - (*p_h[d]->der_t)(pos(0) + 1, pos(1) + 1)(d).der_abs(l) )
336 - (*p_met_con[d]->der_t)(pos(2) + 1, l)(d)
337 * ( (*p_h[d]->val_t)(pos(0) + 1, l)(d)*(*p_der_eps)(pos(1) + 1)(d)
338 + (*p_h[d]->val_t)(pos(1) + 1, l)(d)*(*p_der_eps)(pos(0) + 1)(d)
339 - (*p_h[d]->val_t)(pos(0) + 1, pos(1) + 1)(d)*(*p_der_eps)(l)(d))
340 - (*p_met_con[d]->val_t)(pos(2) + 1, l)(d)
341 * ( (*p_h[d]->der_t)(pos(0) + 1, l)(d)*(*p_der_eps)(pos(1) + 1)(d)
342 + (*p_h[d]->der_t)(pos(1) + 1, l)(d)*(*p_der_eps)(pos(0) + 1)(d)
343 - (*p_h[d]->der_t)(pos(0) + 1, pos(1) + 1)(d)*(*p_der_eps)(l)(d));
344 for (
int m(1) ; m <= dim ; ++m) cmpder -= (*p_met_con[d]->der_t)(pos(2) + 1, l)(d)*(*m_ads.p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1, m)(d)*(*p_h[d]->val_t)(l,m)(d)
345 + (*p_met_con[d]->val_t)(pos(2) + 1, l)(d)*(*m_ads.p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1, m)(d)*(*p_h[d]->der_t)(l,m)(d);
353 if (p_christo[d] ==
nullptr) p_christo[d] =
new Term_eq(d, res_val);
354 else *p_christo[d] =
Term_eq (d, res_val);
358 if (p_christo[d] ==
nullptr) p_christo[d] =
new Term_eq(d, res_val, res_der);
359 else *p_christo[d] =
Term_eq(d, res_val, res_der);
365 assert(espace.get_ndim() == 3);
366 bool doder(so.der_t !=
nullptr and m_doder);
368 int so_val(so.val_t->get_valence());
369 Term_eq res(m_ads.derive_simple(so));
372 Term_eq gam_res(d, gam_res_arg);
374 if (p_christo[d] ==
nullptr) compute_christo(d);
376 Index poschristo(*p_christo[d]->val_t);
377 Index posso(*so.val_t);
379 for (
int cmp(0) ; cmp < so_val ; ++cmp)
382 genre_indice = so.val_t->get_index_type(cmp);
385 if (genre_indice == CON)
387 poschristo.
set(0) = posgamres(0);
388 poschristo.
set(2) = posgamres(cmp + 1);
389 for (
int i(0) ; i < so_val ; ++i)
if (i != cmp) posso.
set(i) = posgamres(i + 1);
390 for (
int mute(0) ; mute < 3 ; ++mute)
392 poschristo.
set(1) = mute;
393 posso.
set(cmp) = mute;
394 gam_res.
val_t->
set(posgamres).
set_domain(d) += (*p_christo[d]->val_t)(poschristo)(d) * (*so.val_t)(posso)(d);
395 if (doder) gam_res.
der_t->
set(posgamres).
set_domain(d) += (*p_christo[d]->val_t)(poschristo)(d) * (*so.der_t)(posso)(d)
396 + (*p_christo[d]->der_t)(poschristo)(d) * (*so.val_t)(posso)(d);
399 if (genre_indice == COV)
401 poschristo.
set(0) = posgamres(0);
402 poschristo.
set(1) = posgamres(cmp + 1);
403 for (
int i(0) ; i < so_val ; ++i)
if (i != cmp) posso.
set(i) = posgamres(i + 1);
404 for (
int mute(0) ; mute < 3 ; ++mute)
406 poschristo.
set(2) = mute;
407 posso.
set(cmp) = mute;
408 gam_res.
val_t->
set(posgamres).
set_domain(d) -= (*p_christo[d]->val_t)(poschristo)(d) * (*so.val_t)(posso)(d);
409 if (doder) gam_res.
der_t->
set(posgamres).
set_domain(d) -= (*p_christo[d]->val_t)(poschristo)(d) * (*so.der_t)(posso)(d)
410 - (*p_christo[d]->der_t)(poschristo)(d) * (*so.val_t)(posso)(d);
413 }
while(posgamres.
inc());
415 return res + m_ads.div_eps(gam_res, 1);
421 int so_val(so.val_t->get_valence());
422 bool doder(so.der_t !=
nullptr and m_doder);
423 if (p_christo[d] ==
nullptr) compute_christo(d);
424 Term_eq res(derive_simple(so));
425 if (type_der == CON) manipulate_ind(res, 0);
428 bool inner_sum(
false);
429 if (so.val_t->is_name_affected())
433 for (
int i(0) ; i < so_val ; ++i)
436 if (so.val_t->get_name_ind()[i] == ind_der) inner_sum =
true;
442 for (
int i(0) ; i < so_val ; ++i) res.
der_t->
set_name_ind(i + 1, so.val_t->get_name_ind()[i]);
445 else if (so_val == 0)
465 if (p_christo[d] ==
nullptr) compute_christo(d);
466 if (m_ads.p_christo[d] ==
nullptr) m_ads.compute_christo(d);
467 int dim(espace.get_ndim());
468 Tensor res_val(espace, 2, COV, *p_basis);
469 Tensor res_der(espace, 2, COV, *p_basis);
476 for (
int k(1) ; k <= dim ; ++k)
478 cmpval += m_ads.m_eps(d)*( (*p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1, k)(d).der_abs(k)
479 - (*p_christo[d]->val_t)(pos(1) + 1, k, k)(d).der_abs(pos(0) + 1) )
480 - (*p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1, k)(d)*(*p_der_eps)(k)(d)
481 + (*p_christo[d]->val_t)(pos(1) + 1, k, k)(d)*(*p_der_eps)(pos(0) + 1)(d);
482 for (
int l(1) ; l <= dim ; ++l) cmpval += (*p_christo[d]->val_t)(k, l, l)(d) * (*p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1, k)(d)
483 - (*p_christo[d]->val_t)(pos(0) + 1, l, k)(d) * (*p_christo[d]->val_t)(pos(1) + 1, k, l)(d)
484 + (*m_ads.p_christo[d]->val_t)(k,l,k)(d) * (*p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1,l)(d)
485 - (*m_ads.p_christo[d]->val_t)(k,pos(1) + 1,l)(d) * (*p_christo[d]->val_t)(pos(0) + 1, l,k)(d)
486 - (*m_ads.p_christo[d]->val_t)(pos(0) + 1,l,k)(d) * (*p_christo[d]->val_t)(pos(1) + 1, k,l)(d)
487 + (*m_ads.p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1,l)(d) * (*p_christo[d]->val_t)(l,k,k)(d);
494 for (
int k(1) ; k <= dim ; ++k)
496 cmpder += m_ads.m_eps(d)*( (*p_christo[d]->der_t)(pos(0) + 1, pos(1) + 1, k)(d).der_abs(k)
497 - (*p_christo[d]->der_t)(pos(1) + 1, k, k)(d).der_abs(pos(0) + 1) )
498 - (*p_christo[d]->der_t)(pos(0) + 1, pos(1) + 1, k)(d)*(*p_der_eps)(k)(d)
499 + (*p_christo[d]->der_t)(pos(1) + 1, k, k)(d)*(*p_der_eps)(pos(0) + 1)(d);
500 for (
int l(1) ; l <= dim ; ++l) cmpder += (*p_christo[d]->der_t)(k, l, l)(d) * (*p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1, k)(d)
501 + (*p_christo[d]->val_t)(k, l, l)(d) * (*p_christo[d]->der_t)(pos(0) + 1, pos(1) + 1, k)(d)
502 - (*p_christo[d]->der_t)(pos(0) + 1, l, k)(d) * (*p_christo[d]->val_t)(pos(1) + 1, k, l)(d)
503 - (*p_christo[d]->val_t)(pos(0) + 1, l, k)(d) * (*p_christo[d]->der_t)(pos(1) + 1, k, l)(d)
504 + (*m_ads.p_christo[d]->val_t)(k,l,k)(d) * (*p_christo[d]->der_t)(pos(0) + 1, pos(1) + 1,l)(d)
505 - (*m_ads.p_christo[d]->val_t)(k,pos(1) + 1,l)(d) * (*p_christo[d]->der_t)(pos(0) + 1, l,k)(d)
506 - (*m_ads.p_christo[d]->val_t)(pos(0) + 1,l,k)(d) * (*p_christo[d]->der_t)(pos(1) + 1, k,l)(d)
507 + (*m_ads.p_christo[d]->val_t)(pos(0) + 1, pos(1) + 1,l)(d) * (*p_christo[d]->der_t)(l,k,k)(d);
514 if (p_ricci_tensor[d] ==
nullptr) p_ricci_tensor[d] =
new Term_eq(d, res_val);
515 else *p_ricci_tensor[d] =
Term_eq(d, res_val);
517 if (p_ricci_tensor[d] ==
nullptr) p_ricci_tensor[d] =
new Term_eq(d, res_val, res_der);
518 else *p_ricci_tensor[d] =
Term_eq(d, res_val, res_der);
523 int dim(espace.get_ndim());
524 if (p_met_cov[d] ==
nullptr) compute_cov(d);
525 if (p_met_con[d] ==
nullptr) compute_con(d);
526 if (p_ricci_tensor[d] ==
nullptr) compute_ricci_tensor(d);
527 if (m_ads.p_ricci_tensor[d] ==
nullptr) m_ads.compute_ricci_tensor(d);
534 for (
int i(1) ; i <= dim ; ++i)
535 for (
int j(1) ; j <= dim ; ++j)
536 cmpval += (*p_met_con[d]->val_t)(i, j)(d) * (*p_ricci_tensor[d]->val_t)(i, j)(d)
537 + (*p_k[d]->val_t)(i, j)(d) * (*m_ads.p_ricci_tensor[d]->val_t)(i, j)(d);
542 for (
int i(1) ; i <= dim ; ++i)
543 for (
int j(1) ; j <= dim ; ++j)
544 cmpder += (*p_met_con[d]->val_t)(i, j)(d) * ( (*p_ricci_tensor[d]->der_t)(i, j)(d) )
545 + (*p_met_con[d]->der_t)(i, j)(d) * (*p_ricci_tensor[d]->val_t)(i, j)(d)
546 + (*p_k[d]->der_t)(i, j)(d) * (*m_ads.p_ricci_tensor[d]->val_t)(i, j)(d);
552 if (p_ricci_scalar[d] ==
nullptr) p_ricci_scalar[d] =
new Term_eq(d, res_val);
553 else *p_ricci_scalar[d] =
Term_eq (d, res_val);
557 if (p_ricci_scalar[d] ==
nullptr) p_ricci_scalar[d] =
new Term_eq(d, res_val, res_der);
558 else *p_ricci_scalar[d] =
Term_eq(d, res_val, res_der);
567 if (ss.
met !=
nullptr)
569 cerr <<
"Metric already set for the system" << endl;
583 if (ss.
met !=
nullptr)
585 cerr <<
"Metric already set for the system" << endl;
593 void Metric_AADS::set_system(
System_of_eqs& ss,
const char* name_met,
const char* name_hmet,
const char* name_back_cov,
const char* name_back_con,
const char* name_back_gam,
const char* name_back_ricci)
596 m_ads.
init_system(ss, name_back_cov, name_back_con, name_back_gam, name_back_ricci);
599 if (ss.
met !=
nullptr)
601 cerr <<
"Metric already set for the system" << endl;
reference set(const Index &pos)
Read/write of an element.
Describes the tensorial basis used by the various tensors.
virtual double get_rmax() const
Returns the maximum radius.
Val_domain const & get_cart(int i) const
Returns a Cartesian coordinates.
Class that gives the position inside a multi-dimensional Array.
int & set(int i)
Read/write of the position in a given dimension.
void set_start()
Sets the position to zero in all dimensions.
bool inc(int increm, int var=0)
Increments the position of the Index.
Class to manage asymptotically anti de Sitter metrics.
Term_eq derive_simple(const Term_eq &so) const
Computes the covariant derivative.
Vector * p_der_eps
Pointer on the vector containing the derivative of the conformal factor .
Metric_ADS m_ads
Background metric(i.e. ADS metric).
virtual void manipulate_ind(Term_eq &so, int ind) const
Uses the Metric to manipulate one of the index of a Term_eq (i.e.
virtual void compute_christo(int d) const
Computes the Christoffel symbols, in a given Domain.
virtual void update()
Updates the derived quantities (Christoffels etc..) This is done only for the ones that are needed,...
Metric_AADS(const Space &space, Metric_tensor &hmet)
Standard constructor.
void set_system(System_of_eqs &syst, const char *name_met, const char *name_hmet)
Associates the metric to a given system of equations.
virtual void compute_ricci_scalar(int d) const
Computes the Ricci scalar, in a given Domain.
virtual void compute_ricci_tensor(int d) const
Computes the Ricci tensor, in a given Domain.
virtual void compute_cov(int d) const
Computes the covariant representation, in a given Domain.
int m_nd
number of physical domains (usually the last compaxtified domain is discarded).
Term_eq ** p_h
Pointers on the differences between the covariant metric and the covariant background.
virtual void compute_con(int d) const
Computes the contravariant representation, in a given Domain.
Base_tensor * p_basis
Pointer on the tensorial basis (Cartesian basis only).
virtual const Metric * get_background() const
virtual Term_eq derive(int type_der, char ind_der, const Term_eq &so) const
Computes the covariant derivative of a Term_eq (assumes Cartesian basis of decomposition).
Term_eq ** p_k
Pointers on the differences between the contravariant metric and the contravariant background.
int m_place_syst
Where is the unknown h in the system of equations.
Metric_tensor * p_hmet
: the discrepancy between covariant metric and contravariant background.
void init_system(System_of_eqs &syst, const char *name_back_cov, const char *name_back_con, const char *name_back_ricci)
Put the covariant and contravariant metric, dans the Ricci background into the System_of_eqs,...
Scalar m_rho2
Scalar containing
Particular type of Tensor, dedicated to the desription of metrics.
Purely abstract class for metric handling.
int type_tensor
States if one works in the CON or COV representation.
MMPtr_array< Term_eq > p_ricci_tensor
Array of pointers on various Term_eq.
const Space & espace
The associated Space.
MMPtr_array< Term_eq > p_met_cov
Array of pointers on various Term_eq.
MMPtr_array< Term_eq > p_met_con
Array of pointers on various Term_eq.
MMPtr_array< Term_eq > p_christo
Array of pointers on various Term_eq.
MMPtr_array< Term_eq > p_ricci_scalar
Array of pointers on various Term_eq.
const System_of_eqs * syst
Pointer of the system of equations where the metric is used (only one for now).
The class Scalar does not really implements scalars in the mathematical sense but rather tensorial co...
Val_domain & set_domain(int)
Read/write of a particular Val_domain.
The Space class is an ensemble of domains describing the whole space of the computation.
const Domain * get_domain(int i) const
returns a pointer on the domain.
int get_ndim() const
Returns the number of dimensions.
int get_nbr_domains() const
Returns the number of Domains.
Class used to describe and solve a system of equations.
virtual void add_var(const char *name, double &var)
Addition of a variable (number case)
int ndom
Number of domains used.
char * name_met
Name by which the metric is recognized.
Metric * met
Pointer on the associated Metric, if defined.
int nvar
Number of unknown fields.
void set_name_ind(int dd, char name)
Sets the name of one index ; the names must have been affected first.
void set_name_affected()
Affects the name of the indices.
Scalar & set(const Array< int > &ind)
Returns the value of a component (read/write version).
int get_index_type(int i) const
Gives the type (covariant or contravariant) of a given index.
int get_valence() const
Returns the valence.
Tensor do_summation_one_dom(int dd) const
Does the inner contraction of the Tensor in a given domain.
This class is intended to describe the manage objects appearing in the equations.
Tensor * der_t
Pointer on the variation, if the Term_eq is a Tensor.
void set_der_zero()
Sets the variation of the approriate type to zero.
Tensor const & get_val_t() const
Tensor const & get_der_t() const
Tensor * val_t
Pointer on the value, if the Term_eq is a Tensor.
Class for storing the basis of decompositions of a field and its values on both the configuration and...
A class derived from Tensor to deal specificaly with objects of valence 1 (and so also 1-forms).
Scalar & set(int)
Read/write access to a component.