00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <string.h>
00004 #include "utils.h"
00005
00006 void int_to_a (int num, char *s, int len)
00007 {
00008 int i, j, k;
00009
00010 for (i = 1; i * 10 <= num; i *= 10)
00011 ;
00012 k = 0;
00013 while (i > 0 && k < len - 1) {
00014 j = num / i;
00015 num %= i;
00016 i /= 10;
00017 s[k] = j + 48;
00018 k++;
00019 }
00020 s[k] = 0;
00021 }
00022
00023 int main (int argc, char **argv)
00024 {
00025 char *dbname = "dbtest.cgns";
00026 char buf[30];
00027 int i, numzones, numvalues, isize[3][1];
00028 int index_file, index_base, index_zone, index_coord;
00029 float *values;
00030 double start_time, end_time;
00031
00032 i = 1;
00033 if (argc > 1 && strchr ("-ahx", argv[1][0]) != NULL) {
00034 int type = argv[1][0];
00035 if (type == '-') type = argv[1][1];
00036 if (type == 'a')
00037 type = cg_set_file_type(CG_FILE_ADF);
00038 else if (type == 'h')
00039 type = cg_set_file_type(CG_FILE_HDF5);
00040 else if (type == 'x')
00041 type = cg_set_file_type(CG_FILE_XML);
00042 else {
00043 fputs ("unknown file type\n", stderr);
00044 exit (1);
00045 }
00046 if (type) {
00047 fprintf (stderr, "cg_set_file_type:%s\n", cg_get_error());
00048 exit (1);
00049 }
00050 i++;
00051 }
00052 if (i > argc - 2) {
00053 fputs ("usage: dbtest [a|h|x] numzones numvalues [CGNSfile]\n", stderr);
00054 exit (1);
00055 }
00056 numzones = atoi(argv[i++]);
00057 numvalues = atoi(argv[i++]);
00058 if (i < argc)
00059 dbname = argv[i];
00060
00061 values = (float *) malloc (numvalues * sizeof(float));
00062 if (values == NULL) {
00063 perror ("malloc");
00064 exit (-1);
00065 }
00066 for (i = 0; i < numvalues; i++)
00067 values[i] = (float)i;
00068
00069 start_time = elapsed_time();
00070
00071 cg_open (dbname, CG_MODE_WRITE, &index_file);
00072 cg_base_write (index_file, "Base", 1, 1, &index_base);
00073
00074 isize[0][0] = numvalues;
00075 isize[1][0] = isize[0][0] - 1;
00076 isize[2][0] = 0;
00077
00078 for (i = 0; i < numzones; i++) {
00079 int_to_a (i, buf, sizeof(buf));
00080 if (cg_zone_write (index_file, index_base, buf, *isize,
00081 Structured, &index_zone) ||
00082 cg_coord_write (index_file, index_base, index_zone,
00083 RealSingle, "CoordinateX", values, &index_coord))
00084 cg_error_exit();
00085 }
00086
00087 cg_close (index_file);
00088 end_time = elapsed_time();
00089
00090 #if 0
00091 printf ("numzones:%d numvalues:%d time:%f [s] size:%f [Mb]\n",
00092 numzones, numvalues, end_time - start_time,
00093 file_size (dbname));
00094 #else
00095 printf ("%d %d %g %g\n", numzones, numvalues,
00096 end_time - start_time, file_size (dbname));
00097 #endif
00098
00099 return 0;
00100 }
00101