Hi Vladimir,
> Thank you very much for your explanation. I very much like this google
> group. Your support is outstanding, especially considering that this is a
> free package.
Thanks!
> I am just learning to use xAct. So, here is what made me confused
>
> DefMetric[-1,metric[-a,-b],CD] defines abstract metric and cov
> derivative, and from these ChristoffelCD, RiemannCD, RicciCD and all other
> tensors.
Yes. That Christoffel is Christoffel[CD, PD]. Think of it as CD - PD.
> DefChart[B, M, {0, 1, 2, 3}, {t[], x[], y[], z[]}] defines basis B
> and part. derivative PDB, and then from this derivative we get
> ChristoffelPDB, RiemannPDB and so on.
Yes. That other Christoffel is Christoffel[PDB, PD].
> Then just after calling MetricCompute another tensor is defined:
>
> MetricCompute[metric, B, All] defines ChristoffelCDPDB and
> computes values for this tensor
This Christoffel is Christoffel[CD, PDB] = Christoffel[CD, PD] -
Christoffel[PDB, PD]. That is the one for which we can compute
components.
> I do not understand the meaning of the last ChristoffelCDPDB, and it was
> the last place to expect to find values of Christoffel symbols for given
> metric and specified basis.
Christoffel[CD, PDB] is fully specified because you have given the
metric of CD in the basis B. However, PD is an abstract
**unspecified** ordinary derivative ("ordinary" is Wald's terminology,
meaning zero torsion and zero curvature), used only for abstract
computations. Hence we cannot assign explicit components for objects
depending on it. As I said, PD is just used to simulate the presence
of a chart in abstract computations.
> On the contrary, Riemann, Ricci, Weyl and all other tensor were stored in
> their respective TensorCD variables.
Exactly. Those are tensors depending only on **one** covariant
derivative, namely CD, which you have fully specified as being the
Levi-Civita connection of an explicit metric.
> There is another thing I would like to report. ChangeComponents creates
> very compact folded rules, but ToValues doesn't use them fully.
> For example
>
> RicciCD[a, b] // ToBasis[B]
> RicciCD[-a, -b] // ToBasis[B]
> ChangeComponents[%%, %]
>
> and then I have to call ToValues twice!!
>
> RicciCD[a, b] // ToBasis[B] // ComponentArray // ToValues // ToValues
Yes. I'm aware of this. I could define ToValues using FixedPoint, but
ToValues is a slow function, and FixedPoint would make it even slower.
I'm sorry but you have to use ToValues as many times as you need it.
> Because ToValues doesn't convert upper indexed metric symbols, such as
> SuperscriptBox["g", "00"]
The problem is the ToValues uses the values of the tensors which
appear explicitly in the expression. The first ToValues only sees
RicciCD, and hence doesn't know that it has to use values for the
metric as well, because the values of the upper RicciCD are converted
into values of the lower RicciCD and metric factors.
> I occurred to this when working with Tolman metric, which has non-zero
> Ricci tensor:
>
> << xAct`xCoba`;
> DefManifold[M, 4, IndexRange[a, l]];
> DefMetric[-1, metric[-a, -b], CD, PrintAs -> "g"];
> DefChart[B, M, {0, 1, 2, 3}, {t[], r[], \[Theta][], \[Phi][]}];
> TLB = DiagonalMatrix[{
> Exp[n[r[], t[]]],
> -Exp[l[r[], t[]]],
> -R[r[], t[]]^2,
> -R[r[], t[]]^2*Sin[\[Theta][]]^2
> }];
> ComponentValue[
> metric[-a, -b] // ToBasis[B] // ComponentArray,
> TLB
> ];
> MetricCompute[metric, B, All];
> RicciCD[a, b] // ToBasis[B]
> RicciCD[-a, -b] // ToBasis[B]
> ChangeComponents[%%, %]
> RicciCD[a, b] // ToBasis[B] // ComponentArray // ToValues // ToValues
Thanks for the example. Don't forget to declare the functions l, n, R
with DefScalarFunction. Note also that you are using l both as an
index and as a function. That's dangerous. If you declared l with
DefScalarFunction it would complain that it is already declared as an
index.
Cheers,
Jose.