int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10]; int num_node_sets, num_sides, num_side_sets, error; int i, j, k, m, *elem_map, *connect; int node_list[100],elem_list[100],side_list[100]; int ebids[10], ids[10]; int num_sides_per_set[10], num_nodes_per_set[10], num_elem_per_set[10]; int num_df_per_set[10]; int df_ind[10], node_ind[10], elem_ind[10], side_ind[10]; int num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_vars; int *truth_tab; int whole_time_step, num_time_steps; int ndims, nvars, ngatts, recdim; int CPU_word_size,IO_word_size; int prop_array[2]; float *glob_var_vals, *nodal_var_vals, *elem_var_vals; float time_value; float *x, *y, *z, *dummy; float attrib[1], dist_fact[100]; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[3]; char tmpstr[80]; char *prop_names[2]; ex_opts (EX_VERBOSE | EX_ABORT); dummy = 0; /* assign this so the Cray compiler doesn't complain */ /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); /* initialize file with parameters */ num_dim = 3; num_nodes = BIG; num_elem = BIG; num_elem_blk = 5; num_node_sets = 2; num_side_sets = 5; error = ex_put_init (exoid, "This is a test", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); /* write nodal coordinates values and names to database */ if (!(x = (float *) calloc(BIG, sizeof(float)))) { printf ("couldn't allocate memory for x node array%d\n"); exit(1); } if (!(y = (float *) calloc(BIG, sizeof(float)))) { printf ("couldn't allocate memory for y node array%d\n"); exit(1); } if (!(z = (float *) calloc(BIG, sizeof(float)))) { printf ("couldn't allocate memory for z node array%d\n"); exit(1); } for (i=0; i<num_nodes; i++) { /* dummy up the coordinate space */ x[i]=i; y[i]=i+.1; z[i]=i+.2; } error = ex_put_coord (exoid, x, y, z); printf ("after ex_put_coord, error = %d\n", error); coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = i; } error = ex_put_map (exoid, elem_map); printf ("after ex_put_map, error = %d\n", error); free (elem_map); /* write element block parameters */ num_elem_in_block[0] = 1; num_elem_in_block[1] = 1; num_elem_in_block[2] = 1; num_elem_in_block[3] = 1; num_elem_in_block[4] = 1; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #3 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #3 are 6-node wedges */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; error = ex_put_elem_block (exoid, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 1); printf ("after ex_put_elem_block, error = %d\n", error); /* write element block properties */ prop_names[0] = "MATL"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoid,EX_ELEM_BLOCK,2,prop_names); printf ("after ex_put_prop_names, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[0], "MATL", 10); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[1], "MATL", 20); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[2], "MATL", 30); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[3], "MATL", 40); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[4], "MATL", 50); printf ("after ex_put_prop, error = %d\n", error); /* write element connectivity */ connect = (int *) calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[0], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 5; connect[1] = 6; connect[2] = 7; connect[3] = 8; error = ex_put_elem_conn (exoid, ebids[1], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 9; connect[1] = 10; connect[2] = 11; connect[3] = 12; connect[4] = 13; connect[5] = 14; connect[6] = 15; connect[7] = 16; error = ex_put_elem_conn (exoid, ebids[2], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; error = ex_put_elem_conn (exoid, ebids[3], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 21; connect[1] = 22; connect[2] = 23; connect[3] = 24; connect[4] = 25; connect[5] = 26; error = ex_put_elem_conn (exoid, ebids[4], connect); printf ("after ex_put_elem_conn, error = %d\n", error); free (connect); /* write element block attributes */ attrib[0] = 3.14159; error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); attrib[0] = 6.14159; error = ex_put_elem_attr (exoid, ebids[1], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[2], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[3], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[4], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); /* write individual node sets */ error = ex_put_node_set_param (exoid, 20, 5, 5); printf ("after ex_put_node_set_param, error = %d\n", error); node_list[0] = 10; node_list[1] = 11; node_list[2] = 12; node_list[3] = 13; node_list[4] = 14; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; error = ex_put_node_set (exoid, 20, node_list); printf ("after ex_put_node_set, error = %d\n", error); error = ex_put_node_set_dist_fact (exoid, 20, dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); error = ex_put_node_set_param (exoid, 21, 3, 3); printf ("after ex_put_node_set_param, error = %d\n", error); node_list[0] = 20; node_list[1] = 21; node_list[2] = 22; dist_fact[0] = 1.1; dist_fact[1] = 2.1; dist_fact[2] = 3.1; error = ex_put_node_set (exoid, 21, node_list); printf ("after ex_put_node_set, error = %d\n", error); error = ex_put_node_set_dist_fact (exoid, 21, dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); /* write concatenated node sets; this produces the same information as * the above code which writes individual node sets */ /* THIS SECTION IS COMMENTED OUT ids[0] = 20; ids[1] = 21; num_nodes_per_set[0] = 5; num_nodes_per_set[1] = 3; node_ind[0] = 0; node_ind[1] = 5; node_list[0] = 10; node_list[1] = 11; node_list[2] = 12; node_list[3] = 13; node_list[4] = 14; node_list[5] = 20; node_list[6] = 21; node_list[7] = 22; num_df_per_set[0] = 5; num_df_per_set[1] = 3; df_ind[0] = 0; df_ind[1] = 5; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; dist_fact[5] = 1.1; dist_fact[6] = 2.1; dist_fact[7] = 3.1; error = ex_put_concat_node_sets (exoid, ids, num_nodes_per_set, num_df_per_set, node_ind, df_ind, node_list, dist_fact); printf ("after ex_put_concat_node_sets, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); END COMMENTED OUT SECTION */ /* write individual side sets */ /* side set #1 - quad */ error = ex_put_side_set_param (exoid, 30, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 2; elem_list[1] = 2; side_list[0] = 4; side_list[1] = 2; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; error = ex_put_side_set (exoid, 30, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); error = ex_put_side_set_dist_fact (exoid, 30, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #2 - quad, spanning 2 elements */ error = ex_put_side_set_param (exoid, 31, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 1; elem_list[1] = 2; side_list[0] = 2; side_list[1] = 3; dist_fact[0] = 31.0; dist_fact[1] = 31.1; dist_fact[2] = 31.2; dist_fact[3] = 31.3; error = ex_put_side_set (exoid, 31, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); error = ex_put_side_set_dist_fact (exoid, 31, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #3 - hex */ error = ex_put_side_set_param (exoid, 32, 7, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 3; elem_list[1] = 3; elem_list[2] = 3; elem_list[3] = 3; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; side_list[0] = 5; side_list[1] = 3; side_list[2] = 3; side_list[3] = 2; side_list[4] = 4; side_list[5] = 1; side_list[6] = 6; error = ex_put_side_set (exoid, 32, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); /* side set #4 - tetras */ error = ex_put_side_set_param (exoid, 33, 4, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 4; elem_list[1] = 4; elem_list[2] = 4; elem_list[3] = 4; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; error = ex_put_side_set (exoid, 33, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); /* side set #5 - wedges */ error = ex_put_side_set_param (exoid, 34, 5, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 5; elem_list[1] = 5; elem_list[2] = 5; elem_list[3] = 5; elem_list[4] = 5; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 5; error = ex_put_side_set (exoid, 34, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); /* END COMMENTED OUT SECTION */ /* write concatenated side sets; this produces the same information as * the above code which writes individual side sets */ /* THIS SECTION IS COMMENTED OUT ids[0] = 30; ids[1] = 31; ids[2] = 32; ids[3] = 33; ids[4] = 34; node_list[0] = 8; node_list[1] = 5; node_list[2] = 6; node_list[3] = 7; node_list[4] = 2; node_list[5] = 3; node_list[6] = 7; node_list[7] = 8; node_list[8] = 9; node_list[9] = 12; node_list[10] = 11; node_list[11] = 10; node_list[12] = 11; node_list[13] = 12; node_list[14] = 16; node_list[15] = 15; node_list[16] = 16; node_list[17] = 15; node_list[18] = 11; node_list[19] = 12; node_list[20] = 10; node_list[21] = 11; node_list[22] = 15; node_list[23] = 14; node_list[24] = 13; node_list[25] = 16; node_list[26] = 12; node_list[27] = 9; node_list[28] = 14; node_list[29] = 13; node_list[30] = 9; node_list[31] = 10; node_list[32] = 16; node_list[33] = 13; node_list[34] = 14; node_list[35] = 15; node_list[36] = 17; node_list[37] = 18; node_list[38] = 20; node_list[39] = 18; node_list[40] = 19; node_list[41] = 20; node_list[42] = 20; node_list[43] = 19; node_list[44] = 17; node_list[45] = 19; node_list[46] = 18; node_list[47] = 17; node_list[48] = 25; node_list[49] = 24; node_list[50] = 21; node_list[51] = 22; node_list[52] = 26; node_list[53] = 25; node_list[54] = 22; node_list[55] = 23; node_list[56] = 26; node_list[57] = 23; node_list[58] = 21; node_list[59] = 24; node_list[60] = 23; node_list[61] = 22; node_list[62] = 21; node_list[63] = 24; node_list[64] = 25; node_list[65] = 26; node_ind[0] = 0; node_ind[1] = 4; node_ind[2] = 8; node_ind[3] = 36; node_ind[4] = 47; num_elem_per_set[0] = 2; num_elem_per_set[1] = 2; num_elem_per_set[2] = 7; num_elem_per_set[3] = 4; num_elem_per_set[4] = 5; num_nodes_per_set[0] = 4; num_nodes_per_set[1] = 4; num_nodes_per_set[2] = 28; num_nodes_per_set[3] = 12; num_nodes_per_set[4] = 18; elem_ind[0] = 0; elem_ind[1] = 2; elem_ind[2] = 4; elem_ind[3] = 11; elem_ind[4] = 15; elem_list[0] = 2; elem_list[1] = 2; elem_list[2] = 1; elem_list[3] = 2; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; elem_list[7] = 3; elem_list[8] = 3; elem_list[9] = 3; elem_list[10] = 3; elem_list[11] = 4; elem_list[12] = 4; elem_list[13] = 4; elem_list[14] = 4; elem_list[15] = 5; elem_list[16] = 5; elem_list[17] = 5; elem_list[18] = 5; elem_list[19] = 5; error = ex_cvt_nodes_to_sides(exoid, num_elem_per_set, num_nodes_per_set, elem_ind, node_ind, elem_list, node_list, side_list); printf ("after ex_cvt_nodes_to_sides, error = %d\n", error); num_df_per_set[0] = 4; num_df_per_set[1] = 4; num_df_per_set[2] = 0; num_df_per_set[3] = 0; num_df_per_set[4] = 0; df_ind[0] = 0; df_ind[1] = 4; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; dist_fact[4] = 31.0; dist_fact[5] = 31.1; dist_fact[6] = 31.2; dist_fact[7] = 31.3; error = ex_put_concat_side_sets (exoid, ids, num_elem_per_set, num_df_per_set, elem_ind, df_ind, elem_list, side_list, dist_fact); printf ("after ex_put_concat_side_sets, error = %d\n", error); /* END COMMENTED OUT SECTION */ error = ex_put_prop(exoid, EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop, error = %d\n", error); /* write QA records */ num_qa_rec = 2; qa_record[0][0] = "TESTWT"; qa_record[0][1] = "testwt"; qa_record[0][2] = "07/07/93"; qa_record[0][3] = "15:41:33"; qa_record[1][0] = "FASTQ"; qa_record[1][1] = "fastq"; qa_record[1][2] = "07/07/93"; qa_record[1][3] = "16:41:33"; error = ex_put_qa (exoid, num_qa_rec, qa_record); printf ("after ex_put_qa, error = %d\n", error); /* write information records */ num_info = 3; info[0] = "This is the first information record."; info[1] = "This is the second information record."; info[2] = "This is the third information record."; error = ex_put_info (exoid, num_info, info); printf ("after ex_put_info, error = %d\n", error); /* write results variables parameters and names */ num_glo_vars = 1; var_names[0] = "glo_vars"; error = ex_put_var_param (exoid, "g", num_glo_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "g", num_glo_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); num_nod_vars = 2; var_names[0] = "nod_var0"; var_names[1] = "nod_var1"; error = ex_put_var_param (exoid, "n", num_nod_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "n", num_nod_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); num_ele_vars = 3; var_names[0] = "ele_var0"; var_names[1] = "ele_var1"; var_names[2] = "ele_var2"; error = ex_put_var_param (exoid, "e", num_ele_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "e", num_ele_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); /* write element variable truth table */ truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int)); k = 0; for (i=0; i<num_elem_blk; i++) { for (j=0; j<num_ele_vars; j++) { truth_tab[k++] = 1; } } error = ex_put_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab); printf ("after ex_put_elem_var_tab, error = %d\n", error); free (truth_tab); /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, CPU_word_size); nodal_var_vals = (float *) calloc (num_nodes, CPU_word_size); elem_var_vals = (float *) calloc (4, CPU_word_size); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); /* write nodal variables */ for (k=1; k<=num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nodal_var_vals[j] = (float)k + ((float)(j+1) * time_value); } error = ex_put_nodal_var (exoid, whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var, error = %d\n", error); } /* write element variables */ for (k=1; k<=num_ele_vars; k++) { for (j=0; j<num_elem_blk; j++) { for (m=0; m<num_elem_in_block[j]; m++) { elem_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); /* printf("elem_var_vals[%d]: %f\n",m,elem_var_vals[m]); */ } error = ex_put_elem_var (exoid, whole_time_step, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf ("after ex_put_elem_var, error = %d\n", error); } } whole_time_step++; /* update the data file; this should be done at the end of every time step * to ensure that no data is lost if the analysis dies */ error = ex_update (exoid); printf ("after ex_update, error = %d\n", error); } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); /* close the EXODUS files */ error = ex_close (exoid); printf ("after ex_close, error = %d\n", error); return 0; }
void write_to_exodus(int rank, int num_procs, char * out_file_name) /*****************************************************************************/ { int exo_access = EX_CLOBBER; int cpu_word_size = sizeof(double); int io_word_size = sizeof(float); int out_id; int i; int b; ex_init_params exinit; int error = 0; out_id = ex_create(out_file_name, exo_access, &cpu_word_size, &io_word_size); if (out_id < 0){ printf("error opening file"); } strncpy( exinit.title, mss.title, MAX_LINE_LENGTH-1 ); exinit.title[MAX_LINE_LENGTH-1] = 0; exinit.num_dim = mss.num_dim; exinit.num_nodes = mss.num_nodes; exinit.num_edge = 0; exinit.num_edge_blk = 0; exinit.num_face = 0; exinit.num_face_blk = 0; exinit.num_elem = mss.num_elem; exinit.num_elem_blk = mss.num_elem_blk; exinit.num_node_sets = mss.num_node_sets; exinit.num_edge_sets = 0; exinit.num_face_sets = 0; exinit.num_side_sets = mss.num_side_sets; exinit.num_elem_sets = 0; exinit.num_node_maps = 0; exinit.num_edge_maps = 0; exinit.num_face_maps = 0; exinit.num_elem_maps = 0; PERROR; if ( ex_put_init_ext(out_id, &exinit) < 0 ) ++error; PERROR; /*now write parallel global information*/ if ( ne_put_init_global( out_id, mss.num_nodes_global, mss.num_elems_global, mss.num_elm_blks_global, mss.num_node_sets_global, mss.num_side_sets_global ) < 0 ) ++error; PERROR; if ( ne_put_init_info( out_id, mss.num_total_proc, mss.num_proc_in_file, mss.type ) < 0 ) ++error; PERROR; if ( ne_put_eb_info_global(out_id,mss.elem_blk_ids_global,mss.elem_blk_cnts_global) < 0 ) ++error; PERROR; if ( mss.num_node_sets_global > 0 ) { if ( ne_put_ns_param_global( out_id, mss.ns_ids_global, mss.ns_cnts_global, mss.ns_df_cnts_global ) < 0 ) ++error; } PERROR; if ( mss.num_side_sets_global > 0 ) { if ( ne_put_ss_param_global( out_id, mss.ss_ids_global, mss.ss_cnts_global, mss.ss_df_cnts_global ) < 0 ) ++error; } PERROR; /*writingparallel info*/ if ( ne_put_loadbal_param( out_id, mss.num_internal_nodes, mss.num_border_nodes, mss.num_external_nodes, mss.num_internal_elems, mss.num_border_elems, mss.num_node_comm_maps, mss.num_elem_comm_maps, rank ) < 0 ) ++error; PERROR; if ( ne_put_cmap_params( out_id, mss.node_cmap_ids, (int*)mss.node_cmap_node_cnts, mss.elem_cmap_ids, (int*)mss.elem_cmap_elem_cnts, rank ) < 0 ) ++error; PERROR; if ( ne_put_elem_map( out_id, mss.internal_elements, mss.border_elements, rank ) < 0 ) ++error; PERROR; if ( ne_put_node_map( out_id, mss.internal_nodes, mss.border_nodes, mss.external_nodes, rank ) < 0 ) ++error; PERROR; for (i = 0; i < mss.num_node_comm_maps; i++) { if ( ne_put_node_cmap( out_id, mss.node_cmap_ids[i], mss.comm_node_ids[i], mss.comm_node_proc_ids[i], rank ) < 0 ) ++error; } PERROR; for (i = 0; i < mss.num_elem_comm_maps; i++) { if ( ne_put_elem_cmap( out_id, mss.elem_cmap_ids[i], mss.comm_elem_ids[i], mss.comm_side_ids[i], mss.comm_elem_proc_ids[i], rank ) < 0 ) ++error; } PERROR; /*coords*/ error += ex_put_coord(out_id, mss.coord, (mss.coord)+mss.num_nodes, (mss.coord)+2*mss.num_nodes); PERROR; error += ex_put_coord_names(out_id, mss.bptr); PERROR; /*map*/ error += ex_put_map(out_id, mss.element_order_map); PERROR; error += ex_put_elem_num_map(out_id, mss.global_element_numbers); PERROR; error += ex_put_node_num_map(out_id, mss.global_node_numbers); PERROR; /*block info*/ for(b = 0; b < mss.num_elem_blk; b++) { int gpe = 0; int fpe = 0; error += ex_put_block( out_id, EX_ELEM_BLOCK, mss.block_id[b], mss.element_types[b], mss.elements[b], mss.nodes_per_element[b], gpe, fpe, mss.element_attributes[b] ); /* num attr */ PERROR; } /* write element connectivity information */ for (b = 0; b < mss.num_elem_blk; b++) { if ( mss.elements[b] > 0 ){ error += ex_put_elem_conn(out_id,mss.block_id[b],mss.elmt_node_linkage[b]); PERROR; } } /* write in nodal boundary sets for the body. */ for(i = 0; i < mss.num_node_sets; i++) { error += ex_put_node_set_param(out_id, mss.node_set_id[i], mss.num_nodes_in_node_set[i], mss.num_df_in_node_set[i]); PERROR; if(mss.num_nodes_in_node_set[i]) error += ex_put_node_set(out_id, mss.node_set_id[i], mss.node_set_nodes[i]); PERROR; } for(i = 0; i < mss.num_side_sets; i++) { error += ex_put_side_set_param(out_id, mss.side_set_id[i], mss.num_elements_in_side_set[i], mss.num_df_in_side_set[i]); PERROR; if(mss.num_elements_in_side_set[i]) error += ex_put_side_set(out_id, mss.side_set_id[i], mss.side_set_elements[i], mss.side_set_faces[i]); PERROR; } error += ex_put_qa(out_id, mss.num_qa_records, mss.qaRecord); PERROR; ex_close(out_id); }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10]; int num_face_in_sset[10], num_nodes_in_nset[10]; int num_node_sets, num_side_sets, error; int i, j, k, m, *elem_map, *connect; int node_list[100],elem_list[100],side_list[100]; int ebids[10], ssids[10], nsids[10]; int num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_vars, num_sset_vars, num_nset_vars; int *truth_tab; int whole_time_step, num_time_steps; int CPU_word_size,IO_word_size; int prop_array[2]; float *glob_var_vals, *nodal_var_vals, *elem_var_vals; float *sset_var_vals, *nset_var_vals; float time_value; float x[100], y[100], z[100]; float attrib[1], dist_fact[100]; char *coord_names[3], *qa_record[2][4], *info[3], *variable_names[3]; char *block_names[10], *nset_names[10], *sset_names[10]; char *prop_names[2], *attrib_names[2]; char *title = "This is a test"; ex_opts (EX_VERBOSE | EX_ABORT ); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); ex_set_option(exoid, EX_OPT_MAX_NAME_LENGTH, 127); /* Using long names */ /* initialize file with parameters */ num_dim = 3; num_nodes = 33; num_elem = 7; num_elem_blk = 7; num_node_sets = 2; num_side_sets = 5; error = ex_put_init (exoid, title, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal coordinates values and names to database */ /* Quad #1 */ x[0] = 0.0; y[0] = 0.0; z[0] = 0.0; x[1] = 1.0; y[1] = 0.0; z[1] = 0.0; x[2] = 1.0; y[2] = 1.0; z[2] = 0.0; x[3] = 0.0; y[3] = 1.0; z[3] = 0.0; /* Quad #2 */ x[4] = 1.0; y[4] = 0.0; z[4] = 0.0; x[5] = 2.0; y[5] = 0.0; z[5] = 0.0; x[6] = 2.0; y[6] = 1.0; z[6] = 0.0; x[7] = 1.0; y[7] = 1.0; z[7] = 0.0; /* Hex #1 */ x[8] = 0.0; y[8] = 0.0; z[8] = 0.0; x[9] = 10.0; y[9] = 0.0; z[9] = 0.0; x[10] = 10.0; y[10] = 0.0; z[10] =-10.0; x[11] = 1.0; y[11] = 0.0; z[11] =-10.0; x[12] = 1.0; y[12] = 10.0; z[12] = 0.0; x[13] = 10.0; y[13] = 10.0; z[13] = 0.0; x[14] = 10.0; y[14] = 10.0; z[14] =-10.0; x[15] = 1.0; y[15] = 10.0; z[15] =-10.0; /* Tetra #1 */ x[16] = 0.0; y[16] = 0.0; z[16] = 0.0; x[17] = 1.0; y[17] = 0.0; z[17] = 5.0; x[18] = 10.0; y[18] = 0.0; z[18] = 2.0; x[19] = 7.0; y[19] = 5.0; z[19] = 3.0; /* Wedge #1 */ x[20] = 3.0; y[20] = 0.0; z[20] = 6.0; x[21] = 6.0; y[21] = 0.0; z[21] = 0.0; x[22] = 0.0; y[22] = 0.0; z[22] = 0.0; x[23] = 3.0; y[23] = 2.0; z[23] = 6.0; x[24] = 6.0; y[24] = 2.0; z[24] = 2.0; x[25] = 0.0; y[25] = 2.0; z[25] = 0.0; /* Tetra #2 */ x[26] = 2.7; y[26] = 1.7; z[26] = 2.7; x[27] = 6.0; y[27] = 1.7; z[27] = 3.3; x[28] = 5.7; y[28] = 1.7; z[28] = 1.7; x[29] = 3.7; y[29] = 0.0; z[29] = 2.3; /* 3d Tri */ x[30] = 0.0; y[30] = 0.0; z[30] = 0.0; x[31] = 10.0; y[31] = 0.0; z[31] = 0.0; x[32] = 10.0; y[32] = 10.0; z[32] = 10.0; error = ex_put_coord (exoid, x, y, z); printf ("after ex_put_coord, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ coord_names[0] = "X coordinate name that is padded to be longer than 32 characters"; coord_names[1] = "Y coordinate name that is padded to be longer than 32 characters"; coord_names[2] = "Z coordinate name that is padded to be longer than 32 characters"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Add nodal attributes */ error = ex_put_attr_param(exoid, EX_NODAL, 0, 2); printf ("after ex_put_attr_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_one_attr(exoid, EX_NODAL, 0, 1, x); if (error) { ex_close (exoid); exit(-1); } error = ex_put_one_attr(exoid, EX_NODAL, 0, 2, y); if (error) { ex_close (exoid); exit(-1); } { attrib_names[0] = "Node_attr_1"; attrib_names[1] = "Node_attr_2"; error = ex_put_attr_names (exoid, EX_NODAL, 0, attrib_names); if (error) { ex_close (exoid); exit(-1); } } /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = i; } error = ex_put_map (exoid, elem_map); printf ("after ex_put_map, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (elem_map); /* write element block parameters */ /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ block_names[0] = "Very long name for block_1 that exceeds 32 characters"; block_names[1] = "Very long name for block_2 that exceeds 32 characters"; block_names[2] = "Very long name for block_3 that exceeds 32 characters"; block_names[3] = "Very long name for block_4 that exceeds 32 characters"; block_names[4] = "Very long name for block_5 that exceeds 32 characters"; block_names[5] = "Very long name for block_6 that exceeds 32 characters"; block_names[6] = "Very long name for block_7 that exceeds 32 characters"; num_elem_in_block[0] = 1; num_elem_in_block[1] = 1; num_elem_in_block[2] = 1; num_elem_in_block[3] = 1; num_elem_in_block[4] = 1; num_elem_in_block[5] = 1; num_elem_in_block[6] = 1; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #4 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #5 are 6-node wedges */ num_nodes_per_elem[5] = 8; /* elements in block #6 are 8-node tetras */ num_nodes_per_elem[6] = 3; /* elements in block #7 are 3-node tris */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; ebids[5] = 15; ebids[6] = 16; error = ex_put_elem_block (exoid, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[5], "tetra", num_elem_in_block[5], num_nodes_per_elem[5], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[6], "tri", num_elem_in_block[6], num_nodes_per_elem[6], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write element block names */ error = ex_put_names(exoid, EX_ELEM_BLOCK, block_names); printf ("after ex_put_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element block properties */ /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ prop_names[0] = "MATERIAL_PROPERTY_LONG_NAME_32CH"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoid,EX_ELEM_BLOCK,2,prop_names); printf ("after ex_put_prop_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[0], prop_names[0], 10); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[1], prop_names[0], 20); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[2], prop_names[0], 30); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[3], prop_names[0], 40); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[4], prop_names[0], 50); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[5], prop_names[0], 60); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[6], prop_names[0], 70); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element connectivity */ connect = (int *) calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[0], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 5; connect[1] = 6; connect[2] = 7; connect[3] = 8; error = ex_put_elem_conn (exoid, ebids[1], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 9; connect[1] = 10; connect[2] = 11; connect[3] = 12; connect[4] = 13; connect[5] = 14; connect[6] = 15; connect[7] = 16; error = ex_put_elem_conn (exoid, ebids[2], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; error = ex_put_elem_conn (exoid, ebids[3], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 21; connect[1] = 22; connect[2] = 23; connect[3] = 24; connect[4] = 25; connect[5] = 26; error = ex_put_elem_conn (exoid, ebids[4], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; connect[4] = 27; connect[5] = 28; connect[6] = 30; connect[7] = 29; error = ex_put_elem_conn (exoid, ebids[5], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 31; connect[1] = 32; connect[2] = 33; error = ex_put_elem_conn (exoid, ebids[6], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (connect); /* write element block attributes */ attrib[0] = 3.14159; error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } attrib[0] = 6.14159; error = ex_put_elem_attr (exoid, ebids[1], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[2], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[3], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[4], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[5], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[6], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ attrib_names[0] = "The name for the attribute representing the shell thickness"; for (i=0; i < 7; i++) { error = ex_put_elem_attr_names (exoid, ebids[i], attrib_names); printf ("after ex_put_elem_attr_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write individual node sets */ num_nodes_in_nset[0] = 5; num_nodes_in_nset[1] = 3; nsids[0] = 20; nsids[1] = 21; error = ex_put_node_set_param (exoid, nsids[0], 5, 5); printf ("after ex_put_node_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } node_list[0] = 10; node_list[1] = 11; node_list[2] = 12; node_list[3] = 13; node_list[4] = 14; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; error = ex_put_node_set (exoid, nsids[0], node_list); printf ("after ex_put_node_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_dist_fact (exoid, nsids[0], dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_param (exoid, nsids[1], 3, 3); printf ("after ex_put_node_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } node_list[0] = 20; node_list[1] = 21; node_list[2] = 22; dist_fact[0] = 1.1; dist_fact[1] = 2.1; dist_fact[2] = 3.1; error = ex_put_node_set (exoid, nsids[1], node_list); printf ("after ex_put_node_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_dist_fact (exoid, nsids[1], dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write node set names */ nset_names[0] = "nset_1"; nset_names[1] = "nset_2"; error = ex_put_names(exoid, EX_NODE_SET, nset_names); printf ("after ex_put_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_NODE_SET, nsids[0], "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_NODE_SET, nsids[1], "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Add nodeset attributes */ error = ex_put_attr_param(exoid, EX_NODE_SET, nsids[0], 1); printf ("after ex_put_attr_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_attr(exoid, EX_NODE_SET, nsids[0], x); if (error) { ex_close (exoid); exit(-1); } { attrib_names[0] = "Nodeset_attribute"; error = ex_put_attr_names (exoid, EX_NODE_SET, nsids[0], attrib_names); if (error) { ex_close (exoid); exit(-1); } } /* write individual side sets */ num_face_in_sset[0] = 2; num_face_in_sset[1] = 2; num_face_in_sset[2] = 7; num_face_in_sset[3] = 8; num_face_in_sset[4] = 10; ssids[0] = 30; ssids[1] = 31; ssids[2] = 32; ssids[3] = 33; ssids[4] = 34; /* side set #1 - quad */ error = ex_put_side_set_param (exoid, ssids[0], 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 2; elem_list[1] = 2; side_list[0] = 4; side_list[1] = 2; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; error = ex_put_side_set (exoid, 30, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 30, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #2 - quad, spanning 2 elements */ error = ex_put_side_set_param (exoid, 31, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 1; elem_list[1] = 2; side_list[0] = 2; side_list[1] = 3; dist_fact[0] = 31.0; dist_fact[1] = 31.1; dist_fact[2] = 31.2; dist_fact[3] = 31.3; error = ex_put_side_set (exoid, 31, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 31, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #3 - hex */ error = ex_put_side_set_param (exoid, 32, 7, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 3; elem_list[1] = 3; elem_list[2] = 3; elem_list[3] = 3; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; side_list[0] = 5; side_list[1] = 3; side_list[2] = 3; side_list[3] = 2; side_list[4] = 4; side_list[5] = 1; side_list[6] = 6; error = ex_put_side_set (exoid, 32, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #4 - tetras */ error = ex_put_side_set_param (exoid, 33, 8, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 4; elem_list[1] = 4; elem_list[2] = 4; elem_list[3] = 4; elem_list[4] = 6; elem_list[5] = 6; elem_list[6] = 6; elem_list[7] = 6; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 1; side_list[5] = 2; side_list[6] = 3; side_list[7] = 4; error = ex_put_side_set (exoid, 33, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #5 - wedges and tris */ error = ex_put_side_set_param (exoid, 34, 10, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 5; elem_list[1] = 5; elem_list[2] = 5; elem_list[3] = 5; elem_list[4] = 5; elem_list[5] = 7; elem_list[6] = 7; elem_list[7] = 7; elem_list[8] = 7; elem_list[9] = 7; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 5; side_list[5] = 1; side_list[6] = 2; side_list[7] = 3; side_list[8] = 4; side_list[9] = 5; error = ex_put_side_set (exoid, 34, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write side set names */ sset_names[0] = "sset_1"; sset_names[1] = "sset_2"; sset_names[2] = "sset_3"; sset_names[3] = "sset_4"; sset_names[4] = "sset_5"; error = ex_put_names(exoid, EX_SIDE_SET, sset_names); printf ("after ex_put_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write QA records; test empty and just blank-filled records */ num_qa_rec = 2; qa_record[0][0] = "TESTWT"; qa_record[0][1] = "testwt"; qa_record[0][2] = "07/07/93"; qa_record[0][3] = "15:41:33"; qa_record[1][0] = ""; qa_record[1][1] = " "; qa_record[1][2] = ""; qa_record[1][3] = " "; error = ex_put_qa (exoid, num_qa_rec, qa_record); printf ("after ex_put_qa, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write information records; test empty and just blank-filled records */ num_info = 3; info[0] = "This is the first information record."; info[1] = ""; info[2] = " "; error = ex_put_info (exoid, num_info, info); printf ("after ex_put_info, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write results variables parameters and names */ num_glo_vars = 1; variable_names[0] = "glo_vars"; error = ex_put_variable_param (exoid, EX_GLOBAL, num_glo_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_GLOBAL, num_glo_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } num_nod_vars = 2; /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ variable_names[0] = "node_variable_a_somewhat_long_name_0"; variable_names[1] = "node_variable_a_much_longer_name_that_is_not_too_long_name"; error = ex_put_variable_param (exoid, EX_NODAL, num_nod_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_NODAL, num_nod_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } num_ele_vars = 3; /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ variable_names[0] = "the_stress_on_the_elements_in_this_block_that_are_active_now"; variable_names[1] = "ele_var1"; variable_names[2] = "ele_var2"; error = ex_put_variable_param (exoid, EX_ELEM_BLOCK, num_ele_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_ELEM_BLOCK, num_ele_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } { num_nset_vars = 3; variable_names[0] = "ns_var0"; variable_names[1] = "ns_var1"; variable_names[2] = "ns_var2"; error = ex_put_variable_param (exoid, EX_NODE_SET, num_nset_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_NODE_SET, num_nset_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } { num_sset_vars = 3; variable_names[0] = "ss_var0"; variable_names[1] = "ss_var1"; variable_names[2] = "ss_var2"; error = ex_put_variable_param (exoid, EX_SIDE_SET, num_sset_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_SIDE_SET, num_sset_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write element variable truth table */ truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int)); k = 0; for (i=0; i<num_elem_blk; i++) { for (j=0; j<num_ele_vars; j++) { truth_tab[k++] = 1; } } error = ex_put_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab); printf ("after ex_put_elem_var_tab, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (truth_tab); /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, CPU_word_size); nodal_var_vals = (float *) calloc (num_nodes, CPU_word_size); elem_var_vals = (float *) calloc (4, CPU_word_size); sset_var_vals = (float *) calloc (10, CPU_word_size); nset_var_vals = (float *) calloc (10, CPU_word_size); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal variables */ for (k=1; k<=num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nodal_var_vals[j] = (float)k + ((float)(j+1) * time_value); } error = ex_put_nodal_var (exoid, whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write element variables */ for (k=1; k<=num_ele_vars; k++) { for (j=0; j<num_elem_blk; j++) { for (m=0; m<num_elem_in_block[j]; m++) { elem_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); /* printf("elem_var_vals[%d]: %f\n",m,elem_var_vals[m]); */ } error = ex_put_elem_var (exoid, whole_time_step, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf ("after ex_put_elem_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } /* write sideset variables */ for (k=1; k<=num_sset_vars; k++) { for (j=0; j<num_side_sets; j++) { for (m=0; m<num_face_in_sset[j]; m++) { sset_var_vals[m] = (float)(k+2) + (float)(j+3) + ((float)(m+1)*time_value); /* printf("sset_var_vals[%d]: %f\n",m,sset_var_vals[m]); */ } error = ex_put_sset_var (exoid, whole_time_step, k, ssids[j], num_face_in_sset[j], sset_var_vals); printf ("after ex_put_sset_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } /* write nodeset variables */ for (k=1; k<=num_nset_vars; k++) { for (j=0; j<num_node_sets; j++) { for (m=0; m<num_nodes_in_nset[j]; m++) { nset_var_vals[m] = (float)(k+3) + (float)(j+4) + ((float)(m+1)*time_value); /* printf("nset_var_vals[%d]: %f\n",m,nset_var_vals[m]); */ } error = ex_put_nset_var (exoid, whole_time_step, k, nsids[j], num_nodes_in_nset[j], nset_var_vals); printf ("after ex_put_nset_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } whole_time_step++; /* update the data file; this should be done at the end of every time step * to ensure that no data is lost if the analysis dies */ error = ex_update (exoid); printf ("after ex_update, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); free(sset_var_vals); free(nset_var_vals); /* close the EXODUS files */ error = ex_close (exoid); printf ("after ex_close, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } return 0; }
int main(int argc, char **argv) { int exoid, exoid2, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block, num_node_sets, num_nodes_per_elem, num_attr; int num_side_sets, error; int i, j; int *elem_map, *connect, *node_list, *node_ctr_list, *elem_list, *side_list; int *ids; int num_nodes_in_set, num_elem_in_set; int num_sides_in_set, num_df_in_set; int num_qa_rec, num_info; int CPU_word_size, IO_word_size; int num_props, prop_value, *prop_values; float *x, *y, *z; float *dist_fact; float version, fdum; float attrib[1]; char *coord_names[3], *qa_record[2][4], *info[3]; char title[MAX_LINE_LENGTH + 1], elem_type[MAX_STR_LENGTH + 1]; char *prop_names[3]; char *cdum = 0; /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* float */ /* open EXODUS II file for reading */ ex_opts(EX_VERBOSE | EX_ABORT); exoid = ex_open("test.exo", /* filename path */ EX_READ, /* access mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size, /* I/O float word size in bytes */ &version); /* returned version number */ printf("after ex_open for test.exo\n"); printf(" cpu word size: %d io word size: %d\n", CPU_word_size, IO_word_size); /* create EXODUS II file for writing */ exoid2 = ex_create("test2.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf("after ex_create for test2.exo, exoid = %d\n", exoid2); /* read initialization parameters */ error = ex_get_init(exoid, title, &num_dim, &num_nodes, &num_elem, &num_elem_blk, &num_node_sets, &num_side_sets); printf("after ex_get_init, error = %d\n", error); /* write initialization parameters */ error = ex_put_init(exoid2, title, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf("after ex_put_init, error = %d\n", error); /* read nodal coordinate values */ x = (float *)calloc(num_nodes, sizeof(float)); y = (float *)calloc(num_nodes, sizeof(float)); if (num_dim >= 3) z = (float *)calloc(num_nodes, sizeof(float)); else z = 0; error = ex_get_coord(exoid, x, y, z); printf("\nafter ex_get_coord, error = %3d\n", error); /* write nodal coordinate values */ error = ex_put_coord(exoid2, x, y, z); printf("after ex_put_coord, error = %d\n", error); free(x); free(y); if (num_dim >= 3) free(z); /* read nodal coordinate names */ for (i = 0; i < num_dim; i++) { coord_names[i] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } error = ex_get_coord_names(exoid, coord_names); printf("\nafter ex_get_coord_names, error = %3d\n", error); /* write nodal coordinate names */ error = ex_put_coord_names(exoid2, coord_names); printf("after ex_put_coord_names, error = %d\n", error); for (i = 0; i < num_dim; i++) { free(coord_names[i]); } /* read element order map */ elem_map = (int *)calloc(num_elem, sizeof(int)); error = ex_get_map(exoid, elem_map); printf("\nafter ex_get_map, error = %3d\n", error); /* write element order map */ error = ex_put_map(exoid2, elem_map); printf("after ex_put_map, error = %d\n", error); free(elem_map); /* read and write element block parameters and element connectivity */ ids = (int *)calloc(num_elem_blk, sizeof(int)); error = ex_get_elem_blk_ids(exoid, ids); printf("\nafter ex_get_elem_blk_ids, error = %3d\n", error); attrib[0] = 3.14159; for (i = 0; i < num_elem_blk; i++) { error = ex_get_elem_block(exoid, ids[i], elem_type, &num_elem_in_block, &num_nodes_per_elem, &num_attr); printf("\nafter ex_get_elem_block, error = %d\n", error); error = ex_put_elem_block(exoid2, ids[i], elem_type, num_elem_in_block, num_nodes_per_elem, num_attr); printf("after ex_put_elem_block, error = %d\n", error); connect = (int *)calloc((num_nodes_per_elem * num_elem_in_block), sizeof(int)); error = ex_get_elem_conn(exoid, ids[i], connect); printf("\nafter ex_get_elem_conn, error = %d\n", error); error = ex_put_elem_conn(exoid2, ids[i], connect); printf("after ex_put_elem_conn, error = %d\n", error); /* write element block attributes */ error = ex_put_attr(exoid2, EX_ELEM_BLOCK, ids[i], attrib); printf("after ex_put_elem_attr, error = %d\n", error); free(connect); } /* read and write element block properties */ error = ex_inquire(exoid, EX_INQ_EB_PROP, &num_props, &fdum, cdum); printf("\nafter ex_inquire, error = %d\n", error); for (i = 0; i < num_props; i++) { prop_names[i] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } error = ex_get_prop_names(exoid, EX_ELEM_BLOCK, prop_names); printf("after ex_get_prop_names, error = %d\n", error); error = ex_put_prop_names(exoid2, EX_ELEM_BLOCK, num_props, prop_names); printf("after ex_put_prop_names, error = %d\n", error); for (i = 0; i < num_props; i++) { for (j = 0; j < num_elem_blk; j++) { error = ex_get_prop(exoid, EX_ELEM_BLOCK, ids[j], prop_names[i], &prop_value); printf("after ex_get_prop, error = %d\n", error); if (i > 0) { /* first property is the ID which is already stored */ error = ex_put_prop(exoid2, EX_ELEM_BLOCK, ids[j], prop_names[i], prop_value); printf("after ex_put_prop, error = %d\n", error); } } } for (i = 0; i < num_props; i++) free(prop_names[i]); free(ids); /* read and write individual node sets */ ids = (int *)calloc(num_node_sets, sizeof(int)); error = ex_get_node_set_ids(exoid, ids); printf("\nafter ex_get_node_set_ids, error = %3d\n", error); for (i = 0; i < num_node_sets; i++) { error = ex_get_node_set_param(exoid, ids[i], &num_nodes_in_set, &num_df_in_set); printf("\nafter ex_get_node_set_param, error = %3d\n", error); error = ex_put_node_set_param(exoid2, ids[i], num_nodes_in_set, num_df_in_set); printf("after ex_put_node_set_param, error = %d\n", error); node_list = (int *)calloc(num_nodes_in_set, sizeof(int)); dist_fact = (float *)calloc(num_nodes_in_set, sizeof(float)); error = ex_get_node_set(exoid, ids[i], node_list); printf("\nafter ex_get_node_set, error = %3d\n", error); error = ex_put_node_set(exoid2, ids[i], node_list); printf("after ex_put_node_set, error = %d\n", error); if (num_df_in_set > 0) { error = ex_get_node_set_dist_fact(exoid, ids[i], dist_fact); printf("\nafter ex_get_node_set_dist_fact, error = %3d\n", error); error = ex_put_node_set_dist_fact(exoid2, ids[i], dist_fact); printf("after ex_put_node_set, error = %d\n", error); } free(node_list); free(dist_fact); } free(ids); /* read node set properties */ error = ex_inquire(exoid, EX_INQ_NS_PROP, &num_props, &fdum, cdum); printf("\nafter ex_inquire, error = %d\n", error); for (i = 0; i < num_props; i++) { prop_names[i] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } prop_values = (int *)calloc(num_node_sets, sizeof(int)); error = ex_get_prop_names(exoid, EX_NODE_SET, prop_names); printf("after ex_get_prop_names, error = %d\n", error); error = ex_put_prop_names(exoid2, EX_NODE_SET, num_props, prop_names); printf("after ex_put_prop_names, error = %d\n", error); for (i = 0; i < num_props; i++) { error = ex_get_prop_array(exoid, EX_NODE_SET, prop_names[i], prop_values); printf("after ex_get_prop_array, error = %d\n", error); error = ex_put_prop_array(exoid2, EX_NODE_SET, prop_names[i], prop_values); printf("after ex_put_prop_array, error = %d\n", error); } for (i = 0; i < num_props; i++) free(prop_names[i]); free(prop_values); /* read and write individual side sets */ ids = (int *)calloc(num_side_sets, sizeof(int)); error = ex_get_side_set_ids(exoid, ids); printf("\nafter ex_get_side_set_ids, error = %3d\n", error); for (i = 0; i < num_side_sets; i++) { error = ex_get_side_set_param(exoid, ids[i], &num_sides_in_set, &num_df_in_set); printf("\nafter ex_get_side_set_param, error = %3d\n", error); error = ex_put_side_set_param(exoid2, ids[i], num_sides_in_set, num_df_in_set); printf("after ex_put_side_set_param, error = %d\n", error); /* Note: The # of elements is same as # of sides! */ num_elem_in_set = num_sides_in_set; elem_list = (int *)calloc(num_elem_in_set, sizeof(int)); side_list = (int *)calloc(num_sides_in_set, sizeof(int)); node_ctr_list = (int *)calloc(num_elem_in_set, sizeof(int)); node_list = (int *)calloc(num_elem_in_set * 21, sizeof(int)); dist_fact = (float *)calloc(num_df_in_set, sizeof(float)); error = ex_get_side_set(exoid, ids[i], elem_list, side_list); printf("\nafter ex_get_side_set, error = %3d\n", error); error = ex_put_side_set(exoid2, ids[i], elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); error = ex_get_side_set_node_list(exoid, ids[i], node_ctr_list, node_list); printf("\nafter ex_get_side_set_node_list, error = %3d\n", error); if (num_df_in_set > 0) { error = ex_get_side_set_dist_fact(exoid, ids[i], dist_fact); printf("\nafter ex_get_side_set_dist_fact, error = %3d\n", error); error = ex_put_side_set_dist_fact(exoid2, ids[i], dist_fact); printf("after ex_put_side_set_dist_fact, error = %d\n", error); } free(elem_list); free(side_list); free(node_ctr_list); free(node_list); free(dist_fact); } /* read side set properties */ error = ex_inquire(exoid, EX_INQ_SS_PROP, &num_props, &fdum, cdum); printf("\nafter ex_inquire, error = %d\n", error); for (i = 0; i < num_props; i++) { prop_names[i] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } error = ex_get_prop_names(exoid, EX_SIDE_SET, prop_names); printf("after ex_get_prop_names, error = %d\n", error); for (i = 0; i < num_props; i++) { for (j = 0; j < num_side_sets; j++) { error = ex_get_prop(exoid, EX_SIDE_SET, ids[j], prop_names[i], &prop_value); printf("after ex_get_prop, error = %d\n", error); if (i > 0) { /* first property is ID so it is already stored */ error = ex_put_prop(exoid2, EX_SIDE_SET, ids[j], prop_names[i], prop_value); printf("after ex_put_prop, error = %d\n", error); } } } for (i = 0; i < num_props; i++) free(prop_names[i]); free(ids); /* read and write QA records */ ex_inquire(exoid, EX_INQ_QA, &num_qa_rec, &fdum, cdum); for (i = 0; i < num_qa_rec; i++) { for (j = 0; j < 4; j++) { qa_record[i][j] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } } error = ex_get_qa(exoid, qa_record); printf("\nafter ex_get_qa, error = %3d\n", error); error = ex_put_qa(exoid2, num_qa_rec, qa_record); printf("after ex_put_qa, error = %d\n", error); for (i = 0; i < num_qa_rec; i++) { for (j = 0; j < 4; j++) { free(qa_record[i][j]); } } /* read and write information records */ error = ex_inquire(exoid, EX_INQ_INFO, &num_info, &fdum, cdum); printf("\nafter ex_inquire, error = %3d\n", error); for (i = 0; i < num_info; i++) { info[i] = (char *)calloc((MAX_LINE_LENGTH + 1), sizeof(char)); } error = ex_get_info(exoid, info); printf("\nafter ex_get_info, error = %3d\n", error); error = ex_put_info(exoid2, num_info, info); printf("after ex_put_info, error = %d\n", error); for (i = 0; i < num_info; i++) { free(info[i]); } /* close the EXODUS files */ error = ex_close(exoid); printf("after ex_close, error = %d\n", error); error = ex_close(exoid2); printf("after ex_close (2), error = %d\n", error); return 0; }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10]; int num_node_sets, num_side_sets, error; int i, j, k, kk, m, *elem_map, *connect; int node_list[100],elem_list[100],side_list[100]; int ebids[10], ssids[10], nsids[10], nattr[10]; int num_nodes_per_set[10], num_elem_per_set[10]; int num_df_per_set[10]; int num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_vars, num_nset_vars, num_sset_vars; int *truth_tab, *nset_tab, *sset_tab; int whole_time_step, num_time_steps; int CPU_word_size,IO_word_size; int prop_array[2]; float *glob_var_vals, *nodal_var_vals, *elem_var_vals, *nset_var_vals, *sset_var_vals; float time_value; float x[100], y[100], z[100]; float attrib[1], dist_fact[100]; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[7]; char *prop_names[2]; char *eb_type[10]; ex_opts (EX_VERBOSE|EX_ABORT); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); /* ncopts = NC_VERBOSE; */ /* initialize file with parameters */ num_dim = 3; num_nodes = 33; num_elem = 7; num_elem_blk = 7; num_node_sets = 2; num_side_sets = 5; error = ex_put_init (exoid, "This is a test", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal coordinates values and names to database */ /* Quad #1 */ x[0] = 0.0; y[0] = 0.0; z[0] = 0.0; x[1] = 1.0; y[1] = 0.0; z[1] = 0.0; x[2] = 1.0; y[2] = 1.0; z[2] = 0.0; x[3] = 0.0; y[3] = 1.0; z[3] = 0.0; /* Quad #2 */ x[4] = 1.0; y[4] = 0.0; z[4] = 0.0; x[5] = 2.0; y[5] = 0.0; z[5] = 0.0; x[6] = 2.0; y[6] = 1.0; z[6] = 0.0; x[7] = 1.0; y[7] = 1.0; z[7] = 0.0; /* Hex #1 */ x[8] = 0.0; y[8] = 0.0; z[8] = 0.0; x[9] = 10.0; y[9] = 0.0; z[9] = 0.0; x[10] = 10.0; y[10] = 0.0; z[10] =-10.0; x[11] = 1.0; y[11] = 0.0; z[11] =-10.0; x[12] = 1.0; y[12] = 10.0; z[12] = 0.0; x[13] = 10.0; y[13] = 10.0; z[13] = 0.0; x[14] = 10.0; y[14] = 10.0; z[14] =-10.0; x[15] = 1.0; y[15] = 10.0; z[15] =-10.0; /* Tetra #1 */ x[16] = 0.0; y[16] = 0.0; z[16] = 0.0; x[17] = 1.0; y[17] = 0.0; z[17] = 5.0; x[18] = 10.0; y[18] = 0.0; z[18] = 2.0; x[19] = 7.0; y[19] = 5.0; z[19] = 3.0; /* Wedge #1 */ x[20] = 3.0; y[20] = 0.0; z[20] = 6.0; x[21] = 6.0; y[21] = 0.0; z[21] = 0.0; x[22] = 0.0; y[22] = 0.0; z[22] = 0.0; x[23] = 3.0; y[23] = 2.0; z[23] = 6.0; x[24] = 6.0; y[24] = 2.0; z[24] = 2.0; x[25] = 0.0; y[25] = 2.0; z[25] = 0.0; /* Tetra #2 */ x[26] = 2.7; y[26] = 1.7; z[26] = 2.7; x[27] = 6.0; y[27] = 1.7; z[27] = 3.3; x[28] = 5.7; y[28] = 1.7; z[28] = 1.7; x[29] = 3.7; y[29] = 0.0; z[29] = 2.3; /* 3d Tri */ x[30] = 0.0; y[30] = 0.0; z[30] = 0.0; x[31] = 10.0; y[31] = 0.0; z[31] = 0.0; x[32] = 10.0; y[32] = 10.0; z[32] = 10.0; error = ex_put_coord (exoid, x, y, z); printf ("after ex_put_coord, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = i; } error = ex_put_map (exoid, elem_map); printf ("after ex_put_map, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (elem_map); /* write element block parameters */ num_elem_in_block[0] = 1; num_elem_in_block[1] = 1; num_elem_in_block[2] = 1; num_elem_in_block[3] = 1; num_elem_in_block[4] = 1; num_elem_in_block[5] = 1; num_elem_in_block[6] = 1; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #4 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #5 are 6-node wedges */ num_nodes_per_elem[5] = 8; /* elements in block #6 are 8-node tetras */ num_nodes_per_elem[6] = 3; /* elements in block #7 are 3-node tris */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; ebids[5] = 15; ebids[6] = 16; nattr[0] = nattr[1] = nattr[2] = nattr[3] = 1; nattr[4] = nattr[5] = nattr[6] = 1; eb_type[0] = "quad"; eb_type[1] = "quad"; eb_type[2] = "hex"; eb_type[3] = "tetra"; eb_type[4] = "wedge"; eb_type[5] = "tetra"; eb_type[6] = "tri"; error = ex_put_concat_elem_block (exoid, ebids, eb_type, num_elem_in_block, num_nodes_per_elem, nattr, 0); printf ("after ex_put_concat_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element block properties */ prop_names[0] = "MATL"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoid,EX_ELEM_BLOCK,2,prop_names); printf ("after ex_put_prop_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[0], "MATL", 10); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[1], "MATL", 20); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[2], "MATL", 30); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[3], "MATL", 40); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[4], "MATL", 50); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[5], "MATL", 60); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[6], "MATL", 70); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element connectivity */ connect = (int *) calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[0], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 5; connect[1] = 6; connect[2] = 7; connect[3] = 8; error = ex_put_elem_conn (exoid, ebids[1], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 9; connect[1] = 10; connect[2] = 11; connect[3] = 12; connect[4] = 13; connect[5] = 14; connect[6] = 15; connect[7] = 16; error = ex_put_elem_conn (exoid, ebids[2], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; error = ex_put_elem_conn (exoid, ebids[3], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 21; connect[1] = 22; connect[2] = 23; connect[3] = 24; connect[4] = 25; connect[5] = 26; error = ex_put_elem_conn (exoid, ebids[4], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; connect[4] = 27; connect[5] = 28; connect[6] = 30; connect[7] = 29; error = ex_put_elem_conn (exoid, ebids[5], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 31; connect[1] = 32; connect[2] = 33; error = ex_put_elem_conn (exoid, ebids[6], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (connect); /* write element block attributes */ attrib[0] = 3.14159; error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } attrib[0] = 6.14159; error = ex_put_elem_attr (exoid, ebids[1], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[2], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[3], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[4], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[5], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[6], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write individual node sets */ nsids[0] = 20; nsids[1] = 21; num_nodes_per_set[0] = 5; num_nodes_per_set[1] = 3; num_df_per_set[0] = 5; num_df_per_set[1] = 3; error = ex_put_concat_node_sets (exoid, nsids, num_nodes_per_set, num_df_per_set, 0, 0, 0, 0); printf ("after ex_put_concat_node_sets, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } node_list[0] = 10; node_list[1] = 11; node_list[2] = 12; node_list[3] = 13; node_list[4] = 14; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; error = ex_put_node_set (exoid, 20, node_list); printf ("after ex_put_node_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_dist_fact (exoid, 20, dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } node_list[0] = 20; node_list[1] = 21; node_list[2] = 22; dist_fact[0] = 1.1; dist_fact[1] = 2.1; dist_fact[2] = 3.1; error = ex_put_node_set (exoid, 21, node_list); printf ("after ex_put_node_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_dist_fact (exoid, 21, dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Define the sideset params at one time, then write individually */ ssids[0] = 30; ssids[1] = 31; ssids[2] = 32; ssids[3] = 33; ssids[4] = 34; num_elem_per_set[0] = 2; num_elem_per_set[1] = 2; num_elem_per_set[2] = 7; num_elem_per_set[3] = 8; num_elem_per_set[4] = 10; num_df_per_set[0] = 4; num_df_per_set[1] = 4; num_df_per_set[2] = 0; num_df_per_set[3] = 0; num_df_per_set[4] = 0; error = ex_put_concat_side_sets (exoid, ssids, num_elem_per_set, num_df_per_set, 0, 0, 0, 0, 0); printf ("after ex_put_concat_side_sets, error = %d\n", error); /* write individual side sets */ /* side set #1 - quad */ elem_list[0] = 2; elem_list[1] = 2; side_list[0] = 4; side_list[1] = 2; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; error = ex_put_side_set (exoid, 30, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 30, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #2 - quad, spanning 2 elements */ elem_list[0] = 1; elem_list[1] = 2; side_list[0] = 2; side_list[1] = 3; dist_fact[0] = 31.0; dist_fact[1] = 31.1; dist_fact[2] = 31.2; dist_fact[3] = 31.3; error = ex_put_side_set (exoid, 31, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 31, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #3 - hex */ elem_list[0] = 3; elem_list[1] = 3; elem_list[2] = 3; elem_list[3] = 3; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; side_list[0] = 5; side_list[1] = 3; side_list[2] = 3; side_list[3] = 2; side_list[4] = 4; side_list[5] = 1; side_list[6] = 6; error = ex_put_side_set (exoid, 32, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #4 - tetras */ elem_list[0] = 4; elem_list[1] = 4; elem_list[2] = 4; elem_list[3] = 4; elem_list[4] = 6; elem_list[5] = 6; elem_list[6] = 6; elem_list[7] = 6; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 1; side_list[5] = 2; side_list[6] = 3; side_list[7] = 4; error = ex_put_side_set (exoid, 33, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #5 - wedges and tris */ elem_list[0] = 5; elem_list[1] = 5; elem_list[2] = 5; elem_list[3] = 5; elem_list[4] = 5; elem_list[5] = 7; elem_list[6] = 7; elem_list[7] = 7; elem_list[8] = 7; elem_list[9] = 7; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 5; side_list[5] = 1; side_list[6] = 2; side_list[7] = 3; side_list[8] = 4; side_list[9] = 5; error = ex_put_side_set (exoid, 34, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write QA records; test empty and just blank-filled records */ num_qa_rec = 2; qa_record[0][0] = "TESTWT"; qa_record[0][1] = "testwt"; qa_record[0][2] = "07/07/93"; qa_record[0][3] = "15:41:33"; qa_record[1][0] = ""; qa_record[1][1] = " "; qa_record[1][2] = ""; qa_record[1][3] = " "; error = ex_put_qa (exoid, num_qa_rec, qa_record); printf ("after ex_put_qa, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write information records; test empty and just blank-filled records */ num_info = 3; info[0] = "This is the first information record."; info[1] = ""; info[2] = " "; error = ex_put_info (exoid, num_info, info); printf ("after ex_put_info, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write results variables parameters and names */ num_glo_vars = 1; num_nod_vars = 2; num_ele_vars = 3; num_nset_vars = 4; num_sset_vars = 7; truth_tab = (int *) calloc ((num_elem_blk * num_ele_vars), sizeof(int)); nset_tab = (int *) calloc ((num_node_sets * num_nset_vars), sizeof(int)); sset_tab = (int *) calloc ((num_side_sets * num_sset_vars), sizeof(int)); k = 0; for (i=0; i<num_elem_blk; i++) { for (j=0; j<num_ele_vars; j++) { truth_tab[k++] = 1; } } k = 0; for (i=0; i<num_node_sets; i++) { for (j=0; j<num_nset_vars; j++) { if (k%2 == 0) nset_tab[k++] = 1; else nset_tab[k++] = 0; } } k = 0; for (i=0; i<num_side_sets; i++) { for (j=0; j<num_sset_vars; j++) { if (k%2 == 0) sset_tab[k++] = 0; else sset_tab[k++] = 1; } } ex_put_all_var_param(exoid, num_glo_vars, num_nod_vars, num_ele_vars, truth_tab, num_nset_vars, nset_tab, num_sset_vars, sset_tab); printf ("after ex_put_all_var_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (truth_tab); free (nset_tab); free (sset_tab); var_names[0] = "glo_vars"; error = ex_put_var_names (exoid, "g", num_glo_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* 12345678901234567890123456789012 */ var_names[0] = "node_variable_a_very_long_name_0"; var_names[1] = "nod_var1"; error = ex_put_var_names (exoid, "n", num_nod_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } var_names[0] = "ele_var0"; var_names[1] = "ele_var1"; var_names[2] = "ele_var2"; error = ex_put_var_names (exoid, "e", num_ele_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } var_names[0] = "nset_var0"; var_names[1] = "nset_var1"; var_names[2] = "nset_var2"; var_names[3] = "nset_var3"; error = ex_put_var_names (exoid, "m", num_nset_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } var_names[0] = "sset_var0"; var_names[1] = "sset_var1"; var_names[2] = "sset_var2"; var_names[3] = "sset_var3"; var_names[4] = "sset_var4"; var_names[5] = "sset_var5"; var_names[6] = "sset_var6"; error = ex_put_var_names (exoid, "s", num_sset_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, CPU_word_size); nodal_var_vals = (float *) calloc (num_nodes, CPU_word_size); elem_var_vals = (float *) calloc (4, CPU_word_size); nset_var_vals = (float *) calloc (5, CPU_word_size); sset_var_vals = (float *) calloc (10, CPU_word_size); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal variables */ for (k=1; k<=num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nodal_var_vals[j] = (float)k + ((float)(j+1) * time_value); } error = ex_put_nodal_var (exoid, whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write element variables */ for (k=1; k<=num_ele_vars; k++) { for (j=0; j<num_elem_blk; j++) { for (m=0; m<num_elem_in_block[j]; m++) { elem_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); } error = ex_put_elem_var (exoid, whole_time_step, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf ("after ex_put_elem_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } /* write nodeset variables */ kk = 0; for (j=0; j<num_node_sets; j++) { for (k=0; k<num_nset_vars; k++) { if (kk++ % 2 == 0) { for (m=0; m<num_nodes_per_set[j]; m++) { nset_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); } error = ex_put_nset_var (exoid, whole_time_step, k+1, nsids[j], num_nodes_per_set[j], nset_var_vals); printf ("after ex_put_nset_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } } /* write sideset variables */ kk = 0; for (j=0; j<num_side_sets; j++) { for (k=0; k<num_sset_vars; k++) { if (kk++ % 2 != 0) { for (m=0; m<num_elem_per_set[j]; m++) { sset_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); } error = ex_put_sset_var (exoid, whole_time_step, k+1, ssids[j], num_elem_per_set[j], sset_var_vals); printf ("after ex_put_sset_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } } whole_time_step++; /* update the data file; this should be done at the end of every time step * to ensure that no data is lost if the analysis dies */ error = ex_update (exoid); printf ("after ex_update, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); free(nset_var_vals); free(sset_var_vals); /* close the EXODUS files */ error = ex_close (exoid); printf ("after ex_close, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } return 0; }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int exoidm[10], num_dim2, num_nodes2, num_elem2,num_elem_blk2; int num_elem_in_block[10], num_node_sets, num_nodes_per_elem[10]; int num_elem_in_block2[10], num_node_sets2, num_nodes_per_elem2[10]; int num_side_sets, error; int num_side_sets2, nexofiles = 5; int i, j, k, m, n; int *elem_map, *connect, node_list[100],elem_list[100],side_list[100]; int *elem_map2, *connect2, node_list2[100],elem_list2[100],side_list2[100]; int ebids[10], ids[10]; int ebids2[10], ids2[10]; int num_nodes_per_set[10], num_elem_per_set[10]; int num_nodes_per_set2[10], num_elem_per_set2[10]; int num_df_per_set[10], num_df_per_set2[10]; int df_ind[10], node_ind[10], elem_ind[10]; int df_ind2[10],node_ind2[10],elem_ind2[10]; int num_qa_rec, num_info; int num_qa_rec2,num_info2; int num_glo_vars, num_nod_vars, num_ele_vars; int num_glo_vars2, num_nod_vars2, num_ele_vars2; int *truth_tab; int whole_time_step, num_time_steps; int CPU_word_size,IO_word_size; int prop_array[2]; float *glob_var_vals, *nodal_var_vals, *elem_var_vals; float time_value; float time_value2; float x[100], y[100], z[100]; float attrib[1], dist_fact[1008]; float attrib2[1], dist_fact2[100]; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[3]; char *coord_names2[3], *qa_record2[2][4], *info2[3], *var_names2[3]; char tmpstr[80]; char *prop_names[2]; char exofname[256]; ex_opts (EX_VERBOSE | EX_ABORT); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II files */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); for (n=0; n<nexofiles; n++) { sprintf(exofname,"test%d.exo",n); printf("test file name: %s\n",exofname); exoidm[n]= ex_create (exofname, /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for %s, exoid = %d\n", exofname,exoidm[n]); } /* ncopts = NC_VERBOSE; */ /* initialize file with parameters */ num_dim = 3; num_nodes = 26; num_elem = 5; num_elem_blk = 5; num_node_sets = 2; num_side_sets = 5; error = ex_put_init (exoid, "This is a test", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); /* initialize file n with parameters */ num_dim2 = 3; num_nodes2 = 26; num_elem2 = 5; num_elem_blk2 = 5; num_node_sets2 = 2; num_side_sets2 = 5; for (n=0; n<nexofiles; n++) { sprintf(tmpstr,"This is test %d",n); error=ex_put_init (exoidm[n],tmpstr,num_dim2,num_nodes2,num_elem2, num_elem_blk2, num_node_sets2, num_side_sets2); printf ("after ex_put_init (%d), error = %d\n", n, error); } /* write nodal coordinates values and names to database */ /* Quad #1 */ x[0] = 0.0; y[0] = 0.0; z[0] = 0.0; x[1] = 1.0; y[1] = 0.0; z[1] = 0.0; x[2] = 1.0; y[2] = 1.0; z[2] = 0.0; x[3] = 0.0; y[3] = 1.0; z[3] = 0.0; /* Quad #2 */ x[4] = 1.0; y[4] = 0.0; z[4] = 0.0; x[5] = 2.0; y[5] = 0.0; z[5] = 0.0; x[6] = 2.0; y[6] = 1.0; z[6] = 0.0; x[7] = 1.0; y[7] = 1.0; z[7] = 0.0; /* Hex #1 */ x[8] = 0.0; y[8] = 0.0; z[8] = 0.0; x[9] = 10.0; y[9] = 0.0; z[9] = 0.0; x[10] = 10.0; y[10] = 0.0; z[10] =-10.0; x[11] = 1.0; y[11] = 0.0; z[11] =-10.0; x[12] = 1.0; y[12] = 10.0; z[12] = 0.0; x[13] = 10.0; y[13] = 10.0; z[13] = 0.0; x[14] = 10.0; y[14] = 10.0; z[14] =-10.0; x[15] = 1.0; y[15] = 10.0; z[15] =-10.0; /* Tetra #1 */ x[16] = 0.0; y[16] = 0.0; z[16] = 0.0; x[17] = 1.0; y[17] = 0.0; z[17] = 5.0; x[18] = 10.0; y[18] = 0.0; z[18] = 2.0; x[19] = 7.0; y[19] = 5.0; z[19] = 3.0; /* Wedge #1 */ x[20] = 3.0; y[20] = 0.0; z[20] = 6.0; x[21] = 6.0; y[21] = 0.0; z[21] = 0.0; x[22] = 0.0; y[22] = 0.0; z[22] = 0.0; x[23] = 3.0; y[23] = 2.0; z[23] = 6.0; x[24] = 6.0; y[24] = 2.0; z[24] = 2.0; x[25] = 0.0; y[25] = 2.0; z[25] = 0.0; error = ex_put_coord (exoid, x, y, z); printf ("after ex_put_coord, error = %d\n", error); /* write nodal coordinates values and names to database */ for (n=0; n<nexofiles; n++) { error = ex_put_coord (exoidm[n], x, y, z); printf ("after ex_put_coord (%d), error = %d\n", n,error); } coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); coord_names2[0] = "xcoor"; coord_names2[1] = "ycoor"; coord_names2[2] = "zcoor"; for (n=0; n<nexofiles; n++) { error = ex_put_coord_names (exoidm[n], coord_names2); printf ("after ex_put_coord_names (%d), error = %d\n", n, error); } /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = i; } error = ex_put_map (exoid, elem_map); printf ("after ex_put_map, error = %d\n", error); free (elem_map); elem_map2= (int *) calloc(num_elem2, sizeof(int)); for (i=1; i<=num_elem2; i++) { elem_map2[i-1] = i; } for (n=0; n<nexofiles; n++) { error = ex_put_map (exoidm[n], elem_map2); printf ("after ex_put_map (%d), error = %d\n", n, error); } free (elem_map2); /* write element block parameters */ num_elem_in_block[0] = 1; num_elem_in_block[1] = 1; num_elem_in_block[2] = 1; num_elem_in_block[3] = 1; num_elem_in_block[4] = 1; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #3 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #3 are 6-node wedges */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; error = ex_put_elem_block (exoid, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 1); error = ex_put_elem_block (exoid, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 1); printf ("after ex_put_elem_block, error = %d\n", error); /* write element block properties */ prop_names[0] = "MATL"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoid,EX_ELEM_BLOCK,2,prop_names); printf ("after ex_put_prop_names, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[0], "MATL", 10); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[1], "MATL", 20); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[2], "MATL", 30); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[3], "MATL", 40); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[4], "MATL", 50); printf ("after ex_put_prop, error = %d\n", error); /* files n */ num_elem_in_block2[0] = 1; num_elem_in_block2[1] = 1; num_elem_in_block2[2] = 1; num_elem_in_block2[3] = 1; num_elem_in_block2[4] = 1; num_nodes_per_elem2[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem2[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem2[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem2[3] = 4; /* elements in block #3 are 4-node tetras */ num_nodes_per_elem2[4] = 6; /* elements in block #3 are 6-node wedges */ ebids2[0] = 10; ebids2[1] = 11; ebids2[2] = 12; ebids2[3] = 13; ebids2[4] = 14; for (n=0; n<nexofiles; n++) { error=ex_put_elem_block(exoidm[n],ebids2[0], "quad", num_elem_in_block2[0], num_nodes_per_elem2[0], 1); printf ("after ex_put_elem_block (%d), error = %d\n", n, error); error=ex_put_elem_block(exoidm[n],ebids2[1], "quad", num_elem_in_block2[1], num_nodes_per_elem2[1], 1); printf ("after ex_put_elem_block (%d), error = %d\n", n, error); error=ex_put_elem_block(exoidm[n],ebids2[2], "hex", num_elem_in_block2[2], num_nodes_per_elem2[2], 1); printf ("after ex_put_elem_block (%d), error = %d\n", n, error); error=ex_put_elem_block(exoidm[n],ebids2[3], "tetra",num_elem_in_block2[3], num_nodes_per_elem2[3], 1); printf ("after ex_put_elem_block (%d), error = %d\n", n, error); error=ex_put_elem_block(exoidm[n],ebids2[4], "wedge",num_elem_in_block2[4], num_nodes_per_elem2[4], 1); printf ("after ex_put_elem_block (%d), error = %d\n", n, error); /* write element block properties */ prop_names[0] = "MATL"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoidm[n],EX_ELEM_BLOCK,2,prop_names); printf ("after ex_put_prop_names (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_ELEM_BLOCK, ebids2[0], "MATL", 100); printf ("after ex_put_prop (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_ELEM_BLOCK, ebids2[1], "MATL", 200); printf ("after ex_put_prop (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_ELEM_BLOCK, ebids2[2], "MATL", 300); printf ("after ex_put_prop (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_ELEM_BLOCK, ebids2[3], "MATL", 400); printf ("after ex_put_prop (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_ELEM_BLOCK, ebids2[4], "MATL", 500); printf ("after ex_put_prop (%d), error = %d\n", n, error); } /* write element connectivity */ connect = (int *) calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[0], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 5; connect[1] = 6; connect[2] = 7; connect[3] = 8; error = ex_put_elem_conn (exoid, ebids[1], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 9; connect[1] = 10; connect[2] = 11; connect[3] = 12; connect[4] = 13; connect[5] = 14; connect[6] = 15; connect[7] = 16; error = ex_put_elem_conn (exoid, ebids[2], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; error = ex_put_elem_conn (exoid, ebids[3], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 21; connect[1] = 22; connect[2] = 23; connect[3] = 24; connect[4] = 25; connect[5] = 26; error = ex_put_elem_conn (exoid, ebids[4], connect); printf ("after ex_put_elem_conn, error = %d\n", error); free (connect); for (n=0; n<nexofiles; n++) { connect2 = (int *) calloc(8, sizeof(int)); connect2[0] = 1; connect2[1] = 2; connect2[2] = 3; connect2[3] = 4; error = ex_put_elem_conn (exoidm[n], ebids[0], connect2); printf ("after ex_put_elem_conn (%d), error = %d\n", n, error); connect2[0] = 5; connect2[1] = 6; connect2[2] = 7; connect2[3] = 8; error = ex_put_elem_conn (exoidm[n], ebids[1], connect2); printf ("after ex_put_elem_conn (%d), error = %d\n", n, error); connect2[0] = 9; connect2[1] = 10; connect2[2] = 11; connect2[3] = 12; connect2[4] = 13; connect2[5] = 14; connect2[6] = 15; connect2[7] = 16; error = ex_put_elem_conn (exoidm[n], ebids2[2], connect2); printf ("after ex_put_elem_conn (%d), error = %d\n", n, error); connect2[0] = 17; connect2[1] = 18; connect2[2] = 19; connect2[3] = 20; error = ex_put_elem_conn (exoidm[n], ebids2[3], connect2); printf ("after ex_put_elem_conn (%d), error = %d\n", n, error); connect2[0] = 21; connect2[1] = 22; connect2[2] = 23; connect2[3] = 24; connect2[4] = 25; connect2[5] = 26; error = ex_put_elem_conn (exoidm[n], ebids2[4], connect2); printf ("after ex_put_elem_conn (%d), error = %d\n", n, error); free (connect2); } /* write element block attributes */ attrib[0] = 3.14159; error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); attrib[0] = 6.14159; error = ex_put_elem_attr (exoid, ebids[1], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[2], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[3], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[4], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); for (n=0; n<nexofiles; n++) { attrib2[0] = 3.; error = ex_put_elem_attr (exoidm[n], ebids[0], attrib2); printf ("after ex_put_elem_attr (%d), error = %d\n", n, error); attrib2[0] = 6.; error = ex_put_elem_attr (exoidm[n], ebids[1], attrib2); printf ("after ex_put_elem_attr (%d), error = %d\n", n, error); error = ex_put_elem_attr (exoidm[n], ebids[2], attrib2); printf ("after ex_put_elem_attr (%d), error = %d\n", n, error); error = ex_put_elem_attr (exoidm[n], ebids[3], attrib2); printf ("after ex_put_elem_attr (%d), error = %d\n", n, error); error = ex_put_elem_attr (exoidm[n], ebids[4], attrib2); printf ("after ex_put_elem_attr (%d), error = %d\n", n, error); } #ifdef EX_TEST_INDIV_NODESET /* write individual node sets */ error = ex_put_node_set_param (exoid, 20, 5, 5); printf ("after ex_put_node_set_param, error = %d\n", error); node_list[0] = 100; node_list[1] = 101; node_list[2] = 102; node_list[3] = 103; node_list[4] = 104; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; error = ex_put_node_set (exoid, 20, node_list); printf ("after ex_put_node_set, error = %d\n", error); error = ex_put_node_set_dist_fact (exoid, 20, dist_fact); printf ("after ex_put_node_set, error = %d\n", error); error = ex_put_node_set_param (exoid, 21, 3, 3); printf ("after ex_put_node_set_param, error = %d\n", error); node_list[0] = 200; node_list[1] = 201; node_list[2] = 202; dist_fact[0] = 1.1; dist_fact[1] = 2.1; dist_fact[2] = 3.1; error = ex_put_node_set (exoid, 21, node_list); printf ("after ex_put_node_set, error = %d\n", error); error = ex_put_node_set_dist_fact (exoid, 21, dist_fact); printf ("after ex_put_node_set, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); /* file 2 */ for (n=0; n<nexofiles; n++) { error = ex_put_node_set_param (exoidm[n], 20, 5, 5); printf ("after ex_put_node_set_param (%d), error = %d\n", n, error); node_list2[0] = 100; node_list2[1] = 101; node_list2[2] = 102; node_list2[3] = 103; node_list2[4] = 104; dist_fact2[0] = 1.0; dist_fact2[1] = 2.0; dist_fact2[2] = 3.0; dist_fact2[3] = 4.0; dist_fact2[4] = 5.0; error = ex_put_node_set (exoidm[n], 20, node_list2); printf ("after ex_put_node_set (%d), error = %d\n", n, error); error = ex_put_node_set_dist_fact (exoidm[n], 20, dist_fact2); printf ("after ex_put_node_set (%d), error = %d\n", n, error); error = ex_put_node_set_param (exoidm[n], 21, 3, 3); printf ("after ex_put_node_set_param (%d), error = %d\n", n, error); node_list2[0] = 200; node_list2[1] = 201; node_list2[2] = 202; dist_fact2[0] = 1.1; dist_fact2[1] = 2.1; dist_fact2[2] = 3.1; error = ex_put_node_set (exoidm[n], 21, node_list2); printf ("after ex_put_node_set (%d), error = %d\n", n, error); error = ex_put_node_set_dist_fact (exoidm[n], 21, dist_fact2); printf ("after ex_put_node_set (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop (%d), error = %d\n", n, error); prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoidm[n], EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop (%d), error = %d\n", n, error); } #else /* EX_TEST_INDIV_NODESET */ /* write concatenated node sets; this produces the same information as * the above code which writes individual node sets */ ids[0] = 20; ids[1] = 21; num_nodes_per_set[0] = 5; num_nodes_per_set[1] = 3; node_ind[0] = 0; node_ind[1] = 5; node_list[0] = 100; node_list[1] = 101; node_list[2] = 102; node_list[3] = 103; node_list[4] = 104; node_list[5] = 200; node_list[6] = 201; node_list[7] = 202; num_df_per_set[0] = 5; num_df_per_set[1] = 3; df_ind[0] = 0; df_ind[1] = 5; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; dist_fact[5] = 1.1; dist_fact[6] = 2.1; dist_fact[7] = 3.1; error = ex_put_concat_node_sets (exoid, ids, num_nodes_per_set, node_ind, node_list, dist_fact); printf ("after ex_put_concat_node_sets, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); ids2[0] = 20; ids2[1] = 21; num_nodes_per_set2[0] = 5; num_nodes_per_set2[1] = 3; node_ind2[0] = 0; node_ind2[1] = 5; node_list2[0] = 100; node_list2[1] = 101; node_list2[2] = 102; node_list2[3] = 103; node_list2[4] = 104; node_list2[5] = 200; node_list2[6] = 201; node_list2[7] = 202; num_df_per_set2[0] = 5; num_df_per_set2[1] = 3; df_ind2[0] = 0; df_ind2[1] = 5; dist_fact2[0] = 1.0; dist_fact2[1] = 2.0; dist_fact2[2] = 3.0; dist_fact2[3] = 4.0; dist_fact2[4] = 5.0; dist_fact2[5] = 1.1; dist_fact2[6] = 2.1; dist_fact2[7] = 3.1; prop_array2[0] = 1000; prop_array2[1] = 2000; for (n=0; n<nexofiles; n++) { error = ex_put_concat_node_sets (exoidm[n], ids2, num_nodes_per_set2, num_df_per_set2, node_ind2, df_ind2, node_list2, dist_fact2); printf ("after ex_put_concat_node_sets, error = %d\n", error); error = ex_put_prop(exoidm[n], EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoidm[n], EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop_array(exoidm[n], EX_NODE_SET, "VELOCITY", prop_array2); printf ("after ex_put_prop_array, error = %d\n", error); } #endif /* EX_TEST_INDIV_NODESET */ #ifdef TEST_INDIV_SIDESET /* write individual side sets */ /* side set #1 - quad */ error = ex_put_side_set_param (exoid, 30, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 2; elem_list[1] = 2; side_list[0] = 4; side_list[1] = 2; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; error = ex_put_side_set (exoid, 30, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); error = ex_put_side_set_dist_fact (exoid, 30, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #2 - quad spanning elements */ error = ex_put_side_set_param (exoid, 31, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 1; elem_list[1] = 2; side_list[0] = 2; side_list[1] = 3; dist_fact[0] = 31.0; dist_fact[1] = 31.1; dist_fact[2] = 31.2; dist_fact[3] = 31.3; error = ex_put_side_set (exoid, 31, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); error = ex_put_side_set_dist_fact (exoid, 31, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #3 - hex */ error = ex_put_side_set_param (exoid, 32, 7, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 3; elem_list[1] = 3; elem_list[2] = 3; elem_list[3] = 3; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; side_list[0] = 5; side_list[1] = 3; side_list[2] = 3; side_list[3] = 2; side_list[4] = 4; side_list[5] = 1; side_list[6] = 6; error = ex_put_side_set (exoid, 32, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); /* side set #4 - tetras */ error = ex_put_side_set_param (exoid, 33, 4, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 4; elem_list[1] = 4; elem_list[2] = 4; elem_list[3] = 4; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; error = ex_put_side_set (exoid, 33, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); /* side set #5 - wedges */ error = ex_put_side_set_param (exoid, 34, 5, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 5; elem_list[1] = 5; elem_list[2] = 5; elem_list[3] = 5; elem_list[4] = 5; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 5; error = ex_put_side_set (exoid, 34, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); error = ex_put_prop(exoid, EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop, error = %d\n", error); /* file 2 */ for (n=0; n<nexofiles; n++) { /* side set 1 */ error = ex_put_side_set_param (exoidm[n], 30, 2, 4); printf ("after ex_put_side_set_param (%d), error = %d\n", n, error); elem_list2[0] = 2; elem_list2[1] = 2; side_list2[0] = 4; side_list2[1] = 2; dist_fact2[0] = 30.0; dist_fact2[1] = 30.1; dist_fact2[2] = 30.2; dist_fact2[3] = 30.3; error = ex_put_side_set (exoidm[n], 30, elem_list2, side_list2); printf ("after ex_put_side_set (%d), error = %d\n", n, error); error = ex_put_side_set_dist_fact (exoidm[n], 30, dist_fact2); printf ("after ex_put_side_set_dist_fact (%d), error = %d\n", n, error); /* side set 2 */ error = ex_put_side_set_param (exoidm[n], 31, 2, 4); printf ("after ex_put_side_set_param (%d), error = %d\n", n, error); elem_list2[0] = 1; elem_list2[1] = 2; side_list2[0] = 2; side_list2[1] = 3; dist_fact2[0] = 31.0; dist_fact2[1] = 31.1; dist_fact2[2] = 31.2; dist_fact2[3] = 31.3; error = ex_put_side_set (exoidm[n], 31, elem_list2, side_list2); printf ("after ex_put_side_set (%d), error = %d\n", n, error); error = ex_put_side_set_dist_fact (exoidm[n], 31, dist_fact2); printf ("after ex_put_side_set_dist_fact (%d), error = %d\n", n, error); /* side set #3 - hex */ error = ex_put_side_set_param (exoidm[n], 32, 7, 0); printf ("after ex_put_side_set_param (%d), error = %d\n", n, error); elem_list2[0] = 3; elem_list2[1] = 3; elem_list2[2] = 3; elem_list2[3] = 3; elem_list2[4] = 3; elem_list2[5] = 3; elem_list2[6] = 3; side_list2[0] = 5; side_list2[1] = 3; side_list2[2] = 3; side_list2[3] = 2; side_list2[4] = 4; side_list2[5] = 1; side_list2[6] = 6; error = ex_put_side_set (exoidm[n], 32, elem_list2, side_list2); printf ("after ex_put_side_set (%d), error = %d\n", n, error); /* side set #4 - tetras */ error = ex_put_side_set_param (exoidm[n], 33, 4, 0); printf ("after ex_put_side_set_param (%d), error = %d\n", n, error); elem_list2[0] = 4; elem_list2[1] = 4; elem_list2[2] = 4; elem_list2[3] = 4; side_list2[0] = 1; side_list2[1] = 2; side_list2[2] = 3; side_list2[3] = 4; error = ex_put_side_set (exoidm[n], 33, elem_list2, side_list2); printf ("after ex_put_side_set (%d), error = %d\n", n, error); /* side set #5 - wedges */ error = ex_put_side_set_param (exoidm[n], 34, 5, 0); printf ("after ex_put_side_set_param (%d), error = %d\n", n, error); elem_list2[0] = 5; elem_list2[1] = 5; elem_list2[2] = 5; elem_list2[3] = 5; elem_list2[4] = 5; side_list2[0] = 1; side_list2[1] = 2; side_list2[2] = 3; side_list2[3] = 4; side_list2[4] = 5; error = ex_put_side_set (exoidm[n], 34, elem_list2, side_list2); printf ("after ex_put_side_set (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop (%d), error = %d\n", n, error); } #else /* TEST_INDIV_SIDESET */ /* write concatenated side sets; this produces the same information as * the above code which writes individual side sets */ ids[0] = 30; ids[1] = 31; ids[2] = 32; ids[3] = 33; ids[4] = 34; node_list[0] = 8; node_list[1] = 5; node_list[2] = 6; node_list[3] = 7; node_list[4] = 2; node_list[5] = 3; node_list[6] = 7; node_list[7] = 8; node_list[8] = 9; node_list[9] = 12; node_list[10] = 11; node_list[11] = 10; node_list[12] = 11; node_list[13] = 12; node_list[14] = 16; node_list[15] = 15; node_list[16] = 16; node_list[17] = 15; node_list[18] = 11; node_list[19] = 12; node_list[20] = 10; node_list[21] = 11; node_list[22] = 15; node_list[23] = 14; node_list[24] = 13; node_list[25] = 16; node_list[26] = 12; node_list[27] = 9; node_list[28] = 14; node_list[29] = 13; node_list[30] = 9; node_list[31] = 10; node_list[32] = 16; node_list[33] = 13; node_list[34] = 14; node_list[35] = 15; node_list[36] = 17; node_list[37] = 18; node_list[38] = 20; node_list[39] = 18; node_list[40] = 19; node_list[41] = 20; node_list[42] = 20; node_list[43] = 19; node_list[44] = 17; node_list[45] = 19; node_list[46] = 18; node_list[47] = 17; node_list[48] = 25; node_list[49] = 24; node_list[50] = 21; node_list[51] = 22; node_list[52] = 26; node_list[53] = 25; node_list[54] = 22; node_list[55] = 23; node_list[56] = 26; node_list[57] = 23; node_list[58] = 21; node_list[59] = 24; node_list[60] = 23; node_list[61] = 22; node_list[62] = 21; node_list[63] = 24; node_list[64] = 25; node_list[65] = 26; node_ind[0] = 0; node_ind[1] = 4; node_ind[2] = 8; node_ind[3] = 36; node_ind[4] = 47; num_elem_per_set[0] = 2; num_elem_per_set[1] = 2; num_elem_per_set[2] = 7; num_elem_per_set[3] = 4; num_elem_per_set[4] = 5; num_nodes_per_set[0] = 4; num_nodes_per_set[1] = 4; num_nodes_per_set[2] = 28; num_nodes_per_set[3] = 12; num_nodes_per_set[4] = 18; elem_ind[0] = 0; elem_ind[1] = 2; elem_ind[2] = 4; elem_ind[3] = 11; elem_ind[4] = 15; elem_list[0] = 2; elem_list[1] = 2; elem_list[2] = 1; elem_list[3] = 2; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; elem_list[7] = 3; elem_list[8] = 3; elem_list[9] = 3; elem_list[10] = 3; elem_list[11] = 4; elem_list[12] = 4; elem_list[13] = 4; elem_list[14] = 4; elem_list[15] = 5; elem_list[16] = 5; elem_list[17] = 5; elem_list[18] = 5; elem_list[19] = 5; error = ex_cvt_nodes_to_sides(exoid, num_elem_per_set, num_nodes_per_set, elem_ind, node_ind, elem_list, node_list, side_list); printf ("after ex_cvt_nodes_to_sides, error = %d\n", error); num_df_per_set[0] = 4; num_df_per_set[1] = 4; num_df_per_set[2] = 0; num_df_per_set[3] = 0; num_df_per_set[4] = 0; df_ind[0] = 0; df_ind[1] = 4; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; dist_fact[4] = 31.0; dist_fact[5] = 31.1; dist_fact[6] = 31.2; dist_fact[7] = 31.3; error = ex_put_concat_side_sets (exoid, ids, num_elem_per_set, num_df_per_set, elem_ind, df_ind, elem_list, side_list, dist_fact); printf ("after ex_put_concat_side_sets, error = %d\n", error); error = ex_put_prop(exoid, EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop, error = %d\n", error); /* file 2 */ ids2[0] = 30; ids2[1] = 31; ids2[2] = 32; ids2[3] = 33; ids2[4] = 34; node_list2[0] = 8; node_list2[1] = 5; node_list2[2] = 6; node_list2[3] = 7; node_list2[4] = 2; node_list2[5] = 3; node_list2[6] = 7; node_list2[7] = 8; node_list2[8] = 9; node_list2[9] = 12; node_list2[10] = 11; node_list2[11] = 10; node_list2[12] = 11; node_list2[13] = 12; node_list2[14] = 16; node_list2[15] = 15; node_list2[16] = 16; node_list2[17] = 15; node_list2[18] = 11; node_list2[19] = 12; node_list2[20] = 10; node_list2[21] = 11; node_list2[22] = 15; node_list2[23] = 14; node_list2[24] = 13; node_list2[25] = 16; node_list2[26] = 12; node_list2[27] = 9; node_list2[28] = 14; node_list2[29] = 13; node_list2[30] = 9; node_list2[31] = 10; node_list2[32] = 16; node_list2[33] = 13; node_list2[34] = 14; node_list2[35] = 15; node_list2[36] = 17; node_list2[37] = 18; node_list2[38] = 20; node_list2[39] = 18; node_list2[40] = 19; node_list2[41] = 20; node_list2[42] = 20; node_list2[43] = 19; node_list2[44] = 17; node_list2[45] = 19; node_list2[46] = 18; node_list2[47] = 17; node_list2[48] = 25; node_list2[49] = 24; node_list2[50] = 21; node_list2[51] = 22; node_list2[52] = 26; node_list2[53] = 25; node_list2[54] = 22; node_list2[55] = 23; node_list2[56] = 26; node_list2[57] = 23; node_list2[58] = 21; node_list2[59] = 24; node_list2[60] = 23; node_list2[61] = 22; node_list2[62] = 21; node_list2[63] = 24; node_list2[64] = 25; node_list2[65] = 26; node_ind2[0] = 0; node_ind2[1] = 4; node_ind2[2] = 8; node_ind2[3] = 36; node_ind2[4] = 47; num_elem_per_set2[0] = 2; num_elem_per_set2[1] = 2; num_elem_per_set2[2] = 7; num_elem_per_set2[3] = 4; num_elem_per_set2[4] = 5; num_nodes_per_set2[0] = 4; num_nodes_per_set2[1] = 4; num_nodes_per_set2[2] = 28; num_nodes_per_set2[3] = 12; num_nodes_per_set2[4] = 18; elem_ind2[0] = 0; elem_ind2[1] = 2; elem_ind2[2] = 4; elem_ind2[3] = 11; elem_ind2[4] = 15; elem_list2[0] = 2; elem_list2[1] = 2; elem_list2[2] = 1; elem_list2[3] = 2; elem_list2[4] = 3; elem_list2[5] = 3; elem_list2[6] = 3; elem_list2[7] = 3; elem_list2[8] = 3; elem_list2[9] = 3; elem_list2[10] = 3; elem_list2[11] = 4; elem_list2[12] = 4; elem_list2[13] = 4; elem_list2[14] = 4; elem_list2[15] = 5; elem_list2[16] = 5; elem_list2[17] = 5; elem_list2[18] = 5; elem_list2[19] = 5; num_df_per_set2[0] = 4; num_df_per_set2[1] = 4; num_df_per_set2[2] = 0; num_df_per_set2[3] = 0; num_df_per_set2[4] = 0; df_ind2[0] = 0; df_ind2[1] = 4; dist_fact2[0] = 30.0; dist_fact2[1] = 30.1; dist_fact2[2] = 30.2; dist_fact2[3] = 30.3; dist_fact2[4] = 31.0; dist_fact2[5] = 31.1; dist_fact2[6] = 31.2; dist_fact2[7] = 31.3; for (n=0; n<nexofiles; n++) { error = ex_cvt_nodes_to_sides(exoidm[n], num_elem_per_set2, num_nodes_per_set2, elem_ind2, node_ind2, elem_list2, node_list2, side_list2); printf ("after ex_cvt_nodes_to_sides (%d), error = %d\n", n, error); error = ex_put_concat_side_sets (exoidm[n], ids2, num_elem_per_set2, num_df_per_set2, elem_ind2, df_ind2, elem_list2, side_list2, dist_fact2); printf ("after ex_put_concat_side_sets (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop (%d), error = %d\n", n, error); error = ex_put_prop(exoidm[n], EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop (%d), error = %d\n", n, error); } /* END COMMENTED OUT SECTION */ #endif /* TEST_INDIV_SIDESET */ /* write QA records */ num_qa_rec = 2; qa_record[0][0] = "TESTWTM"; qa_record[0][1] = "testwtm"; qa_record[0][2] = "07/07/93"; qa_record[0][3] = "15:41:33"; qa_record[1][0] = "FASTQ"; qa_record[1][1] = "fastq"; qa_record[1][2] = "07/07/93"; qa_record[1][3] = "16:41:33"; error = ex_put_qa (exoid, num_qa_rec, qa_record); printf ("after ex_put_qa, error = %d\n", error); num_qa_rec2 = 2; qa_record2[0][0] = "TESTWTM"; qa_record2[0][1] = "testwtm"; qa_record2[0][2] = "07/07/93"; qa_record2[0][3] = "15:41:33"; qa_record2[1][0] = "FASTQ"; qa_record2[1][1] = "fastq"; qa_record2[1][2] = "07/07/93"; qa_record2[1][3] = "16:41:33"; for (n=0; n<nexofiles; n++) { error = ex_put_qa (exoidm[n], num_qa_rec2, qa_record2); printf ("after ex_put_qa (%d), error = %d\n", n, error); } /* write information records */ num_info = 3; info[0] = "This is the first information record."; info[1] = "This is the second information record."; info[2] = "This is the third information record."; error = ex_put_info (exoid, num_info, info); printf ("after ex_put_info, error = %d\n", error); num_info2 = 3; info2[0] = "This is the first information record."; info2[1] = "This is the second information record."; info2[2] = "This is the third information record."; for (n=0; n<nexofiles; n++) { error = ex_put_info (exoidm[n], num_info2, info2); printf ("after ex_put_info (%d), error = %d\n", n, error); } /* write results variables parameters and names */ num_glo_vars = 1; var_names[0] = "glo_vars"; error = ex_put_var_param (exoid, "g", num_glo_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "g", num_glo_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); num_glo_vars2 = 1; var_names2[0] = "glo_vars"; for (n=0; n<nexofiles; n++) { error = ex_put_var_param (exoidm[n], "g", num_glo_vars2); printf ("after ex_put_var_param (%d), error = %d\n", n, error); error = ex_put_var_names (exoidm[n], "g", num_glo_vars2, var_names2); printf ("after ex_put_var_names (%d), error = %d\n", n, error); } num_nod_vars = 2; var_names[0] = "nod_var0"; var_names[1] = "nod_var1"; error = ex_put_var_param (exoid, "n", num_nod_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "n", num_nod_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); num_nod_vars2 = 2; var_names2[0] = "nod_var0"; var_names2[1] = "nod_var1"; for (n=0; n<nexofiles; n++) { error = ex_put_var_param (exoidm[n], "n", num_nod_vars2); printf ("after ex_put_var_param (%d), error = %d\n", n, error); error = ex_put_var_names (exoidm[n], "n", num_nod_vars2, var_names2); printf ("after ex_put_var_names (%d), error = %d\n", n, error); } num_ele_vars = 3; var_names[0] = "ele_var0"; var_names[1] = "ele_var1"; var_names[2] = "ele_var2"; error = ex_put_var_param (exoid, "e", num_ele_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "e", num_ele_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); num_ele_vars2 = 3; var_names2[0] = "ele_var20"; var_names2[1] = "ele_var21"; var_names2[2] = "ele_var22"; for (n=0; n<nexofiles; n++) { error = ex_put_var_param (exoidm[n], "e", num_ele_vars2); printf ("after ex_put_var_param (%d), error = %d\n", n, error); error = ex_put_var_names (exoidm[n], "e", num_ele_vars, var_names); printf ("after ex_put_var_names (%d), error = %d\n", n, error); } /* write element variable truth table */ truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int)); k = 0; for (i=0; i<num_elem_blk; i++) { for (j=0; j<num_ele_vars; j++) { truth_tab[k++] = 1; } } error = ex_put_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab); printf ("after ex_put_elem_var_tab, error = %d\n", error); for (n=0; n<nexofiles; n++) { error=ex_put_elem_var_tab(exoidm[n],num_elem_blk,num_ele_vars,truth_tab); printf ("after ex_put_elem_var_tab (%d), error = %d\n", n, error); } free (truth_tab); /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, sizeof(CPU_word_size)); nodal_var_vals = (float *) calloc (num_nodes, sizeof(CPU_word_size)); elem_var_vals = (float *) calloc (4, sizeof(CPU_word_size)); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; time_value2 = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); for (n=0; n<nexofiles; n++) { error = ex_put_time (exoidm[n], whole_time_step, &time_value2); printf ("after ex_put_time (%d), error = %d\n", n, error); } /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); for (n=0; n<nexofiles; n++) { error = ex_put_glob_vars (exoidm[n], whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars (%d), error = %d\n", n, error); } /* write nodal variables */ for (k=1; k<=num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nodal_var_vals[j] = (float)k + ((float)(j+1) * time_value); } error = ex_put_nodal_var (exoid, whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var, error = %d\n", error); for (n=0; n<nexofiles; n++) { error = ex_put_nodal_var (exoidm[n], whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var (%d), error = %d\n", n, error); } } /* write element variables */ for (k=1; k<=num_ele_vars; k++) { for (j=0; j<num_elem_blk; j++) { for (m=0; m<num_elem_in_block[j]; m++) { elem_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); /* printf("elem_var_vals[%d]: %f\n",m,elem_var_vals[m]); */ } error = ex_put_elem_var (exoid, whole_time_step, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf ("after ex_put_elem_var, error = %d\n", error); for (n=0; n<nexofiles; n++) { error = ex_put_elem_var (exoidm[n], whole_time_step, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf ("after ex_put_elem_var (%d), error = %d\n", n, error); } } } whole_time_step++; /* update the data file; this should be done at the end of every time step * to ensure that no data is lost if the analysis dies */ error = ex_update (exoid); printf ("after ex_update, error = %d\n", error); for (n=0; n<nexofiles; n++) { error = ex_update (exoidm[n]); printf ("after ex_update (%d), error = %d\n", n, error); } } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); /* close the EXODUS files */ error = ex_close (exoid); printf ("after ex_close, error = %d\n", error); for (n=0; n<nexofiles; n++) { error = ex_close (exoidm[n]); printf ("after ex_close (%d), error = %d\n", n, error); } return 0; }
int ex_put_concat_side_sets (int exoid, const int *side_set_ids, const int *num_elem_per_set, const int *num_dist_per_set, const int *side_sets_elem_index, const int *side_sets_dist_index, const int *side_sets_elem_list, const int *side_sets_side_list, const void *side_sets_dist_fact) { char *cdum; int i, num_side_sets, cur_num_side_sets, dimid, varid, dims[1], *ss_stat; int iresult; long start[1], count[1]; nclong *lptr; float fdum; const float *flt_dist_fact; const double *dbl_dist_fact; char errmsg[MAX_ERR_LENGTH]; exerrval = 0; /* clear error code */ cdum = 0; /* initialize even though it is not used */ /* first check if any side sets are specified */ if (ncdimid (exoid, DIM_NUM_SS) == -1) { if (ncerr == NC_EBADDIM) { exerrval = ncerr; sprintf(errmsg, "Error: no side sets defined for file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate side sets defined in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } return (EX_FATAL); } /* inquire how many side sets are to be stored */ if (ex_inquire(exoid, EX_INQ_SIDE_SETS, &num_side_sets, &fdum, cdum) == -1) { sprintf(errmsg, "Error: failed to get number of side sets defined for file id %d", exoid); /* use error val from inquire */ ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* fill out side set status array */ /* First, allocate space for the side set status list */ if (!(ss_stat= malloc(num_side_sets*sizeof(int)))) { exerrval = EX_MEMFAIL; sprintf(errmsg, "Error: failed to allocate space for side set status array in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } for (i=0;i<num_side_sets;i++) { if (num_elem_per_set[i] == 0) /* Is this a NULL side set? */ ss_stat[i] = 0; /* change side set status to NULL */ else ss_stat[i] = 1; /* change side set status to TRUE */ } /* Next, get variable id of status array */ if ((varid = ncvarid (exoid, VAR_SS_STAT)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate side set status in file id %d", exoid); ex_err("ex_put_concat_node_set",errmsg,exerrval); return (EX_FATAL); } /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_side_sets; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, varid, start, count, ss_stat); } else { lptr = itol (ss_stat, num_side_sets); iresult = ncvarput (exoid, varid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store side set status array to file id %d", exoid); ex_err("ex_put_concat_side_set",errmsg,exerrval); return (EX_FATAL); } free(ss_stat); /* put netcdf file into define mode */ if (ncredef (exoid) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to put file id %d into define mode", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* create side set definitions */ for (i=0; i<num_side_sets; i++) { /* Keep track of the total number of side sets defined using a counter stored in a linked list keyed by exoid. NOTE: ex_get_file_item is used to find the number of side sets for a specific file and returns that value. */ cur_num_side_sets=ex_get_file_item(exoid, &ss_ctr_list ); if (cur_num_side_sets >= num_side_sets) { exerrval = EX_FATAL; sprintf(errmsg, "Error: exceeded number of side sets (%d) defined in file id %d", num_side_sets,exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); goto error_ret; } /* NOTE: ex_inc_file_item is used to find the number of side sets for a specific file and returns that value incremented. */ cur_num_side_sets=ex_inc_file_item(exoid, &ss_ctr_list ); /* define dimension for number of sides/elements per side set */ if (num_elem_per_set[i] == 0) /* Is this a NULL side set? */ continue; /* Do not create anything for NULL side sets! */ if ((dimid = ncdimdef (exoid, DIM_NUM_SIDE_SS(cur_num_side_sets+1), (long)num_elem_per_set[i])) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: side set side count %d already defined in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to define number of sides for set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; } /* create element list variable for side set */ dims[0] = dimid; if (ncvardef (exoid,VAR_ELEM_SS(cur_num_side_sets+1),NC_LONG,1,dims) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: element list already exists for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to create element list for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } /* create side list variable for side set */ if (ncvardef (exoid,VAR_SIDE_SS(cur_num_side_sets+1),NC_LONG,1,dims) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: side list already exists for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to create side list for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } /* define dimension for number of dist factors/nodes per side set */ /* NOTE: only define df count if the dist factors exist! */ if (num_dist_per_set[i] > 0) { if ((dimid = ncdimdef (exoid, DIM_NUM_DF_SS(cur_num_side_sets+1), (long)num_dist_per_set[i])) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: side set df count %d already defined in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to define side set df count for set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; } /* create distribution factor list variable for side set */ dims[0] = dimid; if (ncvardef (exoid, VAR_FACT_SS(cur_num_side_sets+1), nc_flt_code(exoid), 1, dims) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: dist factor list already exists for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to create dist factor list for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } } /* end define dist factors */ } /* leave define mode */ if (ncendef (exoid) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to complete definition in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* Next, fill out side set ids array */ /* first get id of side set ids array variable */ if ((varid = ncvarid (exoid, VAR_SS_IDS)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate side set ids array in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* then, write out side set id list */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_side_sets; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, varid, start, count, side_set_ids); } else { lptr = itol (side_set_ids, num_side_sets); iresult = ncvarput (exoid, varid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store side set id array in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* If the side_sets_elem_index is passed in as a NULL pointer, then * the user only wants us to define the sidesets and not populate * the data structures. */ if (side_sets_elem_index == 0) return(EX_NOERR); /* Now, use ExodusII call to store side sets */ for (i=0; i<num_side_sets; i++) { if (num_elem_per_set[i] == 0) /* Is this a NULL side set? */ continue; /* Do not create anything for NULL side sets! */ if (ex_comp_ws(exoid) == sizeof(float)) { flt_dist_fact = side_sets_dist_fact; if (ex_put_side_set(exoid, side_set_ids[i], &(side_sets_elem_list[side_sets_elem_index[i]]), &(side_sets_side_list[side_sets_elem_index[i]])) == -1) return(EX_FATAL); /* error will be reported by subroutine */ if (num_dist_per_set[i] > 0) /* store dist factors if required */ { if (ex_put_side_set_dist_fact(exoid, side_set_ids[i], &(flt_dist_fact[side_sets_dist_index[i]])) == -1) { sprintf(errmsg, "Error: failed to store side set %d dist factors for file id %d", side_set_ids[i],exoid); /* use error val from exodusII routine */ ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } } } else if (ex_comp_ws(exoid) == sizeof(double)) { dbl_dist_fact = side_sets_dist_fact; if (ex_put_side_set(exoid, side_set_ids[i], &(side_sets_elem_list[side_sets_elem_index[i]]), &(side_sets_side_list[side_sets_elem_index[i]])) == -1) return(EX_FATAL); /* error will be reported by subroutine */ if (num_dist_per_set[i] > 0) /* only store if they exist */ { if (ex_put_side_set_dist_fact(exoid, side_set_ids[i], &(dbl_dist_fact[side_sets_dist_index[i]])) == -1) { sprintf(errmsg, "Error: failed to store side set %d dist factors for file id %d", side_set_ids[i],exoid); /* use error val from exodusII routine */ ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } } } else { /* unknown floating point word size */ exerrval = EX_BADPARAM; sprintf(errmsg, "Error: unsupported floating point word size %d for file id %d", ex_comp_ws(exoid), exoid); ex_err("ex_put_concat_side_sets", errmsg, exerrval); return (EX_FATAL); } } return(EX_NOERR); /* Fatal error: exit definition mode and return */ error_ret: if (ncendef (exoid) == -1) /* exit define mode */ { sprintf(errmsg, "Error: failed to complete definition for file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } return (EX_FATAL); }