Any tips on evaluating Riemann tensor?

There is a relatively fast approach to computing the Riemann tensor, Ricci tensor and Ricci scalar given a metric tensor known as the Cartan method or method of moving frames. Given a line element,

$$ds^2 = g_{\mu\nu}dx^\mu dx^\nu$$

you pick an orthonormal basis $e^a = e^a_\mu dx^\mu$ such that $ds^2 = \eta_{ab}e^a e^b$. The first Cartan structure equation,

$$de^a + \omega^a_b \wedge e^b = 0$$

allows one to solve for the spin connection components $\omega^a_b$ from which one can compute the Ricci tensor in the orthonormal basis:

$$R^a_b = d\omega^a_b + \omega^a_c \wedge \omega^c_b.$$

The entire process simply requires exterior differentiation of the basis and spin connection. The Riemann components may be deduced from the relation,

$$R^a_b = R^a_{bcd} \, e^c \wedge e^d$$

possibly with a factor of $\frac12$ depending on your conventions. To convert back to the coordinate basis, one must simply contract with the basis back:

$$R^\mu_{\nu \lambda \kappa} = (e^{-1})^\mu_a \, R^a_{bcd}\, e^b_\nu \, e^c_\lambda \, e^d_\kappa.$$

For an explicit calculation see my previous answers here, here and here. The gravitational physics lectures at pirsa.org also provide explicit examples. As for using computer algebra systems, if all you're looking to do is compute curvature tensors, Hartle's textbook for Mathematica is your best option or the GREAT package. If you'd like to do more advanced stuff like perturbation theory, then xAct is required.


This is an old question, but I feel this is still worthy of an answer. If you don't want to use orthonormal frames, there are still methods that allow one to organize data into easy-to-handle forms that make these calculations simpler.

First note that $R^\rho_{\ \sigma\mu\nu}=\partial_\mu\Gamma^\rho_{\nu\sigma}-\partial_\nu\Gamma^\rho_{\mu\sigma}+\Gamma^\rho_{\mu\lambda}\Gamma^\lambda_{\nu\sigma}-\Gamma^\rho_{\nu\lambda}\Gamma^\lambda_{\mu\sigma}$, which can be organized into several matrix equations, if we define $\Gamma_\mu$ to be the matrix whose $(\rho,\sigma)$-th element is $\Gamma^\rho_{\mu\sigma}$. Then there exits 6 independent "Riemann-matrices", $\mathbf{R}_{\mu\nu}$ ($\mu,\nu$ skew-symmetric) for which $$ \mathbf{R}_{\mu\nu}=\partial_\mu\Gamma_\nu-\partial_\nu\Gamma_\mu+[\Gamma_\mu,\Gamma_\nu]. $$ This potentially involves more calculations than simply isolating the 20 independent components and brute-forcing them, but the use of matrices allows a very clear overview and organization of these components.

A variation in this theme is to use the same method that is used in the orthonormal frame approach, the second structure equation is still valid. We can calculate the Riemann-tensor as a matrix of 2-forms, if we define $\Gamma^\mu_\nu=\Gamma^\mu_{\sigma\nu}dx^\sigma$, then $$ R^\mu_{\ \nu}=\frac{1}{2}R^\mu_{\ \nu\rho\sigma}dx^\rho\wedge dx^\sigma=d\Gamma^\mu_\nu+\Gamma^\mu_\lambda\wedge\Gamma^\lambda_\nu. $$

We cannot directly exploit the symmetries of the Riemann-tensor here, unless $\mu$ is lowered, but for a diagonal metric, the $\mu$ index can be lowered very easily, then there are only 6 2-forms to be calculated from this.


The short answer is that calculating the Riemann Tensor is a grind. It will take a while, no matter what way you do it.

Presumably you're doing the Schwarzschild metric in the standard (Schwarzschild) coordinates, so you're aided by the fact that the metric tensor is diagonal. This means that $R^\alpha_{\beta \gamma \delta} = g^{\alpha \alpha}R_{\alpha \beta \gamma \delta}$, no sum on $\alpha$. This is convenient, since the rank $(0,4)$ form of the Riemann tensor is where all the symmetries lie, but the $(1,3)$ form is what we have a convenient formula for. All that's left is to use the symmetries you know, pick your 20 components, and calculate them by hand. Beforehand, calculate the non-zero entries of $\partial_\alpha \Gamma^\beta_{\gamma \delta}$ and $\Gamma^\alpha_{\beta \epsilon} \Gamma^\epsilon_{\gamma \delta}$.

Good luck!

Although I completely encourage algebraic exercises like this, there's also something to be said for getting the answer fast. If you have access, it's worth it to write your own Maple or Mathematica script to do this for you for an arbitrary metric. You can also use SymPy, it's free but is a little less powerful last I checked.