I am calculating the Riemann tensor for the Schwarzschild solution. I've calculated all 9 non-vanishing Christoffel symbols already. Now I need to evaluate the Riemann tensor and I find no easy way to do it. I have $$ R^\alpha{}_{\beta\gamma\delta} = \partial_\gamma\Gamma^\alpha_{\beta\delta} - \partial_\delta\Gamma^\alpha_{\beta\gamma} + \Gamma^\mu_{\beta\delta} \Gamma^\alpha_{\mu\gamma} - \Gamma^\mu_{\beta\gamma} \Gamma^\alpha_{\mu\delta} $$ and I only have the following connections different from zero: $$ \Gamma^r_{tt}, \Gamma^r_{\theta\theta},\Gamma^r_{\phi\phi},\Gamma^r_{rr}, \Gamma^\theta_{r\theta},\Gamma^\phi_{r\phi}, \Gamma^\theta_{\phi\phi}, \Gamma^\phi_{\theta\phi}, \Gamma^t_{tr} $$

I'm thinking of putting in the first partial derivative $\partial_\gamma\Gamma^\alpha_{\beta\delta}$ only one of those symbols I already have, however I'm afraid it won't make me go trough every possible non-vanishing Riemann tensor component I need.

Will I get all the components? Are there other easy ways to do it?

PS1: Yes, I know the symmetries and that there are only 20 independent components

PS2: I also know that I have the answer in the book, but I want to do it myself to practice

PS3: I don't want a specifically method for Schwarzschild solution only, a more "general easy way out" of it.


5 Answers 5


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.

  • 4
    $\begingroup$ It's a pity that this is not the accepted answer. $\endgroup$
    – noir1993
    Commented Jan 27, 2018 at 19:44
  • $\begingroup$ The Schwarzschild solution was explicitly worked out in a set of unofficial lecture notes based on a course by Malcolm Perry. I'm sure it's still available online although I can not seem to find it at the moment. $\endgroup$
    – noir1993
    Commented Jan 27, 2018 at 19:50
  • 1
    $\begingroup$ @noir1993 It is a standard exercise done in the lectures I linked in more generality. And thanks, I do believe the accepted the answer isn't really an answer... $\endgroup$
    – JamalS
    Commented Jun 3, 2020 at 18:39

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.

  • $\begingroup$ Thanks for this answer, this made the computation tractable for me. $\endgroup$ Commented Jun 20, 2020 at 10:20

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.

  • $\begingroup$ Well, really thanks. That was the answer I was afraid of, but really helped anyway. Is there any package to use in Mathematica for it? I'm starting to program on it to find the Christoffel symbols right now, however I'm starting from scratch and will take a long time (i'm a begginer programer). $\endgroup$ Commented May 1, 2015 at 2:32
  • $\begingroup$ I've never used a particular package, this was my first google result: Ricci. Luckily Mathematica is sort of built for things like this, and doing it yourself is a good exercise! Use Table[], Sum[], and Inverse[] with lots of Simplify[] in between and you'll be fine :) $\endgroup$
    – Geoff Ryan
    Commented May 1, 2015 at 2:40
  • 1
    $\begingroup$ The package "diffgeo" does all these calculations and more. You can download it from people.brandeis.edu/~headrick/Mathematica $\endgroup$
    – Prahar
    Commented May 1, 2015 at 2:49
  • 1
    $\begingroup$ I believe that James Hartle's GR website (associated with his popular textbook) also has a Mathematica package for calculating similar quantities in GR. web.physics.ucsb.edu/~gravitybook $\endgroup$ Commented May 1, 2015 at 3:10
  • 2
    $\begingroup$ @EdisonCesar: I would actually recommend implementing your own engine in mathematica -- it will teach you how the vector multiplication engine works, and will also teach you how to do the calculation by hand. $\endgroup$ Commented May 1, 2015 at 5:37

Maybe it is useful to list a few packages which help you evaluating the Riemann tensor:

RGTC Easy (Mathematica)

GRTensorII Easy (Maple and limited version for Mathematica)

xAct Hard (Mathamatica)

If you want a fast calculation I would recommend using RGTC for Mathamtica and GRTensorII for Maple.

If you want some special features (manipulation of large groups of permutations,abstract tensor computations, the flagship of the system, high-order perturbation theory in GR,...) use the xAct suite.


I think that calculating the Riemann tensor manually is not particularly illuminating, but if you really want to do it, then why ask for help from us and not from a book? It's quite probable that any advice we may give you comes from a book anyway.

Having said that, the most powerful tensor manipulation package for mathematica is xAct. It requires some solid knowledge in differential geometry which you may or may not yet have though. I am the developer of xPrint, a GUI to xAct which speeds tensor input and may be helpful for beginners. I would advise you spend some time learning differential geometry and basic Mathematica commands first.

Relevant links may be found in my answer to a similar question on Mathematica.SE


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.