/* 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; }
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; }
// 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; } }