示例#1
0
/* main program controls all the action
 */
int
main(int argc, char *argv[]) {
	int fileinput=0;
	command_t comd;
	csv_t D;

	/* first argument on commandline is the data file name */
	read_csv_file(argv[1], &D);

	/* second argument, if it exists, is file of input commands */
	if (argc==3) {
		fileinput = 1;
		reassign_input(argv[2]);
	}

	/* start the main execution loop */
	print_prompt();
	while (read_command(&comd, fileinput, D.ncols)) {
		process_line(&comd, &D);
		/* then round we go */
		print_prompt();
	}

	/* all done, so pack up and go home */
	printf("bye\n");
	return 0;
}
示例#2
0
文件: hanson.c 项目: feixh/Ellipsis
int read_diag_data_from_file(hanson_data* diag_data,const char* file_name)
{
	int i,result;
	FILE *infile;
	double* mat;
	const int nrows=12;
	const int ncols=diag_data->num_dims;
	/*double E_x,E_x2,E_x3dpsi,E_x2dpsi,E_xdpsi,E_dpsi,var1,var2;*/

	mat=(double*)malloc(nrows*ncols*sizeof(double));
	
	result=1;
	infile=fopen(file_name,"r");
	if(infile != NULL )
	{
		diag_data->keep_sampling=0;
		/* read the diagnostic file */
		read_csv_file(infile,nrows,ncols,mat);
		for(i=0;i<ncols;++i)
		{
			/* gather info for calculating Hanson */
			diag_data->start_point[i]=mat[0*ncols+i];
			diag_data->sum_x[i]=mat[1*ncols+i];
			diag_data->sum_x2[i]=mat[2*ncols+i];
			diag_data->sum_x3dpsi[i]=mat[3*ncols+i];
			diag_data->sum_x2dpsi[i]=mat[4*ncols+i];
			diag_data->sum_xdpsi[i]=mat[5*ncols+i];
			diag_data->sum_dpsi[i]=mat[6*ncols+i];
			diag_data->num_ents=(int)mat[7*ncols+i];
			diag_data->hanson[i]=mat[8*ncols+i];
			
			/* if converged no more sampling required */
			if(diag_data->hanson[i] < diag_data->tol_min || 
				diag_data->hanson[i] > diag_data->tol_max)
			{
				diag_data->keep_sampling=1;
			}			
		}
	}
	else
	{
		result=0;
	}
	free(mat);
	fclose(infile);
	return result;
}
int test_csv_IO()
{
	double x[10];
	double y[10];
	double z[10];	
	double mat[30];	
	int i,j;
	FILE* csvfile;
	
	/* write a csv file */
	csvfile=fopen("csv_file.dat","w");
	for(i=0;i<10;++i)
	{
		x[i]=(double)i;
		y[i]=(double)i*2;
		z[i]=(double)i*3;
	}
	write_csv_file(csvfile,10,x);
	write_csv_file(csvfile,10,y);
	write_csv_file(csvfile,10,z);
	
	fclose(csvfile);
	
	/* read the csv file */
	for(i=0;i<30;++i)
	{
		mat[i]=0;
	}
	csvfile=fopen("csv_file.dat","r");
	read_csv_file(csvfile,3,10,mat);
	
	/* test if they are equal */
	for(i=0;i<3;++i)
	{
		for(j=0;j<10;++j)
		{
			if(mat[i*(int)10+j] != (double)j*(i+1) )
				return EXIT_FAILURE;
		}
	}
	
	fclose(csvfile);
	
	
	return EXIT_SUCCESS;
}
示例#4
0
// proc processing function assigned to a specific data type in proc_io_init
//return 1 if output is available
// return 0 if not output
//
static int data_source(void * vinstance, wsdata_t* source_data,
                       ws_doutput_t * dout, int type_index) {
     proc_instance_t * proc = (proc_instance_t*)vinstance;


     uint32_t start_index_size = get_current_index_size(proc->type_table);


     if (!proc->done && read_csv_file(proc, source_data)) {
          wsdt_tuple_t * tuple = (wsdt_tuple_t*)source_data->data;
          if (tuple->len) {
               uint32_t end_index_size = get_current_index_size(proc->type_table);
               if(start_index_size == end_index_size) {
                    // the index size didn't change, write the data out
                    ws_set_outdata(source_data, proc->outtype_tuple, dout);
               }
               else {
                    // the index size did change, duplicate the tuple to update
                    // the index size.  Needed for searching
                   wsdata_t * newtup = wsdata_alloc(dtype_tuple);
                   if (!newtup) {
                         ws_set_outdata(source_data, proc->outtype_tuple, dout);
                   }
                   else { 
                         int i;
                         for (i = 0; i < tuple->len; i++) {
                              add_tuple_member(newtup, tuple->member[i]);
                         }
                         ws_set_outdata(newtup, proc->outtype_tuple, dout);
                   }
              }
              proc->meta_process_cnt++;
          }    
          return 1;
     }
     else {
          return 0;
     }
}