/*------------------------------------------------------------------------- * Function: test_quadmesh * * Purpose: Tests reading and writing DBquadmesh objects. * * Return: Success: * * Failure: * * Programmer: Robb Matzke * Tuesday, March 30, 1999 * * Modifications: * *------------------------------------------------------------------------- */ static int test_quadmesh(DBfile *dbfile) { int nerrors=0; static int dims[] = {5, 5}; static float coords0[] = {0.11, 0.12, 0.13, 0.14, 0.15}; static float coords1[] = {0.21, 0.22, 0.23, 0.24, 0.25}; static float *coords[] = {coords0, coords1}; static double varA[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34}; static double varB[] = {35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59}; static double varC[] = {60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84}; static double *vars[] = {varA, varB, varC}; static char *varnames[] = {"varA", "varB", "varC"}; puts("=== Quadmesh ==="); DBMkDir(dbfile, "/quad"); DBSetDir(dbfile, "/quad"); if (DBPutQuadmesh(dbfile, "qm1", NULL, coords, dims, 2, DB_FLOAT, DB_COLLINEAR, NULL)<0) { puts("DBPutQuadmesh(qm1) failed"); nerrors++; } if (DBPutQuadvar(dbfile, "qv1", "qm1", 3, varnames, (float**)vars, dims, 2, NULL, 0, DB_DOUBLE, DB_NODECENT, NULL)<0) { puts("DBPutQuadmesh(qv1) failed"); nerrors++; } return nerrors; }
void write_nodecent_quadvar(DBfile *dbfile) { int i, dims[3], ndims = 3; int nnodes = NX*NY*NZ; float *comp[3]; char *varnames[] = {"nodal_comp0","nodal_comp1","nodal_comp2"}; comp[0] = (float *)malloc(sizeof(float)*nnodes); comp[1] = (float *)malloc(sizeof(float)*nnodes); comp[2] = (float *)malloc(sizeof(float)*nnodes); for(i = 0; i < nnodes; ++i) { comp[0][i] = (float)i; /*vector component 0*/ comp[1][i] = (float)i; /*vector component 1*/ comp[2][i] = (float)i; /*vector component 2*/ } dims[0] = NX; dims[1] = NY; dims[2] = NZ; DBPutQuadvar(dbfile, "nodal", "quadmesh", 3, varnames, comp, dims, ndims, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); free(comp[0]); free(comp[1]); free(comp[2]); }
void write_zonecent_quadvar(DBfile *dbfile) { int i, dims[3], ndims = 3; int ncells = (NX-1)*(NY-1)*(NZ-1); float *comp[3]; char *varnames[] = {"zonal_comp0","zonal_comp1","zonal_comp2"}; comp[0] = (float *)malloc(sizeof(float)*ncells); comp[1] = (float *)malloc(sizeof(float)*ncells); comp[2] = (float *)malloc(sizeof(float)*ncells); for(i = 0; i < ncells; ++i) { comp[0][i] = (float)i; /*vector component 0*/ comp[1][i] = (float)i; /*vector component 1*/ comp[2][i] = (float)i; /*vector component 2*/ } dims[0] = NX-1; dims[1] = NY-1; dims[2] = NZ-1; DBPutQuadvar(dbfile, "zonal", "quadmesh", 3, varnames, comp, dims, ndims, NULL, 0, DB_FLOAT, DB_ZONECENT, NULL); free(comp[0]); free(comp[1]); free(comp[2]); }
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; }
/*---------------------------------------------------------------------------- * Function: writemesh_curv2d() * * Inputs: db (DBfile*): the Silo file handle * * Returns: (void) * * Abstract: Write the mesh and variables stored in the global Mesh * to the Silo file as a quadmesh and quadvars * * Modifications: *---------------------------------------------------------------------------*/ void writemesh_curv2d(DBfile *db, int mixc, int reorder) { float f1[1000],f2[1000], fm[1000]; int x,y,c; char *coordnames[2]; char *varnames[6]; void *varbufs[6]; float *coord[2]; int dims[2]; char *cnvar, *czvar; short *snvar, *szvar; int *invar, *izvar; long *lnvar, *lzvar; long long *Lnvar, *Lzvar; float *fnvar, *fzvar; double *dnvar, *dzvar; int nnodes=mesh.nx*mesh.ny; int nzones=mesh.zx*mesh.zy; /* do mesh */ c=0; for (x=0;x<mesh.nx;x++) { for (y=0;y<mesh.ny;y++) { f1[c]=mesh.node[x][y].x; f2[c]=mesh.node[x][y].y; c++; } } coordnames[0]=NEW(char,20); coordnames[1]=NEW(char,20); strcpy(coordnames[0],"x"); strcpy(coordnames[1],"y"); coord[0]=f1; coord[1]=f2; dims[0]=mesh.nx; dims[1]=mesh.ny; DBPutQuadmesh(db, "Mesh", (DBCAS_t) coordnames, coord, dims, 2, DB_FLOAT, DB_NONCOLLINEAR, NULL); /* Test outputting of ghost node and zone labels */ { int i; int nnodes = mesh.nx * mesh.ny; int nzones = (mesh.nx-1) * (mesh.ny-1); char *gn = (char *) calloc(nnodes,1); char *gz = (char *) calloc(nzones,1); DBoptlist *ol = DBMakeOptlist(5); for (i = 0; i < nnodes; i++) { if (!(i % 3)) gn[i] = 1; } for (i = 0; i < nzones; i++) { if (!(i % 7)) gz[i] = 1; } strcpy(coordnames[0],"xn"); strcpy(coordnames[1],"yn"); DBAddOption(ol, DBOPT_GHOST_NODE_LABELS, gn); DBPutQuadmesh(db, "Mesh_gn", (DBCAS_t) coordnames, coord, dims, 2, DB_FLOAT, DB_NONCOLLINEAR, ol); DBClearOption(ol, DBOPT_GHOST_NODE_LABELS); strcpy(coordnames[0],"xz"); strcpy(coordnames[1],"yz"); DBAddOption(ol, DBOPT_GHOST_ZONE_LABELS, gz); DBPutQuadmesh(db, "Mesh_gz", (DBCAS_t) coordnames, coord, dims, 2, DB_FLOAT, DB_NONCOLLINEAR, ol); strcpy(coordnames[0],"xnz"); strcpy(coordnames[1],"ynz"); DBAddOption(ol, DBOPT_GHOST_NODE_LABELS, gn); DBPutQuadmesh(db, "Mesh_gnz", (DBCAS_t) coordnames, coord, dims, 2, DB_FLOAT, DB_NONCOLLINEAR, ol); DBFreeOptlist(ol); free(gn); free(gz); } free(coordnames[0]); free(coordnames[1]); /* do Node vars */ cnvar = (char *) malloc(sizeof(char)*nnodes); snvar = (short *) malloc(sizeof(short)*nnodes); invar = (int *) malloc(sizeof(int)*nnodes); lnvar = (long *) malloc(sizeof(long)*nnodes); Lnvar = (long long *) malloc(sizeof(long long)*nnodes); fnvar = (float *) malloc(sizeof(float)*nnodes); dnvar = (double *) malloc(sizeof(double)*nnodes); c=0; for (x=0;x<mesh.nx;x++) { for (y=0;y<mesh.ny;y++) { f1[c]=mesh.node[x][y].vars[NV_U]; f2[c]=mesh.node[x][y].vars[NV_V]; cnvar[c] = (char) (x<y?x:y); snvar[c] = (short) (x<y?x:y); invar[c] = (int) (x<y?x:y); lnvar[c] = (long) (x<y?x:y); Lnvar[c] = (long long) (x<y?x:y); fnvar[c] = (float) (x<y?x:y); dnvar[c] = (double) (x<y?x:y); c++; } } DBPutQuadvar1(db, "u", "Mesh", f1, dims, 2, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); DBPutQuadvar1(db, "v", "Mesh", f2, dims, 2, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); DBPutQuadvar1(db, "cnvar", "Mesh", cnvar, dims, 2, NULL, 0, DB_CHAR, DB_NODECENT, NULL); DBPutQuadvar1(db, "snvar", "Mesh", snvar, dims, 2, NULL, 0, DB_SHORT, DB_NODECENT, NULL); DBPutQuadvar1(db, "invar", "Mesh", invar, dims, 2, NULL, 0, DB_INT, DB_NODECENT, NULL); DBPutQuadvar1(db, "lnvar", "Mesh", lnvar, dims, 2, NULL, 0, DB_LONG, DB_NODECENT, NULL); DBPutQuadvar1(db, "Lnvar", "Mesh", Lnvar, dims, 2, NULL, 0, DB_LONG_LONG, DB_NODECENT, NULL); DBPutQuadvar1(db, "fnvar", "Mesh", fnvar, dims, 2, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); DBPutQuadvar1(db, "dnvar", "Mesh", dnvar, dims, 2, NULL, 0, DB_DOUBLE, DB_NODECENT, NULL); free(cnvar); free(snvar); free(invar); free(lnvar); free(Lnvar); free(fnvar); free(dnvar); /* test writing a quadvar with many components */ varnames[0] = "u0"; varnames[1] = "v0"; varnames[2] = "u1"; varnames[3] = "v1"; varnames[4] = "u2"; varnames[5] = "v2"; varbufs[0] = f1; varbufs[1] = f2; varbufs[2] = f1; varbufs[3] = f2; varbufs[4] = f1; varbufs[5] = f2; DBPutQuadvar(db, "manyc", "Mesh", 6, (DBCAS_t) varnames, varbufs, dims, 2, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); /* do Zone vars */ dims[0]--; dims[1]--; czvar = (char *) malloc(sizeof(char)*nzones); szvar = (short *) malloc(sizeof(short)*nzones); izvar = (int *) malloc(sizeof(int)*nzones); lzvar = (long *) malloc(sizeof(long)*nzones); Lzvar = (long long *) malloc(sizeof(long long)*nzones); fzvar = (float *) malloc(sizeof(float)*nzones); dzvar = (double *) malloc(sizeof(double)*nzones); c=0; for (x=0;x<mesh.zx;x++) { for (y=0;y<mesh.zy;y++) { f1[c]=mesh.zone[x][y].vars[ZV_P]; f2[c]=mesh.zone[x][y].vars[ZV_D]; czvar[c] = (char) (x<y?x:y); szvar[c] = (short) (x<y?x:y); izvar[c] = (int) (x<y?x:y); lzvar[c] = (long) (x<y?x:y); Lzvar[c] = (long long) (x<y?x:y); fzvar[c] = (float) (x<y?x:y); dzvar[c] = (double) (x<y?x:y); c++; } } for (c=0; c<mixc; c++) fm[c] = 2.0/mixc*c; if (reorder) { float tmp=fm[mixc-1]; fm[mixc-1]=fm[mixc-2]; fm[mixc-2]=tmp; } DBPutQuadvar1(db, "p", "Mesh", f1, dims, 2, NULL, 0, DB_FLOAT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "d", "Mesh", f2, dims, 2, fm, mixc, DB_FLOAT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "czvar", "Mesh", czvar, dims, 2, NULL, 0, DB_CHAR, DB_ZONECENT, NULL); DBPutQuadvar1(db, "szvar", "Mesh", szvar, dims, 2, NULL, 0, DB_SHORT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "izvar", "Mesh", izvar, dims, 2, NULL, 0, DB_INT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "lzvar", "Mesh", lzvar, dims, 2, NULL, 0, DB_LONG, DB_ZONECENT, NULL); DBPutQuadvar1(db, "Lzvar", "Mesh", Lzvar, dims, 2, NULL, 0, DB_LONG_LONG, DB_ZONECENT, NULL); DBPutQuadvar1(db, "fzvar", "Mesh", fzvar, dims, 2, NULL, 0, DB_FLOAT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "dzvar", "Mesh", dzvar, dims, 2, NULL, 0, DB_DOUBLE, DB_ZONECENT, NULL); free(czvar); free(szvar); free(izvar); free(lzvar); free(Lzvar); free(fzvar); free(dzvar); }
/*---------------------------------------------------------------------- * Routine build_quad * * Purpose * * Build quad-mesh, quad-var, and material data objects; return * the mesh ID. * * Arguments * name Name to assign mesh. * * Modifications * * Lisa J. Roberts, Fri Apr 7 09:35:52 PDT 2000 * Changed the prototype to ANSI standard and explicitly indicated * the function returns an int. Got rid of varid and matid, which * were unused. * *--------------------------------------------------------------------*/ int build_quad(DBfile *dbfile, char *name) { int i, dims[3], zones[3], ndims, cycle, meshid; float time; double dtime; int zdims[3]; float x[10], y[8], d[80], *coords[3], *vars[3]; float u[80], v[80]; int matnos[3], matlist[63], nmat, mixlen; char *coordnames[3], *varnames[3]; DBoptlist *optlist; optlist = DBMakeOptlist(10); DBAddOption(optlist, DBOPT_CYCLE, &cycle); DBAddOption(optlist, DBOPT_TIME, &time); DBAddOption(optlist, DBOPT_DTIME, &dtime); ndims = 2; dims[0] = 10; dims[1] = 8; zones[0] = 9; zones[1] = 7; cycle = 44; time = 4.4; dtime = 4.4; coords[0] = x; coords[1] = y; coordnames[0] = "xcoords"; coordnames[1] = "ycoords"; for (i = 0; i < dims[0]; i++) x[i] = (float)i; for (i = 0; i < dims[1]; i++) y[i] = (float)i + .1; meshid = DBPutQuadmesh(dbfile, name, coordnames, coords, dims, ndims, DB_FLOAT, DB_COLLINEAR, optlist); varnames[0] = "d"; vars[0] = d; zdims[0] = dims[0] - 1; zdims[1] = dims[1] - 1; for (i = 0; i < zdims[0] * zdims[1]; i++) d[i] = (float)i *.2; (void)DBPutQuadvar1(dbfile, "d", name, d, zdims, ndims, NULL, 0, DB_FLOAT, DB_ZONECENT, optlist); for (i = 0; i < dims[0] * dims[1]; i++) { u[i] = (float)i *.1; v[i] = (float)i *.1; } (void)DBPutQuadvar1(dbfile, "ucomp", name, u, dims, ndims, NULL, 0, DB_FLOAT, DB_NODECENT, optlist); (void)DBPutQuadvar1(dbfile, "vcomp", name, v, dims, ndims, NULL, 0, DB_FLOAT, DB_NODECENT, optlist); vars[0] = u; vars[1] = v; varnames[0] = "u"; varnames[1] = "v"; (void)DBPutQuadvar(dbfile, "velocity", name, 2, varnames, vars, dims, ndims, NULL, 0, DB_FLOAT, DB_NODECENT, optlist); /* * Build material data. */ nmat = 3; mixlen = 0; matnos[0] = 1; matnos[1] = 2; matnos[2] = 3; for (i = 0; i < 27; i++) matlist[i] = 1; for (i = 27; i < 45; i++) matlist[i] = 2; for (i = 45; i < 63; i++) matlist[i] = 3; (void)DBPutMaterial(dbfile, "material", name, nmat, matnos, matlist, zones, ndims, NULL, NULL, NULL, NULL, mixlen, DB_FLOAT, NULL); return (meshid); }
/*---------------------------------------------------------------------------- * Function: writemesh_curv2d() * * Inputs: db (DBfile*): the Silo file handle * * Returns: (void) * * Abstract: Write the mesh and variables stored in the global Mesh * to the Silo file as a quadmesh and quadvars * * Modifications: *---------------------------------------------------------------------------*/ void writemesh_curv2d(DBfile *db, int mixc, int reorder) { float f1[1000],f2[1000], fm[1000]; int x,y,c; char *coordnames[2]; char *varnames[6]; void *varbufs[6]; float *coord[2]; int dims[2]; char *cnvar, *czvar; short *snvar, *szvar; int *invar, *izvar; long *lnvar, *lzvar; long long *Lnvar, *Lzvar; float *fnvar, *fzvar; double *dnvar, *dzvar; int nnodes=mesh.nx*mesh.ny; int nzones=mesh.zx*mesh.zy; /* do mesh */ c=0; for (x=0;x<mesh.nx;x++) { for (y=0;y<mesh.ny;y++) { f1[c]=mesh.node[x][y].x; f2[c]=mesh.node[x][y].y; c++; } } coordnames[0]=NEW(char,20); coordnames[1]=NEW(char,20); strcpy(coordnames[0],"x"); strcpy(coordnames[1],"y"); coord[0]=f1; coord[1]=f2; dims[0]=mesh.nx; dims[1]=mesh.ny; DBPutQuadmesh(db, "Mesh", coordnames, coord, dims, 2, DB_FLOAT, DB_NONCOLLINEAR, NULL); /* do Node vars */ cnvar = (char *) malloc(sizeof(char)*nnodes); snvar = (short *) malloc(sizeof(short)*nnodes); invar = (int *) malloc(sizeof(int)*nnodes); lnvar = (long *) malloc(sizeof(long)*nnodes); Lnvar = (long long *) malloc(sizeof(long long)*nnodes); fnvar = (float *) malloc(sizeof(float)*nnodes); dnvar = (double *) malloc(sizeof(double)*nnodes); c=0; for (x=0;x<mesh.nx;x++) { for (y=0;y<mesh.ny;y++) { f1[c]=mesh.node[x][y].vars[NV_U]; f2[c]=mesh.node[x][y].vars[NV_V]; cnvar[c] = (char) (x<y?x:y); snvar[c] = (short) (x<y?x:y); invar[c] = (int) (x<y?x:y); lnvar[c] = (long) (x<y?x:y); Lnvar[c] = (long long) (x<y?x:y); fnvar[c] = (float) (x<y?x:y); dnvar[c] = (double) (x<y?x:y); c++; } } DBPutQuadvar1(db, "u", "Mesh", f1, dims, 2, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); DBPutQuadvar1(db, "v", "Mesh", f2, dims, 2, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); DBPutQuadvar1(db, "cnvar", "Mesh", cnvar, dims, 2, NULL, 0, DB_CHAR, DB_NODECENT, NULL); DBPutQuadvar1(db, "snvar", "Mesh", snvar, dims, 2, NULL, 0, DB_SHORT, DB_NODECENT, NULL); DBPutQuadvar1(db, "invar", "Mesh", invar, dims, 2, NULL, 0, DB_INT, DB_NODECENT, NULL); DBPutQuadvar1(db, "lnvar", "Mesh", lnvar, dims, 2, NULL, 0, DB_LONG, DB_NODECENT, NULL); DBPutQuadvar1(db, "Lnvar", "Mesh", Lnvar, dims, 2, NULL, 0, DB_LONG_LONG, DB_NODECENT, NULL); DBPutQuadvar1(db, "fnvar", "Mesh", fnvar, dims, 2, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); DBPutQuadvar1(db, "dnvar", "Mesh", dnvar, dims, 2, NULL, 0, DB_DOUBLE, DB_NODECENT, NULL); free(cnvar); free(snvar); free(invar); free(lnvar); free(Lnvar); free(fnvar); free(dnvar); /* test writing a quadvar with many components */ varnames[0] = "u0"; varnames[1] = "v0"; varnames[2] = "u1"; varnames[3] = "v1"; varnames[4] = "u2"; varnames[5] = "v2"; varbufs[0] = f1; varbufs[1] = f2; varbufs[2] = f1; varbufs[3] = f2; varbufs[4] = f1; varbufs[5] = f2; DBPutQuadvar(db, "manyc", "Mesh", 6, varnames, varbufs, dims, 2, NULL, 0, DB_FLOAT, DB_NODECENT, NULL); /* do Zone vars */ dims[0]--; dims[1]--; czvar = (char *) malloc(sizeof(char)*nzones); szvar = (short *) malloc(sizeof(short)*nzones); izvar = (int *) malloc(sizeof(int)*nzones); lzvar = (long *) malloc(sizeof(long)*nzones); Lzvar = (long long *) malloc(sizeof(long long)*nzones); fzvar = (float *) malloc(sizeof(float)*nzones); dzvar = (double *) malloc(sizeof(double)*nzones); c=0; for (x=0;x<mesh.zx;x++) { for (y=0;y<mesh.zy;y++) { f1[c]=mesh.zone[x][y].vars[ZV_P]; f2[c]=mesh.zone[x][y].vars[ZV_D]; czvar[c] = (char) (x<y?x:y); szvar[c] = (short) (x<y?x:y); izvar[c] = (int) (x<y?x:y); lzvar[c] = (long) (x<y?x:y); Lzvar[c] = (long long) (x<y?x:y); fzvar[c] = (float) (x<y?x:y); dzvar[c] = (double) (x<y?x:y); c++; } } for (c=0; c<mixc; c++) fm[c] = 2.0/mixc*c; if (reorder) { float tmp=fm[mixc-1]; fm[mixc-1]=fm[mixc-2]; fm[mixc-2]=tmp; } DBPutQuadvar1(db, "p", "Mesh", f1, dims, 2, NULL, 0, DB_FLOAT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "d", "Mesh", f2, dims, 2, fm, mixc, DB_FLOAT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "czvar", "Mesh", czvar, dims, 2, NULL, 0, DB_CHAR, DB_ZONECENT, NULL); DBPutQuadvar1(db, "szvar", "Mesh", szvar, dims, 2, NULL, 0, DB_SHORT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "izvar", "Mesh", izvar, dims, 2, NULL, 0, DB_INT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "lzvar", "Mesh", lzvar, dims, 2, NULL, 0, DB_LONG, DB_ZONECENT, NULL); DBPutQuadvar1(db, "Lzvar", "Mesh", Lzvar, dims, 2, NULL, 0, DB_LONG_LONG, DB_ZONECENT, NULL); DBPutQuadvar1(db, "fzvar", "Mesh", fzvar, dims, 2, NULL, 0, DB_FLOAT, DB_ZONECENT, NULL); DBPutQuadvar1(db, "dzvar", "Mesh", dzvar, dims, 2, NULL, 0, DB_DOUBLE, DB_ZONECENT, NULL); free(czvar); free(szvar); free(izvar); free(lzvar); free(Lzvar); free(fzvar); free(dzvar); }