Exemple #1
0
static int ProcessArgs_silo(int argc, char *argv[])
{
    int i,n,nerrors=0;
    for (i=1; i<argc; i++)
    {
        errno=0;
        if (!strcmp(argv[i], "--driver"))
        {
            i++;
            if (!strcmp(argv[i], "DB_HDF5"))
                driver = DB_HDF5;
            else if (!strcmp(argv[i], "DB_HDF5_SEC2"))
                driver = DB_HDF5_SEC2;
            else if (!strcmp(argv[i], "DB_HDF5_STDIO"))
                driver = DB_HDF5_STDIO;
            else if (!strcmp(argv[i], "DB_HDF5_CORE"))
            {
                int meminc = i<argc-1?strtol(argv[i+1], (char **)NULL, 10):0;
                if (errno==0 && meminc>0)
                {
                    i++;
                }
                else
                {
                    errno = 0;
                    meminc = 512;
                }
                driver = (meminc<<11)|DB_HDF5_STDIO;

            }
            else if (!strcmp(argv[i], "DB_PDB"))
                driver = DB_PDB;
            else goto fail;
        }
        else if (!strcmp(argv[i], "--checksums"))
        {
            DBSetEnableChecksums(1);
        }
        else if (!strcmp(argv[i], "--hdf5friendly"))
        {
            DBSetFriendlyHDF5Names(1);
        }
        else if (!strcmp(argv[i], "--compression"))
        {
            char compstr[256];
            i++;
            sprintf(compstr, "METHOD=%s", argv[i]);
            DBSetCompression(compstr);
        }
    }
    return 0;

fail:
    fprintf(stderr, "%s: bad argument `%s' (\"%s\")\n", argv[0], argv[i],
        errno?strerror(errno):"");
    return 1;
}
Exemple #2
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;
}