void readHeightAndTopSurfaceFromMATLABFile(const char* filename, CpuPtr_2D& H, CpuPtr_2D& top_surface, int& nx, int& ny){ mat_t *matfp; matvar_t *matvar; matfp = Mat_Open(filename, MAT_ACC_RDONLY); if ( NULL == matfp ) { fprintf(stderr,"Error opening MAT file"); } matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); nx = matvar->dims[0]; ny = matvar->dims[1]; int size = nx*ny; H = CpuPtr_2D(nx, ny, 0, true); memcpy(H.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); top_surface = CpuPtr_2D(nx, ny, 0, true); memcpy(top_surface.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; }
static int mat2vips_get_data( mat_t *mat, matvar_t *var, IMAGE *im ) { int y; PEL *buffer; const int es = IM_IMAGE_SIZEOF_ELEMENT( im ); /* Matlab images are plane-separate, so we have to assemble bands in * image-size chunks. */ const int is = es * im->Xsize * im->Ysize; if( Mat_VarReadDataAll( mat, var ) ) { im_error( "im_mat2vips", "%s", _( "Mat_VarReadDataAll failed" ) ); return( -1 ); } if( im_outcheck( im ) || im_setupout( im ) ) return( -1 ); /* Matlab images are in columns, so we have to transpose into * scanlines with this buffer. */ if( !(buffer = IM_ARRAY( im, IM_IMAGE_SIZEOF_LINE( im ), PEL )) ) return( -1 ); for( y = 0; y < im->Ysize; y++ ) { const PEL *p = var->data + y * es; int x; PEL *q; q = buffer; for( x = 0; x < im->Xsize; x++ ) { int b; for( b = 0; b < im->Bands; b++ ) { const PEL *p2 = p + b * is; int z; for( z = 0; z < es; z++ ) q[z] = p2[z]; q += es; } p += es * im->Ysize; } if( im_writeline( y, im, buffer ) ) return( -1 ); } return( 0 ); }
static int mat2vips_get_data( mat_t *mat, matvar_t *var, VipsImage *im ) { int y; VipsPel *buffer; const int es = VIPS_IMAGE_SIZEOF_ELEMENT( im ); /* Matlab images are plane-separate, so we have to assemble bands in * image-size chunks. */ const guint64 is = es * VIPS_IMAGE_N_PELS( im ); if( Mat_VarReadDataAll( mat, var ) ) { vips_error( "mat2vips", "%s", _( "Mat_VarReadDataAll failed" ) ); return( -1 ); } /* Matlab images are in columns, so we have to transpose into * scanlines with this buffer. */ if( !(buffer = VIPS_ARRAY( im, VIPS_IMAGE_SIZEOF_LINE( im ), VipsPel )) ) return( -1 ); for( y = 0; y < im->Ysize; y++ ) { const VipsPel *p = var->data + y * es; int x; VipsPel *q; q = buffer; for( x = 0; x < im->Xsize; x++ ) { int b; for( b = 0; b < im->Bands; b++ ) { const VipsPel *p2 = p + b * is; int z; for( z = 0; z < es; z++ ) q[z] = p2[z]; q += es; } p += es * im->Ysize; } if( vips_image_write_line( im, y, buffer ) ) return( -1 ); } return( 0 ); }
void readPermFromMATLABFile(const char* filename, CpuPtr_3D& perm3D){ mat_t *matfp; matvar_t *matvar; matfp = Mat_Open(filename, MAT_ACC_RDONLY); if ( NULL == matfp ) { fprintf(stderr,"Error opening MAT file"); } matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); int nx = matvar->dims[0]; int ny = matvar->dims[1]; int nz = matvar->dims[2]; nz = 20; int size = nx*ny*nz; perm3D = CpuPtr_3D(nx, ny, nz, 0, true); memcpy(perm3D.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; }
int main (int argc, char *argv[]) { char *prog_name = "matdump"; int i, c, err = EXIT_SUCCESS; mat_t *mat; matvar_t *matvar; int version[3]; Mat_GetLibraryVersion(version, version+1, version+2); if ( MATIO_MAJOR_VERSION != version[0] || MATIO_MINOR_VERSION != version[1] || MATIO_RELEASE_LEVEL != version[2] ) { fprintf(stderr,"matio version in header does not match runtime " "version\n"); return EXIT_FAILURE; } Mat_LogInitFunc(prog_name,default_printf_func); printfunc = print_default; while ((c = getopt_long(argc,argv,optstring,options,NULL)) != EOF) { switch (c) { case 'd': printdata = 1; Mat_VerbMessage(1,"Printing data\n"); break; case 'f': if ( NULL != optarg && !strcmp(optarg,"whos") ) { printfunc = print_whos; break; } Mat_Warning("%s is not a recognized output format. " "Using default\n", optarg); break; case 'h': human_readable = 1; break; case 'v': Mat_SetVerbose(1,0); break; case 'H': Mat_Help(helpstr); exit(EXIT_SUCCESS); case 'V': printf("%s %s\nWritten by Christopher Hulbert\n\n" "Copyright(C) 2006-2013 Christopher C. Hulbert\n", prog_name,MATIO_VERSION_STR); exit(EXIT_SUCCESS); default: printf("%c not a valid option\n", c); break; } } if ( (argc-optind) < 1 ) Mat_Error("Must specify at least one argument"); mat = Mat_Open( argv[optind],MAT_ACC_RDONLY ); if ( NULL == mat ) { Mat_Error("Error opening %s\n", argv[optind]); return EXIT_FAILURE; } optind++; if ( optind < argc ) { /* variables specified on the command line */ for ( i = optind; i < argc; i++ ) { char *next_tok_pos, next_tok = 0; next_tok_pos = get_next_token(argv[i]); if ( next_tok_pos != argv[i] ) { next_tok = *next_tok_pos; *next_tok_pos = '\0'; } matvar = Mat_VarReadInfo(mat,argv[i]); if ( matvar ) { if ( printdata ) { if ( next_tok == '\0' ) { /* No indexing tokens found, so read all of the data */ Mat_VarReadDataAll(mat,matvar); } else { *next_tok_pos = next_tok; read_selected_data(mat,matvar,next_tok_pos); } } (*printfunc)(matvar); Mat_VarFree(matvar); matvar = NULL; } else { Mat_Warning("Couldn't find variable %s in the MAT file", argv[i]); } } /* for ( i = optind; i < argc; i++ ) */ } else { /* print all variables */ if ( printdata ) { while ( (matvar = Mat_VarReadNext(mat)) != NULL ) { (*printfunc)(matvar); Mat_VarFree(matvar); matvar = NULL; } } else { while ( (matvar = Mat_VarReadNextInfo(mat)) != NULL ) { (*printfunc)(matvar); Mat_VarFree(matvar); matvar = NULL; } } } Mat_Close(mat); Mat_LogClose(); return err; }
void readFormationDataFromMATLABFile(const char* filename, CpuPtr_2D& H, CpuPtr_2D& top_surface, CpuPtr_2D& h, CpuPtr_2D& z_normal, CpuPtr_3D& perm3D, float* poro3D, CpuPtr_2D& pv, CpuPtr_2D& north_flux, CpuPtr_2D& east_flux, CpuPtr_2D& north_grav, CpuPtr_2D& east_grav, float& dz, int&nz, int& nx, int& ny){ mat_t *matfp; matvar_t *matvar; matfp = Mat_Open(filename, MAT_ACC_RDONLY); if ( NULL == matfp ) { fprintf(stderr,"Error opening MAT file"); } matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); nz = *(float*)matvar->data; Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); nx = matvar->dims[0]; ny = matvar->dims[1]; int size = nx*ny; H = CpuPtr_2D(nx, ny, 0, true); memcpy(H.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); h = CpuPtr_2D(nx, ny, 0, true); memcpy(h.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); top_surface = CpuPtr_2D(nx, ny, 0, true); memcpy(top_surface.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); pv = CpuPtr_2D(nx, ny, 0, true); memcpy(pv.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); east_flux = CpuPtr_2D(nx, ny, 1, true); memcpy(east_flux.getPtr(), matvar->data,sizeof(float)*(nx+1)*(ny+1)); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); north_flux = CpuPtr_2D(nx, ny, 1, true); memcpy(north_flux.getPtr(), matvar->data,sizeof(float)*(nx+1)*(ny+1)); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); z_normal = CpuPtr_2D(nx, ny, 0, true); memcpy(z_normal.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; //perm3D = CpuPtr_3D(nx, ny, nz, 0, true); matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); nx = matvar->dims[0]; ny = matvar->dims[1]; nz = matvar->dims[2]; printf("3D dims: nx %i ny %i nz %i\n", nx, ny, nz); //memcpy(perm3D.getPtr(), matvar->data,sizeof(float)*nx*ny*nz); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); //poro3D = CpuPtr_3D(nx, ny, nz, 0, true); memcpy(poro3D, matvar->data,sizeof(float)*nx*ny*nz); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); dz = *(float*)matvar->data; Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); north_grav = CpuPtr_2D(nx, ny, 0, true); memcpy(north_grav.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; matvar = Mat_VarReadNextInfo(matfp); Mat_VarReadDataAll(matfp, matvar); printf("Variable: %s\n",matvar->name); east_grav = CpuPtr_2D(nx, ny, 0, true); memcpy(east_grav.getPtr(), matvar->data,sizeof(float)*size); Mat_VarFree(matvar); matvar = NULL; }