home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / maths / b116_1 / jacal / rw_math < prev    next >
Text File  |  1993-12-21  |  6KB  |  211 lines

  1. /* RW.MATH -- An application of JACAL's tensor-like support functions
  2.    Copyright (C) 1993 Jerry D. Hedden
  3.    See the file `COPYING' for terms applying to this program.
  4.  
  5.    Execute this program in JACAL with:    batch("rw.math");
  6. */
  7.  
  8.  
  9. /* >>>>>>>>>>>>>>  The Robertson-Walker Cosmology Model  <<<<<<<<<<<<<<
  10.  
  11.    This batch file deals with the Robertson-Walker generalization of the
  12.    Friedmann cosmology model.
  13.  
  14.    The space-time "interval" for this model is given by:
  15.  
  16.     ds^2 = - dt^2 +
  17.          S(t)^2 * d(r)^2/(1-k*r^2) +
  18.          S(t)^2 * r^2 * d(theta)^2 +
  19.          S(t)^2 * r^2 * sin(theta)^2 * d(phi)^2
  20.  
  21.    where t is in geometrized units of length (c=1), S(t) is the four-
  22.    dimensional radius of the universe as a function of time, and r is a
  23.    pseudo-distance coordinate.    For a "closed universe", k = 1, and "the
  24.    distance between galaxies" is given by S(t) * arcsin(r).  For an "open
  25.    universe", k = -1, and distance is S(t) * arcsinh(r).  For a "flat
  26.    universe", there can, technically, be no expansion/contraction.
  27.    Therefore, k = 0, S(t) = 1, and r is distance.
  28.  
  29.    Because JACAL is 1-based (not 0-based), the fourth coordinate will be
  30.    used to represent time (which is usually the zero coordinate x0).
  31.    Therefore, x1 = r, x2 = theta, x3 = phi and x4 = t in the results below.
  32.  
  33.    The names given to the tensors below are suffixed in such a was as to
  34.    indicate the contra-/covariant nature of the indices involved.  For
  35.    example, Riemann_ulll is a tensor whose first index in contravariant and
  36.    remaining indices covariant.
  37.  
  38.    Modify and add 'set outgrammar ...' commands, as desired.
  39. */
  40.  
  41.  
  42. set outgrammar null;
  43.  
  44. require("tensor");        /* JACAL's tensor-like support functions */
  45.  
  46. transcript("rw.log");        /* Log the model's results */
  47.  
  48.  
  49. /* The metric tensor is specific to each space-time configuration, and is
  50.    usually symbolized in the literature by a lowercase g with covariant
  51.    indices:
  52.             g
  53.              ab
  54. */
  55. set outgrammar disp2d;
  56.  
  57. metric_ll : diagmatrix( S(x4)^2 / (1-k*x1^2),
  58.             S(x4)^2 * x1^2,
  59.             S(x4)^2 * x1^2 * sin(x2)^2,
  60.             -1 );
  61.  
  62.  
  63. /* The metric tensor with contravariant indices is the inverse of the
  64.    metric tensor with covariant indices:
  65.  
  66.              ab       -1
  67.             g   = (g  )
  68.                 ab
  69.  
  70.    NOTE:  Perform actual matrix inversion if the metric tensor has off-
  71.    diagonal elements.
  72. */
  73. set outgrammar disp2d;
  74.  
  75. metric_uu : diagmatrix( 1/metric_ll[1,1],
  76.             1/metric_ll[2,2],
  77.             1/metric_ll[3,3],
  78.             1/metric_ll[4,4] );
  79.  
  80.  
  81. /* The determinant of metric tensor yields information about a unit volume
  82.    of the space-time.
  83. */
  84. set outgrammar disp2d;
  85.  
  86. det_metric : determinant(metric_ll);
  87.  
  88.  
  89. /* The first derivatives of the metric tensor are used to produce the
  90.    Christoffel symbols below:
  91.  
  92.             g
  93.              ab,c
  94.  
  95.    'eliminate's are used to handle the first derivatives of functions in
  96.    the metric.
  97. */
  98. set outgrammar null;
  99.  
  100. d_metric_lll :
  101.   indexshift( [ diff(metric_ll,x1),
  102.         eliminate( [ diff(metric_ll,x2),
  103.                  cos = (partial(sin,1)) ],
  104.                (partial(sin,1)) ),
  105.         diff(metric_ll,x3),
  106.         diff(metric_ll,x4) ],
  107.           1, 3 );
  108.  
  109.  
  110. /* The Christoffel symbols are usually represented in the literature with
  111.    an upper-case gamma (a 'Z' will be used instead):
  112.  
  113.          a    1     ax
  114.         Z    = --- * g     * ( g     + g     - g     )
  115.           bc    2          xb,c    xc,b    bc,x
  116. */
  117. set outgrammar disp2d;
  118.  
  119. Christoffel_ull :
  120.   tmult(metric_uu,
  121.     (d_metric_lll + indexswap(d_metric_lll,2,3) -
  122.                     indexshift(d_metric_lll,3,1)) / 2,
  123.     2, 1);
  124.  
  125.  
  126. /* The first derivatives of Christoffel symbols are used to produce the
  127.    Riemann curvature tensor below:
  128.  
  129.              a
  130.             Z
  131.               bc,d
  132.  
  133.    'eliminate's are used to handle the first and second derivatives of
  134.    functions in the metric.
  135. */
  136. set outgrammar null;
  137.  
  138. d_Christoffel_ulll :
  139.   indexshift( [ diff(Christoffel_ull,x1),
  140.         eliminate( [ diff(Christoffel_ull,x2),
  141.                  cos = (partial(sin,1)),
  142.                  -sin(x2) = (partial(cos,1))(x2) ],
  143.                [ (partial(sin,1)),
  144.                  (partial(cos,1))(x2) ] ),
  145.         diff(Christoffel_ull,x3),
  146.         diff(Christoffel_ull,x4) ],
  147.           1, 4 );
  148.  
  149.  
  150. /* The Riemann curvature tensor:
  151.  
  152.      a     a      a         a        x           a      x
  153.     R     = Z      - Z    + ( Z    * Z    ) - ( Z    * Z    )
  154.       bcd      bd,c       bc,d       xc     bd     xd     bc
  155.  
  156.    (This tensor is produced in two stages to reduced the number of
  157.    computations required.)
  158. */
  159. set outgrammar null;
  160.  
  161. R_temp : d_Christoffel_ulll +
  162.      indexshift( tmult(Christoffel_ull, Christoffel_ull, 2, 1), 2, 4 );
  163.  
  164. set outgrammar disp2d;
  165.  
  166. Riemann_ulll : indexswap(R_temp,3,4) - R_temp;
  167.  
  168.  
  169. /* The Ricci tensor is a contraction of the Riemann tensor.  Like the
  170.    Riemann tensor, an upper-case R is used to designate the Ricci tensor,
  171.    but with fewer indices:
  172.  
  173.                    x
  174.             R   = R
  175.              ab    axb
  176.  
  177.    The other forms of the tensor are obtained with suitable applications
  178.    of the metric.
  179.  
  180.    The "scalar curvature" is a contration of the Ricci tensor:
  181.  
  182.                  x
  183.             R = R
  184.                   x
  185. */
  186. set outgrammar disp2d;
  187.  
  188. Ricci_ll    : contract(Riemann_ulll, 1, 3);
  189. Ricci_ul    : tmult(metric_uu, Ricci_ll, 2, 1);
  190. Ricci_uu    : tmult(Ricci_ul, metric_uu, 2, 1);
  191. scalar_curv : contract(Ricci_ul, 1, 2);
  192.  
  193.  
  194. /* Finally, the Einstein tensor (denoted with an upper-case G):
  195.  
  196.                       1
  197.             G   = R   - (--- * R * g  )
  198.              ab    ab     2     ab
  199.  
  200.    The other forms of the tensor are obtained with suitable applications
  201.    of the metric.
  202. */
  203. set outgrammar disp2d;
  204.  
  205. Einstein_ll : Ricci_ll - (scalar_curv * metric_ll / 2);
  206. Einstein_ul : Ricci_ul - (scalar_curv / 2);
  207. Einstein_uu : Ricci_uu - (scalar_curv * metric_uu / 2);
  208.  
  209.  
  210. transcript();        /* Done -- close the log file */
  211.