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