static void write_set(exodus_file_t* file, ex_entity_type set_type, int set_id, char* set_name, int* set, size_t set_size) { int num_dist_factors = 0; if (set_type != EX_SIDE_SET) { ex_put_set_param(file->ex_id, set_type, (ex_entity_id)set_id, set_size, num_dist_factors); ex_put_set(file->ex_id, set_type, (ex_entity_id)set_id, set, NULL); } else { ex_put_set_param(file->ex_id, set_type, (ex_entity_id)set_id, set_size/2, num_dist_factors); int elems[set_size/2], faces[set_size/2]; for (int i = 0; i < set_size/2; ++i) { elems[i] = set[2*i]; faces[i] = set[2*i+1]; } ex_put_set(file->ex_id, set_type, (ex_entity_id)set_id, elems, faces); } ex_put_name(file->ex_id, set_type, (ex_entity_id)set_id, set_name); }
int ex_put_node_set (int exoid, int node_set_id, const int *node_set_node_list) { return ex_put_set(exoid, EX_NODE_SET, node_set_id, node_set_node_list, NULL); }
int ex_put_node_set (int exoid, ex_entity_id node_set_id, const void_int *node_set_node_list) { return ex_put_set(exoid, EX_NODE_SET, node_set_id, node_set_node_list, NULL); }
int ex_put_side_set (int exoid, int side_set_id, const int *side_set_elem_list, const int *side_set_side_list) { return ex_put_set(exoid, EX_SIDE_SET, side_set_id, side_set_elem_list, side_set_side_list); }
int ex_put_sets (int exoid, size_t set_count, const struct ex_set *sets) { size_t i; int needs_define = 0; int set_stat; int dimid, varid, status, dims[1]; int set_id_ndx; size_t start[1]; int cur_num_sets; char errmsg[MAX_ERR_LENGTH]; int* sets_to_define = NULL; char* numentryptr = NULL; char* entryptr = NULL; char* extraptr = NULL; char* idsptr = NULL; char* statptr = NULL; char* numdfptr = NULL; char* factptr = NULL; size_t int_size; exerrval = 0; /* clear error code */ sets_to_define = malloc(set_count*sizeof(int)); /* Note that this routine can be called: 1) just define the sets 2) just output the set data (after a previous call to define) 3) define and output the set data in one call. */ for (i=0; i < set_count; i++) { /* first check if any sets are specified */ if ((status = nc_inq_dimid(exoid, ex_dim_num_objects(sets[i].type), &dimid)) != NC_NOERR) { if (status == NC_EBADDIM) { exerrval = status; sprintf(errmsg, "Error: no %ss defined for file id %d", ex_name_of_object(sets[i].type), exoid); ex_err("ex_put_sets",errmsg,exerrval); } else { exerrval = status; sprintf(errmsg, "Error: failed to locate %ss defined in file id %d", ex_name_of_object(sets[i].type), exoid); ex_err("ex_put_sets",errmsg,exerrval); } return (EX_FATAL); } set_id_ndx = ex_id_lkup(exoid, sets[i].type, sets[i].id); if (exerrval != EX_LOOKUPFAIL) { /* found the side set id, so set is already defined... */ sets_to_define[i] = 0; continue; } else { needs_define++; sets_to_define[i] = 1; } } if (needs_define > 0) { /* put netcdf file into define mode */ if ((status = nc_redef (exoid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to put file id %d into define mode", exoid); ex_err("ex_put_sets",errmsg,exerrval); return (EX_FATAL); } for (i=0; i < set_count; i++) { if (sets_to_define[i] == 0) continue; /* NOTE: ex_inc_file_item finds the current number of sets defined for a specific file and returns that value incremented. */ cur_num_sets=ex_inc_file_item(exoid, ex_get_counter_list(sets[i].type)); set_id_ndx = cur_num_sets + 1; sets_to_define[i] = set_id_ndx; if (sets[i].num_entry == 0) continue; /* setup pointers based on set_type */ if (sets[i].type == EX_NODE_SET) { numentryptr = DIM_NUM_NOD_NS(set_id_ndx); entryptr = VAR_NODE_NS(set_id_ndx); extraptr = NULL; /* note we are using DIM_NUM_NODE_NS instead of DIM_NUM_DF_NS */ numdfptr = DIM_NUM_NOD_NS(set_id_ndx); factptr = VAR_FACT_NS(set_id_ndx); } else if (sets[i].type == EX_EDGE_SET) { numentryptr = DIM_NUM_EDGE_ES(set_id_ndx); entryptr = VAR_EDGE_ES(set_id_ndx); extraptr = VAR_ORNT_ES(set_id_ndx); numdfptr = DIM_NUM_DF_ES(set_id_ndx); factptr = VAR_FACT_ES(set_id_ndx); } else if (sets[i].type == EX_FACE_SET) { numentryptr = DIM_NUM_FACE_FS(set_id_ndx); entryptr = VAR_FACE_FS(set_id_ndx); extraptr = VAR_ORNT_FS(set_id_ndx); numdfptr = DIM_NUM_DF_FS(set_id_ndx); factptr = VAR_FACT_FS(set_id_ndx); } else if (sets[i].type == EX_SIDE_SET) { numentryptr = DIM_NUM_SIDE_SS(set_id_ndx); entryptr = VAR_ELEM_SS(set_id_ndx); extraptr = VAR_SIDE_SS(set_id_ndx); numdfptr = DIM_NUM_DF_SS(set_id_ndx); factptr = VAR_FACT_SS(set_id_ndx); } else if (sets[i].type == EX_ELEM_SET) { numentryptr = DIM_NUM_ELE_ELS(set_id_ndx); entryptr = VAR_ELEM_ELS(set_id_ndx); extraptr = NULL; numdfptr = DIM_NUM_DF_ELS(set_id_ndx); factptr = VAR_FACT_ELS(set_id_ndx); } /* define dimensions and variables */ if ((status = nc_def_dim(exoid, numentryptr, sets[i].num_entry, &dimid)) != NC_NOERR) { exerrval = status; if (status == NC_ENAMEINUSE) { sprintf(errmsg, "Error: %s %"PRId64" -- size already defined in file id %d", ex_name_of_object(sets[i].type), sets[i].id,exoid); ex_err("ex_put_sets",errmsg,exerrval); } else { sprintf(errmsg, "Error: failed to define number of entries in %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id,exoid); ex_err("ex_put_sets",errmsg,exerrval); } goto error_ret; } int_size = sizeof(int); if (ex_int64_status(exoid) & EX_BULK_INT64_DB) { int_size = sizeof(int64_t); } /* create variable array in which to store the entry lists */ dims[0] = dimid; if ((status = nc_def_var(exoid, entryptr, int_size, 1, dims, &varid)) != NC_NOERR) { exerrval = status; if (status == NC_ENAMEINUSE) { sprintf(errmsg, "Error: entry list already exists for %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id,exoid); ex_err("ex_put_sets",errmsg,exerrval); } else { sprintf(errmsg, "Error: failed to create entry list for %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id,exoid); ex_err("ex_put_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } ex_compress_variable(exoid, varid, 1); if (extraptr) { if ((status = nc_def_var(exoid, extraptr, int_size, 1, dims, &varid)) != NC_NOERR) { exerrval = status; if (status == NC_ENAMEINUSE) { sprintf(errmsg, "Error: extra list already exists for %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id, exoid); ex_err("ex_put_sets",errmsg,exerrval); } else { sprintf(errmsg, "Error: failed to create extra list for %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id,exoid); ex_err("ex_put_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } ex_compress_variable(exoid, varid, 1); } /* Create distribution factors variable if required */ if (sets[i].num_distribution_factor > 0) { if (sets[i].type != EX_SIDE_SET) { /* but sets[i].num_distribution_factor must equal number of nodes */ if (sets[i].num_distribution_factor != sets[i].num_entry) { exerrval = EX_FATAL; sprintf(errmsg, "Error: # dist fact (%"PRId64") not equal to # nodes (%"PRId64") in node set %"PRId64" file id %d", sets[i].num_distribution_factor, sets[i].num_entry, sets[i].id, exoid); ex_err("ex_put_sets",errmsg,exerrval); goto error_ret; /* exit define mode and return */ } } else { /* resuse dimid from entry lists */ if ((status = nc_def_dim(exoid, numdfptr, sets[i].num_distribution_factor, &dimid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to define number of dist factors in %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id,exoid); ex_err("ex_put_sets",errmsg,exerrval); goto error_ret; /* exit define mode and return */ } } /* create variable array in which to store the set distribution factors */ dims[0] = dimid; if ((status = nc_def_var(exoid, factptr, nc_flt_code(exoid), 1, dims, &varid)) != NC_NOERR) { exerrval = status; if (status == NC_ENAMEINUSE) { sprintf(errmsg, "Error: dist factors list already exists for %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id,exoid); ex_err("ex_put_sets",errmsg,exerrval); } else { sprintf(errmsg, "Error: failed to create dist factors list for %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id,exoid); ex_err("ex_put_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } ex_compress_variable(exoid, varid, 2); } } /* leave define mode */ if ((status = nc_enddef (exoid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to complete definition in file id %d", exoid); ex_err("ex_put_sets",errmsg,exerrval); return (EX_FATAL); } /* Output the set ids and status... */ for (i=0; i < set_count; i++) { /* setup pointers based on sets[i].type */ if (sets[i].type == EX_NODE_SET) { idsptr = VAR_NS_IDS; statptr = VAR_NS_STAT; } else if (sets[i].type == EX_EDGE_SET) { idsptr = VAR_ES_IDS; statptr = VAR_ES_STAT; } else if (sets[i].type == EX_FACE_SET) { idsptr = VAR_FS_IDS; statptr = VAR_FS_STAT; } else if (sets[i].type == EX_SIDE_SET) { idsptr = VAR_SS_IDS; statptr = VAR_SS_STAT; } else if (sets[i].type == EX_ELEM_SET) { idsptr = VAR_ELS_IDS; statptr = VAR_ELS_STAT; } /* first: get id of set id variable */ if ((status = nc_inq_varid(exoid, idsptr, &varid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to locate %s %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id, exoid); ex_err("ex_put_sets",errmsg,exerrval); return (EX_FATAL); } /* write out set id */ start[0] = sets_to_define[i]-1; status = nc_put_var1_longlong(exoid, varid, start, (long long*)&sets[i].id); if (status != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to store %s id %"PRId64" in file id %d", ex_name_of_object(sets[i].type), sets[i].id, exoid); ex_err("ex_put_sets",errmsg,exerrval); return (EX_FATAL); } set_stat = (sets[i].num_entry == 0) ? 0 : 1; if ((status = nc_inq_varid(exoid, statptr, &varid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to locate %s status in file id %d", ex_name_of_object(sets[i].type), exoid); ex_err("ex_put_sets",errmsg,exerrval); return (EX_FATAL); } if ((status = nc_put_var1_int(exoid, varid, start, &set_stat)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to store %s %"PRId64" status to file id %d", ex_name_of_object(sets[i].type), sets[i].id, exoid); ex_err("ex_put_sets",errmsg,exerrval); return (EX_FATAL); } } free(sets_to_define); } /* Sets are now all defined; see if any set data needs to be output... */ status = EX_NOERR; for (i=0; i < set_count; i++) { int stat; if (sets[i].entry_list != NULL || sets[i].extra_list != NULL) { /* NOTE: ex_put_set will write the warning/error message... */ stat = ex_put_set(exoid, sets[i].type, sets[i].id, sets[i].entry_list, sets[i].extra_list); if (stat != EX_NOERR) status = EX_FATAL; } if (sets[i].distribution_factor_list != NULL) { /* NOTE: ex_put_set_dist_fact will write the warning/error message... */ stat = ex_put_set_dist_fact(exoid, sets[i].type, sets[i].id, sets[i].distribution_factor_list); if (stat != EX_NOERR) status = EX_FATAL; } } return (status); /* Fatal error: exit definition mode and return */ error_ret: free(sets_to_define); if (nc_enddef (exoid) != NC_NOERR) { /* exit define mode */ sprintf(errmsg, "Error: failed to complete definition for file id %d", exoid); ex_err("ex_put_sets",errmsg,exerrval); } return (EX_FATAL); }
int main(int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_total_nodes_per_blk[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], nnpe[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 dist_fact[100]; char * coord_names[3], *qa_record[2][4], *info[3], *var_names[3]; char * block_names[10], *nset_names[10], *sset_names[10]; char * 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-nsided.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 = 33; num_elem = 7; num_elem_blk = 1; 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); } 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); } /* 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 */ block_names[0] = "nsided_1"; num_elem_in_block[0] = 7; num_total_nodes_per_blk[0] = 37; ebids[0] = 10; #if 0 error = ex_put_nsided_block (exoid, EX_ELEM_BLOCK, ebids[0], num_elem_in_block[0], num_total_nodes_per_blk[0], 0); #else error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[0], "nsided", num_elem_in_block[0], num_total_nodes_per_blk[0], 0, 0, 0); #endif printf("after ex_put_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 connectivity */ connect = (int *)calloc(num_total_nodes_per_blk[0], sizeof(int)); i = 0; j = 0; connect[i++] = 1; connect[i++] = 2; connect[i++] = 3; connect[i++] = 4; nnpe[j++] = 4; connect[i++] = 5; connect[i++] = 6; connect[i++] = 7; connect[i++] = 8; nnpe[j++] = 4; connect[i++] = 9; connect[i++] = 10; connect[i++] = 11; connect[i++] = 12; connect[i++] = 13; connect[i++] = 14; connect[i++] = 15; connect[i++] = 16; nnpe[j++] = 8; connect[i++] = 17; connect[i++] = 18; connect[i++] = 19; connect[i++] = 20; nnpe[j++] = 4; connect[i++] = 21; connect[i++] = 22; connect[i++] = 23; connect[i++] = 24; connect[i++] = 25; connect[i++] = 26; nnpe[j++] = 6; connect[i++] = 17; connect[i++] = 18; connect[i++] = 19; connect[i++] = 20; connect[i++] = 27; connect[i++] = 28; connect[i++] = 30; connect[i++] = 29; nnpe[j++] = 8; connect[i++] = 31; connect[i++] = 32; connect[i++] = 33; nnpe[j++] = 3; assert(i == num_total_nodes_per_blk[0]); assert(j == num_elem_in_block[0]); error = ex_put_conn(exoid, EX_ELEM_BLOCK, ebids[0], connect, NULL, NULL); printf("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close(exoid); exit(-1); } free(connect); error = ex_put_entity_count_per_polyhedra(exoid, EX_ELEM_BLOCK, ebids[0], nnpe); printf("after ex_put_entity_count_per_polyhedra, 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_set_param(exoid, EX_NODE_SET, 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_set(exoid, EX_NODE_SET, nsids[0], node_list, NULL); printf("after ex_put_node_set, error = %d\n", error); if (error) { ex_close(exoid); exit(-1); } error = ex_put_set_dist_fact(exoid, EX_NODE_SET, 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_set_param(exoid, EX_NODE_SET, 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_set(exoid, EX_NODE_SET, nsids[1], node_list, NULL); printf("after ex_put_node_set, error = %d\n", error); if (error) { ex_close(exoid); exit(-1); } error = ex_put_set_dist_fact(exoid, EX_NODE_SET, 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_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 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_set_dist_fact(exoid, EX_SIDE_SET, 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_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 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_set_dist_fact(exoid, EX_SIDE_SET, 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_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 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_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 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_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 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; var_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, var_names); printf("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close(exoid); exit(-1); } num_nod_vars = 2; /* 12345678901234567890123456789012 */ var_names[0] = "node_variable_a_very_long_name_0"; var_names[1] = "nod_var1"; 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, var_names); printf("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close(exoid); exit(-1); } num_ele_vars = 3; var_names[0] = "ele_var0"; var_names[1] = "ele_var1"; var_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, var_names); printf("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close(exoid); exit(-1); } { num_nset_vars = 3; var_names[0] = "ns_var0"; var_names[1] = "ns_var1"; var_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, var_names); printf("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close(exoid); exit(-1); } } { num_sset_vars = 3; var_names[0] = "ss_var0"; var_names[1] = "ss_var1"; var_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, var_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_truth_table(exoid, EX_ELEM_BLOCK, num_elem_blk, num_ele_vars, truth_tab); printf("after ex_put_elem_variable_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(8, 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_var(exoid, whole_time_step, EX_GLOBAL, 1, 0, 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_var(exoid, whole_time_step, EX_NODAL, k, 1, 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_var(exoid, whole_time_step, EX_ELEM_BLOCK, 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_var(exoid, whole_time_step, EX_SIDE_SET, 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_var(exoid, whole_time_step, EX_NODE_SET, 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, 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]); } /* 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_block(exoid, EX_ELEM_BLOCK, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 0, 0, 1); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 0, 0, 1); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 0, 0, 1); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 0, 0, 1); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 0, 0, 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_block(exoidm[n], EX_ELEM_BLOCK, ebids2[0], "quad", num_elem_in_block2[0], num_nodes_per_elem2[0], 0, 0, 1); printf("after ex_put_elem_block (%d), error = %d\n", n, error); error = ex_put_block(exoidm[n], EX_ELEM_BLOCK, ebids2[1], "quad", num_elem_in_block2[1], num_nodes_per_elem2[1], 0, 0, 1); printf("after ex_put_elem_block (%d), error = %d\n", n, error); error = ex_put_block(exoidm[n], EX_ELEM_BLOCK, ebids2[2], "hex", num_elem_in_block2[2], num_nodes_per_elem2[2], 0, 0, 1); printf("after ex_put_elem_block (%d), error = %d\n", n, error); error = ex_put_block(exoidm[n], EX_ELEM_BLOCK, ebids2[3], "tetra", num_elem_in_block2[3], num_nodes_per_elem2[3], 0, 0, 1); printf("after ex_put_elem_block (%d), error = %d\n", n, error); error = ex_put_block(exoidm[n], EX_ELEM_BLOCK, ebids2[4], "wedge", num_elem_in_block2[4], num_nodes_per_elem2[4], 0, 0, 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_conn(exoid, EX_ELEM_BLOCK, ebids[0], connect, NULL, NULL); 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_conn(exoid, EX_ELEM_BLOCK, ebids[1], connect, NULL, NULL); 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_conn(exoid, EX_ELEM_BLOCK, ebids[2], connect, NULL, NULL); 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_conn(exoid, EX_ELEM_BLOCK, ebids[3], connect, NULL, NULL); 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_conn(exoid, EX_ELEM_BLOCK, ebids[4], connect, NULL, NULL); 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_conn(exoidm[n], EX_ELEM_BLOCK, ebids[0], connect2, NULL, NULL); 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_conn(exoidm[n], EX_ELEM_BLOCK, ebids[1], connect2, NULL, NULL); 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_conn(exoidm[n], EX_ELEM_BLOCK, ebids2[2], connect2, NULL, NULL); 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_conn(exoidm[n], EX_ELEM_BLOCK, ebids2[3], connect2, NULL, NULL); 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_conn(exoidm[n], EX_ELEM_BLOCK, ebids2[4], connect2, NULL, NULL); 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_attr(exoid, EX_ELEM_BLOCK, ebids[0], attrib); printf("after ex_put_elem_attr, error = %d\n", error); attrib[0] = 6.14159; error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[1], attrib); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[2], attrib); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[3], attrib); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, 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_attr(exoidm[n], EX_ELEM_BLOCK, ebids[0], attrib2); printf("after ex_put_elem_attr (%d), error = %d\n", n, error); attrib2[0] = 6.; error = ex_put_attr(exoidm[n], EX_ELEM_BLOCK, ebids[1], attrib2); printf("after ex_put_elem_attr (%d), error = %d\n", n, error); error = ex_put_attr(exoidm[n], EX_ELEM_BLOCK, ebids[2], attrib2); printf("after ex_put_elem_attr (%d), error = %d\n", n, error); error = ex_put_attr(exoidm[n], EX_ELEM_BLOCK, ebids[3], attrib2); printf("after ex_put_elem_attr (%d), error = %d\n", n, error); error = ex_put_attr(exoidm[n], EX_ELEM_BLOCK, 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_set_param(exoid, EX_NODE_SET, 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_set(exoid, EX_NODE_SET, 20, node_list, NULL); printf("after ex_put_node_set, error = %d\n", error); error = ex_put_set_dist_fact(exoid, EX_NODE_SET, 20, dist_fact); printf("after ex_put_node_set, error = %d\n", error); error = ex_put_set_param(exoid, EX_NODE_SET, 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_set(exoid, EX_NODE_SET, 21, node_list, NULL); printf("after ex_put_node_set, error = %d\n", error); error = ex_put_set_dist_fact(exoid, EX_NODE_SET, 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_set_param(exoidm[n], EX_NODE_SET, 20, 5, 5); printf("after ex_put_node_set_param (%d), error = %d\n", n, error); node_list2[0] = 10; node_list2[1] = 11; node_list2[2] = 12; node_list2[3] = 13; node_list2[4] = 14; 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_set(exoidm[n], EX_NODE_SET, 20, node_list2, NULL); printf("after ex_put_node_set (%d), error = %d\n", n, error); error = ex_put_set_dist_fact(exoidm[n], EX_NODE_SET, 20, dist_fact2); printf("after ex_put_node_set (%d), error = %d\n", n, error); error = ex_put_set_param(exoidm[n], EX_NODE_SET, 21, 3, 3); printf("after ex_put_node_set_param (%d), error = %d\n", n, error); node_list2[0] = 20; node_list2[1] = 21; node_list2[2] = 22; dist_fact2[0] = 1.1; dist_fact2[1] = 2.1; dist_fact2[2] = 3.1; error = ex_put_set(exoidm[n], EX_NODE_SET, 21, node_list2, NULL); printf("after ex_put_node_set (%d), error = %d\n", n, error); error = ex_put_set_dist_fact(exoidm[n], EX_NODE_SET, 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] = 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, 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] = 10; node_list2[1] = 11; node_list2[2] = 12; node_list2[3] = 13; node_list2[4] = 14; node_list2[5] = 20; node_list2[6] = 21; node_list2[7] = 22; 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_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 30, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); error = ex_put_set_dist_fact(exoid, EX_SIDE_SET, 30, dist_fact); printf("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #2 - quad spanning elements */ error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 31, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); error = ex_put_set_dist_fact(exoid, EX_SIDE_SET, 31, dist_fact); printf("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #3 - hex */ error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 32, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); /* side set #4 - tetras */ error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 33, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); /* side set #5 - wedges */ error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 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_set_param(exoidm[n], EX_SIDE_SET, 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_set(exoidm[n], EX_SIDE_SET, 30, elem_list2, side_list2); printf("after ex_put_side_set (%d), error = %d\n", n, error); error = ex_put_set_dist_fact(exoidm[n], EX_SIDE_SET, 30, dist_fact2); printf("after ex_put_side_set_dist_fact (%d), error = %d\n", n, error); /* side set 2 */ error = ex_put_set_param(exoidm[n], EX_SIDE_SET, 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_set(exoidm[n], EX_SIDE_SET, 31, elem_list2, side_list2); printf("after ex_put_side_set (%d), error = %d\n", n, error); error = ex_put_set_dist_fact(exoidm[n], EX_SIDE_SET, 31, dist_fact2); printf("after ex_put_side_set_dist_fact (%d), error = %d\n", n, error); /* side set #3 - hex */ error = ex_put_set_param(exoidm[n], EX_SIDE_SET, 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_set(exoidm[n], EX_SIDE_SET, 32, elem_list2, side_list2); printf("after ex_put_side_set (%d), error = %d\n", n, error); /* side set #4 - tetras */ error = ex_put_set_param(exoidm[n], EX_SIDE_SET, 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_set(exoidm[n], EX_SIDE_SET, 33, elem_list2, side_list2); printf("after ex_put_side_set (%d), error = %d\n", n, error); /* side set #5 - wedges */ error = ex_put_set_param(exoidm[n], EX_SIDE_SET, 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_set(exoidm[n], EX_SIDE_SET, 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; { struct ex_set_specs set_specs; set_specs.sets_ids = ids; set_specs.num_entries_per_set = num_elem_per_set; set_specs.num_dist_per_set = num_df_per_set; set_specs.sets_entry_index = elem_ind; set_specs.sets_dist_index = df_ind; set_specs.sets_entry_list = elem_list; set_specs.sets_extra_list = side_list; set_specs.sets_dist_fact = dist_fact; error = ex_put_concat_sets(exoid, EX_SIDE_SET, &set_specs); } 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); { struct ex_set_specs set_specs; set_specs.sets_ids = ids2; set_specs.num_entries_per_set = num_elem_per_set2; set_specs.num_dist_per_set = num_df_per_set2; set_specs.sets_entry_index = elem_ind2; set_specs.sets_dist_index = df_ind2; set_specs.sets_entry_list = elem_list2; set_specs.sets_extra_list = side_list2; set_specs.sets_dist_fact = dist_fact2; error = ex_put_concat_sets(exoid, EX_SIDE_SET, &set_specs); } 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_variable_param(exoid, EX_GLOBAL, num_glo_vars); printf("after ex_put_variable_param, error = %d\n", error); error = ex_put_variable_names(exoid, EX_GLOBAL, num_glo_vars, var_names); printf("after ex_put_variable_names, error = %d\n", error); num_glo_vars2 = 1; var_names2[0] = "glo_vars"; for (n = 0; n < nexofiles; n++) { error = ex_put_variable_param(exoidm[n], EX_GLOBAL, num_glo_vars2); printf("after ex_put_variable_param (%d), error = %d\n", n, error); error = ex_put_variable_names(exoidm[n], EX_GLOBAL, num_glo_vars2, var_names2); printf("after ex_put_variable_names (%d), error = %d\n", n, error); } num_nod_vars = 2; var_names[0] = "nod_var0"; var_names[1] = "nod_var1"; error = ex_put_variable_param(exoid, EX_NODAL, num_nod_vars); printf("after ex_put_variable_param, error = %d\n", error); error = ex_put_variable_names(exoid, EX_NODAL, num_nod_vars, var_names); printf("after ex_put_variable_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_variable_param(exoidm[n], EX_NODAL, num_nod_vars2); printf("after ex_put_variable_param (%d), error = %d\n", n, error); error = ex_put_variable_names(exoidm[n], EX_NODAL, num_nod_vars2, var_names2); printf("after ex_put_variable_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_variable_param(exoid, EX_ELEM_BLOCK, num_ele_vars); printf("after ex_put_variable_param, error = %d\n", error); error = ex_put_variable_names(exoid, EX_ELEM_BLOCK, num_ele_vars, var_names); printf("after ex_put_variable_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_variable_param(exoidm[n], EX_ELEM_BLOCK, num_ele_vars2); printf("after ex_put_variable_param (%d), error = %d\n", n, error); error = ex_put_variable_names(exoidm[n], EX_ELEM_BLOCK, num_ele_vars, var_names); printf("after ex_put_variable_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_truth_table(exoid, EX_ELEM_BLOCK, 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_truth_table(exoidm[n], EX_ELEM_BLOCK, 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(float)); nodal_var_vals = (float *)calloc(num_nodes, sizeof(float)); elem_var_vals = (float *)calloc(4, sizeof(float)); 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_var(exoid, whole_time_step, EX_GLOBAL, 1, 1, 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_var(exoidm[n], whole_time_step, EX_GLOBAL, 1, 1, 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_var(exoid, whole_time_step, EX_NODAL, k, 1, num_nodes, nodal_var_vals); printf("after ex_put_nodal_var, error = %d\n", error); for (n = 0; n < nexofiles; n++) { error = ex_put_var(exoidm[n], whole_time_step, EX_NODAL, k, 1, 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_var(exoid, whole_time_step, EX_ELEM_BLOCK, 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_var(exoidm[n], whole_time_step, EX_ELEM_BLOCK, 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_sets (int exoid, ex_entity_type set_type, const struct ex_set_specs* set_specs) { int status; int temp; const void_int *num_entries_per_set = set_specs->num_entries_per_set; const void_int *num_dist_per_set = set_specs->num_dist_per_set; const void_int *sets_entry_index = set_specs->sets_entry_index; const void_int *sets_dist_index = set_specs->sets_dist_index; const void *sets_dist_fact = set_specs->sets_dist_fact; size_t i, num_df, num_entry; int cur_num_sets, num_sets; int dimid, varid, set_id_ndx, dims[1]; int *set_stat = NULL; int set_int_type, int_size; const float *flt_dist_fact = NULL; const double *dbl_dist_fact = NULL; char errmsg[MAX_ERR_LENGTH]; char* idsptr = NULL; char* statptr = NULL; char* numdfptr = NULL; char* factptr = NULL; char* elemptr = NULL; char* extraptr = NULL; ex_inquiry ex_inq_val; exerrval = 0; /* clear error code */ int_size = sizeof(int); if (ex_int64_status(exoid) & EX_BULK_INT64_API) { int_size = sizeof(int64_t); } /* setup pointers based on set_type NOTE: there is another block that sets more stuff later ... */ if (set_type == EX_NODE_SET) { ex_inq_val = EX_INQ_NODE_SETS; idsptr = VAR_NS_IDS; statptr = VAR_NS_STAT; } else if (set_type == EX_EDGE_SET) { ex_inq_val = EX_INQ_EDGE_SETS; idsptr = VAR_ES_IDS; statptr = VAR_ES_STAT; } else if (set_type == EX_FACE_SET) { ex_inq_val = EX_INQ_FACE_SETS; idsptr = VAR_FS_IDS; statptr = VAR_FS_STAT; } else if (set_type == EX_SIDE_SET) { ex_inq_val = EX_INQ_SIDE_SETS; idsptr = VAR_SS_IDS; statptr = VAR_SS_STAT; } else if (set_type == EX_ELEM_SET) { ex_inq_val = EX_INQ_ELEM_SETS; idsptr = VAR_ELS_IDS; statptr = VAR_ELS_STAT; } else { exerrval = EX_FATAL; sprintf(errmsg, "Error: invalid set type (%d)", set_type); ex_err("ex_put_set_param",errmsg,exerrval); return (EX_FATAL); } /* first check if any sets are specified */ if ((status = nc_inq_dimid(exoid, ex_dim_num_objects(set_type), &temp)) != NC_NOERR) { if (status == NC_EBADDIM) { exerrval = status; sprintf(errmsg, "Error: no %ss defined for file id %d", ex_name_of_object(set_type), exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } else { exerrval = status; sprintf(errmsg, "Error: failed to locate %ss defined in file id %d", ex_name_of_object(set_type), exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } return (EX_FATAL); } /* inquire how many sets are to be stored */ num_sets = ex_inquire_int(exoid, ex_inq_val); if (num_sets < 0) { sprintf(errmsg, "Error: failed to get number of %ss defined for file id %d", ex_name_of_object(set_type), exoid); /* use error val from inquire */ ex_err("ex_put_concat_sets",errmsg,exerrval); return (EX_FATAL); } /* Fill out set status array */ /* First, allocate space for the status list */ if (!(set_stat= malloc(num_sets*sizeof(int)))) { exerrval = EX_MEMFAIL; sprintf(errmsg, "Error: failed to allocate space for %s status array in file id %d", ex_name_of_object(set_type), exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); return (EX_FATAL); } if (int_size == sizeof(int64_t)) { for (i=0;i<num_sets;i++) { set_stat[i] = (((int64_t*)num_entries_per_set)[i] == 0) ? 0 : 1; } } else { for (i=0;i<num_sets;i++) { set_stat[i] = (((int*)num_entries_per_set)[i] == 0) ? 0 : 1; } } /* Next, get variable id of status array */ if ((status = nc_inq_varid(exoid, statptr, &varid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to locate %s status in file id %d", ex_name_of_object(set_type), exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); ex_safe_free(set_stat); return (EX_FATAL); } status = nc_put_var_int(exoid, varid, set_stat); if (status != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to store %s status array to file id %d", ex_name_of_object(set_type), exoid); ex_err("ex_put_concat_set",errmsg,exerrval); ex_safe_free(set_stat); return (EX_FATAL); } /* put netcdf file into define mode */ if ((status = nc_redef (exoid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to put file id %d into define mode", exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); ex_safe_free(set_stat); return (EX_FATAL); } /* create set definitions */ for (i=0; i<num_sets; i++) { int64_t set_id; if (ex_int64_status(exoid) & EX_IDS_INT64_API) { set_id = ((int64_t*)set_specs->sets_ids)[i]; } else { set_id = ((int*)set_specs->sets_ids)[i]; } /* Keep track of the total number of 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 sets of type for a specific file and returns that value. */ cur_num_sets=ex_get_file_item(exoid, ex_get_counter_list(set_type)); if (cur_num_sets >= num_sets) { exerrval = EX_FATAL; sprintf(errmsg, "Error: exceeded number of %ss (%d) defined in file id %d", ex_name_of_object(set_type), num_sets,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); goto error_ret; } /* NOTE: ex_inc_file_item is used to find the number of sets for a specific file and returns that value incremented. */ cur_num_sets=ex_inc_file_item(exoid, ex_get_counter_list(set_type)); set_id_ndx = cur_num_sets + 1; /* setup more pointers based on set_type */ if (set_type == EX_NODE_SET) { elemptr = VAR_NODE_NS(set_id_ndx); extraptr = NULL; /* note we are using DIM_NUM_NODE_NS instead of DIM_NUM_DF_NS */ numdfptr = DIM_NUM_NOD_NS(set_id_ndx); factptr = VAR_FACT_NS(set_id_ndx); } else if (set_type == EX_EDGE_SET) { elemptr = VAR_EDGE_ES(set_id_ndx); extraptr = VAR_ORNT_ES(set_id_ndx); numdfptr = DIM_NUM_DF_ES(set_id_ndx); factptr = VAR_FACT_ES(set_id_ndx); } else if (set_type == EX_FACE_SET) { elemptr = VAR_FACE_FS(set_id_ndx); extraptr = VAR_ORNT_FS(set_id_ndx); numdfptr = DIM_NUM_DF_FS(set_id_ndx); factptr = VAR_FACT_FS(set_id_ndx); } else if (set_type == EX_SIDE_SET) { elemptr = VAR_ELEM_SS(set_id_ndx); extraptr = VAR_SIDE_SS(set_id_ndx); numdfptr = DIM_NUM_DF_SS(set_id_ndx); factptr = VAR_FACT_SS(set_id_ndx); } if (set_type == EX_ELEM_SET) { elemptr = VAR_ELEM_ELS(set_id_ndx); extraptr = NULL; numdfptr = DIM_NUM_DF_ELS(set_id_ndx); factptr = VAR_FACT_ELS(set_id_ndx); } /* define dimension for number of entries per set */ if (set_stat[i] == 0) /* Is this a NULL set? */ continue; /* Do not create anything for NULL sets! */ if (int_size == sizeof(int)) { status = nc_def_dim(exoid, ex_dim_num_entries_in_object(set_type, set_id_ndx), ((int*)num_entries_per_set)[i], &dimid); } else { status = nc_def_dim(exoid, ex_dim_num_entries_in_object(set_type, set_id_ndx), ((int64_t*)num_entries_per_set)[i], &dimid); } if (status != NC_NOERR) { if (status == NC_ENAMEINUSE) { exerrval = status; sprintf(errmsg, "Error: %s entry count %"PRId64" already defined in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } else { exerrval = status; sprintf(errmsg, "Error: failed to define number of entries for %s %"PRId64" in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } goto error_ret; } /* create element list variable for set */ set_int_type = NC_INT; if (ex_int64_status(exoid) & EX_BULK_INT64_DB) { set_int_type = NC_INT64; } dims[0] = dimid; if ((status = nc_def_var(exoid,elemptr,set_int_type,1,dims, &temp)) != NC_NOERR) { if (status == NC_ENAMEINUSE) { exerrval = status; sprintf(errmsg, "Error: element list already exists for %s %"PRId64" in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } else { exerrval = status; sprintf(errmsg, "Error: failed to create element list for %s %"PRId64" in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } ex_compress_variable(exoid, temp, 1); /* create extra list variable for set (only for edge, face and side sets) */ if (extraptr) { if ((status = nc_def_var(exoid,extraptr,set_int_type,1,dims, &temp)) != NC_NOERR) { if (status == NC_ENAMEINUSE) { exerrval = status; sprintf(errmsg, "Error: extra list already exists for %s %"PRId64" in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } else { exerrval = status; sprintf(errmsg, "Error: failed to create extra list for %s %"PRId64" in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } ex_compress_variable(exoid, temp, 1); } /* define dimension for number of dist factors per set */ /* NOTE: only define df count if the dist factors exist! */ if (int_size == sizeof(int64_t)) { num_df = ((int64_t*)num_dist_per_set)[i]; num_entry = ((int64_t*)num_entries_per_set)[i]; } else { num_df = ((int*)num_dist_per_set)[i]; num_entry = ((int*)num_entries_per_set)[i]; } if (num_df > 0) { if (set_type == EX_NODE_SET) { if (num_df != num_entry) { exerrval = EX_FATAL; sprintf(errmsg, "Error: # dist fact (%"ST_ZU") not equal to # nodes (%"ST_ZU") in node set %"PRId64" file id %d", num_df, num_entry, set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); goto error_ret; /* exit define mode and return */ } /* resuse dimid from entry lists */ } else { if ((status = nc_def_dim(exoid, numdfptr, num_df, &dimid)) != NC_NOERR) { if (status == NC_ENAMEINUSE) { exerrval = status; sprintf(errmsg, "Error: %s df count %"PRId64" already defined in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } else { exerrval = status; sprintf(errmsg, "Error: failed to define %s df count for set %"PRId64" in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } goto error_ret; } } /* create distribution factor list variable for set */ dims[0] = dimid; if ((status = nc_def_var(exoid, factptr, nc_flt_code(exoid), 1, dims, &temp)) != NC_NOERR) { if (status == NC_ENAMEINUSE) { exerrval = status; sprintf(errmsg, "Error: dist factor list already exists for %s %"PRId64" in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } else { exerrval = status; sprintf(errmsg, "Error: failed to create dist factor list for %s %"PRId64" in file id %d", ex_name_of_object(set_type), set_id,exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } ex_compress_variable(exoid, temp, 2); } /* end define dist factors */ } /* leave define mode */ if ((status = nc_enddef (exoid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to complete definition in file id %d", exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); ex_safe_free(set_stat); return (EX_FATAL); } /* Next, fill out set ids array */ /* first get id of set ids array variable */ if ((status = nc_inq_varid(exoid, idsptr, &varid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to locate %s ids array in file id %d", ex_name_of_object(set_type), exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); ex_safe_free(set_stat); return (EX_FATAL); } /* then, write out set id list */ if (ex_int64_status(exoid) & EX_IDS_INT64_API) { status = nc_put_var_longlong(exoid, varid, set_specs->sets_ids); } else { status = nc_put_var_int(exoid, varid, set_specs->sets_ids); } if (status != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to store %s id array in file id %d", ex_name_of_object(set_type), exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); ex_safe_free(set_stat); return (EX_FATAL); } /* If the sets_entry_index is passed in as a NULL pointer, then * the user only wants us to define the sets and not populate * the data structures. */ if (sets_entry_index == 0) { ex_safe_free(set_stat); return(EX_NOERR); } /* Now, use ExodusII call to store sets */ for (i=0; i<num_sets; i++) { int64_t set_id; size_t df_ndx; if (set_stat[i] == 0) /* Is this a NULL set? */ continue; /* Do not create anything for NULL sets! */ if (ex_int64_status(exoid) & EX_IDS_INT64_API) { set_id = ((int64_t*)set_specs->sets_ids)[i]; } else { set_id = ((int*)set_specs->sets_ids)[i]; } if (ex_int64_status(exoid) & EX_BULK_INT64_API) { int64_t* extra_list = NULL; /* set extra list */ if (set_type == EX_EDGE_SET || set_type == EX_FACE_SET || set_type == EX_SIDE_SET) extra_list = &(((int64_t*)set_specs->sets_extra_list)[((int64_t*)sets_entry_index)[i]]); status = ex_put_set(exoid, set_type, set_id, &(((int64_t*)set_specs->sets_entry_list)[((int64_t*)sets_entry_index)[i]]), extra_list); } else { int* extra_list = NULL; /* set extra list */ if (set_type == EX_EDGE_SET || set_type == EX_FACE_SET || set_type == EX_SIDE_SET) extra_list = &(((int*)set_specs->sets_extra_list)[((int*)sets_entry_index)[i]]); status = ex_put_set(exoid, set_type, set_id, &(((int*)set_specs->sets_entry_list)[((int*)sets_entry_index)[i]]), extra_list); } if (status != NC_NOERR) { ex_safe_free(set_stat); return(EX_FATAL); /* error will be reported by subroutine */ } if (int_size == sizeof(int)) { num_df = ((int*)num_dist_per_set)[i]; df_ndx = ((int*)sets_dist_index)[i]; } else { num_df = ((int64_t*)num_dist_per_set)[i]; df_ndx = ((int64_t*)sets_dist_index)[i]; } if (ex_comp_ws(exoid) == sizeof(float)) { flt_dist_fact = sets_dist_fact; if (num_df > 0) { /* store dist factors if required */ if (ex_put_set_dist_fact(exoid, set_type, set_id, &(flt_dist_fact[df_ndx])) == -1) { sprintf(errmsg, "Error: failed to store %s %"PRId64" dist factors for file id %d", ex_name_of_object(set_type), set_id,exoid); /* use error val from exodusII routine */ ex_err("ex_put_concat_sets",errmsg,exerrval); ex_safe_free(set_stat); return (EX_FATAL); } } } else if (ex_comp_ws(exoid) == sizeof(double)) { dbl_dist_fact = sets_dist_fact; if (num_df) { /* only store if they exist */ if (ex_put_set_dist_fact(exoid, set_type, set_id, &(dbl_dist_fact[df_ndx])) == -1) { sprintf(errmsg, "Error: failed to store %s %"PRId64" dist factors for file id %d", ex_name_of_object(set_type), set_id,exoid); /* use error val from exodusII routine */ ex_err("ex_put_concat_sets",errmsg,exerrval); ex_safe_free(set_stat); 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_sets", errmsg, exerrval); ex_safe_free(set_stat); return (EX_FATAL); } } ex_safe_free(set_stat); return(EX_NOERR); /* Fatal error: exit definition mode and return */ error_ret: ex_safe_free(set_stat); if (nc_enddef (exoid) != NC_NOERR) /* exit define mode */ { sprintf(errmsg, "Error: failed to complete definition for file id %d", exoid); ex_err("ex_put_concat_sets",errmsg,exerrval); } return (EX_FATAL); }
int main (int argc, char **argv) { int num_glo_vars = 10; int num_nod_vars = 2; int CPU_word_size = 8; int IO_word_size = 8; const char* title = "This is a 2D mesh example with tri, quad, beam, truss, circle"; int ebids[] = {100, 200, 300, 400, 500}; int num_dim = 2; int num_nodes = 13; int num_elem = 20; int num_elem_blk = 5; int num_node_sets = 2; int num_side_sets = 2; /* create EXODUS II file */ int exoid = ex_create ("twod.e", /* 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 */ ex_opts(EX_VERBOSE); /* initialize file with parameters */ ex_put_init (exoid, title, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); /* write nodal coordinates values and names to database */ { double x[13], y[13]; x[0] = 0.0; y[0] = 0.0; x[1] = -0.5; y[1] = -0.5; x[2] = 0.5; y[2] = -0.5; x[3] = 0.5; y[3] = 0.5; x[4] = -0.5; y[4] = 0.5; x[5] = -1.0; y[5] = -1.0; x[6] = 1.0; y[6] = -1.0; x[7] = 1.0; y[7] = 1.0; x[8] = -1.0; y[8] = 1.0; x[9] = -2.0; y[9] = 0.0; x[10] = 0.0; y[10] = -2.0; x[11] = 2.0; y[11] = 0.0; x[12] = 0.0; y[12] = 2.0; ex_put_coord (exoid, x, y, 0); } { const char* coord_names[] = {"xcoor", "ycoor"}; ex_put_coord_names (exoid, (char**)coord_names); } { int node_map[] = {10,20,30,40,50,60,70,80,90,100,110,120,130}; ex_put_node_num_map(exoid, node_map); } /* write element order map */ { int elem_map[] = {11,21,31,41, 52, 62, 72, 82, 93,103,113,123,133,143,153,163, 174,184,194,204}; ex_put_elem_num_map (exoid, elem_map); } /* write element block parameters */ { const char* block_names[] = {"Triangles", "Quadrilaterals", "", "Trusses", "Circles"}; int num_elem_in_block[] = {4, 4, 4, 4, 4}; int num_nodes_per_elem[] = {3, 4, 2, 2, 1}; ex_put_elem_block (exoid, ebids[0], "triangle", num_elem_in_block[0], num_nodes_per_elem[0], 0); ex_put_elem_block (exoid, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 0); ex_put_elem_block (exoid, ebids[2], "beam", num_elem_in_block[2], num_nodes_per_elem[2], 3); ex_put_elem_block (exoid, ebids[3], "truss", num_elem_in_block[3], num_nodes_per_elem[3], 1); ex_put_elem_block (exoid, ebids[4], "circle", num_elem_in_block[4], num_nodes_per_elem[4], 2); /* Write element block names */ ex_put_names(exoid, EX_ELEM_BLOCK, (char**)block_names); } /* write element connectivity */ { int conn_t[] = {2,3,1, 3,4,1, 4,5,1, 5,2,1}; int conn_q[] = {6,7,3,2, 7,8,4,3, 8,9,5,4, 9,6,2,5}; int conn_B[] = {11,7, 8,13, 13,9, 6,11}; int conn_T[] = {10,6, 9,10, 7,12, 12,8}; int conn_c[] = {6,7,8,9}; ex_put_elem_conn (exoid, ebids[0], conn_t); ex_put_elem_conn (exoid, ebids[1], conn_q); ex_put_elem_conn (exoid, ebids[2], conn_B); ex_put_elem_conn (exoid, ebids[3], conn_T); ex_put_elem_conn (exoid, ebids[4], conn_c); } /* write element block attributes */ { const char* attn_T[] = {"Area"}; double attr_T[] = {1.0, 1.1, 1.2, 1.3}; const char* attn_B[] = {"A", "I", "J"}; double attr_B[] = {1.0, 100.0, 200.0, 1.1, 100.1, 200.1, 1.2, 100.2, 200.2, 1.3, 100.3, 200.3}; const char* attn_c[] = {"Radius", "A"}; double attr_c[] = {1.0, 3.14, 1.1, 4.14, 1.2, 5.14, 1.3, 6.14}; ex_put_elem_attr (exoid, ebids[2], attr_B); ex_put_elem_attr (exoid, ebids[3], attr_T); ex_put_elem_attr (exoid, ebids[4], attr_c); ex_put_elem_attr_names (exoid, ebids[2], (char**)attn_B); ex_put_elem_attr_names (exoid, ebids[3], (char**)attn_T); ex_put_elem_attr_names (exoid, ebids[4], (char**)attn_c); } /* write individual node sets */ { int num_nodes_in_nset[] = {5, 8}; int nsids[] = {20, 22}; int nod1[] = {5,4,3,2,1}; int nod2[] = {6,7,8,9,2,3,4,5}; const char* nset_names[] = {"Triangle_Nodes", "Quadrilateral_Nodes"}; ex_put_set_param (exoid, EX_NODE_SET, nsids[0], num_nodes_in_nset[0], 0); ex_put_set_param (exoid, EX_NODE_SET, nsids[1], num_nodes_in_nset[1], 0); ex_put_set (exoid, EX_NODE_SET, nsids[0], nod1, 0); ex_put_set (exoid, EX_NODE_SET, nsids[1], nod2, 0); ex_put_names(exoid, EX_NODE_SET, (char**)nset_names); } { /* write individual side sets */ int num_face_in_sset[] = {4,4}; int ssids[] = {100,200}; int ss1el[] = {1,2,3,4}; int ss1si[] = {1,1,1,1}; int ss2el[] = {5,7,6,8}; int ss2si[] = {1,1,1,1}; const char* sset_names[] = {"A", "B"}; ex_put_set_param (exoid, EX_SIDE_SET, ssids[0], num_face_in_sset[0], 0); ex_put_set_param (exoid, EX_SIDE_SET, ssids[1], num_face_in_sset[1], 0); ex_put_set (exoid, EX_SIDE_SET, ssids[0], ss1el, ss1si); ex_put_set (exoid, EX_SIDE_SET, ssids[1], ss2el, ss2si); ex_put_names(exoid, EX_SIDE_SET, (char**)sset_names); } /* write results variables parameters and names */ { const char* gvarn[] = {"g_01", "g_02", "g_03", "g_04", "g_05", "g_06", "g_07", "g_08", "g_09", "g_10"}; ex_put_variable_param (exoid, EX_GLOBAL, num_glo_vars); ex_put_variable_names (exoid, EX_GLOBAL, num_glo_vars, (char**)gvarn); } { const char* nvarn[] = {"disp_x", "disp_y"}; ex_put_variable_param (exoid, EX_NODAL, num_nod_vars); ex_put_variable_names (exoid, EX_NODAL, num_nod_vars, (char**)nvarn); } #if 0 num_ele_vars = 3; /* 0 1 2 3 */ /* 12345678901234567890123456789012 */ var_names[0] = "this_variable_name_is_short"; var_names[1] = "this_variable_name_is_just_right"; var_names[2] = "this_variable_name_is_tooooo_long"; ex_put_var_param (exoid, "e", num_ele_vars); printf ("after ex_put_var_param, %d\n", error); if (error) { ex_close (exoid); exit(-1); } ex_put_var_names (exoid, "e", num_ele_vars, var_names); printf ("after ex_put_var_names, %d\n", error); if (error) { ex_close (exoid); exit(-1); } { num_nset_vars = 3; var_names[0] = "ns_var0"; var_names[1] = "ns_var1"; var_names[2] = "ns_var2"; ex_put_var_param (exoid, "m", num_nset_vars); printf ("after ex_put_var_param, %d\n", error); if (error) { ex_close (exoid); exit(-1); } ex_put_var_names (exoid, "m", num_nset_vars, var_names); printf ("after ex_put_var_names, %d\n", error); if (error) { ex_close (exoid); exit(-1); } } { num_sset_vars = 3; var_names[0] = "ss_var0"; var_names[1] = "ss_var1"; var_names[2] = "ss_var2"; ex_put_var_param (exoid, "s", num_sset_vars); printf ("after ex_put_var_param, %d\n", error); if (error) { ex_close (exoid); exit(-1); } ex_put_var_names (exoid, "s", num_sset_vars, var_names); printf ("after ex_put_var_names, %d\n", error); if (error) { ex_close (exoid); exit(-1); } } #endif /* 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 */ { int i, j, k; int whole_time_step = 1; int num_time_steps = 10; double gvar[10]; double nvar[20]; for (i=0; i<num_time_steps; i++) { double time_value = (double)(i)/100.; ex_put_time (exoid, whole_time_step, &time_value); for (j=0; j<num_glo_vars; j++) { gvar[j] = (double)(j+2) * time_value; } ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, gvar); /* write nodal variables */ for (k=0; k < num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nvar[j] = (double)k + ((double)(j+1) * time_value); } ex_put_nodal_var (exoid, whole_time_step, k+1, num_nodes, nvar); } #if 0 /* 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]); */ } 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, %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]); */ } 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, %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]); */ } 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, %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } #endif whole_time_step++; } } ex_close (exoid); return 0; }
int main(int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int exoid2, 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; int i, j, k, m; 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]; int ebids2[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[100]; 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 * prop_names[2]; 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 (a "regular" and a "history") */ 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); 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); /* 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 2 with parameters */ num_dim2 = 3; num_nodes2 = 26; num_elem2 = 5; num_elem_blk2 = 5; num_node_sets2 = 2; num_side_sets2 = 5; error = ex_put_init(exoid2, "This is test 2", num_dim2, num_nodes2, num_elem2, num_elem_blk2, num_node_sets2, num_side_sets2); printf("after ex_put_init (2), error = %d\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 2 */ error = ex_put_coord(exoid2, x, y, z); printf("after ex_put_coord (2), 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); coord_names2[0] = "xcoor"; coord_names2[1] = "ycoor"; coord_names2[2] = "zcoor"; error = ex_put_coord_names(exoid2, coord_names2); printf("after ex_put_coord_names (2), 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); elem_map2 = (int *)calloc(num_elem2, sizeof(int)); for (i = 1; i <= num_elem2; i++) { elem_map2[i - 1] = i; } error = ex_put_map(exoid2, elem_map2); printf("after ex_put_map (2), error = %d\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_block(exoid, EX_ELEM_BLOCK, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 0, 0, 1); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 0, 0, 1); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 0, 0, 1); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 0, 0, 1); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 0, 0, 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); 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; error = ex_put_block(exoid2, EX_ELEM_BLOCK, ebids2[0], "quad", num_elem_in_block2[0], num_nodes_per_elem2[0], 0, 0, 1); printf("after ex_put_elem_block (2), error = %d\n", error); error = ex_put_block(exoid2, EX_ELEM_BLOCK, ebids2[1], "quad", num_elem_in_block2[1], num_nodes_per_elem2[1], 0, 0, 1); printf("after ex_put_elem_blocki (2), error = %d\n", error); error = ex_put_block(exoid2, EX_ELEM_BLOCK, ebids2[2], "hex", num_elem_in_block2[2], num_nodes_per_elem2[2], 0, 0, 1); printf("after ex_put_elem_blocki (2), error = %d\n", error); error = ex_put_block(exoid2, EX_ELEM_BLOCK, ebids2[3], "tetra", num_elem_in_block2[3], num_nodes_per_elem2[3], 0, 0, 1); printf("after ex_put_elem_block (2), error = %d\n", error); error = ex_put_block(exoid2, EX_ELEM_BLOCK, ebids2[4], "wedge", num_elem_in_block2[4], num_nodes_per_elem2[4], 0, 0, 1); printf("after ex_put_elem_block (2), error = %d\n", error); /* write element block properties for file 2 */ prop_names[0] = "MATL"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoid2, EX_ELEM_BLOCK, 2, prop_names); printf("after ex_put_prop_names (2), error = %d\n", error); error = ex_put_prop(exoid2, EX_ELEM_BLOCK, ebids[0], "MATL", 100); printf("after ex_put_prop (2), error = %d\n", error); error = ex_put_prop(exoid2, EX_ELEM_BLOCK, ebids[1], "MATL", 200); printf("after ex_put_prop (2), error = %d\n", error); error = ex_put_prop(exoid2, EX_ELEM_BLOCK, ebids[2], "MATL", 300); printf("after ex_put_prop (2), error = %d\n", error); error = ex_put_prop(exoid2, EX_ELEM_BLOCK, ebids[3], "MATL", 400); printf("after ex_put_prop (2), error = %d\n", error); error = ex_put_prop(exoid2, EX_ELEM_BLOCK, ebids[4], "MATL", 500); printf("after ex_put_prop (2), 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_conn(exoid, EX_ELEM_BLOCK, ebids[0], connect, NULL, NULL); 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_conn(exoid, EX_ELEM_BLOCK, ebids[1], connect, NULL, NULL); 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_conn(exoid, EX_ELEM_BLOCK, ebids[2], connect, NULL, NULL); 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_conn(exoid, EX_ELEM_BLOCK, ebids[3], connect, NULL, NULL); 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_conn(exoid, EX_ELEM_BLOCK, ebids[4], connect, NULL, NULL); printf("after ex_put_elem_conn, error = %d\n", error); free(connect); connect2 = (int *)calloc(8, sizeof(int)); connect2[0] = 1; connect2[1] = 2; connect2[2] = 3; connect2[3] = 4; error = ex_put_conn(exoid2, EX_ELEM_BLOCK, ebids2[0], connect2, NULL, NULL); printf("after ex_put_elem_conn (2), error = %d\n", error); connect2[0] = 5; connect2[1] = 6; connect2[2] = 7; connect2[3] = 8; error = ex_put_conn(exoid2, EX_ELEM_BLOCK, ebids2[1], connect2, NULL, NULL); printf("after ex_put_elem_conn (2), error = %d\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_conn(exoid2, EX_ELEM_BLOCK, ebids2[2], connect2, NULL, NULL); printf("after ex_put_elem_conn (2), error = %d\n", error); connect2[0] = 17; connect2[1] = 18; connect2[2] = 19; connect2[3] = 20; error = ex_put_conn(exoid2, EX_ELEM_BLOCK, ebids2[3], connect2, NULL, NULL); printf("after ex_put_elem_conn (2), error = %d\n", error); connect2[0] = 21; connect2[1] = 22; connect2[2] = 23; connect2[3] = 24; connect2[4] = 25; connect2[5] = 26; error = ex_put_conn(exoid2, EX_ELEM_BLOCK, ebids2[4], connect2, NULL, NULL); printf("after ex_put_elem_conn (2), error = %d\n", error); free(connect2); /* write element block attributes */ attrib[0] = 3.14159; error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[0], attrib); printf("after ex_put_elem_attr, error = %d\n", error); attrib[0] = 6.14159; error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[1], attrib); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[2], attrib); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[3], attrib); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[4], attrib); printf("after ex_put_elem_attr, error = %d\n", error); attrib2[0] = 3.; error = ex_put_attr(exoid2, EX_ELEM_BLOCK, ebids2[0], attrib2); printf("after ex_put_elem_attr (2), error = %d\n", error); attrib2[0] = 6.; error = ex_put_attr(exoid2, EX_ELEM_BLOCK, ebids2[1], attrib2); printf("after ex_put_elem_attr (2), error = %d\n", error); error = ex_put_attr(exoid2, EX_ELEM_BLOCK, ebids2[2], attrib2); printf("after ex_put_elem_attr (2), error = %d\n", error); error = ex_put_attr(exoid2, EX_ELEM_BLOCK, ebids2[3], attrib2); printf("after ex_put_elem_attr (2), error = %d\n", error); error = ex_put_attr(exoid2, EX_ELEM_BLOCK, ebids2[4], attrib2); printf("after ex_put_elem_attr (2), error = %d\n", error); /* write individual node sets */ error = ex_put_set_param(exoid, EX_NODE_SET, 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_set(exoid, EX_NODE_SET, 20, node_list, NULL); printf("after ex_put_node_set, error = %d\n", error); error = ex_put_set_dist_fact(exoid, EX_NODE_SET, 20, dist_fact); printf("after ex_put_node_set, error = %d\n", error); error = ex_put_set_param(exoid, EX_NODE_SET, 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_set(exoid, EX_NODE_SET, 21, node_list, NULL); printf("after ex_put_node_set, error = %d\n", error); error = ex_put_set_dist_fact(exoid, EX_NODE_SET, 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 */ error = ex_put_set_param(exoid2, EX_NODE_SET, 20, 5, 5); printf("after ex_put_node_set_param (2), error = %d\n", error); node_list2[0] = 10; node_list2[1] = 11; node_list2[2] = 12; node_list2[3] = 13; node_list2[4] = 14; 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_set(exoid2, EX_NODE_SET, 20, node_list2, NULL); printf("after ex_put_node_set (2), error = %d\n", error); error = ex_put_set_dist_fact(exoid2, EX_NODE_SET, 20, dist_fact2); printf("after ex_put_node_set (2), error = %d\n", error); error = ex_put_set_param(exoid2, EX_NODE_SET, 21, 3, 3); printf("after ex_put_node_set_param (2), error = %d\n", error); node_list2[0] = 20; node_list2[1] = 21; node_list2[2] = 22; dist_fact2[0] = 1.1; dist_fact2[1] = 2.1; dist_fact2[2] = 3.1; error = ex_put_set(exoid2, EX_NODE_SET, 21, node_list2, NULL); printf("after ex_put_node_set (2), error = %d\n", error); error = ex_put_set_dist_fact(exoid2, EX_NODE_SET, 21, dist_fact2); printf("after ex_put_node_set (2), error = %d\n", error); error = ex_put_prop(exoid2, EX_NODE_SET, 20, "FACE", 4); printf("after ex_put_prop (2), error = %d\n", error); error = ex_put_prop(exoid2, EX_NODE_SET, 21, "FACE", 5); printf("after ex_put_prop (2), error = %d\n", error); prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid2, EX_NODE_SET, "VELOCITY", prop_array); printf("after ex_put_prop (2), error = %d\n", error); /* write individual side sets */ error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 30, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); error = ex_put_set_dist_fact(exoid, EX_SIDE_SET, 30, dist_fact); printf("after ex_put_side_set_dist_fact, error = %d\n", error); error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 31, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); error = ex_put_set_dist_fact(exoid, EX_SIDE_SET, 31, dist_fact); printf("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #3 - hex */ error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 32, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); /* side set #4 - tetras */ error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 33, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); /* side set #5 - wedges */ error = ex_put_set_param(exoid, EX_SIDE_SET, 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_set(exoid, EX_SIDE_SET, 34, elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); /* file 2 */ error = ex_put_set_param(exoid2, EX_SIDE_SET, 30, 2, 4); printf("after ex_put_side_set_param (2), error = %d\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_set(exoid2, EX_SIDE_SET, 30, elem_list2, side_list2); printf("after ex_put_side_set (2), error = %d\n", error); error = ex_put_set_dist_fact(exoid2, EX_SIDE_SET, 30, dist_fact2); printf("after ex_put_side_set_dist_fact (2), error = %d\n", error); error = ex_put_set_param(exoid2, EX_SIDE_SET, 31, 2, 4); printf("after ex_put_side_set_param (2), error = %d\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_set(exoid2, EX_SIDE_SET, 31, elem_list2, side_list2); printf("after ex_put_side_set (2), error = %d\n", error); error = ex_put_set_dist_fact(exoid2, EX_SIDE_SET, 31, dist_fact2); printf("after ex_put_side_set_dist_fact (2), error = %d\n", error); /* side set #3 - hex */ error = ex_put_set_param(exoid2, EX_SIDE_SET, 32, 7, 0); printf("after ex_put_side_set_param (2), error = %d\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_set(exoid2, EX_SIDE_SET, 32, elem_list2, side_list2); printf("after ex_put_side_set (2), error = %d\n", error); /* side set #4 - tetras */ error = ex_put_set_param(exoid2, EX_SIDE_SET, 33, 4, 0); printf("after ex_put_side_set_param (2), error = %d\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_set(exoid2, EX_SIDE_SET, 33, elem_list2, side_list2); printf("after ex_put_side_set (2), error = %d\n", error); /* side set #5 - wedges */ error = ex_put_set_param(exoid2, EX_SIDE_SET, 34, 5, 0); printf("after ex_put_side_set_param (2), error = %d\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_set(exoid2, EX_SIDE_SET, 34, elem_list2, side_list2); printf("after ex_put_side_set (2), 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); error = ex_put_prop(exoid2, EX_SIDE_SET, 30, "COLOR", 100); printf("after ex_put_prop (2), error = %d\n", error); error = ex_put_prop(exoid2, EX_SIDE_SET, 31, "COLOR", 101); printf("after ex_put_prop (2), error = %d\n", error); /* write QA records */ num_qa_rec = 2; qa_record[0][0] = "TESTWT2"; qa_record[0][1] = "testwt2"; 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] = "TESTWT2"; qa_record2[0][1] = "testwt2"; 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"; error = ex_put_qa(exoid2, num_qa_rec2, qa_record2); printf("after ex_put_qa (2), 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); 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."; error = ex_put_info(exoid2, num_info2, info2); printf("after ex_put_info (2), error = %d\n", error); /* write results variables parameters and names */ num_glo_vars = 1; var_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); error = ex_put_variable_names(exoid, EX_GLOBAL, num_glo_vars, var_names); printf("after ex_put_variable_names, error = %d\n", error); num_glo_vars2 = 1; var_names2[0] = "glo_vars"; error = ex_put_variable_param(exoid2, EX_GLOBAL, num_glo_vars2); printf("after ex_put_variable_param (2), error = %d\n", error); error = ex_put_variable_names(exoid2, EX_GLOBAL, num_glo_vars2, var_names2); printf("after ex_put_variable_names (2), error = %d\n", error); num_nod_vars = 2; var_names[0] = "nod_var0"; var_names[1] = "nod_var1"; error = ex_put_variable_param(exoid, EX_NODAL, num_nod_vars); printf("after ex_put_variable_param, error = %d\n", error); error = ex_put_variable_names(exoid, EX_NODAL, num_nod_vars, var_names); printf("after ex_put_variable_names, error = %d\n", error); num_nod_vars2 = 2; var_names2[0] = "nod_var0"; var_names2[1] = "nod_var1"; error = ex_put_variable_param(exoid2, EX_NODAL, num_nod_vars2); printf("after ex_put_variable_param (2), error = %d\n", error); error = ex_put_variable_names(exoid2, EX_NODAL, num_nod_vars2, var_names2); printf("after ex_put_variable_names (2), 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_variable_param(exoid, EX_ELEM_BLOCK, num_ele_vars); printf("after ex_put_variable_param, error = %d\n", error); error = ex_put_variable_names(exoid, EX_ELEM_BLOCK, num_ele_vars, var_names); printf("after ex_put_variable_names, error = %d\n", error); num_ele_vars2 = 3; var_names2[0] = "ele_var20"; var_names2[1] = "ele_var21"; var_names2[2] = "ele_var22"; error = ex_put_variable_param(exoid2, EX_ELEM_BLOCK, num_ele_vars2); printf("after ex_put_variable_param (2), error = %d\n", error); error = ex_put_variable_names(exoid2, EX_ELEM_BLOCK, num_ele_vars, var_names); printf("after ex_put_variable_names (2), 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_truth_table(exoid, EX_ELEM_BLOCK, num_elem_blk, num_ele_vars, truth_tab); printf("after ex_put_elem_var_tab, error = %d\n", error); error = ex_put_truth_table(exoid2, EX_ELEM_BLOCK, num_elem_blk, num_ele_vars, truth_tab); printf("after ex_put_elem_var_tab (2), error = %d\n", error); free(truth_tab); /* for each time step, write the analysis results; * the code below fills the arrays hist_var_vals, 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 to regular file */ error = ex_put_time(exoid, whole_time_step, &time_value); printf("after ex_put_time, error = %d\n", error); error = ex_put_time(exoid2, whole_time_step, &time_value2); printf("after ex_put_time (2), 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_var(exoid, whole_time_step, EX_GLOBAL, 1, 1, num_glo_vars, glob_var_vals); printf("after ex_put_glob_vars, error = %d\n", error); error = ex_put_var(exoid2, whole_time_step, EX_GLOBAL, 1, 1, num_glo_vars, glob_var_vals); printf("after ex_put_glob_vars (2), 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_var(exoid, whole_time_step, EX_NODAL, k, 1, num_nodes, nodal_var_vals); printf("after ex_put_nodal_var, error = %d\n", error); error = ex_put_var(exoid2, whole_time_step, EX_NODAL, k, 1, num_nodes, nodal_var_vals); printf("after ex_put_nodal_var (2), 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_var(exoid, whole_time_step, EX_ELEM_BLOCK, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf("after ex_put_elem_var, error = %d\n", error); error = ex_put_var(exoid2, whole_time_step, EX_ELEM_BLOCK, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf("after ex_put_elem_var (2), 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); error = ex_update(exoid2); printf("after ex_update (2), 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); error = ex_close(exoid2); printf("after ex_close (2), error = %d\n", error); return 0; }
int main (int argc, char *argv[]){ char **str2,*line,*curr; const char* ext=".exo"; int i,j,k,n,n1,cpu_word_size,io_word_size,exo_file, num_axes,num_nodes,num_elements,num_blocks, num_side_sets,num_node_sets,num_time_steps, num_global_vars, num_nodal_vars,num_element_vars,*ids,*iscr, *nsssides,*nssdfac,*elem_list,*side_list, *nnsnodes,*nnsdfac,*node_list; double *scr,*x,*y,*z, *escr; char * blknames = NULL; int *num_elem_in_block = NULL; /* QA Info */ printf("%s: %s, %s\n", qainfo[0], qainfo[2], qainfo[1]); /* usage message*/ if(argc != 2){ printf("%s matlab_file_name.\n",argv[0]); printf(" the matlab_file_name is required\n"); printf("%d", argc); exit(1); } /*open input file*/ mat_file = Mat_Open(argv[1], MAT_ACC_RDONLY); if (mat_file == NULL) { printf("Error opening matlab file %s\n", argv[1]); return(1); } /*open output file*/ cpu_word_size=sizeof(double); io_word_size=sizeof(double); /* QA records */ ext=".exo"; line = (char *) calloc (2049,sizeof(char)); strcpy(line,argv[1]); strtok(line,"."); strcat(line,ext); exo_file = ex_create(line,EX_CLOBBER,&cpu_word_size,&io_word_size); if (exo_file < 0){ printf("error creating %s\n",line); exit(1); } /* print */ fprintf(stderr,"translating %s to %s ... ",argv[1],line); /* read database parameters */ matGetInt("naxes", 1, 1,&num_axes); matGetInt("nnodes", 1, 1,&num_nodes); matGetInt("nelems", 1, 1,&num_elements); matGetInt("nblks", 1, 1,&num_blocks); matGetInt("nnsets", 1, 1,&num_node_sets); matGetInt("nssets", 1, 1,&num_side_sets); matGetInt("nsteps", 1, 1,&num_time_steps); matGetInt("ngvars", 1, 1,&num_global_vars); matGetInt("nnvars", 1, 1,&num_nodal_vars); matGetInt("nevars", 1, 1,&num_element_vars); /*export parameters */ ex_put_init(exo_file,line, num_axes,num_nodes,num_elements,num_blocks, num_node_sets,num_side_sets); free(line); if ( num_global_vars > 0 ){ ex_put_variable_param(exo_file,EX_GLOBAL,num_global_vars); } if ( num_nodal_vars > 0 ){ ex_put_variable_param(exo_file,EX_NODAL,num_nodal_vars); } if ( num_element_vars > 0 ){ ex_put_variable_param(exo_file,EX_ELEM_BLOCK,num_element_vars); } /* nodal coordinates */ x = (double *) calloc(num_nodes,sizeof(double)); y = (double *) calloc(num_nodes,sizeof(double)); if (num_axes == 3) z = (double *) calloc(num_nodes,sizeof(double)); else z = NULL; matGetDbl("x0", num_nodes, 1, x); matGetDbl("y0", num_nodes, 1, y); if (num_axes == 3) matGetDbl("z0", num_nodes,1,z); ex_put_coord(exo_file,x,y,z); free(x); free(y); if (num_axes == 3){ free(z); } /* side sets (section by dgriffi) */ if(num_side_sets > 0){ /* ssids */ ids = (int *) calloc(num_side_sets,sizeof(int)); matGetInt("ssids",num_side_sets, 1,ids); /* nsssides */ nsssides = (int *) calloc(num_side_sets,sizeof(int)); matGetInt("nsssides",num_side_sets,1,nsssides); /* nssdfac */ nssdfac = (int *) calloc(num_side_sets,sizeof(int)); matGetInt("nssdfac",num_side_sets,1,nssdfac); for(i=0;i<num_side_sets;i++){ char name[32]; ex_put_set_param(exo_file,EX_SIDE_SET,ids[i],nsssides[i],nssdfac[i]); elem_list = (int *) calloc(nsssides[i],sizeof(int)); side_list = (int *) calloc(nsssides[i],sizeof(int)); escr = (double *) calloc(nssdfac[i],sizeof(double)); sprintf(name,"sselem%02d",i+1); matGetInt(name,nsssides[i],1,elem_list); sprintf(name,"ssside%02d",i+1); matGetInt(name,nsssides[i],1,side_list); ex_put_set(exo_file,EX_SIDE_SET,ids[i],elem_list,side_list); free(elem_list); free(side_list); sprintf(name,"ssfac%02d",i+1); matGetDbl(name,nssdfac[i],1,escr); ex_put_set_dist_fact(exo_file,EX_SIDE_SET,ids[i],escr); free(escr); } free(nsssides); free(nssdfac); free(ids); } /* node sets (section by dgriffi) */ if(num_node_sets > 0){ /* nsids */ ids = (int *) calloc(num_node_sets,sizeof(int)); matGetInt("nsids",num_node_sets, 1,ids); /* nnsnodes */ nnsnodes = (int *) calloc(num_node_sets,sizeof(int)); matGetInt("nnsnodes",num_node_sets,1,nnsnodes); /* nnsdfac */ nnsdfac = (int *) calloc(num_node_sets,sizeof(int)); matGetInt("nnsdfac",num_node_sets,1,nnsdfac); for(i=0;i<num_node_sets;i++){ char name[32]; ex_put_set_param(exo_file,EX_NODE_SET,ids[i],nnsnodes[i],nnsdfac[i]); node_list = (int *) calloc(nnsnodes[i],sizeof(int)); escr = (double *) calloc(nnsdfac[i],sizeof(double)); sprintf(name,"nsnod%02d",i+1); matGetInt(name,nnsnodes[i],1,node_list); ex_put_set(exo_file,EX_NODE_SET,ids[i],node_list,NULL); free(node_list); sprintf(name,"nsfac%02d",i+1); matGetDbl(name,nnsdfac[i],1,escr); ex_put_set_dist_fact(exo_file,EX_NODE_SET,ids[i],escr); free(escr); } free(nnsdfac); free(nnsnodes); free(ids); } /* element blocks */ /* get elem block ids */ ids = (int *) calloc(num_blocks,sizeof(int)); matGetInt("blkids",num_blocks,1,ids); /* get elem block types */ blknames = (char *) calloc(num_blocks*(MAX_STR_LENGTH+1),sizeof(char)); matGetStr("blknames",blknames); num_elem_in_block = (int *) calloc(num_blocks,sizeof(int)); curr = blknames; curr = strtok(curr,"\n"); for(i=0;i<num_blocks;i++){ char name[32]; sprintf(name,"blk%02d",i+1); n1 = matArrNRow(name); n = matArrNCol(name); iscr = (int *) calloc(n*n1,sizeof(int)); matGetInt(name,n1,n,iscr); num_elem_in_block[i]=n; ex_put_elem_block(exo_file,ids[i],curr,n,n1,0); ex_put_conn(exo_file,EX_ELEM_BLOCK,ids[i],iscr,NULL,NULL); free(iscr); curr = strtok(NULL, "\n"); } free(blknames); /* time values */ if (num_time_steps > 0 ) { scr = (double *) calloc(num_time_steps,sizeof(double)); matGetDbl( "time", num_time_steps, 1,scr); for (i=0;i<num_time_steps;i++){ ex_put_time(exo_file,i+1,&scr[i]); } free(scr); } /* global variables */ if (num_global_vars > 0 ){ int max_name_length = ex_inquire_int(exo_file, EX_INQ_DB_MAX_USED_NAME_LENGTH); char *str = (char *) calloc(num_global_vars * (max_name_length+1), sizeof(char)); matGetStr("gnames",str); str2 = (char **) calloc(num_global_vars,sizeof(char*)); curr = strtok(str,"\n"); for(i=0;i<num_global_vars;i++){ str2[i]=curr; curr = strtok(NULL,"\n"); } ex_put_variable_names(exo_file, EX_GLOBAL, num_global_vars, str2); free(str); free(str2); { double * global_var_vals; double * temp; global_var_vals = (double *) calloc(num_global_vars*num_time_steps,sizeof(double)); temp = (double *) calloc(num_time_steps,sizeof(double)); for (j=0;j<num_global_vars;j++) { char name[32]; sprintf(name,"gvar%02d",j+1); matGetDbl(name,num_time_steps,1,temp); for (i=0; i < num_time_steps; i++) { global_var_vals[num_global_vars*i+j]=temp[i]; } } for (i=0; i<num_time_steps; i++) { size_t offset = num_global_vars * i; ex_put_var(exo_file,i+1,EX_GLOBAL,1,0,num_global_vars,&global_var_vals[offset]); } free(temp); free(global_var_vals); } } /* nodal variables */ /* section by dtg */ if (num_nodal_vars > 0){ int max_name_length = ex_inquire_int(exo_file, EX_INQ_DB_MAX_USED_NAME_LENGTH); char *str = (char *) calloc(num_nodal_vars * (max_name_length+1), sizeof(char)); matGetStr("nnames",str); str2 = (char **) calloc(num_nodal_vars,sizeof(char*)); curr = strtok(str,"\n"); for(i=0;i<num_nodal_vars;i++){ str2[i]=curr; curr = strtok(NULL,"\n"); } ex_put_variable_names(exo_file, EX_NODAL, num_nodal_vars, str2); free(str); free(str2); { double * nodal_var_vals; for (i=0;i<num_nodal_vars;i++) { char name[32]; nodal_var_vals = (double *) calloc(num_nodes*num_time_steps,sizeof(double)); sprintf(name,"nvar%02d",i+1); matGetDbl(name,num_nodes,num_time_steps,nodal_var_vals); for (j=0;j<num_time_steps;j++) { ex_put_var(exo_file,j+1,EX_NODAL,i+1,num_nodes,1,nodal_var_vals+num_nodes*j); } free(nodal_var_vals); } } } /* elemental variables */ /* section by dtg */ if (num_element_vars > 0){ int max_name_length = ex_inquire_int(exo_file, EX_INQ_DB_MAX_USED_NAME_LENGTH); char *str = (char *) calloc(num_element_vars * (max_name_length+1), sizeof(char)); matGetStr("enames",str); str2 = (char **) calloc(num_element_vars,sizeof(char*)); curr = strtok(str,"\n"); for(i=0;i<num_element_vars;i++){ str2[i]=curr; curr = strtok(NULL,"\n"); } ex_put_variable_names(exo_file, EX_ELEM_BLOCK, num_element_vars, str2); free(str); free(str2); { double * element_var_vals; for (i=0;i<num_element_vars;i++) { char name[32]; element_var_vals = (double *) calloc(num_elements*num_time_steps,sizeof(double)); sprintf(name,"evar%02d",i+1); matGetDbl(name,num_elements,num_time_steps,element_var_vals); n=0; for (j=0;j<num_time_steps;j++) { for (k=0;k<num_blocks;k++) { ex_put_var(exo_file,j+1,EX_ELEM_BLOCK, i+1,ids[k],num_elem_in_block[k],element_var_vals+n); n=n+num_elem_in_block[k]; } } free(element_var_vals); } } } free(ids); /* node and element number maps */ ids = (int *) calloc (num_nodes,sizeof(int)); if ( !matGetInt("node_num_map",num_nodes,1,ids)){ ex_put_node_num_map(exo_file,ids); } free(ids); ids = (int *) calloc (num_elements,sizeof(int)); if ( !matGetInt("elem_num_map",num_elements,1,ids)){ ex_put_elem_num_map(exo_file,ids); } free(ids); free(num_elem_in_block); /* close exo file */ ex_close(exo_file); /* close mat file */ Mat_Close(mat_file); /* */ fprintf(stderr,"done.\n"); /* exit status */ add_to_log("mat2exo", 0); return(0); }