示例#1
0
int
main(int argc, char *argv[])
{
  FILE *p;
  FILE *q;

  if (argc != 3)
  {
    fprintf(stderr, "Use: %s src dst\n", PROGRAM_NAME);
    exit(EXIT_FAILURE);
  }
  
  p = fopen(argv[1], "r");

  if (!p)
  {
    fprintf(stderr, "%s : Couldn't read file '%s'\n", PROGRAM_NAME, argv[1]);
    exit(EXIT_FAILURE);
  }

  q = fopen(argv[2], "w");

  if (!q)
  {
    fprintf(stderr, "%s : Couldn't write file '%s'\n", PROGRAM_NAME, argv[2]);
    exit(EXIT_FAILURE);
  }

  while(!feof(p))
  {
    float ent;

    if(fread(&ent, sizeof(ent), 1, p) != 1)
      break;

    //printf("%g (era %g)\n", FloatSwap(ent), ent);
    ent = FloatSwap(ent);

    if (fwrite(&ent, sizeof(ent), 1, q) != 1)
      fprintf(stderr, "Hey! Didn't write the float!\n");
  }

  fclose(p);
  fclose(q);

  return EXIT_SUCCESS;
}
示例#2
0
void ahrs_chimu_update_gps(void)
{
  // Send SW Centripetal Corrections
  uint8_t centripedal[19] = {0xae, 0xae, 0x0d, 0xaa, 0x0b, 0x02,   0x00, 0x00, 0x00, 0x00,   0x00, 0x00, 0x00, 0x00,   0x00, 0x00, 0x00, 0x00,   0xc2 };

  float gps_speed = 0;

  if (gps.fix == GPS_FIX_3D) {
    gps_speed = gps.speed_3d / 100.;
  }
  gps_speed = FloatSwap(gps_speed);

  memmove(&centripedal[6], &gps_speed, 4);

  // Fill X-speed

  CHIMU_Checksum(centripedal, 19);
  InsSend(centripedal, 19);

  // Downlink Send
}
示例#3
0
void ahrs_chimu_update_gps(uint8_t gps_fix __attribute__((unused)), uint16_t gps_speed_3d)
{
  // Send SW Centripetal Corrections
  uint8_t centripedal[19] = {0xae, 0xae, 0x0d, 0xaa, 0x0b, 0x02,   0x00, 0x00, 0x00, 0x00,   0x00, 0x00, 0x00, 0x00,   0x00, 0x00, 0x00, 0x00,   0xc2 };

  float gps_speed = 0;

  if (GpsFixValid()) {
    gps_speed = gps_speed_3d / 100.;
  }
  gps_speed = FloatSwap(gps_speed);

  memmove(&centripedal[6], &gps_speed, 4);

  // Fill X-speed

  CHIMU_Checksum(centripedal, 19);
  InsSend(centripedal, 19);

  // Downlink Send
}
示例#4
0
// ====================================================================
//							MAIN PROGRAM
// ====================================================================
int main( int argc, char *argv[] )
{
	char *filename;
	FILE *fp;

	uint j;
	uint offset_up, offset_down;
	
	flip_image_flag = false;
	swap_flag = false;
	
	if ( argc == 5 )	
	{
		filename   = (char *)argv[1];
		width      = (uint)atoi(argv[2]);
		height     = (uint)atoi(argv[3]);
		image_type = (uint)atoi(argv[4]);
	}
	else if ( argc == 6 )	
	{
		filename   = (char *)argv[1];
		width      = (uint)atoi(argv[2]);
		height     = (uint)atoi(argv[3]);
		image_type = (uint)atoi(argv[4]);

		if ( atoi(argv[5]) == 1 ) // Swap Endian
			swap_flag = true;
	}
	else if ( argc == 7 )	
	{
		filename   = (char *)argv[1];
		width      = (uint)atoi(argv[2]);
		height     = (uint)atoi(argv[3]);
		image_type = (uint)atoi(argv[4]);

		if ( atoi(argv[5]) == 1 ) // Swap Endian
			swap_flag = true;

		if ( atoi(argv[6]) == 1 ) // Flip image
			flip_image_flag = true;
	}
	else {
		printf("\n Usage: %s Filename Width Height Image_Type [Swap_Endian (0 or 1) Flip_Image (0 or 1)]\n\n", argv[0]);
		printf("          Image Type: 0 ( PIXEL_32BIT  ) \n");
		printf("                      1 ( PIXEL_64BIT  ) \n");
		printf("                      2 ( PIXEL_128BIT ) \n");
		printf("                      3 ( PIXEL_160BIT ) \n");
		return ( EXIT_FAILURE );
	}
	
	// ====================================================================

	if ( ( image_type < 0 ) || ( image_type > 3 ) ){
		printf("\n Invalid Image Type \n");
		printf("          Image Type: 0 ( PIXEL_32BIT  ) \n");
		printf("                      1 ( PIXEL_64BIT  ) \n");
		printf("                      2 ( PIXEL_128BIT ) \n");
		printf("                      3 ( PIXEL_160BIT ) \n");
		return ( EXIT_FAILURE );
	}

	// ====================================================================

    if ( ( fp = fopen( filename, "rb")) == NULL ) {
		printf("<<< ERROR >>> Cannot open file: %s \n", filename );
		return 1;
    }

	image_resolution = width * height;

	// ====================================================================

	// PIXEL_32BIT ; PIXEL_56BIT ; PIXEL_64BIT ; PIXEL_88BIT 
	if (( image_type == 0 ) || ( image_type == 1 ))
	{
		if ( image_type == 0 ) { // PIXEL_32BIT
			input_image_size   = image_resolution * PIXEL_32BIT ;
		}
		else if ( image_type == 1 ) { // PIXEL_64BIT
			input_image_size   = image_resolution * PIXEL_64BIT ;
		}

		display_image_size = image_resolution * PIXEL_32BIT ;

		input_byte_image = (GLubyte *)malloc ( input_image_size * sizeof(GLubyte) );
		memset( input_byte_image, 0, input_image_size * sizeof(GLubyte) );

		display_byte_image = (GLubyte *)malloc ( display_image_size * sizeof(GLubyte) );
		memset( display_byte_image, 0, display_image_size * sizeof(GLubyte) );
	
		flip_byte_image = (GLubyte *)malloc ( display_image_size * sizeof(GLubyte) );
		memset( flip_byte_image, 0, display_image_size * sizeof(GLubyte) );

		if ( fread ( input_byte_image, input_image_size, 1, fp ) != 1 ) {
			perror("<<< ERROR >>> Cannot read image \n" );
			exit( EXIT_FAILURE );
		}
		
		if ( image_type == 0 ) { // PIXEL_32BIT

			if ( flip_image_flag == true ) 
			{
				// =======================================
				// 				FLIP IMAGE
				// =======================================
				for ( j = 0; j < height; j++ ) {
					for ( i = 0; i < width; i++ ) {
			
						offset_up   = ( j * width + i ) * 4; // 4 elements
						offset_down = (( height - 1 - j ) * width + i ) * 4; // 4 elements

						display_byte_image[ offset_up     ] = input_byte_image[ offset_down     ]; // R 
						display_byte_image[ offset_up + 1 ] = input_byte_image[ offset_down + 1 ]; // G
						display_byte_image[ offset_up + 2 ] = input_byte_image[ offset_down + 2 ]; // B
						display_byte_image[ offset_up + 3 ] = input_byte_image[ offset_down + 3 ]; // A
					}
				}
			}
			else {
				// =======================================
				// 				NORMAL IMAGE
				// =======================================

				for ( i = 0; i < ( image_resolution * 4 ); i += 4 ) {
					display_byte_image[ i     ] = (BYTE)input_byte_image[ i     ]; // R
					display_byte_image[ i + 1 ] = (BYTE)input_byte_image[ i + 1 ]; // G
					display_byte_image[ i + 2 ] = (BYTE)input_byte_image[ i + 2 ]; // B
					display_byte_image[ i + 3 ] = (BYTE)input_byte_image[ i + 3 ]; // A
				}
			}
		}
		else if ( image_type == 1 ) { // PIXEL_64BIT 

				// =======================================
				// 			Image Tye: 	RGBAZ64 
				// =======================================

				j = 0;
				for ( i = 0; i < ( image_resolution * 8 ); i += 8 ) {
					display_byte_image[ j     ] = (BYTE)input_byte_image[ i     ]; // R
					display_byte_image[ j + 1 ] = (BYTE)input_byte_image[ i + 1 ]; // G
					display_byte_image[ j + 2 ] = (BYTE)input_byte_image[ i + 2 ]; // B
					display_byte_image[ j + 3 ] = (BYTE)input_byte_image[ i + 3 ]; // A
					j += 4;
				}

				if ( flip_image_flag == true ) 
				{
					// =======================================
					// 				FLIP IMAGE
					// =======================================
					memcpy ( input_byte_image, display_byte_image, display_image_size );

					for ( j = 0; j < height; j++ ) {
						for ( i = 0; i < width; i++ ) {
			
							offset_up   = ( j * width + i ) * 4; // 4 elements
							offset_down = (( height - 1 - j ) * width + i ) * 4; // 4 elements

							display_byte_image[ offset_up     ] = input_byte_image[ offset_down     ]; // R
							display_byte_image[ offset_up + 1 ] = input_byte_image[ offset_down + 1 ]; // G
							display_byte_image[ offset_up + 2 ] = input_byte_image[ offset_down + 2 ]; // B
							display_byte_image[ offset_up + 3 ] = input_byte_image[ offset_down + 3 ]; // A
						}
					}
				}
			}

			// ====================================================================
			glutInit ( &argc, argv );
			glutInitWindowPosition ( 0, 0 );
			glutInitWindowSize ( width, height );
			glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
			glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGBA | GLUT_ALPHA);
			glutCreateWindow ( "RGBA Image Viewer" );
	
			glutIdleFunc ( NULL );
			glutReshapeFunc ( Reshape_Window );  // Reshape call back 
			glutKeyboardFunc ( Keyboard_Press ); // Keyboard pressing call back 
			glutMouseFunc ( Mouse_Click ); 		 // Mouse click call back
			glutDisplayFunc ( Display_BYTE );

			glutMainLoop();
			// ====================================================================
		}
		else if (( image_type == 2 ) || ( image_type == 3 )) // PIXEL_128BIT of PIXEL_160BIT 
		{

			// ====================================================================
		
			if ( image_type == 2 ) { // PIXEL_128BIT
				input_image_size   = image_resolution * PIXEL_128BIT ;
			}
			else { // PIXEL_160BIT 
				input_image_size   = image_resolution * PIXEL_160BIT ;
			}

			display_image_size = image_resolution * PIXEL_128BIT ;

			input_float_image = (GLfloat *)malloc ( input_image_size * sizeof(GLfloat) );
			memset( input_float_image, 0, input_image_size * sizeof(GLfloat) );

			display_float_image = (GLfloat *)malloc ( display_image_size * sizeof(GLfloat) );
			memset( display_float_image, 0, display_image_size * sizeof(GLfloat) );
	
			flip_float_image = (GLfloat *)malloc ( display_image_size * sizeof(GLfloat) );
			memset( flip_float_image, 0, display_image_size * sizeof(GLfloat) );

			fread ( input_float_image, input_image_size, 1, fp );
		
			if ( image_type == 2 ) { // PIXEL_128BIT

				// =======================================
				// 			Image Tye: 	RGBA128 
				// =======================================

				if ( swap_flag == true ) 
				{
					// =======================================
					// 			BIG <-> LITTLE ENDIAN
					// =======================================

					if ( flip_image_flag == true ) 
					{
						// =======================================
						// 				FLIP IMAGE
						// =======================================
						for ( j = 0; j < height; j++ ) {
							for ( i = 0; i < width; i++ ) {
			
								offset_up   = ( j * width + i ) * 4; // 4 Eelements
								offset_down = (( height - 1 - j ) * width + i ) * 4; // 4 Eelements
		
								float_val1 = input_float_image[ offset_down     ];
								float_val2 = input_float_image[ offset_down + 1 ];
								float_val3 = input_float_image[ offset_down + 2 ];
								float_val4 = input_float_image[ offset_down + 3 ];

								float_val1 = FloatSwap( float_val1 );
								float_val2 = FloatSwap( float_val2 );
								float_val3 = FloatSwap( float_val3 );
								float_val4 = FloatSwap( float_val4 );

								display_float_image[ offset_up     ] = float_val1;
								display_float_image[ offset_up + 1 ] = float_val2;
								display_float_image[ offset_up + 2 ] = float_val3;
								display_float_image[ offset_up + 3 ] = float_val4;
							}
						}
					}
					else {

							// =======================================
							// 				NORMAL IMAGE
							// =======================================
							for ( i = 0; i < ( image_resolution * 4 ); i += 4 ) 
							{
								float_val1 = (float)input_float_image[ i     ];
								float_val2 = (float)input_float_image[ i + 1 ];
								float_val3 = (float)input_float_image[ i + 2 ];
								float_val4 = (float)input_float_image[ i + 3 ];

								float_val1 = FloatSwap( float_val1 );
								float_val2 = FloatSwap( float_val2 );
								float_val3 = FloatSwap( float_val3 );
								float_val4 = FloatSwap( float_val4 );

								display_float_image[ i     ] = (float)float_val1;
								display_float_image[ i + 1 ] = (float)float_val2;
								display_float_image[ i + 2 ] = (float)float_val3;
								display_float_image[ i + 3 ] = (float)float_val4;
							}		
					}
				}
				else // swap_flag == false  
				{

					if ( flip_image_flag == true ) 
					{
						// =======================================
						// 				FLIP IMAGE
						// =======================================
						for ( j = 0; j < height; j++ ) {
							for ( i = 0; i < width; i++ ) {
			
								offset_up   = ( j * width + i ) * 4; // 4 Eelements
								offset_down = (( height - 1 - j ) * width + i ) * 4;  // 4 Eelements
		
								display_float_image[ offset_up     ] = input_float_image[ offset_down     ];
								display_float_image[ offset_up + 1 ] = input_float_image[ offset_down + 1 ];
								display_float_image[ offset_up + 2 ] = input_float_image[ offset_down + 2 ];
								display_float_image[ offset_up + 3 ] = input_float_image[ offset_down + 3 ];
							}
						}
					}
					else {
							printf("PIXEL: R(%f) G(%f) B(%f) A(%f) \n", \
								input_float_image[0], input_float_image[1], input_float_image[2], input_float_image[3] );

							// =======================================
							// 				NORMAL IMAGE
							// =======================================
							for ( i = 0; i < ( image_resolution * 4 ); i += 4 ) {
								display_float_image[ i     ] = input_float_image[ i     ];
								display_float_image[ i + 1 ] = input_float_image[ i + 1 ];
								display_float_image[ i + 2 ] = input_float_image[ i + 2 ];
								display_float_image[ i + 3 ] = input_float_image[ i + 3 ];
							}

					}
				}	

			}
			else if ( image_type == 3 ) { // PIXEL_160BIT 

				input_float_image_ptr   = (float *)input_float_image;
				display_float_image_ptr = (float *)display_float_image;

				// =======================================
				// 			Image Tye: 	RGBAZ160 
				// =======================================
		
				if ( swap_flag == true ) 
				{
					// =======================================
					// 			BIG <-> LITTLE ENDIAN
					// =======================================
					j = 0;
					for ( i = 0; i < input_image_size; i += 5 ) {

						float_val1 = (float)input_float_image_ptr[ i     ];
						float_val2 = (float)input_float_image_ptr[ i + 1 ];
						float_val3 = (float)input_float_image_ptr[ i + 2 ];
						float_val4 = (float)input_float_image_ptr[ i + 3 ];

						float_val1 = FloatSwap( float_val1 );
						float_val2 = FloatSwap( float_val2 );
						float_val3 = FloatSwap( float_val3 );
						float_val4 = FloatSwap( float_val4 );

						// display_float_image_ptr: RGBA 4 elements
						// input_float_image_ptr  : RGBAZ 5 elements
						display_float_image_ptr[ j     ] = (float)float_val1;
						display_float_image_ptr[ j + 1 ] = (float)float_val2;
						display_float_image_ptr[ j + 2 ] = (float)float_val3;
						display_float_image_ptr[ j + 3 ] = (float)float_val4;
						j += 4;
					}
				}
				else 
				{
					// =======================================
					// 			Image Tye: 	RGBAZ160 
					// =======================================

					j = 0;
					for ( i = 0; i < input_image_size; i += 5 ) {

						// display_float_image_ptr: RGBA 4 elements
						// input_float_image_ptr  : RGBAZ 5 elements
						display_float_image_ptr[ j     ] = (float)input_float_image_ptr[ i     ];
						display_float_image_ptr[ j + 1 ] = (float)input_float_image_ptr[ i + 1 ];
						display_float_image_ptr[ j + 2 ] = (float)input_float_image_ptr[ i + 2 ];
						display_float_image_ptr[ j + 3 ] = (float)input_float_image_ptr[ i + 3 ];
						j += 4;
					}
				}

				// =======================================
				// 					FLIP IMAGE
				// =======================================
				if ( flip_image_flag == true ) 
				{
					memcpy ( input_float_image, display_float_image, display_image_size );

					for ( j = 0; j < height; j++ ) {
						for ( i = 0; i < width; i++ ) {
			
							offset_up   = ( j * width + i ) * 4; // 4 Eelements
							offset_down = (( height - 1 - j ) * width + i ) * 4; // 4 Eelements

							display_float_image[ offset_up     ] = input_float_image[ offset_down     ];
							display_float_image[ offset_up + 1 ] = input_float_image[ offset_down + 1 ];
							display_float_image[ offset_up + 2 ] = input_float_image[ offset_down + 2 ];
							display_float_image[ offset_up + 3 ] = input_float_image[ offset_down + 3 ];
						}
					}
				}
			}
	
			// ====================================================================
			glutInit ( &argc, argv );
			glutInitWindowPosition ( 0, 0 );
			glutInitWindowSize ( width, height );
			glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
			glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGBA | GLUT_ALPHA);
			glutCreateWindow ( "RGBA FLOAT Image Viewer" );
	
			glutIdleFunc ( NULL );
			glutReshapeFunc ( Reshape_Window );  // Reshape call back 
			glutKeyboardFunc ( Keyboard_Press ); // Keyboard pressing call back 
			glutMouseFunc ( Mouse_Click ); 		 // Mouse click call back
			glutDisplayFunc ( Display_FLOAT );
		
			glutMainLoop();
		}

// ===========================================================

	if ( input_byte_image )
		free( input_byte_image );
	if ( input_float_image )
		free( input_float_image );

	if ( display_byte_image )
		free( display_byte_image );
	if ( display_float_image )
		free( display_float_image );

	fclose(fp);

	return ( 0 );
}
示例#5
0
inline float Sys_LittleFloat (const float l) 
{ 
	return FloatSwap(&l);
}
示例#6
0
main (int argc, char *argv[]) {  

  float PARMOD[10];
  PARMOD[0]= 0.0;
  PARMOD[1]= 0.0;
  PARMOD[2]= 0.0;
  PARMOD[3]=0.0;
  PARMOD[4]=0.0;
  PARMOD[5]=0.0;
  PARMOD[6]=0.0;
  
  int iopt;
  int i,j,k;
  float kp = 6.0;
  float ps = 0.0;
  float bxout,byout,bzout; // THESE NEED TO BE STORED IN MEMORY NOW
  // TIMESTEP LOOP STARTS HERE
  //int m;
  //for(m=0;m<=72;m++){
    // NEED TO CALCULATE Kp HERE
    
    // NEED TO COMPARE Kp RESULT TO iopt AND SET
    if(kp < 0.5){
      iopt = 1;
    }
    else if(kp > 0.5 && kp < 1.5){
      iopt = 2;
    }
    else if(kp > 1.5 && kp < 2.5){
      iopt = 3;
    }
    else if(kp > 2.5 && kp < 3.5){
      iopt = 4;
    }
    else if(kp > 3.5 && kp < 4.5){
      iopt = 5;
    }
    else if(kp > 4.5 && kp < 5.5){
      iopt = 6;
    }
    else if(kp > 5.5){
      iopt = 7;
    }

    // CREATE GRID AND STORE IN MEMORY
    int npoinx = 345, npoiny = 187, npoinz = 187;
    int xmin=-222, ymin=-47, zmin=ymin;
    int xmax=30, ymax=47, zmax=ymax;
    //float *xcord = new float[npoinx];
    float *xcord = malloc(npoinx * sizeof(float));
    xcord[0] = xmin;
    // X COORDINATES
    i = 0;
    while (xcord[i] < xmax){
    	i++;
        if(xcord[i-1] < -30. || xcord[i-1] >= 30.){ xcord[i] = xcord[i-1]+1.; }
        else if(xcord[i-1] < -8. || xcord[i-1] >= 8.){ xcord[i] = xcord[i-1]+0.5; }
        else if(xcord[i-1] <= 0. || xcord[i-1] >= 0.){ xcord[i] = xcord[i-1]+0.25; } 
    }
    i = 0;
    //float *ycord = new float[npoiny];
    float *ycord = malloc(npoiny * sizeof(float));
    ycord[0] = ymin;
    // Y COORDINATES
    while (ycord[i] < ymax){
    	i++;
        if(ycord[i-1] < -30. || ycord[i-1] >= 30.){ ycord[i] = ycord[i-1]+1.; }
        else if(ycord[i-1] < -8. || ycord[i-1] >= 8.){ ycord[i] = ycord[i-1]+0.5; }
        else if(ycord[i-1] <= 0. || ycord[i-1] >= 0.){ ycord[i] = ycord[i-1]+0.25; } 
    }
    i = 0;
    //float *zcord = new float[npoinz];
    float *zcord = malloc(npoinz * sizeof(float));
    zcord[0] = zmin;
    // Z COORDINATES
    while (zcord[i] < zmax){
    	i++;
        if(zcord[i-1] < -30. || zcord[i-1] >= 30.){ zcord[i] = zcord[i-1]+1.; }
        else if(zcord[i-1] < -8. || zcord[i-1] >= 8.){ zcord[i] = zcord[i-1]+0.5; }
        else if(zcord[i-1] <= 0. || zcord[i-1] >= 0.){ zcord[i] = zcord[i-1]+0.25; } 
    }
    
    // GRID LOOP STARTS HERE
    int l=0;
    float *bx = malloc(npoinx*npoiny*npoinz * sizeof(float));
    float *by = malloc(npoiny*npoiny*npoinz * sizeof(float));
    float *bz = malloc(npoinz*npoiny*npoinz * sizeof(float));
    for ( k = 0; k < npoinz; k++){
	    for ( j = 0; j < npoiny; j++){
		    for ( i = 0; i < npoinx; i++){
		        // EACH NEW GRID POINT PASS THROUGH THIS FUNCTION
			    //t89c_(&iopt,PARMOD,&ps,&xcord[i],&ycord[j],&zcord[k],&bxout,&byout,&bzout);
			    t89c_(&iopt,PARMOD,&ps,&xcord[i],&ycord[j],&zcord[k],&bxout,&byout,&bzout);
			    bx[l] = bxout;
			    by[l] = byout;
			    bz[l] = bzout;
			    //printf("bx=%f,by=%f,bz=%f\n",bxout,byout,bzout);
			    //return 0;
			    l++;
		    }
	    }
    }
  //}
  
    // WRITE VTK FILE
	// BINARY VTK FILE
	float val, val1, val2;
	FILE *myfile;
	myfile = fopen("/home/bcurtis/Tsyganenko/output/T89/Result0.vtk","w");
	fprintf(myfile, "# vtk DataFile Version 3.0\n");
	fprintf(myfile, "Brian's Data\nBINARY\n");
	fprintf(myfile, "DATASET RECTILINEAR_GRID\n");
	fprintf(myfile, "DIMENSIONS %d %d %d\n", npoinx, npoiny, npoinz);
	fprintf(myfile, "X_COORDINATES %d float\n", npoinx);
	for (i=0; i<npoinx; i++){
		val = FloatSwap(xcord[i]);
		fwrite((void *)&val, sizeof(float), 1, myfile);
	}
	fprintf(myfile, "\nY_COORDINATES %d float\n", npoiny);
	for (i=0; i<npoiny; i++){
		val = FloatSwap(ycord[i]);
		fwrite((void *)&val, sizeof(float), 1, myfile);
	}
	fprintf(myfile, "\nZ_COORDINATES %d float\n", npoinz);
	for (i=0; i<npoinz; i++){
		val = FloatSwap(zcord[i]);
		fwrite((void *)&val, sizeof(float), 1, myfile);
	}
	fprintf(myfile, "\nPOINT_DATA  %d\n", npoinx*npoiny*npoinz);
    fprintf(myfile, "\nVECTORS B FLOAT\n");
    for (i=0; i<npoinx*npoiny*npoinz; i++){
      val = FloatSwap(bx[i]);
      val1 = FloatSwap(by[i]);
      val2 = FloatSwap(bz[i]);
      fwrite((void *)&val, sizeof(float), 1, myfile);
      fwrite((void *)&val1, sizeof(float), 1, myfile);
      fwrite((void *)&val2, sizeof(float), 1, myfile);
    }
	fclose(myfile);
	printf("VTK Write Complete\n");
	
	/*FILE *bxfile;
	FILE *byfile;
	FILE *bzfile;
	bxfile = fopen("/home/bcurtis/Tsyganenko/output/T89/Bx.dat","w");
	byfile = fopen("/home/bcurtis/Tsyganenko/output/T89/By.dat","w");
	bzfile = fopen("/home/bcurtis/Tsyganenko/output/T89/Bz.dat","w");
	fprintf(bxfile, "X\tY\tZ\tBx\n");
	fprintf(byfile, "X\tY\tZ\tBy\n");
	fprintf(bzfile, "X\tY\tZ\tBz\n");
	l=0;
	for ( k = 0; k < npoinz; k++){
	    for ( j = 0; j < npoiny; j++){
		    for ( i = 0; i < npoinx; i++){
		        fprintf(bxfile, "%f\t%f\t%f\t%f\n", xcord[i], ycord[j], zcord[k], bx[l]);
	            fprintf(byfile, "%f\t%f\t%f\t%f\n", xcord[i], ycord[j], zcord[k], by[l]);
	            fprintf(bzfile, "%f\t%f\t%f\t%f\n", xcord[i], ycord[j], zcord[k], bz[l]);
			    l++;
		    }
	    }
    }
    fclose(bxfile);
    fclose(byfile);
    fclose(bzfile);
    printf(".dat File Write Complete\n");
	*/
  
  //free(xcord); free(bx);
  //free(ycord); free(by);
  //free(zcord); free(bz);
  return 0;

}
示例#7
0
int main (int argc, char * argv[]){

  const char* dirname;

  if (argc > 1) {
    dirname = argv[1];
  } else {
    dirname = "../data/";
  }

  ccmc::Kameleon kameleon1, kameleon2;
  std::string filename1, filename2;
  std::string variable;
  std::vector<int> myvars;
  bool firstrun=true, CALCDIFF=false;
  int i,j,k,m;

  int npoinx = 345;
  int npoiny = 187;
  int npoinz = 187;

  float *xcord = new float[npoinx];
  float *ycord = new float[npoiny];
  float *zcord = new float[npoinz];

  grid(xcord,ycord,zcord);

  std::cout << "Reading " << dirname << std::endl;
  std::vector<std::string> chooserun;
  rundirs(&chooserun, dirname);

  DIR *d;
  struct dirent *dir;

  int dset1 [24] = {0,0,0,1,1,2,4,4,4,5,5,6,8,8,8,9,9,10,12,12,12,13,13,14};
  int dset2 [24] = {1,2,3,2,3,3,5,6,7,6,7,7,9,10,11,10,11,11,13,14,15,14,15,15};
  int runi;
  for ( runi = 0; runi < 24; runi++){
    if(dset2[runi]==3 || dset2[runi]==7 || dset2[runi]==11 || dset2[runi]==15){
      std::cout << "Skipping Run " << runi << std::endl;
      continue;
    }
    std::cout << "Dataset 1" << ": " << chooserun[dset1[runi]] << std::endl;
    std::cout << "Dataset 2" << ": " << chooserun[dset2[runi]] << std::endl;
    
    std::vector<std::string> run1ls;
    std::string dirstring;
    dirstring = dirname;
    dirstring.append(chooserun[dset1[runi]]);
    dirstring.append("/GM_CDF");
    d = opendir(dirstring.c_str());
    if (d) {
      while ((dir = readdir(d)) != NULL) {
	if(strcmp(dir->d_name,"..") && strcmp(dir->d_name,".")){
	  //i++;
	  run1ls.push_back(dir->d_name);
	}
      }
    }
    // SORT THE STRING SO FILENAMES ARE IN ORDER
    std::sort(run1ls.begin(), run1ls.end());
    
    std::vector<std::string> run2ls;
    std::string dirstring3;
    std::cout << "SETTING DIRSTRING3" << std::endl;
    dirstring3 = dirname;
    dirstring3.append(chooserun[dset2[runi]]);
    dirstring3.append("/GM_CDF");
    d = opendir(dirstring3.c_str());
    if (d) {
      while ((dir = readdir(d)) != NULL) {
	if(strcmp(dir->d_name,"..") && strcmp(dir->d_name,".")){
	  //i++;
	  run2ls.push_back(dir->d_name);
	}
      }
    }
    // SORT THE STRING SO FILENAMES ARE IN ORDER
    std::sort(run2ls.begin(), run2ls.end());
    //return 0;
    
    int loopnum;
    for(loopnum=0; loopnum<run1ls.size(); loopnum++ ){
      filename1 = dirstring;
      filename1.append("/");
      filename1.append(run1ls[loopnum]);
      std::cout << filename1 << std::endl;
      filename2 = dirstring3;
      filename2.append("/");
      filename2.append(run2ls[loopnum]);
      std::cout << filename2 << std::endl;
      
      long status = kameleon1.open(filename1);
      std::cout << "Opened file: " << filename1 << " with status: " << status << std::endl;
      std::cout << "FileReader::OK = " << ccmc::FileReader::OK << std::endl;
      
      //int numvars = kameleon1.getNumberOfVariables();
      //for(int bb=0; bb<numvars; bb++){
      //	std::cout << "K1 Variable " << bb << "= " << kameleon1.getVariableName(bb) << std::endl;
      //}
      
      if(kameleon1.doesVariableExist("bz")){kameleon1.loadVariable("bz");}else{return 1;}
      if(kameleon1.doesVariableExist("jx")){kameleon1.loadVariable("jx");}else{return 1;}
      if(kameleon1.doesVariableExist("rho")){kameleon1.loadVariable("rho");}else{return 1;}
      if(kameleon1.doesVariableExist("ux")){kameleon1.loadVariable("ux");}else{return 1;}
      
      long status2 = kameleon2.open(filename2);
      std::cout << "Opened file: " << filename2 << " with status: " << status2 << std::endl;
      std::cout << "FileReader::OK = " << ccmc::FileReader::OK << std::endl;
      
      // TEMP LIST ALL VARIABLE NAMES
      //numvars = kameleon2.getNumberOfVariables();
      //for(int ab=0; ab<numvars; ab++){
      //	std::cout << "K2 Variable " << ab << "= " << kameleon2.getVariableName(ab) << std::endl;
      //}
      
      if(kameleon2.doesVariableExist("bz")){kameleon2.loadVariable("bz");}else{return 1;}
      if(kameleon2.doesVariableExist("jx")){kameleon2.loadVariable("jx");}else{return 1;}
      if(kameleon2.doesVariableExist("rho")){kameleon2.loadVariable("rho");}else{return 1;}
      if(kameleon2.doesVariableExist("ux")){kameleon2.loadVariable("ux");}else{return 1;}
      
      // INTERPOLATION #1
      ccmc::Interpolator * interpolator = kameleon1.createNewInterpolator();
      ccmc::Interpolator * interpolator2 = kameleon2.createNewInterpolator();
      boost::numeric::ublas::matrix<float> value(4,npoinx*npoiny*npoinz), \
	value2(4,npoinx*npoiny*npoinz),					\
	diff(4,npoinx*npoiny*npoinz);
      
      std::cout << "Starting Interpolations and Diff" << std::endl;
      int l=0;
      for ( k = 0; k < npoinz; k++){
	for ( j = 0; j < npoiny; j++){
	  for ( i = 0; i < npoinx; i++){
	    value(0,l) = interpolator->interpolate("bz", xcord[i], ycord[j], zcord[k]);
	    value(1,l) = interpolator->interpolate("jx", xcord[i], ycord[j], zcord[k]);
	    value(2,l) = interpolator->interpolate("rho", xcord[i], ycord[j], zcord[k]);
	    value(3,l) = interpolator->interpolate("ux", xcord[i], ycord[j], zcord[k]);
	    value2(0,l) = interpolator2->interpolate("bz", xcord[i], ycord[j], zcord[k]);
	    value2(1,l) = interpolator2->interpolate("jx", xcord[i], ycord[j], zcord[k]);
	    value2(2,l) = interpolator2->interpolate("rho", xcord[i], ycord[j], zcord[k]);
	    value2(3,l) = interpolator2->interpolate("ux", xcord[i], ycord[j], zcord[k]);
	    diff(0,l) = (( value(0,l)-value2(0,l) ) / ( (value(0,l)+value2(0,l)) / 2.0 ))*100.0;
	    diff(1,l) = (( value(1,l)-value2(1,l) ) / ( (value(1,l)+value2(1,l)) / 2.0 ))*100.0;
	    diff(2,l) = (( value(2,l)-value2(2,l) ) / ( (value(2,l)+value2(2,l)) / 2.0 ))*100.0;
	    diff(3,l) = (( value(3,l)-value2(3,l) ) / ( (value(3,l)+value2(3,l)) / 2.0 ))*100.0;
	    l++;
	  }
	}
      }
      
      std::cout << "Interpolations and Diff Complete" << std::endl;
      kameleon1.unloadVariable("bz");
      kameleon1.unloadVariable("jx");
      kameleon1.unloadVariable("rho");
      kameleon1.unloadVariable("ux");
      kameleon2.unloadVariable("bz");
      kameleon2.unloadVariable("jx");
      kameleon2.unloadVariable("rho");
      kameleon2.unloadVariable("ux");
      
      // WRITE THE VTK FILE FOR RENDERING
      std::string resultfilename;
      std::cout << "Starting VTK Write" << std::endl;
      resultfilename = dirname;
      resultfilename.append("Results/");
      resultfilename.append(boost::lexical_cast<std::string>(dset1[runi]));
      resultfilename.append("_");
      resultfilename.append(boost::lexical_cast<std::string>(dset2[runi]));
      resultfilename.append("/Result");
      resultfilename.append(boost::lexical_cast<std::string>(loopnum));
      resultfilename.append(".vtk");
      std::cout << "Result File Name is: " << resultfilename << std::endl;
      
      // BINARY VTK FILE
      float val, val1, val2;
      FILE *myfile;
      myfile = fopen(resultfilename.c_str(),"w");
      fprintf(myfile, "# vtk DataFile Version 3.0\n");
      fprintf(myfile, "Brian's Data\nBINARY\n");
      fprintf(myfile, "DATASET RECTILINEAR_GRID\n");
      fprintf(myfile, "DIMENSIONS %d %d %d\n", npoinx, npoiny, npoinz);
      fprintf(myfile, "X_COORDINATES %d float\n", npoinx);
      for (i=0; i<npoinx; i++){
	val = FloatSwap(xcord[i]);
	fwrite((void *)&val, sizeof(float), 1, myfile);
      }
      fprintf(myfile, "\nY_COORDINATES %d float\n", npoiny);
      for (i=0; i<npoiny; i++){
	val = FloatSwap(ycord[i]);
	fwrite((void *)&val, sizeof(float), 1, myfile);
      }
      fprintf(myfile, "\nZ_COORDINATES %d float\n", npoinz);
      for (i=0; i<npoinz; i++){
	val = FloatSwap(zcord[i]);
	fwrite((void *)&val, sizeof(float), 1, myfile);
      }
      fprintf(myfile, "\nPOINT_DATA  %d\n", npoinx*npoiny*npoinz);
      fprintf(myfile, "\nSCALARS Bz_Diff FLOAT 1\n");
      fprintf(myfile, "LOOKUP_TABLE default\n");
      for (i=0; i<npoinx*npoiny*npoinz; i++){
	//val = FloatSwap(value[m][i]);
	val = FloatSwap(diff(0,i));
	fwrite((void *)&val, sizeof(float), 1, myfile);
      }
      fprintf(myfile, "\nSCALARS Jx_Diff FLOAT 1\n");
      fprintf(myfile, "LOOKUP_TABLE default\n");
      for (i=0; i<npoinx*npoiny*npoinz; i++){
	//val = FloatSwap(value[m][i]);
	val = FloatSwap(diff(1,i));
	fwrite((void *)&val, sizeof(float), 1, myfile);
      }
      fprintf(myfile, "\nSCALARS rho_Diff FLOAT 1\n");
      fprintf(myfile, "LOOKUP_TABLE default\n");
      for (i=0; i<npoinx*npoiny*npoinz; i++){
	//val = FloatSwap(value[m][i]);
	val = FloatSwap(diff(2,i));
	fwrite((void *)&val, sizeof(float), 1, myfile);
      }
      fprintf(myfile, "\nSCALARS Ux_Diff FLOAT 1\n");
      fprintf(myfile, "LOOKUP_TABLE default\n");
      for (i=0; i<npoinx*npoiny*npoinz; i++){
	//val = FloatSwap(value[m][i]);
	val = FloatSwap(diff(3,i));
	fwrite((void *)&val, sizeof(float), 1, myfile);
      }
      fclose(myfile);
      std::cout << "VTK Write Complete" << std::endl;
      // FINISH WRITE OF VTK FILE FOR RENDERING

      kameleon1.close();
      kameleon2.close();
      value.clear();
      value2.clear();
      diff.clear();
      
    }
  }
  return 0;
}
main (int argc, char *argv[]) {  

  float PARMOD[10];
  PARMOD[0]= 0.0;
  PARMOD[1]= 0.0;
  PARMOD[2]= 0.0;
  PARMOD[3]=0.0;
  PARMOD[4]=0.0;
  PARMOD[5]=0.0;
  PARMOD[6]=0.0;
  
  int iopt;
  int i,j,k;
  float kp = 2.0;
  float ps = 0.0;
  float bxout,byout,bzout; // THESE NEED TO BE STORED IN MEMORY NOW
  // TIMESTEP LOOP STARTS HERE
  //int m;
  //for(m=0;m<=72;m++){
    // NEED TO CALCULATE Kp HERE
    
    // NEED TO COMPARE Kp RESULT TO iopt AND SET
    if(kp < 0.5){
      iopt = 1;
    }
    else if(kp > 0.5 && kp < 1.5){
      iopt = 2;
    }
    else if(kp > 1.5 && kp < 2.5){
      iopt = 3;
    }
    else if(kp > 2.5 && kp < 3.5){
      iopt = 4;
    }
    else if(kp > 3.5 && kp < 4.5){
      iopt = 5;
    }
    else if(kp > 4.5 && kp < 5.5){
      iopt = 6;
    }
    else if(kp > 5.5){
      iopt = 7;
    }

    // CREATE GRID AND STORE IN MEMORY
    int npoinx = 345, npoiny = 187, npoinz = 187;
    int xmin=-222, ymin=-47, zmin=ymin;
    int xmax=30, ymax=47, zmax=ymax;
    //float *xcord = new float[npoinx];
    float *xcord = malloc(npoinx * sizeof(float));
    xcord[0] = xmin;
    // X COORDINATES
    i = 0;
    while (xcord[i] < xmax){
    	i++;
        if(xcord[i-1] < -30. || xcord[i-1] >= 30.){ xcord[i] = xcord[i-1]+1.; }
        else if(xcord[i-1] < -8. || xcord[i-1] >= 8.){ xcord[i] = xcord[i-1]+0.5; }
        else if(xcord[i-1] <= 0. || xcord[i-1] >= 0.){ xcord[i] = xcord[i-1]+0.25; } 
    }
    i = 0;
    //float *ycord = new float[npoiny];
    float *ycord = malloc(npoiny * sizeof(float));
    ycord[0] = ymin;
    // Y COORDINATES
    while (ycord[i] < ymax){
    	i++;
        if(ycord[i-1] < -30. || ycord[i-1] >= 30.){ ycord[i] = ycord[i-1]+1.; }
        else if(ycord[i-1] < -8. || ycord[i-1] >= 8.){ ycord[i] = ycord[i-1]+0.5; }
        else if(ycord[i-1] <= 0. || ycord[i-1] >= 0.){ ycord[i] = ycord[i-1]+0.25; } 
    }
    i = 0;
    //float *zcord = new float[npoinz];
    float *zcord = malloc(npoinz * sizeof(float));
    zcord[0] = zmin;
    // Z COORDINATES
    while (zcord[i] < zmax){
    	i++;
        if(zcord[i-1] < -30. || zcord[i-1] >= 30.){ zcord[i] = zcord[i-1]+1.; }
        else if(zcord[i-1] < -8. || zcord[i-1] >= 8.){ zcord[i] = zcord[i-1]+0.5; }
        else if(zcord[i-1] <= 0. || zcord[i-1] >= 0.){ zcord[i] = zcord[i-1]+0.25; } 
    }
    
    // GRID LOOP STARTS HERE
    int l=0;
    float *bx = malloc(npoinx*npoiny*npoinz * sizeof(float));
    float *by = malloc(npoiny*npoiny*npoinz * sizeof(float));
    float *bz = malloc(npoinz*npoiny*npoinz * sizeof(float));
    for ( k = 0; k < npoinz; k++){
	    for ( j = 0; j < npoiny; j++){
		    for ( i = 0; i < npoinx; i++){
		        // EACH NEW GRID POINT PASS THROUGH THIS FUNCTION
			    t89c_(&iopt,PARMOD,&ps,&xcord[i],&ycord[j],&zcord[k],&bxout,&byout,&bzout);
			    bx[l] = bxout;
			    by[l] = byout;
			    bz[l] = bzout;
			    //printf("bx=%f,by=%f,bz=%f\n",bxout,byout,bzout);
			    //return 0;
			    l++;
		    }
	    }
    }
  //}
  
    // WRITE VTK FILE
    std::cout << "Starting VTK Write" << std::endl;
    resultfilename = "/home/bcurtis/Tsyganenko/output/";
	resultfilename.append("/Result");
	resultfilename.append(boost::lexical_cast<std::string>(m));
	resultfilename.append(".vtk");
	std::cout << "Result File Name is: " << resultfilename << std::endl;
	// SPRINTF??????
	
	// BINARY VTK FILE
	float val, val1, val2;
	FILE *myfile;
	myfile = fopen(resultfilename.c_str(),"w");
	fprintf(myfile, "# vtk DataFile Version 3.0\n");
	fprintf(myfile, "Brian's Data\nBINARY\n");
	fprintf(myfile, "DATASET RECTILINEAR_GRID\n");
	fprintf(myfile, "DIMENSIONS %d %d %d\n", npoinx, npoiny, npoinz);
	fprintf(myfile, "X_COORDINATES %d float\n", npoinx);
	for (i=0; i<npoinx; i++){
		val = FloatSwap(xcord[i]);
		fwrite((void *)&val, sizeof(float), 1, myfile);
	}
	fprintf(myfile, "\nY_COORDINATES %d float\n", npoiny);
	for (i=0; i<npoiny; i++){
		val = FloatSwap(ycord[i]);
		fwrite((void *)&val, sizeof(float), 1, myfile);
	}
	fprintf(myfile, "\nZ_COORDINATES %d float\n", npoinz);
	for (i=0; i<npoinz; i++){
		val = FloatSwap(zcord[i]);
		fwrite((void *)&val, sizeof(float), 1, myfile);
	}
	fprintf(myfile, "\nPOINT_DATA  %d\n", npoinx*npoiny*npoinz);
    fprintf(myfile, "\nSCALARS Bx FLOAT 1\n");
    fprintf(myfile, "LOOKUP_TABLE default\n");
    for (i=0; i<npoinx*npoiny*npoinz; i++){
      val = FloatSwap(bx[i]);
      fwrite((void *)&val, sizeof(float), 1, myfile);
    }
    fprintf(myfile, "\nSCALARS By FLOAT 1\n");
    fprintf(myfile, "LOOKUP_TABLE default\n");
    for (i=0; i<npoinx*npoiny*npoinz; i++){
      val = FloatSwap(by[i]);
      fwrite((void *)&val, sizeof(float), 1, myfile);
    }

    fprintf(myfile, "\nSCALARS Bz FLOAT 1\n");
    fprintf(myfile, "LOOKUP_TABLE default\n");
    for (i=0; i<npoinx*npoiny*npoinz; i++){
      val = FloatSwap(bz[i]);
      fwrite((void *)&val, sizeof(float), 1, myfile);
    }
	fclose(myfile);
	std::cout << "VTK Write Complete" << std::endl;
  
  free(xcord); free(bx);
  free(ycord); free(by);
  free(zcord); free(bz);
  return 1;

}