Next: References and Further Reading, Previous: Functions, Up: Top [Contents][Index]
#include <gsl/gsl.h>
#include <tensor.h>
#define RANK 3
#define DIMENSION 5
int main (void)
{
  size_t i, j, k;     /* tensor indices */
  size_t indices[3];  /* to pass tensor indices */
  /* Allocate space for the tensors */
  tensor * a = tensor_calloc (RANK, DIMENSION);
  tensor * b = tensor_calloc (RANK, DIMENSION);
  tensor * t = tensor_calloc (RANK, DIMENSION);
  /* Fill them */
  for (i = 0; i < DIMENSION; i++)
    {
      for (j = 0; j < DIMENSION; j++)
        {
          for (k = 0; k < DIMENSION; k++)
            {
              counter++;
              indices[0] = i;  indices[1] = j;  indices[2] = k;
              tensor_set (a, indices, 3 + i + 5 * j + 2 * k);
              tensor_set (b, indices, 3 + 2 * i + 4 * j + k);
            }
        }
    }
  /*
   * Do some operations
   */
  /* Sum */
  tensor_memcpy (t, a);
  tensor_add (t, b);     /* t = a + b */
  tensor_fprintf (stdout, t, "%g");
  /* Element division */
  tensor_memcpy (t, a);
  tensor_div_elements (t, b);  /* t = a ./ b */
  tensor_fprintf (stdout, t, "%g");
  /* Tensor product */
  {
    tensor * c = tensor_product (a, b);
    tensor_fprintf (stdout, c, "%g");
    tensor_free (c);
  }
  /* Index contraction */
  {
    tensor * tt = tensor_contract (a, 0, 1);
    tensor_fprintf (stdout, tt, "%g");
    tensor_free (tt);
  }
  tensor_free (a);
  tensor_free (b);
  tensor_free (t);
  return 0;
}
Compile with:
gcc -o myprog -lgslcblas -lgsl -ltensor myprog.c