Define manifold as a whole 

Description: 

This worksheet illustrates how to define a manifold as a whole using atlas package. To do this we use 3-sphere as an example. 

3-dimensional sphere is defined as an atlas {N, S} = `*`(`^`(S, 3)) of two charts - north (N)  and south (S). Each chart has its own coframe 1-forms, frame vectors etc. 

One can use the mapping procedure to define chart changes and the pullback operator to transfer forms and tensors from one chart into another.   

Sphere: 

> restart:
with(atlas):
 

Constants declaration:
Constants(lambda); 

{`+`(`-`(I)), I, Pi, _Z, Catalan, lambda}(2.1)
 

Forms declaration:
Forms(e[j]=1,u[k]=1); 

{e[j], u[k]}(2.2)
 

Vectors declaration:
Vectors(E[i],U[j],X,Y,Z); 

{X, Y, Z, E[i], U[j]}(2.3)
 

Sphere dimension:
n:=3; 

3(2.4)
 

North chart of the sphere - N. 

> Domain(N);
 

N(2.1.1)
 

Coframe for the north chart:
Coframe(e[i]=d(x[i]),i=1..n); 

[e[1] = d(x[1]), e[2] = d(x[2]), e[3] = d(x[3])](2.1.2)
 

Frame for the north chart:
Frame(E[j]); 

[E[1] = Diff(``, x[1]), E[2] = Diff(``, x[2]), E[3] = Diff(``, x[3])](2.1.3)
 

Metric for the north chart:
Metric(g[N]=add(4*d(x[i])&.d(x[i])/(1+lambda*add(x[j]^2,j=1..n))^2,i=1..n));
 

g[N] = `+`(`/`(`*`(4, `*`(`&.`(e[1], e[1]))), `*`(`^`(`+`(1, `*`(lambda, `*`(`+`(`*`(`^`(x[1], 2)), `*`(`^`(x[2], 2)), `*`(`^`(x[3], 2)))))), 2))), `/`(`*`(4, `*`(`&.`(e[2], e[2]))), `*`(`^`(`+`(1, `*...
g[N] = `+`(`/`(`*`(4, `*`(`&.`(e[1], e[1]))), `*`(`^`(`+`(1, `*`(lambda, `*`(`+`(`*`(`^`(x[1], 2)), `*`(`^`(x[2], 2)), `*`(`^`(x[3], 2)))))), 2))), `/`(`*`(4, `*`(`&.`(e[2], e[2]))), `*`(`^`(`+`(1, `*...
(2.1.4)
 

Connection calculation for the north chart:
Connection(omega[N]); 

omega[N][i, j](2.1.5)
 

Curvature calculation for the north chart:
Curvature(Omega[N]); 

Omega[N][i, j](2.1.6)
 

Riemanninan tensor calculation:
Riemann(R[N]); 

R[N] = `+`(`/`(`*`(16, `*`(lambda, `*`(`&.`(`&^`(e[1], e[2]), `&^`(e[1], e[2]))))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(x[1], 2))), `*`(lambda, `*`(`^`(x[2], 2))), `*`(lambda, `*`(`^`(x[3], 2)))), 4)))...
R[N] = `+`(`/`(`*`(16, `*`(lambda, `*`(`&.`(`&^`(e[1], e[2]), `&^`(e[1], e[2]))))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(x[1], 2))), `*`(lambda, `*`(`^`(x[2], 2))), `*`(lambda, `*`(`^`(x[3], 2)))), 4)))...
R[N] = `+`(`/`(`*`(16, `*`(lambda, `*`(`&.`(`&^`(e[1], e[2]), `&^`(e[1], e[2]))))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(x[1], 2))), `*`(lambda, `*`(`^`(x[2], 2))), `*`(lambda, `*`(`^`(x[3], 2)))), 4)))...
(2.1.7)
 

Ricci tensor calculation:
Ricci(r[N]); 

r[N] = `+`(`/`(`*`(8, `*`(lambda, `*`(`&.`(e[1], e[1])))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(x[1], 2))), `*`(lambda, `*`(`^`(x[2], 2))), `*`(lambda, `*`(`^`(x[3], 2)))), 2))), `/`(`*`(8, `*`(lambda, ...
r[N] = `+`(`/`(`*`(8, `*`(lambda, `*`(`&.`(e[1], e[1])))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(x[1], 2))), `*`(lambda, `*`(`^`(x[2], 2))), `*`(lambda, `*`(`^`(x[3], 2)))), 2))), `/`(`*`(8, `*`(lambda, ...
(2.1.8)
 

Ricci scalar calculation:
RicciScalar(s[N]); 

s[N] = `+`(`*`(6, `*`(lambda)))(2.1.9)
 

South chart of the sphere - S. 

> Domain(S);
 

S(2.2.1)
 

Coframe declaration for the south chart:
Coframe(u[i]=d(y[i]),i=1..n); 

[u[1] = d(y[1]), u[2] = d(y[2]), u[3] = d(y[3])](2.2.2)
 

Frame declaration for the south chart:
Frame(U[k]); 

[U[1] = Diff(``, y[1]), U[2] = Diff(``, y[2]), U[3] = Diff(``, y[3])](2.2.3)
 

Metric declaration for the south chart:Metric(g[S]=add(4*d(y[i])&.d(y[i])/(1+lambda*add(y[j]^2,j=1..n))^2,i=1..n)); 

g[S] = `+`(`/`(`*`(4, `*`(`&.`(u[1], u[1]))), `*`(`^`(`+`(1, `*`(lambda, `*`(`+`(`*`(`^`(y[1], 2)), `*`(`^`(y[2], 2)), `*`(`^`(y[3], 2)))))), 2))), `/`(`*`(4, `*`(`&.`(u[2], u[2]))), `*`(`^`(`+`(1, `*...
g[S] = `+`(`/`(`*`(4, `*`(`&.`(u[1], u[1]))), `*`(`^`(`+`(1, `*`(lambda, `*`(`+`(`*`(`^`(y[1], 2)), `*`(`^`(y[2], 2)), `*`(`^`(y[3], 2)))))), 2))), `/`(`*`(4, `*`(`&.`(u[2], u[2]))), `*`(`^`(`+`(1, `*...
(2.2.4)
 

Connection calculation for the south chart:
Connection(omega[S]); 

omega[S][i, j](2.2.5)
 

Curvature calculation for the south chart:
Curvature(Omega[S]); 

Omega[S][i, j](2.2.6)
 

Riemannian tensor calculation for the south chart:
Riemann(R[S]); 

R[S] = `+`(`/`(`*`(16, `*`(lambda, `*`(`&.`(`&^`(u[1], u[2]), `&^`(u[1], u[2]))))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(y[1], 2))), `*`(lambda, `*`(`^`(y[2], 2))), `*`(lambda, `*`(`^`(y[3], 2)))), 4)))...
R[S] = `+`(`/`(`*`(16, `*`(lambda, `*`(`&.`(`&^`(u[1], u[2]), `&^`(u[1], u[2]))))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(y[1], 2))), `*`(lambda, `*`(`^`(y[2], 2))), `*`(lambda, `*`(`^`(y[3], 2)))), 4)))...
R[S] = `+`(`/`(`*`(16, `*`(lambda, `*`(`&.`(`&^`(u[1], u[2]), `&^`(u[1], u[2]))))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(y[1], 2))), `*`(lambda, `*`(`^`(y[2], 2))), `*`(lambda, `*`(`^`(y[3], 2)))), 4)))...
(2.2.7)
 

Ricci tensor calculation for the south chart:
Ricci(r[S]); 

r[S] = `+`(`/`(`*`(8, `*`(lambda, `*`(`&.`(u[1], u[1])))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(y[1], 2))), `*`(lambda, `*`(`^`(y[2], 2))), `*`(lambda, `*`(`^`(y[3], 2)))), 2))), `/`(`*`(8, `*`(lambda, ...
r[S] = `+`(`/`(`*`(8, `*`(lambda, `*`(`&.`(u[1], u[1])))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(y[1], 2))), `*`(lambda, `*`(`^`(y[2], 2))), `*`(lambda, `*`(`^`(y[3], 2)))), 2))), `/`(`*`(8, `*`(lambda, ...
(2.2.8)
 

Ricci scalar calculation for the south chart:
RicciScalar(s[S]);
 

s[S] = `+`(`*`(6, `*`(lambda)))(2.2.9)
 

Chart changings - phi and psi 

Chart changing phi from S to N: x[i] = `/`(`*`(y[i]), `*`(lambda, `*`(Sum(`*`(`^`(y[j], 2)), j = 1 .. n)))), i = 1 .. n. 

> Mapping(phi,S,N,seq(x[i]=y[i]/lambda/add(y[j]^2,j=1..n),i=1..n));
 

 

phi
`.`(S, `--->`, N)(2.3.1)
 

Chart changing psi from N to S: y[i] = `/`(`*`(x[i]), `*`(lambda, `*`(Sum(`*`(`^`(x[j], 2)), j = 1 .. n)))), i = 1 .. n. 

> Mapping(psi,N,S,seq(y[i]=x[i]/lambda/add(x[j]^2,j=1..n),i=1..n));
 

 

psi
`.`(N, `--->`, S)(2.3.2)
 

Verify calculation of Riemannian and Ricci tensor using restriction operator `&/`: 

> R[S] - (R[N] &/ phi);
 

0(2.3.3)
 

> r[S] - (r[N] &/ phi);
 

0(2.3.4)
 

> R[N] - (R[S] &/ psi);
 

0(2.3.5)
 

> r[N] - (r[S] &/ psi);
 

0(2.3.6)
 

For metric tensors we have: 

> g[S] = g[N] &/ phi;
 

g[S] = `+`(`/`(`*`(4, `*`(`&.`(u[1], u[1]))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(y[1], 2))), `*`(lambda, `*`(`^`(y[2], 2))), `*`(lambda, `*`(`^`(y[3], 2)))), 2))), `/`(`*`(4, `*`(`&.`(u[2], u[2]))), `...
g[S] = `+`(`/`(`*`(4, `*`(`&.`(u[1], u[1]))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(y[1], 2))), `*`(lambda, `*`(`^`(y[2], 2))), `*`(lambda, `*`(`^`(y[3], 2)))), 2))), `/`(`*`(4, `*`(`&.`(u[2], u[2]))), `...
(2.3.7)
 

> g[N] = g[S] &/ psi;
 

g[N] = `+`(`/`(`*`(4, `*`(`&.`(e[1], e[1]))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(x[1], 2))), `*`(lambda, `*`(`^`(x[2], 2))), `*`(lambda, `*`(`^`(x[3], 2)))), 2))), `/`(`*`(4, `*`(`&.`(e[2], e[2]))), `...
g[N] = `+`(`/`(`*`(4, `*`(`&.`(e[1], e[1]))), `*`(`^`(`+`(1, `*`(lambda, `*`(`^`(x[1], 2))), `*`(lambda, `*`(`^`(x[2], 2))), `*`(lambda, `*`(`^`(x[3], 2)))), 2))), `/`(`*`(4, `*`(`&.`(e[2], e[2]))), `...
(2.3.8)
 

Let us see who is who:
Who(); 

piecewise(Domains, {N, S}, Mappings, {phi, psi}, Tensors, {X, Y, Z, E[i], U[j], e[j], g[N], g[S], u[k], Omega[N][i, j], Omega[S][i, j], omega[N][i, j], omega[S][i, j]}, Forms, {e[j], u[k]}, Constants,...(2.5)
 

>
 

See Also:  

atlas[types], atlas[simp], atlas.