The following line must be executed before you begin, it sets up Christoffel. Note that as defined, the argument x must be a list of coordinate names, while g must be set up as an array. restart;with(linalg): Christoffel:=proc(g,x) local ginv,N;N:=nops(x);ginv:=inverse(g); [seq(array([seq([seq(add(ginv[i,n]*(diff(g[n,j],x[k])+diff(g[n,k],x[j])-diff(g[j,k],x[n]))/2,n=1..N),k=1..N)],j=1..N)]),i=1..N)] end proc; Zio2JEkiZ0c2IkkieEdGJTYkSSVnaW52R0YlSSJOR0YlRiVGJUMlPjglLUklbm9wc0clKnByb3RlY3RlZEc2IzklPjgkLV9JJ2xpbmFsZ0c2JEYvSShfc3lzbGliR0YlSShpbnZlcnNlR0YlNiM5JDcjLUkkc2VxR0YvNiQtSSZhcnJheUdGLzYjNyMtRj42JDcjLUY+NiQtSSRhZGRHRi82JCwkKiYmRjM2JEkiaUdGJUkibkdGJSIiIiwoLUklZGlmZkdGLzYkJkY7NiRGUUkiakdGJSZGMTYjSSJrR0YlRlItRlU2JCZGOzYkRlFGZm4mRjE2I0ZZRlItRlU2JCZGOzYkRllGZm4mRjE2I0ZRISIiRlIjRlIiIiMvRlE7RlJGLC9GZm5GZ28vRllGZ28vRlBGZ29GJUYlRiU= The following routine finds the Ricci tensor with two indices down. It is returned as an array. Ricci:=proc(g,x) local Gamma,N;N:=nops(x);Gamma:=Christoffel(g,x); array([seq([seq(add(diff(Gamma[k][i,j],x[k])-diff(Gamma[k][i,k],x[j])+add(Gamma[l][i,j]*Gamma[k][l,k]-Gamma[l][i,k]*Gamma[k][l,j],l=1..N),k=1..N),j=1..N)],i=1..N)]); end proc; Zio2JEkiZ0c2IkkieEdGJTYkSSZHYW1tYUdGJUkiTkdGJUYlRiVDJT44JS1JJW5vcHNHJSpwcm90ZWN0ZWRHNiM5JT44JC1JLENocmlzdG9mZmVsR0YlNiQ5JEYxLUkmYXJyYXlHRi82IzcjLUkkc2VxR0YvNiQ3Iy1GPTYkLUkkYWRkR0YvNiQsKC1JJWRpZmZHRi82JCYmRjM2I0kia0dGJTYkSSJpR0YlSSJqR0YlJkYxRksiIiItRkc2JCZGSjYkRk5GTCZGMTYjRk8hIiItRkM2JCwmKiYmJkYzNiNJImxHRiVGTUZRJkZKNiRGam5GTEZRRlEqJiZGaG5GVUZRJkZKNiRGam5GT0ZRRlgvRmpuO0ZRRixGUS9GTEZiby9GT0Ziby9GTkZib0YlRiVGJQ== Set up the coordinates as a list and the metric as an array. x:=[t,r,theta,phi];g:=array([[-f(r),0,0,0],[0,h(r),0,0],[0,0,r^2,0],[0,0,0,r^2*sin(theta)^2]]); NyZJInRHNiJJInJHRiRJJnRoZXRhR0YkSSRwaGlHRiQ= PTYiNiQ7IiIiIiIlRiVFXFtsMTYkIiIjIiIkIiIhNiRGJ0YqRiw2JEYmRiYsJC1JImZHRiM2I0kickdGIyEiIjYkRipGJ0YsNiRGJkYqRiw2JEYnRiZGLDYkRitGJ0YsNiRGK0YmRiw2JEYrRisqJEYzRio2JEYrRipGLDYkRiZGJ0YsNiRGJkYrRiw2JEYnRitGLDYkRipGKi1JImhHRiNGMjYkRidGJyomRjNGKi1JJHNpbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGIzYjSSZ0aGV0YUdGI0YqNiRGKkYmRiw= To call Riccil, feed it the metric and the list of coordinates, like this: w:=Ricci(g,x); PTYiNiQ7IiIiIiIlRiVFXFtsMTYkIiIjIiIkIiIhNiRGJ0YqRiw2JEYmRiYsKiooLUkiaEdGIzYjSSJyR0YjISIjLUklZGlmZkclKnByb3RlY3RlZEc2JC1JImZHRiNGM0Y0RiYtRjc2JEYxRjRGJiMhIiJGJyomRjFGPy1GNzYkRjZGNEYmI0YmRioqKEYxRj9GNkYqRjpGP0Y+KihGMUY/RjZGJkY0Rj9GJjYkRipGJ0YsNiRGJkYqRiw2JEYnRiZGLDYkRitGJ0YsNiRGK0YmRiw2JEYrRissKioqRjFGP0Y0RiZGOkY/RjZGJiNGP0YqKihGMUY1RjRGJkY8RiZGQ0YmRiYqJEYxRj9GPzYkRitGKkYsNiRGJkYnRiw2JEYmRitGLDYkRidGK0YsNiRGKkYqLCoqJkY6RjVGNkYqI0YmRicqJkY6Rj9GQUYmRk4qKkYxRj9GPEYmRjpGP0Y2RiZGWCooRjFGP0Y8RiZGNEY/RiY2JEYnRicsKiosRjFGP0Y0RiYtSSRzaW5HNiRGOEkoX3N5c2xpYkdGIzYjSSZ0aGV0YUdGI0YqRjpGP0Y2RiZGTioqRjFGNUY0RiZGaW5GKkY8RiZGQyokRmluRipGJiomRjFGP0ZpbkYqRj82JEYqRiZGLA== To call out specific elements, simply put the two arguments in a single set of square brackets. For example, to get the sum of the tt and rr components in flat coordinate; simplify(w[1,1]/f(r)+w[2,2]/h(r)); KiotSSJmRzYiNiNJInJHRiUhIiIsJiomLUklZGlmZkclKnByb3RlY3RlZEc2JEYjRiciIiItSSJoR0YlRiZGL0YvKiYtRiw2JEYwRidGL0YjRi9GL0YvRjAhIiNGJ0Yo The tt component of the Einstein tensor in locally flat coordinates is just simplify(w[1,1]/f(r)+w[2,2]/h(r)+w[3,3]/r^2+w[4,4]/r^2/sin(theta)^2); LCQqKCwoKiZJInJHNiIiIiItSSVkaWZmRyUqcHJvdGVjdGVkRzYkLUkiaEdGJzYjRiZGJkYoRigqJEYtIiIjRihGLSEiIkYoRi0hIiNGJkYzRjE=