Esempio n. 1
0
void relax( int level, int flag ) {

	if ( level > min_level && flag == 0 ) {
		prolongate( level );
	}
		
	smooth( level );
}
int main()
{
  const float w = 2.0 / 3.0;
  const int NDIMS = 1;
  const int N = 64;
  const int fd = 12;
  const int  nsteps = 10;

  int i;
  float V1h[N+1] = {0}, Vp1h[N+1] = {0};
  float V2h[N/2+1] = {0}, V4h[N/4+1] = {0}, V8h[N/8+1] = {0};
  FILE *file;
  char *str;
  file = fopen("c_error_time.dat", "w");

  /* cl_platform_id* platforms; */
  /* cl_uint platformCount; */
  /* clGetPlatformIDs(0, NULL, &platformCount); */
  /* printf("Num of platforms = %u\n", platformCount); */

  printf("Fin\n");
  return 0;

  addFourierMode(N, V1h, 1);
  addFourierMode(N, V1h, 6);
  addFourierMode(N, V1h, 16);
  for (i = 0; i <= N; ++i)
    V1h[i] = (1./3.)*V1h[i];


  // Relax solution on 1h mesh
  /*   textual_Output(N/2+1, V1h, "1h_0", file); */
  for (i = 2; i <= nsteps; i += 2) {
    relax(N, V1h, Vp1h, w);
    relax(N, Vp1h, V1h, w);
  }
  /*   textual_Output(N/2+1, V1h, "1h_mid", file); */
  printVector(N, V1h);
  // Relax solution on 2h mesh
  for (i = 0; i < N + 1; ++i)
    Vp1h[i] = 0;
  restrict_func(N, V1h, V2h);
  /*   textual_Output(N/2+1, V2h, "2h_0", file); */
  for (i = 2; i <= nsteps; i += 2) {
    relax(N/2, V2h, Vp1h, w);
    relax(N/2, Vp1h, V2h, w);
  }
  /*   textual_Output(N/2+1, V2h, "2h_mid", file); */
  printVector(N/2, V2h);
  // Relax solution on 4h mesh
  for (i = 0; i < N + 1; ++i)
    Vp1h[i] = 0;
  restrict_func(N/2, V2h, V4h);
  /*   textual_Output(N/4+1, V4h, "4h_0", file); */
  for (i = 2; i <= nsteps; i += 2) {
    relax(N/4, V4h, Vp1h, w);
    relax(N/4, Vp1h, V4h, w);
  }
  /*   textual_Output(N/4+1, V4h, "4h_mid", file); */
  printVector(N/4, V4h);

  // Relax solution on 8h mesh
  for (i = 0; i < N + 1; ++i)
    Vp1h[i] = 0;
  restrict_func(N/4, V4h, V8h);
  /*   textual_Output(N/8+1, V8h, "8h_0", file); */
  for (i = 2; i <= nsteps; i += 2) {
    relax(N/8, V8h, Vp1h, w);
    relax(N/8, Vp1h, V8h, w);
  }
  /*   textual_Output(N/8+1, V8h, "8h_mid", file); */
  printVector(N/8, V8h);

  int n = N / 8;
  float A[n*n];
  initTridiagonal(n, A, V8h);
  solveTridiagonal(n, A, V8h);
/*   printArray(n, A); */
  printf("===solve\n");
  printVector(n-1, V8h);

/*   for (i = 2; i <= nsteps; i += 2) { */
/*     relax(N/8, V8h, Vp1h, w); */
/*     relax(N/8, Vp1h, V8h, w); */
/*   } */
/*   /\*   textual_Output(N/8+1, V8h, "8h_end", file); *\/ */
/*   printVector(N/8, V8h); */

  printf("===end relax, start prolongate\n");
  prolongate(N/4, V4h, V8h);
  printVector(N/4, V4h);
  /*   textual_Output(N/4+1, V4h, "4h_end", file); */
  prolongate(N/2, V2h, V4h);
  printVector(N/2, V2h);
  /*   textual_Output(N/2+1, V2h, "2h_end", file); */
  prolongate(N, V1h, V2h);
  printVector(N, V1h);
  /*   textual_Output(N+1, V1h, "1h_end", file); */

  fclose(file);  

  printf("Fin\n");
}