home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 3
/
TheARMClub_PDCD3.iso
/
hensa
/
maths
/
b116_1
/
jacal
/
rw_math
< prev
next >
Wrap
Text File
|
1993-12-21
|
6KB
|
211 lines
/* RW.MATH -- An application of JACAL's tensor-like support functions
Copyright (C) 1993 Jerry D. Hedden
See the file `COPYING' for terms applying to this program.
Execute this program in JACAL with: batch("rw.math");
*/
/* >>>>>>>>>>>>>> The Robertson-Walker Cosmology Model <<<<<<<<<<<<<<
This batch file deals with the Robertson-Walker generalization of the
Friedmann cosmology model.
The space-time "interval" for this model is given by:
ds^2 = - dt^2 +
S(t)^2 * d(r)^2/(1-k*r^2) +
S(t)^2 * r^2 * d(theta)^2 +
S(t)^2 * r^2 * sin(theta)^2 * d(phi)^2
where t is in geometrized units of length (c=1), S(t) is the four-
dimensional radius of the universe as a function of time, and r is a
pseudo-distance coordinate. For a "closed universe", k = 1, and "the
distance between galaxies" is given by S(t) * arcsin(r). For an "open
universe", k = -1, and distance is S(t) * arcsinh(r). For a "flat
universe", there can, technically, be no expansion/contraction.
Therefore, k = 0, S(t) = 1, and r is distance.
Because JACAL is 1-based (not 0-based), the fourth coordinate will be
used to represent time (which is usually the zero coordinate x0).
Therefore, x1 = r, x2 = theta, x3 = phi and x4 = t in the results below.
The names given to the tensors below are suffixed in such a was as to
indicate the contra-/covariant nature of the indices involved. For
example, Riemann_ulll is a tensor whose first index in contravariant and
remaining indices covariant.
Modify and add 'set outgrammar ...' commands, as desired.
*/
set outgrammar null;
require("tensor"); /* JACAL's tensor-like support functions */
transcript("rw.log"); /* Log the model's results */
/* The metric tensor is specific to each space-time configuration, and is
usually symbolized in the literature by a lowercase g with covariant
indices:
g
ab
*/
set outgrammar disp2d;
metric_ll : diagmatrix( S(x4)^2 / (1-k*x1^2),
S(x4)^2 * x1^2,
S(x4)^2 * x1^2 * sin(x2)^2,
-1 );
/* The metric tensor with contravariant indices is the inverse of the
metric tensor with covariant indices:
ab -1
g = (g )
ab
NOTE: Perform actual matrix inversion if the metric tensor has off-
diagonal elements.
*/
set outgrammar disp2d;
metric_uu : diagmatrix( 1/metric_ll[1,1],
1/metric_ll[2,2],
1/metric_ll[3,3],
1/metric_ll[4,4] );
/* The determinant of metric tensor yields information about a unit volume
of the space-time.
*/
set outgrammar disp2d;
det_metric : determinant(metric_ll);
/* The first derivatives of the metric tensor are used to produce the
Christoffel symbols below:
g
ab,c
'eliminate's are used to handle the first derivatives of functions in
the metric.
*/
set outgrammar null;
d_metric_lll :
indexshift( [ diff(metric_ll,x1),
eliminate( [ diff(metric_ll,x2),
cos = (partial(sin,1)) ],
(partial(sin,1)) ),
diff(metric_ll,x3),
diff(metric_ll,x4) ],
1, 3 );
/* The Christoffel symbols are usually represented in the literature with
an upper-case gamma (a 'Z' will be used instead):
a 1 ax
Z = --- * g * ( g + g - g )
bc 2 xb,c xc,b bc,x
*/
set outgrammar disp2d;
Christoffel_ull :
tmult(metric_uu,
(d_metric_lll + indexswap(d_metric_lll,2,3) -
indexshift(d_metric_lll,3,1)) / 2,
2, 1);
/* The first derivatives of Christoffel symbols are used to produce the
Riemann curvature tensor below:
a
Z
bc,d
'eliminate's are used to handle the first and second derivatives of
functions in the metric.
*/
set outgrammar null;
d_Christoffel_ulll :
indexshift( [ diff(Christoffel_ull,x1),
eliminate( [ diff(Christoffel_ull,x2),
cos = (partial(sin,1)),
-sin(x2) = (partial(cos,1))(x2) ],
[ (partial(sin,1)),
(partial(cos,1))(x2) ] ),
diff(Christoffel_ull,x3),
diff(Christoffel_ull,x4) ],
1, 4 );
/* The Riemann curvature tensor:
a a a a x a x
R = Z - Z + ( Z * Z ) - ( Z * Z )
bcd bd,c bc,d xc bd xd bc
(This tensor is produced in two stages to reduced the number of
computations required.)
*/
set outgrammar null;
R_temp : d_Christoffel_ulll +
indexshift( tmult(Christoffel_ull, Christoffel_ull, 2, 1), 2, 4 );
set outgrammar disp2d;
Riemann_ulll : indexswap(R_temp,3,4) - R_temp;
/* The Ricci tensor is a contraction of the Riemann tensor. Like the
Riemann tensor, an upper-case R is used to designate the Ricci tensor,
but with fewer indices:
x
R = R
ab axb
The other forms of the tensor are obtained with suitable applications
of the metric.
The "scalar curvature" is a contration of the Ricci tensor:
x
R = R
x
*/
set outgrammar disp2d;
Ricci_ll : contract(Riemann_ulll, 1, 3);
Ricci_ul : tmult(metric_uu, Ricci_ll, 2, 1);
Ricci_uu : tmult(Ricci_ul, metric_uu, 2, 1);
scalar_curv : contract(Ricci_ul, 1, 2);
/* Finally, the Einstein tensor (denoted with an upper-case G):
1
G = R - (--- * R * g )
ab ab 2 ab
The other forms of the tensor are obtained with suitable applications
of the metric.
*/
set outgrammar disp2d;
Einstein_ll : Ricci_ll - (scalar_curv * metric_ll / 2);
Einstein_ul : Ricci_ul - (scalar_curv / 2);
Einstein_uu : Ricci_uu - (scalar_curv * metric_uu / 2);
transcript(); /* Done -- close the log file */