1 #include "exodusII.h"
2 #include <stdio.h>
3 #include <string.h>
4 #include <stdlib.h>
5 
6 #if 1
7 int mymode = EX_MAPS_INT64_DB|EX_MAPS_INT64_API|EX_BULK_INT64_DB|EX_BULK_INT64_API|EX_IDS_INT64_API|EX_IDS_INT64_DB;
8 typedef int64_t INT;
9 #else
10 int mymode = 0;
11 typedef int INT;
12 #endif
13 
14 #define EX_TEST_FILENAME "ExodusTestData.e"
15 
16 /* ================ Coordinate Frames ================ */
17 int cf_ids[2] = {20, 13};
18 double pt_coords[9*2] = {1,0,0,  1,0,1,  2,0,0,
19 			0,0,0,  1,0,0,  0,1,0};
20 char tags[2]={'r', 'c'};
21 
22 /* ======== Coordinates and connectivity ========= */
23 double coordsX[] = {
24    0.,  0.,  0.,  0.,
25    3.,  3.,  3.,  3.,
26   -3., -3., -3., -3.
27 };
28 
29 double coordsY[] = {
30   -1.,  1.,  1., -1.,
31   -3.,  3.,  3., -3.,
32   -3.,  3.,  3., -3.
33 };
34 
35 double coordsZ[] = {
36   -1., -1.,  1.,  1.,
37   -3., -3.,  3.,  3.,
38   -3., -3.,  3.,  3.
39 };
40 
41 const char* coordsNames[] = { "X", "Y", "Z" };
42 
43 INT conn1[] = {
44    1,  2,  3,  4,  5,  6,  7,  8,
45    9, 10, 11, 12,  1,  2,  3,  4
46 };
47 
48 INT conn2[] = { 1, 2, 3, 5 };
49 
50 INT conn3[] = { 12, 11, 10, 9 };
51 
52 INT conn4[] = {1, 3, 5, 7, 9, 11}; /* Sphere */
53 
54 INT conn5[] = {12, 8,   11, 7,    10, 6,    9, 5}; /* Beam */
55 
56 INT econn1[] = {
57    1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12,
58   13, 14, 15, 16,  1,  2,  3,  4, 17, 18, 19, 20
59 };
60 
61 INT fconn1[] = {
62    4,  5,  7,  6,  3,  2,
63    8,  9, 11, 10,  1,  3
64 };
65 
66 INT ebconn1[] = {
67    1,  2,
68    2,  3,
69    3,  4,
70    4,  1,
71    5,  6,
72    6,  7,
73    7,  8,
74    8,  5,
75    1,  5,
76    2,  6,
77    4,  8,
78    3,  7,
79    9, 10,
80   10, 11,
81   11, 12,
82   12,  9,
83    9,  1,
84   10,  2,
85   12,  4,
86   11,  3
87 };
88 
89 INT fbconn1[] = {
90   12, 11, 10,  9,
91    5,  6,  7,  8
92 };
93 
94 INT fbconn2[] = {
95    1,  2,  3,  4
96 };
97 
98 INT fbconn3[] = {
99    1,  5,  6,  2,
100    3,  7,  8,  4,
101    2,  6,  7,  3,
102    4,  8,  5,  1, 9,  1,  2, 10,
103   11,  3,  4, 12,
104   10,  2,  3, 11,
105   12,  4,  1,  9
106 };
107 
108 INT nmap1[] = {
109   12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
110 };
111 
112 INT nmap2[] = {
113   120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10
114 };
115 
116 INT edmap1[] = {
117   1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20
118 };
119 
120 
121 INT famap1[] = {
122   2, 1, 4, 3, 6, 5, 7, 8, 9, 10, 11
123 };
124 
125 INT emap1[] = {
126   10, 20, 30, 44, 91,92,93,94,95,96,  88, 87, 86, 85
127 };
128 
129 const char* eblk_names[] = {
130   "Eli_WALLACH",
131   "Angelo_NOVI",
132   "A_Shell",
133   "Some_Sphere_Elements",
134   "Reinforcement"
135 };
136 
137 const char* edblk_names[] = { "Aldo_GIUFFRE" };
138 const char* fablk_names[] = {
139   "Livio_LORENZON",
140   "Claudio_SCARCHILLI",
141   "John_BARTHA"
142 };
143 
144 const char* nmap_names[] = { "Luigi_PISTILLI" };
145 const char* edmap_names[] = { "Antonio_CASALE" };
146 const char* famap_names[] = { "Sandro_SCARCHILLI" };
147 const char* emap_names[] = { "Benito_STEFANELLI" };
148 
149 /* ======== Sets ========= */
150 INT nset_nodes[] = {
151   5, 6, 9
152 };
153 
154 INT eset_edges[] = {
155   1, 2, 4, 15, 19, 20
156 };
157 
158 INT eset_orient[] = {
159   +1, +1, +1, +1, +1, -1
160 };
161 
162 double eset_df[] = {
163   2., 2., 0.5, 0.5, 1., 1.
164 };
165 
166 INT fset_faces[] = {
167   3, 9
168 };
169 
170 INT fset_orient[] = {
171   +1, -1
172 };
173 
174 INT sset_elems[] = {
175   1, 1, 1, 2, 2
176 };
177 
178 INT sset_sides[] = {
179   1, 3, 5, 2, 4
180 };
181 
182 INT sset1_elems[] = {
183   4, 4, 4
184 };
185 
186 INT sset1_sides[] = {
187   1, 3, 5
188 };
189 
190 INT elset_elems[] = {
191   1,
192   2
193 };
194 
195 const char* elset_names[] = {
196   "Clint_EASTWOOD",
197   "Lee_VAN_CLEEF"
198 };
199 
200 const char* nset_names[] = { "Ennio_MORRICONE" };
201 const char* eset_names[] = { "Rada_RASSIMOV" };
202 const char* fset_names[] = { "Enzo_PETITO" };
203 const char* sset_names[] = { "Luciano_VINCENZONI", "A_Very_Long_Name_That_Tests_Capability_for_Long_Names" };
204 
205 /* ======== Attributes ========= */
206 const char* node_attr_names[]  = {"Influence_Diameter"};
207 const char* edge_attr_names1[] = {"Sergio_LEONE"};
208 
209 const char* face_attr_names1[] = {"GOOD"};
210 const char* face_attr_names2[] = {"BAD"};
211 const char* face_attr_names3[] = {"UGLY"};
212 
213 const char* elem_attr_names1[] = {
214   "SPAGHETTI",
215   "WESTERN"
216 };
217 
218 const char* elem_attr_names3[] = {
219   "Thickness"
220 };
221 
222 const char* elem_attr_names4[] = {
223   "Radius", "Volume"
224 };
225 
226 const char* elem_attr_names5[] = {
227   "Area", "I_1", "I_2", "J", "V_x", "V_y", "V_z"
228 };
229 
230 const char* elem_var_names[] = {"my_stress_xx_1",
231 				"my_stress_yy_1",
232 				"my_stress_zz_1",
233 				"my_stress_xy_1",
234 				"my_stress_yz_1",
235 				"my_stress_zx_1",
236 				"my_stress_xx_2",
237 				"my_stress_yy_2",
238 				"my_stress_zz_2",
239 				"my_stress_xy_2",
240 				"my_stress_yz_2",
241 				"my_stress_zx_2",
242                                 "von_mises_which_is_calculated_the_standard_way_from_stress",
243 				"tension"
244 };
245 
246 const char* nset_var_names[] = {"var_name.xx",
247 				"var_name.yy",
248 				"var_name.zz",
249 				"var_name.xy",
250 				"var_name.yz",
251 				"var_name.zx"};
252 
253 const char* sset_var_names[] = {"stressxx",
254 				"stressyy",
255 				"stresszz",
256 				"stressxy",
257 				"stressyz",
258 				"stresszx"};
259 
260 double edge_attr_values1[] = {
261    1.,  2.,  3.,  5.,  7., 11., 13., 17., 19., 23.,
262   29., 31., 37., 41., 43., 47., 53., 59., 61., 67.
263 };
264 
265 double node_attr_values[] = { 12., 11., 10., 9., 8., 7., 6., 5., 4., 3., 2., 1.};
266 
267 double face_attr_values1[] = {
268   71., 73.
269 };
270 
271 double face_attr_values2[] = {
272   79.
273 };
274 
275 double face_attr_values3[] = {
276   83., 89., 97., 101., 103., 107., 109., 113.
277 };
278 
279 double elem_attr_values1[] = {
280   127., 101.,
281   137., 139.
282 };
283 
284 double elem_attr_values4[] = {
285   .10, 0.0,
286   .11, 0.0,
287   .12, 0.0,
288   .13, 0.0,
289   .14, 0.0,
290   .15, 0.0
291 };
292 
293 double elem_attr_values5[] = { /* 4 elements, 7 attributes/element */
294   1.0,   10.0, 11.0, 12.0,   0.0, 0.0, 1.0,
295   1.1,   10.1, 11.1, 12.1,   1.0, 0.0, 0.0,
296   1.2,   10.2, 11.2, 12.2,   0.0, 1.0, 0.0,
297   1.3,   10.3, 11.3, 12.3,   1.0, 1.0, 1.0
298 };
299 
300 /* ======== Results variables ========= */
301 /*           (2 time steps) */
302 
303 double vals_glo_var[2][3] = {
304   { 36., 37., 38.},
305   { 42., 43., 44.}
306 };
307 
308 double vals_nod_var[2][12] = {
309   { 0.1, 0.8, 0.0, 0.4, 0.3, 0.9, 0.8, 0.5, 0.3, 0.7, 0.4, 0.6 },
310   { 0.7, 0.5, 0.3, 0.5, 0.2, 0.7, 0.9, 0.8, 0.0, 0.2, 0.3, 0.5 }
311 } ;
312 
313 
314 double vals_edge_var1eb1[2][20] = {
315   { 20., 19., 18., 17., 16., 15., 14., 13., 12., 11., 10., 9., 8., 7., 6., 5., 4., 3., 2., 1. },
316   { 21., 20., 19., 18., 17., 16., 15., 14., 13., 12., 11., 10., 9., 8., 7., 6., 5., 4., 3., 2. }
317 };
318 
319 double vals_edge_var2eb1[2][20] = {
320   { 1., 1., 0., 0., 1., 1., 2., 0., 2., 0., 1., 1., 1., 1., 0., 0., 2., 2., 2., 2. },
321   { 1., 1., 0., 0., 1., 1., 2., 0., 2., 0., 1., 1., 1., 1., 0., 0., 2., 2., 2., 2. }
322 };
323 
324 double vals_face_var1fb1[2][2] = {
325   { 0, 1 },
326   { 2, 0 }
327 };
328 
329 double vals_face_var1fb3[2][8] = {
330   { 1, 0, 2, 0, 3, 0, 4, 0 },
331   { 0, 1, 0, 2, 0, 3, 0, 4 }
332 };
333 
334 double vals_elem_var[2][2*6*2] = {
335   { 8.0,  8.0, 8.1, 8.1, 8.2, 8.2, 8.3, 8.3, 8.4, 8.4, 8.5, 8.5, 18.0,  18.0, 18.1, 18.1, 18.2, 18.2, 18.3, 18.3, 18.4, 18.4, 18.5, 18.5 },
336   { -7.0,  -7.0, -7.1, -7.1, -7.2, -7.2, -7.3, -7.3, -7.4, -7.4, -7.5, -7.5, -7.0,  -17.0, -17.1, -17.1, -17.2, -17.2, -17.3, -17.3, -17.4, -17.4, -17.5, -17.5 }
337 };
338 
339 double vals_elem_var1[2][1] = {
340   { 88.8 },
341   { 99.9 }
342 };
343 
344 double vals_tension[2][4] = {
345   { 1000., 2000., 3000., 4000. },
346   { 2000., 4000., 6000., 8000. }
347 };
348 
349 /* 2 time planes, 6 elements, 3 variables */
350 double vals_elem_var2[2][6*3] = {
351   { 1.01, 1.02, 1.03, 2.01, 2.02, 2.03, 3.01, 3.02, 3.03, 4.01, 4.02, 4.03, 5.01, 5.02, 5.03, 6.01, 6.02, 6.03 },
352   {11.01,11.02,11.03,12.01,12.02,12.03,13.01,13.02,13.03,14.01,14.02,14.03,15.01,15.02,15.03,16.01,16.02,16.03 }
353 };
354 
355 double vals_nset_var[2][3*6] = {
356   { 8.0, 8.1, 8.2,
357     7.0, 7.1, 7.2,
358     6.0, 6.1, 6.2,
359     5.0, 5.1, 5.2,
360     4.0, 4.1, 4.2,
361     3.0, 3.1, 3.2},
362   { -8.0, -8.1, -8.2,
363     -7.0, -7.1, -7.2,
364     -6.0, -6.1, -6.2,
365     -5.0, -5.1, -5.2,
366     -4.0, -4.1, -4.2,
367     -3.0, -3.1, -3.2},
368 };
369 
370 double vals_sset_var[2][5*6] = {
371   { 18.0, 18.1, 18.2, 18.3, 18.4,
372     17.0, 17.1, 17.2, 17.3, 17.4,
373     16.0, 16.1, 16.2, 16.3, 16.4,
374     15.0, 15.1, 15.2, 15.3, 15.4,
375     14.0, 14.1, 14.2, 14.3, 14.4,
376     13.0, 13.1, 13.2, 13.3, 13.4},
377   { -18.0, -18.1, -18.2, -18.3, -18.4,
378     -17.0, -17.1, -17.2, -17.3, -17.4,
379     -16.0, -16.1, -16.2, -16.3, -16.4,
380     -15.0, -15.1, -15.2, -15.3, -15.4,
381     -14.0, -14.1, -14.2, -14.3, -14.4,
382     -13.0, -13.1, -13.2, -13.3, -13.4},
383 };
384 
385 double vals_fset_var1fs1[2][2] = {
386   { 1., 3. },
387   { 9., 27. }
388 };
389 
390 #define EXCHECK(funcall,errmsg)\
391   if ( (funcall) < 0 ) \
392     { \
393       fprintf( stderr, errmsg ); \
394       return 1; \
395     }
396 
ex_have_arg(int argc,char * argv[],const char * aname)397 int ex_have_arg( int argc, char* argv[], const char* aname )
398 {
399   int i;
400   for ( i = 0; i < argc; ++i )
401     if ( ! strcmp( argv[i], aname ) )
402       return 1;
403   return 0;
404 }
405 
cCreateEdgeFace(int argc,char * argv[])406 int cCreateEdgeFace( int argc, char* argv[] )
407 {
408   int exoid;
409   int appWordSize = 8;
410   int diskWordSize = 8;
411   int concatBlocks = ex_have_arg( argc, argv, "-pcab" );
412   int concatSets   = ex_have_arg( argc, argv, "-pcset" );
413   int concatResult = ex_have_arg( argc, argv, "-pvpax" );
414   double t;
415   int i;
416 
417   ex_opts(EX_VERBOSE);
418 
419   ex_init_params modelParams = {
420     "CreateEdgeFace Test", /* title */
421     3,  /* num_dim */
422     12, /* num_nodes */
423     20, /* num_edge */
424     1,  /* num_edge_blk */
425     11, /* num_face */
426     3,  /* num_face_blk */
427     14,  /* num_elem */
428     5,  /* num_elem_blk */
429     1,  /* num_node_sets */
430     1,  /* num_edge_sets */
431     1,  /* num_face_sets */
432     2,  /* num_side_sets */
433     2,  /* num_elem_sets */
434     1,  /* num_node_map */
435     1,  /* num_edge_map */
436     1,  /* num_face_map */
437     1,  /* num_elem_map */
438   };
439 
440   ex_block_params blockParams;
441   ex_var_params varParams;
442 
443   blockParams.edge_blk_id         = (int*)malloc(1 * sizeof(INT));
444   blockParams.num_edge_this_blk   = (int*)malloc(1 * sizeof(int));
445   blockParams.num_nodes_per_edge  = (int*)malloc(1 * sizeof(int));
446   blockParams.num_attr_edge       = (int*)malloc(1 * sizeof(int));
447   blockParams.face_blk_id         = (int*)malloc(3 * sizeof(INT));
448   blockParams.num_face_this_blk   = (int*)malloc(3 * sizeof(int));
449   blockParams.num_nodes_per_face  = (int*)malloc(3 * sizeof(int));
450   blockParams.num_attr_face       = (int*)malloc(3 * sizeof(int));
451   blockParams.elem_blk_id         = (int*)malloc(5 * sizeof(INT));
452   blockParams.num_elem_this_blk   = (int*)malloc(5 * sizeof(int));
453   blockParams.num_nodes_per_elem  = (int*)malloc(5 * sizeof(int));
454   blockParams.num_edges_per_elem  = (int*)malloc(5 * sizeof(int));
455   blockParams.num_faces_per_elem  = (int*)malloc(5 * sizeof(int));
456   blockParams.num_attr_elem       = (int*)malloc(5 * sizeof(int));
457 
458   blockParams.edge_type    = (char**)malloc(1 * sizeof(char*));
459   blockParams.edge_type[0] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
460   blockParams.face_type    = (char**)malloc(3 * sizeof(char*));
461   blockParams.face_type[0] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
462   blockParams.face_type[1] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
463   blockParams.face_type[2] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
464   blockParams.elem_type    = (char**)malloc(5 * sizeof(char*));
465   blockParams.elem_type[0] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
466   blockParams.elem_type[1] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
467   blockParams.elem_type[2] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
468   blockParams.elem_type[3] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
469   blockParams.elem_type[4] = (char*)malloc((MAX_STR_LENGTH+1) * sizeof(char));
470 
471   ((INT*)blockParams.edge_blk_id)[0]         = 100;
472   blockParams.num_edge_this_blk[0]   = 20;
473   blockParams.num_nodes_per_edge[0]  = 2;
474   blockParams.num_attr_edge[0]       = 1;
475 
476   ((INT*)blockParams.face_blk_id)[0]         = 500;
477   ((INT*)blockParams.face_blk_id)[1]         = 600;
478   ((INT*)blockParams.face_blk_id)[2]         = 700;
479   blockParams.num_face_this_blk[0]   = 2;
480   blockParams.num_face_this_blk[1]   = 1;
481   blockParams.num_face_this_blk[2]   = 8;
482   blockParams.num_nodes_per_face[0]  = 4;
483   blockParams.num_nodes_per_face[1]  = 4;
484   blockParams.num_nodes_per_face[2]  = 4;
485   blockParams.num_attr_face[0]       = 1;
486   blockParams.num_attr_face[1]       = 1;
487   blockParams.num_attr_face[2]       = 1;
488 
489   ((INT*)blockParams.elem_blk_id)[0]         = 200;
490   ((INT*)blockParams.elem_blk_id)[1]         = 201;
491   ((INT*)blockParams.elem_blk_id)[2]         = 100;
492   ((INT*)blockParams.elem_blk_id)[3]         = 500;
493   ((INT*)blockParams.elem_blk_id)[4]         = 2147483647;
494 
495   blockParams.num_elem_this_blk[0]   = 2;
496   blockParams.num_elem_this_blk[1]   = 1;
497   blockParams.num_elem_this_blk[2]   = 1;
498   blockParams.num_elem_this_blk[3]   = 6;
499   blockParams.num_elem_this_blk[4]   = 4;
500 
501   blockParams.num_nodes_per_elem[0]  = 8;
502   blockParams.num_nodes_per_elem[1]  = 4;
503   blockParams.num_nodes_per_elem[2]  = 4;
504   blockParams.num_nodes_per_elem[3]  = 1;
505   blockParams.num_nodes_per_elem[4]  = 2;
506 
507   blockParams.num_edges_per_elem[0]  = 12;
508   blockParams.num_edges_per_elem[1]  = 0;
509   blockParams.num_edges_per_elem[2]  = 0;
510   blockParams.num_edges_per_elem[3]  = 0;
511   blockParams.num_edges_per_elem[4]  = 0;
512 
513   blockParams.num_faces_per_elem[0]  = 6;
514   blockParams.num_faces_per_elem[1]  = 0;
515   blockParams.num_faces_per_elem[2]  = 0;
516   blockParams.num_faces_per_elem[3]  = 0;
517   blockParams.num_faces_per_elem[4]  = 0;
518 
519   blockParams.num_attr_elem[0]       = 2;
520   blockParams.num_attr_elem[1]       = 0;
521   blockParams.num_attr_elem[2]       = 1;
522   blockParams.num_attr_elem[3]       = 2;
523   blockParams.num_attr_elem[4]       = 7;
524 
525   blockParams.define_maps = 0;
526 
527   strcpy(blockParams.edge_type[0], "EDGE2");
528 
529   strcpy(blockParams.face_type[0], "QUAD4");
530   strcpy(blockParams.face_type[1], "QUAD4");
531   strcpy(blockParams.face_type[2], "QUAD4");
532 
533   strcpy(blockParams.elem_type[0], "HEX8");
534   strcpy(blockParams.elem_type[1], "TET4");
535   strcpy(blockParams.elem_type[2], "SHELL");
536   strcpy(blockParams.elem_type[3], "SPHERE");
537   strcpy(blockParams.elem_type[4], "beam");
538 
539   varParams.edge_var_tab  = (int*)malloc(2 * sizeof(int));
540   varParams.face_var_tab  = (int*)malloc(3 * sizeof(int));
541   varParams.elem_var_tab  = (int*)0;
542   varParams.nset_var_tab  = (int*)0;
543   varParams.eset_var_tab  = (int*)0;
544   varParams.fset_var_tab  = (int*)malloc(1 * sizeof(int));
545   varParams.sset_var_tab  = (int*)0;
546   varParams.elset_var_tab = (int*)0;
547 
548   varParams.num_glob        = 2;
549   varParams.num_node        = 1;
550   varParams.num_edge        = 2;
551   varParams.edge_var_tab[0] = 1;
552   varParams.edge_var_tab[1] = 1;
553   varParams.num_face        = 1;
554   varParams.face_var_tab[0] = 1;
555   varParams.face_var_tab[1] = 1;
556   varParams.face_var_tab[2] = 1;
557   varParams.num_elem        = 1;
558   varParams.num_nset        = 0;
559   varParams.num_eset        = 0;;
560   varParams.num_fset        = 1;
561   varParams.fset_var_tab[0] = 1;
562   varParams.num_sset        = 0;
563   varParams.num_elset       = 0;
564 
565   exoid = ex_create( EX_TEST_FILENAME, EX_CLOBBER|mymode, &appWordSize, &diskWordSize );
566   if ( exoid <= 0 )
567     {
568       fprintf( stderr, "Unable to open \"%s\" for writing.\n", EX_TEST_FILENAME );
569       return 1;
570     }
571 
572   ex_set_max_name_length(exoid, 80);
573 
574   EXCHECK( ex_put_init_ext( exoid, &modelParams ),
575 	   "Unable to initialize database.\n" );
576 
577   /* Add a coordinate frame just to give test coverage... */
578   EXCHECK( ex_put_coordinate_frames(exoid, 2, cf_ids, pt_coords, tags),
579 	   "Unable to output coordinate frame.\n");
580 
581   if ( concatBlocks ) {
582     EXCHECK( ex_put_concat_all_blocks( exoid, &blockParams ),
583 	     "Unable to initialize block params.\n" );
584   } else {
585     int blk;
586     for ( blk = 0; blk < modelParams.num_edge_blk; ++blk ) {
587       EXCHECK( ex_put_block( exoid, EX_EDGE_BLOCK, ((INT*)blockParams.edge_blk_id)[blk], blockParams.edge_type[blk],
588 			     blockParams.num_edge_this_blk[blk], blockParams.num_nodes_per_edge[blk], 0, 0,
589 			     blockParams.num_attr_edge[blk] ), "Unable to write edge block" );
590     }
591     for ( blk = 0; blk < modelParams.num_face_blk; ++blk ) {
592       EXCHECK( ex_put_block( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[blk], blockParams.face_type[blk],
593 			     blockParams.num_face_this_blk[blk], blockParams.num_nodes_per_face[blk], 0, 0,
594 			     blockParams.num_attr_face[blk] ), "Unable to write face block" );
595     }
596     for ( blk = 0; blk < modelParams.num_elem_blk; ++blk ) {
597       EXCHECK( ex_put_block( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[blk], blockParams.elem_type[blk],
598 			     blockParams.num_elem_this_blk[blk], blockParams.num_nodes_per_elem[blk],
599 			     blockParams.num_edges_per_elem[blk], blockParams.num_faces_per_elem[blk],
600 			     blockParams.num_attr_elem[blk] ), "Unable to write elem block" );
601     }
602   }
603 
604   EXCHECK( ex_put_attr_param(exoid, EX_NODAL, 0, 1),
605 	   "Unable to put nodal attributes.\n" );
606 
607   EXCHECK( ex_put_coord( exoid, (void*)coordsX, (void*)coordsY, (void*)coordsZ ),
608 	   "Unable to write coordinates.\n" );
609 
610   EXCHECK( ex_put_coord_names( exoid, (char**)coordsNames ),
611 	   "Unable to write coordinate names.\n" );
612 
613   /*                  =============== Connectivity  ================== */
614   EXCHECK( ex_put_conn( exoid, EX_EDGE_BLOCK, ((INT*)blockParams.edge_blk_id)[0], ebconn1, 0, 0 ),
615 	   "Unable to write edge block connectivity.\n" );
616 
617   EXCHECK( ex_put_conn( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[0], fbconn1, 0, 0 ),
618 	   "Unable to write face block 1 connectivity.\n" );
619   EXCHECK( ex_put_conn( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[1], fbconn2, 0, 0 ),
620 	   "Unable to write face block 2 connectivity.\n" );
621   EXCHECK( ex_put_conn( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[2], fbconn3, 0, 0 ),
622 	   "Unable to write face block 3 connectivity.\n" );
623 
624   EXCHECK( ex_put_conn( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[0], conn1, econn1, fconn1 ),
625 	   "Unable to write elem block 1 connectivity.\n" );
626   EXCHECK( ex_put_conn( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[1], conn2, 0, 0 ),
627 	   "Unable to write elem block 2 connectivity.\n" );
628   EXCHECK( ex_put_conn( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[2], conn3, 0, 0 ),
629 	   "Unable to write elem block 3 connectivity.\n" );
630   EXCHECK( ex_put_conn( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[3], conn4, 0, 0 ),
631 	   "Unable to write elem block 4 connectivity.\n" );
632   EXCHECK( ex_put_conn( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[4], conn5, 0, 0 ),
633 	   "Unable to write elem block 5 connectivity.\n" );
634 
635   EXCHECK( ex_put_names( exoid, EX_EDGE_BLOCK, (char**)edblk_names ), "Unable to write edge block names.\n" );
636   EXCHECK( ex_put_names( exoid, EX_FACE_BLOCK, (char**)fablk_names ), "Unable to write face block names.\n" );
637   EXCHECK( ex_put_names( exoid, EX_ELEM_BLOCK, (char**) eblk_names ), "Unable to write element block names.\n" );
638 
639   /*                  =============== Number Maps   ================== */
640   EXCHECK( ex_put_num_map( exoid, EX_NODE_MAP, 300, nmap1 ),  "Unable to write node map.\n" );
641   EXCHECK( ex_put_num_map( exoid, EX_EDGE_MAP, 800, edmap1 ), "Unable to write edge map.\n" );
642   EXCHECK( ex_put_num_map( exoid, EX_FACE_MAP, 900, famap1 ), "Unable to write face map.\n" );
643   EXCHECK( ex_put_num_map( exoid, EX_ELEM_MAP, 400, emap1 ),  "Unable to write element map.\n" );
644 
645   EXCHECK( ex_put_names( exoid, EX_NODE_MAP, (char**) nmap_names ), "Unable to write node map names.\n" );
646   EXCHECK( ex_put_names( exoid, EX_EDGE_MAP, (char**)edmap_names ), "Unable to write edge map names.\n" );
647   EXCHECK( ex_put_names( exoid, EX_FACE_MAP, (char**)famap_names ), "Unable to write face map names.\n" );
648   EXCHECK( ex_put_names( exoid, EX_ELEM_MAP, (char**) emap_names ), "Unable to write element map names.\n" );
649 
650   /*                  =============== Id Maps   ================== */
651   EXCHECK( ex_put_id_map( exoid, EX_NODE_MAP, nmap2 ),  "Unable to write node id map.\n" );
652   EXCHECK( ex_put_id_map( exoid, EX_EDGE_MAP, edmap1 ), "Unable to write edge id map.\n" );
653   EXCHECK( ex_put_id_map( exoid, EX_FACE_MAP, famap1 ), "Unable to write face id map.\n" );
654   EXCHECK( ex_put_id_map( exoid, EX_ELEM_MAP, emap1 ),  "Unable to write element id map.\n" );
655 
656   /*                 =============== Attribute names ================ */
657   EXCHECK( ex_put_attr_names( exoid, EX_EDGE_BLOCK, ((INT*)blockParams.edge_blk_id)[0], (char**)edge_attr_names1 ),
658 	   "Unable to write edge block 1 attribute names.\n" );
659 
660   EXCHECK( ex_put_attr_names( exoid, EX_NODAL, 0, (char**)node_attr_names),
661 	   "Unable to write nodal attribute names.\n" );
662 
663   EXCHECK( ex_put_attr_names( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[0], (char**)face_attr_names1 ),
664 	   "Unable to write face block 1 attribute names.\n" );
665   EXCHECK( ex_put_attr_names( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[1], (char**)face_attr_names2 ),
666 	   "Unable to write face block 1 attribute names.\n" );
667   EXCHECK( ex_put_attr_names( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[2], (char**)face_attr_names3 ),
668 	   "Unable to write face block 1 attribute names.\n" );
669 
670   EXCHECK( ex_put_attr_names( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[0], (char**)elem_attr_names1 ),
671 	   "Unable to write elem block 1 attribute names.\n" );
672   EXCHECK( ex_put_attr_names( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[2], (char**)elem_attr_names3 ),
673 	   "Unable to write elem block 3 attribute names.\n" );
674   EXCHECK( ex_put_attr_names( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[3], (char**)elem_attr_names4 ),
675 	   "Unable to write elem block 4 attribute names.\n" );
676   EXCHECK( ex_put_attr_names( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[4], (char**)elem_attr_names5 ),
677 	   "Unable to write elem block 5 attribute names.\n" );
678 
679   /*                  =============== Attribute values =============== */
680   EXCHECK( ex_put_attr( exoid, EX_EDGE_BLOCK, ((INT*)blockParams.edge_blk_id)[0], edge_attr_values1 ),
681 	   "Unable to write edge block 1 attribute values.\n" );
682   EXCHECK( ex_put_attr( exoid, EX_NODAL, 0, node_attr_values ),
683 	   "Unable to write node attribute values.\n" );
684 
685   EXCHECK( ex_put_attr( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[0], face_attr_values1 ),
686 	   "Unable to write face block 1 attribute values.\n" );
687   EXCHECK( ex_put_attr( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[1], face_attr_values2 ),
688 	   "Unable to write face block 1 attribute values.\n" );
689   EXCHECK( ex_put_attr( exoid, EX_FACE_BLOCK, ((INT*)blockParams.face_blk_id)[2], face_attr_values3 ),
690 	   "Unable to write face block 1 attribute values.\n" );
691 
692   EXCHECK( ex_put_attr( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[0], elem_attr_values1 ),
693 	   "Unable to write elem block 1 attribute values.\n" );
694   EXCHECK( ex_put_attr( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[2], elem_attr_values1 ),
695 	   "Unable to write elem block 3 attribute values.\n" );
696 
697   for (i=0; i < 6; i++) {
698     elem_attr_values4[2*i+1] = 4.0 / 3.0 * 3.14 * elem_attr_values4[2*i] * elem_attr_values4[2*i] * elem_attr_values4[2*i];
699   }
700   EXCHECK( ex_put_attr( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[3], elem_attr_values4 ),
701 	   "Unable to write elem block 3 attribute values.\n" );
702   EXCHECK( ex_put_attr( exoid, EX_ELEM_BLOCK, ((INT*)blockParams.elem_blk_id)[4], elem_attr_values5 ),
703 	   "Unable to write elem block 4 attribute values.\n" );
704 
705   /*                  =============== Set parameters ================= */
706   /* *** NEW API *** */
707   EXCHECK( ex_put_names( exoid, EX_NODE_SET,  (char**)nset_names ), "Unable to write node set names.\n" );
708   EXCHECK( ex_put_names( exoid, EX_EDGE_SET,  (char**)eset_names ), "Unable to write edge set names.\n" );
709   EXCHECK( ex_put_names( exoid, EX_FACE_SET,  (char**)fset_names ), "Unable to write face set names.\n" );
710   EXCHECK( ex_put_names( exoid, EX_SIDE_SET,  (char**)sset_names ), "Unable to write side set names.\n" );
711   EXCHECK( ex_put_names( exoid, EX_ELEM_SET, (char**)elset_names ), "Unable to write element set names.\n" );
712 
713   if ( concatSets ) {
714     ex_set_specs setParams;
715 
716     setParams.sets_ids            = (int*)malloc(2*sizeof(INT));
717     setParams.num_entries_per_set = (int*)malloc(2*sizeof(int));
718     setParams.num_dist_per_set    = (int*)malloc(2*sizeof(int));
719     setParams.sets_entry_index    = (int*)malloc(2*sizeof(int));
720     setParams.sets_dist_index     = (int*)malloc(2*sizeof(int));
721     setParams.sets_entry_list     = (INT*)malloc(6*sizeof(INT));
722     setParams.sets_extra_list     = (INT*)malloc(6*sizeof(INT));
723     setParams.sets_dist_fact      = (double*)malloc(6*sizeof(double));
724 
725     ((INT*)setParams.sets_ids)[0]            = 1000;
726     ((INT*)setParams.num_entries_per_set)[0] = 3;
727     ((INT*)setParams.num_dist_per_set)[0]    = 0;
728     ((INT*)setParams.sets_entry_index)[0]    = 0;
729     ((INT*)setParams.sets_dist_index)[0]     = 0;
730 
731     {
732       INT* entry_list = setParams.sets_entry_list;
733       entry_list[0] = nset_nodes[0];
734       entry_list[1] = nset_nodes[1];
735       entry_list[2] = nset_nodes[2];
736     }
737 
738     EXCHECK( ex_put_concat_sets( exoid, EX_NODE_SET, &setParams ), "Unable to write node sets.\n" );
739 
740     ((INT*)setParams.sets_ids)[0]            = 1200;
741     ((INT*)setParams.num_entries_per_set)[0] = 6;
742     ((INT*)setParams.num_dist_per_set)[0]    = 6;
743     ((INT*)setParams.sets_entry_index)[0]    = 0;
744     ((INT*)setParams.sets_dist_index)[0]     = 0;
745 
746     {
747       INT* entry_list = setParams.sets_entry_list;
748       INT* extra_list = setParams.sets_extra_list;
749 
750       entry_list[0]     = eset_edges[0];
751       entry_list[1]     = eset_edges[1];
752       entry_list[2]     = eset_edges[2];
753       entry_list[3]     = eset_edges[3];
754       entry_list[4]     = eset_edges[4];
755       entry_list[5]     = eset_edges[5];
756 
757       extra_list[0]     = eset_orient[0];
758       extra_list[1]     = eset_orient[1];
759       extra_list[2]     = eset_orient[2];
760       extra_list[3]     = eset_orient[3];
761       extra_list[4]     = eset_orient[4];
762       extra_list[5]     = eset_orient[5];
763     }
764 
765     memcpy(setParams.sets_dist_fact, eset_df, sizeof(eset_df)/sizeof(eset_df[0]));
766 
767     EXCHECK( ex_put_concat_sets( exoid, EX_EDGE_SET, &setParams ), "Unable to write edge sets.\n" );
768 
769     ((INT*)setParams.sets_ids)[0]            = 1400;
770     ((INT*)setParams.num_entries_per_set)[0] = 2;
771     ((INT*)setParams.num_dist_per_set)[0]    = 0;
772     ((INT*)setParams.sets_entry_index)[0]    = 0;
773     ((INT*)setParams.sets_dist_index)[0]     = 0;
774     {
775       INT *entry_list = setParams.sets_entry_list;
776       INT *extra_list = setParams.sets_extra_list;
777 
778       entry_list[0]     = fset_faces[0];
779       entry_list[1]     = fset_faces[1];
780 
781       extra_list[0]     = fset_orient[0];
782       extra_list[1]     = fset_orient[1];
783     }
784 
785     EXCHECK( ex_put_concat_sets( exoid, EX_FACE_SET, &setParams ), "Unable to write face sets.\n" );
786 
787     ((INT*)setParams.sets_ids)[0]            = 1400;
788     ((INT*)setParams.sets_ids)[1]            = 1441;
789     ((INT*)setParams.num_entries_per_set)[0] = 5;
790     ((INT*)setParams.num_entries_per_set)[1] = 3;
791     ((INT*)setParams.num_dist_per_set)[0]    = 0;
792     ((INT*)setParams.num_dist_per_set)[1]    = 0;
793     ((INT*)setParams.sets_entry_index)[0]    = 0;
794     ((INT*)setParams.sets_entry_index)[5]    = 0;
795     ((INT*)setParams.sets_dist_index)[0]     = 0;
796     memcpy(setParams.sets_entry_list, sset_elems, sizeof(sset_elems)/sizeof(sset_elems[0]));
797     memcpy(setParams.sets_extra_list, sset_sides, sizeof(sset_sides)/sizeof(sset_sides[0]));
798 
799     EXCHECK( ex_put_concat_sets( exoid, EX_SIDE_SET, &setParams ), "Unable to write side sets.\n" );
800 
801     ((INT*)setParams.sets_ids)[0]            = 1800;
802     ((INT*)setParams.sets_ids)[1]            = 1900;
803     ((INT*)setParams.num_entries_per_set)[0] = 1;
804     ((INT*)setParams.num_entries_per_set)[1] = 1;
805     ((INT*)setParams.num_dist_per_set)[0]    = 0;
806     ((INT*)setParams.num_dist_per_set)[1]    = 0;
807     ((INT*)setParams.sets_entry_index)[0]    = 0;
808     ((INT*)setParams.sets_entry_index)[1]    = 1;
809     ((INT*)setParams.sets_dist_index)[0]     = 0;
810     ((INT*)setParams.sets_dist_index)[1]     = 0;
811     memcpy(setParams.sets_entry_list, elset_elems, sizeof(elset_elems)/sizeof(elset_elems[0]));
812 
813     EXCHECK( ex_put_concat_sets( exoid, EX_ELEM_SET, &setParams ), "Unable to write element sets.\n" );
814 
815   } else {
816     EXCHECK( ex_put_set_param( exoid, EX_NODE_SET, 1000, 3, 0 ), "Unable to write node set params.\n" );
817     EXCHECK( ex_put_set( exoid, EX_NODE_SET, 1000, nset_nodes, 0 ), "Unable to write node set.\n" );
818 
819     EXCHECK( ex_put_set_param( exoid, EX_EDGE_SET, 1200, 6, 6 ), "Unable to write edge set params.\n" );
820     EXCHECK( ex_put_set( exoid, EX_EDGE_SET, 1200, eset_edges, eset_orient ), "Unable to write edge set.\n" );
821     EXCHECK( ex_put_set_dist_fact( exoid, EX_EDGE_SET, 1200, eset_df ), "Unable to write edge set dist factors.\n" );
822 
823     EXCHECK( ex_put_set_param( exoid, EX_FACE_SET, 1400, 2, 0 ), "Unable to write face set params.\n" );
824     EXCHECK( ex_put_set( exoid, EX_FACE_SET, 1400, fset_faces, fset_orient ), "Unable to write face set.\n" );
825 
826     EXCHECK( ex_put_set_param( exoid, EX_SIDE_SET, 1600, 5, 0 ), "Unable to write side set params.\n" );
827     EXCHECK( ex_put_set( exoid, EX_SIDE_SET, 1600, sset_elems, sset_sides ), "Unable to write side set.\n" );
828 
829     EXCHECK( ex_put_set_param( exoid, EX_SIDE_SET, 1661, 3, 0 ), "Unable to write side set params.\n" );
830     EXCHECK( ex_put_set( exoid, EX_SIDE_SET, 1661, sset1_elems, sset1_sides ), "Unable to write side set.\n" );
831 
832     EXCHECK( ex_put_set_param( exoid, EX_ELEM_SET, 1800, 1, 0 ), "Unable to write element set 1 params.\n" );
833     EXCHECK( ex_put_set( exoid, EX_ELEM_SET, 1800, elset_elems + 0, 0 ), "Unable to write element set 1.\n" );
834     EXCHECK( ex_put_set_param( exoid, EX_ELEM_SET, 1900, 1, 0 ), "Unable to write element set 2 params.\n" );
835     EXCHECK( ex_put_set( exoid, EX_ELEM_SET, 1900, elset_elems + 1, 0 ), "Unable to write element set 2.\n" );
836   }
837 
838   /*                  =============== Result variable params ========= */
839   if ( concatResult ) {
840     EXCHECK( ex_put_all_var_param_ext( exoid, &varParams ),
841 	     "Unable to write result variable parameter information.\n" );
842   } else {
843     EXCHECK( ex_put_variable_param( exoid, EX_GLOBAL, 3 ),
844 	     "Unable to write global result variable parameters.\n" );
845     EXCHECK( ex_put_variable_param( exoid, EX_NODAL, 1 ),
846 	     "Unable to write nodal result variable parameters.\n" );
847     EXCHECK( ex_put_variable_param( exoid, EX_ELEM_BLOCK, 14 ),
848 	     "Unable to write element result variable parameters.\n" );
849     EXCHECK( ex_put_variable_param( exoid, EX_EDGE_BLOCK, 2 ),
850 	     "Unable to write edge result variable parameters.\n" );
851     EXCHECK( ex_put_variable_param( exoid, EX_FACE_BLOCK, 1 ),
852 	     "Unable to write face result variable parameters.\n" );
853     EXCHECK( ex_put_variable_param( exoid, EX_FACE_SET, 1 ),
854 	     "Unable to write faceset result variable parameters.\n" );
855     EXCHECK( ex_put_variable_param( exoid, EX_SIDE_SET, 6 ),
856 	     "Unable to write sideset result variable parameters.\n" );
857     EXCHECK( ex_put_variable_param( exoid, EX_NODE_SET, 6 ),
858 	     "Unable to write nodeset result variable parameters.\n" );
859   }
860 
861   /*                  =============== Result variable names ========== */
862   /* *** NEW API *** */
863   EXCHECK( ex_put_variable_name( exoid, EX_GLOBAL,     1, "A_vector_X" ), "Unable to write variable name.\n" );
864   EXCHECK( ex_put_variable_name( exoid, EX_GLOBAL,     2, "A_vector_Y" ), "Unable to write variable name.\n" );
865   EXCHECK( ex_put_variable_name( exoid, EX_GLOBAL,     3, "A_vector_Z" ), "Unable to write variable name.\n" );
866   EXCHECK( ex_put_variable_name( exoid, EX_NODAL,      1, "RHO" ), "Unable to write variable name.\n" );
867   EXCHECK( ex_put_variable_name( exoid, EX_EDGE_BLOCK, 1, "GAMMA1" ), "Unable to write variable name.\n" );
868   EXCHECK( ex_put_variable_name( exoid, EX_EDGE_BLOCK, 2, "GAMMA2" ), "Unable to write variable name.\n" );
869   EXCHECK( ex_put_variable_name( exoid, EX_FACE_BLOCK, 1, "PHI" ), "Unable to write variable name.\n" );
870   EXCHECK( ex_put_variable_names( exoid, EX_ELEM_BLOCK, 14, (char**)elem_var_names), "Unable to write variable name.\n" );
871   EXCHECK( ex_put_variable_names( exoid, EX_SIDE_SET,   6, (char**)sset_var_names), "Unable to write variable name.\n" );
872   EXCHECK( ex_put_variable_names( exoid, EX_NODE_SET,   6, (char**)nset_var_names), "Unable to write variable name.\n" );
873   EXCHECK( ex_put_variable_name( exoid, EX_FACE_SET,   1, "PHI0" ), "Unable to write variable name.\n" );
874 
875   /*                  =============== Result variable values ========= */
876   t = 1.;
877   /* *** NEW API *** */
878   EXCHECK( ex_put_time( exoid, 1, &t ), "Unable to write time value.\n" );
879   EXCHECK( ex_put_var( exoid, 1, EX_GLOBAL, 1, 0/*N/A*/, 2,      vals_glo_var[0] ), "Unable to write global var 1.\n" );
880   EXCHECK( ex_put_var( exoid, 1, EX_EDGE_BLOCK, 1, 100, 20, vals_edge_var1eb1[0] ), "Unable to write edge block 1 var 1.\n" );
881   EXCHECK( ex_put_var( exoid, 1, EX_EDGE_BLOCK, 2, 100, 20, vals_edge_var2eb1[0] ), "Unable to write edge block 1 var 2.\n" );
882   EXCHECK( ex_put_var( exoid, 1, EX_FACE_BLOCK, 1, 500,  2, vals_face_var1fb1[0] ), "Unable to write face block 1 var 1.\n" );
883   EXCHECK( ex_put_var( exoid, 1, EX_FACE_BLOCK, 1, 700,  8, vals_face_var1fb3[0] ), "Unable to write face block 3 var 1.\n" );
884 
885   EXCHECK( ex_put_var( exoid, 1, EX_ELEM_BLOCK, 13,  201,  1, &vals_elem_var1[0] ), "Unable to write elem block 1 var 1.\n" );
886   EXCHECK( ex_put_var( exoid, 1, EX_ELEM_BLOCK, 14,  2147483647,  4, &vals_tension[0] ), "Unable to write elem block 1 var 1.\n" );
887   for(i=0; i < 6; i++){
888     /* There are 2 elements in the block and 12 variables (a composite tensor x 2) */
889     EXCHECK( ex_put_var( exoid, 1, EX_ELEM_BLOCK, i+1,  200,  2, &vals_elem_var[0][2*i] ), "Unable to write elem block 1 var 1.\n" );
890     EXCHECK( ex_put_var( exoid, 1, EX_ELEM_BLOCK, i+7,  200,  2, &vals_elem_var[0][12+2*i] ), "Unable to write elem block 1 var 1.\n" );
891     EXCHECK( ex_put_var( exoid, 1, EX_NODE_SET,   i+1, 1000,  3, &vals_nset_var[0][3*i] ), "Unable to write elem block 1 var 1.\n" );
892     EXCHECK( ex_put_var( exoid, 1, EX_SIDE_SET,   i+1, 1600,  5, &vals_sset_var[0][5*i] ), "Unable to write elem block 1 var 1.\n" );
893   }
894 
895   EXCHECK( ex_put_var( exoid, 1, EX_FACE_SET,  1, 1400,  2, vals_fset_var1fs1[0] ), "Unable to write face set 1 var 1.\n" );
896 
897   t = 2.;
898   EXCHECK( ex_put_time( exoid, 2, &t ), "Unable to write time value.\n" );
899   EXCHECK( ex_put_var( exoid, 2, EX_GLOBAL, 1, 0/*N/A*/,  2,      vals_glo_var[1] ), "Unable to write global var 1.\n" );
900   EXCHECK( ex_put_var( exoid, 2, EX_EDGE_BLOCK, 1, 100,  20, vals_edge_var1eb1[1] ), "Unable to write edge block 1 var 1.\n" );
901   EXCHECK( ex_put_var( exoid, 2, EX_EDGE_BLOCK, 2, 100,  20, vals_edge_var2eb1[1] ), "Unable to write edge block 1 var 2.\n" );
902   EXCHECK( ex_put_var( exoid, 2, EX_FACE_BLOCK, 1, 500,   2, vals_face_var1fb1[1] ), "Unable to write face block 1 var 1.\n" );
903   EXCHECK( ex_put_var( exoid, 2, EX_FACE_BLOCK, 1, 700,   8, vals_face_var1fb3[1] ), "Unable to write face block 3 var 1.\n" );
904 
905   EXCHECK( ex_put_var( exoid, 2, EX_ELEM_BLOCK, 13,  201,  1, &vals_elem_var1[1] ), "Unable to write elem block 1 var 1.\n" );
906   EXCHECK( ex_put_var( exoid, 2, EX_ELEM_BLOCK, 14,  2147483647,  4, &vals_tension[1] ), "Unable to write elem block 1 var 1.\n" );
907   for(i=0; i < 6; i++){
908     EXCHECK( ex_put_var( exoid, 2, EX_ELEM_BLOCK, i+1,  200,  2, &vals_elem_var[1][2*i] ), "Unable to write elem block 1 var 1.\n" );
909     EXCHECK( ex_put_var( exoid, 2, EX_ELEM_BLOCK, i+7,  200,  2, &vals_elem_var[1][12+2*i] ), "Unable to write elem block 1 var 1.\n" );
910     EXCHECK( ex_put_var( exoid, 2, EX_NODE_SET,   i+1, 1000,  3, &vals_nset_var[1][3*i] ), "Unable to write elem block 1 var 1.\n" );
911     EXCHECK( ex_put_var( exoid, 2, EX_SIDE_SET,   i+1, 1600,  5, &vals_sset_var[1][5*i] ), "Unable to write elem block 1 var 1.\n" );
912   }
913   EXCHECK( ex_put_var( exoid, 2, EX_FACE_SET,  1, 1400,  2, vals_fset_var1fs1[1] ), "Unable to write face set 1 var 1.\n" );
914 
915   EXCHECK( ex_put_nodal_var( exoid, 1, 1, 12, vals_nod_var[0] ), "Unable to write nodal var 1.\n" );
916   EXCHECK( ex_put_nodal_var( exoid, 2, 1, 12, vals_nod_var[1] ), "Unable to write nodal var 1.\n" );
917 
918   EXCHECK( ex_close( exoid ),
919 	   "Unable to close database.\n" );
920 
921   return 0;
922 }
923 
924 #if !defined(USING_CMAKE)
main(int argc,char * argv[])925 int main( int argc, char* argv[] )
926 {
927   return cCreateEdgeFace(argc, argv);
928 }
929 #endif
930