PageRenderTime 57ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/contrib/exodusii/5.22b/exodus/cbind/test/testrd_nc.c

https://bitbucket.org/vijaysm/libmesh
C | 897 lines | 580 code | 204 blank | 113 comment | 81 complexity | c4af9c15d9d9353d7e4796a6a816dda1 MD5 | raw file
Possible License(s): LGPL-2.1, BSD-3-Clause, GPL-3.0, MPL-2.0-no-copyleft-exception, GPL-2.0
  1. /*
  2. * Copyright (c) 2005 Sandia Corporation. Under the terms of Contract
  3. * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Governement
  4. * retains certain rights in this software.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions are
  8. * met:
  9. *
  10. * * Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. *
  13. * * Redistributions in binary form must reproduce the above
  14. * copyright notice, this list of conditions and the following
  15. * disclaimer in the documentation and/or other materials provided
  16. * with the distribution.
  17. *
  18. * * Neither the name of Sandia Corporation nor the names of its
  19. * contributors may be used to endorse or promote products derived
  20. * from this software without specific prior written permission.
  21. *
  22. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  23. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  24. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  25. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  26. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  27. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  28. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  29. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  30. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  31. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  32. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33. *
  34. */
  35. /*****************************************************************************
  36. *
  37. * testrd - read exodus file test.exo created by testwt
  38. *
  39. * author - Sandia National Laboratories
  40. * Larry A. Schoof - Original
  41. *
  42. *
  43. * environment - UNIX
  44. *
  45. * entry conditions -
  46. * input parameters:
  47. * int exoid exodus file id
  48. *
  49. * exit conditions -
  50. *
  51. * revision history -
  52. *
  53. *
  54. *****************************************************************************/
  55. #include <stdlib.h>
  56. #include <stdio.h>
  57. #include "netcdf.h"
  58. #include "exodusII.h"
  59. /* #include "drmd.h" */
  60. int main (int argc, char **argv)
  61. {
  62. int exoid, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets;
  63. int num_side_sets, error;
  64. int i, j, k, node_ctr;
  65. int *elem_map, *connect, *node_list, *node_ctr_list, *elem_list, *side_list;
  66. int *ids;
  67. int *num_nodes_per_set, *num_elem_per_set;
  68. int *num_df_per_set;
  69. int *node_ind, *elem_ind, *df_ind, num_qa_rec, num_info;
  70. int num_glo_vars, num_nod_vars, num_ele_vars;
  71. int *truth_tab;
  72. int num_time_steps;
  73. int *num_elem_in_block, *num_nodes_per_elem, *num_attr;
  74. int num_nodes_in_set, num_elem_in_set;
  75. int num_sides_in_set, num_df_in_set;
  76. int list_len = 0;
  77. int elem_list_len = 0;
  78. int node_list_len = 0;
  79. int df_list_len = 0;
  80. int node_num, time_step, var_index, beg_time, end_time, elem_num;
  81. int CPU_word_size,IO_word_size;
  82. int num_props, prop_value, *prop_values;
  83. int idum;
  84. float time_value, *time_values, *var_values;
  85. float *xyz;
  86. float *attrib, *dist_fact;
  87. float version, fdum;
  88. char *coord_names[3], *qa_record[2][4], *info[3], *var_names[3];
  89. char title[MAX_LINE_LENGTH+1], elem_type[MAX_STR_LENGTH+1];
  90. char *cdum = 0;
  91. char *prop_names[3];
  92. CPU_word_size = 0; /* sizeof(float) */
  93. IO_word_size = 0; /* use what is stored in file */
  94. ex_opts (EX_VERBOSE | EX_ABORT );
  95. /* open EXODUS II files */
  96. exoid = ex_open ("test.exo", /* filename path */
  97. EX_READ, /* access mode = READ */
  98. &CPU_word_size, /* CPU word size */
  99. &IO_word_size, /* IO word size */
  100. &version); /* ExodusII library version */
  101. printf ("\nafter ex_open\n");
  102. if (exoid < 0) exit(1);
  103. printf ("test.exo is an EXODUSII file; version %4.2f\n",
  104. version);
  105. /* printf (" CPU word size %1d\n",CPU_word_size); */
  106. printf (" I/O word size %1d\n",IO_word_size);
  107. ex_inquire(exoid,EX_INQ_API_VERS, &idum, &version, cdum);
  108. printf ("EXODUSII API; version %4.2f\n", version);
  109. /* ncopts = NC_VERBOSE; */
  110. /* read database parameters */
  111. error = ex_get_init (exoid, title, &num_dim, &num_nodes, &num_elem,
  112. &num_elem_blk, &num_node_sets, &num_side_sets);
  113. printf ("after ex_get_init, error = %3d\n", error);
  114. printf ("database parameters:\n");
  115. printf ("title = '%s'\n",title);
  116. printf ("num_dim = %3d\n",num_dim);
  117. printf ("num_nodes = %3d\n",num_nodes);
  118. printf ("num_elem = %3d\n",num_elem);
  119. printf ("num_elem_blk = %3d\n",num_elem_blk);
  120. printf ("num_node_sets = %3d\n",num_node_sets);
  121. printf ("num_side_sets = %3d\n",num_side_sets);
  122. /* read nodal coordinates values and names from database */
  123. xyz = (float *) calloc(num_nodes, sizeof(float));
  124. printf ("\nafter ex_get_coord, error = %3d\n", error);
  125. error = ex_get_coord (exoid, xyz, NULL, NULL);
  126. printf ("\nafter ex_get_coord (x), error = %3d\n", error);
  127. printf ("x coords = \n");
  128. for (i=0; i<num_nodes; i++)
  129. {
  130. printf ("%5.1f\n", xyz[i]);
  131. }
  132. error = ex_get_coord (exoid, NULL, xyz, NULL);
  133. printf ("\nafter ex_get_coord (y), error = %3d\n", error);
  134. printf ("y coords = \n");
  135. for (i=0; i<num_nodes; i++)
  136. {
  137. printf ("%5.1f\n", xyz[i]);
  138. }
  139. error = ex_get_coord (exoid, NULL, NULL, xyz);
  140. printf ("\nafter ex_get_coord (z), error = %3d\n", error);
  141. if (num_dim >= 3)
  142. {
  143. printf ("z coords = \n");
  144. for (i=0; i<num_nodes; i++)
  145. {
  146. printf ("%5.1f\n", xyz[i]);
  147. }
  148. }
  149. /*
  150. error = ex_get_1_coord (exoid, 2, x, y, z);
  151. printf ("\nafter ex_get_1_coord, error = %3d\n", error);
  152. printf ("x coord of node 2 = \n");
  153. printf ("%f \n", x[0]);
  154. printf ("y coord of node 2 = \n");
  155. printf ("%f \n", y[0]);
  156. */
  157. free (xyz);
  158. for (i=0; i<num_dim; i++)
  159. {
  160. coord_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  161. }
  162. error = ex_get_coord_names (exoid, coord_names);
  163. printf ("\nafter ex_get_coord_names, error = %3d\n", error);
  164. printf ("x coord name = '%s'\n", coord_names[0]);
  165. printf ("y coord name = '%s'\n", coord_names[1]);
  166. for (i=0; i<num_dim; i++)
  167. free(coord_names[i]);
  168. /* read element order map */
  169. elem_map = (int *) calloc(num_elem, sizeof(int));
  170. error = ex_get_map (exoid, elem_map);
  171. printf ("\nafter ex_get_map, error = %3d\n", error);
  172. for (i=0; i<num_elem; i++)
  173. {
  174. printf ("elem_map(%d) = %d \n", i, elem_map[i]);
  175. }
  176. free (elem_map);
  177. /* read element block parameters */
  178. ids = (int *) calloc(num_elem_blk, sizeof(int));
  179. num_elem_in_block = (int *) calloc(num_elem_blk, sizeof(int));
  180. num_nodes_per_elem = (int *) calloc(num_elem_blk, sizeof(int));
  181. num_attr = (int *) calloc(num_elem_blk, sizeof(int));
  182. error = ex_get_elem_blk_ids (exoid, ids);
  183. printf ("\nafter ex_get_elem_blk_ids, error = %3d\n", error);
  184. for (i=0; i<num_elem_blk; i++)
  185. {
  186. error = ex_get_elem_block (exoid, ids[i], elem_type,
  187. &(num_elem_in_block[i]),
  188. &(num_nodes_per_elem[i]), &(num_attr[i]));
  189. printf ("\nafter ex_get_elem_block, error = %d\n", error);
  190. printf ("element block id = %2d\n",ids[i]);
  191. printf ("element type = '%s'\n", elem_type);
  192. printf ("num_elem_in_block = %2d\n",num_elem_in_block[i]);
  193. printf ("num_nodes_per_elem = %2d\n",num_nodes_per_elem[i]);
  194. printf ("num_attr = %2d\n",num_attr[i]);
  195. }
  196. /* read element block properties */
  197. error = ex_inquire (exoid, EX_INQ_EB_PROP, &num_props, &fdum, cdum);
  198. printf ("\nafter ex_inquire, error = %d\n", error);
  199. printf ("\nThere are %2d properties for each element block\n", num_props);
  200. for (i=0; i<num_props; i++)
  201. {
  202. prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  203. }
  204. error = ex_get_prop_names(exoid,EX_ELEM_BLOCK,prop_names);
  205. printf ("after ex_get_prop_names, error = %d\n", error);
  206. for (i=0; i<num_props; i++)
  207. {
  208. for (j=0; j<num_elem_blk; j++)
  209. {
  210. error = ex_get_prop(exoid, EX_ELEM_BLOCK, ids[j], prop_names[i],
  211. &prop_value);
  212. if (error == 0)
  213. printf ("element block %2d, property(%2d): '%s'= %5d\n",
  214. j+1, i+1, prop_names[i], prop_value);
  215. else
  216. printf ("after ex_get_prop, error = %d\n", error);
  217. }
  218. }
  219. for (i=0; i<num_props; i++)
  220. free(prop_names[i]);
  221. /* read element connectivity */
  222. for (i=0; i<num_elem_blk; i++)
  223. {
  224. connect = (int *) calloc((num_nodes_per_elem[i] * num_elem_in_block[i]),
  225. sizeof(int));
  226. error = ex_get_elem_conn (exoid, ids[i], connect);
  227. printf ("\nafter ex_get_elem_conn, error = %d\n", error);
  228. printf ("connect array for elem block %2d\n", ids[i]);
  229. for (j=0; j<num_nodes_per_elem[i]; j++)
  230. {
  231. printf ("%3d\n", connect[j]);
  232. }
  233. /*
  234. error = ex_get_1_elem_conn (exoid, 1, ids[i], connect);
  235. printf ("\nafter ex_get_elem_conn, error = %d\n", error);
  236. printf ("node list for first element of element block %d \n ", ids[i]);
  237. for (j=0; j<num_nodes_per_elem[i]; j++)
  238. {
  239. printf ("%d \n", connect[j]);
  240. }
  241. */
  242. free (connect);
  243. }
  244. /* read element block attributes */
  245. for (i=0; i<num_elem_blk; i++)
  246. {
  247. attrib = (float *) calloc(num_attr[i]*num_elem_in_block[i],sizeof(float));
  248. error = ex_get_elem_attr (exoid, ids[i], attrib);
  249. printf ("\n after ex_get_elem_attr, error = %d\n", error);
  250. if (error == 0)
  251. printf ("element block %d attributes = %6.4f\n", ids[i], *attrib);
  252. free (attrib);
  253. }
  254. free (ids);
  255. free (num_nodes_per_elem);
  256. free (num_attr);
  257. /* read individual node sets */
  258. ids = (int *) calloc(num_node_sets, sizeof(int));
  259. error = ex_get_node_set_ids (exoid, ids);
  260. printf ("\nafter ex_get_node_set_ids, error = %3d\n", error);
  261. for (i=0; i<num_node_sets; i++)
  262. {
  263. error = ex_get_node_set_param (exoid, ids[i],
  264. &num_nodes_in_set, &num_df_in_set);
  265. printf ("\nafter ex_get_node_set_param, error = %3d\n", error);
  266. printf ("\nnode set %2d parameters: \n", ids[i]);
  267. printf ("num_nodes = %2d\n", num_nodes_in_set);
  268. node_list = (int *) calloc(num_nodes_in_set, sizeof(int));
  269. dist_fact = (float *) calloc(num_nodes_in_set, sizeof(float));
  270. error = ex_get_node_set (exoid, ids[i], node_list);
  271. printf ("\nafter ex_get_node_set, error = %3d\n", error);
  272. if (num_df_in_set > 0)
  273. {
  274. error = ex_get_node_set_dist_fact (exoid, ids[i], dist_fact);
  275. printf ("\nafter ex_get_node_set_dist_fact, error = %3d\n", error);
  276. }
  277. printf ("\nnode list for node set %2d\n", ids[i]);
  278. for (j=0; j<num_nodes_in_set; j++)
  279. {
  280. printf ("%3d\n", node_list[j]);
  281. }
  282. if (num_df_in_set > 0)
  283. {
  284. printf ("dist factors for node set %2d\n", ids[i]);
  285. for (j=0; j<num_nodes_in_set; j++)
  286. {
  287. printf ("%5.2f\n", dist_fact[j]);
  288. }
  289. }
  290. else
  291. printf ("no dist factors for node set %2d\n", ids[i]);
  292. free (node_list);
  293. free (dist_fact);
  294. }
  295. free(ids);
  296. /* read node set properties */
  297. error = ex_inquire (exoid, EX_INQ_NS_PROP, &num_props, &fdum, cdum);
  298. printf ("\nafter ex_inquire, error = %d\n", error);
  299. printf ("\nThere are %2d properties for each node set\n", num_props);
  300. for (i=0; i<num_props; i++)
  301. {
  302. prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  303. }
  304. prop_values = (int *) calloc (num_node_sets, sizeof(int));
  305. error = ex_get_prop_names(exoid,EX_NODE_SET,prop_names);
  306. printf ("after ex_get_prop_names, error = %d\n", error);
  307. for (i=0; i<num_props; i++)
  308. {
  309. error = ex_get_prop_array(exoid, EX_NODE_SET, prop_names[i],
  310. prop_values);
  311. if (error == 0)
  312. for (j=0; j<num_node_sets; j++)
  313. printf ("node set %2d, property(%2d): '%s'= %5d\n",
  314. j+1, i+1, prop_names[i], prop_values[j]);
  315. else
  316. printf ("after ex_get_prop_array, error = %d\n", error);
  317. }
  318. for (i=0; i<num_props; i++)
  319. free(prop_names[i]);
  320. free(prop_values);
  321. /* read concatenated node sets; this produces the same information as
  322. * the above code which reads individual node sets
  323. */
  324. error = ex_inquire (exoid, EX_INQ_NODE_SETS, &num_node_sets, &fdum, cdum);
  325. printf ("\nafter ex_inquire, error = %3d\n",error);
  326. ids = (int *) calloc(num_node_sets, sizeof(int));
  327. num_nodes_per_set = (int *) calloc(num_node_sets, sizeof(int));
  328. num_df_per_set = (int *) calloc(num_node_sets, sizeof(int));
  329. node_ind = (int *) calloc(num_node_sets, sizeof(int));
  330. df_ind = (int *) calloc(num_node_sets, sizeof(int));
  331. error = ex_inquire (exoid, EX_INQ_NS_NODE_LEN, &list_len, &fdum, cdum);
  332. printf ("\nafter ex_inquire: EX_INQ_NS_NODE_LEN = %d, error = %3d\n",
  333. list_len, error);
  334. node_list = (int *) calloc(list_len, sizeof(int));
  335. error = ex_inquire (exoid, EX_INQ_NS_DF_LEN, &list_len, &fdum, cdum);
  336. printf ("\nafter ex_inquire: EX_INQ_NS_DF_LEN = %d, error = %3d\n",
  337. list_len, error);
  338. dist_fact = (float *) calloc(list_len, sizeof(float));
  339. error = ex_get_concat_node_sets (exoid,ids,num_nodes_per_set,num_df_per_set,
  340. node_ind, df_ind, node_list, dist_fact);
  341. printf ("\nafter ex_get_concat_node_sets, error = %3d\n", error);
  342. printf ("\nconcatenated node set info\n");
  343. printf ("ids = \n");
  344. for (i=0; i<num_node_sets; i++) printf ("%3d\n", ids[i]);
  345. printf ("num_nodes_per_set = \n");
  346. for (i=0; i<num_node_sets; i++) printf ("%3d\n", num_nodes_per_set[i]);
  347. printf ("node_ind = \n");
  348. for (i=0; i<num_node_sets; i++) printf ("%3d\n", node_ind[i]);
  349. printf ("node_list = \n");
  350. for (i=0; i<list_len; i++) printf ("%3d\n", node_list[i]);
  351. printf ("dist_fact = \n");
  352. for (i=0; i<list_len; i++) printf ("%5.3f\n", dist_fact[i]);
  353. free (ids);
  354. free (num_nodes_per_set);
  355. free (df_ind);
  356. free (node_ind);
  357. free (num_df_per_set);
  358. free (node_list);
  359. free (dist_fact);
  360. /* read individual side sets */
  361. ids = (int *) calloc(num_side_sets, sizeof(int));
  362. error = ex_get_side_set_ids (exoid, ids);
  363. printf ("\nafter ex_get_side_set_ids, error = %3d\n", error);
  364. for (i=0; i<num_side_sets; i++)
  365. {
  366. error = ex_get_side_set_param (exoid, ids[i], &num_sides_in_set,
  367. &num_df_in_set);
  368. printf ("\nafter ex_get_side_set_param, error = %3d\n", error);
  369. printf ("side set %2d parameters:\n",ids[i]);
  370. printf ("num_sides = %3d\n",num_sides_in_set);
  371. printf ("num_dist_factors = %3d\n", num_df_in_set);
  372. /* Note: The # of elements is same as # of sides! */
  373. num_elem_in_set = num_sides_in_set;
  374. elem_list = (int *) calloc(num_elem_in_set, sizeof(int));
  375. side_list = (int *) calloc(num_sides_in_set, sizeof(int));
  376. node_ctr_list = (int *) calloc(num_elem_in_set, sizeof(int));
  377. node_list = (int *) calloc(num_elem_in_set*21, sizeof(int));
  378. dist_fact = (float *) calloc(num_df_in_set, sizeof(float));
  379. error = ex_get_side_set (exoid, ids[i], elem_list, side_list);
  380. printf ("\nafter ex_get_side_set, error = %3d\n", error);
  381. error = ex_get_side_set_node_list (exoid, ids[i], node_ctr_list,
  382. node_list);
  383. printf ("\nafter ex_get_side_set_node_list, error = %3d\n", error);
  384. if (num_df_in_set > 0)
  385. {
  386. error = ex_get_side_set_dist_fact (exoid, ids[i], dist_fact);
  387. printf ("\nafter ex_get_side_set_dist_fact, error = %3d\n", error);
  388. }
  389. printf ("element list for side set %2d\n", ids[i]);
  390. for (j=0; j<num_elem_in_set; j++)
  391. {
  392. printf ("%3d\n", elem_list[j]);
  393. }
  394. printf ("side list for side set %2d\n", ids[i]);
  395. for (j=0; j<num_sides_in_set; j++)
  396. {
  397. printf ("%3d\n", side_list[j]);
  398. }
  399. node_ctr = 0;
  400. printf ("node list for side set %2d\n", ids[i]);
  401. for (k=0; k<num_elem_in_set; k++)
  402. {
  403. for (j=0; j<node_ctr_list[k]; j++)
  404. {
  405. printf ("%3d\n", node_list[node_ctr+j]);
  406. }
  407. node_ctr += node_ctr_list[k];
  408. }
  409. if (num_df_in_set > 0)
  410. {
  411. printf ("dist factors for side set %2d\n", ids[i]);
  412. for (j=0; j<num_df_in_set; j++)
  413. {
  414. printf ("%5.3f\n", dist_fact[j]);
  415. }
  416. }
  417. else
  418. printf ("no dist factors for side set %2d\n", ids[i]);
  419. free (elem_list);
  420. free (side_list);
  421. free (node_ctr_list);
  422. free (node_list);
  423. free (dist_fact);
  424. }
  425. /* read side set properties */
  426. error = ex_inquire (exoid, EX_INQ_SS_PROP, &num_props, &fdum, cdum);
  427. printf ("\nafter ex_inquire, error = %d\n", error);
  428. printf ("\nThere are %2d properties for each side set\n", num_props);
  429. for (i=0; i<num_props; i++)
  430. {
  431. prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  432. }
  433. error = ex_get_prop_names(exoid,EX_SIDE_SET,prop_names);
  434. printf ("after ex_get_prop_names, error = %d\n", error);
  435. for (i=0; i<num_props; i++)
  436. {
  437. for (j=0; j<num_side_sets; j++)
  438. {
  439. error = ex_get_prop(exoid, EX_SIDE_SET, ids[j], prop_names[i],
  440. &prop_value);
  441. if (error == 0)
  442. printf ("side set %2d, property(%2d): '%s'= %5d\n",
  443. j+1, i+1, prop_names[i], prop_value);
  444. else
  445. printf ("after ex_get_prop, error = %d\n", error);
  446. }
  447. }
  448. for (i=0; i<num_props; i++)
  449. free(prop_names[i]);
  450. free (ids);
  451. error = ex_inquire (exoid, EX_INQ_SIDE_SETS, &num_side_sets, &fdum, cdum);
  452. printf ("\nafter ex_inquire: EX_INQ_SIDE_SETS = %d, error = %d\n",
  453. num_side_sets, error);
  454. if (num_side_sets > 0)
  455. {
  456. error = ex_inquire(exoid, EX_INQ_SS_ELEM_LEN, &elem_list_len, &fdum, cdum);
  457. printf ("\nafter ex_inquire: EX_INQ_SS_ELEM_LEN = %d, error = %d\n",
  458. elem_list_len, error);
  459. error = ex_inquire(exoid, EX_INQ_SS_NODE_LEN, &node_list_len, &fdum, cdum);
  460. printf ("\nafter ex_inquire: EX_INQ_SS_NODE_LEN = %d, error = %d\n",
  461. node_list_len, error);
  462. error = ex_inquire(exoid, EX_INQ_SS_DF_LEN, &df_list_len, &fdum, cdum);
  463. printf ("\nafter ex_inquire: EX_INQ_SS_DF_LEN = %d, error = %d\n",
  464. df_list_len, error);
  465. }
  466. /* read concatenated side sets; this produces the same information as
  467. * the above code which reads individual side sets
  468. */
  469. /* concatenated side set read */
  470. ids = (int *) calloc(num_side_sets, sizeof(int));
  471. num_elem_per_set = (int *) calloc(num_side_sets, sizeof(int));
  472. num_df_per_set = (int *) calloc(num_side_sets, sizeof(int));
  473. elem_ind = (int *) calloc(num_side_sets, sizeof(int));
  474. df_ind = (int *) calloc(num_side_sets, sizeof(int));
  475. elem_list = (int *) calloc(elem_list_len, sizeof(int));
  476. side_list = (int *) calloc(elem_list_len, sizeof(int));
  477. dist_fact = (float *) calloc(df_list_len, sizeof(float));
  478. error = ex_get_concat_side_sets (exoid, ids, num_elem_per_set,
  479. num_df_per_set, elem_ind, df_ind,
  480. elem_list, side_list, dist_fact);
  481. printf ("\nafter ex_get_concat_side_sets, error = %3d\n", error);
  482. printf ("concatenated side set info\n");
  483. printf ("ids = \n");
  484. for (i=0; i<num_side_sets; i++) printf ("%3d\n", ids[i]);
  485. printf ("num_elem_per_set = \n");
  486. for (i=0; i<num_side_sets; i++) printf ("%3d\n", num_elem_per_set[i]);
  487. printf ("num_dist_per_set = \n");
  488. for (i=0; i<num_side_sets; i++) printf ("%3d\n", num_df_per_set[i]);
  489. printf ("elem_ind = \n");
  490. for (i=0; i<num_side_sets; i++) printf ("%3d\n", elem_ind[i]);
  491. printf ("dist_ind = \n");
  492. for (i=0; i<num_side_sets; i++) printf ("%3d\n", df_ind[i]);
  493. printf ("elem_list = \n");
  494. for (i=0; i<elem_list_len; i++) printf ("%3d\n", elem_list[i]);
  495. printf ("side_list = \n");
  496. for (i=0; i<elem_list_len; i++) printf ("%3d\n", side_list[i]);
  497. printf ("dist_fact = \n");
  498. for (i=0; i<df_list_len; i++) printf ("%5.3f\n", dist_fact[i]);
  499. free (ids);
  500. free (num_elem_per_set);
  501. free (num_df_per_set);
  502. free (df_ind);
  503. free (elem_ind);
  504. free (elem_list);
  505. free (side_list);
  506. free (dist_fact);
  507. /* end of concatenated side set read */
  508. /* read QA records */
  509. ex_inquire (exoid, EX_INQ_QA, &num_qa_rec, &fdum, cdum);
  510. for (i=0; i<num_qa_rec; i++)
  511. {
  512. for (j=0; j<4; j++)
  513. {
  514. qa_record[i][j] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  515. }
  516. }
  517. error = ex_get_qa (exoid, qa_record);
  518. printf ("\nafter ex_get_qa, error = %3d\n", error);
  519. printf ("QA records = \n");
  520. for (i=0; i<num_qa_rec; i++)
  521. {
  522. for (j=0; j<4; j++)
  523. {
  524. printf (" '%s'\n", qa_record[i][j]);
  525. free(qa_record[i][j]);
  526. }
  527. }
  528. /* read information records */
  529. error = ex_inquire (exoid, EX_INQ_INFO, &num_info, &fdum, cdum);
  530. printf ("\nafter ex_inquire, error = %3d\n", error);
  531. for (i=0; i<num_info; i++)
  532. {
  533. info[i] = (char *) calloc ((MAX_LINE_LENGTH+1), sizeof(char));
  534. }
  535. error = ex_get_info (exoid, info);
  536. printf ("\nafter ex_get_info, error = %3d\n", error);
  537. printf ("info records = \n");
  538. for (i=0; i<num_info; i++)
  539. {
  540. printf (" '%s'\n", info[i]);
  541. free(info[i]);
  542. }
  543. /* read global variables parameters and names */
  544. error = ex_get_var_param (exoid, "g", &num_glo_vars);
  545. printf ("\nafter ex_get_var_param, error = %3d\n", error);
  546. for (i=0; i<num_glo_vars; i++)
  547. {
  548. var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  549. }
  550. error = ex_get_var_names (exoid, "g", num_glo_vars, var_names);
  551. printf ("\nafter ex_get_var_names, error = %3d\n", error);
  552. printf ("There are %2d global variables; their names are :\n",
  553. num_glo_vars);
  554. for (i=0; i<num_glo_vars; i++)
  555. {
  556. printf (" '%s'\n", var_names[i]);
  557. free(var_names[i]);
  558. }
  559. /* read nodal variables parameters and names */
  560. error = ex_get_var_param (exoid, "n", &num_nod_vars);
  561. printf ("\nafter ex_get_var_param, error = %3d\n", error);
  562. for (i=0; i<num_nod_vars; i++)
  563. {
  564. var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  565. }
  566. error = ex_get_var_names (exoid, "n", num_nod_vars, var_names);
  567. printf ("\nafter ex_get_var_names, error = %3d\n", error);
  568. printf ("There are %2d nodal variables; their names are :\n", num_nod_vars);
  569. for (i=0; i<num_nod_vars; i++)
  570. {
  571. printf (" '%s'\n", var_names[i]);
  572. free(var_names[i]);
  573. }
  574. /* read element variables parameters and names */
  575. error = ex_get_var_param (exoid, "e", &num_ele_vars);
  576. printf ("\nafter ex_get_var_param, error = %3d\n", error);
  577. for (i=0; i<num_ele_vars; i++)
  578. {
  579. var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  580. }
  581. error = ex_get_var_names (exoid, "e", num_ele_vars, var_names);
  582. printf ("\nafter ex_get_var_names, error = %3d\n", error);
  583. printf ("There are %2d element variables; their names are :\n",
  584. num_ele_vars);
  585. for (i=0; i<num_ele_vars; i++)
  586. {
  587. printf (" '%s'\n", var_names[i]);
  588. free(var_names[i]);
  589. }
  590. /* read element variable truth table */
  591. truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int));
  592. error = ex_get_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab);
  593. printf ("\nafter ex_get_elem_var_tab, error = %3d\n", error);
  594. printf ("This is the element variable truth table:\n");
  595. k = 0;
  596. for (i=0; i<num_elem_blk*num_ele_vars; i++)
  597. {
  598. printf ("%2d\n", truth_tab[k++]);
  599. }
  600. free (truth_tab);
  601. /* determine how many time steps are stored */
  602. error = ex_inquire (exoid, EX_INQ_TIME, &num_time_steps, &fdum, cdum);
  603. printf ("\nafter ex_inquire, error = %3d\n", error);
  604. printf ("There are %2d time steps in the database.\n", num_time_steps);
  605. /* read time value at one time step */
  606. time_step = 3;
  607. error = ex_get_time (exoid, time_step, &time_value);
  608. printf ("\nafter ex_get_time, error = %3d\n", error);
  609. printf ("time value at time step %2d = %5.3f\n", time_step, time_value);
  610. /* read time values at all time steps */
  611. time_values = (float *) calloc (num_time_steps, sizeof(float));
  612. error = ex_get_all_times (exoid, time_values);
  613. printf ("\nafter ex_get_all_times, error = %3d\n", error);
  614. printf ("time values at all time steps are:\n");
  615. for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", time_values[i]);
  616. free (time_values);
  617. /* read all global variables at one time step */
  618. var_values = (float *) calloc (num_glo_vars, sizeof(float));
  619. error = ex_get_glob_vars (exoid, time_step, num_glo_vars, var_values);
  620. printf ("\nafter ex_get_glob_vars, error = %3d\n", error);
  621. printf ("global variable values at time step %2d\n", time_step);
  622. for (i=0; i<num_glo_vars; i++) printf ("%5.3f\n", var_values[i]);
  623. free (var_values);
  624. /* read a single global variable through time */
  625. var_index = 1;
  626. beg_time = 1;
  627. end_time = -1;
  628. var_values = (float *) calloc (num_time_steps, sizeof(float));
  629. error = ex_get_glob_var_time (exoid, var_index, beg_time, end_time,
  630. var_values);
  631. printf ("\nafter ex_get_glob_var_time, error = %3d\n", error);
  632. printf ("global variable %2d values through time:\n", var_index);
  633. for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]);
  634. free (var_values);
  635. /* read a nodal variable at one time step */
  636. var_values = (float *) calloc (num_nodes, sizeof(float));
  637. error = ex_get_nodal_var (exoid, time_step, var_index, num_nodes,
  638. var_values);
  639. printf ("\nafter ex_get_nodal_var, error = %3d\n", error);
  640. printf ("nodal variable %2d values at time step %2d\n", var_index,
  641. time_step);
  642. for (i=0; i<num_nodes; i++) printf ("%5.3f\n", var_values[i]);
  643. free (var_values);
  644. /* read a nodal variable through time */
  645. var_values = (float *) calloc (num_time_steps, sizeof(float));
  646. node_num = 1;
  647. error = ex_get_nodal_var_time (exoid, var_index, node_num, beg_time,
  648. end_time, var_values);
  649. printf ("\nafter ex_get_nodal_var_time, error = %3d\n", error);
  650. printf ("nodal variable %2d values for node %2d through time:\n", var_index,
  651. node_num);
  652. for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]);
  653. free (var_values);
  654. /* read an element variable at one time step */
  655. ids = (int *) calloc(num_elem_blk, sizeof(int));
  656. error = ex_get_elem_blk_ids (exoid, ids);
  657. printf ("\n after ex_get_elem_blk_ids, error = %3d\n", error);
  658. for (i=0; i<num_elem_blk; i++)
  659. {
  660. var_values = (float *) calloc (num_elem_in_block[i], sizeof(float));
  661. error = ex_get_elem_var (exoid, time_step, var_index, ids[i],
  662. num_elem_in_block[i], var_values);
  663. printf ("\nafter ex_get_elem_var, error = %3d\n", error);
  664. if (!error)
  665. {
  666. printf
  667. ("element variable %2d values of element block %2d at time step %2d\n",
  668. var_index, ids[i], time_step);
  669. for (j=0; j<num_elem_in_block[i]; j++)
  670. printf ("%5.3f\n", var_values[j]);
  671. }
  672. free (var_values);
  673. }
  674. free (num_elem_in_block);
  675. free(ids);
  676. /* read an element variable through time */
  677. var_values = (float *) calloc (num_time_steps, sizeof(float));
  678. var_index = 2;
  679. elem_num = 2;
  680. error = ex_get_elem_var_time (exoid, var_index, elem_num, beg_time,
  681. end_time, var_values);
  682. printf ("\nafter ex_get_elem_var_time, error = %3d\n", error);
  683. printf ("element variable %2d values for element %2d through time:\n",
  684. var_index, elem_num);
  685. for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]);
  686. free (var_values);
  687. error = ex_close (exoid);
  688. printf ("\nafter ex_close, error = %3d\n", error);
  689. return 0;
  690. }