PageRenderTime 59ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/contrib/exodusii/5.22b/exodus/cbind/test/testrd-long-name.c

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