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