Exemple #1
0
int main(void){

		  FILE *grid, *file, *ufile, *rfile, *Qfile, *sfile;
		  float *g1, *g2, *g3, *v1, *v2, *v3;
		  float a[9], w[3], S, density;
		  double u[3]={0};
		  int Nx, Ny, Nz, points, lines=0, i, m, info, junk, *flag, t, j, k, index;
		  char ch, mfile[256];
		  double ndotv=0; 
		  double mag=0;

		  grid = fopen("grid.out", "r");
		  fscanf(grid,"Nx Ny Nz %d %d %d\n",&Nx,&Ny,&Nz);
		  points = Nx*Ny*Nz;

		  g1 = malloc(points*sizeof(float));
		  g2 = malloc(points*sizeof(float));
		  g3 = malloc(points*sizeof(float));
		  v1 = malloc(points*sizeof(float));
		  v2 = malloc(points*sizeof(float));
		  v3 = malloc(points*sizeof(float));

		  flag = malloc(points*sizeof(int));

		  printf("READ IN PARAMETERS\n");
		  printf("number of points: %d\n",points);

		  //	Check number of frames
		  FILE *check;
		  check = fopen("vel.out","r");
		  if(check!=NULL){
					 while(!feof(check)){
								ch = fgetc(check);
								if(ch == '\n') lines++;
					 }
					 fclose(check);
					 lines = lines/points;
		  } else lines = 1;

		  printf("Number of movie frames: %d\n", lines);

		  for(i=0;i<points;i++){
					 fscanf(grid,"%f %f %f %d\n", &g1[i], &g2[i], &g3[i], &flag[i]);
		  }
		  fclose(grid);

		  ufile=fopen("vel.out","r");
		  rfile=fopen("den.out","r");
		  Qfile=fopen("Q.out","r");
		  sfile=fopen("stress.out","r");

		  for(m=0;m<lines;m++){
					 sprintf(mfile,"movie_%05d.vtk",m);
					 file = fopen(mfile,"w");

					 fprintf(file,"# vtk DataFile Version 3.0\n");
					 fprintf(file,"vtk output\n");
					 fprintf(file,"ASCII\n");
					 fprintf(file,"DATASET STRUCTURED_GRID\n");

					 fprintf(file,"DIMENSIONS\t %d\t %d\t %d\t\n",Nx,Ny,Nz);
					 fprintf(file,"POINTS\t %d\t float\n",points);

					 for(i=0;i<points;i++){
								fprintf(file,"\t%0.2f\t%0.2f\t%0.2f\n", g1[i], g2[i], g3[i]);
					 }

					 fprintf(file,"\n");

					 fprintf(file,"POINT_DATA\t%d\n",points);
					 fprintf(file,"SCALARS S_field float 1\n");
					 fprintf(file,"LOOKUP_TABLE default\n");

					 for(i=0;i<points;i++){
								S = 1;

								fscanf(Qfile,"%f %f %f %f %f\n",&a[0],&a[3],&a[6],&a[4],&a[7]);
								a[8] = -1*(a[0] + a[4]);
								info = LAPACKE_ssyev(LAPACK_COL_MAJOR, 'v', 'u', 3, a, 3, w);

								if(info>0) {
										  printf("failure in eigenvalue routine\n");
										  exit(1);
								}

								if(flag[i]==1 || flag[i]==0) S = 0.5*3*w[2];
								//S = 0.5*3*w[2];
								v1[i] = a[6];
								v2[i] = a[7];
								v3[i] = a[8];

								fprintf(file,"\t%0.2f\n",S);
					 }

					 fprintf(file,"\n");
					 fprintf(file,"VECTORS directors float\n");

					 //for(i=0;i<points;i++){
					 for(i=0;i<Nx;i++){
								for(j=0;j<Ny;j++){
										  for(k=0;k<Nz;k++){

													 index = i*Nx+j*Ny+k*Nx*Ny;

													 //if(i==(int)0.5*Nx && j==(int)0.5*Ny) fprintf(file,"\t%0.2f\t%0.2f\t%0.2f\n",v1[index],v2[index],v3[index]);

													 if(flag[i]==1 || flag[i]==0) fprintf(file,"\t%0.2f\t%0.2f\t%0.2f\n",v1[i],v2[i],v3[i]);
													 else fprintf(file,"\t%0.2f\t%0.2f\t%0.2f\n",0.0,0.0,0.0);
										  }
								}
					 }

					 if(ufile!=NULL){
								fprintf(file,"\n");
								fprintf(file,"VECTORS velocity float\n");

								for(i=0;i<points;i++){
										  fscanf(ufile,"%lf %lf %lf\n",&u[0],&u[1],&u[2]);
										  if(flag[i]==1 || flag[i]==0) fprintf(file,"\t%f\t%f\t%f\n",u[0],u[1],u[2]);
										  else fprintf(file,"\t%0.2f\t%0.2f\t%0.2f\n",0.0,0.0,0.0);
								}
					 }

					 if(sfile!=NULL){
								fprintf(file,"\n");
								fprintf(file,"VECTORS stress float\n");
								for(i=0;i<points;i++){
										  fscanf(sfile,"%lf %lf %lf\n",&u[0],&u[1],&u[2]);
										  fprintf(file,"\t%f\t%f\t%f\n",u[0],u[1],u[2]);
								}
					 }

					 if(rfile!=NULL){
								fprintf(file,"\n");
								fprintf(file,"SCALARS density float\n");
								fprintf(file,"LOOKUP_TABLE default\n");
								for(i=0;i<points;i++){
										  fscanf(rfile,"%f\n",&density);
										  fprintf(file,"\t%e\n",density);
								}
					 }

					 if(ufile!=NULL){
								fprintf(file,"\n");
								fprintf(file,"SCALARS dot float\n");
								fprintf(file,"LOOKUP_TABLE default\n");

								rewind(ufile);

								for(i=0;i<points;i++){
										  ndotv=2;
										  mag = 0;

										  fscanf(ufile,"%lf %lf %lf\n",&u[0],&u[1],&u[2]);

										  if(flag[i]==1 || flag[i]==0){

													 mag = sqrt(u[0]*u[0]+u[1]*u[1]+u[2]*u[2]);
													 mag = 1.0/mag;

													 ndotv = mag*(v1[i]*u[0]+v2[i]*u[1]+v3[i]*u[2]);
													 //ndotv= (v1[i]*u[0]+v2[i]*u[1]+v3[i]*u[2]);
													 if(ndotv!=ndotv) printf("ndotv\n");

													 if(ndotv<0) ndotv *= -1;
										  }

										  fprintf(file,"\t%e\n",ndotv);
								}
					 }

					 printf("printed file %d\n",m);
					 fclose(file);
		  }

		  if(ufile!=NULL) fclose(ufile);
		  if(rfile!=NULL) fclose(rfile);
		  if(sfile!=NULL) fclose(sfile);
		  fclose(Qfile);

		  free(g1);
		  free(g2);
		  free(g3);
		  free(v1);
		  free(v2);
		  free(v3);
		  free(flag);

		  printf("Done!\n");
}
Exemple #2
0
template <> inline
int syev(const char order, const char job, const char uplo, const int N, float *A, const int LDA, float *W)
{
	return LAPACKE_ssyev(order, job, uplo, N, A, LDA, W);
}
Exemple #3
0
int main (int argc,char* argv[])
{
    // Some needed ints. n=size of matrix, info = error checker from ssyev
    lapack_int n=5,info;

    /* Declare matrix of values! */
    float atemp[n*n] = {
        1.96f, -6.49f, -0.47f, -7.20f, -0.65f,
        0.00f,  3.80f, -6.39f,  1.50f, -6.34f,
        0.00f,  0.00f, 4.17f, -1.51f, 2.67f,
        0.00f,  0.00f, 0.00f,  5.70f, 1.80f,
        0.00f,  0.00f, 0.00f,  0.00f, -7.10f
    };

    /* Copy to a vector! */
    std::vector<float> a(n*n);

    /* Declare vector to hold eigenvalues! */
    std::vector<float> w(n);

    /* Move data to the std::vector a*/
    std::memcpy(&a[0],atemp,n*n*sizeof(float));

    /* Make a working vector! */
    std::vector<float> c(n*n);
    std::memcpy(&c[0],&a[0],n*n*sizeof(float));

    /* -------------------- Eigenvalues with lapack ----------------- */

    /* Example of how to use std::vector with ssyev */
    info = LAPACKE_ssyev( LAPACK_ROW_MAJOR,'V','U',n,&c[0],n,&w[0] );

    /* Error checking */
    if (info > 0)
    {
        std::cout << "Diagonalization failed! Error code: " << info << std::endl;
        exit(EXIT_FAILURE);
    }
    /* -------------------------------------------------------------- */

    /* Print the eigenvalues */
    std::cout << "Eigenvalues: " << std::endl;
    for (int j=0;j<n;++j)
    {
            std::cout << w[j] << " ";
    }
    std::cout << std::endl;

    /* Print the eigenvectors */
    std::cout << "Eigenvectors: " << std::endl;
    for (int i=0;i<n;++i)
    {
        for (int j=0;j<n;++j)
        {
            std::cout << c[i*n+j] << " ";
        }
        std::cout << std::endl;
    }

    std::memcpy(&c[0],&a[0],n*n*sizeof(float));

    /* -------------------- Matrix inverse with Lapack ----------------- */
    // Seg faults on my machine, some problem with pthreads, but you get the point
    lapack_int ipiv[n];
    LAPACK_sgetrf(&n,&n,&c[0],&n,ipiv,&info);
    // Error checking
    if (info > 0)
    {
        std::cout << "Inversion failed! Error code: " << info << std::endl;
        exit(EXIT_FAILURE);
    }

    info = LAPACKE_sgetri( n,n,&c[0],n,ipiv );
    // Error checking
    if (info > 0)
    {
        std::cout << "Inversion failed! Error code: " << info << std::endl;
        exit(EXIT_FAILURE);
    }
    /* ----------------------------------------------------------------- */

    /* -------------------- Matrix Mult with cBlas ----------------- */

    std::vector<float> b(n*n);
    cblas_sgemm(CblasRowMajor,CblasTrans,CblasNoTrans,n,n,1,1.0f,&a[0],n,&c[0],n,0.0f,&b[0],n);
    //cblas_sgemm(CblasRowMajor,CblasNoTrans,CblasNoTrans,n,n,1,1.0f,&c[0],n,&a[0],n,0.0f,&b[0],n);

    /* -------------------------------------------------------------- */

    /* Print the eigenvectors */
    std::cout << "Matrx Mult Result: " << std::endl;
    for (int i=0;i<n;++i)
    {
        for (int j=0;j<n;++j)
        {
            std::cout << b[i*n+j] << " ";
        }
        std::cout << std::endl;
    }


    return 0;
}
Exemple #4
0
int main(int argc, char *argv[]){

	FILE *grid, *file, *ufile, *rfile, *Qfile, *sfile, *ifile;
	float *g1, *g2, *g3, *v1, *v2, *v3;
	float a[9], w[3], u[3], S, density;
	int *gi;
	int Nx, Ny, Nz, points, lines=0, i, m, info, junk;
	char ch, mfile[256];

	int m_int=1, Nxc, Nyc, Nzc, pointsc, j, k, id;

        grid = fopen("grid.out", "r");
        fscanf(grid,"Nx Ny Nz %d %d %d\n",&Nx,&Ny,&Nz);
        points = Nx*Ny*Nz;

	if (argc>1) m_int = atoi(argv[1]);
	printf("every %d mesh points will be printed\n",m_int);
	Nxc = (Nx-1)/m_int + 1;
	Nyc = (Ny-1)/m_int + 1;
	Nzc = (Nz-1)/m_int + 1;
	pointsc = Nxc*Nyc*Nzc;

	g1 = malloc(points*sizeof(float));
        g2 = malloc(points*sizeof(float));
        g3 = malloc(points*sizeof(float));
        v1 = malloc(points*sizeof(float));
        v2 = malloc(points*sizeof(float));
        v3 = malloc(points*sizeof(float));
	gi = malloc(points*sizeof(int));

	printf("READ IN PARAMETERS\n");
	printf("number of points: %d\n",points);

//	Check number of frames
        FILE *check;
        check = fopen("u_3d.out","r");
        while(!feof(check)){
        	ch = fgetc(check);
                if(ch == '\n') lines++;
        }
        fclose(check);

        lines = lines/points;
        printf("Number of movie frames: %d\n", lines);

	for(i=0;i<points;i++){
		fscanf(grid,"%f %f %f %d\n", &g1[i], &g2[i], &g3[i], &gi[i]);
	}
	fclose(grid);

	ufile=fopen("u_3d.out","r");
	rfile=fopen("rho_3d.out","r");
	Qfile=fopen("Q_3d.out","r");
	sfile=fopen("stress_3d.out","r");
	ifile=fopen("type_3d.out","r");
	
	for(m=0;m<lines;m++){
		sprintf(mfile,"movie_%05d.vtk",m);
                file = fopen(mfile,"w");

		fprintf(file,"# vtk DataFile Version 3.0\n");
                fprintf(file,"vtk output\n");
                fprintf(file,"ASCII\n");
                fprintf(file,"DATASET STRUCTURED_GRID\n");

		fprintf(file,"DIMENSIONS\t %d\t %d\t %d\t\n", Nxc, Nyc, Nzc);
                fprintf(file,"POINTS\t %d\t float\n",pointsc);

		for (k=0; k<Nz; k+=m_int) {
			for (j=0; j<Ny; j+=m_int) {
				for (i=0; i<Nx; i+=m_int) {
					id = i + ( j + k*Ny)*Nx;
					fprintf(file,"\t%0.2f\t%0.2f\t%0.2f\n", g1[id], g2[id], g3[id]);
				}
			}
		}

                fprintf(file,"\n");

                fprintf(file,"POINT_DATA\t%d\n",pointsc);

                if(ifile!=NULL){
                        fprintf(file,"SCALARS type int 1\n");
			fprintf(file,"LOOKUP_TABLE default\n");
                        for(id=0;id<points;id++){
				i = id%Nx;
				j =(id/Nx)%Ny;
				k =(id/Nx)/Ny;
                                fscanf(ifile,"%d\n",&gi[id]);
                                if (i%m_int==0 && j%m_int==0 && k%m_int==0) fprintf(file,"\t%d\n",gi[i]);
                        }
			fprintf(file,"\n");
                }

//		fprintf(file,"POINT_DATA\t%d\n",points);
                fprintf(file,"SCALARS S_field float 1\n");
                fprintf(file,"LOOKUP_TABLE default\n");

		for(id=0;id<points;id++){
			i = id%Nx;
			j =(id/Nx)%Ny;
			k =(id/Nx)/Ny;
			fscanf(Qfile,"%f %f %f %f %f\n",&a[0],&a[3],&a[6],&a[4],&a[7]);
			if (i%m_int==0 && j%m_int==0 && k%m_int==0) {
				a[8] = -1*(a[0] + a[4]);
				info = LAPACKE_ssyev(LAPACK_COL_MAJOR, 'v', 'u', 3, a, 3, w);

				if(info>0) {
					printf("failure in eigenvalue routine\n");
					exit(1);
				}

				S = 0.5*3*w[2];
				v1[id] = a[6];
				v2[id] = a[7];
				v3[id] = a[8];

				fprintf(file,"\t%lf\n",S);
			}
		}
		
		fprintf(file,"\n");
                fprintf(file,"VECTORS directors float\n");

		for (k=0; k<Nz; k+=m_int) {
			for (j=0; j<Ny; j+=m_int) {
				for (i=0; i<Nx; i+=m_int) {
					id = i + ( j + k*Ny)*Nx;
					fprintf(file,"\t%f\t%f\t%f\n",v1[id],v2[id],v3[id]);
				}
			}
		}

		fprintf(file,"\n");
                fprintf(file,"VECTORS velocity float\n");

		for(id=0;id<points;id++){
                	fscanf(ufile,"%f %f %f\n",&u[0],&u[1],&u[2]);
			i = id%Nx;
			j =(id/Nx)%Ny;
			k =(id/Nx)/Ny;
                        if (i%m_int==0 && j%m_int==0 && k%m_int==0) fprintf(file,"\t%f\t%f\t%f\n",u[0],u[1],u[2]);
                }

		if(sfile!=NULL){
			fprintf(file,"\n");
                        fprintf(file,"VECTORS stress float\n");
			for(id=0;id<points;id++){
                        	fscanf(sfile,"%f %f %f\n",&u[0],&u[1],&u[2]);
				i = id%Nx;
				j =(id/Nx)%Ny;
				k =(id/Nx)/Ny;
				if (i%m_int==0 && j%m_int==0 && k%m_int==0) fprintf(file,"\t%f\t%f\t%f\n",u[0],u[1],u[2]);
                	}
		}

		if(rfile!=NULL){
			fprintf(file,"\n");
                        fprintf(file,"SCALARS density float\n");
                        fprintf(file,"LOOKUP_TABLE default\n");
			for(id=0;id<points;id++){
                        	fscanf(rfile,"%f\n",&density);
				i = id%Nx;
				j =(id/Nx)%Ny;
				k =(id/Nx)/Ny;
				if (i%m_int==0 && j%m_int==0 && k%m_int==0) fprintf(file,"\t%e\n",density);
                        }
		}

		printf("printed file %d\n",m);
                fclose(file);
	}

	fclose(ufile);
	if(rfile!=NULL)fclose(rfile);
	fclose(Qfile);
	if(sfile!=NULL)fclose(sfile);
	if(ifile!=NULL)fclose(ifile);

	free(g1);
        free(g2);
        free(g3);
        free(v1);
        free(v2);
        free(v3);
	free(gi);

	printf("done!\n");
   
  return 0;
}