PageRenderTime 81ms CodeModel.GetById 38ms RepoModel.GetById 0ms app.codeStats 1ms

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

https://bitbucket.org/vijaysm/libmesh
C | 1047 lines | 686 code | 240 blank | 121 comment | 109 complexity | 3380d3a66b9837195d2ba5c63f3eeaca 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. * testrd1 - read exodus file test.exo created by testwt1
  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. int main (int argc, char **argv)
  60. {
  61. int exoid, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets;
  62. int num_side_sets, num_node_maps, num_elem_maps, error;
  63. int i, j, k, node_ctr;
  64. int *elem_map, *connect, *node_list, *node_ctr_list, *elem_list, *side_list;
  65. int *ids, *node_map;
  66. int *num_nodes_per_set, *num_elem_per_set;
  67. int *num_df_per_set;
  68. int *node_ind, *elem_ind, *df_ind, num_qa_rec, num_info;
  69. int num_glo_vars, num_nod_vars, num_ele_vars;
  70. int *truth_tab;
  71. int num_time_steps;
  72. int *num_elem_in_block, *num_nodes_per_elem, *num_attr;
  73. int num_nodes_in_set, num_elem_in_set;
  74. int num_sides_in_set, num_df_in_set;
  75. int list_len = 0;
  76. int elem_list_len = 0;
  77. int node_list_len = 0;
  78. int df_list_len = 0;
  79. int node_num, time_step, var_index, beg_time, end_time, elem_num;
  80. int CPU_word_size,IO_word_size;
  81. int num_props, prop_value, *prop_values;
  82. int idum;
  83. float time_value, *time_values, *var_values;
  84. float *x, *y, *z;
  85. float *attrib, *dist_fact;
  86. float version, fdum;
  87. char *coord_names[3], *qa_record[2][4], *info[3], *var_names[10];
  88. char title[MAX_LINE_LENGTH+1], elem_type[MAX_STR_LENGTH+1];
  89. char *cdum = 0;
  90. char *prop_names[3];
  91. char *map_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. /* Test the NOCLOBBER option to ex_create. Should fail to create file */
  96. exoid = ex_create("test.exo",
  97. EX_NOCLOBBER,
  98. &CPU_word_size,
  99. &IO_word_size);
  100. printf ("\nafter ex_create (NO_CLOBBER), error = %3d\n", exoid);
  101. /* open EXODUS II files */
  102. exoid = ex_open ("test.exo", /* filename path */
  103. EX_READ, /* access mode = READ */
  104. &CPU_word_size, /* CPU word size */
  105. &IO_word_size, /* IO word size */
  106. &version); /* ExodusII library version */
  107. printf ("\nafter ex_open\n");
  108. if (exoid < 0) exit(1);
  109. printf ("test.exo is an EXODUSII file; version %4.2f\n",
  110. version);
  111. /* printf (" CPU word size %1d\n",CPU_word_size); */
  112. printf (" I/O word size %1d\n",IO_word_size);
  113. ex_inquire(exoid,EX_INQ_API_VERS, &idum, &version, cdum);
  114. printf ("EXODUSII API; version %4.2f\n", version);
  115. /* ncopts = NC_VERBOSE; */
  116. /* ex_opts (EX_VERBOSE); */
  117. /* read database parameters */
  118. error = ex_get_init (exoid, title, &num_dim, &num_nodes, &num_elem,
  119. &num_elem_blk, &num_node_sets, &num_side_sets);
  120. printf ("after ex_get_init, error = %3d\n", error);
  121. printf ("database parameters:\n");
  122. printf ("title = '%s'\n",title);
  123. printf ("num_dim = %3d\n",num_dim);
  124. printf ("num_nodes = %3d\n",num_nodes);
  125. printf ("num_elem = %3d\n",num_elem);
  126. printf ("num_elem_blk = %3d\n",num_elem_blk);
  127. printf ("num_node_sets = %3d\n",num_node_sets);
  128. printf ("num_side_sets = %3d\n",num_side_sets);
  129. /* read nodal coordinates values and names from database */
  130. x = (float *) calloc(num_nodes, sizeof(float));
  131. y = (float *) calloc(num_nodes, sizeof(float));
  132. if (num_dim >= 3)
  133. z = (float *) calloc(num_nodes, sizeof(float));
  134. else
  135. z = 0;
  136. error = ex_get_coord (exoid, x, y, z);
  137. printf ("\nafter ex_get_coord, error = %3d\n", error);
  138. printf ("x coords = \n");
  139. for (i=0; i<num_nodes; i++)
  140. {
  141. printf ("%5.1f\n", x[i]);
  142. }
  143. printf ("y coords = \n");
  144. for (i=0; i<num_nodes; i++)
  145. {
  146. printf ("%5.1f\n", y[i]);
  147. }
  148. if (num_dim >= 3)
  149. {
  150. printf ("z coords = \n");
  151. for (i=0; i<num_nodes; i++)
  152. {
  153. printf ("%5.1f\n", z[i]);
  154. }
  155. }
  156. /*
  157. error = ex_get_1_coord (exoid, 2, x, y, z);
  158. printf ("\nafter ex_get_1_coord, error = %3d\n", error);
  159. printf ("x coord of node 2 = \n");
  160. printf ("%f \n", x[0]);
  161. printf ("y coord of node 2 = \n");
  162. printf ("%f \n", y[0]);
  163. */
  164. free (x);
  165. free (y);
  166. if (num_dim >= 3)
  167. free (z);
  168. for (i=0; i<num_dim; i++)
  169. {
  170. coord_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  171. }
  172. error = ex_get_coord_names (exoid, coord_names);
  173. printf ("\nafter ex_get_coord_names, error = %3d\n", error);
  174. printf ("x coord name = '%s'\n", coord_names[0]);
  175. printf ("y coord name = '%s'\n", coord_names[1]);
  176. for (i=0; i<num_dim; i++)
  177. free(coord_names[i]);
  178. /* read map parameters */
  179. error = ex_get_map_param (exoid, &num_node_maps, &num_elem_maps);
  180. printf ("\nafter ex_get_map_param, error = %3d\n", error);
  181. /* read element maps */
  182. elem_map = (int *) calloc(num_elem, sizeof(int));
  183. ids = (int *) calloc(num_elem_maps, sizeof(int));
  184. error = ex_get_prop_array (exoid, EX_ELEM_MAP, "ID", ids);
  185. printf ("\nafter ex_get_prop_array, error = %3d\n", error);
  186. for (j=0; j<num_elem_maps; j++) {
  187. error = ex_get_elem_map (exoid, ids[j], elem_map);
  188. printf ("\nafter ex_get_elem_map, error = %3d\n", error);
  189. printf ("element map id = %2d\n",ids[j]);
  190. if (!error) {
  191. for (i=0; i<num_elem; i++) {
  192. int value;
  193. printf ("elem_map(%d) = %d \n", i, elem_map[i]);
  194. /* Read element map 1 element at a time... */
  195. error = ex_get_partial_elem_map(exoid, ids[j], i+1, 1, &value);
  196. if (error != 0 || value != elem_map[i])
  197. printf ("invalid value in ex_get_partial_elem_map, map %d, element %d\n", j, i);
  198. }
  199. }
  200. }
  201. free (elem_map);
  202. /* read element map properties */
  203. error = ex_inquire (exoid, EX_INQ_EM_PROP, &num_props, &fdum, cdum);
  204. printf ("\nafter ex_inquire, error = %d\n", error);
  205. printf ("\nThere are %2d properties for each element map\n", num_props);
  206. for (i=0; i<num_props; i++)
  207. {
  208. prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  209. }
  210. error = ex_get_prop_names(exoid,EX_ELEM_MAP,prop_names);
  211. printf ("after ex_get_prop_names, error = %d\n", error);
  212. for (i=0; i<num_props; i++)
  213. {
  214. for (j=0; j<num_elem_maps; j++)
  215. {
  216. error = ex_get_prop(exoid, EX_ELEM_MAP, ids[j], prop_names[i],
  217. &prop_value);
  218. if (error == 0)
  219. printf ("element map %2d, property(%2d): '%s'= %5d\n",
  220. j+1, i+1, prop_names[i], prop_value);
  221. else
  222. printf ("after ex_get_prop, error = %d\n", error);
  223. }
  224. }
  225. for (i=0; i<num_props; i++)
  226. free(prop_names[i]);
  227. /* read element map names */
  228. for (i=0; i<num_elem_maps; i++) {
  229. map_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  230. }
  231. error = ex_get_names(exoid,EX_ELEM_MAP,map_names);
  232. printf ("after ex_get_names, error = %d\n", error);
  233. for (j=0; j<num_elem_maps; j++) {
  234. printf ("element map %2d, id = %d, name: '%s'\n",
  235. j+1, ids[j], map_names[j]);
  236. free(map_names[j]);
  237. }
  238. free(ids);
  239. /* read node maps */
  240. node_map = (int *) calloc(num_nodes, sizeof(int));
  241. ids = (int *) calloc(num_node_maps, sizeof(int));
  242. error = ex_get_prop_array (exoid, EX_NODE_MAP, "ID", ids);
  243. printf ("\nafter ex_get_prop_array, error = %3d\n", error);
  244. for (j=0; j<num_node_maps; j++) {
  245. error = ex_get_node_map (exoid, ids[j], node_map);
  246. printf ("\nafter ex_get_node_map, error = %3d\n", error);
  247. printf ("node map id = %2d\n",ids[j]);
  248. if (!error)
  249. for (i=0; i<num_nodes; i++)
  250. printf ("node_map(%d) = %d \n", i, node_map[i]);
  251. }
  252. free (node_map);
  253. /* read node map properties */
  254. error = ex_inquire (exoid, EX_INQ_NM_PROP, &num_props, &fdum, cdum);
  255. printf ("\nafter ex_inquire, error = %d\n", error);
  256. printf ("\nThere are %2d properties for each node map\n", num_props);
  257. for (i=0; i<num_props; i++)
  258. {
  259. prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  260. }
  261. error = ex_get_prop_names(exoid,EX_NODE_MAP,prop_names);
  262. printf ("after ex_get_prop_names, error = %d\n", error);
  263. for (i=0; i<num_props; i++)
  264. {
  265. for (j=0; j<num_node_maps; j++)
  266. {
  267. error = ex_get_prop(exoid, EX_NODE_MAP, ids[j], prop_names[i],
  268. &prop_value);
  269. if (error == 0)
  270. printf ("node map %2d, property(%2d): '%s'= %5d\n",
  271. j+1, i+1, prop_names[i], prop_value);
  272. else
  273. printf ("after ex_get_prop, error = %d\n", error);
  274. }
  275. }
  276. for (i=0; i<num_props; i++)
  277. free(prop_names[i]);
  278. /* read node map names */
  279. for (i=0; i<num_node_maps; i++) {
  280. map_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  281. }
  282. for (j=0; j<num_node_maps; j++) {
  283. error = ex_get_name(exoid,EX_NODE_MAP,ids[j], map_names[j]);
  284. printf ("after ex_get_name, error = %d\n", error);
  285. printf ("node map %2d, id = %d, name: '%s'\n",
  286. j+1, ids[j], map_names[j]);
  287. free(map_names[j]);
  288. }
  289. free(ids);
  290. /* read element block parameters */
  291. ids = (int *) calloc(num_elem_blk, sizeof(int));
  292. num_elem_in_block = (int *) calloc(num_elem_blk, sizeof(int));
  293. num_nodes_per_elem = (int *) calloc(num_elem_blk, sizeof(int));
  294. num_attr = (int *) calloc(num_elem_blk, sizeof(int));
  295. error = ex_get_elem_blk_ids (exoid, ids);
  296. printf ("\nafter ex_get_elem_blk_ids, error = %3d\n", error);
  297. for (i=0; i<num_elem_blk; i++)
  298. {
  299. error = ex_get_elem_block (exoid, ids[i], elem_type,
  300. &(num_elem_in_block[i]),
  301. &(num_nodes_per_elem[i]), &(num_attr[i]));
  302. printf ("\nafter ex_get_elem_block, error = %d\n", error);
  303. printf ("element block id = %2d\n",ids[i]);
  304. printf ("element type = '%s'\n", elem_type);
  305. printf ("num_elem_in_block = %2d\n",num_elem_in_block[i]);
  306. printf ("num_nodes_per_elem = %2d\n",num_nodes_per_elem[i]);
  307. printf ("num_attr = %2d\n",num_attr[i]);
  308. }
  309. /* read element block properties */
  310. error = ex_inquire (exoid, EX_INQ_EB_PROP, &num_props, &fdum, cdum);
  311. printf ("\nafter ex_inquire, error = %d\n", error);
  312. printf ("\nThere are %2d properties for each element block\n", num_props);
  313. for (i=0; i<num_props; i++)
  314. {
  315. prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  316. }
  317. error = ex_get_prop_names(exoid,EX_ELEM_BLOCK,prop_names);
  318. printf ("after ex_get_prop_names, error = %d\n", error);
  319. for (i=0; i<num_props; i++)
  320. {
  321. for (j=0; j<num_elem_blk; j++)
  322. {
  323. error = ex_get_prop(exoid, EX_ELEM_BLOCK, ids[j], prop_names[i],
  324. &prop_value);
  325. if (error == 0)
  326. printf ("element block %2d, property(%2d): '%s'= %5d\n",
  327. j+1, i+1, prop_names[i], prop_value);
  328. else
  329. printf ("after ex_get_prop, error = %d\n", error);
  330. }
  331. }
  332. for (i=0; i<num_props; i++)
  333. free(prop_names[i]);
  334. /* read element connectivity */
  335. for (i=0; i<num_elem_blk; i++)
  336. {
  337. connect = (int *) calloc((num_nodes_per_elem[i] * num_elem_in_block[i]),
  338. sizeof(int));
  339. error = ex_get_elem_conn (exoid, ids[i], connect);
  340. printf ("\nafter ex_get_elem_conn, error = %d\n", error);
  341. printf ("connect array for elem block %2d\n", ids[i]);
  342. for (j=0; j<num_nodes_per_elem[i]; j++)
  343. {
  344. printf ("%3d\n", connect[j]);
  345. }
  346. /*
  347. error = ex_get_1_elem_conn (exoid, 1, ids[i], connect);
  348. printf ("\nafter ex_get_elem_conn, error = %d\n", error);
  349. printf ("node list for first element of element block %d \n ", ids[i]);
  350. for (j=0; j<num_nodes_per_elem[i]; j++)
  351. {
  352. printf ("%d \n", connect[j]);
  353. }
  354. */
  355. free (connect);
  356. }
  357. /* read element block attributes */
  358. for (i=0; i<num_elem_blk; i++)
  359. {
  360. attrib = (float *) calloc(num_attr[i]*num_elem_in_block[i],sizeof(float));
  361. error = ex_get_elem_attr (exoid, ids[i], attrib);
  362. printf ("\nafter ex_get_elem_attr, error = %d\n", error);
  363. if (error == 0)
  364. printf ("element block %d attributes:\n", ids[i]);
  365. for (j=0; j<num_attr[i]*num_elem_in_block[i]; j++)
  366. printf ("%6.4f\n", attrib[j]);
  367. free (attrib);
  368. }
  369. free (ids);
  370. free (num_nodes_per_elem);
  371. free (num_attr);
  372. /* read individual node sets */
  373. ids = (int *) calloc(num_node_sets, sizeof(int));
  374. error = ex_get_node_set_ids (exoid, ids);
  375. printf ("\nafter ex_get_node_set_ids, error = %3d\n", error);
  376. for (i=0; i<num_node_sets; i++)
  377. {
  378. error = ex_get_node_set_param (exoid, ids[i],
  379. &num_nodes_in_set, &num_df_in_set);
  380. printf ("\nafter ex_get_node_set_param, error = %3d\n", error);
  381. printf ("\nnode set %2d parameters: \n", ids[i]);
  382. printf ("num_nodes = %2d\n", num_nodes_in_set);
  383. node_list = (int *) calloc(num_nodes_in_set, sizeof(int));
  384. dist_fact = (float *) calloc(num_nodes_in_set, sizeof(float));
  385. error = ex_get_node_set (exoid, ids[i], node_list);
  386. printf ("\nafter ex_get_node_set, error = %3d\n", error);
  387. if (num_df_in_set > 0)
  388. {
  389. error = ex_get_node_set_dist_fact (exoid, ids[i], dist_fact);
  390. printf ("\nafter ex_get_node_set_dist_fact, error = %3d\n", error);
  391. }
  392. printf ("\nnode list for node set %2d\n", ids[i]);
  393. for (j=0; j<num_nodes_in_set; j++)
  394. {
  395. printf ("%3d\n", node_list[j]);
  396. }
  397. if (num_df_in_set > 0)
  398. {
  399. printf ("dist factors for node set %2d\n", ids[i]);
  400. for (j=0; j<num_nodes_in_set; j++)
  401. {
  402. printf ("%5.2f\n", dist_fact[j]);
  403. }
  404. }
  405. else
  406. printf ("no dist factors for node set %2d\n", ids[i]);
  407. free (node_list);
  408. free (dist_fact);
  409. }
  410. free(ids);
  411. /* read node set properties */
  412. error = ex_inquire (exoid, EX_INQ_NS_PROP, &num_props, &fdum, cdum);
  413. printf ("\nafter ex_inquire, error = %d\n", error);
  414. printf ("\nThere are %2d properties for each node set\n", num_props);
  415. for (i=0; i<num_props; i++)
  416. {
  417. prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  418. }
  419. prop_values = (int *) calloc (num_node_sets, sizeof(int));
  420. error = ex_get_prop_names(exoid,EX_NODE_SET,prop_names);
  421. printf ("after ex_get_prop_names, error = %d\n", error);
  422. for (i=0; i<num_props; i++)
  423. {
  424. error = ex_get_prop_array(exoid, EX_NODE_SET, prop_names[i],
  425. prop_values);
  426. if (error == 0)
  427. for (j=0; j<num_node_sets; j++)
  428. printf ("node set %2d, property(%2d): '%s'= %5d\n",
  429. j+1, i+1, prop_names[i], prop_values[j]);
  430. else
  431. printf ("after ex_get_prop_array, error = %d\n", error);
  432. }
  433. for (i=0; i<num_props; i++)
  434. free(prop_names[i]);
  435. free(prop_values);
  436. /* read concatenated node sets; this produces the same information as
  437. * the above code which reads individual node sets
  438. */
  439. error = ex_inquire (exoid, EX_INQ_NODE_SETS, &num_node_sets, &fdum, cdum);
  440. printf ("\nafter ex_inquire, error = %3d\n",error);
  441. ids = (int *) calloc(num_node_sets, sizeof(int));
  442. num_nodes_per_set = (int *) calloc(num_node_sets, sizeof(int));
  443. num_df_per_set = (int *) calloc(num_node_sets, sizeof(int));
  444. node_ind = (int *) calloc(num_node_sets, sizeof(int));
  445. df_ind = (int *) calloc(num_node_sets, sizeof(int));
  446. error = ex_inquire (exoid, EX_INQ_NS_NODE_LEN, &list_len, &fdum, cdum);
  447. printf ("\nafter ex_inquire: EX_INQ_NS_NODE_LEN = %d, error = %3d\n",
  448. list_len, error);
  449. node_list = (int *) calloc(list_len, sizeof(int));
  450. error = ex_inquire (exoid, EX_INQ_NS_DF_LEN, &list_len, &fdum, cdum);
  451. printf ("\nafter ex_inquire: EX_INQ_NS_DF_LEN = %d, error = %3d\n",
  452. list_len, error);
  453. dist_fact = (float *) calloc(list_len, sizeof(float));
  454. error = ex_get_concat_node_sets (exoid,ids,num_nodes_per_set,num_df_per_set,
  455. node_ind, df_ind, node_list, dist_fact);
  456. printf ("\nafter ex_get_concat_node_sets, error = %3d\n", error);
  457. printf ("\nconcatenated node set info\n");
  458. printf ("ids = \n");
  459. for (i=0; i<num_node_sets; i++) printf ("%3d\n", ids[i]);
  460. printf ("num_nodes_per_set = \n");
  461. for (i=0; i<num_node_sets; i++) printf ("%3d\n", num_nodes_per_set[i]);
  462. printf ("node_ind = \n");
  463. for (i=0; i<num_node_sets; i++) printf ("%3d\n", node_ind[i]);
  464. printf ("node_list = \n");
  465. for (i=0; i<list_len; i++) printf ("%3d\n", node_list[i]);
  466. printf ("dist_fact = \n");
  467. for (i=0; i<list_len; i++) printf ("%5.3f\n", dist_fact[i]);
  468. free (ids);
  469. free (num_nodes_per_set);
  470. free (df_ind);
  471. free (node_ind);
  472. free (num_df_per_set);
  473. free (node_list);
  474. free (dist_fact);
  475. /* read individual side sets */
  476. ids = (int *) calloc(num_side_sets, sizeof(int));
  477. error = ex_get_side_set_ids (exoid, ids);
  478. printf ("\nafter ex_get_side_set_ids, error = %3d\n", error);
  479. for (i=0; i<num_side_sets; i++)
  480. {
  481. error = ex_get_side_set_param (exoid, ids[i], &num_sides_in_set,
  482. &num_df_in_set);
  483. printf ("\nafter ex_get_side_set_param, error = %3d\n", error);
  484. printf ("side set %2d parameters:\n",ids[i]);
  485. printf ("num_sides = %3d\n",num_sides_in_set);
  486. printf ("num_dist_factors = %3d\n", num_df_in_set);
  487. /* Note: The # of elements is same as # of sides! */
  488. num_elem_in_set = num_sides_in_set;
  489. elem_list = (int *) calloc(num_elem_in_set, sizeof(int));
  490. side_list = (int *) calloc(num_sides_in_set, sizeof(int));
  491. node_ctr_list = (int *) calloc(num_elem_in_set, sizeof(int));
  492. node_list = (int *) calloc(num_elem_in_set*21, sizeof(int));
  493. dist_fact = (float *) calloc(num_df_in_set, sizeof(float));
  494. error = ex_get_side_set (exoid, ids[i], elem_list, side_list);
  495. printf ("\nafter ex_get_side_set, error = %3d\n", error);
  496. error = ex_get_side_set_node_list (exoid, ids[i], node_ctr_list,
  497. node_list);
  498. printf ("\nafter ex_get_side_set_node_list, error = %3d\n", error);
  499. if (num_df_in_set > 0)
  500. {
  501. error = ex_get_side_set_dist_fact (exoid, ids[i], dist_fact);
  502. printf ("\nafter ex_get_side_set_dist_fact, error = %3d\n", error);
  503. }
  504. printf ("element list for side set %2d\n", ids[i]);
  505. for (j=0; j<num_elem_in_set; j++)
  506. {
  507. printf ("%3d\n", elem_list[j]);
  508. }
  509. printf ("side list for side set %2d\n", ids[i]);
  510. for (j=0; j<num_sides_in_set; j++)
  511. {
  512. printf ("%3d\n", side_list[j]);
  513. }
  514. node_ctr = 0;
  515. printf ("node list for side set %2d\n", ids[i]);
  516. for (k=0; k<num_elem_in_set; k++)
  517. {
  518. for (j=0; j<node_ctr_list[k]; j++)
  519. {
  520. printf ("%3d\n", node_list[node_ctr+j]);
  521. }
  522. node_ctr += node_ctr_list[k];
  523. }
  524. if (num_df_in_set > 0)
  525. {
  526. printf ("dist factors for side set %2d\n", ids[i]);
  527. for (j=0; j<num_df_in_set; j++)
  528. {
  529. printf ("%5.3f\n", dist_fact[j]);
  530. }
  531. }
  532. else
  533. printf ("no dist factors for side set %2d\n", ids[i]);
  534. free (elem_list);
  535. free (side_list);
  536. free (dist_fact);
  537. free (node_ctr_list);
  538. free (node_list);
  539. }
  540. /* read side set properties */
  541. error = ex_inquire (exoid, EX_INQ_SS_PROP, &num_props, &fdum, cdum);
  542. printf ("\nafter ex_inquire, error = %d\n", error);
  543. printf ("\nThere are %2d properties for each side set\n", num_props);
  544. for (i=0; i<num_props; i++)
  545. {
  546. prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  547. }
  548. error = ex_get_prop_names(exoid,EX_SIDE_SET,prop_names);
  549. printf ("after ex_get_prop_names, error = %d\n", error);
  550. for (i=0; i<num_props; i++)
  551. {
  552. for (j=0; j<num_side_sets; j++)
  553. {
  554. error = ex_get_prop(exoid, EX_SIDE_SET, ids[j], prop_names[i],
  555. &prop_value);
  556. if (error == 0)
  557. printf ("side set %2d, property(%2d): '%s'= %5d\n",
  558. j+1, i+1, prop_names[i], prop_value);
  559. else
  560. printf ("after ex_get_prop, error = %d\n", error);
  561. }
  562. }
  563. for (i=0; i<num_props; i++)
  564. free(prop_names[i]);
  565. free (ids);
  566. error = ex_inquire (exoid, EX_INQ_SIDE_SETS, &num_side_sets, &fdum, cdum);
  567. printf ("\nafter ex_inquire: EX_INQ_SIDE_SETS = %d, error = %d\n",
  568. num_side_sets, error);
  569. if (num_side_sets > 0)
  570. {
  571. error = ex_inquire(exoid, EX_INQ_SS_ELEM_LEN, &elem_list_len, &fdum, cdum);
  572. printf ("\nafter ex_inquire: EX_INQ_SS_ELEM_LEN = %d, error = %d\n",
  573. elem_list_len, error);
  574. error = ex_inquire(exoid, EX_INQ_SS_NODE_LEN, &node_list_len, &fdum, cdum);
  575. printf ("\nafter ex_inquire: EX_INQ_SS_NODE_LEN = %d, error = %d\n",
  576. node_list_len, error);
  577. error = ex_inquire(exoid, EX_INQ_SS_DF_LEN, &df_list_len, &fdum, cdum);
  578. printf ("\nafter ex_inquire: EX_INQ_SS_DF_LEN = %d, error = %d\n",
  579. df_list_len, error);
  580. }
  581. /* read concatenated side sets; this produces the same information as
  582. * the above code which reads individual side sets
  583. */
  584. /* concatenated side set read */
  585. ids = (int *) calloc(num_side_sets, sizeof(int));
  586. num_elem_per_set = (int *) calloc(num_side_sets, sizeof(int));
  587. num_df_per_set = (int *) calloc(num_side_sets, sizeof(int));
  588. elem_ind = (int *) calloc(num_side_sets, sizeof(int));
  589. df_ind = (int *) calloc(num_side_sets, sizeof(int));
  590. elem_list = (int *) calloc(elem_list_len, sizeof(int));
  591. side_list = (int *) calloc(elem_list_len, sizeof(int));
  592. dist_fact = (float *) calloc(df_list_len, sizeof(float));
  593. error = ex_get_concat_side_sets (exoid, ids, num_elem_per_set,
  594. num_df_per_set, elem_ind, df_ind,
  595. elem_list, side_list, dist_fact);
  596. printf ("\nafter ex_get_concat_side_sets, error = %3d\n", error);
  597. printf ("concatenated side set info\n");
  598. printf ("ids = \n");
  599. for (i=0; i<num_side_sets; i++) printf ("%3d\n", ids[i]);
  600. printf ("num_elem_per_set = \n");
  601. for (i=0; i<num_side_sets; i++) printf ("%3d\n", num_elem_per_set[i]);
  602. printf ("num_dist_per_set = \n");
  603. for (i=0; i<num_side_sets; i++) printf ("%3d\n", num_df_per_set[i]);
  604. printf ("elem_ind = \n");
  605. for (i=0; i<num_side_sets; i++) printf ("%3d\n", elem_ind[i]);
  606. printf ("dist_ind = \n");
  607. for (i=0; i<num_side_sets; i++) printf ("%3d\n", df_ind[i]);
  608. printf ("elem_list = \n");
  609. for (i=0; i<elem_list_len; i++) printf ("%3d\n", elem_list[i]);
  610. printf ("side_list = \n");
  611. for (i=0; i<elem_list_len; i++) printf ("%3d\n", side_list[i]);
  612. printf ("dist_fact = \n");
  613. for (i=0; i<df_list_len; i++) printf ("%5.3f\n", dist_fact[i]);
  614. free (ids);
  615. free (num_elem_per_set);
  616. free (num_df_per_set);
  617. free (df_ind);
  618. free (elem_ind);
  619. free (elem_list);
  620. free (side_list);
  621. free (dist_fact);
  622. /* end of concatenated side set read */
  623. /* read QA records */
  624. ex_inquire (exoid, EX_INQ_QA, &num_qa_rec, &fdum, cdum);
  625. for (i=0; i<num_qa_rec; i++)
  626. {
  627. for (j=0; j<4; j++)
  628. {
  629. qa_record[i][j] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  630. }
  631. }
  632. error = ex_get_qa (exoid, qa_record);
  633. printf ("\nafter ex_get_qa, error = %3d\n", error);
  634. printf ("QA records = \n");
  635. for (i=0; i<num_qa_rec; i++)
  636. {
  637. for (j=0; j<4; j++)
  638. {
  639. printf (" '%s'\n", qa_record[i][j]);
  640. free(qa_record[i][j]);
  641. }
  642. }
  643. /* read information records */
  644. error = ex_inquire (exoid, EX_INQ_INFO, &num_info, &fdum, cdum);
  645. printf ("\nafter ex_inquire, error = %3d\n", error);
  646. for (i=0; i<num_info; i++)
  647. {
  648. info[i] = (char *) calloc ((MAX_LINE_LENGTH+1), sizeof(char));
  649. }
  650. error = ex_get_info (exoid, info);
  651. printf ("\nafter ex_get_info, error = %3d\n", error);
  652. printf ("info records = \n");
  653. for (i=0; i<num_info; i++)
  654. {
  655. printf (" '%s'\n", info[i]);
  656. free(info[i]);
  657. }
  658. /* read global variables parameters and names */
  659. error = ex_get_var_param (exoid, "g", &num_glo_vars);
  660. printf ("\nafter ex_get_var_param, error = %3d\n", error);
  661. for (i=0; i<num_glo_vars; i++)
  662. {
  663. var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  664. }
  665. error = ex_get_var_name(exoid, "g", 1, var_names[0]);
  666. printf ("\nafter ex_get_var_name, error = %3d\n", error);
  667. printf ("There are %2d global variables; their names are :\n", num_glo_vars);
  668. for (i=0; i<num_glo_vars; i++)
  669. {
  670. printf (" '%s'\n", var_names[i]);
  671. free(var_names[i]);
  672. }
  673. /* read nodal variables parameters and names */
  674. error = ex_get_var_param (exoid, "n", &num_nod_vars);
  675. printf ("\nafter ex_get_var_param, error = %3d\n", error);
  676. for (i=0; i<num_nod_vars; i++)
  677. {
  678. var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  679. }
  680. error = ex_get_var_names (exoid, "n", num_nod_vars, var_names);
  681. printf ("\nafter ex_get_var_names, error = %3d\n", error);
  682. printf ("There are %2d nodal variables; their names are :\n", num_nod_vars);
  683. for (i=0; i<num_nod_vars; i++)
  684. {
  685. printf (" '%s'\n", var_names[i]);
  686. free(var_names[i]);
  687. }
  688. /* read element variables parameters and names */
  689. error = ex_get_var_param (exoid, "e", &num_ele_vars);
  690. printf ("\nafter ex_get_var_param, error = %3d\n", error);
  691. for (i=0; i<num_ele_vars; i++)
  692. {
  693. var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char));
  694. }
  695. error = ex_get_var_names (exoid, "e", num_ele_vars, var_names);
  696. printf ("\nafter ex_get_var_names, error = %3d\n", error);
  697. printf ("There are %2d element variables; their names are :\n",
  698. num_ele_vars);
  699. for (i=0; i<num_ele_vars; i++)
  700. {
  701. printf (" '%s'\n", var_names[i]);
  702. free(var_names[i]);
  703. }
  704. /* read element variable truth table */
  705. truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int));
  706. error = ex_get_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab);
  707. printf ("\nafter ex_get_elem_var_tab, error = %3d\n", error);
  708. printf ("This is the element variable truth table:\n");
  709. k = 0;
  710. for (i=0; i<num_elem_blk*num_ele_vars; i++)
  711. {
  712. printf ("%2d\n", truth_tab[k++]);
  713. }
  714. free (truth_tab);
  715. /* determine how many time steps are stored */
  716. error = ex_inquire (exoid, EX_INQ_TIME, &num_time_steps, &fdum, cdum);
  717. printf ("\nafter ex_inquire, error = %3d\n", error);
  718. printf ("There are %2d time steps in the database.\n", num_time_steps);
  719. /* read time value at one time step */
  720. time_step = 3;
  721. error = ex_get_time (exoid, time_step, &time_value);
  722. printf ("\nafter ex_get_time, error = %3d\n", error);
  723. printf ("time value at time step %2d = %5.3f\n", time_step, time_value);
  724. /* read time values at all time steps */
  725. time_values = (float *) calloc (num_time_steps, sizeof(float));
  726. error = ex_get_all_times (exoid, time_values);
  727. printf ("\nafter ex_get_all_times, error = %3d\n", error);
  728. printf ("time values at all time steps are:\n");
  729. for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", time_values[i]);
  730. free (time_values);
  731. /* read all global variables at one time step */
  732. var_values = (float *) calloc (num_glo_vars, sizeof(float));
  733. error = ex_get_glob_vars (exoid, time_step, num_glo_vars, var_values);
  734. printf ("\nafter ex_get_glob_vars, error = %3d\n", error);
  735. printf ("global variable values at time step %2d\n", time_step);
  736. for (i=0; i<num_glo_vars; i++) printf ("%5.3f\n", var_values[i]);
  737. free (var_values);
  738. /* read a single global variable through time */
  739. var_index = 1;
  740. beg_time = 1;
  741. end_time = -1;
  742. var_values = (float *) calloc (num_time_steps, sizeof(float));
  743. error = ex_get_glob_var_time (exoid, var_index, beg_time, end_time,
  744. var_values);
  745. printf ("\nafter ex_get_glob_var_time, error = %3d\n", error);
  746. printf ("global variable %2d values through time:\n", var_index);
  747. for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]);
  748. free (var_values);
  749. /* read a nodal variable at one time step */
  750. var_values = (float *) calloc (num_nodes, sizeof(float));
  751. error = ex_get_nodal_var (exoid, time_step, var_index, num_nodes,
  752. var_values);
  753. printf ("\nafter ex_get_nodal_var, error = %3d\n", error);
  754. printf ("nodal variable %2d values at time step %2d\n", var_index,
  755. time_step);
  756. for (i=0; i<num_nodes; i++) printf ("%5.3f\n", var_values[i]);
  757. free (var_values);
  758. /* read a nodal variable through time */
  759. var_values = (float *) calloc (num_time_steps, sizeof(float));
  760. node_num = 1;
  761. error = ex_get_nodal_var_time (exoid, var_index, node_num, beg_time,
  762. end_time, var_values);
  763. printf ("\nafter ex_get_nodal_var_time, error = %3d\n", error);
  764. printf ("nodal variable %2d values for node %2d through time:\n", var_index,
  765. node_num);
  766. for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]);
  767. free (var_values);
  768. /* read an element variable at one time step */
  769. ids = (int *) calloc(num_elem_blk, sizeof(int));
  770. error = ex_get_elem_blk_ids (exoid, ids);
  771. printf ("\n after ex_get_elem_blk_ids, error = %3d\n", error);
  772. for (i=0; i<num_elem_blk; i++)
  773. {
  774. var_values = (float *) calloc (num_elem_in_block[i], sizeof(float));
  775. error = ex_get_elem_var (exoid, time_step, var_index, ids[i],
  776. num_elem_in_block[i], var_values);
  777. printf ("\nafter ex_get_elem_var, error = %3d\n", error);
  778. if (!error)
  779. {
  780. printf
  781. ("element variable %2d values of element block %2d at time step %2d\n",
  782. var_index, ids[i], time_step);
  783. for (j=0; j<num_elem_in_block[i]; j++)
  784. printf ("%5.3f\n", var_values[j]);
  785. }
  786. free (var_values);
  787. }
  788. free (num_elem_in_block);
  789. free(ids);
  790. /* read an element variable through time */
  791. var_values = (float *) calloc (num_time_steps, sizeof(float));
  792. var_index = 2;
  793. elem_num = 2;
  794. error = ex_get_elem_var_time (exoid, var_index, elem_num, beg_time,
  795. end_time, var_values);
  796. printf ("\nafter ex_get_elem_var_time, error = %3d\n", error);
  797. printf ("element variable %2d values for element %2d through time:\n",
  798. var_index, elem_num);
  799. for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]);
  800. free (var_values);
  801. error = ex_close (exoid);
  802. printf ("\nafter ex_close, error = %3d\n", error);
  803. return 0;
  804. }