1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <errno.h>
5 #ifdef _WIN32
6 # include <io.h>
7 # define unlink _unlink
8 #else
9 # include <unistd.h>
10 #endif
11 #include "utils.h"
12 
13 int cgfile, cgbase, cgzone, cgcoord;
14 cgsize_t size[9];
15 
16 #define NUM_SIDE 5
17 
18 float coord[NUM_SIDE*NUM_SIDE*NUM_SIDE];
19 
main(int argc,char ** argv)20 int main (int argc, char **argv)
21 {
22     int n, nz, nzones = 50;
23     double start, finish;
24     char name[33], linkpath[33];
25     char fname[33], linkfile[33];
26     int cgftop,cgfchild;
27     char *endptr;
28 
29     for (n = 0; n < 3; n++) {
30         size[n]   = NUM_SIDE;
31         size[n+3] = NUM_SIDE - 1;
32         size[n+6] = 0;
33     }
34     if (argc > 1) {
35         /* Get safely input values */
36         long input_value;
37         errno = 0;
38         input_value = strtol(argv[1], &endptr, 10);
39         if (errno == ERANGE){
40             fprintf (stderr, "overflow when converting nzones input to int\n");
41             exit(1);
42         }
43         if (endptr == argv[1]){
44             fprintf (stderr, "impossible to convert nzones input to int\n");
45             exit(1);
46         }
47         else {
48             nzones = (int) input_value;
49         }
50     }
51     printf ("number of zones  = %d\n", nzones);
52 
53     for (nz = 1; nz <= nzones; nz++) {
54         sprintf (fname, "zone%d.cgns", nz);
55         unlink (fname);
56     }
57 
58     printf ("creating zones ...");
59     fflush (stdout);
60     start = elapsed_time ();
61     for (nz = 1; nz <= nzones; nz++) {
62         sprintf (fname, "zone%d.cgns", nz);
63         if (cg_open (fname, CG_MODE_WRITE, &cgfile) ||
64             cg_base_write (cgfile, "Base", 3, 3, &cgbase) ||
65             cg_zone_write (cgfile, cgbase, "Zone", size, CGNS_ENUMV( Structured ),
66                 &cgzone) ||
67             cg_coord_write(cgfile, cgbase, cgzone, CGNS_ENUMV( RealSingle ),
68                 "CoordinateX", coord, &cgcoord) ||
69             cg_coord_write(cgfile, cgbase, cgzone, CGNS_ENUMV( RealSingle ),
70                 "CoordinateY", coord, &cgcoord) ||
71             cg_coord_write(cgfile, cgbase, cgzone, CGNS_ENUMV( RealSingle ),
72                 "CoordinateZ", coord, &cgcoord))
73             cg_error_exit();
74         if (cg_close(cgfile)) cg_error_exit();
75     }
76     finish = elapsed_time ();
77     printf (" %g secs\n", finish - start);
78 
79     strcpy (fname, "links.cgns");
80     unlink (fname);
81     strcpy (linkpath, "/Base/Zone");
82     printf ("creating link file ...");
83     fflush (stdout);
84     start = elapsed_time ();
85     if (cg_open (fname, CG_MODE_WRITE, &cgfile) ||
86         cg_base_write (cgfile, "Base", 3, 3, &cgbase))
87         cg_error_exit();
88     for (nz = 1; nz <= nzones; nz++) {
89         sprintf (name, "Zone%d", nz);
90         sprintf (linkfile, "zone%d.cgns", nz);
91         if (cg_goto (cgfile, cgbase, "end") ||
92             cg_link_write (name, linkfile, linkpath))
93             cg_error_exit();
94     }
95     cg_close (cgfile);
96     finish = elapsed_time ();
97     printf (" %g secs\n", finish - start);
98     printf ("file size        = %g Mb\n", file_size(fname));
99 
100     printf ("opening top link file  ...");
101     fflush (stdout);
102     if (cg_open (fname, CG_MODE_READ, &cgftop)) cg_error_exit();
103     cg_nzones(cgftop,1,&n);
104     cg_close (cgftop);
105     printf ("close top link file\n");
106 
107     printf ("opening child link file ...");
108     fflush (stdout);
109     if (cg_open ("zone1.cgns", CG_MODE_READ, &cgfchild)) cg_error_exit();
110     cg_nzones(cgfchild,1,&n);
111     printf (" [%d] zones\n",n);
112 
113     printf ("opening top link file (child still open) ...");
114     fflush (stdout);
115     if (cg_open (fname, CG_MODE_READ, &cgftop)) cg_error_exit();
116     cg_nzones(cgftop,1,&n);
117     printf (" [%d] zones...",n);
118     cg_close (cgftop);
119     printf ("close top link file\n");
120 
121     printf ("read child link file ...");
122     cg_nzones(cgfchild,1,&n);
123     printf (" [%d] zones...",n);
124     cg_close (cgfchild);
125     printf ("close child link file\n");
126 
127     return 0;
128 }
129 
130