/* CS 612 - Assignment 3 Test Code
 * Author: James Ezick <ezick@cs.cornell.edu>
 * Date:   March 6, 2000
 */

#define SIZE 500

int
main(int argc, char* argv[]) {
  double A[SIZE][SIZE];
  double B[SIZE][SIZE];
  double C[SIZE][SIZE];
  double X[SIZE];
  double Y[SIZE];
  int i,j,k;

  /* initialization code - you don't need to analyze this */
  for(i=0; i<SIZE; ++i) {
    X[SIZE] = Y[SIZE] = 2.0;
    for(j=0; j<SIZE; ++j) {
      A[i][j] = B[i][j] = C[i][j] = 2.0;
    }
  }

  /* 5 pointed system */
  for(i=1; i<SIZE-1; ++i)
    for(j=1; j<SIZE-1; ++j)
      A[i][j] = (4*A[i][j] + A[i-1][j] + A[i+1][j] + A[i][j-1] + A[i][j+1])/8;

  /* 9 pointed system */
  for(i=1; i<SIZE-1; ++i)
    for(j=1; j<SIZE-1; ++j)
      A[i][j] = (8*A[i][j] + A[i-1][j] + A[i+1][j] + A[i][j-1] + A[i][j+1] +
		 A[i-1][j+1] + A[i+1][j+1] + A[i-1][j-1] + A[i+1][j-1])/16;
  
  /* Matrix-Vextor Multiply */
  for(i=0; i<SIZE; ++i)
    for(j=0; j<SIZE; ++j)
      Y[i] += A[i][j] * X[j];

  /* Matrix-Martrix Multiply */
  for(i=0; i<SIZE; ++i)
    for(j=0; j<SIZE; ++j)
      for(k=0; k<SIZE; ++k)
	C[i][j] += A[i][k] * B[k][j];

  return 1;
}
