void single_variable_silo_writer::start_write_locked( boost::uint64_t step , double time , mutex_type::scoped_lock& l ) { OCTOPUS_ASSERT(l.owns_lock()); // Make sure we closed the last epoch. stop_write_locked(l); step_ = step; time_ = time; try { std::string s = boost::str( boost::format(file_name_) % hpx::get_locality_id() % step_); file_ = DBCreate(s.c_str(), DB_CLOBBER, DB_LOCAL, NULL, DB_PDB); } // FIXME: Catch the specific boost.format exception. catch (...) { try { std::string s = boost::str( boost::format(file_name_) % hpx::get_locality_id()); file_ = DBCreate(s.c_str(), DB_CLOBBER, DB_LOCAL, NULL, DB_PDB); } // FIXME: Catch the specific boost.format exception. catch (...) { file_ = DBCreate(file_name_.c_str() , DB_CLOBBER, DB_LOCAL, NULL, DB_PDB); } } OCTOPUS_ASSERT(file_ != 0); directory_names_.reserve(config().levels_of_refinement + 1); for (boost::uint64_t i = 0; i < (config().levels_of_refinement + 1); ++i) directory_names_.push_back (boost::str(boost::format("/meshes_%1%") % i).c_str()); for (boost::uint64_t i = 0; i < directory_names_.size(); ++i) { int error = DBMkDir(file_, directory_names_[i].c_str()); OCTOPUS_ASSERT(error == 0); } }
//============================================================================// void SILO_CycObj::Write_SILO(char *silo_path) { // Write out the SILO database filename: char full_name[1001]; sprintf(full_name,"%s%s_%0.3d.silo",silo_path,silo_name,this->cycle); // Bail out if this SILO database should not be written: if(!write_flag) { cout << " Ignored: " << full_name << "\n"; return; } // Open the .silo database file: DBfile *dbfile = DBCreate(full_name,DB_CLOBBER,DB_LOCAL,"data",DB_PDB); // Write the mesh to the .silo database: WriteMesh_SILO(dbfile,mesh_name,this->silodims,this->mesh_coords, this->cycle,this->time); // Write the data to the .silo database: for(int m=0; m<nvars; m++) { if(this->mask_flags[m]) { this->data_objs[m]->WriteData_SILO(dbfile,this->cycle,mesh_name, this->mesh_coords); } } // Close the completed .silo database: DBClose(dbfile); cout << " Output: " << full_name << "\n"; }
DBfile *openpdmp( char* kern, int cyc, int num, int mode, char* dmpname) { char *me = "openpdmp"; DBfile *idbidin; int ierr; char infotmp[30], msg[128]; char fullname[MAXLINE]; if (num >= 0) { if (cyc >= 0) { sprintf(dmpname, "%s-%04d-%05d.silo", kern, num, cyc) ; } else { sprintf(dmpname, "%s-%04d.silo", kern, num) ; } } else { if (cyc >= 0) { sprintf(dmpname, "%s%05d.silo", kern, cyc) ; } else { sprintf(dmpname, "%s.silo", kern) ; } } if (mode == 2) return(NULL); DBShowErrors(DB_NONE, NULL); if (mode == 0) { idbidin = DBOpen (dmpname, DB_PDB, DB_READ); if (idbidin == NULL) ctlerror(me,gv_errmsg_DBOpen); } else { sprintf(infotmp, "%s dump file", meshlink_codesys); strcpy(fullname,outpath); strcat(fullname,dmpname); idbidin = DBCreate(fullname, DB_CLOBBER, DB_LOCAL, infotmp, DB_PDB ); } DBShowErrors(DB_TOP, NULL); return(idbidin); }
/*********************************************************************** * Program * * ucdsamp3 * * Purpose * * Sample program illustrating use of SILO for writing 3D * unstructured cell data. * * Modifications * * Robb Matzke, 1999-04-09 * Added argument parsing to control the driver which is used. ***********************************************************************/ int main(int argc, char *argv[]) { DBfile *dbfile; int i, driver=DB_PDB; char *filename="ucdsamp3.pdb"; int show_all_errors = FALSE; /* Parse command-line */ for (i=1; i<argc; i++) { if (!strncmp(argv[i], "DB_PDB", 6)) { driver = StringToDriver(argv[i]); filename = "ucdsamp3.pdb"; } else if (!strncmp(argv[i], "DB_HDF5", 7)) { driver = StringToDriver(argv[i]); filename = "ucdsamp3.h5"; } else if (!strcmp(argv[i], "show-all-errors")) { show_all_errors = 1; } else if (argv[i][0] != '\0') { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } DBShowErrors(show_all_errors?DB_ALL_AND_DRVR:DB_ALL, NULL); dbfile = DBCreate(filename, 0, DB_LOCAL, "ucd test file", driver); printf("Creating file: '%s'...\n", filename); build_ucd3(dbfile, "mesh1"); DBClose(dbfile); CleanupDriverStuff(); exit(0); }
/*------------------------------------------------------------------------- * Function: main * * Purpose: Test various issues in interactions with underlying * filesystem * * Return: 0 * * Programmer: Mark C. Miller, Wed Aug 29 11:07:16 PDT 2012 *------------------------------------------------------------------------- */ int main(int argc, char *argv[]) { int i, driver = DB_PDB; int show_all_errors = FALSE; DBfile *dbfile; for (i=1; i<argc; i++) { if (!strncmp(argv[i], "DB_PDB",6)) { driver = StringToDriver(argv[i]); } else if (!strncmp(argv[i], "DB_HDF5", 7)) { driver = StringToDriver(argv[i]); } else if (!strcmp(argv[i], "show-all-errors")) { show_all_errors = 1; } else if (argv[i][0] != '\0') { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } DBShowErrors(show_all_errors?DB_ALL_AND_DRVR:DB_NONE, NULL); /* Test opening a file in a non-existent directory */ { char *filename = "testfs_dir/testfs.silo"; dbfile = DBCreate(filename, 0, DB_LOCAL, "filesytem tests", driver); assert(!dbfile); } CleanupDriverStuff(); return 0; }
/*--------------------*/ int main(int argc, char **argv) { DBfile *db; int i, driver = DB_PDB; char *filename = "csg.pdb"; int show_all_errors = FALSE; char *coordnames[3]; float *coord[3]; for (i=1; i<argc; i++) { if (!strncmp(argv[i], "DB_PDB",6)) { driver = StringToDriver(argv[i]); filename = "mat3d_3across.pdb"; } else if (!strncmp(argv[i], "DB_HDF5", 7)) { driver = StringToDriver(argv[i]); filename = "mat3d_3across.h5"; } else if (!strcmp(argv[i], "show-all-errors")) { show_all_errors = 1; } else if (argv[i][0] != '\0') { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } if (show_all_errors) DBShowErrors(DB_ALL_AND_DRVR, 0); coordnames[0]=strdup("x"); coordnames[1]=strdup("y"); coordnames[2]=strdup("z"); coord[0] = x; coord[1] = y; coord[2] = z; dims[0]=nx; dims[1]=ny; dims[2]=nz; db=DBCreate(filename, DB_CLOBBER, DB_LOCAL, "Mixed zone 3d test", driver); DBPutQuadmesh(db, "mesh", coordnames, coord, dims, 3, DB_FLOAT, DB_NONCOLLINEAR, NULL); dims[0]=zx; dims[1]=zy; dims[2]=zz; DBPutMaterial(db, "material", "mesh", nmat, matnos, matlist, dims, 3, mix_next, mix_mat, mix_zone, mix_vf, mixlen, DB_FLOAT, NULL); DBClose(db); free(coordnames[0]); free(coordnames[1]); free(coordnames[2]); CleanupDriverStuff(); return 0; }
/* * Initialize ConfigDB */ tConfigDB* ConfigInitialize(int mode,char * addr,int port,char * filename) { debug("start ConfigInitialize...\n"); if(strlen(addr)>NAME_STR_LEN || strlen(filename)>NAME_STR_LEN) { fprintf(stderr,"Args Error,%s:%d\n",__FILE__,__LINE__); return NULL; } tConfigDB* db = (tConfigDB*)malloc(sizeof(tConfigDB)); strncpy(db->filename,filename,NAME_STR_LEN); strncpy(db->addr,addr,NAME_STR_LEN); db->port = port; if(mode & LOCAL_MODE) { /* open config database file */ } else if(mode & GRID_MODE) { /* start as Master */ if(strcmp(addr,IP_ADDR) == 0 && PORT == port) { debug("GRID_MODE:Master.\n"); mode |= MASTER_MODE; db->cluster = (void*)InitCluster(); AddNode((tCluster*)db->cluster,addr,port); } else /* start as Data Node */ { debug("GRID_MODE:Data Node.\n"); db->cluster = (void*)RegisterAndLoadClusterNodes(addr,port); } } else { goto ERROR; } /* create local database */ db->db = DBCreate(filename); /* start Service Engine */ debug("start Service Engine.\n"); if(pthread_create(&(db->engine),NULL,(void*)ServiceEngine,(void*)db) != 0) { fprintf(stderr,"Service Engine pthread_create Error,%s:%d\n",__FILE__,__LINE__); goto ERROR; } if(ConnectDataNode((tCluster*)db->cluster,addr,port,filename) != 0) { goto ERROR; } return db; ERROR: ConfigDestroy(db); return NULL; }
virtual void WriteMasterFile(const bool *domainsHaveData) { std::string filename(MasterFile()); DBfile *dbfile = DBCreate(filename.c_str(), DB_CLOBBER, DB_LOCAL, "3D point mesh", DB_HDF5); if(dbfile == NULL) { fprintf(stderr, "Could not create master Silo file!\n"); return; } // Create an option list for saving cycle and time values. DBoptlist *optlist = DBMakeOptlist(2); DBAddOption(optlist, DBOPT_CYCLE, (void *)&cycle); DBAddOption(optlist, DBOPT_DTIME, (void *)&time); const char *snames[] = {"pointmesh", "vx", "vy", "vz", "restitution", "mass", "dom", "contact"}; const int svartypes[] = {DB_POINTMESH, DB_POINTVAR, DB_POINTVAR, DB_POINTVAR, DB_POINTVAR, DB_POINTVAR, DB_POINTVAR, DB_POINTVAR}; const bool isMesh[] = {true, false, false, false, false, false, false, false}; for(size_t i = 0; i < (sizeof(snames)/sizeof(const char*)); ++i) { std::vector<std::string> names; for(int d = 0; d < nDomains; ++d) { std::string domName("EMPTY"); if(domainsHaveData[d]) domName = (DomainFile(d) + ":") + snames[i]; names.push_back(domName); } char **varnames = new char *[nDomains]; int *vartypes = new int[nDomains]; for(int d = 0; d < nDomains; ++d) { varnames[d] = (char*)names[d].c_str(); vartypes[d] = svartypes[i]; } if(isMesh[i]) DBPutMultimesh(dbfile, snames[i], nDomains, varnames, vartypes, optlist); else DBPutMultivar(dbfile, snames[i], nDomains, varnames, vartypes, optlist); } const char *names[] = {"velocity", "speed", "ID"}; const char *defs[] = {"{vx,vy,vz}", "magnitude(velocity)", "global_nodeid(pointmesh)"}; int types[] = {DB_VARTYPE_VECTOR, DB_VARTYPE_SCALAR, DB_VARTYPE_SCALAR}; DBPutDefvars(dbfile, "defvars", 3, (char**)names, types, (char**)defs, NULL); DBFreeOptlist(optlist); DBClose(dbfile); }
int main(int argc, char *argv[]) { int driver = DB_PDB; DBfile *dbfile = NULL; // Look through command line args. for(int j = 1; j < argc; ++j) { if (strcmp(argv[j], "-driver") == 0) { j++; if (strcmp(argv[j], "DB_HDF5") == 0) driver = DB_HDF5; else if (strcmp(argv[j], "DB_PDB") == 0) driver = DB_PDB; else { fprintf(stderr,"Uncrecognized driver name \"%s\"\n", argv[j]); } } } /* Open the Silo file */ dbfile = DBCreate("meshorigin.silo", DB_CLOBBER, DB_LOCAL, "Many mesh types with different cell/node offsets", driver); if(dbfile == NULL) { fprintf(stderr, "Could not create Silo file!\n"); return -1; } /* Add other Silo calls here. */ write_point3d(dbfile, "pointmesh0", 0); write_point3d(dbfile, "pointmesh1", 1); write_rect3d(dbfile, "rectmesh0", 0); write_rect3d(dbfile, "rectmesh1", 1); write_curv3d(dbfile, "curvemesh0", 0); write_curv3d(dbfile, "curvemesh1", 1); write_ucd3d(dbfile, "ucdmesh0", 0); write_ucd3d(dbfile, "ucdmesh1", 1); /* Close the Silo file. */ DBClose(dbfile); return 0; }
logical CTX_DBBase :: ExecuteAction (DB_Event intevent ) { logical term = NO; BEGINSEQ if ( !this ) LEAVESEQ switch ( intevent ) { case DBO_Opened : term = DBOpened(); break; case DBO_Initialize : term = DBInitialize(); break; case DBO_Created : if ( !(term = DBCreated()) ) intern_states.data_state = DAT_Filled; break; case DBO_NotCreated : term = DBNotCreated(); break; case DBO_Read : if ( !(term = DBRead()) ) intern_states.data_state = DAT_Filled; break; case DBO_Reset : term = DBReset(); break; case DBO_Stored : term = DBStored(); break; case DBO_Inserted : if ( !(term = DBInserted()) ) intern_states.data_state = DAT_Filled; break; case DBO_NotInserted: term = DBNotInserted(); break; case DBO_Removed : term = DBRemoved(); break; case DBO_NotRemoved : term = DBNotRemoved(); break; case DBO_Deleted : term = DBDeleted(); break; case DBO_NotDeleted : term = DBNotDeleted(); break; case DBO_Refresh : term = DBRefresh(); break; case DBO_NotOpened : term = DBNotOpened(); break; case DBO_Close : term = DBClose(); break; case DBP_Read : term = DBBeforeRead(); break; case DBP_Create : term = DBCreate(); break; case DBP_Modify : term = DBModify(); break; case DBP_Store : term = DBStore(); break; case DBP_Insert : term = DBInsert(); break; case DBP_Open : term = DBOpen(); break; case DBP_Remove : term = DBRemove(); break; case DBP_Delete : term = DBDelete(); break; case DBP_Select : term = DBSelect(); break; case DB_undefined : LEAVESEQ default : ERROR } RECOVER term = YES; ENDSEQ return(term); }
void write_master(double extents[4][2]) { DBfile *dbfile = NULL; /* Open the Silo file */ dbfile = DBCreate("dataextents.root", DB_CLOBBER, DB_LOCAL, "Master file with data extents", DB_HDF5); write_multimesh(dbfile); write_multivar(dbfile, extents); /* Close the Silo file. */ DBClose(dbfile); }
/*--------------------*/ int main(int argc, char **argv) { DBfile *db; int i, driver = DB_PDB; char *filename = "csg.pdb"; char *coordnames[3]; float *coord[3]; for (i=1; i<argc; i++) { if (!strcmp(argv[i], "DB_PDB")) { driver = DB_PDB; filename = "mat3d_3across.pdb"; } else if (!strcmp(argv[i], "DB_HDF5")) { driver = DB_HDF5; filename = "mat3d_3across.h5"; } else { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } coordnames[0]=strdup("x"); coordnames[1]=strdup("y"); coordnames[2]=strdup("z"); coord[0] = x; coord[1] = y; coord[2] = z; dims[0]=nx; dims[1]=ny; dims[2]=nz; db=DBCreate(filename, DB_CLOBBER, DB_LOCAL, "Mixed zone 3d test", driver); DBPutQuadmesh(db, "mesh", coordnames, coord, dims, 3, DB_FLOAT, DB_NONCOLLINEAR, NULL); dims[0]=zx; dims[1]=zy; dims[2]=zz; DBPutMaterial(db, "material", "mesh", nmat, matnos, matlist, dims, 3, mix_next, mix_mat, mix_zone, mix_vf, mixlen, DB_FLOAT, NULL); DBClose(db); return 0; }
void write_master(double extents[4][2]) { DBfile *dbfile = NULL; char **meshnames = NULL, **varnames = NULL; int dom, nmesh = 4, nvar = 4; int *meshtypes = NULL, *vartypes = NULL; /* Open the Silo file */ dbfile = DBCreate("dataextents.root", DB_CLOBBER, DB_LOCAL, "Master file with data extents", DB_HDF5); write_multimesh(dbfile); write_multivar(dbfile, extents); /* Close the Silo file. */ DBClose(dbfile); }
int main(int argc, char *argv[]) { DBfile *dbfile = NULL; int i; int driver = DB_PDB; char *filename = "majorder.silo"; void *coords[2]; int ndims = 2; int dims[2] = {3,2}; int dims1[2] = {4,3}; int colmajor = DB_COLMAJOR; DBoptlist *optlist; /* Parse command-line */ for (i=1; i<argc; i++) { if (!strncmp(argv[i], "DB_", 3)) { driver = StringToDriver(argv[i]); } else if (argv[i][0] != '\0') { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } dbfile = DBCreate(filename, DB_CLOBBER, DB_LOCAL, "test major order on quad meshes and vars", driver); coords[0] = row_maj_x_data; coords[1] = row_maj_y_data; DBPutQuadmesh(dbfile, "row_major_mesh", 0, coords, dims1, ndims, DB_FLOAT, DB_NONCOLLINEAR, 0); DBPutQuadvar1(dbfile, "row_major_var", "row_major_mesh", row_maj_v_data, dims, ndims, 0, 0, DB_INT, DB_ZONECENT, 0); optlist = DBMakeOptlist(1); DBAddOption(optlist, DBOPT_MAJORORDER, &colmajor); coords[0] = col_maj_x_data; coords[1] = col_maj_y_data; DBPutQuadmesh(dbfile, "col_major_mesh", 0, coords, dims1, ndims, DB_FLOAT, DB_NONCOLLINEAR, optlist); DBPutQuadvar1(dbfile, "col_major_var", "col_major_mesh", col_maj_v_data, dims, ndims, 0, 0, DB_INT, DB_ZONECENT, optlist); DBFreeOptlist(optlist); DBClose(dbfile); CleanupDriverStuff(); return 0; }
int main(int argc, char *argv[]) { DBfile *dbfile = NULL; /* Open the Silo file */ dbfile = DBCreate("point2d.silo", DB_CLOBBER, DB_LOCAL, "2D point mesh", DB_HDF5); if(dbfile == NULL) { fprintf(stderr, "Could not create Silo file!\n"); return -1; } /* Add other Silo calls here. */ write_point2d(dbfile); /* Close the Silo file. */ DBClose(dbfile); return 0; }
int main(int argc, char *argv[]) { DBfile *dbfile = NULL; /* Open the Silo file */ dbfile = DBCreate("basic.silo", DB_CLOBBER, DB_LOCAL, "Comment about the data", DB_HDF5); if(dbfile == NULL) { fprintf(stderr, "Could not create Silo file!\n"); return -1; } /* Add other Silo calls here. */ /* Close the Silo file. */ DBClose(dbfile); return 0; }
int main(int argc, char *argv[]) { DBfile *dbfile; int i=1, driver = DB_PDB; DBShowErrors(DB_ALL, NULL); while (i < argc) { if (strcmp(argv[i], "-driver") == 0) { i++; if (strcmp(argv[i], "DB_HDF5") == 0) { driver = DB_HDF5; } else if (strcmp(argv[i], "DB_PDB") == 0) { driver = DB_PDB; } else { fprintf(stderr,"Uncrecognized driver name \"%s\"\n", argv[i]); exit(-1); } } i++; } dbfile = DBCreate("csg.silo", 0, DB_LOCAL, "csg test file", driver); build_csg(dbfile, "csgmesh"); build_greenman_csg(dbfile, "greenman_mesh"); build_primitives_csg(dbfile); build_csg_time_series(driver); DBClose(dbfile); return 0; }
int main(int argc, char *argv[]) { DBfile *dbfile = NULL; /* Open the Silo file */ dbfile = DBCreate("vectorvar.silo", DB_CLOBBER, DB_LOCAL, "Vector quadvars in 3D", DB_HDF5); if(dbfile == NULL) { fprintf(stderr, "Could not create Silo file!\n"); return -1; } /* Add other Silo calls here. */ write_curv3d(dbfile); write_zonecent_quadvar(dbfile); write_nodecent_quadvar(dbfile); /* Close the Silo file. */ DBClose(dbfile); return 0; }
int DBVerify() { if (!m_database) { int needs_create; int d; needs_create = 1; //!stat(OUTPUT_FILENAME, NULL); d = sqlite3_open_v2(OUTPUT_FILENAME, &m_database, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); if (d != SQLITE_OK) { fprintf(stderr, "WARNING: Database failed to open: %s\n", sqlite3_errmsg(m_database)); return 0; } if (needs_create) DBCreate(); d = sqlite3_prepare(m_database, "SELECT `data` FROM `blocks` WHERE `pos`=? LIMIT 1", -1, &m_database_read, NULL); if (d != SQLITE_OK) { fprintf(stderr, "WARNING: Database read statment failed to prepare: %s\n", sqlite3_errmsg(m_database)); return 0; } d = sqlite3_prepare(m_database, "REPLACE INTO `blocks` VALUES(?, ?)", -1, &m_database_write, NULL); if (d != SQLITE_OK) { fprintf(stderr, "WARNING: Database write statment failed to prepare: %s\n", sqlite3_errmsg(m_database)); return 0; } d = sqlite3_prepare(m_database, "SELECT `pos` FROM `blocks`", -1, &m_database_list, NULL); if (d != SQLITE_OK) { fprintf(stderr, "WARNING: Database list statment failed to prepare: %s\n", sqlite3_errmsg(m_database)); return 0; } printf("Database opened\n"); } return 1; }
int main(int argc, char *argv[]) { DBfile *dbfile = NULL; /* Open the Silo file */ dbfile = DBCreate("optlist.silo", DB_CLOBBER, DB_LOCAL, "Option list example", DB_HDF5); if(dbfile == NULL) { fprintf(stderr, "Could not create Silo file!\n"); return -1; } /* Add other Silo calls here. */ write_rect2d(dbfile); write_zonecent_quadvar2d(dbfile); write_nodecent_quadvar2d(dbfile); /* Close the Silo file. */ DBClose(dbfile); return 0; }
/*------------------------------------------------------------------------- * Function: main * * Purpose: Generate multi block curvilinear test file with species info. * * Return: Success: * * Failure: * * Programmer: Jeremy Meredith, Sept 29, 1998 * * Modifications: * Robb Matzke, 1999-04-09 * Added argument parsing to control the driver which is used. * *------------------------------------------------------------------------*/ int main(int argc, char *argv[]) { DBfile *dbfile; int i, driver = DB_PDB; char *filename = "multispec.pdb"; /* Parse command-line options */ for (i=1; i<argc; i++) { if (!strcmp(argv[i], "DB_PDB")) { driver = DB_PDB; filename = "multispec.pdb"; } else if (!strcmp(argv[i], "DB_HDF5")) { driver = DB_HDF5; filename = "multispec.h5"; } else { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } /* * Create the multi-block curvilinear 2d mesh. */ fprintf(stdout, "creating %s\n", filename); if ((dbfile = DBCreate(filename, DB_CLOBBER, DB_LOCAL, "multi-block curvilinear 2d test file", driver)) == NULL) { fprintf(stderr, "Could not create '%s'.\n", filename); } else if (build_dbfile(dbfile) == -1) { fprintf(stderr, "Error in creating '%s'.\n", filename); DBClose(dbfile); } else DBClose(dbfile); return(0); }
void write_master(void) { DBfile *dbfile = NULL; char **meshnames = NULL; int dom, nmesh = 4, *meshtypes = NULL; /* Create the list of mesh names. */ meshnames = (char **)malloc(nmesh * sizeof(char *)); for(dom = 0; dom < nmesh; ++dom) { char tmp[100]; sprintf(tmp, "multimesh.%d:quadmesh", dom); meshnames[dom] = strdup(tmp); } /* Create the list of mesh types. */ meshtypes = (int *)malloc(nmesh * sizeof(int)); for(dom = 0; dom < nmesh; ++dom) meshtypes[dom] = DB_QUAD_RECT; /* Open the Silo file */ dbfile = DBCreate("multimesh.root", DB_CLOBBER, DB_LOCAL, "Master file", DB_HDF5); /* Write the multimesh. */ DBPutMultimesh(dbfile, "quadmesh", nmesh, meshnames, meshtypes, NULL); /* Close the Silo file. */ DBClose(dbfile); /* Free the memory*/ for(dom = 0; dom < nmesh; ++dom) free(meshnames[dom]); free(meshnames); free(meshtypes); }
void write_domains(void) { float x[] = {0., 1., 2.5, 5.}; float y[] = {0., 2., 2.25, 2.55, 5.}; int dims[] = {4, 5}; int dom, i, ndims = 2; float tx[] = {0., -5., -5., 0.}; float ty[] = {0., 0., -5., -5.}; for(dom = 0; dom < 4; ++dom) { DBfile *dbfile = NULL; float xc[4], yc[5]; float *coords[] = {xc, yc}; char filename[100]; for(i = 0; i < 4; ++i) xc[i] = x[i] + tx[dom]; for(i = 0; i < 5; ++i) yc[i] = y[i] + ty[dom]; /* Open the Silo file */ sprintf(filename, "multimesh.%d", dom); dbfile = DBCreate(filename, DB_CLOBBER, DB_LOCAL, "domain data", DB_HDF5); /* Write a rectilinear mesh. */ DBPutQuadmesh(dbfile, "quadmesh", NULL, coords, dims, ndims, DB_FLOAT, DB_COLLINEAR, NULL); /* Close the Silo file. */ DBClose(dbfile); } }
/*--------------------*/ int main(int argc, char **argv) { DBfile *db; int i, driver = DB_PDB; char *filename = "mat_3x3x3_3across.silo"; char *coordnames[3]; float *coord[3]; i=1; while (i < argc) { if (strcmp(argv[i], "-driver") == 0) { i++; if (strcmp(argv[i], "DB_HDF5") == 0) { driver = DB_HDF5; } else if (strcmp(argv[i], "DB_PDB") == 0) { driver = DB_PDB; } else { fprintf(stderr,"Uncrecognized driver name \"%s\"\n", argv[i]); exit(-1); } } i++; } coordnames[0]=strdup("x"); coordnames[1]=strdup("y"); coordnames[2]=strdup("z"); coord[0] = x; coord[1] = y; coord[2] = z; dims[0]=nx; dims[1]=ny; dims[2]=nz; db=DBCreate(filename, DB_CLOBBER, DB_LOCAL, "Mixed zone 2d test", driver); DBPutQuadmesh(db, "mesh", coordnames, coord, dims, 3, DB_FLOAT, DB_NONCOLLINEAR, NULL); dims[0]=zx; dims[1]=zy; dims[2]=zz; DBPutMaterial(db, "material", "mesh", nmat, matnos, matlist, dims, 3, mix_next, mix_mat, mix_zone, mix_vf, mixlen, DB_FLOAT, NULL); char *expNames[3] = {"mat1", "mat2", "mat3"}; char *expDefs[3] = {"matvf(<material>, 1)", "matvf(<material>, 2)", "matvf(<material>, 3)"}; int expTypes[3] = {DB_VARTYPE_SCALAR, DB_VARTYPE_SCALAR, DB_VARTYPE_SCALAR}; DBoptlist *optlists[3] = {NULL, NULL, NULL}; DBPutDefvars(db, "_visit_defvars", 3, expNames, expTypes, expDefs, optlists); DBClose(db); return 0; }
int main(int argc, char **argv) { DBfile *dbfile; int N = 21; int driver = DB_PDB; int i = 1; while (i < argc) { if (strcmp(argv[i], "-driver") == 0) { i++; if (strcmp(argv[i], "DB_HDF5") == 0) { driver = DB_HDF5; } else if (strcmp(argv[i], "DB_PDB") == 0) { driver = DB_PDB; } else { fprintf(stderr,"Uncrecognized driver name \"%s\"\n", argv[i]); exit(-1); } } else if (strcmp(argv[i], "-n") == 0) { i++; N = atoi(argv[i]); if (N < 0 || N > 10000) { fprintf(stderr,"size, %d, too large\n", N); exit(-1); } if (N % 2 != 1) { fprintf(stderr,"size, %d, should be an odd number\n", N); exit(-1); } } i++; } float x[] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0}; float y[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; float *coords[2] = {x, y}; dbfile = DBCreate("lineout_test.silo", DB_CLOBBER, DB_LOCAL, "2D grid with stair-step and linear fields", driver); char *coordnames[2]; coordnames[0] = "xcoords"; coordnames[1] = "ycoords"; int zonelist[] = {0,1,7,6, 1,2,8,7, 2,3,9,8, 3,4,10,9, 4,5,11,10}; int zshapetype = DB_ZONETYPE_QUAD; int zshapesize = 4; int zshapecnt = 5; DBPutZonelist2(dbfile, "zl2d", 5, 2, zonelist, sizeof(zonelist)/sizeof(zonelist[0]), 0, 0, 0, &zshapetype, &zshapesize, &zshapecnt, 1, NULL); DBPutUcdmesh(dbfile, "mesh", 2, coordnames, coords, 12, 5, "zl2d", NULL, DB_FLOAT, NULL); float zc_var[] = {0.5, 1.5, 2.5, 3.5, 4.5}; DBPutUcdvar1(dbfile, "zonal_var", "mesh", zc_var, 5, NULL, 0, DB_FLOAT, DB_ZONECENT, NULL); float nc_var[] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0}; DBPutUcdvar1(dbfile, "nodal_var", "mesh", nc_var, 12, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); float x1[] = {-1.5, -.5, 0.5, 1.5, -1.5, -.5, 0.5, 1.5, -1.5, -.5, 0.5, 1.5, -1.5, -.5, 0.5, 1.5}; float y1[] = {-1.5, -1.5, -1.5, -1.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 1.5, 1.5, 1.5, 1.5}; int zonelist2[] = {0,1,5,4, 1,2,6,5, 2,3,7,6, 4,5,9,8, 5,6,10,9, 6,7,11,10, 8,9,13,12, 9,10,14,13,10,11,15,14}; zshapecnt = 9; DBPutZonelist2(dbfile, "zl2d2", 9, 2, zonelist2, sizeof(zonelist2)/sizeof(zonelist2[0]), 0, 0, 0, &zshapetype, &zshapesize, &zshapecnt, 1, NULL); coords[0] = x1; coords[1] = y1; DBPutUcdmesh(dbfile, "mesh2", 2, coordnames, coords, 16, 9, "zl2d2", NULL, DB_FLOAT, NULL); float zc_var2[] = {1.5, 0, -1.5, 0, 0, 0, -1.5, 0, 1.5}; DBPutUcdvar1(dbfile, "zonal_var2", "mesh2", zc_var2, 9, NULL, 0, DB_FLOAT, DB_ZONECENT, NULL); // This is designed to yield a perfect quadratic along the diagonal // y=x and y=-x lineouts such that value of nc_var2 is equal to distance // from origin (0,0), squared. A resulting lineout *should* look like a // perfect quadratic curve. float a = (1.5*1.5 + 1.5*1.5); float b = (0.5*0.5 + 1.5*1.5); float c = (0.5*0.5 + 0.5*0.5); float nc_var2[] = {-a, -b, b, a, -b, -c, c, b, b, c, -c, -b, a, b, -b, -a}; DBPutUcdvar1(dbfile, "nodal_var2", "mesh2", nc_var2, 16, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); DBClose(dbfile); }
int main(int argc, char *argv[]) { int nerrors = 0; int i, j, ndims=1; int driver=DB_HDF5; char *filename="largefile.h5"; DBfile *dbfile; /* Parse command-line */ for (i=1; i<argc; i++) { if (!strcmp(argv[i], "DB_PDB")) { fprintf(stderr, "This test only supported on HDF5 driver\n"); exit(1); } else if (!strcmp(argv[i], "DB_HDF5")) { driver = DB_HDF5; filename = "largefile.h5"; } else { fprintf(stderr, "%s: ignored argument '%s'\n", argv[0], argv[i]); } } DBShowErrors(DB_TOP, NULL); DBForceSingle(1); /* * Create a file that contains a simple variables. */ printf("Creating file: '%s'\n", filename); dbfile = DBCreate(filename, 0, DB_LOCAL, "Simple Test", driver); for (j = 0; j < 2500; j++) { char tmpname[64]; if (j % 100 == 0) printf("Iterations %04d to %04d of %04d\n", j, j+100-1, 2500); sprintf(tmpname, "simple_%04d", j); for (i = 0; i < dims[0]; i++) val[i] = (float) dims[0] * j + i; if (DBWrite(dbfile, tmpname, val, dims, ndims, DB_FLOAT) != 0) { DBClose(dbfile); exit(1); } } /* * Put some objects VisIt can process at the end of the file */ build_curve(dbfile, driver); DBClose(dbfile); /* * Now try opening the file again and reading the simple * variable. */ printf("Reopening '%s'\n", filename); dbfile = DBOpen(filename, driver, DB_READ); if (dbfile == 0) { printf("Unable to Reopen file for reading\n"); exit(1); } /* * Randomly examine 50 arrays from the first and last 500 */ srand(0xBabeFace); for (j = 0; j < 100; j++) { char tmpname[64]; int n = rand() % 500 + (j >= 50 ? 200 : 0); sprintf(tmpname, "simple_%04d", n); if (DBReadVar(dbfile, tmpname, rval) < 0) { nerrors++; if (nerrors < 10) printf("DBReadVar for \"%s\" failed\n", tmpname); if (nerrors == 10) printf("Further errors will be suppressed\n"); } for (i = 0; i < dims[0]; i++) { val[i] = (float) dims[0] * n + i; if (val[i] != rval[i]) { nerrors++; if (nerrors < 10) printf("Read error in \"%s\" at position %04d. Expected %f, got %f\n", tmpname, i, val[i], rval[i]); if (nerrors == 10) printf("Further errors will be suppressed\n"); break; } } } DBClose(dbfile); exit(nerrors > 0); }
int main(int argc, char *argv[]) { int driver = DB_PDB; char *filename = "empty.silo"; int show_all_errors = FALSE; int i, pass; char const * const cnames[3] = {"x","y","z"}; void *coords[3] = {(void*)1,(void*)2,(void*)3}; /* really funky dummy pointers */ void *vars[3] = {(void*)1,(void*)2,(void*)3}; /* really funky dummy pointers */ void const * const vvars[3] = {(void*)1,(void*)2,(void*)3}; /* really funky dummy pointers */ void *var = (void*)1; int iarr[3] = {1,1,1}; /* dummy int array */ int ZDIMS[3] = {0,0,0}; double exts[4] = {0,0,0,0}; DBoptlist *ol = 0; double dtime = 0.0; int hide_from_gui=0; int *gnodeno = 0; int *gzoneno = 0; char *ghostn = 0; char *ghostz = 0; /* Parse command-line */ for (i=1; i<argc; i++) { if (!strncmp(argv[i], "DB_", 3)) { driver = StringToDriver(argv[i]); } else if (!strcmp(argv[i], "show-all-errors")) { show_all_errors = 1; } else if (argv[i][0] != '\0') { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } DBSetDeprecateWarnings(0); DBShowErrors(show_all_errors?DB_ALL_AND_DRVR:DB_NONE, NULL); printf("Creating test file \"%s\".\n", filename); dbfile = DBCreate(filename, DB_CLOBBER, DB_LOCAL, "test empty silo objects", driver); ol = DBMakeOptlist(10); DBAddOption(ol, DBOPT_DTIME, &dtime); DBAddOption(ol, DBOPT_HIDE_FROM_GUI, &hide_from_gui); DBAddOption(ol, DBOPT_NODENUM, gnodeno); DBAddOption(ol, DBOPT_ZONENUM, gzoneno); DBAddOption(ol, DBOPT_GHOST_NODE_LABELS, ghostn); DBAddOption(ol, DBOPT_GHOST_ZONE_LABELS, ghostz); /* first pass confirms we catch bad arguments; second pass confirms we permit empty objects */ for (pass = 0; pass < 2; pass++) { const int dt = DB_FLOAT; const int ct = DB_ZONECENT; const int ZZ = 0; /* Used for sole arg causing emptiness */ if (pass) DBSetAllowEmptyObjects(1); /* Because references to the following objects will not ever appear in a multi-xxx object, we do not currently test for support of empties... DBPutUcdsubmesh, DBPutMrgtree, DBPutMrgvar, DBPutGroupelmap Note: 'ZZ' or 'ZDIMS' is the key argument in each call that triggers an empty */ /* empty curve objects */ ASSERT(DBPutCurve(dbfile,"empty_curvea",coords[0],coords[0],dt,ZZ,OL(ol)),retval<0,retval==0); ASSERT(DBPutCurve(dbfile,"empty_curveb", 0,coords[0],dt,ZZ,OL(ol)),retval<0,retval==0); ASSERT(DBPutCurve(dbfile,"empty_curvec",coords[0], 0,dt,ZZ,OL(ol)),retval<0,retval==0); /* empty point meshes and vars */ ASSERT(DBPutPointmesh(dbfile,"empty_pointmesha",1,coords,ZZ,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutPointmesh(dbfile,"empty_pointmeshb",3, 0,ZZ,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutPointvar(dbfile,"pva","empty_pointmesha",1,vars,ZZ,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutPointvar(dbfile,"pvb","empty_pointmesha",3, 0,ZZ,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutPointvar1(dbfile,"pv1a","empty_pointmesha",var,ZZ,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutPointvar1(dbfile,"pv1b","empty_pointmesha", 0,ZZ,dt,OL(ol)),retval<0,retval==0); /* empty quad meshes and vars (ZDIMS is the magic zero'ing arg) */ ASSERT(DBPutQuadmesh(dbfile,"empty_quadmesha", 0,coords,ZDIMS,1,dt,DB_COLLINEAR,OL(ol)),retval<0,retval==0); ASSERT(DBPutQuadmesh(dbfile,"empty_quadmeshb",cnames, 0,ZDIMS,2,dt,DB_COLLINEAR,OL(ol)),retval<0,retval==0); ASSERT(DBPutQuadmesh(dbfile,"empty_quadmeshc",cnames,coords,ZDIMS,3,dt,DB_COLLINEAR,OL(ol)),retval<0,retval==0); ASSERT(DBPutQuadvar(dbfile,"qva","empty_quadmesha",2, 0,vars,ZDIMS,2,0,0,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutQuadvar(dbfile,"qvb","empty_quadmesha",3,cnames, 0,ZDIMS,3,0,0,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutQuadvar1(dbfile,"qv1a","empty_quadmesha", 0,ZDIMS,ZZ,var,0,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutQuadvar1(dbfile,"qv1b","empty_quadmesha",var,ZDIMS,ZZ, 0,0,dt,ct,OL(ol)),retval<0,retval==0); /* empty ucd meshes, facelists, zonelists and vars */ ASSERT(DBPutUcdmesh(dbfile,"empty_ucdmesh1",3,cnames,coords,ZZ,1,"foo","bar",dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdmesh(dbfile,"empty_ucdmesh2",1, 0,coords,ZZ,1,"foo","bar",dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdmesh(dbfile,"empty_ucdmesh3",2,cnames, 0,ZZ,0,"foo","bar",dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdmesh(dbfile,"empty_ucdmesh3",0, 0, 0,ZZ,0, 0, 0,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutFacelist(dbfile,"empty_facelista",ZZ,0,iarr,1,1,iarr,iarr,iarr,1,iarr,iarr,1),retval<0,retval==0); ASSERT(DBPutFacelist(dbfile,"empty_facelistb",ZZ,0, 0,1,1,iarr,iarr,iarr,1,iarr,iarr,1),retval<0,retval==0); ASSERT(DBPutFacelist(dbfile,"empty_facelistc",ZZ,0,iarr,1,1, 0,iarr,iarr,1,iarr,iarr,1),retval<0,retval==0); ASSERT(DBPutFacelist(dbfile,"empty_facelistd",ZZ,0,iarr,1,1,iarr, 0,iarr,1,iarr,iarr,1),retval<0,retval==0); ASSERT(DBPutFacelist(dbfile,"empty_faceliste",ZZ,0,iarr,1,1,iarr,iarr, 0,1,iarr,iarr,1),retval<0,retval==0); ASSERT(DBPutFacelist(dbfile,"empty_facelistf",ZZ,0,iarr,1,1,iarr,iarr,iarr,1, 0,iarr,1),retval<0,retval==0); ASSERT(DBPutFacelist(dbfile,"empty_facelistg",ZZ,0,iarr,1,1,iarr,iarr,iarr,1,iarr, 0,1),retval<0,retval==0); ASSERT(DBPutZonelist(dbfile,"empty_zonelista",ZZ,1,iarr,10,0,iarr,iarr,10),retval<0,retval==0); ASSERT(DBPutZonelist(dbfile,"empty_zonelistb",ZZ,1, 0,10,0,iarr,iarr,10),retval<0,retval==0); ASSERT(DBPutZonelist(dbfile,"empty_zonelistc",ZZ,1,iarr,10,0, 0,iarr,10),retval<0,retval==0); ASSERT(DBPutZonelist(dbfile,"empty_zonelistd",ZZ,1,iarr,10,0,iarr, 0,10),retval<0,retval==0); ASSERT(DBPutZonelist2(dbfile,"empty_zonelist2a",ZZ,1,iarr,1,0,0,0,iarr,iarr,iarr,1,OL(ol)),retval<0,retval==0); ASSERT(DBPutZonelist2(dbfile,"empty_zonelist2b",ZZ,0, 0,1,3,3,3,iarr,iarr,iarr,1,OL(ol)),retval<0,retval==0); ASSERT(DBPutZonelist2(dbfile,"empty_zonelist2c",ZZ,1,iarr,0,3,3,3, 0,iarr,iarr,1,OL(ol)),retval<0,retval==0); ASSERT(DBPutZonelist2(dbfile,"empty_zonelist2d",ZZ,1,iarr,1,0,3,0,iarr, 0,iarr,0,OL(ol)),retval<0,retval==0); ASSERT(DBPutZonelist2(dbfile,"empty_zonelist2e",ZZ,1,iarr,1,3,0,0,iarr,iarr, 0,1,OL(ol)),retval<0,retval==0); ASSERT(DBPutPHZonelist(dbfile,"empty_phzonelista",ZZ,iarr,1,iarr,cnames[0],1,iarr,1,iarr,0,0,0,OL(ol)),retval<0,retval==0); ASSERT(DBPutPHZonelist(dbfile,"empty_phzonelistb",ZZ, 0,1,iarr,cnames[0],1,iarr,1,iarr,0,0,0,OL(ol)),retval<0,retval==0); ASSERT(DBPutPHZonelist(dbfile,"empty_phzonelistc",ZZ,iarr,1, 0,cnames[0],1,iarr,1,iarr,0,0,0,OL(ol)),retval<0,retval==0); ASSERT(DBPutPHZonelist(dbfile,"empty_phzonelistd",ZZ,iarr,1,iarr, 0,1,iarr,1,iarr,0,0,0,OL(ol)),retval<0,retval==0); ASSERT(DBPutPHZonelist(dbfile,"empty_phzoneliste",ZZ,iarr,1,iarr,cnames[0],1, 0,1,iarr,0,0,0,OL(ol)),retval<0,retval==0); ASSERT(DBPutPHZonelist(dbfile,"empty_phzonelistf",ZZ,iarr,1,iarr,cnames[0],1,iarr,1, 0,0,0,0,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar(dbfile,"uva","empty_ucdmesh1",0,cnames,vars,ZZ,vars,1,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar(dbfile,"uvb","empty_ucdmesh1",1, 0,vars,ZZ,vars,1,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar(dbfile,"uvc","empty_ucdmesh1",2,cnames, 0,ZZ,vars,1,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar(dbfile,"uvd","empty_ucdmesh1",3,cnames,vars,ZZ, 0,1,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar(dbfile,"uve","empty_ucdmesh1",3, 0, 0,ZZ, 0,1,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar1(dbfile,"uv1a","empty_ucdmesh1",var,ZZ,vars[0],1,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar1(dbfile,"uv1b","empty_ucdmesh1", 0,ZZ,vars[0],1,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar1(dbfile,"uv1c","empty_ucdmesh1",var,ZZ, 0,1,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutUcdvar1(dbfile,"uv1d","empty_ucdmesh1", 0,ZZ, 0,1,dt,ct,OL(ol)),retval<0,retval==0); /* csg meshes and vars */ ASSERT(DBPutCsgmesh(dbfile,"empty_csgmesh1",2,ZZ, 0,iarr,var,1,dt,exts,"foo",OL(ol)),retval<0,retval==0); ASSERT(DBPutCsgmesh(dbfile,"empty_csgmesh2",2,ZZ,iarr, 0,var,2,dt,exts,"foo",OL(ol)),retval<0,retval==0); ASSERT(DBPutCsgmesh(dbfile,"empty_csgmesh3",3,ZZ,iarr,iarr, 0,3,dt,exts,"foo",OL(ol)),retval<0,retval==0); ASSERT(DBPutCsgmesh(dbfile,"empty_csgmesh4",3,ZZ,iarr,iarr,var,0,dt,exts,"foo",OL(ol)),retval<0,retval==0); ASSERT(DBPutCSGZonelist(dbfile,"empty_csgzonelista",0,iarr,iarr,iarr,0,0,dt,ZZ,iarr,OL(ol)),retval<0,retval==0); ASSERT(DBPutCSGZonelist(dbfile,"empty_csgzonelistb",1, 0,iarr,iarr,0,0,dt,ZZ,iarr,OL(ol)),retval<0,retval==0); ASSERT(DBPutCSGZonelist(dbfile,"empty_csgzonelistc",1,iarr, 0,iarr,0,0,dt,ZZ,iarr,OL(ol)),retval<0,retval==0); ASSERT(DBPutCSGZonelist(dbfile,"empty_csgzonelistd",1,iarr,iarr, 0,0,0,dt,ZZ,iarr,OL(ol)),retval<0,retval==0); ASSERT(DBPutCSGZonelist(dbfile,"empty_csgzoneliste",1,iarr,iarr,iarr,0,0,dt,ZZ, 0,OL(ol)),retval<0,retval==0); ASSERT(DBPutCsgvar(dbfile,"csgva","empty_csgmesh1",0,cnames,vvars,ZZ,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutCsgvar(dbfile,"csgvb","empty_csgmesh1",1, 0,vvars,ZZ,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutCsgvar(dbfile,"csgvc","empty_csgmesh1",1,cnames, 0, ZZ,dt,ct,OL(ol)),retval<0,retval==0); ASSERT(DBPutCsgvar(dbfile,"csgvd","empty_csgmesh1",1,cnames,vvars,ZZ,dt,ct,OL(ol)),retval<0,retval==0); /* empty materials and species */ ASSERT(DBPutMaterial(dbfile,"empty_mata","foo",1,iarr,iarr,ZDIMS,1,iarr,iarr,iarr,vars[0],1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMaterial(dbfile,"empty_matb","foo",1, 0,iarr,ZDIMS,1,iarr,iarr,iarr,vars[0],1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMaterial(dbfile,"empty_matc","foo",1,iarr, 0,ZDIMS,1,iarr,iarr,iarr,vars[0],1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMaterial(dbfile,"empty_matd","foo",1,iarr,iarr,ZDIMS,1, 0,iarr,iarr,vars[0],1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMaterial(dbfile,"empty_mate","foo",1,iarr,iarr,ZDIMS,1,iarr, 0,iarr,vars[0],1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMaterial(dbfile,"empty_matf","foo",1,iarr,iarr,ZDIMS,1,iarr,iarr, 0,vars[0],1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMaterial(dbfile,"empty_matg","foo",1,iarr,iarr,ZDIMS,1,iarr,iarr,iarr, 0,1,dt,OL(ol)),retval<0,retval==0); /* empty matspecies via dims[i] == 0 */ ASSERT(DBPutMatspecies(dbfile,"empty_speca","empty_mata",1,iarr,iarr,ZDIMS,1,1,var,iarr,1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMatspecies(dbfile,"empty_specb","empty_mata",1,iarr,iarr,ZDIMS,2,1,var,iarr,1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMatspecies(dbfile,"empty_specc","empty_mata",1,iarr,iarr,ZDIMS,3,1,var,iarr,1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMatspecies(dbfile,"empty_specd","empty_mata",1,iarr,iarr,ZDIMS,1,1, 0,iarr,1,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMatspecies(dbfile,"empty_spece","empty_mata",1,iarr,iarr,ZDIMS,1,1,var, 0,0,dt,OL(ol)),retval<0,retval==0); /* empty matspeces via nspecies_mf==0 */ { int nd=2, d[2]={3,2}, slm[6]={0,0,-1,-3,0,0}, ml=4, msl[4]={1,2,1,2}, slc[6]={0,0,0,0,0,0}; ASSERT(DBPutMatspecies(dbfile,"empty_specf","empty_mata",1,iarr,slc,d,nd,ZZ,var, 0, 0,dt,OL(ol)),retval<0,retval==0); ASSERT(DBPutMatspecies(dbfile,"empty_specg","empty_mata",1,iarr,slm,d,nd,ZZ,var,msl,ml,dt,OL(ol)),retval<0,retval==0); } } DBClose(dbfile); dbfile = 0; /* Ok, now try to read each empty object to make sure we get what we expect and nothing fails */ dbfile = DBOpen(filename, DB_UNKNOWN, DB_READ); /* test read back of empty curves */ { int i=0; char *cnames[] = {"empty_curvea", "empty_curveb", "empty_curvec", 0}; DBSetDir(dbfile, "DBPutCurve"); while (cnames[i]) { DBcurve *curve = DBGetCurve(dbfile, cnames[i++]); assert(DBIsEmptyCurve(curve)); DBFreeCurve(curve); } DBSetDir(dbfile, ".."); } /* test read back of empty point meshes and vars */ { int i=0; char *pmnames[] = {"empty_pointmesha", "empty_pointmeshb", 0}; DBSetDir(dbfile, "DBPutPointmesh"); while (pmnames[i]) { DBpointmesh *pointmesh = DBGetPointmesh(dbfile, pmnames[i++]); assert(DBIsEmptyPointmesh(pointmesh)); DBFreePointmesh(pointmesh); } DBSetDir(dbfile, ".."); } { int i=0; char *vnames[] = {"pva", "pvb", "pv1a", "pv1b", 0}; DBSetDir(dbfile, "DBPutPointvar"); while (vnames[i]) { DBpointvar *pointvar = DBGetPointvar(dbfile, vnames[i++]); assert(DBIsEmptyPointvar(pointvar)); DBFreePointvar(pointvar); } DBSetDir(dbfile, ".."); } /* test read back of empty quad meshes and vars */ { int i=0; char *qmnames[] = {"empty_quadmesha", "empty_quadmeshb", "empty_quadmeshc", 0}; DBSetDir(dbfile, "DBPutQuadmesh"); while (qmnames[i]) { DBquadmesh *quadmesh = DBGetQuadmesh(dbfile, qmnames[i++]); assert(DBIsEmptyQuadmesh(quadmesh)); DBFreeQuadmesh(quadmesh); } DBSetDir(dbfile, ".."); } { int i=0; char *vnames[] = {"qva" , "qvb", "qv1a", "qv1b", 0}; DBSetDir(dbfile, "DBPutQuadvar"); while (vnames[i]) { DBquadvar *quadvar = DBGetQuadvar(dbfile, vnames[i++]); assert(DBIsEmptyQuadvar(quadvar)); DBFreeQuadvar(quadvar); } DBSetDir(dbfile, ".."); } /* test read back of empty ucd meshes, zonelists and vars */ { int i=0; char *mnames[] = {"empty_ucdmesh1", "empty_ucdmesh2", "empty_ucdmesh3", 0}; DBSetDir(dbfile, "DBPutUcdmesh"); while (mnames[i]) { DBucdmesh *ucdmesh = DBGetUcdmesh(dbfile, mnames[i++]); assert(DBIsEmptyUcdmesh(ucdmesh)); DBFreeUcdmesh(ucdmesh); } DBSetDir(dbfile, ".."); } { int i=0; char *flnames[] = {"empty_facelista", "empty_facelistb", "empty_facelistc", "empty_facelistd", "empty_faceliste", "empty_facelistf", "empty_facelistg", 0}; DBSetDir(dbfile, "DBPutFacelist"); while (flnames[i]) { DBfacelist *fl = DBGetFacelist(dbfile, flnames[i++]); assert(DBIsEmptyFacelist(fl)); DBFreeFacelist(fl); } DBSetDir(dbfile, ".."); } { int i=0; char *zlnames[] = {"empty_zonelista", "empty_zonelistb", "empty_zonelistc", "empty_zonelistd", "empty_zonelist2a", "empty_zonelist2b", "empty_zonelist2c", "empty_zonelist2d", "empty_zonelist2e", 0}; DBSetDir(dbfile, "DBPutZonelist"); while (zlnames[i]) { DBzonelist *zl = DBGetZonelist(dbfile, zlnames[i++]); assert(DBIsEmptyZonelist(zl)); DBFreeZonelist(zl); } DBSetDir(dbfile, ".."); } { int i=0; char *zlnames[] = {"empty_phzonelista", "empty_phzonelistb", "empty_phzonelistc", "empty_phzonelistd", "empty_phzoneliste", "empty_phzonelistf", 0}; DBSetDir(dbfile, "DBPutPHZonelist"); while (zlnames[i]) { DBphzonelist *zl = DBGetPHZonelist(dbfile, zlnames[i++]); assert(DBIsEmptyPHZonelist(zl)); DBFreePHZonelist(zl); } DBSetDir(dbfile, ".."); } { int i=0; char *vnames[] = { "uva", "uvb", "uvc", "uvd", "uve", "uv1a", "uv1b", "uv1c", "uv1d", 0}; DBSetDir(dbfile, "DBPutUcdvar"); while (vnames[i]) { DBucdvar *ucdvar = DBGetUcdvar(dbfile, vnames[i++]); assert(DBIsEmptyUcdvar(ucdvar)); DBFreeUcdvar(ucdvar); } DBSetDir(dbfile, ".."); } /* test read back of empty csg meshes and vars */ { int i=0; char *mnames[] = {"empty_csgmesh1", "empty_csgmesh2", "empty_csgmesh3", 0}; DBSetDir(dbfile, "DBPutCsgmesh"); while (mnames[i]) { DBcsgmesh *csgmesh = DBGetCsgmesh(dbfile, mnames[i++]); assert(DBIsEmptyCsgmesh(csgmesh)); DBFreeCsgmesh(csgmesh); } DBSetDir(dbfile, ".."); } { int i=0; char *zlnames[] = {"empty_csgzonelista", "empty_csgzonelistb", "empty_csgzonelistc", "empty_csgzonelistd", "empty_csgzoneliste", 0}; DBSetDir(dbfile, "DBPutCSGZonelist"); while (zlnames[i]) { DBcsgzonelist *zl = DBGetCSGZonelist(dbfile, zlnames[i++]); assert(DBIsEmptyCSGZonelist(zl)); DBFreeCSGZonelist(zl); } DBSetDir(dbfile, ".."); } { int i=0; char *vnames[] = {"csgva", "csgvb", "csgvc", "csgvd", 0}; DBSetDir(dbfile, "DBPutCsgvar"); while (vnames[i]) { DBcsgvar *csgvar = DBGetCsgvar(dbfile, vnames[i++]); assert(DBIsEmptyCsgvar(csgvar)); DBFreeCsgvar(csgvar); } DBSetDir(dbfile, ".."); } /* test read back of empty materials and matspecies */ { int i=0; char *vnames[] = {"empty_mata", "empty_matb", "empty_matc", "empty_matd", "empty_mate", "empty_matf", "empty_matg", 0}; DBSetDir(dbfile, "DBPutMaterial"); while (vnames[i]) { DBmaterial *mat = DBGetMaterial(dbfile, vnames[i++]); assert(DBIsEmptyMaterial(mat)); DBFreeMaterial(mat); } DBSetDir(dbfile, ".."); } { int i=0; char *vnames[] = {"empty_speca", "empty_specb", "empty_specc", "empty_specd", "empty_spece", "empty_specf", "empty_specg", 0}; DBSetDir(dbfile, "DBPutMatspecies"); while (vnames[i]) { DBmatspecies *spec = DBGetMatspecies(dbfile, vnames[i++]); assert(DBIsEmptyMatspecies(spec)); DBFreeMatspecies(spec); } DBSetDir(dbfile, ".."); } DBClose(dbfile); CleanupDriverStuff(); return 0; }
/*---------------------------------------------------------------------------- *---------------------------------------------------------------------------- * Main Program *---------------------------------------------------------------------------- *---------------------------------------------------------------------------- * Modifications: * Robb Matzke, 1999-04-09 * Added argument parsing to control the driver which is used. * *---------------------------------------------------------------------------*/ int main(int argc, char *argv[]) { int x,y; int m,s; int err, mixc; int i, driver=DB_PDB, reorder=0; char filename[64], *file_ext=".pdb"; int show_all_errors = FALSE; DBfile *db; /* Parse command-line */ for (i=1; i<argc; i++) { if (!strncmp(argv[i], "DB_PDB", 6)) { driver = StringToDriver(argv[i]); file_ext = ".pdb"; } else if (!strncmp(argv[i], "DB_HDF5", 7)) { driver = StringToDriver(argv[i]); file_ext = ".h5"; } else if (!strcmp(argv[i], "reorder")) { reorder = 1; } else if (!strcmp(argv[i], "show-all-errors")) { show_all_errors = 1; } else if (!strcmp(argv[i], "difftol")) { difftol = strtod(argv[i+1], 0); i++; } else if (argv[i][0] != '\0') { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } if (show_all_errors) DBShowErrors(DB_ALL_AND_DRVR, 0); Mesh_Create(&mesh,20,20); /* -=-=-=-=-=-=-=-=-=- */ /* Setup Coordinates */ /* -=-=-=-=-=-=-=-=-=- */ printf("Creating the mesh\n"); for (x=0;x<mesh.nx;x++) { for (y=0;y<mesh.ny;y++) { float xx = (x-10); float yy = ((xx-8.5)*xx*(xx+8.5))/40. + (y-10); mesh.node[x][y].x = xx*2+(yy*yy/50 - 3); mesh.node[x][y].y = yy; } } /* -=-=-=-=-=-=-=-=-=- */ /* Do Mesh Variables */ /* -=-=-=-=-=-=-=-=-=- */ printf("Creating the variables\n"); /* do zone vars */ for (x=0;x<mesh.zx;x++) { for (y=0;y<mesh.zy;y++) { mesh.zone[x][y].vars[ZV_P] = sqrt((mesh.node[x][y].x*mesh.node[x][y].x) + (mesh.node[x][y].y*mesh.node[x][y].y)); mesh.zone[x][y].vars[ZV_D] = 10. / (mesh.zone[x][y].vars[ZV_P]+5); } } /* do node vars */ for (x=0;x<mesh.nx;x++) { for (y=0;y<mesh.ny;y++) { mesh.node[x][y].vars[NV_U] = mesh.node[x][y].x; mesh.node[x][y].vars[NV_V] = mesh.node[x][y].y; } } /* -=-=-=-=-=-=-=-=-=- */ /* Do Materials */ /* -=-=-=-=-=-=-=-=-=- */ printf("Overlaying materials\n"); /* initialize */ for (x=0;x<mesh.zx;x++) { for (y=0;y<mesh.zy;y++) { mesh.zone[x][y].nmats=0; } } /* do it */ for (m=1; m<=nmat; m++) { for (x=0;x<mesh.zx;x++) { for (y=0;y<mesh.zy;y++) { float x00=mesh.zone[x][y].n[0][0]->x; float y00=mesh.zone[x][y].n[0][0]->y; float x10=mesh.zone[x][y].n[1][0]->x; float y10=mesh.zone[x][y].n[1][0]->y; float x01=mesh.zone[x][y].n[0][1]->x; float y01=mesh.zone[x][y].n[0][1]->y; float x11=mesh.zone[x][y].n[1][1]->x; float y11=mesh.zone[x][y].n[1][1]->y; int i,j; int c=0; float vf=0.; double vfd=0.; const int RES=40; /* subsampling resolution */ /* Subsample the zone at RESxRES to * * get a more accurate volume fraction */ for (i=0;i<=RES;i++) { for (j=0;j<=RES;j++) { float ii=(float)i/(float)RES; float jj=(float)j/(float)RES; float xc = (x00*ii + x10*(1.-ii))*jj + (x01*ii + x11*(1.-ii))*(1.-jj); float yc = (y00*ii + y10*(1.-ii))*jj + (y01*ii + y11*(1.-ii))*(1.-jj); switch (m) { case 1: if (xc>-15 && yc>2) vf++; break; case 2: if (xc>-15 && yc<=2 && xc-5>yc) vf++; break; case 3: if (xc>-15 && yc<=2 && xc-5<=yc) vf++; break; case 4: if (xc<= -15) vf++; break; default: break; } c++; } } vfd = vf; vf /= (float)c; vfd /= (double)c; mesh.zone[x][y].matvf[m]=vf; mesh.zone[x][y].matvfd[m]=vfd; if (vf) mesh.zone[x][y].nmats++; } } } /* check for errors in mat-assigning code! */ err=0; for (x=0;x<mesh.zx;x++) { for (y=0;y<mesh.zy;y++) { float vf=0; for (m=1; m<=nmat; m++) { vf += mesh.zone[x][y].matvf[m]; } if (vf<.99 || vf>1.01) { printf("Error in zone x=%d y=%d: vf = %f\n",x,y,vf); err++; } } } if (err) exit(err); /* -=-=-=-=-=-=-=-=-=- */ /* do species stuff! */ /* -=-=-=-=-=-=-=-=-=- */ printf("Overlaying material species\n"); err=0; for (m=1;m<=nmat;m++) { for (x=0;x<mesh.zx;x++) { for (y=0;y<mesh.zy;y++) { if (mesh.zone[x][y].matvf[m]>0.) { float mftot=0.; for (s=0; s<nspec[m-1]; s++) { float x00=mesh.zone[x][y].n[0][0]->x; float y00=mesh.zone[x][y].n[0][0]->y; float x10=mesh.zone[x][y].n[1][0]->x; float y10=mesh.zone[x][y].n[1][0]->y; float x01=mesh.zone[x][y].n[0][1]->x; float y01=mesh.zone[x][y].n[0][1]->y; float x11=mesh.zone[x][y].n[1][1]->x; float y11=mesh.zone[x][y].n[1][1]->y; float xx=(x00+x10+x01+x11)/4.; float yy=(y00+y10+y01+y11)/4.; double xxd=(x00+x10+x01+x11)/4.; double yyd=(y00+y10+y01+y11)/4.; float mf=0.; double mfd=0.; float g,g1,g2; /* gradient values */ double gd,g1d,g2d; /* gradient values */ switch (m) { case 1: g=lim01((xx+20.)/40.); gd=lim01((xxd+20.)/40.); switch (s) { case 0: mf=g; mfd=gd; break; case 1: mf=1.-g; mfd=1.-gd; break; default: exit(-1); } break; case 2: g=lim01((yy+20.)/40.); gd=lim01((yyd+20.)/40.); switch (s) { case 0: mf=.2+g/2.; mfd=.2+gd/2.; break; case 1: mf=.5-g/2.; mfd=.5-gd/2.; break; case 2: mf=.2; mfd=.2; break; case 3: mf=.1; mfd=.1; break; default: exit(-1); } break; case 3: g1=lim01((xx-5+yy+40.)/80.); g2=lim01((xx-5-yy+40.)/80.); g1d=lim01((xxd-5+yyd+40.)/80.); g2d=lim01((xxd-5-yyd+40.)/80.); switch (s) { case 0: mf=g1/2.; mfd=g1d/2.; break; case 1: mf=g2/4.; mfd=g2d/4.; break; case 2: mf=.5-g1/2.; mfd=.5-g1d/2.; break; case 3: mf=.25-g2/4.; mfd=.25-g2d/4.; break; case 4: mf=.25; mfd=.25; break; default: exit(-1); } break; case 4: switch (s) { case 0: mf=1.0; mfd=1.0; break; default: exit(-1); } break; default: exit(-1); break; } mesh.zone[x][y].specmf[m][s] = mf; mesh.zone[x][y].specmfd[m][s] = mfd; mftot += mf; } if (mftot < .99 || mftot > 1.01) { printf("Error in zone x=%d y=%d mat=%d: mf = %f\n",x,y,m,mftot); err++; } } } } } if (err) exit(err); /* -=-=-=-=-=-=-=-=-=- */ /* write to silo files */ /* -=-=-=-=-=-=-=-=-=- */ sprintf(filename, "specmix_quad%s", file_ext); printf("Writing %s using curvilinear mesh.\n", filename); db=DBCreate(filename, DB_CLOBBER, DB_LOCAL, "Mixed zone species test", driver); mixc=domatspec(db, doWrite, 0); writemesh_curv2d(db,mixc,reorder); DBClose(db); sprintf(filename, "specmix_ucd%s", file_ext); printf("Writing %s using unstructured mesh.\n", filename); db=DBCreate(filename, DB_CLOBBER, DB_LOCAL, "Mixed zone species test", driver); mixc=domatspec(db, doWrite, 0); writemesh_ucd2d(db,mixc,reorder); DBClose(db); /* Test read-back of species */ printf("Reading %s with Force Single off.\n", filename); db=DBOpen(filename, driver, DB_READ); domatspec(db, doReadAndCheck, 0); DBClose(db); printf("Reading %s with Force Single ON.\n", filename); DBForceSingle(1); db=DBOpen(filename, driver, DB_READ); domatspec(db, doReadAndCheck, 1); DBClose(db); printf("Done!\n"); for (x=0;x<mesh.nx;x++) free(mesh.node[x]); free(mesh.node); for (x=0;x<mesh.zx;x++) free(mesh.zone[x]); free(mesh.zone); CleanupDriverStuff(); return 0; }
int main(int argc, char *argv[]) { DBfile *dbfile; DBmultimeshadj *foo; int i, driver = DB_PDB; char *filename = "adjacency.pdb"; DBShowErrors(DB_ALL, NULL); for (i=1; i<argc; i++) { if (!strcmp(argv[i], "DB_PDB")) { driver = DB_PDB; filename = "adjacency.pdb"; } else if (!strcmp(argv[i], "DB_HDF5")) { driver = DB_HDF5; filename = "adjacency.h5"; } else { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } printf("Creating test file: \"%s\".\n", filename); dbfile = DBCreate(filename, 0, DB_LOCAL, "multi-mesh adjacency test file", driver); /* this is a really basic test of DBPutMultimeshadj. It tests only that the API behaves as expected, not the contents of the object */ { int meshtypes[] = {DB_UCDMESH, DB_UCDMESH, DB_UCDMESH, DB_UCDMESH, DB_UCDMESH}; int nneighbors[] = {3, 3, 3, 3, 4}; int neighbors[] = {1,3,4, 0,2,4, 1,3,4, 0,2,4, 0,1,2,3}; int lnodelists[] = {3,3,3, 3,3,3, 3,3,3, 3,3,3, 3,3,3,3}; /* note, we're using global indexing here. Its just a test. */ static int nodelistA[] = {4,13,22}; /* 0 & 1 */ static int nodelistB[] = {35,36,37}; /* 0 & 3 */ static int nodelistC[] = {22,30,37}; /* 0 & 4 */ static int nodelistD[] = {4,13,22}; /* 1 & 0 */ static int nodelistE[] = {41,42,43}; /* 1 & 2 */ static int nodelistF[] = {22,31,41}; /* 1 & 4 */ static int nodelistG[] = {41,42,43}; /* 2 & 1 */ static int nodelistH[] = {56,65,74}; /* 2 & 3 */ static int nodelistI[] = {41,48,56}; /* 2 & 4 */ static int nodelistJ[] = {35,36,37}; /* 3 & 0 */ static int nodelistK[] = {56,65,74}; /* 3 & 2 */ static int nodelistL[] = {37,47,56}; /* 3 & 4 */ static int nodelistM[] = {22,30,37}; /* 4 & 0 */ static int nodelistN[] = {22,31,41}; /* 4 & 1 */ static int nodelistO[] = {41,48,56}; /* 4 & 2 */ static int nodelistP[] = {37,47,56}; /* 4 & 3 */ static int *nodelists[] = {nodelistA, nodelistB, nodelistC, nodelistD, nodelistE, nodelistF, nodelistG, nodelistH, nodelistI, nodelistJ, nodelistK, nodelistL, nodelistM, nodelistN, nodelistO, nodelistP}; static int *nodelists2[] = {nodelistA, nodelistB, nodelistC, NULL, NULL, NULL, NULL, NULL, NULL, nodelistJ, nodelistK, nodelistL, nodelistM, nodelistN, nodelistO, nodelistP}; static int *nodelists3[] = { NULL, NULL, NULL, nodelistD, nodelistE, nodelistF, nodelistG, nodelistH, nodelistI, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; int nblocks = sizeof(meshtypes) / sizeof(meshtypes[0]); DBPutMultimeshadj(dbfile, "mmadjacency", nblocks, meshtypes, nneighbors, neighbors, NULL, lnodelists, nodelists, NULL, NULL, NULL); /* now try writing the same object with repeated calls */ DBPutMultimeshadj(dbfile, "mmadjacency2", nblocks, meshtypes, nneighbors, neighbors, NULL, lnodelists, nodelists2, NULL, NULL, NULL); DBPutMultimeshadj(dbfile, "mmadjacency2", nblocks, meshtypes, nneighbors, neighbors, NULL, lnodelists, nodelists3, NULL, NULL, NULL); } DBClose(dbfile); dbfile = DBOpen(filename, DB_UNKNOWN, DB_READ); /* test reading a multimesh adj object */ foo = DBGetMultimeshadj(dbfile, "mmadjacency", -1, NULL); DBClose(dbfile); return 0; }
/*------------------------------------------------------------------------- * Function: main * * Purpose: * * Return: 0 * * Programmer: * Thomas R. Treadway, Mon Mar 12 14:13:51 PDT 2007 * Test of HDF5 compression. * * Modifications: * *------------------------------------------------------------------------- */ int main(int argc, char *argv[]) { int nerrors = 0; int verbose = 0; int usefloat = 0; int readonly = 0; int i, j, ndims=1; int fdims[]= {ONE_MEG/sizeof(float)}; int ddims[]= {ONE_MEG/sizeof(double)}; float *fval; float *frval; double *dval; double *drval; int driver=DB_HDF5; char *filename="compression.h5"; char *ptr; char tmpname[64]; DBfile *dbfile; #if !defined(_WIN32) struct timeval tim; double t1, t2; #endif struct stat buffer; off_t fsize; int has_loss = 0; int show_errors = DB_TOP; /* Parse command-line */ for (i=1; i<argc; i++) { if (!strncmp(argv[i], "DB_PDB",6)) { fprintf(stderr, "This test only supported on HDF5 driver\n"); exit(1); } else if (!strncmp(argv[i], "DB_HDF5", 7)) { driver = StringToDriver(argv[i]); filename = "compression.h5"; } else if (!strcmp(argv[i], "compress")) { if ((i+1<argc) && ((ptr=strstr(argv[i+1], "METHOD=")) != NULL)) { DBSetCompression(argv[i+1]); i++; } else DBSetCompression("METHOD=GZIP"); } else if (!strcmp(argv[i], "szip")) { DBSetCompression("METHOD=SZIP"); } else if (!strcmp(argv[i], "gzip")) { DBSetCompression("METHOD=GZIP"); } else if (!strcmp(argv[i], "fpzip")) { DBSetCompression("METHOD=FPZIP"); } else if (!strcmp(argv[i], "single")) { usefloat = 1; } else if (!strcmp(argv[i], "verbose")) { verbose = 1; } else if (!strcmp(argv[i], "lossy1")) { DBSetCompression("METHOD=FPZIP LOSS=1"); has_loss = 1; } else if (!strcmp(argv[i], "lossy2")) { DBSetCompression("METHOD=FPZIP LOSS=2"); has_loss = 1; } else if (!strcmp(argv[i], "lossy3")) { DBSetCompression("METHOD=FPZIP LOSS=3"); has_loss = 1; } else if (!strcmp(argv[i], "minratio1000")) { DBSetCompression("ERRMODE=FAIL MINRATIO=1000 METHOD=FPZIP"); } else if (!strcmp(argv[i], "minratio1001")) { DBSetCompression("ERRMODE=FALLBACK MINRATIO=1000 METHOD=FPZIP"); } else if (!strcmp(argv[i], "readonly")) { readonly = 1; } else if (!strcmp(argv[i], "help")) { printf("Usage: %s [compress [\"METHOD=...\"]|single|verbose|readonly]\n",argv[0]); printf("Where: compress - enables compression, followed by compression information string\n"); printf(" default is compress \"METHOD=GZIP LEVEL=1\"\n"); printf(" single - writes data as floats not doubles\n"); printf(" verbose - displays more feedback\n"); printf(" readonly - checks an existing file (used for cross platform test)\n"); printf(" DB_HDF5 - enable HDF5 driver, the default\n"); return (0); } else if (!strcmp(argv[i], "show-all-errors")) { show_errors = DB_ALL_AND_DRVR; } else if (argv[i][0] != '\0') { fprintf(stderr, "%s: ignored argument `%s'\n", argv[0], argv[i]); } } /* get some temporary memory */ fval = (float*) malloc(ONE_MEG); frval = (float*) malloc(ONE_MEG); dval = (double*) malloc(ONE_MEG); drval = (double*) malloc(ONE_MEG); DBShowErrors(show_errors, 0); if (!readonly) { /* * Create a file that contains a simple variables. */ if (verbose) printf("Creating file: `%s'\n", filename); dbfile = DBCreate(filename, 0, DB_LOCAL, "Compression Test", driver); #if !defined(_WIN32) gettimeofday(&tim, NULL); t1=tim.tv_sec+(tim.tv_usec/1000000.0); #endif if (usefloat) { for (j = 0; j < INTERATE; j++) { if (verbose) if (j % 100 == 0) printf("Iterations %04d to %04d of %04d\n", j,j+100-1,INTERATE); sprintf(tmpname, "compression_%04d", j); for (i = 0; i < fdims[0]; i++) fval[i] = (float) fdims[0] * j + i; if (DBWrite(dbfile, tmpname, fval, fdims, ndims, DB_FLOAT) < 0) { nerrors++; break; } } } else { for (j = 0; j < INTERATE; j++) { if (verbose) if (j % 100 == 0) printf("Iterations %04d to %04d of %04d\n",j,j+100-1,INTERATE); sprintf(tmpname, "compression_%04d", j); for (i = 0; i < ddims[0]; i++) dval[i] = (double) ddims[0] * j + i; if (DBWrite(dbfile, tmpname, dval, ddims, ndims, DB_DOUBLE) < 0) { nerrors++; break; } } } #if !defined(_WIN32) gettimeofday(&tim, NULL); t2=tim.tv_sec+(tim.tv_usec/1000000.0); stat(filename, &buffer); fsize = buffer.st_size; printf("Write took %.6lf seconds and %.6g bytes/second\n", t2-t1,fsize/(t2-t1)); #endif DBClose(dbfile); } else { stat(filename, &buffer); fsize = buffer.st_size; } if (nerrors) return nerrors; /* * Now try opening the file again and verify the simple * variable. */ if (verbose) printf("Reopening `%s'\n", filename); dbfile = DBOpen(filename, driver, DB_READ); if (dbfile == 0) { printf("Unable to Open file for reading\n"); exit(1); } #if !defined(_WIN32) gettimeofday(&tim, NULL); t1=tim.tv_sec+(tim.tv_usec/1000000.0); #endif if (usefloat) { for (j = 0; j < INTERATE; j++) { if (verbose) if (j % 100 == 0) printf("Iterations %04d to %04d of %04d\n", j,j+100-1,INTERATE); sprintf(tmpname, "compression_%04d", j); if (DBReadVar(dbfile, tmpname, frval) < 0) { if (!has_loss) nerrors++; if (!has_loss && nerrors <= 10) printf("DBReadVar for \"%s\" failed\n", tmpname); if (!has_loss && nerrors == 10) printf("Further errors will be suppressed\n"); } for (i = 0; i < fdims[0]; i++) { fval[i] = (float) fdims[0] * j + i; if (fval[i] != frval[i]) { if (!has_loss) nerrors++; if (!has_loss && nerrors <= 10) printf("Read error in \"%s\" at position %04d. Expected %f, got %f\n", tmpname, i, fval[i], frval[i]); if (!has_loss && nerrors == 10) printf("Further errors will be suppressed\n"); break; } } } } else { for (j = 0; j < INTERATE; j++) { if (verbose) if (j % 100 == 0) printf("Iterations %04d to %04d of %04d\n",j,j+100-1,INTERATE); sprintf(tmpname, "compression_%04d", j); if (DBReadVar(dbfile, tmpname, drval) < 0) { if (!has_loss) nerrors++; if (!has_loss && nerrors <= 10) printf("DBReadVar for \"%s\" failed\n", tmpname); if (!has_loss && nerrors == 10) printf("Further errors will be suppressed\n"); } for (i = 0; i < ddims[0]; i++) { dval[i] = (double) ddims[0] * j + i; if (dval[i] != drval[i]) { if (!has_loss) nerrors++; if (!has_loss && nerrors <= 10) printf("Read error in \"%s\" at position %04d. Expected %f, got %f\n", tmpname, i, dval[i], drval[i]); if (!has_loss && nerrors == 10) printf("Further errors will be suppressed\n"); break; } } } } #if !defined(_WIN32) gettimeofday(&tim, NULL); t2=tim.tv_sec+(tim.tv_usec/1000000.0); printf("Read took %.6lf seconds and %.6g bytes/second\n", t2-t1,fsize/(t2-t1)); #endif DBClose(dbfile); free(fval); free(frval); free(dval); free(drval); CleanupDriverStuff(); return nerrors; }