void StVKReducedStiffnessMatrix::PrintMatrix()
{
  int i,j,k;
  int output;

  // free terms
  int index = 0;
  printf("{");
  for(output=0; output<r; output++)
  {
    printf("{");
    for(i=0; i<r; i++)
    {
      int i1 = output;
      int j1 = i;
      if (i1 > j1)
      {
        i1 = i;
        j1 = output;
      }
      printf("%.15f",freeCoef(i1,j1));
      if (i != r-1)
        printf(", ");
      index++;
      if (index % 5 == 4)
        printf("\n");
    }
    printf("}");
    if (output != r-1)
      printf(", ");
  }

  printf("} + ");

  // linear terms
  printf("{");
  index = 0;
  int indexEntry = 0;
  for(output=0; output<r; output++)
  {
    printf("{");
    for(i=0; i<r; i++)
    {
      int i1 = output;
      int j1 = i;
      if (i1 > j1)
      {
        i1 = i;
        j1 = output;
      }

      for(j=0; j<r; j++)
      {
        printf("%.15f * q%d",linearCoef(i1,j1,j),j);
        if (j != r - 1)
          printf(" + ");
        index++;

        if (index % 5 == 4)
          printf("\n");
      }

      if (i != r - 1)
        printf(", ");

      indexEntry++;
    }
    printf("}");
    if (output != r - 1)
      printf(",\n");
  }

  printf("}");

  // quadratic terms
  printf(" + {");
  index = 0;
  indexEntry = 0;
  for(output=0; output<r; output++)
  {
    printf("{");
    for(i=0; i<r; i++)
    {
      int i1 = output;
      int j1 = i;
      if (i1 > j1)
      {
        i1 = i;
        j1 = output;
      }

      for(j=0; j<r; j++)
        for(k=j; k<r; k++)
        {
          printf("%.15f * q%d * q%d",quadraticCoef(i1,j1,j,k),j,k);
          if (!((k == r - 1) && ( j == r-1)))
            printf(" + ");
          index++;

          if (index % 5 == 4)
            printf("\n");
        }

        if (i != r - 1)
          printf(", ");

        indexEntry++;
    }

    printf("}");
    if (output != r - 1)
      printf(",\n");
  }

  printf("}");
}
void StVKReducedHessianTensor::PrintTensor()
{
  int i;
  int output;
  int input,deriv;

  // free terms
  int index = 0;
  printf("{");
  for(output=0; output<r; output++)
  {
    printf("{");
    for(input=0; input<r; input++)
    {
      int i1 = output;
      int j1 = input;
      if (j1 < i1) // swap them
      {
        j1 = output;
        i1 = input;
      }
      // now i1 <= j1

      printf("{");
      for(deriv=0; deriv<r; deriv++)
      {
        printf("%.15f",freeCoef(i1,j1,deriv));
        if (deriv != r-1)
          printf(", ");
        index++;
        if (index % 5 == 4)
          printf("\n");
      }
      printf("}");
      if (input != r-1)
        printf(", ");
    }
    printf("}");
    if (output != r-1)
      printf(", ");
  }

  printf("} +\n{");

  index = 0;
  for(output=0; output<r; output++)
  {
    printf("{");
    for(input=0; input<r; input++)
    {
      printf("{");
      int i1 = output;
      int j1 = input;
      if (j1 < i1) // swap them
      {
        j1 = output;
        i1 = input;
      }
      // now i1 <= j1

      for(deriv=0; deriv<r; deriv++)
      {
        for(i=0; i<r; i++)
        {
          printf("%.15f * q%d",linearCoef(i1,j1,deriv,i),i);
          if (i != r-1)
            printf("+ ");
          index++;
          if (index % 5 == 4)
            printf("\n");
        }
        if (deriv != r-1)
          printf(", ");
      }
      printf("}");
      if (input != r-1)
        printf(", ");
    }
    printf("}");
    if (output != r-1)
      printf(", ");
  }
  printf("}");
}