/*------------------------------------------------------------------------- * Function: test_get_all * * Purpose: Tests DBGetVar() by reading each of the variables that were * written by test_write_all() and comparing the results to what * is stored in memory. * * This step is skipped if the architecture is not DB_LOCAL * because the data might be read back as some other type than * what was written. Unfortunately silo doesn't give the caller * any control over how data is read. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, February 9, 1999 * * Modifications: * Robb Matzke, 2000-01-12 * Changed hyphens to underscores in object names because silo * now fails when underscores are present in the name. *------------------------------------------------------------------------- */ static int test_get_all(DBfile *dbfile) { int i, nerrors=0; char *cdata_in=NULL; short *sdata_in=NULL; int *idata_in=NULL; long *ldata_in=NULL; float *fdata_in=NULL; double *ddata_in=NULL; puts("DBGetVar():"); if (DB_LOCAL!=arch_g) { puts(" Skipped because target is not DB_LOCAL" " -- use browser instead"); return 0; } /* 1d char */ puts(" 1d_char"); if (NULL==(cdata_in=DBGetVar(dbfile, "1d_char"))) { puts(" DBGetVar() failed"); nerrors++; } else { for (i=0; i<TEST_NELMTS; i++) { if (cdata_g[i]!=cdata_in[i]) { printf(" failed at i=%d: out=%d, in=%d\n", i, cdata_g[i], cdata_in[i]); nerrors++; } } free(cdata_in); } /* 2d short */ puts(" 2d_short"); if (NULL==(sdata_in=DBGetVar(dbfile, "2d_short"))) { puts(" DBGetVar() failed"); nerrors++; } else { for (i=0; i<TEST_NELMTS; i++) { if (sdata_g[i]!=sdata_in[i]) { printf(" failed at i=%d: out=%d, in=%d\n", i, sdata_g[i], sdata_in[i]); nerrors++; } } free(sdata_in); } /* 3d int */ puts(" 3d_int"); if (NULL==(idata_in=DBGetVar(dbfile, "3d_int"))) { puts(" DBGetVar() failed"); nerrors++; } else { for (i=0; i<TEST_NELMTS; i++) { if (idata_g[i]!=idata_in[i]) { printf(" failed at i=%d: out=%d, in=%d\n", i, idata_g[i], idata_in[i]); } } free(idata_in); } /* 3d long */ puts(" 3d_long"); if (NULL==(ldata_in=DBGetVar(dbfile, "3d_long"))) { puts(" DBGetVar() failed"); nerrors++; } else { for (i=0; i<TEST_NELMTS; i++) { if (ldata_g[i]!=ldata_in[i]) { printf(" failed at i=%d: out=%ld, in=%ld\n", i, ldata_g[i], ldata_in[i]); } } free(ldata_in); } /* 4d float */ DBForceSingle(TRUE); puts(" 4d_float"); if (NULL==(fdata_in=DBGetVar(dbfile, "4d_float"))) { puts(" DBGetVar() failed"); nerrors++; } else { printf("testing DBGetVar of 4d_float\n"); for (i=0; i<TEST_NELMTS; i++) { if (fdata_g[i]!=fdata_in[i]) { printf(" failed at i=%d: out=%g, in=%g\n", i, fdata_g[i], fdata_in[i]); } } free(fdata_in); } DBForceSingle(FALSE); /* 5d double */ puts(" 5d_double"); if (NULL==(ddata_in=DBGetVar(dbfile, "5d_double"))) { puts(" DBGetVar() failed"); nerrors++; } else { for (i=0; i<TEST_NELMTS; i++) { if (ddata_g[i]!=ddata_in[i]) { printf(" failed at i=%d: out=%g, in=%g\n", i, ddata_g[i], ddata_in[i]); } } free(ddata_in); } return nerrors; }
/*------------------------------------------------------------------------- * Function: main * * Purpose: * * Return: 0 * * Programmer: * * Modifications: * Robb Matzke, 1999-04-09 * Added argument parsing to control the driver which is used. * * Mark C. Miller, Mon Sep 21 15:20:30 PDT 2009 * Added code to test long long type. * * Mark C. Miller, Wed Sep 23 11:57:24 PDT 2009 * Added logic to test DBInqFile. * * Mark C. Miller, Fri Nov 13 15:40:35 PST 2009 * Test long long on PDB driver too. *------------------------------------------------------------------------- */ int main(int argc, char *argv[]) { int i, j, k; int ndims, dims[3]; float val[NX * NY * NZ]; long long lval[NX * NY * NZ]; int offset[3], length[3], stride[3]; float val2[NX * NY * NZ]; long long *lval2 = 0; int cnt, driver=DB_PDB; char *filename="simple.pdb"; int k1, k2; int err = 0; int inqval; DBfile *dbfile; 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 = "simple.pdb"; } else if (!strncmp(argv[i], "DB_HDF5", 7)) { driver = StringToDriver(argv[i]); filename = "simple.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_TOP, NULL); DBForceSingle(1); /* * Build a simple variables. */ ndims = 3; dims[0] = NZ; dims[1] = NY; dims[2] = NX; for (k = 0; k < NZ; k++) { for (j = 0; j < NY; j++) { for (i = 0; i < NX; i++) { val[i + j * NX + k * NX * NY] = i + j * NX + k * NX * NY; lval[i + j * NX + k * NX * NY] = ((long long) 1 << 35) + i + j * NX + k * NX * NY; } } } /* Test InqFile on a PDB (but not Silo) file */ if (driver == DB_PDB) inqval = DBInqFile("not_a_silo_file.pdb"); else inqval = DBInqFile("not_a_silo_file.h5"); if (inqval < 0) { fprintf(stderr, "Error in InqFile attempting to identify not_a_silo_file"); err = 1; } else if (inqval > 0) { fprintf(stderr, "InqFile incorrectly identified not_a_silo_file"); err = 1; } /* Create empty silo file to test InqFile */ dbfile = DBCreate(filename, 0, DB_LOCAL, "Empty Silo File", driver); DBClose(dbfile); if (DBInqFile(filename) <= 0) { fprintf(stderr, "InqFile says file created via DBCreate is NOT a silo file"); err = 1; } unlink(filename); /* * Create a file that contains a simple variables. */ printf("Creating file: `%s'\n", filename); dbfile = DBCreate(filename, 0, DB_LOCAL, "Simple Test", driver); DBWrite(dbfile, "simple", val, dims, ndims, DB_FLOAT); DBWrite(dbfile, "longlong", lval, dims, ndims, DB_LONG_LONG); DBClose(dbfile); /* * Now try opening the file again and reading the simple * variable. */ printf("Reopening `%s'\n", filename); dbfile = DBOpen(filename, driver, DB_READ); offset[0] = 0; offset[1] = 0; offset[2] = 0; length[0] = NZ2; length[1] = NY2; length[2] = NX2; stride[0] = 1; stride[1] = 1; stride[2] = 1; for (i = 0; i < NX * NY * NZ; i++) val2[i] = 0; DBReadVarSlice(dbfile, "simple", offset, length, stride, ndims, val2); lval2 = DBGetVar(dbfile, "longlong"); DBClose(dbfile); /* * Check the data. */ cnt = 0; for (k = 0; k < NZ2; k++) { for (j = 0; j < NY2; j++) { for (i = 0; i < NX2; i++) { if (val2[i + j * NX2 + k * NX2 * NY2] != val[i + j * NX + k * NX * NY]) cnt++; } } } err += cnt; printf("%d values don't match\n", cnt); cnt = 0; k1 = NX2 * NY2 * NZ2; k2 = NX * NY * NZ; for (i = k1; i < k2; i++) if (val2[i] != 0) cnt++; printf("%d values were overwritten\n", cnt); cnt = 0; for (k = 0; k < NZ && lval2; k++) { for (j = 0; j < NY; j++) { for (i = 0; i < NX; i++) { if (lval2[i + j * NX + k * NX * NY] != lval[i + j * NX + k * NX * NY]) cnt++; } } } err += cnt; printf("%d long long values don't match\n", cnt); if (lval2) free(lval2); CleanupDriverStuff(); return err; }
int Restart_read_driver(char *dmpname, int mdmpflag, int memflag) { char *me = "Restart_read_driver"; char *kern, *rem, *infostr; char msg[MAXLINE]; int i, error = 0, ierr; int num, mycyc, iblk, gblk, namelen; int mynblk; int numBlocks, numDomains; int *domainFiles; DBfile *idbid; RGST_AttributeElem_t *func; if (memflag == 1) { memclr() ; } comlock(dmp_nbaton); if (mdmpflag) { kern = strtok(dmpname,"-"); rem = strtok(NULL,"-"); mycyc = atoi(rem); RestartCycle = mycyc; strcpy(RestartKernel,kern); rootfile_read(kern,mycyc); } else { namelen = strlen(dmpname); if (namelen > 10) { memset(msg,'\0',MAXLINE); strncpy(RestartKernel,dmpname,namelen - 10); RestartKernel[namelen - 9] = '\0'; i = strlen(dmpname) - 10; strncpy(msg,&(dmpname[i]), 5); RestartCycle = atoi(msg); } else { } idbid = DBOpen (dmpname, DB_PDB, DB_READ); if (idbid == NULL) { error = 1 ; sprintf(msg,"Can't open dump %s\n",dmpname); ctlwarning(me,msg); return(error) ; } infostr = DBGetVar (idbid, "_fileinfo"); namelen = strlen(codename); if (strncmp (infostr, codename, namelen) != 0) { sprintf(msg,"Restarting from a dump which is not %s. This is EVIL!\n", codename); ctlwarning(me,msg); } FREEMEM(infostr); decomp_setdir(idbid); ierr = DBReadVar(idbid,"NumBlocks",&numBlocks); ierr += DBReadVar(idbid,"NumDomains",&numDomains); if (ierr != 0) ctlerror(me,gv_errmsg_DBReadVar); decomp_new(numBlocks, numDomains); decomp_read(idbid, msg, 0, 0); if (DBSetDir(idbid, "/") != 0) ctlerror(me,gv_errmsg_DBSetDir); error += Restart_read_global(idbid); dmpattr_set(); domainFiles = MALLOT(int, gnblk); for (gblk = 0; gblk < gnblk; gblk++) { domainFiles[gblk] = gmap[gblk].lblk; } calculate_mappings(); mynblk = 0; for (gblk = 0; gblk < gnblk; gblk++) { if (gmap[gblk].proc != myid) continue; iblk = gmap[gblk].lblk; Restart_read_domain(idbid, domainFiles[gblk], iblk); mynblk++; } nblk = mynblk; DBClose(idbid); FREEMEM(domainFiles); } dmpattr_unset(); comunlock(dmp_nbaton); ifparallel = 0; nblk = gnblk; initcom(NULL,0); sprintf(msg,"dump '%s' read",dmpname); ctlmsg(msg); printtc() ; func = rgst_list_attr(A_OBJECT, "Function_Gen"); while (func != NULL) { Command_t *cp = (Command_t *) func->rgst_obj->obj; (*(cp->proc))(); func = func->next; } blknum = 0 ; genmd = -1; error += qbnd(FULL_STEP,COM_RECV); error += qbnd(FULL_STEP,COM_SEND); error += qbnd(FULL_STEP,COM_WAIT_RECV); TimeStepControl_initialize() ; for ( iblk = 0 ; iblk < nblk ; iblk++ ) { updateblk( &domains[iblk], 0, 0.0 ) ; } ; error += qbnd(FULL_STEP,COM_WAIT_SEND); editor(FULL_STEP); genmd = 0; hash_optimize_all(); return(0); }