home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / fermiVogle.tar.Z / fermiVogle.tar / devel / src / tensor.c < prev    next >
C/C++ Source or Header  |  1996-02-07  |  2KB  |  86 lines

  1. #include "vogle.h"
  2.  
  3. /*
  4.  *  premulttensor
  5.  *
  6.  *  Premultiply the tensor b by the matrix a and place the result
  7.  *  into the tensor c.
  8.  */
  9. void
  10. premulttensor(Tensor c, Matrix a, Tensor b)
  11. {
  12.     register    int    i, j, k;
  13.     float        x1, x2, x3, x4;
  14.  
  15.     for (i = 0; i < 4; i++)
  16.         for (j = 0; j < 4; j++) {
  17.             x1 = x2 = x3 = x4 = 0.0;
  18.             for (k = 0; k < 4; k++) {
  19.                 x1 += a[i][k] * b[0][k][j];
  20.                 x2 += a[i][k] * b[1][k][j];
  21.                 x3 += a[i][k] * b[2][k][j];
  22.                 x4 += a[i][k] * b[3][k][j];
  23.             }
  24.             c[0][i][j] = x1;
  25.             c[1][i][j] = x2;
  26.             c[2][i][j] = x3;
  27.             c[3][i][j] = x4;
  28.         }
  29. }
  30.  
  31. /*
  32.  *  multtensor
  33.  *
  34.  *  Multiply the tensor b by the matrix a and place the result
  35.  *  into the tensor c.
  36.  */
  37. void
  38. multtensor(Tensor c, Matrix a, Tensor b)
  39. {
  40.     register    int    i, j, k;
  41.     float        x1, x2, x3, x4;
  42.  
  43.     for (i = 0; i < 4; i++)
  44.         for (j = 0; j < 4; j++) {
  45.             x1 = x2 = x3 = x4 = 0.0;
  46.             for (k = 0; k < 4; k++) {
  47.                 x1 += b[0][i][k] * a[k][j];
  48.                 x2 += b[1][i][k] * a[k][j];
  49.                 x3 += b[2][i][k] * a[k][j];
  50.                 x4 += b[3][i][k] * a[k][j];
  51.             }
  52.             c[0][i][j] = x1;
  53.             c[1][i][j] = x2;
  54.             c[2][i][j] = x3;
  55.             c[3][i][j] = x4;
  56.         }
  57. }
  58.  
  59. /*
  60.  * Copy the tensor a into b.
  61.  */
  62. void
  63. copytensor(Tensor b, Tensor a)
  64. {
  65.     register    int    i, j, k;
  66.     
  67.     for (i = 0; i < 4; i++)
  68.         for (j = 0; j < 4; j++)
  69.             for (k = 0; k < 4; k++)
  70.                 b[i][j][k] = a[i][j][k];
  71. }
  72.  
  73. /*
  74.  * Copy the tensor a into b "transposed".
  75.  */
  76. void
  77. copytensortrans(Tensor b, Tensor a)
  78. {
  79.     register    int    i, j, k;
  80.  
  81.     for (i = 0; i < 4; i++)
  82.         for (j = 0; j < 4; j++)
  83.             for (k = 0; k < 4; k++)
  84.                 b[i][j][k] = a[i][k][j];
  85. }
  86.