int main (int argc, char **argv) { int exoid, exoid1, error, idum; int CPU_word_size,IO_word_size; float version; char *cdum = 0; ex_opts(EX_VERBOSE | EX_ABORT); /* open EXODUS II files */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 0; /* use size in file */ exoid = ex_open ("test.exo", /* filename path */ EX_READ, /* access mode = READ */ &CPU_word_size, /* CPU word size */ &IO_word_size, /* IO word size */ &version); /* ExodusII library version */ printf ("\nafter ex_open\n"); if (exoid < 0) exit(1); printf ("test.exo is an EXODUSII file; version %4.2f\n", version); printf (" CPU word size %1d\n",CPU_word_size); printf (" I/O word size %1d\n",IO_word_size); ex_inquire(exoid,EX_INQ_API_VERS, &idum, &version, cdum); printf ("EXODUSII API; version %4.2f\n", version); CPU_word_size = 8; /* this really shouldn't matter for the copy but tests the conversion routines */ IO_word_size = 4; exoid1 = ex_create ("testcp.exo", /* filename */ EX_CLOBBER|EX_NORMAL_MODEL, /* OK to overwrite, normal */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("\nafter ex_create, exoid = %3d\n",exoid1); if (exoid1 < 0) exit(1); printf (" CPU word size %1d\n",CPU_word_size); printf (" I/O word size %1d\n",IO_word_size); /* ncopts = NC_VERBOSE; */ error = ex_copy (exoid, exoid1); printf ("\nafter ex_copy, error = %3d\n", error); error = ex_close (exoid); printf ("\nafter ex_close, error = %3d\n", error); error = ex_close (exoid1); printf ("\nafter ex_close, error = %3d\n", error); return 0; }
inline int openFileAndGetId(const int numBoxes, const int num_element_blocks, const std::string &filename) { int CPU_word_size = sizeof(double); int IO_word_size = 8; int exoid = ex_create (filename.c_str(), EX_CLOBBER, &CPU_word_size, &IO_word_size); int num_dim = 3; int num_elements = numBoxes; int num_nodes_per_element = 8; int num_nodes = num_nodes_per_element*num_elements; int num_ns = 0, num_ss = 0; ex_put_init(exoid, "Boxes", num_dim, num_nodes, num_elements, num_element_blocks, num_ns, num_ss); return exoid; }
bool Excn::ExodusFile::create_output(const SystemInterface& si) // Create output file... { outputFilename_ = si.outputName_; int mode = EX_CLOBBER | exodusMode_; if (si.ints_64_bit()) mode |= EX_ALL_INT64_DB; std::cout << "Output: '" << outputFilename_ << "'" << std::endl; outputId_ = ex_create(outputFilename_.c_str(), mode, &cpuWordSize_, &ioWordSize_); if (outputId_ < 0) { std::cerr << "Cannot open file '" << outputFilename_ << "'" << std::endl; return false; } std::cout << "IO Word size is " << ioWordSize_ << " bytes.\n"; ex_set_max_name_length(outputId_, maximumNameLength_); return true; }
int main() { float version = 0.0; ex_opts(EX_VERBOSE | EX_ABORT); int CPU_word_size = 0; /* sizeof(float) */ int IO_word_size = 4; /* (4 bytes) */ /* ======================================== */ /* Create an empty exodus file */ /* ====================================== */ int exoid = ex_create("test.exo", EX_CLOBBER, &CPU_word_size, &IO_word_size); ex_close(exoid); /* ======================================== */ /* Now try to open and read the empty file */ /* ====================================== */ exoid = ex_open("test.exo", /* filename path */ EX_READ, /* access mode = READ */ &CPU_word_size, /* CPU word size */ &IO_word_size, /* IO word size */ &version); /* ExodusII library version */ printf("test.exo exoid = %d\n", exoid); { char title[MAX_LINE_LENGTH + 1]; int num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets; int error = ex_get_init(exoid, title, &num_dim, &num_nodes, &num_elem, &num_elem_blk, &num_node_sets, &num_side_sets); printf("after ex_get_init, error = %3d\n", error); if (error) exit(-1); else exit(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 main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10]; int num_node_sets, num_side_sets, error; int i, j, *elem_map; int ebids[10]; int num_qa_rec, num_info; int num_glo_vars; int whole_time_step, num_time_steps; int CPU_word_size,IO_word_size; float *glob_var_vals, *nodal_var_vals, *elem_var_vals; float time_value; float x[100], y[100], z[100]; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[3]; ex_opts (EX_VERBOSE | EX_ABORT ); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); /* ncopts = NC_VERBOSE; */ /* initialize file with parameters */ num_dim = 3; num_nodes = 0; num_elem = 0; num_elem_blk = 7; num_node_sets = 0; num_side_sets = 0; error = ex_put_init (exoid, "This is a test", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal varcoordinates values and names to database */ /* Quad #1 */ x[0] = 0.0; y[0] = 0.0; z[0] = 0.0; x[1] = 1.0; y[1] = 0.0; z[1] = 0.0; x[2] = 1.0; y[2] = 1.0; z[2] = 0.0; x[3] = 0.0; y[3] = 1.0; z[3] = 0.0; /* Quad #2 */ x[4] = 1.0; y[4] = 0.0; z[4] = 0.0; x[5] = 2.0; y[5] = 0.0; z[5] = 0.0; x[6] = 2.0; y[6] = 1.0; z[6] = 0.0; x[7] = 1.0; y[7] = 1.0; z[7] = 0.0; /* Hex #1 */ x[8] = 0.0; y[8] = 0.0; z[8] = 0.0; x[9] = 10.0; y[9] = 0.0; z[9] = 0.0; x[10] = 10.0; y[10] = 0.0; z[10] =-10.0; x[11] = 1.0; y[11] = 0.0; z[11] =-10.0; x[12] = 1.0; y[12] = 10.0; z[12] = 0.0; x[13] = 10.0; y[13] = 10.0; z[13] = 0.0; x[14] = 10.0; y[14] = 10.0; z[14] =-10.0; x[15] = 1.0; y[15] = 10.0; z[15] =-10.0; /* Tetra #1 */ x[16] = 0.0; y[16] = 0.0; z[16] = 0.0; x[17] = 1.0; y[17] = 0.0; z[17] = 5.0; x[18] = 10.0; y[18] = 0.0; z[18] = 2.0; x[19] = 7.0; y[19] = 5.0; z[19] = 3.0; /* Wedge #1 */ x[20] = 3.0; y[20] = 0.0; z[20] = 6.0; x[21] = 6.0; y[21] = 0.0; z[21] = 0.0; x[22] = 0.0; y[22] = 0.0; z[22] = 0.0; x[23] = 3.0; y[23] = 2.0; z[23] = 6.0; x[24] = 6.0; y[24] = 2.0; z[24] = 2.0; x[25] = 0.0; y[25] = 2.0; z[25] = 0.0; /* Tetra #2 */ x[26] = 2.7; y[26] = 1.7; z[26] = 2.7; x[27] = 6.0; y[27] = 1.7; z[27] = 3.3; x[28] = 5.7; y[28] = 1.7; z[28] = 1.7; x[29] = 3.7; y[29] = 0.0; z[29] = 2.3; /* 3d Tri */ x[30] = 0.0; y[30] = 0.0; z[30] = 0.0; x[31] = 10.0; y[31] = 0.0; z[31] = 0.0; x[32] = 10.0; y[32] = 10.0; z[32] = 10.0; /* error = ex_put_coord (exoid, x, y, z); */ printf ("after ex_put_coord, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = i; } error = ex_put_map (exoid, elem_map); printf ("after ex_put_map, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (elem_map); /* write element block parameters */ num_elem_in_block[0] = 0; num_elem_in_block[1] = 0; num_elem_in_block[2] = 0; num_elem_in_block[3] = 0; num_elem_in_block[4] = 0; num_elem_in_block[5] = 0; num_elem_in_block[6] = 0; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #4 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #5 are 6-node wedges */ num_nodes_per_elem[5] = 8; /* elements in block #6 are 8-node tetras */ num_nodes_per_elem[6] = 3; /* elements in block #7 are 3-node tris */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; ebids[5] = 15; ebids[6] = 16; error = ex_put_elem_block (exoid, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[5], "tetra", num_elem_in_block[5], num_nodes_per_elem[5], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[6], "tri", num_elem_in_block[6], num_nodes_per_elem[6], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write 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_var_param (exoid, "g", num_glo_vars); printf ("after ex_put_var_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_var_names (exoid, "g", num_glo_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, CPU_word_size); nodal_var_vals = (float *) calloc (num_nodes, CPU_word_size); elem_var_vals = (float *) calloc (4, CPU_word_size); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } 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); /* 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 num_elem_in_block[10], num_nodes_per_elem[10]; int num_node_sets, num_sides, num_side_sets, error; int i, j, k, m, *elem_map, *connect; int node_list[100],elem_list[100],side_list[100]; int ebids[10], ids[10]; int num_sides_per_set[10], num_nodes_per_set[10], num_elem_per_set[10]; int num_df_per_set[10]; int df_ind[10], node_ind[10], elem_ind[10], side_ind[10]; int num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_vars; int *truth_tab; int whole_time_step, num_time_steps; int ndims, nvars, ngatts, recdim; int CPU_word_size,IO_word_size; int prop_array[2]; float *glob_var_vals, *nodal_var_vals, *elem_var_vals; float time_value; float *x, *y, *z, *dummy; float attrib[1], dist_fact[100]; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[3]; char tmpstr[80]; char *prop_names[2]; ex_opts (EX_VERBOSE | EX_ABORT); dummy = 0; /* assign this so the Cray compiler doesn't complain */ /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); /* initialize file with parameters */ num_dim = 3; num_nodes = BIG; num_elem = BIG; num_elem_blk = 5; num_node_sets = 2; num_side_sets = 5; error = ex_put_init (exoid, "This is a test", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); /* write nodal coordinates values and names to database */ if (!(x = (float *) calloc(BIG, sizeof(float)))) { printf ("couldn't allocate memory for x node array%d\n"); exit(1); } if (!(y = (float *) calloc(BIG, sizeof(float)))) { printf ("couldn't allocate memory for y node array%d\n"); exit(1); } if (!(z = (float *) calloc(BIG, sizeof(float)))) { printf ("couldn't allocate memory for z node array%d\n"); exit(1); } for (i=0; i<num_nodes; i++) { /* dummy up the coordinate space */ x[i]=i; y[i]=i+.1; z[i]=i+.2; } error = ex_put_coord (exoid, x, y, z); printf ("after ex_put_coord, error = %d\n", error); coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = i; } error = ex_put_map (exoid, elem_map); printf ("after ex_put_map, error = %d\n", error); free (elem_map); /* write element block parameters */ num_elem_in_block[0] = 1; num_elem_in_block[1] = 1; num_elem_in_block[2] = 1; num_elem_in_block[3] = 1; num_elem_in_block[4] = 1; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #3 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #3 are 6-node wedges */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; error = ex_put_elem_block (exoid, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 1); printf ("after ex_put_elem_block, error = %d\n", error); error = ex_put_elem_block (exoid, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 1); printf ("after ex_put_elem_block, error = %d\n", error); /* write element block properties */ prop_names[0] = "MATL"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoid,EX_ELEM_BLOCK,2,prop_names); printf ("after ex_put_prop_names, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[0], "MATL", 10); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[1], "MATL", 20); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[2], "MATL", 30); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[3], "MATL", 40); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[4], "MATL", 50); printf ("after ex_put_prop, error = %d\n", error); /* write element connectivity */ connect = (int *) calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[0], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 5; connect[1] = 6; connect[2] = 7; connect[3] = 8; error = ex_put_elem_conn (exoid, ebids[1], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 9; connect[1] = 10; connect[2] = 11; connect[3] = 12; connect[4] = 13; connect[5] = 14; connect[6] = 15; connect[7] = 16; error = ex_put_elem_conn (exoid, ebids[2], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; error = ex_put_elem_conn (exoid, ebids[3], connect); printf ("after ex_put_elem_conn, error = %d\n", error); connect[0] = 21; connect[1] = 22; connect[2] = 23; connect[3] = 24; connect[4] = 25; connect[5] = 26; error = ex_put_elem_conn (exoid, ebids[4], connect); printf ("after ex_put_elem_conn, error = %d\n", error); free (connect); /* write element block attributes */ attrib[0] = 3.14159; error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); attrib[0] = 6.14159; error = ex_put_elem_attr (exoid, ebids[1], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[2], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[3], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); error = ex_put_elem_attr (exoid, ebids[4], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); /* write individual node sets */ error = ex_put_node_set_param (exoid, 20, 5, 5); printf ("after ex_put_node_set_param, error = %d\n", error); node_list[0] = 10; node_list[1] = 11; node_list[2] = 12; node_list[3] = 13; node_list[4] = 14; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; error = ex_put_node_set (exoid, 20, node_list); printf ("after ex_put_node_set, error = %d\n", error); error = ex_put_node_set_dist_fact (exoid, 20, dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); error = ex_put_node_set_param (exoid, 21, 3, 3); printf ("after ex_put_node_set_param, error = %d\n", error); node_list[0] = 20; node_list[1] = 21; node_list[2] = 22; dist_fact[0] = 1.1; dist_fact[1] = 2.1; dist_fact[2] = 3.1; error = ex_put_node_set (exoid, 21, node_list); printf ("after ex_put_node_set, error = %d\n", error); error = ex_put_node_set_dist_fact (exoid, 21, dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); /* write concatenated node sets; this produces the same information as * the above code which writes individual node sets */ /* THIS SECTION IS COMMENTED OUT ids[0] = 20; ids[1] = 21; num_nodes_per_set[0] = 5; num_nodes_per_set[1] = 3; node_ind[0] = 0; node_ind[1] = 5; node_list[0] = 10; node_list[1] = 11; node_list[2] = 12; node_list[3] = 13; node_list[4] = 14; node_list[5] = 20; node_list[6] = 21; node_list[7] = 22; num_df_per_set[0] = 5; num_df_per_set[1] = 3; df_ind[0] = 0; df_ind[1] = 5; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; dist_fact[5] = 1.1; dist_fact[6] = 2.1; dist_fact[7] = 3.1; error = ex_put_concat_node_sets (exoid, ids, num_nodes_per_set, num_df_per_set, node_ind, df_ind, node_list, dist_fact); printf ("after ex_put_concat_node_sets, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); END COMMENTED OUT SECTION */ /* write individual side sets */ /* side set #1 - quad */ error = ex_put_side_set_param (exoid, 30, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 2; elem_list[1] = 2; side_list[0] = 4; side_list[1] = 2; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; error = ex_put_side_set (exoid, 30, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); error = ex_put_side_set_dist_fact (exoid, 30, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #2 - quad, spanning 2 elements */ error = ex_put_side_set_param (exoid, 31, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 1; elem_list[1] = 2; side_list[0] = 2; side_list[1] = 3; dist_fact[0] = 31.0; dist_fact[1] = 31.1; dist_fact[2] = 31.2; dist_fact[3] = 31.3; error = ex_put_side_set (exoid, 31, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); error = ex_put_side_set_dist_fact (exoid, 31, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); /* side set #3 - hex */ error = ex_put_side_set_param (exoid, 32, 7, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 3; elem_list[1] = 3; elem_list[2] = 3; elem_list[3] = 3; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; side_list[0] = 5; side_list[1] = 3; side_list[2] = 3; side_list[3] = 2; side_list[4] = 4; side_list[5] = 1; side_list[6] = 6; error = ex_put_side_set (exoid, 32, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); /* side set #4 - tetras */ error = ex_put_side_set_param (exoid, 33, 4, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 4; elem_list[1] = 4; elem_list[2] = 4; elem_list[3] = 4; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; error = ex_put_side_set (exoid, 33, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); /* side set #5 - wedges */ error = ex_put_side_set_param (exoid, 34, 5, 0); printf ("after ex_put_side_set_param, error = %d\n", error); elem_list[0] = 5; elem_list[1] = 5; elem_list[2] = 5; elem_list[3] = 5; elem_list[4] = 5; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 5; error = ex_put_side_set (exoid, 34, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); /* END COMMENTED OUT SECTION */ /* write concatenated side sets; this produces the same information as * the above code which writes individual side sets */ /* THIS SECTION IS COMMENTED OUT ids[0] = 30; ids[1] = 31; ids[2] = 32; ids[3] = 33; ids[4] = 34; node_list[0] = 8; node_list[1] = 5; node_list[2] = 6; node_list[3] = 7; node_list[4] = 2; node_list[5] = 3; node_list[6] = 7; node_list[7] = 8; node_list[8] = 9; node_list[9] = 12; node_list[10] = 11; node_list[11] = 10; node_list[12] = 11; node_list[13] = 12; node_list[14] = 16; node_list[15] = 15; node_list[16] = 16; node_list[17] = 15; node_list[18] = 11; node_list[19] = 12; node_list[20] = 10; node_list[21] = 11; node_list[22] = 15; node_list[23] = 14; node_list[24] = 13; node_list[25] = 16; node_list[26] = 12; node_list[27] = 9; node_list[28] = 14; node_list[29] = 13; node_list[30] = 9; node_list[31] = 10; node_list[32] = 16; node_list[33] = 13; node_list[34] = 14; node_list[35] = 15; node_list[36] = 17; node_list[37] = 18; node_list[38] = 20; node_list[39] = 18; node_list[40] = 19; node_list[41] = 20; node_list[42] = 20; node_list[43] = 19; node_list[44] = 17; node_list[45] = 19; node_list[46] = 18; node_list[47] = 17; node_list[48] = 25; node_list[49] = 24; node_list[50] = 21; node_list[51] = 22; node_list[52] = 26; node_list[53] = 25; node_list[54] = 22; node_list[55] = 23; node_list[56] = 26; node_list[57] = 23; node_list[58] = 21; node_list[59] = 24; node_list[60] = 23; node_list[61] = 22; node_list[62] = 21; node_list[63] = 24; node_list[64] = 25; node_list[65] = 26; node_ind[0] = 0; node_ind[1] = 4; node_ind[2] = 8; node_ind[3] = 36; node_ind[4] = 47; num_elem_per_set[0] = 2; num_elem_per_set[1] = 2; num_elem_per_set[2] = 7; num_elem_per_set[3] = 4; num_elem_per_set[4] = 5; num_nodes_per_set[0] = 4; num_nodes_per_set[1] = 4; num_nodes_per_set[2] = 28; num_nodes_per_set[3] = 12; num_nodes_per_set[4] = 18; elem_ind[0] = 0; elem_ind[1] = 2; elem_ind[2] = 4; elem_ind[3] = 11; elem_ind[4] = 15; elem_list[0] = 2; elem_list[1] = 2; elem_list[2] = 1; elem_list[3] = 2; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; elem_list[7] = 3; elem_list[8] = 3; elem_list[9] = 3; elem_list[10] = 3; elem_list[11] = 4; elem_list[12] = 4; elem_list[13] = 4; elem_list[14] = 4; elem_list[15] = 5; elem_list[16] = 5; elem_list[17] = 5; elem_list[18] = 5; elem_list[19] = 5; error = ex_cvt_nodes_to_sides(exoid, num_elem_per_set, num_nodes_per_set, elem_ind, node_ind, elem_list, node_list, side_list); printf ("after ex_cvt_nodes_to_sides, error = %d\n", error); num_df_per_set[0] = 4; num_df_per_set[1] = 4; num_df_per_set[2] = 0; num_df_per_set[3] = 0; num_df_per_set[4] = 0; df_ind[0] = 0; df_ind[1] = 4; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; dist_fact[4] = 31.0; dist_fact[5] = 31.1; dist_fact[6] = 31.2; dist_fact[7] = 31.3; error = ex_put_concat_side_sets (exoid, ids, num_elem_per_set, num_df_per_set, elem_ind, df_ind, elem_list, side_list, dist_fact); printf ("after ex_put_concat_side_sets, error = %d\n", error); /* END COMMENTED OUT SECTION */ error = ex_put_prop(exoid, EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop, error = %d\n", error); /* write QA records */ num_qa_rec = 2; qa_record[0][0] = "TESTWT"; qa_record[0][1] = "testwt"; qa_record[0][2] = "07/07/93"; qa_record[0][3] = "15:41:33"; qa_record[1][0] = "FASTQ"; qa_record[1][1] = "fastq"; qa_record[1][2] = "07/07/93"; qa_record[1][3] = "16:41:33"; error = ex_put_qa (exoid, num_qa_rec, qa_record); printf ("after ex_put_qa, error = %d\n", error); /* write information records */ num_info = 3; info[0] = "This is the first information record."; info[1] = "This is the second information record."; info[2] = "This is the third information record."; error = ex_put_info (exoid, num_info, info); printf ("after ex_put_info, error = %d\n", error); /* write results variables parameters and names */ num_glo_vars = 1; var_names[0] = "glo_vars"; error = ex_put_var_param (exoid, "g", num_glo_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "g", num_glo_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); num_nod_vars = 2; var_names[0] = "nod_var0"; var_names[1] = "nod_var1"; error = ex_put_var_param (exoid, "n", num_nod_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "n", num_nod_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); num_ele_vars = 3; var_names[0] = "ele_var0"; var_names[1] = "ele_var1"; var_names[2] = "ele_var2"; error = ex_put_var_param (exoid, "e", num_ele_vars); printf ("after ex_put_var_param, error = %d\n", error); error = ex_put_var_names (exoid, "e", num_ele_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); /* write element variable truth table */ truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int)); k = 0; for (i=0; i<num_elem_blk; i++) { for (j=0; j<num_ele_vars; j++) { truth_tab[k++] = 1; } } error = ex_put_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab); printf ("after ex_put_elem_var_tab, error = %d\n", error); free (truth_tab); /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, CPU_word_size); nodal_var_vals = (float *) calloc (num_nodes, CPU_word_size); elem_var_vals = (float *) calloc (4, CPU_word_size); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); /* write nodal variables */ for (k=1; k<=num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nodal_var_vals[j] = (float)k + ((float)(j+1) * time_value); } error = ex_put_nodal_var (exoid, whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var, error = %d\n", error); } /* write element variables */ for (k=1; k<=num_ele_vars; k++) { for (j=0; j<num_elem_blk; j++) { for (m=0; m<num_elem_in_block[j]; m++) { elem_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); /* printf("elem_var_vals[%d]: %f\n",m,elem_var_vals[m]); */ } error = ex_put_elem_var (exoid, whole_time_step, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf ("after ex_put_elem_var, error = %d\n", error); } } whole_time_step++; /* update the data file; this should be done at the end of every time step * to ensure that no data is lost if the analysis dies */ error = ex_update (exoid); printf ("after ex_update, error = %d\n", error); } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); /* close the EXODUS files */ error = ex_close (exoid); printf ("after ex_close, error = %d\n", error); return 0; }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10]; int num_face_in_sset[10], num_nodes_in_nset[10]; int num_node_sets, num_side_sets, error; int i, j, k, m, *elem_map, *connect; int node_list[100],elem_list[100],side_list[100]; int ebids[10], ssids[10], nsids[10]; int num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_vars, num_sset_vars, num_nset_vars; int *truth_tab; int whole_time_step, num_time_steps; int CPU_word_size,IO_word_size; int prop_array[2]; float *glob_var_vals, *nodal_var_vals, *elem_var_vals; float *sset_var_vals, *nset_var_vals; float time_value; float x[100], y[100], z[100]; float attrib[1], dist_fact[100]; char *coord_names[3], *qa_record[2][4], *info[3], *variable_names[3]; char *block_names[10], *nset_names[10], *sset_names[10]; char *prop_names[2], *attrib_names[2]; char *title = "This is a test"; ex_opts (EX_VERBOSE | EX_ABORT ); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); ex_set_option(exoid, EX_OPT_MAX_NAME_LENGTH, 127); /* Using long names */ /* initialize file with parameters */ num_dim = 3; num_nodes = 33; num_elem = 7; num_elem_blk = 7; num_node_sets = 2; num_side_sets = 5; error = ex_put_init (exoid, title, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal coordinates values and names to database */ /* Quad #1 */ x[0] = 0.0; y[0] = 0.0; z[0] = 0.0; x[1] = 1.0; y[1] = 0.0; z[1] = 0.0; x[2] = 1.0; y[2] = 1.0; z[2] = 0.0; x[3] = 0.0; y[3] = 1.0; z[3] = 0.0; /* Quad #2 */ x[4] = 1.0; y[4] = 0.0; z[4] = 0.0; x[5] = 2.0; y[5] = 0.0; z[5] = 0.0; x[6] = 2.0; y[6] = 1.0; z[6] = 0.0; x[7] = 1.0; y[7] = 1.0; z[7] = 0.0; /* Hex #1 */ x[8] = 0.0; y[8] = 0.0; z[8] = 0.0; x[9] = 10.0; y[9] = 0.0; z[9] = 0.0; x[10] = 10.0; y[10] = 0.0; z[10] =-10.0; x[11] = 1.0; y[11] = 0.0; z[11] =-10.0; x[12] = 1.0; y[12] = 10.0; z[12] = 0.0; x[13] = 10.0; y[13] = 10.0; z[13] = 0.0; x[14] = 10.0; y[14] = 10.0; z[14] =-10.0; x[15] = 1.0; y[15] = 10.0; z[15] =-10.0; /* Tetra #1 */ x[16] = 0.0; y[16] = 0.0; z[16] = 0.0; x[17] = 1.0; y[17] = 0.0; z[17] = 5.0; x[18] = 10.0; y[18] = 0.0; z[18] = 2.0; x[19] = 7.0; y[19] = 5.0; z[19] = 3.0; /* Wedge #1 */ x[20] = 3.0; y[20] = 0.0; z[20] = 6.0; x[21] = 6.0; y[21] = 0.0; z[21] = 0.0; x[22] = 0.0; y[22] = 0.0; z[22] = 0.0; x[23] = 3.0; y[23] = 2.0; z[23] = 6.0; x[24] = 6.0; y[24] = 2.0; z[24] = 2.0; x[25] = 0.0; y[25] = 2.0; z[25] = 0.0; /* Tetra #2 */ x[26] = 2.7; y[26] = 1.7; z[26] = 2.7; x[27] = 6.0; y[27] = 1.7; z[27] = 3.3; x[28] = 5.7; y[28] = 1.7; z[28] = 1.7; x[29] = 3.7; y[29] = 0.0; z[29] = 2.3; /* 3d Tri */ x[30] = 0.0; y[30] = 0.0; z[30] = 0.0; x[31] = 10.0; y[31] = 0.0; z[31] = 0.0; x[32] = 10.0; y[32] = 10.0; z[32] = 10.0; error = ex_put_coord (exoid, x, y, z); printf ("after ex_put_coord, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ coord_names[0] = "X coordinate name that is padded to be longer than 32 characters"; coord_names[1] = "Y coordinate name that is padded to be longer than 32 characters"; coord_names[2] = "Z coordinate name that is padded to be longer than 32 characters"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Add nodal attributes */ error = ex_put_attr_param(exoid, EX_NODAL, 0, 2); printf ("after ex_put_attr_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_one_attr(exoid, EX_NODAL, 0, 1, x); if (error) { ex_close (exoid); exit(-1); } error = ex_put_one_attr(exoid, EX_NODAL, 0, 2, y); if (error) { ex_close (exoid); exit(-1); } { attrib_names[0] = "Node_attr_1"; attrib_names[1] = "Node_attr_2"; error = ex_put_attr_names (exoid, EX_NODAL, 0, attrib_names); if (error) { ex_close (exoid); exit(-1); } } /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = i; } error = ex_put_map (exoid, elem_map); printf ("after ex_put_map, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (elem_map); /* write element block parameters */ /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ block_names[0] = "Very long name for block_1 that exceeds 32 characters"; block_names[1] = "Very long name for block_2 that exceeds 32 characters"; block_names[2] = "Very long name for block_3 that exceeds 32 characters"; block_names[3] = "Very long name for block_4 that exceeds 32 characters"; block_names[4] = "Very long name for block_5 that exceeds 32 characters"; block_names[5] = "Very long name for block_6 that exceeds 32 characters"; block_names[6] = "Very long name for block_7 that exceeds 32 characters"; num_elem_in_block[0] = 1; num_elem_in_block[1] = 1; num_elem_in_block[2] = 1; num_elem_in_block[3] = 1; num_elem_in_block[4] = 1; num_elem_in_block[5] = 1; num_elem_in_block[6] = 1; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #4 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #5 are 6-node wedges */ num_nodes_per_elem[5] = 8; /* elements in block #6 are 8-node tetras */ num_nodes_per_elem[6] = 3; /* elements in block #7 are 3-node tris */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; ebids[5] = 15; ebids[6] = 16; error = ex_put_elem_block (exoid, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[5], "tetra", num_elem_in_block[5], num_nodes_per_elem[5], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[6], "tri", num_elem_in_block[6], num_nodes_per_elem[6], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write element block names */ error = ex_put_names(exoid, EX_ELEM_BLOCK, block_names); printf ("after ex_put_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element block properties */ /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ prop_names[0] = "MATERIAL_PROPERTY_LONG_NAME_32CH"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoid,EX_ELEM_BLOCK,2,prop_names); printf ("after ex_put_prop_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[0], prop_names[0], 10); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[1], prop_names[0], 20); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[2], prop_names[0], 30); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[3], prop_names[0], 40); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[4], prop_names[0], 50); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[5], prop_names[0], 60); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[6], prop_names[0], 70); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element connectivity */ connect = (int *) calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[0], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 5; connect[1] = 6; connect[2] = 7; connect[3] = 8; error = ex_put_elem_conn (exoid, ebids[1], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 9; connect[1] = 10; connect[2] = 11; connect[3] = 12; connect[4] = 13; connect[5] = 14; connect[6] = 15; connect[7] = 16; error = ex_put_elem_conn (exoid, ebids[2], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; error = ex_put_elem_conn (exoid, ebids[3], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 21; connect[1] = 22; connect[2] = 23; connect[3] = 24; connect[4] = 25; connect[5] = 26; error = ex_put_elem_conn (exoid, ebids[4], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; connect[4] = 27; connect[5] = 28; connect[6] = 30; connect[7] = 29; error = ex_put_elem_conn (exoid, ebids[5], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 31; connect[1] = 32; connect[2] = 33; error = ex_put_elem_conn (exoid, ebids[6], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (connect); /* write element block attributes */ attrib[0] = 3.14159; error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } attrib[0] = 6.14159; error = ex_put_elem_attr (exoid, ebids[1], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[2], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[3], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[4], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[5], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[6], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ attrib_names[0] = "The name for the attribute representing the shell thickness"; for (i=0; i < 7; i++) { error = ex_put_elem_attr_names (exoid, ebids[i], attrib_names); printf ("after ex_put_elem_attr_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write individual node sets */ num_nodes_in_nset[0] = 5; num_nodes_in_nset[1] = 3; nsids[0] = 20; nsids[1] = 21; error = ex_put_node_set_param (exoid, nsids[0], 5, 5); printf ("after ex_put_node_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } node_list[0] = 10; node_list[1] = 11; node_list[2] = 12; node_list[3] = 13; node_list[4] = 14; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; error = ex_put_node_set (exoid, nsids[0], node_list); printf ("after ex_put_node_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_dist_fact (exoid, nsids[0], dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_param (exoid, nsids[1], 3, 3); printf ("after ex_put_node_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } node_list[0] = 20; node_list[1] = 21; node_list[2] = 22; dist_fact[0] = 1.1; dist_fact[1] = 2.1; dist_fact[2] = 3.1; error = ex_put_node_set (exoid, nsids[1], node_list); printf ("after ex_put_node_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_dist_fact (exoid, nsids[1], dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write node set names */ nset_names[0] = "nset_1"; nset_names[1] = "nset_2"; error = ex_put_names(exoid, EX_NODE_SET, nset_names); printf ("after ex_put_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_NODE_SET, nsids[0], "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_NODE_SET, nsids[1], "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Add nodeset attributes */ error = ex_put_attr_param(exoid, EX_NODE_SET, nsids[0], 1); printf ("after ex_put_attr_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_attr(exoid, EX_NODE_SET, nsids[0], x); if (error) { ex_close (exoid); exit(-1); } { attrib_names[0] = "Nodeset_attribute"; error = ex_put_attr_names (exoid, EX_NODE_SET, nsids[0], attrib_names); if (error) { ex_close (exoid); exit(-1); } } /* write individual side sets */ num_face_in_sset[0] = 2; num_face_in_sset[1] = 2; num_face_in_sset[2] = 7; num_face_in_sset[3] = 8; num_face_in_sset[4] = 10; ssids[0] = 30; ssids[1] = 31; ssids[2] = 32; ssids[3] = 33; ssids[4] = 34; /* side set #1 - quad */ error = ex_put_side_set_param (exoid, ssids[0], 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 2; elem_list[1] = 2; side_list[0] = 4; side_list[1] = 2; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; error = ex_put_side_set (exoid, 30, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 30, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #2 - quad, spanning 2 elements */ error = ex_put_side_set_param (exoid, 31, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 1; elem_list[1] = 2; side_list[0] = 2; side_list[1] = 3; dist_fact[0] = 31.0; dist_fact[1] = 31.1; dist_fact[2] = 31.2; dist_fact[3] = 31.3; error = ex_put_side_set (exoid, 31, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 31, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #3 - hex */ error = ex_put_side_set_param (exoid, 32, 7, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 3; elem_list[1] = 3; elem_list[2] = 3; elem_list[3] = 3; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; side_list[0] = 5; side_list[1] = 3; side_list[2] = 3; side_list[3] = 2; side_list[4] = 4; side_list[5] = 1; side_list[6] = 6; error = ex_put_side_set (exoid, 32, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #4 - tetras */ error = ex_put_side_set_param (exoid, 33, 8, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 4; elem_list[1] = 4; elem_list[2] = 4; elem_list[3] = 4; elem_list[4] = 6; elem_list[5] = 6; elem_list[6] = 6; elem_list[7] = 6; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 1; side_list[5] = 2; side_list[6] = 3; side_list[7] = 4; error = ex_put_side_set (exoid, 33, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #5 - wedges and tris */ error = ex_put_side_set_param (exoid, 34, 10, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 5; elem_list[1] = 5; elem_list[2] = 5; elem_list[3] = 5; elem_list[4] = 5; elem_list[5] = 7; elem_list[6] = 7; elem_list[7] = 7; elem_list[8] = 7; elem_list[9] = 7; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 5; side_list[5] = 1; side_list[6] = 2; side_list[7] = 3; side_list[8] = 4; side_list[9] = 5; error = ex_put_side_set (exoid, 34, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write side set names */ sset_names[0] = "sset_1"; sset_names[1] = "sset_2"; sset_names[2] = "sset_3"; sset_names[3] = "sset_4"; sset_names[4] = "sset_5"; error = ex_put_names(exoid, EX_SIDE_SET, sset_names); printf ("after ex_put_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write QA records; test empty and just blank-filled records */ num_qa_rec = 2; qa_record[0][0] = "TESTWT"; qa_record[0][1] = "testwt"; qa_record[0][2] = "07/07/93"; qa_record[0][3] = "15:41:33"; qa_record[1][0] = ""; qa_record[1][1] = " "; qa_record[1][2] = ""; qa_record[1][3] = " "; error = ex_put_qa (exoid, num_qa_rec, qa_record); printf ("after ex_put_qa, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write information records; test empty and just blank-filled records */ num_info = 3; info[0] = "This is the first information record."; info[1] = ""; info[2] = " "; error = ex_put_info (exoid, num_info, info); printf ("after ex_put_info, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write results variables parameters and names */ num_glo_vars = 1; variable_names[0] = "glo_vars"; error = ex_put_variable_param (exoid, EX_GLOBAL, num_glo_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_GLOBAL, num_glo_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } num_nod_vars = 2; /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ variable_names[0] = "node_variable_a_somewhat_long_name_0"; variable_names[1] = "node_variable_a_much_longer_name_that_is_not_too_long_name"; error = ex_put_variable_param (exoid, EX_NODAL, num_nod_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_NODAL, num_nod_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } num_ele_vars = 3; /* 0 1 2 3 4 5 6 */ /* 1234567890123456789012345678901234567890123456789012345678901234 */ variable_names[0] = "the_stress_on_the_elements_in_this_block_that_are_active_now"; variable_names[1] = "ele_var1"; variable_names[2] = "ele_var2"; error = ex_put_variable_param (exoid, EX_ELEM_BLOCK, num_ele_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_ELEM_BLOCK, num_ele_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } { num_nset_vars = 3; variable_names[0] = "ns_var0"; variable_names[1] = "ns_var1"; variable_names[2] = "ns_var2"; error = ex_put_variable_param (exoid, EX_NODE_SET, num_nset_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_NODE_SET, num_nset_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } { num_sset_vars = 3; variable_names[0] = "ss_var0"; variable_names[1] = "ss_var1"; variable_names[2] = "ss_var2"; error = ex_put_variable_param (exoid, EX_SIDE_SET, num_sset_vars); printf ("after ex_put_variable_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_variable_names (exoid, EX_SIDE_SET, num_sset_vars, variable_names); printf ("after ex_put_variable_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write element variable truth table */ truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int)); k = 0; for (i=0; i<num_elem_blk; i++) { for (j=0; j<num_ele_vars; j++) { truth_tab[k++] = 1; } } error = ex_put_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab); printf ("after ex_put_elem_var_tab, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (truth_tab); /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, CPU_word_size); nodal_var_vals = (float *) calloc (num_nodes, CPU_word_size); elem_var_vals = (float *) calloc (4, CPU_word_size); sset_var_vals = (float *) calloc (10, CPU_word_size); nset_var_vals = (float *) calloc (10, CPU_word_size); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal variables */ for (k=1; k<=num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nodal_var_vals[j] = (float)k + ((float)(j+1) * time_value); } error = ex_put_nodal_var (exoid, whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write element variables */ for (k=1; k<=num_ele_vars; k++) { for (j=0; j<num_elem_blk; j++) { for (m=0; m<num_elem_in_block[j]; m++) { elem_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); /* printf("elem_var_vals[%d]: %f\n",m,elem_var_vals[m]); */ } error = ex_put_elem_var (exoid, whole_time_step, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf ("after ex_put_elem_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } /* write sideset variables */ for (k=1; k<=num_sset_vars; k++) { for (j=0; j<num_side_sets; j++) { for (m=0; m<num_face_in_sset[j]; m++) { sset_var_vals[m] = (float)(k+2) + (float)(j+3) + ((float)(m+1)*time_value); /* printf("sset_var_vals[%d]: %f\n",m,sset_var_vals[m]); */ } error = ex_put_sset_var (exoid, whole_time_step, k, ssids[j], num_face_in_sset[j], sset_var_vals); printf ("after ex_put_sset_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } /* write nodeset variables */ for (k=1; k<=num_nset_vars; k++) { for (j=0; j<num_node_sets; j++) { for (m=0; m<num_nodes_in_nset[j]; m++) { nset_var_vals[m] = (float)(k+3) + (float)(j+4) + ((float)(m+1)*time_value); /* printf("nset_var_vals[%d]: %f\n",m,nset_var_vals[m]); */ } error = ex_put_nset_var (exoid, whole_time_step, k, nsids[j], num_nodes_in_nset[j], nset_var_vals); printf ("after ex_put_nset_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } whole_time_step++; /* update the data file; this should be done at the end of every time step * to ensure that no data is lost if the analysis dies */ error = ex_update (exoid); printf ("after ex_update, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); free(sset_var_vals); free(nset_var_vals); /* close the EXODUS files */ error = ex_close (exoid); printf ("after ex_close, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } return 0; }
int write_vis(std::string &nemI_out_file, std::string &exoII_inp_file, Machine_Description* machine, Problem_Description* prob, Mesh_Description<INT>* mesh, LB_Description<INT>* lb) { int exid_vis, exid_inp; char title[MAX_LINE_LENGTH+1]; const char *coord_names[] = {"X", "Y", "Z"}; /*-----------------------------Execution Begins------------------------------*/ /* Generate the file name for the visualization file */ std::string vis_file_name = remove_extension(nemI_out_file); vis_file_name += "-vis.exoII"; /* Generate the title for the file */ strcpy(title, UTIL_NAME); strcat(title, " "); strcat(title, ELB_VERSION); strcat(title, " load balance visualization file"); /* * If the vis technique is to be by element block then calculate the * number of element blocks. */ int vis_nelem_blks; if(prob->type == ELEMENTAL) vis_nelem_blks = machine->num_procs; else vis_nelem_blks = machine->num_procs + 1; /* Create the ExodusII file */ std::cout << "Outputting load balance visualization file " << vis_file_name.c_str() << "\n"; int cpu_ws = 0; int io_ws = 0; int mode = EX_CLOBBER; if (prob->int64db|prob->int64api) { mode |= EX_NETCDF4|EX_NOCLASSIC|prob->int64db|prob->int64api; } if((exid_vis=ex_create(vis_file_name.c_str(), mode, &cpu_ws, &io_ws)) < 0) { Gen_Error(0, "fatal: unable to create visualization output file"); return 0; } ON_BLOCK_EXIT(ex_close, exid_vis); /* * Open the original input ExodusII file, read the values for the * element blocks and output them to the visualization file. */ int icpu_ws=0; int iio_ws=0; float vers=0.0; mode = EX_READ | prob->int64api; if((exid_inp=ex_open(exoII_inp_file.c_str(), mode, &icpu_ws, &iio_ws, &vers)) < 0) { Gen_Error(0, "fatal: unable to open input ExodusII file"); return 0; } ON_BLOCK_EXIT(ex_close, exid_inp); char **elem_type = (char**)array_alloc(2, mesh->num_el_blks, MAX_STR_LENGTH+1, sizeof(char)); if(!elem_type) { Gen_Error(0, "fatal: insufficient memory"); return 0; } ON_BLOCK_EXIT(free, elem_type); std::vector<INT> el_blk_ids(mesh->num_el_blks); std::vector<INT> el_cnt_blk(mesh->num_el_blks); std::vector<INT> node_pel_blk(mesh->num_el_blks); std::vector<INT> nattr_el_blk(mesh->num_el_blks); if(ex_get_elem_blk_ids(exid_inp, TOPTR(el_blk_ids)) < 0) { Gen_Error(0, "fatal: unable to get element block IDs"); return 0; } int acc_vis = ELB_TRUE; // Output a different element block per processor if (prob->vis_out == 2) acc_vis = ELB_FALSE; // Output a nodal/element variable showing processor size_t nsize = 0; /* * Find out if the mesh consists of mixed elements. If not then * element blocks will be used to visualize the partitioning. Otherwise * nodal/element results will be used. */ for(size_t ecnt=0; ecnt < mesh->num_el_blks; ecnt++) { if(ex_get_elem_block(exid_inp, el_blk_ids[ecnt], elem_type[ecnt], &el_cnt_blk[ecnt], &node_pel_blk[ecnt], &nattr_el_blk[ecnt]) < 0) { Gen_Error(0, "fatal: unable to get element block parameters"); return 0; } nsize += el_cnt_blk[ecnt]*node_pel_blk[ecnt]; if(strcmp(elem_type[0], elem_type[ecnt]) == 0) { if(node_pel_blk[0] != node_pel_blk[ecnt]) acc_vis = ELB_FALSE; } else acc_vis = ELB_FALSE; } if(acc_vis == ELB_TRUE) { /* Output the initial information */ if(ex_put_init(exid_vis, title, mesh->num_dims, mesh->num_nodes, mesh->num_elems, vis_nelem_blks, 0, 0) < 0) { Gen_Error(0, "fatal: unable to output initial params to vis file"); return 0; } /* Output the nodal coordinates */ float *xptr = nullptr; float *yptr = nullptr; float *zptr = nullptr; switch(mesh->num_dims) { case 3: zptr = (mesh->coords) + 2*mesh->num_nodes; /* FALLTHRU */ case 2: yptr = (mesh->coords) + mesh->num_nodes; /* FALLTHRU */ case 1: xptr = mesh->coords; } if(ex_put_coord(exid_vis, xptr, yptr, zptr) < 0) { Gen_Error(0, "fatal: unable to output coords to vis file"); return 0; } if(ex_put_coord_names(exid_vis, (char**)coord_names) < 0) { Gen_Error(0, "fatal: unable to output coordinate names"); return 0; } std::vector<INT> elem_block(mesh->num_elems); std::vector<INT> elem_map(mesh->num_elems); std::vector<INT> tmp_connect(nsize); for(size_t ecnt=0; ecnt < mesh->num_elems; ecnt++) { elem_map[ecnt] = ecnt+1; if(prob->type == ELEMENTAL) elem_block[ecnt] = lb->vertex2proc[ecnt]; else { int proc = lb->vertex2proc[mesh->connect[ecnt][0]]; int nnodes = get_elem_info(NNODES, mesh->elem_type[ecnt]); elem_block[ecnt] = proc; for(int ncnt=1; ncnt < nnodes; ncnt++) { if(lb->vertex2proc[mesh->connect[ecnt][ncnt]] != proc) { elem_block[ecnt] = machine->num_procs; break; } } } } int ccnt = 0; std::vector<INT> vis_el_blk_ptr(vis_nelem_blks+1); for(INT bcnt=0; bcnt < vis_nelem_blks; bcnt++) { vis_el_blk_ptr[bcnt] = ccnt; int pos = 0; int old_pos = 0; INT* el_ptr = TOPTR(elem_block); size_t ecnt = mesh->num_elems; while(pos != -1) { pos = in_list(bcnt, ecnt, el_ptr); if(pos != -1) { old_pos += pos + 1; ecnt = mesh->num_elems - old_pos; el_ptr = TOPTR(elem_block) + old_pos; int nnodes = get_elem_info(NNODES, mesh->elem_type[old_pos-1]); for(int ncnt=0; ncnt < nnodes; ncnt++) tmp_connect[ccnt++] = mesh->connect[old_pos-1][ncnt] + 1; } } } vis_el_blk_ptr[vis_nelem_blks] = ccnt; /* Output the element map */ if(ex_put_map(exid_vis, TOPTR(elem_map)) < 0) { Gen_Error(0, "fatal: unable to output element number map"); return 0; } /* Output the visualization element blocks */ for(int bcnt=0; bcnt < vis_nelem_blks; bcnt++) { /* * Note this assumes all the blocks contain the same type * element. */ int ecnt = (vis_el_blk_ptr[bcnt+1]-vis_el_blk_ptr[bcnt])/node_pel_blk[0]; if(ex_put_elem_block(exid_vis, bcnt+1, elem_type[0], ecnt, node_pel_blk[0], 0) < 0) { Gen_Error(0, "fatal: unable to output element block params"); return 0; } /* Output the connectivity */ if(ex_put_elem_conn(exid_vis, bcnt+1, &tmp_connect[vis_el_blk_ptr[bcnt]]) < 0) { Gen_Error(0, "fatal: unable to output element connectivity"); return 0; } } } else { /* For nodal/element results visualization of the partioning. */ // Copy the mesh portion to the vis file. ex_copy(exid_inp, exid_vis); /* Set up the file for nodal/element results */ float time_val = 0.0; if(ex_put_time(exid_vis, 1, &time_val) < 0) { Gen_Error(0, "fatal: unable to output time to vis file"); return 0; } const char *var_names[] = {"proc"}; if(prob->type == NODAL) { /* Allocate memory for the nodal values */ std::vector<float> proc_vals(mesh->num_nodes); if(ex_put_variable_param(exid_vis, EX_NODAL, 1) < 0) { Gen_Error(0, "fatal: unable to output var params to vis file"); return 0; } if(ex_put_variable_names(exid_vis, EX_NODAL, 1, (char**)var_names) < 0) { Gen_Error(0, "fatal: unable to output variable name"); return 0; } /* Do some problem specific assignment */ for(size_t ncnt=0; ncnt < mesh->num_nodes; ncnt++) proc_vals[ncnt] = lb->vertex2proc[ncnt]; for(int pcnt=0; pcnt < machine->num_procs; pcnt++) { for(auto & elem : lb->bor_nodes[pcnt]) proc_vals[elem] = machine->num_procs + 1; } /* Output the nodal variables */ if(ex_put_nodal_var(exid_vis, 1, 1, mesh->num_nodes, TOPTR(proc_vals)) < 0) { Gen_Error(0, "fatal: unable to output nodal variables"); return 0; } } else if(prob->type == ELEMENTAL) { /* Allocate memory for the element values */ std::vector<float> proc_vals(mesh->num_elems); if(ex_put_variable_param(exid_vis, EX_ELEM_BLOCK, 1) < 0) { Gen_Error(0, "fatal: unable to output var params to vis file"); return 0; } if(ex_put_variable_names(exid_vis, EX_ELEM_BLOCK, 1, (char**)var_names) < 0) { Gen_Error(0, "fatal: unable to output variable name"); return 0; } /* Do some problem specific assignment */ for(int proc=0; proc < machine->num_procs; proc++) { for (size_t e = 0; e < lb->int_elems[proc].size(); e++) { size_t ecnt = lb->int_elems[proc][e]; proc_vals[ecnt] = proc; } for (size_t e = 0; e < lb->bor_elems[proc].size(); e++) { size_t ecnt = lb->bor_elems[proc][e]; proc_vals[ecnt] = proc; } } /* Output the element variables */ size_t offset = 0; for (size_t i=0; i < mesh->num_el_blks; i++) { if(ex_put_var(exid_vis, 1, EX_ELEM_BLOCK, 1, el_blk_ids[i], el_cnt_blk[i], &proc_vals[offset]) < 0) { Gen_Error(0, "fatal: unable to output nodal variables"); return 0; } offset += el_cnt_blk[i]; } } } return 1; } /*---------------------------End write_vis()-------------------------------*/
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10]; int num_node_sets, num_side_sets, error; int *connect; int node_list[100],elem_list[100],side_list[100]; int ebids[10], ids[10]; int num_nodes_per_set[10], num_elem_per_set[10]; int num_df_per_set[10]; int df_ind[10], node_ind[10], elem_ind[10]; int num_qa_rec, num_info; int CPU_word_size,IO_word_size; float x[100], y[100], z[100]; float dist_fact[100]; char *coord_names[3], *qa_record[2][4], *info[3]; ex_opts (EX_VERBOSE|EX_ABORT); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); /* ncopts = NC_VERBOSE; */ /* initialize file with parameters */ num_dim = 3; num_nodes = 33; num_elem = 8; num_elem_blk = 8; num_node_sets = 2; num_side_sets = 9; error = ex_put_init (exoid, "This is a test", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal coordinates values and names to database */ /* Quad #1 */ x[0] = 0.0; y[0] = 0.0; z[0] = 0.0; x[1] = 1.0; y[1] = 0.0; z[1] = 0.0; x[2] = 1.0; y[2] = 1.0; z[2] = 0.0; x[3] = 0.0; y[3] = 1.0; z[3] = 0.0; /* Quad #2 */ x[4] = 1.0; y[4] = 0.0; z[4] = 0.0; x[5] = 2.0; y[5] = 0.0; z[5] = 0.0; x[6] = 2.0; y[6] = 1.0; z[6] = 0.0; x[7] = 1.0; y[7] = 1.0; z[7] = 0.0; /* Hex #1 */ x[8] = 0.0; y[8] = 0.0; z[8] = 0.0; x[9] = 10.0; y[9] = 0.0; z[9] = 0.0; x[10] = 10.0; y[10] = 0.0; z[10] =-10.0; x[11] = 1.0; y[11] = 0.0; z[11] =-10.0; x[12] = 1.0; y[12] = 10.0; z[12] = 0.0; x[13] = 10.0; y[13] = 10.0; z[13] = 0.0; x[14] = 10.0; y[14] = 10.0; z[14] =-10.0; x[15] = 1.0; y[15] = 10.0; z[15] =-10.0; /* Tetra #1 */ x[16] = 0.0; y[16] = 0.0; z[16] = 0.0; x[17] = 1.0; y[17] = 0.0; z[17] = 5.0; x[18] = 10.0; y[18] = 0.0; z[18] = 2.0; x[19] = 7.0; y[19] = 5.0; z[19] = 3.0; /* Wedge #1 */ x[20] = 3.0; y[20] = 0.0; z[20] = 6.0; x[21] = 6.0; y[21] = 0.0; z[21] = 0.0; x[22] = 0.0; y[22] = 0.0; z[22] = 0.0; x[23] = 3.0; y[23] = 2.0; z[23] = 6.0; x[24] = 6.0; y[24] = 2.0; z[24] = 2.0; x[25] = 0.0; y[25] = 2.0; z[25] = 0.0; /* Tetra #2 */ x[26] = 2.7; y[26] = 1.7; z[26] = 2.7; x[27] = 6.0; y[27] = 1.7; z[27] = 3.3; x[28] = 5.7; y[28] = 1.7; z[28] = 1.7; x[29] = 3.7; y[29] = 0.0; z[29] = 2.3; /* TriShell #1 */ x[30] = 2.7; y[30] = 1.7; z[30] = 2.7; x[31] = 6.0; y[31] = 1.7; z[31] = 3.3; x[32] = 5.7; y[32] = 1.7; z[32] = 1.7; error = ex_put_coord (exoid, x, y, z); printf ("after ex_put_coord, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element block parameters */ num_elem_in_block[0] = 1; num_elem_in_block[1] = 1; num_elem_in_block[2] = 1; num_elem_in_block[3] = 1; num_elem_in_block[4] = 1; num_elem_in_block[5] = 1; num_elem_in_block[6] = 1; num_elem_in_block[7] = 1; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #4 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #5 are 6-node wedges */ num_nodes_per_elem[5] = 8; /* elements in block #6 are 8-node tetras */ num_nodes_per_elem[6] = 4; /* elements in block #7 are 4-node shells */ num_nodes_per_elem[7] = 3; /* elements in block #8 are 3-node shells */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; ebids[5] = 15; ebids[6] = 16; ebids[7] = 17; error = ex_put_elem_block (exoid, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[1], "quad", num_elem_in_block[1], num_nodes_per_elem[1], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[2], "hex", num_elem_in_block[2], num_nodes_per_elem[2], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[3], "tetra", num_elem_in_block[3], num_nodes_per_elem[3], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[4], "wedge", num_elem_in_block[4], num_nodes_per_elem[4], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[5], "tetra", num_elem_in_block[5], num_nodes_per_elem[5], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[6], "shell", num_elem_in_block[6], num_nodes_per_elem[6], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_block (exoid, ebids[7], "triangle", num_elem_in_block[7], num_nodes_per_elem[7], 1); printf ("after ex_put_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element connectivity */ connect = (int *) calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[0], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 5; connect[1] = 6; connect[2] = 7; connect[3] = 8; error = ex_put_elem_conn (exoid, ebids[1], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 9; connect[1] = 10; connect[2] = 11; connect[3] = 12; connect[4] = 13; connect[5] = 14; connect[6] = 15; connect[7] = 16; error = ex_put_elem_conn (exoid, ebids[2], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; error = ex_put_elem_conn (exoid, ebids[3], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 21; connect[1] = 22; connect[2] = 23; connect[3] = 24; connect[4] = 25; connect[5] = 26; error = ex_put_elem_conn (exoid, ebids[4], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; connect[4] = 27; connect[5] = 28; connect[6] = 30; connect[7] = 29; error = ex_put_elem_conn (exoid, ebids[5], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[6], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 30; connect[1] = 31; connect[2] = 32; error = ex_put_elem_conn (exoid, ebids[7], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (connect); /* write individual side sets */ /* side set #1 - quad */ /* THIS SECTION IS COMMENTED OUT error = ex_put_side_set_param (exoid, 30, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 2; elem_list[1] = 2; side_list[0] = 4; side_list[1] = 2; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; error = ex_put_side_set (exoid, 30, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 30, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } END COMMENTED OUT SECTION */ /* side set #2 - quad, spanning 2 elements */ /* THIS SECTION IS COMMENTED OUT error = ex_put_side_set_param (exoid, 31, 2, 4); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 1; elem_list[1] = 2; side_list[0] = 2; side_list[1] = 3; dist_fact[0] = 31.0; dist_fact[1] = 31.1; dist_fact[2] = 31.2; dist_fact[3] = 31.3; error = ex_put_side_set (exoid, 31, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 31, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } END COMMENTED OUT SECTION */ /* side set #3 - hex */ /* THIS SECTION IS COMMENTED OUT error = ex_put_side_set_param (exoid, 32, 7, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 3; elem_list[1] = 3; elem_list[2] = 3; elem_list[3] = 3; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; side_list[0] = 5; side_list[1] = 3; side_list[2] = 3; side_list[3] = 2; side_list[4] = 4; side_list[5] = 1; side_list[6] = 6; error = ex_put_side_set (exoid, 32, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } END COMMENTED OUT SECTION */ /* side set #4 - 4-node tetras */ /* THIS SECTION IS COMMENTED OUT error = ex_put_side_set_param (exoid, 33, 4, 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; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; error = ex_put_side_set (exoid, 33, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } END COMMENTED OUT SECTION */ /* side set #5 - shells; front and back faces */ /* THIS SECTION IS COMMENTED OUT error = ex_put_side_set_param (exoid, 34, 2, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 7; elem_list[1] = 7; side_list[0] = 1; side_list[1] = 2; error = ex_put_side_set (exoid, 34, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } END COMMENTED OUT SECTION */ /* side set #6 - shells; edges */ /* THIS SECTION IS COMMENTED OUT error = ex_put_side_set_param (exoid, 35, 4, 0); printf ("after ex_put_side_set_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } elem_list[0] = 7; elem_list[1] = 7; elem_list[2] = 7; elem_list[3] = 7; side_list[0] = 3; side_list[1] = 4; side_list[2] = 5; side_list[3] = 6; error = ex_put_side_set (exoid, 35, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } END COMMENTED OUT SECTION */ /* 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; ids[5] = 35; ids[6] = 36; ids[7] = 37; ids[8] = 38; /* side set #1 - NULL side set */ /* do nothing except set num_elem_per_set to 0 */ /* side set #2 - NULL side set */ /* do nothing except set num_elem_per_set to 0 */ /* side set #3 - quad; 2 sides */ node_list[0] = 8; node_list[1] = 5; elem_list[0] = 2; node_list[2] = 6; node_list[3] = 7; elem_list[1] = 2; /* side set #4 - quad; 2 sides spanning 2 elements */ node_list[4] = 2; node_list[5] = 3; elem_list[2] = 1; node_list[6] = 7; node_list[7] = 8; elem_list[3] = 2; /* side set #5 - hex; 7 sides */ node_list[8] = 9; node_list[9] = 12; node_list[10] = 11; node_list[11] = 10; elem_list[4] = 3; node_list[12] = 11; node_list[13] = 12; node_list[14] = 16; node_list[15] = 15; elem_list[5] = 3; node_list[16] = 16; node_list[17] = 15; node_list[18] = 11; node_list[19] = 12; elem_list[6] = 3; node_list[20] = 10; node_list[21] = 11; node_list[22] = 15; node_list[23] = 14; elem_list[7] = 3; node_list[24] = 13; node_list[25] = 16; node_list[26] = 12; node_list[27] = 9; elem_list[8] = 3; node_list[28] = 14; node_list[29] = 13; node_list[30] = 9; node_list[31] = 10; elem_list[9] = 3; node_list[32] = 16; node_list[33] = 13; node_list[34] = 14; node_list[35] = 15; elem_list[10] = 3; /* side set #6 - 4-node tetras; 4 sides */ node_list[36] = 17; node_list[37] = 18; node_list[38] = 20; elem_list[11] = 4; node_list[39] = 18; node_list[40] = 19; node_list[41] = 20; elem_list[12] = 4; node_list[42] = 17; node_list[43] = 20; node_list[44] = 19; elem_list[13] = 4; node_list[45] = 17; node_list[46] = 19; node_list[47] = 18; elem_list[14] = 4; /* side set #7 - shells; front and back faces */ node_list[48] = 1; node_list[49] = 2; node_list[50] = 3; node_list[51] = 4; elem_list[15] = 7; node_list[52] = 4; node_list[53] = 3; node_list[54] = 2; node_list[55] = 1; elem_list[16] = 7; /* side set #8 - shells; 4 edges */ node_list[56] = 1; node_list[57] = 2; elem_list[17] = 7; node_list[58] = 2; node_list[59] = 3; elem_list[18] = 7; node_list[60] = 3; node_list[61] = 4; elem_list[19] = 7; node_list[62] = 4; node_list[63] = 1; elem_list[20] = 7; /* side set #9 -- 3-node shells -- front and back */ node_list[64] = 30; node_list[65] = 31; node_list[66] = 32; elem_list[21] = 8; node_list[67] = 32; node_list[68] = 31; node_list[69] = 30; elem_list[22] = 8; /* set up indices */ node_ind[0] = 0; node_ind[1] = 0; node_ind[2] = 0; node_ind[3] = 4; node_ind[4] = 8; node_ind[5] = 36; node_ind[6] = 48; node_ind[7] = 56; node_ind[8] = 64; num_elem_per_set[0] = 0; num_elem_per_set[1] = 0; num_elem_per_set[2] = 2; num_elem_per_set[3] = 2; num_elem_per_set[4] = 7; num_elem_per_set[5] = 4; num_elem_per_set[6] = 2; num_elem_per_set[7] = 4; num_elem_per_set[8] = 2; num_nodes_per_set[0] = 0; num_nodes_per_set[1] = 0; num_nodes_per_set[2] = 4; num_nodes_per_set[3] = 4; num_nodes_per_set[4] = 28; num_nodes_per_set[5] = 12; num_nodes_per_set[6] = 8; num_nodes_per_set[7] = 8; num_nodes_per_set[8] = 6; elem_ind[0] = 0; elem_ind[1] = 0; elem_ind[2] = 0; elem_ind[3] = 2; elem_ind[4] = 4; elem_ind[5] = 11; elem_ind[6] = 15; elem_ind[7] = 17; elem_ind[8] = 21; 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); if (error) { ex_close (exoid); exit(-1); } num_df_per_set[0] = 0; num_df_per_set[1] = 0; num_df_per_set[2] = 4; num_df_per_set[3] = 4; num_df_per_set[4] = 0; num_df_per_set[5] = 0; num_df_per_set[6] = 0; num_df_per_set[7] = 0; num_df_per_set[8] = 0; df_ind[0] = 0; df_ind[1] = 0; df_ind[2] = 0; df_ind[3] = 4; df_ind[4] = 0; df_ind[5] = 0; df_ind[6] = 0; df_ind[7] = 0; df_ind[8] = 0; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; dist_fact[4] = 31.0; dist_fact[5] = 31.1; dist_fact[6] = 31.2; dist_fact[7] = 31.3; error = ex_put_concat_side_sets (exoid, ids, num_elem_per_set, num_df_per_set, elem_ind, df_ind, elem_list, side_list, dist_fact); printf ("after ex_put_concat_side_sets, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* THIS SECTION IS COMMENTED OUT END COMMENTED OUT SECTION */ /* 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); } /* 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[]){ 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); }
int main(int argc, char *argv[]) { /* Local function calls */ int ne_test_glbp(int); int ne_test_piinf(int); int ne_test_pinig(int); int ne_test_pelbid(int); int ne_test_pnsp(int); int ne_test_pssp(int); int ne_test_pnm(int); int ne_test_pem(int); int ne_test_pcmp(int); int ne_test_pncm(int); int ne_test_pecm(int); int ne_test_giinf(int); int ne_test_ginig(int); int ne_test_gelbid(int); int ne_test_gnsp(int); int ne_test_gssp(int); int ne_test_gnm(int); int ne_test_gem(int); int ne_test_gncm(int); int ne_test_gecm(int); int ne_test_plbpc(int); int ne_test_pcmpc(int); /* Unitialized local variables */ int ne_file_id; char test_direc[256], file_name[256]; float version; /* Initialized local variables */ int mode3 = EX_CLOBBER; int mode4 = EX_CLOBBER|EX_NETCDF4|EX_NOCLASSIC; char *yo="main"; int io_ws=0, cpu_ws=0, t_pass=0, t_fail=0; int debug_flag=0; /*-----------------------------Execution Begins-----------------------------*/ /* Get the location of the temporary file to use for the test */ if (argc <= 1) { /* Nothing specified. Use defaults. */ strcpy(file_name, "./ne_test.exoII"); } else if (argc == 2) { /* Test for the help flag */ if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "-?") == 0) { /* Output the help line */ printf("Usage:\n\tne_test <optional directory> <optional file name>\n"); exit(0); } /* Test for the debug flag */ else if (strcmp(argv[1], "-d") == 0 || strcmp(argv[1], "-d") == 0) { printf("****DEBUG MODE****\n"); ex_opts(EX_VERBOSE | EX_DEBUG); strcpy(file_name, "./ne_test.exoII"); debug_flag = 1; } /* Else get the directory name and assign default name */ else { strcpy(test_direc, argv[1]); if (test_direc[strlen(test_direc)-1] != '/') { strcpy(file_name, test_direc); strcat(file_name, "/ne_test.exoII"); } else { strcpy(file_name, test_direc); strcat(file_name, "ne_test.exoII"); } } } else if (argc == 3) { /* Both directory and file name specified */ strcpy(test_direc, argv[1]); if (test_direc[strlen(test_direc)-1] == '/') { strcpy(file_name, test_direc); strcat(file_name, "/"); strcat(file_name, argv[2]); } else { strcpy(file_name, test_direc); strcat(file_name, argv[2]); } } /*---------------------------------------------------------------------------*/ /* OUTPUT TEST SECTION */ /*---------------------------------------------------------------------------*/ printf("*********************Output Tests***********************\n"); /* Create the ExodusII/Nemesis file */ printf("creating ExodusII file..."); fflush(stdout); /* Attempt to create a netcdf4-format file; if it fails, then assume that the netcdf library does not support that mode and fall back to classic netcdf3 format. If that fails, issue an error and die. */ if ((ne_file_id=ex_create(file_name, mode4, &cpu_ws, &io_ws)) < 0) { /* netcdf4 create failed, try netcdf3 */ if ((ne_file_id=ex_create(file_name, mode3, &cpu_ws, &io_ws)) < 0) { printf("FAILED\n"); t_fail++; fprintf(stderr, "[%s]: ERROR, unable to create test file \"%s\"!\n", yo, file_name); exit(-1); } else { printf(" (netcdf3 format) "); } } else { printf(" (netcdf4 format) "); } printf("successful\n"); fflush(stdout); t_pass++; /* Test the output of initial information */ printf("testing init info output..."); fflush(stdout); if (ne_test_piinf(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of initial global information */ printf("testing global init info output..."); fflush(stdout); if (ne_test_pinig(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the global element block IDs */ printf("testing global element block ID output..."); fflush(stdout); if (ne_test_pelbid(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the global node-set info */ printf("testing global node-set params output..."); fflush(stdout); if (ne_test_pnsp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the global side-set info */ printf("testing global side-set params output..."); fflush(stdout); if (ne_test_pssp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the concatenated load-balance parameters */ printf("testing concatenated load balance info output..."); fflush(stdout); if (ne_test_plbpc(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); } else { printf("succesful\n"); fflush(stdout); } /* Test the output of the node map */ printf("testing node map output..."); fflush(stdout); if (ne_test_pnm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the element map */ printf("testing element map output..."); fflush(stdout); if (ne_test_pem(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the concatenated communication map params */ printf("testing concatenated communication map params output..."); fflush(stdout); if (ne_test_pcmpc(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test nodal communication map output */ printf("testing nodal communication map output..."); fflush(stdout); if (ne_test_pncm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test elemental communication map output */ printf("testing elemental communication map output..."); fflush(stdout); if (ne_test_pecm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Close the ExodusII/Nemesis test file */ printf("closing ExodusII file..."); fflush(stdout); if (ex_close(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; fprintf(stderr, "[%s]: ERROR, unable to close test file \"%s\"!\n", yo, file_name); exit(-1); } printf("successful\n"); fflush(stdout); t_pass++; /*---------------------------------------------------------------------------*/ /* INPUT TEST SECTION */ /*---------------------------------------------------------------------------*/ printf("**********************Input Tests***********************\n"); /* Re-open the ExodusII/NemesisI file */ printf("reopening ExodusII file..."); fflush(stdout); if (ex_open(file_name, EX_READ, &cpu_ws, &io_ws, &version) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of of the initial information */ printf("testing init info input..."); fflush(stdout); if (ne_test_giinf(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of initial global information */ printf("testing global init info input..."); fflush(stdout); if (ne_test_ginig(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of global element block IDs */ printf("testing global element block IDs input..."); fflush(stdout); if (ne_test_gelbid(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of global node-set params */ printf("testing global node-set params input..."); fflush(stdout); if (ne_test_gnsp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of global side-set params */ printf("testing global side-set params input..."); fflush(stdout); if (ne_test_gssp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of load-balance params */ printf("testing load-balance params input..."); fflush(stdout); if (ne_test_glbp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of the node map */ printf("testing node map input..."); fflush(stdout); if (ne_test_gnm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of element map */ printf("testing element map input..."); fflush(stdout); if (ne_test_gem(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of nodal communication maps */ printf("testing nodal communication map input..."); fflush(stdout); if (ne_test_gncm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of elemental communication maps */ printf("testing elemental communication map input..."); fflush(stdout); if (ne_test_gecm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; if (debug_flag == 1) return 1; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Close the ExodusII/Nemesis test file */ printf("closing ExodusII file..."); fflush(stdout); if (ex_close(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; fprintf(stderr, "[%s]: ERROR, unable to close test file \"%s\"!\n", yo, file_name); exit(-1); } printf("successful\n"); fflush(stdout); t_pass++; /* Output a test summary */ printf("\n"); printf("Tests Passed: %d\n", t_pass); printf("Tests Failed: %d\n", t_fail); return 0; }
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; }
void PeridigmNS::InterfaceData::InitializeExodusOutput(Teuchos::RCP<Epetra_Vector> exodusMeshElementConnectivity, Teuchos::RCP<Epetra_Vector> exodusMeshNodePositions){ if(comm->NumProc()>1){ filename << "Interfaces.e." << comm->NumProc() << "." << comm->MyPID(); } else{ filename << "Interfaces.e"; } std::string outputFileNameStr = filename.str(); std::vector<char> writable(outputFileNameStr.size() + 1); std::copy(outputFileNameStr.begin(), outputFileNameStr.end(), writable.begin()); int spaDim = 3; // force three dimensional output const int numShells = numOwnedPoints; const int numNodes = exodusMeshNodePositions->Map().NumMyElements(); int error_int; int CPU_word_size = 0; int IO_word_size = 0; /* create EXODUS II file */ const int output_exoid = ex_create (&writable[0],EX_CLOBBER,&CPU_word_size, &IO_word_size); exoid = output_exoid; // scan the connectivity to see if there are quads and tets: numQuads = 0; numTris = 0; for(int i=0;i<numOwnedPoints;++i){ if(interfaceNodesMap->ElementSize(i)==4) numQuads++; if(interfaceNodesMap->ElementSize(i)==3) numTris++; } TEUCHOS_TEST_FOR_EXCEPTION(numQuads+numTris!=numShells,std::logic_error,"numQuads " << numQuads << " + numTris " << numTris << " should sum up to numShells " << numShells); const int numBlocks = 2; error_int = ex_put_init(exoid, &writable[0], spaDim, numNodes, numShells, numBlocks, 0, 0); TEUCHOS_TEST_FOR_EXCEPTION(error_int,std::logic_error,"ex_put_init(): Failure"); // write initial coordinates and node/element maps float * x = new float[numNodes]; float * y = new float[numNodes]; float * z = new float[numNodes]; int * shellMap = new int[numShells]; int * nodeMap = new int[numNodes]; for(int i=0;i<numNodes;++i){ int nodeIndex = exodusMeshNodePositions->Map().FirstPointInElement(i); x[i] = (*exodusMeshNodePositions)[nodeIndex+0]; y[i] = (*exodusMeshNodePositions)[nodeIndex+1]; z[i] = (*exodusMeshNodePositions)[nodeIndex+2]; nodeMap[i] = exodusMeshNodePositions->Map().GID(i) + 1; // numbering is one based in exodus } for(int i=0;i<numShells;++i){ shellMap[i] = interfaceNodesMap->GID(i) +1; // numbering is one based in exodus } error_int = ex_put_coord(exoid, x, y, z); char * coord_names[3]; coord_names[0] = (char*) "coordinates_x"; coord_names[1] = (char*) "coordinates_y"; coord_names[2] = (char*) "coordinates_x"; error_int = ex_put_coord_names(exoid, coord_names); TEUCHOS_TEST_FOR_EXCEPTION(error_int,std::logic_error,"ex_put_coord_names(): Failure"); error_int = ex_put_elem_num_map(exoid, shellMap); TEUCHOS_TEST_FOR_EXCEPTION(error_int,std::logic_error,"ex_put_elem_num_map(): Failure"); error_int = ex_put_node_num_map(exoid, nodeMap); TEUCHOS_TEST_FOR_EXCEPTION(error_int,std::logic_error,"ex_put_node_num_map(): Failure"); delete[] shellMap; delete[] nodeMap; delete[] x; delete[] y; delete[] z; // write quad blocks: int blockIndex = 0; blockIndex ++; int num_nodes_per_elem_q4 = 4; const std::string elem_type_str_q4 = numQuads > 0 ? "QUAD4" : "NULL"; char * elem_type_q4 = const_cast<char *>(elem_type_str_q4.c_str()); const int numElemInBlock_q4 = numQuads; error_int = ex_put_elem_block(exoid, blockIndex, elem_type_q4, numElemInBlock_q4, num_nodes_per_elem_q4, 0); // no attributes put in output file TEUCHOS_TEST_FOR_EXCEPTION(error_int,std::logic_error,"ex_put_elem_block(): Failure"); blockIndex ++; int num_nodes_per_elem_t3 = 3; const std::string elem_type_str_t3 = numTris > 0 ? "TRI3": "NULL"; char * elem_type_t3 = const_cast<char *>(elem_type_str_t3.c_str()); const int numElemInBlock_t3 = numTris; error_int = ex_put_elem_block(exoid, blockIndex, elem_type_t3, numElemInBlock_t3, num_nodes_per_elem_t3, 0); // no attributes put in output file TEUCHOS_TEST_FOR_EXCEPTION(error_int,std::logic_error,"ex_put_elem_block(): Failure"); // write elem connectivities // HEADS UP: the connectivities will not write to file until ex_close is called // also note that the nodes must be the local node ids const int connLength = interfaceNodes->Map().NumMyElements(); blockIndex = 0; blockIndex ++; int conn_index = 0; int * block_connect_q4 = new int[numQuads*num_nodes_per_elem_q4]; for(int it=0;it<connLength;++it) { if(interfaceNodes->Map().ElementSize(it)!=4) continue; int elemIndex = interfaceNodes->Map().FirstPointInElement(it); for(int nn=0;nn<4;++nn){ int node = static_cast<int>( (*interfaceNodes)[elemIndex+nn] ); block_connect_q4[conn_index*num_nodes_per_elem_q4+nn] = exodusMeshNodePositions->Map().LID(node) + 1;// nodes are 1 based in exodus } conn_index++; } error_int = ex_put_elem_conn(exoid, blockIndex, block_connect_q4); delete[] block_connect_q4; blockIndex ++; conn_index = 0; int * block_connect_t3 = new int[numTris*num_nodes_per_elem_t3]; for(int it=0;it<connLength;++it) { if(interfaceNodes->Map().ElementSize(it)!=3) continue; int elemIndex = interfaceNodes->Map().FirstPointInElement(it); for(int nn=0;nn<3;++nn){ int node = static_cast<int>( (*interfaceNodes)[elemIndex+nn] ); block_connect_t3[conn_index*num_nodes_per_elem_t3+nn] = exodusMeshNodePositions->Map().LID(node) + 1;// nodes are 1 based in exodus } conn_index++; } error_int = ex_put_elem_conn(exoid, blockIndex, block_connect_t3); delete[] block_connect_t3; int numVariables = 1; // TODO careful with this, if more fields are added to the interface data this must be updated char** eleVarNames = new char*[numVariables]; std::vector<std::string> strNames; strNames.push_back("interface_aperture"); for (int i=0;i<numVariables;++i) eleVarNames[i] = (char*) (strNames[i].c_str()); error_int = ex_put_var_param(exoid, (char*) "e", numVariables); error_int = ex_put_var_names(exoid, (char*) "e", numVariables, &eleVarNames[0]); delete [] eleVarNames; // write the truth table int * truth_tab = new int[numVariables*numBlocks]; for(int i=0;i<numVariables*numBlocks;++i) truth_tab[i] = 1; error_int = ex_put_elem_var_tab (exoid, numBlocks, numVariables, truth_tab); delete [] truth_tab; error_int = ex_update(exoid); TEUCHOS_TEST_FOR_EXCEPTION(error_int,std::logic_error,"Exodus file close failed."); error_int = ex_close(exoid); TEUCHOS_TEST_FOR_EXCEPTION(error_int,std::logic_error,"Exodus file close failed."); }
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) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10], num_attr[10]; int num_node_sets, num_side_sets, error; int i, j, *connect; int ebids[10], ids[10]; int CPU_word_size,IO_word_size; char title[MAX_LINE_LENGTH+1], elem_type[MAX_STR_LENGTH+1]; float version; float *attrib; float x[100], y[100], z[100]; char *coord_names[3]; ex_opts (EX_VERBOSE | EX_ABORT); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ /* initialize file with parameters */ num_dim = 3; num_nodes = 19; num_elem = 12;; num_elem_blk = 1; num_node_sets = 0; num_side_sets = 0; error = ex_put_init (exoid, "This is testwt1", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); assert(error == 0); /* write nodal coordinates values and names to database */ /* Quad #1 */ x[0] = 1.0000000E+00; x[1] = 5.0000000E-01; x[2] = 1.0000000E+00; x[3] = 1.0000000E+00; x[4] = 7.5000000E-01; x[5] = 5.0000000E-01; x[6] = 1.0000000E+00; x[7] = 7.5000000E-01; x[8] = 1.0000000E+00; x[9] = 5.0000000E-01; x[10] = 5.0000000E-01; x[11] = 5.0000000E-01; x[12] = 1.0000000E+00; x[13] = 1.0000000E+00; x[14] = 7.5000000E-01; x[15] = 7.5000000E-01; x[16] = 1.0000000E+00; x[17] = 7.5000000E-01; x[18] = 1.0000000E+00; y[0] = 5.0000000E-01; y[1] = 1.0000000E+00; y[2] = 1.0000000E+00; y[3] = 7.5000000E-01; y[4] = 1.0000000E+00; y[5] = 5.0000000E-01; y[6] = 5.0000000E-01; y[7] = 5.0000000E-01; y[8] = 5.0000000E-01; y[9] = 1.0000000E+00; y[10] = 7.5000000E-01; y[11] = 1.0000000E+00; y[12] = 1.0000000E+00; y[13] = 7.5000000E-01; y[14] = 1.0000000E+00; y[15] = 7.5000000E-01; y[16] = 1.0000000E+00; y[17] = 1.0000000E+00; y[18] = 7.5000000E-01; z[0] = 5.0000000E-01; z[1] = 5.0000000E-01; z[2] = 5.0000000E-01; z[3] = 5.0000000E-01; z[4] = 5.0000000E-01; z[5] = 1.0000000E+00; z[6] = 1.0000000E+00; z[7] = 1.0000000E+00; z[8] = 7.5000000E-01; z[9] = 1.0000000E+00; z[10] = 1.0000000E+00; z[11] = 7.5000000E-01; z[12] = 1.0000000E+00; z[13] = 1.0000000E+00; z[14] = 1.0000000E+00; z[15] = 1.0000000E+00; z[16] = 7.5000000E-01; z[17] = 7.5000000E-01; z[18] = 7.5000000E-01; error = ex_put_coord (exoid, x, y, z); assert(error == 0); coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names (exoid, coord_names); assert(error == 0); /* write element block parameters */ num_elem_in_block[0] = 12; num_nodes_per_elem[0] = 4; ebids[0] = 10; num_attr[0] = 3; error = ex_put_elem_block (exoid, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], num_attr[0]); assert(error == 0); /* write element connectivity */ connect = (int *) calloc(num_elem_in_block[0] * num_nodes_per_elem[0], sizeof(int)); connect[ 0] = 1; connect[ 1] = 4; connect[ 2] = 19; connect[ 3] = 9; connect[ 4] = 4; connect[ 5] = 3; connect[ 6] = 17; connect[ 7] = 19; connect[ 8] = 3; connect[ 9] = 5; connect[10] = 18; connect[11] = 17; connect[12] = 5; connect[13] = 2; connect[14] = 12; connect[15] = 18; connect[16] = 9; connect[17] = 19; connect[18] = 14; connect[19] = 7; connect[20] = 7; connect[21] = 14; connect[22] = 16; connect[23] = 8; connect[24] = 19; connect[25] = 17; connect[26] = 13; connect[27] = 14; connect[28] = 17; connect[29] = 18; connect[30] = 15; connect[31] = 13; connect[32] = 14; connect[33] = 13; connect[34] = 15; connect[35] = 16; connect[36] = 8; connect[37] = 16; connect[38] = 11; connect[39] = 6; connect[40] = 18; connect[41] = 12; connect[42] = 10; connect[43] = 15; connect[44] = 16; connect[45] = 15; connect[46] = 10; connect[47] = 11; error = ex_put_elem_conn (exoid, ebids[0], connect); assert(error == 0); free (connect); /* write element block attributes (3 per block) */ attrib = (float *) calloc(num_elem_in_block[0] * num_attr[0], sizeof(float)); #if 0 { k = 0; for (i=0; i < num_elem_in_block[0]; i++) { for (j = 0; j < num_attr[0]; j++) { attrib[k++] = 10*(i+1) + j+1; } } } error = ex_put_elem_attr (exoid, ebids[0], &attrib[0]); assert(error == 0); #else { for (j = 0; j < num_attr[0]; j++) { for (i=0; i < num_elem_in_block[0]; i++) { attrib[i] = 10*(i+1) + j+1; } error = ex_put_one_elem_attr (exoid, ebids[0], j+1, &attrib[0]); assert(error == 0); } } #endif free(attrib); /* close the EXODUS files */ error = ex_close (exoid); assert(error == 0); /* Reopen the file and read the attributes to see if they were written correctly */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 0; /* use what is stored in file */ /* open EXODUS II files */ exoid = ex_open ("test.exo", /* filename path */ EX_READ, /* access mode = READ */ &CPU_word_size, /* CPU word size */ &IO_word_size, /* IO word size */ &version); /* ExodusII library version */ assert(exoid >= 0); if (exoid < 0) exit(1); error = ex_get_init (exoid, title, &num_dim, &num_nodes, &num_elem, &num_elem_blk, &num_node_sets, &num_side_sets); assert(error == 0); if (num_elem_blk > 0) { error = ex_get_elem_blk_ids (exoid, ids); assert(error == 0); for (i=0; i<num_elem_blk; i++) { error = ex_get_elem_block (exoid, ids[i], elem_type, &(num_elem_in_block[i]), &(num_nodes_per_elem[i]), &(num_attr[i])); assert(error == 0); } /* read element block attributes */ attrib = (float *) calloc(num_elem_in_block[0],sizeof(float)); for (j = 0; j < num_attr[0]; j++) { error = ex_get_one_elem_attr (exoid, ids[0], j+1, &attrib[0]); assert(error == 0); if (error == 0) { for (i=0; i < num_elem_in_block[0]; i++) { assert(attrib[i] == 10*(i+1) + j+1); } } } free (attrib); } error = ex_close (exoid); assert(error == 0); return 0; }
bool Excn::ExodusFile::create_output(const SystemInterface& si, int cycle) // Create output file... { std::string curdir = si.cwd(); std::string file_prefix = si.basename(); std::string output_suffix = si.output_suffix(); outputFilename_ = file_prefix; if (!output_suffix.empty()) { outputFilename_ += "." + output_suffix; } if(curdir.length() && outputFilename_[0] != '/') { outputFilename_ = curdir + "/" + outputFilename_; } if (si.subcycle() > 1) { Excn::ParallelDisks::Create_IO_Filename(outputFilename_, cycle, si.subcycle()); } // See if output file should be opened in netcdf4 format... // Did user specify it via -netcdf4 or -large_model argument... int mode = 0; if (si.use_netcdf4()) { mode |= EX_NETCDF4; } else if (ex_large_model(fileids_[0]) == 1) { mode |= EX_LARGE_MODEL; } mode |= mode64bit_; if (si.int64()) { mode |= EX_ALL_INT64_DB; mode |= EX_ALL_INT64_API; } if (si.append()) { std::cout << "Output: '" << outputFilename_ << "' (appending)" << std::endl; float version = 0.0; mode |= EX_WRITE; outputId_ = ex_open(outputFilename_.c_str(), mode, &cpuWordSize_, &ioWordSize_, &version); } else { mode |= EX_CLOBBER; if (si.compress_data() > 0) { // Force netcdf-4 if compression is specified... mode |= EX_NETCDF4; } std::cout << "Output: '" << outputFilename_ << "'" << std::endl; outputId_ = ex_create(outputFilename_.c_str(), mode, &cpuWordSize_, &ioWordSize_); } if (outputId_ < 0) { std::cerr << "Cannot open file '" << outputFilename_ << "'" << std::endl; return false; } if (si.compress_data() > 0) { ex_set_option(outputId_, EX_OPT_COMPRESSION_LEVEL, si.compress_data()); ex_set_option(outputId_, EX_OPT_COMPRESSION_SHUFFLE, 1); } // EPU Can add a name of "processor_id_epu" which is 16 characters long. // Make sure maximumNameLength_ is at least that long... if (maximumNameLength_ < 16) maximumNameLength_ = 16; ex_set_option(outputId_, EX_OPT_MAX_NAME_LENGTH, maximumNameLength_); int int_size = si.int64() ? 8 : 4; std::cout << "IO Word sizes: " << ioWordSize_ << " bytes floating point and " << int_size << " bytes integer.\n"; return true; }
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_block[10], num_total_faces_per_blk[10]; int num_node_sets, error; int i, j, *connect; int bids, nnpe[20]; int num_qa_rec, num_info; int CPU_word_size,IO_word_size; float x[100], y[100], z[100]; char *coord_names[3], *qa_record[2][4], *info[3]; char *block_names[10]; 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-nfaced.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 */ { ex_init_params par; num_dim = 3; num_nodes = 14; num_elem = 3; num_elem_blk = 1; num_node_sets = 0; strcpy( par.title, title ); par.num_dim = num_dim; par.num_nodes = num_nodes; par.num_edge = 0; par.num_edge_blk = 0; par.num_face = 15; par.num_face_blk = 1; par.num_elem = num_elem; par.num_elem_blk = num_elem_blk; par.num_node_sets = num_node_sets; par.num_edge_sets = 0; par.num_face_sets = 0; par.num_side_sets = 0; par.num_elem_sets = 0; par.num_node_maps = 0; par.num_edge_maps = 0; par.num_face_maps = 0; par.num_elem_maps = 0; error = ex_put_init_ext (exoid, &par); printf ("after ex_put_init_ext, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write nodal coordinates values and names to database */ x[ 0] = 0.00000e+00 ; y[ 0] = 0.00000e+00 ; z[ 0] = 0.00000e+00 ; x[ 1] = 2.00000e+00 ; y[ 1] = 0.00000e+00 ; z[ 1] = 0.00000e+00 ; x[ 2] = 0.00000e+00 ; y[ 2] = 2.00000e+00 ; z[ 2] = 0.00000e+00 ; x[ 3] = 2.00000e+00 ; y[ 3] = 2.00000e+00 ; z[ 3] = 0.00000e+00 ; x[ 4] = 0.00000e+00 ; y[ 4] = 0.00000e+00 ; z[ 4] = 2.00000e+00 ; x[ 5] = 2.00000e+00 ; y[ 5] = 0.00000e+00 ; z[ 5] = 2.00000e+00 ; x[ 6] = 0.00000e+00 ; y[ 6] = 2.00000e+00 ; z[ 6] = 2.00000e+00 ; x[ 7] = 2.00000e+00 ; y[ 7] = 2.00000e+00 ; z[ 7] = 2.00000e+00 ; x[ 8] = 0.00000e+00 ; y[ 8] = 3.50000e+00 ; z[ 8] = 1.00000e+00 ; x[ 9] = 2.00000e+00 ; y[ 9] = 3.50000e+00 ; z[ 9] = 1.00000e+00 ; x[10] = 0.00000e+00 ; y[10] = 3.00000e+00 ; z[10] = 1.50000e+00 ; x[11] = 2.00000e+00 ; y[11] = 3.00000e+00 ; z[11] = 1.50000e+00 ; x[12] = 0.00000e+00 ; y[12] = 3.00000e+00 ; z[12] = 0.50000e+00 ; x[13] = 2.00000e+00 ; y[13] = 3.00000e+00 ; z[13] = 0.50000e+00 ; 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] = "x"; coord_names[1] = "y"; coord_names[2] = "z"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write the face block parameters */ block_names[0] = "face_block_1"; num_face_in_block[0] = 15; num_total_nodes_per_blk[0] = 58; bids = 10; error = ex_put_block (exoid, EX_FACE_BLOCK, bids, "nsided", num_face_in_block[0], num_total_nodes_per_blk[0], 0, 0, 0); printf ("after ex_put_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write face block names */ error = ex_put_names(exoid, EX_FACE_BLOCK, block_names); printf ("after ex_put_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write face connectivity */ connect = (int *) calloc(num_total_nodes_per_blk[0], sizeof(int)); i = 0; j = 0; connect[i++] = 5; connect[i++] = 6; connect[i++] = 8; /* connectivity of face 1 of element 1 */ nnpe[j++] = 3; connect[i++] = 2; connect[i++] = 1; connect[i++] = 4; /* face 2 of element 1 */ nnpe[j++] = 3; connect[i++] = 6; connect[i++] = 2; connect[i++] = 4; connect[i++] = 8; /* face 3 of element 1 */ nnpe[j++] = 4; connect[i++] = 8; connect[i++] = 4; connect[i++] = 1; connect[i++] = 5; /* face 4 of element 1 */ nnpe[j++] = 4; connect[i++] = 1; connect[i++] = 2; connect[i++] = 6; connect[i++] = 5; /* face 5 of element 1 */ nnpe[j++] = 4; connect[i++] = 5; connect[i++] = 8; connect[i++] = 7; /* connectivity of face 1 of element 2 */ nnpe[j++] = 3; connect[i++] = 1; connect[i++] = 3; connect[i++] = 4; /* face 2 of element 2 */ nnpe[j++] = 3; connect[i++] = 7; connect[i++] = 8; connect[i++] = 4; connect[i++] = 3; /* face 3 of element 2 */ nnpe[j++] = 4; connect[i++] = 7; connect[i++] = 3; connect[i++] = 1; connect[i++] = 5; /* face 4 of element 2 */ nnpe[j++] = 4; connect[i++] = 8; connect[i++] = 4; connect[i++] = 14; connect[i++] = 10; connect[i++] = 12; /* connectivity of face 1 of element 3 */ nnpe[j++] = 5; connect[i++] = 7; connect[i++] = 11; connect[i++] = 9; connect[i++] = 13; connect[i++] = 3; /* face 2 of element 3 */ nnpe[j++] = 5; connect[i++] = 7; connect[i++] = 8; connect[i++] = 12; connect[i++] = 11; /* face 3 of element 3 */ nnpe[j++] = 4; connect[i++] = 11; connect[i++] = 12; connect[i++] = 10; connect[i++] = 9; /* face 4 of element 3 */ nnpe[j++] = 4; connect[i++] = 9; connect[i++] = 10; connect[i++] = 14; connect[i++] = 13; /* face 5 of element 3 */ nnpe[j++] = 4; connect[i++] = 13; connect[i++] = 14; connect[i++] = 4; connect[i++] = 3; /* face 6 of element 3 */ nnpe[j++] = 4; assert(i == num_total_nodes_per_blk[0]); assert(j == num_face_in_block[0]); error = ex_put_conn (exoid, EX_FACE_BLOCK, bids, connect, NULL, NULL); printf ("after ex_put_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (connect); connect = NULL; error = ex_put_entity_count_per_polyhedra(exoid, EX_FACE_BLOCK, bids, nnpe); printf ("after ex_put_entity_count_per_polyhedra, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element block parameters */ block_names[0] = "nfaced_1"; num_elem_in_block[0] = 3; num_total_faces_per_blk[0] = 5 + 5 + 7; bids = 10; error = ex_put_block (exoid, EX_ELEM_BLOCK, bids, "nfaced", num_elem_in_block[0], 0, 0, num_total_faces_per_blk[0], 0); 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-face connectivity */ connect = (int *) calloc(num_total_faces_per_blk[0], sizeof(int)); i = 0; j = 0; connect[i++] = 1; connect[i++] = 2; connect[i++] = 3; connect[i++] = 4; connect[i++] = 5; nnpe[j++] = 5; /* Number of faces per element 1 */ connect[i++] = 4; connect[i++] = 6; connect[i++] = 7; connect[i++] = 8; connect[i++] = 9; nnpe[j++] = 5; /* Number of faces per element 2 */ connect[i++] = 8; connect[i++] = 10; connect[i++] = 11; connect[i++] = 12; connect[i++] = 13; connect[i++] = 14; connect[i++] = 15; nnpe[j++] = 7; /* Number of faces per element 3 */ assert(i == num_total_faces_per_blk[0]); assert(j == num_elem_in_block[0]); error = ex_put_conn (exoid, EX_ELEM_BLOCK, bids, NULL, NULL, connect); printf ("after ex_put_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, bids, nnpe); printf ("after ex_put_entity_count_per_polyhedra, 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-NFACED"; qa_record[0][1] = "testwt-nfaced"; qa_record[0][2] = "2010/02/15"; qa_record[0][3] = "06:35:15"; 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); } /* close the EXODUS files */ error = ex_close (exoid); printf ("after ex_close, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } return 0; }
int main(int argc, char **argv) { int exoid, exoid2, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block, num_node_sets, num_nodes_per_elem, num_attr; int num_side_sets, error; int i, j; int *elem_map, *connect, *node_list, *node_ctr_list, *elem_list, *side_list; int *ids; int num_nodes_in_set, num_elem_in_set; int num_sides_in_set, num_df_in_set; int num_qa_rec, num_info; int CPU_word_size, IO_word_size; int num_props, prop_value, *prop_values; float *x, *y, *z; float *dist_fact; float version, fdum; float attrib[1]; char *coord_names[3], *qa_record[2][4], *info[3]; char title[MAX_LINE_LENGTH + 1], elem_type[MAX_STR_LENGTH + 1]; char *prop_names[3]; char *cdum = 0; /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* float */ /* open EXODUS II file for reading */ ex_opts(EX_VERBOSE | EX_ABORT); exoid = ex_open("test.exo", /* filename path */ EX_READ, /* access mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size, /* I/O float word size in bytes */ &version); /* returned version number */ printf("after ex_open for test.exo\n"); printf(" cpu word size: %d io word size: %d\n", CPU_word_size, IO_word_size); /* create EXODUS II file for writing */ exoid2 = ex_create("test2.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf("after ex_create for test2.exo, exoid = %d\n", exoid2); /* read initialization parameters */ error = ex_get_init(exoid, title, &num_dim, &num_nodes, &num_elem, &num_elem_blk, &num_node_sets, &num_side_sets); printf("after ex_get_init, error = %d\n", error); /* write initialization parameters */ error = ex_put_init(exoid2, title, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf("after ex_put_init, error = %d\n", error); /* read nodal coordinate values */ x = (float *)calloc(num_nodes, sizeof(float)); y = (float *)calloc(num_nodes, sizeof(float)); if (num_dim >= 3) z = (float *)calloc(num_nodes, sizeof(float)); else z = 0; error = ex_get_coord(exoid, x, y, z); printf("\nafter ex_get_coord, error = %3d\n", error); /* write nodal coordinate values */ error = ex_put_coord(exoid2, x, y, z); printf("after ex_put_coord, error = %d\n", error); free(x); free(y); if (num_dim >= 3) free(z); /* read nodal coordinate names */ for (i = 0; i < num_dim; i++) { coord_names[i] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } error = ex_get_coord_names(exoid, coord_names); printf("\nafter ex_get_coord_names, error = %3d\n", error); /* write nodal coordinate names */ error = ex_put_coord_names(exoid2, coord_names); printf("after ex_put_coord_names, error = %d\n", error); for (i = 0; i < num_dim; i++) { free(coord_names[i]); } /* read element order map */ elem_map = (int *)calloc(num_elem, sizeof(int)); error = ex_get_map(exoid, elem_map); printf("\nafter ex_get_map, error = %3d\n", error); /* write element order map */ error = ex_put_map(exoid2, elem_map); printf("after ex_put_map, error = %d\n", error); free(elem_map); /* read and write element block parameters and element connectivity */ ids = (int *)calloc(num_elem_blk, sizeof(int)); error = ex_get_elem_blk_ids(exoid, ids); printf("\nafter ex_get_elem_blk_ids, error = %3d\n", error); attrib[0] = 3.14159; for (i = 0; i < num_elem_blk; i++) { error = ex_get_elem_block(exoid, ids[i], elem_type, &num_elem_in_block, &num_nodes_per_elem, &num_attr); printf("\nafter ex_get_elem_block, error = %d\n", error); error = ex_put_elem_block(exoid2, ids[i], elem_type, num_elem_in_block, num_nodes_per_elem, num_attr); printf("after ex_put_elem_block, error = %d\n", error); connect = (int *)calloc((num_nodes_per_elem * num_elem_in_block), sizeof(int)); error = ex_get_elem_conn(exoid, ids[i], connect); printf("\nafter ex_get_elem_conn, error = %d\n", error); error = ex_put_elem_conn(exoid2, ids[i], connect); printf("after ex_put_elem_conn, error = %d\n", error); /* write element block attributes */ error = ex_put_attr(exoid2, EX_ELEM_BLOCK, ids[i], attrib); printf("after ex_put_elem_attr, error = %d\n", error); free(connect); } /* read and write element block properties */ error = ex_inquire(exoid, EX_INQ_EB_PROP, &num_props, &fdum, cdum); printf("\nafter ex_inquire, error = %d\n", error); for (i = 0; i < num_props; i++) { prop_names[i] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } error = ex_get_prop_names(exoid, EX_ELEM_BLOCK, prop_names); printf("after ex_get_prop_names, error = %d\n", error); error = ex_put_prop_names(exoid2, EX_ELEM_BLOCK, num_props, prop_names); printf("after ex_put_prop_names, error = %d\n", error); for (i = 0; i < num_props; i++) { for (j = 0; j < num_elem_blk; j++) { error = ex_get_prop(exoid, EX_ELEM_BLOCK, ids[j], prop_names[i], &prop_value); printf("after ex_get_prop, error = %d\n", error); if (i > 0) { /* first property is the ID which is already stored */ error = ex_put_prop(exoid2, EX_ELEM_BLOCK, ids[j], prop_names[i], prop_value); printf("after ex_put_prop, error = %d\n", error); } } } for (i = 0; i < num_props; i++) free(prop_names[i]); free(ids); /* read and write individual node sets */ ids = (int *)calloc(num_node_sets, sizeof(int)); error = ex_get_node_set_ids(exoid, ids); printf("\nafter ex_get_node_set_ids, error = %3d\n", error); for (i = 0; i < num_node_sets; i++) { error = ex_get_node_set_param(exoid, ids[i], &num_nodes_in_set, &num_df_in_set); printf("\nafter ex_get_node_set_param, error = %3d\n", error); error = ex_put_node_set_param(exoid2, ids[i], num_nodes_in_set, num_df_in_set); printf("after ex_put_node_set_param, error = %d\n", error); node_list = (int *)calloc(num_nodes_in_set, sizeof(int)); dist_fact = (float *)calloc(num_nodes_in_set, sizeof(float)); error = ex_get_node_set(exoid, ids[i], node_list); printf("\nafter ex_get_node_set, error = %3d\n", error); error = ex_put_node_set(exoid2, ids[i], node_list); printf("after ex_put_node_set, error = %d\n", error); if (num_df_in_set > 0) { error = ex_get_node_set_dist_fact(exoid, ids[i], dist_fact); printf("\nafter ex_get_node_set_dist_fact, error = %3d\n", error); error = ex_put_node_set_dist_fact(exoid2, ids[i], dist_fact); printf("after ex_put_node_set, error = %d\n", error); } free(node_list); free(dist_fact); } free(ids); /* read node set properties */ error = ex_inquire(exoid, EX_INQ_NS_PROP, &num_props, &fdum, cdum); printf("\nafter ex_inquire, error = %d\n", error); for (i = 0; i < num_props; i++) { prop_names[i] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } prop_values = (int *)calloc(num_node_sets, sizeof(int)); error = ex_get_prop_names(exoid, EX_NODE_SET, prop_names); printf("after ex_get_prop_names, error = %d\n", error); error = ex_put_prop_names(exoid2, EX_NODE_SET, num_props, prop_names); printf("after ex_put_prop_names, error = %d\n", error); for (i = 0; i < num_props; i++) { error = ex_get_prop_array(exoid, EX_NODE_SET, prop_names[i], prop_values); printf("after ex_get_prop_array, error = %d\n", error); error = ex_put_prop_array(exoid2, EX_NODE_SET, prop_names[i], prop_values); printf("after ex_put_prop_array, error = %d\n", error); } for (i = 0; i < num_props; i++) free(prop_names[i]); free(prop_values); /* read and write individual side sets */ ids = (int *)calloc(num_side_sets, sizeof(int)); error = ex_get_side_set_ids(exoid, ids); printf("\nafter ex_get_side_set_ids, error = %3d\n", error); for (i = 0; i < num_side_sets; i++) { error = ex_get_side_set_param(exoid, ids[i], &num_sides_in_set, &num_df_in_set); printf("\nafter ex_get_side_set_param, error = %3d\n", error); error = ex_put_side_set_param(exoid2, ids[i], num_sides_in_set, num_df_in_set); printf("after ex_put_side_set_param, error = %d\n", error); /* Note: The # of elements is same as # of sides! */ num_elem_in_set = num_sides_in_set; elem_list = (int *)calloc(num_elem_in_set, sizeof(int)); side_list = (int *)calloc(num_sides_in_set, sizeof(int)); node_ctr_list = (int *)calloc(num_elem_in_set, sizeof(int)); node_list = (int *)calloc(num_elem_in_set * 21, sizeof(int)); dist_fact = (float *)calloc(num_df_in_set, sizeof(float)); error = ex_get_side_set(exoid, ids[i], elem_list, side_list); printf("\nafter ex_get_side_set, error = %3d\n", error); error = ex_put_side_set(exoid2, ids[i], elem_list, side_list); printf("after ex_put_side_set, error = %d\n", error); error = ex_get_side_set_node_list(exoid, ids[i], node_ctr_list, node_list); printf("\nafter ex_get_side_set_node_list, error = %3d\n", error); if (num_df_in_set > 0) { error = ex_get_side_set_dist_fact(exoid, ids[i], dist_fact); printf("\nafter ex_get_side_set_dist_fact, error = %3d\n", error); error = ex_put_side_set_dist_fact(exoid2, ids[i], dist_fact); printf("after ex_put_side_set_dist_fact, error = %d\n", error); } free(elem_list); free(side_list); free(node_ctr_list); free(node_list); free(dist_fact); } /* read side set properties */ error = ex_inquire(exoid, EX_INQ_SS_PROP, &num_props, &fdum, cdum); printf("\nafter ex_inquire, error = %d\n", error); for (i = 0; i < num_props; i++) { prop_names[i] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } error = ex_get_prop_names(exoid, EX_SIDE_SET, prop_names); printf("after ex_get_prop_names, error = %d\n", error); for (i = 0; i < num_props; i++) { for (j = 0; j < num_side_sets; j++) { error = ex_get_prop(exoid, EX_SIDE_SET, ids[j], prop_names[i], &prop_value); printf("after ex_get_prop, error = %d\n", error); if (i > 0) { /* first property is ID so it is already stored */ error = ex_put_prop(exoid2, EX_SIDE_SET, ids[j], prop_names[i], prop_value); printf("after ex_put_prop, error = %d\n", error); } } } for (i = 0; i < num_props; i++) free(prop_names[i]); free(ids); /* read and write QA records */ ex_inquire(exoid, EX_INQ_QA, &num_qa_rec, &fdum, cdum); for (i = 0; i < num_qa_rec; i++) { for (j = 0; j < 4; j++) { qa_record[i][j] = (char *)calloc((MAX_STR_LENGTH + 1), sizeof(char)); } } error = ex_get_qa(exoid, qa_record); printf("\nafter ex_get_qa, error = %3d\n", error); error = ex_put_qa(exoid2, num_qa_rec, qa_record); printf("after ex_put_qa, error = %d\n", error); for (i = 0; i < num_qa_rec; i++) { for (j = 0; j < 4; j++) { free(qa_record[i][j]); } } /* read and write information records */ error = ex_inquire(exoid, EX_INQ_INFO, &num_info, &fdum, cdum); printf("\nafter ex_inquire, error = %3d\n", error); for (i = 0; i < num_info; i++) { info[i] = (char *)calloc((MAX_LINE_LENGTH + 1), sizeof(char)); } error = ex_get_info(exoid, info); printf("\nafter ex_get_info, error = %3d\n", error); error = ex_put_info(exoid2, num_info, info); printf("after ex_put_info, error = %d\n", error); for (i = 0; i < num_info; i++) { free(info[i]); } /* close the EXODUS files */ error = ex_close(exoid); printf("after ex_close, error = %d\n", error); error = ex_close(exoid2); printf("after ex_close (2), error = %d\n", error); return 0; }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_total_nodes_per_blk[10]; int num_face_in_block[10], num_total_faces_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 bids[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 *prop_names[2], *attrib_names[2]; char *title = "This is a test"; ex_opts (EX_VERBOSE | EX_ABORT ); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test-nfaced.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); /* ncopts = NC_VERBOSE; */ /* initialize file with parameters */ { ex_init_params par; num_dim = 3; num_nodes = 14; num_elem = 1; num_elem_blk = 1; num_node_sets = 0; strcpy( par.title, title ); par.num_dim = num_dim; par.num_nodes = num_nodes; par.num_edge = 0; par.num_edge_blk = 0; par.num_face = 5; par.num_face_blk = 1; par.num_elem = num_elem; par.num_elem_blk = num_elem_blk; par.num_node_sets = num_node_sets; par.num_edge_sets = 0; par.num_face_sets = 0; par.num_side_sets = 0; par.num_elem_sets = 0; par.num_node_maps = 0; par.num_edge_maps = 0; par.num_face_maps = 0; par.num_elem_maps = 0; error = ex_put_init_ext (exoid, &par); printf ("after ex_put_init_ext, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write nodal coordinates values and names to database */ x[ 0] = 0.00000e+00 ; y[ 0] = 0.00000e+00 ; z[ 0] = 0.00000e+00 ; x[ 1] = 2.00000e+00 ; y[ 1] = 0.00000e+00 ; z[ 1] = 0.00000e+00 ; x[ 2] = 0.00000e+00 ; y[ 2] = 2.00000e+00 ; z[ 2] = 0.00000e+00 ; x[ 3] = 2.00000e+00 ; y[ 3] = 2.00000e+00 ; z[ 3] = 0.00000e+00 ; x[ 4] = 0.00000e+00 ; y[ 4] = 0.00000e+00 ; z[ 4] = 2.00000e+00 ; x[ 5] = 2.00000e+00 ; y[ 5] = 0.00000e+00 ; z[ 5] = 2.00000e+00 ; x[ 6] = 0.00000e+00 ; y[ 6] = 2.00000e+00 ; z[ 6] = 2.00000e+00 ; x[ 7] = 2.00000e+00 ; y[ 7] = 2.00000e+00 ; z[ 7] = 2.00000e+00 ; x[ 8] = 0.00000e+00 ; y[ 8] = 3.50000e+00 ; z[ 8] = 1.00000e+00 ; x[ 9] = 2.00000e+00 ; y[ 9] = 3.50000e+00 ; z[ 9] = 1.00000e+00 ; x[10] = 0.00000e+00 ; y[10] = 3.00000e+00 ; z[10] = 1.50000e+00 ; x[11] = 2.00000e+00 ; y[11] = 3.00000e+00 ; z[11] = 1.50000e+00 ; x[12] = 0.00000e+00 ; y[12] = 3.00000e+00 ; z[12] = 0.50000e+00 ; x[13] = 2.00000e+00 ; y[13] = 3.00000e+00 ; z[13] = 0.50000e+00 ; 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] = "x"; coord_names[1] = "y"; coord_names[2] = "z"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write the face block parameters */ block_names[0] = "face_block_1"; num_face_in_block[0] = 15; num_total_nodes_per_blk[0] = 54; bids[0] = 10; error = ex_put_block (exoid, EX_FACE_BLOCK, bids[0], "nsided", num_face_in_block[0], num_total_nodes_per_blk[0], 0, 0, 0); printf ("after ex_put_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write face connectivity */ connect = (int *) calloc(num_total_nodes_per_blk[0], sizeof(int)); i = 0; j = 0; connect[i++] = 5; connect[i++] = 6; connect[i++] = 8; /* connectivity of face 1 of element 1 */ connect[i++] = 2; connect[i++] = 1; connect[i++] = 4; /* face 2 of element 1 */ connect[i++] = 6; connect[i++] = 2; connect[i++] = 4; connect[i++] = 8; /* face 3 of element 1 */ connect[i++] = 8; connect[i++] = 4; connect[i++] = 1; connect[i++] = 5; /* face 4 of element 1 */ connect[i++] = 1; connect[i++] = 2; connect[i++] = 6; connect[i++] = 5; /* face 5 of element 1 */ connect[i++] = 5; connect[i++] = 8; connect[i++] = 7; /* connectivity of face 1 of element 2 */ connect[i++] = 1; connect[i++] = 2; connect[i++] = 3; connect[i++] = 4; nnpe[j++] = 4; connect[i++] = 5; connect[i++] = 3; connect[i++] = 4; connect[i++] = 6; nnpe[j++] = 4; connect[i++] = 5; connect[i++] = 1; connect[i++] = 2; connect[i++] = 6; nnpe[j++] = 4; connect[i++] = 6; connect[i++] = 2; connect[i++] = 4; nnpe[j++] = 3; connect[i++] = 5; connect[i++] = 3; connect[i++] = 1; nnpe[j++] = 3; assert(i == num_total_nodes_per_blk[0]); assert(j == num_face_in_block[0]); error = ex_put_conn (exoid, EX_FACE_BLOCK, bids[0], connect, NULL, NULL); printf ("after ex_put_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (connect); connect = NULL; error = ex_put_entity_count_per_polyhedra(exoid, EX_FACE_BLOCK, bids[0], nnpe); printf ("after ex_put_entity_count_per_polyhedra, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element block parameters */ block_names[0] = "nfaced_1"; num_elem_in_block[0] = 1; num_total_nodes_per_blk[0] = 6; /* Do we need this; does it make sense... */ num_total_faces_per_blk[0] = 5; bids[0] = 10; error = ex_put_block (exoid, EX_ELEM_BLOCK, bids[0], "nfaced", num_elem_in_block[0], 0, 0, num_total_faces_per_blk[0], 0); printf ("after ex_put_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Write face block names */ error = ex_put_names(exoid, EX_FACE_BLOCK, block_names); printf ("after ex_put_names, 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-face connectivity */ connect = (int *) calloc(num_total_faces_per_blk[0], sizeof(int)); i = 0; j = 0; connect[i++] = 1; connect[i++] = 2; connect[i++] = 3; connect[i++] = 4; connect[i++] = 5; nnpe[j++] = 5; /* Number of faces per element */ assert(i == num_total_faces_per_blk[0]); assert(j == num_elem_in_block[0]); error = ex_put_conn (exoid, EX_ELEM_BLOCK, bids[0], NULL, NULL, connect); printf ("after ex_put_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, bids[0], nnpe); printf ("after ex_put_entity_count_per_polyhedra, 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-NFACED"; qa_record[0][1] = "testwt-nfaced"; qa_record[0][2] = "2010/02/15"; qa_record[0][3] = "06:35:15"; 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_var_param (exoid, "g", num_glo_vars); printf ("after ex_put_var_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_var_names (exoid, "g", num_glo_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } num_nod_vars = 2; /* 12345678901234567890123456789012 */ var_names[0] = "node_variable_a_very_long_name_0"; var_names[1] = "n"; error = ex_put_var_param (exoid, "n", num_nod_vars); printf ("after ex_put_var_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_var_names (exoid, "n", num_nod_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } num_ele_vars = 3; var_names[0] = "ele_var0"; var_names[1] = "ele_var1"; var_names[2] = "ele_var2"; error = ex_put_var_param (exoid, "e", num_ele_vars); printf ("after ex_put_var_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_var_names (exoid, "e", num_ele_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element variable truth table */ truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int)); k = 0; for (i=0; i<num_elem_blk; i++) { for (j=0; j<num_ele_vars; j++) { truth_tab[k++] = 1; } } error = ex_put_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab); printf ("after ex_put_elem_var_tab, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (truth_tab); /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, CPU_word_size); nodal_var_vals = (float *) calloc (num_nodes, CPU_word_size); elem_var_vals = (float *) calloc (8, CPU_word_size); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal variables */ for (k=1; k<=num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nodal_var_vals[j] = (float)k + ((float)(j+1) * time_value); } error = ex_put_nodal_var (exoid, whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write element variables */ for (k=1; k<=num_ele_vars; k++) { for (j=0; j<num_elem_blk; j++) { for (m=0; m<num_elem_in_block[j]; m++) { elem_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); /* printf("elem_var_vals[%d]: %f\n",m,elem_var_vals[m]); */ } error = ex_put_elem_var (exoid, whole_time_step, k, bids[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); } } } 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); /* 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 num_elem_in_block[10], num_nodes_per_elem[10], num_attr[10]; int num_node_sets, num_side_sets, error; int i, j, k, m, *elem_map, *connect, *node_map; int node_list[100], elem_list[100], side_list[100]; int ebids[10], ids[10]; int num_nodes_per_set[10], num_elem_per_set[10]; int num_df_per_set[10]; int df_ind[10], node_ind[10], elem_ind[10]; int num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_vars; 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 x[100], y[100], z[100]; float attrib[100], dist_fact[100]; char * coord_names[3], *qa_record[2][4], *info[3], *var_names[3]; char * prop_names[2]; ex_opts(EX_VERBOSE | EX_ABORT); /* Specify compute and i/o word size */ CPU_word_size = 0; /* float or double */ IO_word_size = 0; /* use system default (4 bytes) */ /* create EXODUS II file */ exoid = ex_create("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf("after ex_create for test.exo, exoid = %d\n", exoid); printf(" cpu word size: %d io word size: %d\n", CPU_word_size, IO_word_size); /* initialize file with parameters */ num_dim = 3; num_nodes = 28; num_elem = 8; num_elem_blk = 7; num_node_sets = 2; num_side_sets = 5; /* num_side_sets = 6; Uncomment to test NULL side sets */ error = ex_put_init(exoid, "This is testwt1", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf("after ex_put_init, error = %d\n", error); /* write nodal coordinates values and names to database */ /* 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; /* Circle #1 */ x[20] = 100.0; y[20] = 100.0; z[20] = 0.0; /* Sphere #1 */ x[21] = 50.0; y[21] = 50.0; z[21] = 20.0; /* Wedge #1 */ x[22] = 3.0; y[22] = 0.0; z[22] = 6.0; x[23] = 6.0; y[23] = 0.0; z[23] = 0.0; x[24] = 0.0; y[24] = 0.0; z[24] = 0.0; x[25] = 3.0; y[25] = 2.0; z[25] = 6.0; x[26] = 6.0; y[26] = 2.0; z[26] = 2.0; x[27] = 0.0; y[27] = 2.0; z[27] = 0.0; error = ex_put_coord(exoid, x, y, z); printf("after ex_put_coord, error = %d\n", error); coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names(exoid, coord_names); printf("after ex_put_coord_names, error = %d\n", error); /* write element order map */ elem_map = (int *)calloc(num_elem, sizeof(int)); for (i = 1; i <= num_elem; i++) { elem_map[i - 1] = i; } error = ex_put_map(exoid, elem_map); printf("after ex_put_map, error = %d\n", error); free(elem_map); /* write element numbering map */ elem_map = (int *)calloc(num_elem, sizeof(int)); for (i = 1; i <= num_elem; i++) { elem_map[i - 1] = i * 2; } error = ex_put_id_map(exoid, EX_ELEM_MAP, elem_map); printf("after ex_put_elem_num_map, error = %d\n", error); free(elem_map); /* write node numbering map */ node_map = (int *)calloc(num_nodes, sizeof(int)); for (i = 1; i <= num_nodes; i++) { node_map[i - 1] = i * 3; } error = ex_put_id_map(exoid, EX_NODE_MAP, node_map); printf("after ex_put_node_num_map, error = %d\n", error); free(node_map); /* write element block parameters */ num_elem_in_block[0] = 1; /* element 1: Quad 1 */ num_elem_in_block[1] = 2; /* elements 2, 3: Quad 1 & 2 */ num_elem_in_block[2] = 1; /* element 4: Hex */ num_elem_in_block[3] = 1; /* element 5: Tetra */ num_elem_in_block[4] = 1; /* element 6: Circle */ num_elem_in_block[5] = 1; /* element 7: Sphere */ num_elem_in_block[6] = 1; /* element 8: Wedge */ 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] = 1; /* elements in block #4 are 1-node circles */ num_nodes_per_elem[5] = 1; /* elements in block #5 are 1-node spheres */ num_nodes_per_elem[6] = 6; /* elements in block #6 are 6-node wedges */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; ebids[5] = 15; ebids[6] = 16; num_attr[0] = 3; num_attr[1] = 3; num_attr[2] = 3; num_attr[3] = 3; num_attr[4] = 3; num_attr[5] = 3; num_attr[6] = 3; error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[0], "quad", num_elem_in_block[0], num_nodes_per_elem[0], 0, 0, num_attr[0]); 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, num_attr[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, num_attr[2]); 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, num_attr[3]); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[4], "circle", num_elem_in_block[4], num_nodes_per_elem[4], 0, 0, num_attr[4]); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[5], "sphere", num_elem_in_block[5], num_nodes_per_elem[5], 0, 0, num_attr[5]); printf("after ex_put_elem_block, error = %d\n", error); error = ex_put_block(exoid, EX_ELEM_BLOCK, ebids[6], "wedge", num_elem_in_block[6], num_nodes_per_elem[6], 0, 0, num_attr[6]); 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); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[5], "MATL", 60); printf("after ex_put_prop, error = %d\n", error); error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[6], "MATL", 70); printf("after ex_put_prop, error = %d\n", error); /* write element connectivity */ connect = (int *)calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_conn(exoid, EX_ELEM_BLOCK, ebids[0], connect, NULL, NULL); printf("after ex_put_elem_conn, error = %d\n", error); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; connect[4] = 5; connect[5] = 6; connect[6] = 7; connect[7] = 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; error = ex_put_conn(exoid, EX_ELEM_BLOCK, ebids[4], connect, NULL, NULL); printf("after ex_put_elem_conn, error = %d\n", error); connect[0] = 22; error = ex_put_conn(exoid, EX_ELEM_BLOCK, ebids[5], connect, NULL, NULL); printf("after ex_put_elem_conn, error = %d\n", error); connect[0] = 23; connect[1] = 24; connect[2] = 25; connect[3] = 26; connect[4] = 27; connect[5] = 28; error = ex_put_conn(exoid, EX_ELEM_BLOCK, ebids[6], connect, NULL, NULL); printf("after ex_put_elem_conn, error = %d\n", error); free(connect); /* write element block attributes (3 per block) */ attrib[0] = 1.0; attrib[1] = 2.0; attrib[2] = 3.0; attrib[3] = 1.11; attrib[4] = 2.11; attrib[5] = 3.11; attrib[6] = 1.12; attrib[7] = 2.12; attrib[8] = 3.12; attrib[9] = 1.2; attrib[10] = 2.2; attrib[11] = 3.2; attrib[12] = 1.3; attrib[13] = 2.3; attrib[14] = 3.3; attrib[15] = 1.4; attrib[16] = 2.4; attrib[17] = 3.4; attrib[18] = 1.5; attrib[19] = 2.5; attrib[20] = 3.5; attrib[21] = 1.6; attrib[22] = 2.6; attrib[23] = 3.6; error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[0], &attrib[0]); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[1], &attrib[3]); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[2], &attrib[9]); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[3], &attrib[12]); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[4], &attrib[15]); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[5], &attrib[18]); printf("after ex_put_elem_attr, error = %d\n", error); error = ex_put_attr(exoid, EX_ELEM_BLOCK, ebids[6], &attrib[21]); printf("after ex_put_elem_attr, error = %d\n", error); /* write individual node sets */ ids[0] = 20; ids[1] = 21; num_nodes_per_set[0] = 5; num_nodes_per_set[1] = 3; /* num_nodes_per_set[1] = 0; Uncomment to test NULL node sets */ 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; { struct ex_set_specs set_specs; set_specs.sets_ids = ids; set_specs.num_entries_per_set = num_nodes_per_set; set_specs.num_dist_per_set = num_df_per_set; set_specs.sets_entry_index = node_ind; set_specs.sets_dist_index = df_ind; set_specs.sets_entry_list = node_list; set_specs.sets_extra_list = NULL; set_specs.sets_dist_fact = dist_fact; error = ex_put_concat_sets(exoid, EX_NODE_SET, &set_specs); } 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); ids[0] = 30; ids[1] = 31; ids[2] = 32; ids[3] = 33; ids[4] = 34; ids[5] = 35; /* side set #1 - quad */ node_list[0] = 8; node_list[1] = 5; node_list[2] = 6; node_list[3] = 7; /* side set #2 - quad/hex, spanning 2 element types */ node_list[4] = 2; node_list[5] = 3; node_list[6] = 7; node_list[7] = 8; /* side set #3 - hex */ 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; /* side set #4 - tetras */ 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; /* side set #5 - circle and sphere */ node_list[48] = 21; node_list[49] = 22; /* side set #6 - wedges */ node_list[50] = 27; node_list[51] = 26; node_list[52] = 23; node_list[53] = 24; node_list[54] = 28; node_list[55] = 27; node_list[56] = 24; node_list[57] = 25; node_list[58] = 28; node_list[59] = 25; node_list[60] = 23; node_list[61] = 26; node_list[62] = 25; node_list[63] = 24; node_list[64] = 23; node_list[65] = 26; node_list[66] = 27; node_list[67] = 28; node_ind[0] = 0; node_ind[1] = 4; node_ind[2] = 8; node_ind[3] = 36; node_ind[4] = 47; node_ind[5] = 49; num_elem_per_set[0] = 2; /* two sides uses 2 elements */ num_elem_per_set[1] = 2; num_elem_per_set[2] = 7; num_elem_per_set[3] = 4; num_elem_per_set[4] = 2; num_elem_per_set[5] = 5; /* num_elem_per_set[5] = 0; Uncomment to test NULL side sets */ 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] = 2; num_nodes_per_set[5] = 18; elem_ind[0] = 0; elem_ind[1] = 2; elem_ind[2] = 4; elem_ind[3] = 11; elem_ind[4] = 15; elem_ind[5] = 17; elem_list[0] = 3; elem_list[1] = 3; /* side set 1: Quad #2 */ elem_list[2] = 1; elem_list[3] = 3; /* side set 2: Quad #1 & #2 */ elem_list[4] = 4; elem_list[5] = 4; /* side set 3: Hex */ elem_list[6] = 4; elem_list[7] = 4; elem_list[8] = 4; elem_list[9] = 4; elem_list[10] = 4; elem_list[11] = 5; elem_list[12] = 5; /* side set 4: Tetra */ elem_list[13] = 5; elem_list[14] = 5; elem_list[15] = 6; elem_list[16] = 7; /* side set 5: Circle & Sphere */ elem_list[17] = 8; elem_list[18] = 8; /* side set 6: Wedge */ elem_list[19] = 8; elem_list[20] = 8; elem_list[21] = 8; 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; num_df_per_set[5] = 0; df_ind[0] = 0; df_ind[1] = 4; /* side set #1 df */ dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; /* side set #2 df */ 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); /* write QA records */ num_qa_rec = 2; qa_record[0][0] = "TESTWT1"; qa_record[0][1] = "testwt1"; qa_record[0][2] = "03/16/94"; qa_record[0][3] = "15:41:33"; qa_record[1][0] = "FASTQ"; qa_record[1][1] = "fastq"; qa_record[1][2] = "07/07/93"; qa_record[1][3] = "16:41:33"; error = ex_put_qa(exoid, num_qa_rec, qa_record); printf("after ex_put_qa, error = %d\n", error); /* write information records */ num_info = 3; info[0] = "This is the first information record."; info[1] = "This is the second information record."; info[2] = "This is the third information record."; error = ex_put_info(exoid, num_info, info); printf("after ex_put_info, error = %d\n", error); /* write results variables parameters and names */ num_glo_vars = 1; var_names[0] = "glo vars"; error = ex_put_variable_param(exoid, EX_GLOBAL, num_glo_vars); printf("after ex_put_variable_param, error = %d\n", error); error = ex_put_variable_name(exoid, EX_GLOBAL, 1, var_names[0]); printf("after ex_put_variable_name, 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_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); /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *)calloc(num_glo_vars, CPU_word_size); nodal_var_vals = (float *)calloc(num_nodes, CPU_word_size); elem_var_vals = (float *)calloc(4, CPU_word_size); for (i = 0; i < num_time_steps; i++) { time_value = (float)(i + 1) / 100.; /* write time value */ error = ex_put_time(exoid, whole_time_step, &time_value); printf("after ex_put_time, error = %d\n", error); /* write global variables */ for (j = 0; j < num_glo_vars; j++) { glob_var_vals[j] = (float)(j + 2) * time_value; } error = ex_put_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); /* 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); } /* 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]); */ } if (k == 1 && j == 2) continue; /* skip element block 3, variable 1 */ else { 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); } } } whole_time_step++; /* update the data file; this should be done at the end of every time step * to ensure that no data is lost if the analysis dies */ error = ex_update(exoid); printf("after ex_update, error = %d\n", error); } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); /* close the EXODUS files */ error = ex_close(exoid); printf("after ex_close, error = %d\n", error); return 0; }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10]; int num_node_sets, num_side_sets, error; int i, j, k, kk, m, *elem_map, *connect; int node_list[100],elem_list[100],side_list[100]; int ebids[10], ssids[10], nsids[10], nattr[10]; int num_nodes_per_set[10], num_elem_per_set[10]; int num_df_per_set[10]; int num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_vars, num_nset_vars, num_sset_vars; int *truth_tab, *nset_tab, *sset_tab; int whole_time_step, num_time_steps; int CPU_word_size,IO_word_size; int prop_array[2]; float *glob_var_vals, *nodal_var_vals, *elem_var_vals, *nset_var_vals, *sset_var_vals; float time_value; float x[100], y[100], z[100]; float attrib[1], dist_fact[100]; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[7]; char *prop_names[2]; char *eb_type[10]; ex_opts (EX_VERBOSE|EX_ABORT); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); /* ncopts = NC_VERBOSE; */ /* initialize file with parameters */ num_dim = 3; num_nodes = 33; num_elem = 7; num_elem_blk = 7; num_node_sets = 2; num_side_sets = 5; error = ex_put_init (exoid, "This is a test", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal coordinates values and names to database */ /* Quad #1 */ x[0] = 0.0; y[0] = 0.0; z[0] = 0.0; x[1] = 1.0; y[1] = 0.0; z[1] = 0.0; x[2] = 1.0; y[2] = 1.0; z[2] = 0.0; x[3] = 0.0; y[3] = 1.0; z[3] = 0.0; /* Quad #2 */ x[4] = 1.0; y[4] = 0.0; z[4] = 0.0; x[5] = 2.0; y[5] = 0.0; z[5] = 0.0; x[6] = 2.0; y[6] = 1.0; z[6] = 0.0; x[7] = 1.0; y[7] = 1.0; z[7] = 0.0; /* Hex #1 */ x[8] = 0.0; y[8] = 0.0; z[8] = 0.0; x[9] = 10.0; y[9] = 0.0; z[9] = 0.0; x[10] = 10.0; y[10] = 0.0; z[10] =-10.0; x[11] = 1.0; y[11] = 0.0; z[11] =-10.0; x[12] = 1.0; y[12] = 10.0; z[12] = 0.0; x[13] = 10.0; y[13] = 10.0; z[13] = 0.0; x[14] = 10.0; y[14] = 10.0; z[14] =-10.0; x[15] = 1.0; y[15] = 10.0; z[15] =-10.0; /* Tetra #1 */ x[16] = 0.0; y[16] = 0.0; z[16] = 0.0; x[17] = 1.0; y[17] = 0.0; z[17] = 5.0; x[18] = 10.0; y[18] = 0.0; z[18] = 2.0; x[19] = 7.0; y[19] = 5.0; z[19] = 3.0; /* Wedge #1 */ x[20] = 3.0; y[20] = 0.0; z[20] = 6.0; x[21] = 6.0; y[21] = 0.0; z[21] = 0.0; x[22] = 0.0; y[22] = 0.0; z[22] = 0.0; x[23] = 3.0; y[23] = 2.0; z[23] = 6.0; x[24] = 6.0; y[24] = 2.0; z[24] = 2.0; x[25] = 0.0; y[25] = 2.0; z[25] = 0.0; /* Tetra #2 */ x[26] = 2.7; y[26] = 1.7; z[26] = 2.7; x[27] = 6.0; y[27] = 1.7; z[27] = 3.3; x[28] = 5.7; y[28] = 1.7; z[28] = 1.7; x[29] = 3.7; y[29] = 0.0; z[29] = 2.3; /* 3d Tri */ x[30] = 0.0; y[30] = 0.0; z[30] = 0.0; x[31] = 10.0; y[31] = 0.0; z[31] = 0.0; x[32] = 10.0; y[32] = 10.0; z[32] = 10.0; error = ex_put_coord (exoid, x, y, z); printf ("after ex_put_coord, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } coord_names[0] = "xcoor"; coord_names[1] = "ycoor"; coord_names[2] = "zcoor"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = i; } error = ex_put_map (exoid, elem_map); printf ("after ex_put_map, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (elem_map); /* write element block parameters */ num_elem_in_block[0] = 1; num_elem_in_block[1] = 1; num_elem_in_block[2] = 1; num_elem_in_block[3] = 1; num_elem_in_block[4] = 1; num_elem_in_block[5] = 1; num_elem_in_block[6] = 1; num_nodes_per_elem[0] = 4; /* elements in block #1 are 4-node quads */ num_nodes_per_elem[1] = 4; /* elements in block #2 are 4-node quads */ num_nodes_per_elem[2] = 8; /* elements in block #3 are 8-node hexes */ num_nodes_per_elem[3] = 4; /* elements in block #4 are 4-node tetras */ num_nodes_per_elem[4] = 6; /* elements in block #5 are 6-node wedges */ num_nodes_per_elem[5] = 8; /* elements in block #6 are 8-node tetras */ num_nodes_per_elem[6] = 3; /* elements in block #7 are 3-node tris */ ebids[0] = 10; ebids[1] = 11; ebids[2] = 12; ebids[3] = 13; ebids[4] = 14; ebids[5] = 15; ebids[6] = 16; nattr[0] = nattr[1] = nattr[2] = nattr[3] = 1; nattr[4] = nattr[5] = nattr[6] = 1; eb_type[0] = "quad"; eb_type[1] = "quad"; eb_type[2] = "hex"; eb_type[3] = "tetra"; eb_type[4] = "wedge"; eb_type[5] = "tetra"; eb_type[6] = "tri"; error = ex_put_concat_elem_block (exoid, ebids, eb_type, num_elem_in_block, num_nodes_per_elem, nattr, 0); printf ("after ex_put_concat_elem_block, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element block properties */ prop_names[0] = "MATL"; prop_names[1] = "DENSITY"; error = ex_put_prop_names(exoid,EX_ELEM_BLOCK,2,prop_names); printf ("after ex_put_prop_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[0], "MATL", 10); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[1], "MATL", 20); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[2], "MATL", 30); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[3], "MATL", 40); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[4], "MATL", 50); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[5], "MATL", 60); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[6], "MATL", 70); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write element connectivity */ connect = (int *) calloc(8, sizeof(int)); connect[0] = 1; connect[1] = 2; connect[2] = 3; connect[3] = 4; error = ex_put_elem_conn (exoid, ebids[0], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 5; connect[1] = 6; connect[2] = 7; connect[3] = 8; error = ex_put_elem_conn (exoid, ebids[1], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 9; connect[1] = 10; connect[2] = 11; connect[3] = 12; connect[4] = 13; connect[5] = 14; connect[6] = 15; connect[7] = 16; error = ex_put_elem_conn (exoid, ebids[2], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; error = ex_put_elem_conn (exoid, ebids[3], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 21; connect[1] = 22; connect[2] = 23; connect[3] = 24; connect[4] = 25; connect[5] = 26; error = ex_put_elem_conn (exoid, ebids[4], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 17; connect[1] = 18; connect[2] = 19; connect[3] = 20; connect[4] = 27; connect[5] = 28; connect[6] = 30; connect[7] = 29; error = ex_put_elem_conn (exoid, ebids[5], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } connect[0] = 31; connect[1] = 32; connect[2] = 33; error = ex_put_elem_conn (exoid, ebids[6], connect); printf ("after ex_put_elem_conn, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (connect); /* write element block attributes */ attrib[0] = 3.14159; error = ex_put_elem_attr (exoid, ebids[0], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } attrib[0] = 6.14159; error = ex_put_elem_attr (exoid, ebids[1], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[2], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[3], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[4], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[5], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_elem_attr (exoid, ebids[6], attrib); printf ("after ex_put_elem_attr, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write individual node sets */ nsids[0] = 20; nsids[1] = 21; num_nodes_per_set[0] = 5; num_nodes_per_set[1] = 3; num_df_per_set[0] = 5; num_df_per_set[1] = 3; error = ex_put_concat_node_sets (exoid, nsids, num_nodes_per_set, num_df_per_set, 0, 0, 0, 0); printf ("after ex_put_concat_node_sets, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } node_list[0] = 10; node_list[1] = 11; node_list[2] = 12; node_list[3] = 13; node_list[4] = 14; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; dist_fact[3] = 4.0; dist_fact[4] = 5.0; error = ex_put_node_set (exoid, 20, node_list); printf ("after ex_put_node_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_dist_fact (exoid, 20, dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } node_list[0] = 20; node_list[1] = 21; node_list[2] = 22; dist_fact[0] = 1.1; dist_fact[1] = 2.1; dist_fact[2] = 3.1; error = ex_put_node_set (exoid, 21, node_list); printf ("after ex_put_node_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_node_set_dist_fact (exoid, 21, dist_fact); printf ("after ex_put_node_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_NODE_SET, 20, "FACE", 4); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_NODE_SET, 21, "FACE", 5); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } prop_array[0] = 1000; prop_array[1] = 2000; error = ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array); printf ("after ex_put_prop_array, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* Define the sideset params at one time, then write individually */ ssids[0] = 30; ssids[1] = 31; ssids[2] = 32; ssids[3] = 33; ssids[4] = 34; num_elem_per_set[0] = 2; num_elem_per_set[1] = 2; num_elem_per_set[2] = 7; num_elem_per_set[3] = 8; num_elem_per_set[4] = 10; num_df_per_set[0] = 4; num_df_per_set[1] = 4; num_df_per_set[2] = 0; num_df_per_set[3] = 0; num_df_per_set[4] = 0; error = ex_put_concat_side_sets (exoid, ssids, num_elem_per_set, num_df_per_set, 0, 0, 0, 0, 0); printf ("after ex_put_concat_side_sets, error = %d\n", error); /* write individual side sets */ /* side set #1 - quad */ elem_list[0] = 2; elem_list[1] = 2; side_list[0] = 4; side_list[1] = 2; dist_fact[0] = 30.0; dist_fact[1] = 30.1; dist_fact[2] = 30.2; dist_fact[3] = 30.3; error = ex_put_side_set (exoid, 30, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 30, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #2 - quad, spanning 2 elements */ elem_list[0] = 1; elem_list[1] = 2; side_list[0] = 2; side_list[1] = 3; dist_fact[0] = 31.0; dist_fact[1] = 31.1; dist_fact[2] = 31.2; dist_fact[3] = 31.3; error = ex_put_side_set (exoid, 31, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_side_set_dist_fact (exoid, 31, dist_fact); printf ("after ex_put_side_set_dist_fact, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #3 - hex */ elem_list[0] = 3; elem_list[1] = 3; elem_list[2] = 3; elem_list[3] = 3; elem_list[4] = 3; elem_list[5] = 3; elem_list[6] = 3; side_list[0] = 5; side_list[1] = 3; side_list[2] = 3; side_list[3] = 2; side_list[4] = 4; side_list[5] = 1; side_list[6] = 6; error = ex_put_side_set (exoid, 32, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #4 - tetras */ elem_list[0] = 4; elem_list[1] = 4; elem_list[2] = 4; elem_list[3] = 4; elem_list[4] = 6; elem_list[5] = 6; elem_list[6] = 6; elem_list[7] = 6; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 1; side_list[5] = 2; side_list[6] = 3; side_list[7] = 4; error = ex_put_side_set (exoid, 33, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* side set #5 - wedges and tris */ elem_list[0] = 5; elem_list[1] = 5; elem_list[2] = 5; elem_list[3] = 5; elem_list[4] = 5; elem_list[5] = 7; elem_list[6] = 7; elem_list[7] = 7; elem_list[8] = 7; elem_list[9] = 7; side_list[0] = 1; side_list[1] = 2; side_list[2] = 3; side_list[3] = 4; side_list[4] = 5; side_list[5] = 1; side_list[6] = 2; side_list[7] = 3; side_list[8] = 4; side_list[9] = 5; error = ex_put_side_set (exoid, 34, elem_list, side_list); printf ("after ex_put_side_set, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_SIDE_SET, 30, "COLOR", 100); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_prop(exoid, EX_SIDE_SET, 31, "COLOR", 101); printf ("after ex_put_prop, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write QA records; test empty and just blank-filled records */ num_qa_rec = 2; qa_record[0][0] = "TESTWT"; qa_record[0][1] = "testwt"; qa_record[0][2] = "07/07/93"; qa_record[0][3] = "15:41:33"; qa_record[1][0] = ""; qa_record[1][1] = " "; qa_record[1][2] = ""; qa_record[1][3] = " "; error = ex_put_qa (exoid, num_qa_rec, qa_record); printf ("after ex_put_qa, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write information records; test empty and just blank-filled records */ num_info = 3; info[0] = "This is the first information record."; info[1] = ""; info[2] = " "; error = ex_put_info (exoid, num_info, info); printf ("after ex_put_info, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write results variables parameters and names */ num_glo_vars = 1; num_nod_vars = 2; num_ele_vars = 3; num_nset_vars = 4; num_sset_vars = 7; truth_tab = (int *) calloc ((num_elem_blk * num_ele_vars), sizeof(int)); nset_tab = (int *) calloc ((num_node_sets * num_nset_vars), sizeof(int)); sset_tab = (int *) calloc ((num_side_sets * num_sset_vars), sizeof(int)); k = 0; for (i=0; i<num_elem_blk; i++) { for (j=0; j<num_ele_vars; j++) { truth_tab[k++] = 1; } } k = 0; for (i=0; i<num_node_sets; i++) { for (j=0; j<num_nset_vars; j++) { if (k%2 == 0) nset_tab[k++] = 1; else nset_tab[k++] = 0; } } k = 0; for (i=0; i<num_side_sets; i++) { for (j=0; j<num_sset_vars; j++) { if (k%2 == 0) sset_tab[k++] = 0; else sset_tab[k++] = 1; } } ex_put_all_var_param(exoid, num_glo_vars, num_nod_vars, num_ele_vars, truth_tab, num_nset_vars, nset_tab, num_sset_vars, sset_tab); printf ("after ex_put_all_var_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } free (truth_tab); free (nset_tab); free (sset_tab); var_names[0] = "glo_vars"; error = ex_put_var_names (exoid, "g", num_glo_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* 12345678901234567890123456789012 */ var_names[0] = "node_variable_a_very_long_name_0"; var_names[1] = "nod_var1"; error = ex_put_var_names (exoid, "n", num_nod_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } var_names[0] = "ele_var0"; var_names[1] = "ele_var1"; var_names[2] = "ele_var2"; error = ex_put_var_names (exoid, "e", num_ele_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } var_names[0] = "nset_var0"; var_names[1] = "nset_var1"; var_names[2] = "nset_var2"; var_names[3] = "nset_var3"; error = ex_put_var_names (exoid, "m", num_nset_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } var_names[0] = "sset_var0"; var_names[1] = "sset_var1"; var_names[2] = "sset_var2"; var_names[3] = "sset_var3"; var_names[4] = "sset_var4"; var_names[5] = "sset_var5"; var_names[6] = "sset_var6"; error = ex_put_var_names (exoid, "s", num_sset_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* for each time step, write the analysis results; * the code below fills the arrays glob_var_vals, * nodal_var_vals, and elem_var_vals with values for debugging purposes; * obviously the analysis code will populate these arrays */ whole_time_step = 1; num_time_steps = 10; glob_var_vals = (float *) calloc (num_glo_vars, CPU_word_size); nodal_var_vals = (float *) calloc (num_nodes, CPU_word_size); elem_var_vals = (float *) calloc (4, CPU_word_size); nset_var_vals = (float *) calloc (5, CPU_word_size); sset_var_vals = (float *) calloc (10, CPU_word_size); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write nodal variables */ for (k=1; k<=num_nod_vars; k++) { for (j=0; j<num_nodes; j++) { nodal_var_vals[j] = (float)k + ((float)(j+1) * time_value); } error = ex_put_nodal_var (exoid, whole_time_step, k, num_nodes, nodal_var_vals); printf ("after ex_put_nodal_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } /* write element variables */ for (k=1; k<=num_ele_vars; k++) { for (j=0; j<num_elem_blk; j++) { for (m=0; m<num_elem_in_block[j]; m++) { elem_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); } error = ex_put_elem_var (exoid, whole_time_step, k, ebids[j], num_elem_in_block[j], elem_var_vals); printf ("after ex_put_elem_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } /* write nodeset variables */ kk = 0; for (j=0; j<num_node_sets; j++) { for (k=0; k<num_nset_vars; k++) { if (kk++ % 2 == 0) { for (m=0; m<num_nodes_per_set[j]; m++) { nset_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); } error = ex_put_nset_var (exoid, whole_time_step, k+1, nsids[j], num_nodes_per_set[j], nset_var_vals); printf ("after ex_put_nset_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } } /* write sideset variables */ kk = 0; for (j=0; j<num_side_sets; j++) { for (k=0; k<num_sset_vars; k++) { if (kk++ % 2 != 0) { for (m=0; m<num_elem_per_set[j]; m++) { sset_var_vals[m] = (float)(k+1) + (float)(j+2) + ((float)(m+1)*time_value); } error = ex_put_sset_var (exoid, whole_time_step, k+1, ssids[j], num_elem_per_set[j], sset_var_vals); printf ("after ex_put_sset_var, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } } } whole_time_step++; /* update the data file; this should be done at the end of every time step * to ensure that no data is lost if the analysis dies */ error = ex_update (exoid); printf ("after ex_update, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); free(nset_var_vals); free(sset_var_vals); /* close the EXODUS files */ error = ex_close (exoid); printf ("after ex_close, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } return 0; }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_elem_in_block[10], num_nodes_per_elem[10]; int num_nodes_in_nset[10]; int num_node_sets, num_side_sets; int i, j, k, m, *elem_map, *connect; int node_list[100]; int ebids[10], nsids[10]; int num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_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 *nset_var_vals; float time_value; float x[100]; float attrib[10], dist_fact[100]; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[3]; char *block_names[10], *nset_names[10]; char *prop_names[2], *attrib_names[2]; char *title = "This is a test"; ex_opts (EX_VERBOSE | EX_ABORT ); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("oned.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 */ printf ("after ex_create for oned.e, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); EXCHECK(ex_set_max_name_length(exoid, 40)); /* ncopts = NC_VERBOSE; */ /* initialize file with parameters */ num_dim = 1; num_nodes = 10; num_elem = 10; /* 9 lines plus a point */ num_elem_blk = 3; num_node_sets = 2; num_side_sets = 0; EXCHECK(ex_put_init (exoid, title, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets)); for (i=0; i < num_nodes; i++) { x[i] = exp((float)i/10.0); } EXCHECK(ex_put_coord (exoid, x, NULL, NULL)); coord_names[0] = "xcoor"; EXCHECK(ex_put_coord_names (exoid, coord_names)); /* Add nodal attributes */ EXCHECK(ex_put_attr_param(exoid, EX_NODAL, 0, 1)); EXCHECK(ex_put_one_attr(exoid, EX_NODAL, 0, 1, x)); attrib_names[0] = "Node_attr_1"; EXCHECK(ex_put_attr_names (exoid, EX_NODAL, 0, attrib_names)); /* write element order map */ elem_map = (int *) calloc(num_elem, sizeof(int)); for (i=1; i<=num_elem; i++) { elem_map[i-1] = 10*i; } EXCHECK(ex_put_map (exoid, elem_map)); free (elem_map); /* write element block parameters */ block_names[0] = "left_side"; block_names[1] = "right_side"; block_names[2] = "center"; num_elem_in_block[0] = 4; num_elem_in_block[1] = 5; num_elem_in_block[2] = 1; num_nodes_per_elem[0] = 2; num_nodes_per_elem[1] = 2; num_nodes_per_elem[2] = 1; ebids[0] = 10; ebids[1] = 20; ebids[2] = 30; EXCHECK(ex_put_elem_block (exoid, ebids[0], "line", num_elem_in_block[0], num_nodes_per_elem[0], 1)); EXCHECK(ex_put_elem_block (exoid, ebids[1], "line", num_elem_in_block[1], num_nodes_per_elem[1], 1)); EXCHECK(ex_put_elem_block (exoid, ebids[2], "point", num_elem_in_block[2], num_nodes_per_elem[2], 0)); /* Write element block names */ EXCHECK(ex_put_names(exoid, EX_ELEM_BLOCK, block_names)); /* write element block properties */ prop_names[0] = "DENSITY"; EXCHECK(ex_put_prop_names(exoid,EX_ELEM_BLOCK,1,prop_names)); EXCHECK(ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[0], prop_names[0], 1.345)); EXCHECK(ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[1], prop_names[0], 10.995)); EXCHECK(ex_put_prop(exoid, EX_ELEM_BLOCK, ebids[2], prop_names[0], 0.001)); /* write element connectivity */ connect = (int *) calloc(18, sizeof(int)); for (i=0; i < num_elem*2; i+=2) { connect[i] = i/2+1; connect[i+1] = i/2+2; } EXCHECK(ex_put_conn (exoid, EX_ELEM_BLOCK, ebids[0], connect, NULL, NULL)); EXCHECK(ex_put_conn (exoid, EX_ELEM_BLOCK, ebids[1], connect+8, NULL, NULL)); /* Circle */ connect[0] = 5; EXCHECK(ex_put_conn (exoid, EX_ELEM_BLOCK, ebids[2], connect, NULL, NULL)); /* write element block attributes */ for (i=0; i < num_elem; i++) { attrib[i] = 3.14159 * i; } EXCHECK(ex_put_attr (exoid, EX_ELEM_BLOCK, ebids[0], attrib)); EXCHECK(ex_put_attr (exoid, EX_ELEM_BLOCK, ebids[1], attrib+num_elem_in_block[0])); attrib_names[0] = "THICKNESS"; EXCHECK(ex_put_attr_names (exoid, EX_ELEM_BLOCK, ebids[0], attrib_names)); attrib_names[0] = "WIDTH"; EXCHECK(ex_put_attr_names (exoid, EX_ELEM_BLOCK, ebids[1], attrib_names)); /* write individual node sets */ num_nodes_in_nset[0] = 5; num_nodes_in_nset[1] = 3; nsids[0] = 20; nsids[1] = 21; EXCHECK(ex_put_node_set_param (exoid, nsids[0], 5, 5)); node_list[0] = 1; node_list[1] = 3; node_list[2] = 5; node_list[3] = 7; node_list[4] = 9; 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; EXCHECK(ex_put_node_set (exoid, nsids[0], node_list)); EXCHECK(ex_put_node_set_dist_fact (exoid, nsids[0], dist_fact)); EXCHECK(ex_put_node_set_param (exoid, nsids[1], 3, 3)); node_list[0] = 2; node_list[1] = 4; node_list[2] = 6; dist_fact[0] = 1.0; dist_fact[1] = 2.0; dist_fact[2] = 3.0; EXCHECK(ex_put_node_set (exoid, nsids[1], node_list)); EXCHECK(ex_put_node_set_dist_fact (exoid, nsids[1], dist_fact)); /* Write node set names */ nset_names[0] = "all_odd_nodes"; nset_names[1] = "some_even_nodes"; EXCHECK(ex_put_names(exoid, EX_NODE_SET, nset_names)); EXCHECK(ex_put_prop(exoid, EX_NODE_SET, nsids[0], "FACE", 4)); EXCHECK(ex_put_prop(exoid, EX_NODE_SET, nsids[1], "FACE", 5)); prop_array[0] = 1000; prop_array[1] = 2000; EXCHECK(ex_put_prop_array(exoid, EX_NODE_SET, "VELOCITY", prop_array)); /* Add nodeset attributes */ EXCHECK(ex_put_attr_param(exoid, EX_NODE_SET, nsids[0], 1)); EXCHECK(ex_put_attr(exoid, EX_NODE_SET, nsids[0], x)); attrib_names[0] = "Nodeset_attribute"; EXCHECK(ex_put_attr_names (exoid, EX_NODE_SET, nsids[0], attrib_names)); /* 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] = " "; EXCHECK(ex_put_qa (exoid, num_qa_rec, qa_record)); /* 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] = " "; EXCHECK(ex_put_info (exoid, num_info, info)); /* write results variables parameters and names */ num_glo_vars = 1; var_names[0] = "glo_vars"; EXCHECK(ex_put_variable_param (exoid, EX_GLOBAL, num_glo_vars)); EXCHECK(ex_put_variable_names (exoid, EX_GLOBAL, num_glo_vars, var_names)); num_nod_vars = 2; /* 12345678901234567890123456789012 */ var_names[0] = "node_variable_a_very_long_name_0"; var_names[1] = "nod_var1"; EXCHECK(ex_put_variable_param (exoid, EX_NODAL, num_nod_vars)); EXCHECK(ex_put_variable_names (exoid, EX_NODAL, num_nod_vars, var_names)); 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"; EXCHECK(ex_put_variable_param (exoid, EX_ELEM_BLOCK, num_ele_vars)); EXCHECK(ex_put_variable_names (exoid, EX_ELEM_BLOCK, num_ele_vars, var_names)); num_nset_vars = 3; var_names[0] = "ns_var0"; var_names[1] = "ns_var1"; var_names[2] = "ns_var2"; EXCHECK(ex_put_variable_param (exoid, EX_NODE_SET, num_nset_vars)); EXCHECK(ex_put_variable_names (exoid, EX_NODE_SET, num_nset_vars, var_names)); /* 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; } } EXCHECK(ex_put_truth_table(exoid, EX_ELEM_BLOCK, num_elem_blk, num_ele_vars, truth_tab)); 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; */ 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 (num_elem, 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 */ EXCHECK(ex_put_time (exoid, whole_time_step, &time_value)); /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } EXCHECK(ex_put_var (exoid, whole_time_step, EX_GLOBAL, 0, 0, num_glo_vars, glob_var_vals)); /* 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); } EXCHECK(ex_put_var (exoid, whole_time_step, EX_NODAL, k, 1, num_nodes, nodal_var_vals)); } /* 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); } EXCHECK(ex_put_var (exoid, whole_time_step, EX_ELEM_BLOCK, k, ebids[j], num_elem_in_block[j], elem_var_vals)); } } /* 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); } EXCHECK(ex_put_var (exoid, whole_time_step, EX_NODE_SET, k, nsids[j], num_nodes_in_nset[j], nset_var_vals)); } } 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 */ EXCHECK(ex_update (exoid)); } free(glob_var_vals); free(nodal_var_vals); free(elem_var_vals); free(nset_var_vals); /* close the EXODUS files */ EXCHECK(ex_close (exoid)); return 0; }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets; int num_side_sets, num_node_maps, num_elem_maps, error; int i, j, k, node_ctr; int *elem_map, *connect, *node_list, *node_ctr_list, *elem_list, *side_list; int *ids, *node_map; int *num_nodes_per_set, *num_elem_per_set; int *num_df_per_set; int *node_ind, *elem_ind, *df_ind, num_qa_rec, num_info; int num_glo_vars, num_nod_vars, num_ele_vars; int *truth_tab; int num_time_steps; int *num_elem_in_block, *num_nodes_per_elem, *num_attr; int num_nodes_in_set, num_elem_in_set; int num_sides_in_set, num_df_in_set; int list_len = 0; int elem_list_len = 0; int node_list_len = 0; int df_list_len = 0; int node_num, time_step, var_index, beg_time, end_time, elem_num; int CPU_word_size,IO_word_size; int num_props, prop_value, *prop_values; int idum; float time_value, *time_values, *var_values; float *x, *y, *z; float *attrib, *dist_fact; float version, fdum; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[10]; char title[MAX_LINE_LENGTH+1], elem_type[MAX_STR_LENGTH+1]; char *cdum = 0; char *prop_names[3]; char *map_names[3]; CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 0; /* use what is stored in file */ ex_opts (EX_VERBOSE | EX_ABORT); /* Test the NOCLOBBER option to ex_create. Should fail to create file */ exoid = ex_create("test.exo", EX_NOCLOBBER, &CPU_word_size, &IO_word_size); printf ("\nafter ex_create (NO_CLOBBER), error = %3d\n", exoid); /* open EXODUS II files */ exoid = ex_open ("test.exo", /* filename path */ EX_READ, /* access mode = READ */ &CPU_word_size, /* CPU word size */ &IO_word_size, /* IO word size */ &version); /* ExodusII library version */ printf ("\nafter ex_open\n"); if (exoid < 0) exit(1); printf ("test.exo is an EXODUSII file; version %4.2f\n", version); /* printf (" CPU word size %1d\n",CPU_word_size); */ printf (" I/O word size %1d\n",IO_word_size); ex_inquire(exoid,EX_INQ_API_VERS, &idum, &version, cdum); printf ("EXODUSII API; version %4.2f\n", version); /* ex_opts (EX_VERBOSE); */ /* read database parameters */ error = ex_get_init (exoid, title, &num_dim, &num_nodes, &num_elem, &num_elem_blk, &num_node_sets, &num_side_sets); printf ("after ex_get_init, error = %3d\n", error); printf ("database parameters:\n"); printf ("title = '%s'\n",title); printf ("num_dim = %3d\n",num_dim); printf ("num_nodes = %3d\n",num_nodes); printf ("num_elem = %3d\n",num_elem); printf ("num_elem_blk = %3d\n",num_elem_blk); printf ("num_node_sets = %3d\n",num_node_sets); printf ("num_side_sets = %3d\n",num_side_sets); /* read nodal coordinates values and names from database */ x = (float *) calloc(num_nodes, sizeof(float)); y = (float *) calloc(num_nodes, sizeof(float)); if (num_dim >= 3) z = (float *) calloc(num_nodes, sizeof(float)); else z = 0; error = ex_get_coord (exoid, x, y, z); printf ("\nafter ex_get_coord, error = %3d\n", error); printf ("x coords = \n"); for (i=0; i<num_nodes; i++) { printf ("%5.1f\n", x[i]); } printf ("y coords = \n"); for (i=0; i<num_nodes; i++) { printf ("%5.1f\n", y[i]); } if (num_dim >= 3) { printf ("z coords = \n"); for (i=0; i<num_nodes; i++) { printf ("%5.1f\n", z[i]); } } /* error = ex_get_1_coord (exoid, 2, x, y, z); printf ("\nafter ex_get_1_coord, error = %3d\n", error); printf ("x coord of node 2 = \n"); printf ("%f \n", x[0]); printf ("y coord of node 2 = \n"); printf ("%f \n", y[0]); */ free (x); free (y); if (num_dim >= 3) free (z); for (i=0; i<num_dim; i++) { coord_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_coord_names (exoid, coord_names); printf ("\nafter ex_get_coord_names, error = %3d\n", error); printf ("x coord name = '%s'\n", coord_names[0]); printf ("y coord name = '%s'\n", coord_names[1]); for (i=0; i<num_dim; i++) free(coord_names[i]); /* read map parameters */ error = ex_get_map_param (exoid, &num_node_maps, &num_elem_maps); printf ("\nafter ex_get_map_param, error = %3d\n", error); /* read element maps */ elem_map = (int *) calloc(num_elem, sizeof(int)); ids = (int *) calloc(num_elem_maps, sizeof(int)); error = ex_get_prop_array (exoid, EX_ELEM_MAP, "ID", ids); printf ("\nafter ex_get_prop_array, error = %3d\n", error); for (j=0; j<num_elem_maps; j++) { error = ex_get_elem_map (exoid, ids[j], elem_map); printf ("\nafter ex_get_elem_map, error = %3d\n", error); printf ("element map id = %2d\n",ids[j]); if (!error) { for (i=0; i<num_elem; i++) { int value; printf ("elem_map(%d) = %d \n", i, elem_map[i]); /* Read element map 1 element at a time... */ error = ex_get_partial_elem_map(exoid, ids[j], i+1, 1, &value); if (error != 0 || value != elem_map[i]) printf ("invalid value in ex_get_partial_elem_map, map %d, element %d\n", j, i); } } } free (elem_map); /* read element map properties */ error = ex_inquire (exoid, EX_INQ_EM_PROP, &num_props, &fdum, cdum); printf ("\nafter ex_inquire, error = %d\n", error); printf ("\nThere are %2d properties for each element map\n", num_props); for (i=0; i<num_props; i++) { prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_prop_names(exoid,EX_ELEM_MAP,prop_names); printf ("after ex_get_prop_names, error = %d\n", error); for (i=0; i<num_props; i++) { for (j=0; j<num_elem_maps; j++) { error = ex_get_prop(exoid, EX_ELEM_MAP, ids[j], prop_names[i], &prop_value); if (error == 0) printf ("element map %2d, property(%2d): '%s'= %5d\n", j+1, i+1, prop_names[i], prop_value); else printf ("after ex_get_prop, error = %d\n", error); } } for (i=0; i<num_props; i++) free(prop_names[i]); /* read element map names */ for (i=0; i<num_elem_maps; i++) { map_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_names(exoid,EX_ELEM_MAP,map_names); printf ("after ex_get_names, error = %d\n", error); for (j=0; j<num_elem_maps; j++) { printf ("element map %2d, id = %d, name: '%s'\n", j+1, ids[j], map_names[j]); free(map_names[j]); } free(ids); /* read node maps */ node_map = (int *) calloc(num_nodes, sizeof(int)); ids = (int *) calloc(num_node_maps, sizeof(int)); error = ex_get_prop_array (exoid, EX_NODE_MAP, "ID", ids); printf ("\nafter ex_get_prop_array, error = %3d\n", error); for (j=0; j<num_node_maps; j++) { error = ex_get_node_map (exoid, ids[j], node_map); printf ("\nafter ex_get_node_map, error = %3d\n", error); printf ("node map id = %2d\n",ids[j]); if (!error) for (i=0; i<num_nodes; i++) printf ("node_map(%d) = %d \n", i, node_map[i]); } free (node_map); /* read node map properties */ error = ex_inquire (exoid, EX_INQ_NM_PROP, &num_props, &fdum, cdum); printf ("\nafter ex_inquire, error = %d\n", error); printf ("\nThere are %2d properties for each node map\n", num_props); for (i=0; i<num_props; i++) { prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_prop_names(exoid,EX_NODE_MAP,prop_names); printf ("after ex_get_prop_names, error = %d\n", error); for (i=0; i<num_props; i++) { for (j=0; j<num_node_maps; j++) { error = ex_get_prop(exoid, EX_NODE_MAP, ids[j], prop_names[i], &prop_value); if (error == 0) printf ("node map %2d, property(%2d): '%s'= %5d\n", j+1, i+1, prop_names[i], prop_value); else printf ("after ex_get_prop, error = %d\n", error); } } for (i=0; i<num_props; i++) free(prop_names[i]); /* read node map names */ for (i=0; i<num_node_maps; i++) { map_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } for (j=0; j<num_node_maps; j++) { error = ex_get_name(exoid,EX_NODE_MAP,ids[j], map_names[j]); printf ("after ex_get_name, error = %d\n", error); printf ("node map %2d, id = %d, name: '%s'\n", j+1, ids[j], map_names[j]); free(map_names[j]); } free(ids); /* read element block parameters */ ids = (int *) calloc(num_elem_blk, sizeof(int)); num_elem_in_block = (int *) calloc(num_elem_blk, sizeof(int)); num_nodes_per_elem = (int *) calloc(num_elem_blk, sizeof(int)); num_attr = (int *) calloc(num_elem_blk, sizeof(int)); error = ex_get_elem_blk_ids (exoid, ids); printf ("\nafter ex_get_elem_blk_ids, error = %3d\n", error); for (i=0; i<num_elem_blk; i++) { error = ex_get_elem_block (exoid, ids[i], elem_type, &(num_elem_in_block[i]), &(num_nodes_per_elem[i]), &(num_attr[i])); printf ("\nafter ex_get_elem_block, error = %d\n", error); printf ("element block id = %2d\n",ids[i]); printf ("element type = '%s'\n", elem_type); printf ("num_elem_in_block = %2d\n",num_elem_in_block[i]); printf ("num_nodes_per_elem = %2d\n",num_nodes_per_elem[i]); printf ("num_attr = %2d\n",num_attr[i]); } /* read element block properties */ error = ex_inquire (exoid, EX_INQ_EB_PROP, &num_props, &fdum, cdum); printf ("\nafter ex_inquire, error = %d\n", error); printf ("\nThere are %2d properties for each element block\n", num_props); for (i=0; i<num_props; i++) { prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_prop_names(exoid,EX_ELEM_BLOCK,prop_names); printf ("after ex_get_prop_names, error = %d\n", error); for (i=0; i<num_props; i++) { for (j=0; j<num_elem_blk; j++) { error = ex_get_prop(exoid, EX_ELEM_BLOCK, ids[j], prop_names[i], &prop_value); if (error == 0) printf ("element block %2d, property(%2d): '%s'= %5d\n", j+1, i+1, prop_names[i], prop_value); else printf ("after ex_get_prop, error = %d\n", error); } } for (i=0; i<num_props; i++) free(prop_names[i]); /* read element connectivity */ for (i=0; i<num_elem_blk; i++) { connect = (int *) calloc((num_nodes_per_elem[i] * num_elem_in_block[i]), sizeof(int)); error = ex_get_elem_conn (exoid, ids[i], connect); printf ("\nafter ex_get_elem_conn, error = %d\n", error); printf ("connect array for elem block %2d\n", ids[i]); for (j=0; j<num_nodes_per_elem[i]; j++) { printf ("%3d\n", connect[j]); } /* error = ex_get_1_elem_conn (exoid, 1, ids[i], connect); printf ("\nafter ex_get_elem_conn, error = %d\n", error); printf ("node list for first element of element block %d \n ", ids[i]); for (j=0; j<num_nodes_per_elem[i]; j++) { printf ("%d \n", connect[j]); } */ free (connect); } /* read element block attributes */ for (i=0; i<num_elem_blk; i++) { attrib = (float *) calloc(num_attr[i]*num_elem_in_block[i],sizeof(float)); error = ex_get_elem_attr (exoid, ids[i], attrib); printf ("\nafter ex_get_elem_attr, error = %d\n", error); if (error == 0) { printf ("element block %d attributes:\n", ids[i]); for (j=0; j<num_attr[i]*num_elem_in_block[i]; j++) printf ("%6.4f\n", attrib[j]); } free (attrib); } free (ids); free (num_nodes_per_elem); free (num_attr); /* read individual node sets */ ids = (int *) calloc(num_node_sets, sizeof(int)); error = ex_get_node_set_ids (exoid, ids); printf ("\nafter ex_get_node_set_ids, error = %3d\n", error); for (i=0; i<num_node_sets; i++) { error = ex_get_node_set_param (exoid, ids[i], &num_nodes_in_set, &num_df_in_set); printf ("\nafter ex_get_node_set_param, error = %3d\n", error); printf ("\nnode set %2d parameters: \n", ids[i]); printf ("num_nodes = %2d\n", num_nodes_in_set); node_list = (int *) calloc(num_nodes_in_set, sizeof(int)); dist_fact = (float *) calloc(num_nodes_in_set, sizeof(float)); error = ex_get_node_set (exoid, ids[i], node_list); printf ("\nafter ex_get_node_set, error = %3d\n", error); if (num_df_in_set > 0) { error = ex_get_node_set_dist_fact (exoid, ids[i], dist_fact); printf ("\nafter ex_get_node_set_dist_fact, error = %3d\n", error); } printf ("\nnode list for node set %2d\n", ids[i]); for (j=0; j<num_nodes_in_set; j++) { printf ("%3d\n", node_list[j]); } if (num_df_in_set > 0) { printf ("dist factors for node set %2d\n", ids[i]); for (j=0; j<num_df_in_set; j++) { printf ("%5.2f\n", dist_fact[j]); } } else printf ("no dist factors for node set %2d\n", ids[i]); free (node_list); free (dist_fact); } free(ids); /* read node set properties */ error = ex_inquire (exoid, EX_INQ_NS_PROP, &num_props, &fdum, cdum); printf ("\nafter ex_inquire, error = %d\n", error); printf ("\nThere are %2d properties for each node set\n", num_props); for (i=0; i<num_props; i++) { prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } prop_values = (int *) calloc (num_node_sets, sizeof(int)); error = ex_get_prop_names(exoid,EX_NODE_SET,prop_names); printf ("after ex_get_prop_names, error = %d\n", error); for (i=0; i<num_props; i++) { error = ex_get_prop_array(exoid, EX_NODE_SET, prop_names[i], prop_values); if (error == 0) { for (j=0; j<num_node_sets; j++) printf ("node set %2d, property(%2d): '%s'= %5d\n", j+1, i+1, prop_names[i], prop_values[j]); } else printf ("after ex_get_prop_array, error = %d\n", error); } for (i=0; i<num_props; i++) free(prop_names[i]); free(prop_values); /* read concatenated node sets; this produces the same information as * the above code which reads individual node sets */ error = ex_inquire (exoid, EX_INQ_NODE_SETS, &num_node_sets, &fdum, cdum); printf ("\nafter ex_inquire, error = %3d\n",error); ids = (int *) calloc(num_node_sets, sizeof(int)); num_nodes_per_set = (int *) calloc(num_node_sets, sizeof(int)); num_df_per_set = (int *) calloc(num_node_sets, sizeof(int)); node_ind = (int *) calloc(num_node_sets, sizeof(int)); df_ind = (int *) calloc(num_node_sets, sizeof(int)); error = ex_inquire (exoid, EX_INQ_NS_NODE_LEN, &list_len, &fdum, cdum); printf ("\nafter ex_inquire: EX_INQ_NS_NODE_LEN = %d, error = %3d\n", list_len, error); node_list = (int *) calloc(list_len, sizeof(int)); error = ex_inquire (exoid, EX_INQ_NS_DF_LEN, &list_len, &fdum, cdum); printf ("\nafter ex_inquire: EX_INQ_NS_DF_LEN = %d, error = %3d\n", list_len, error); dist_fact = (float *) calloc(list_len, sizeof(float)); error = ex_get_concat_node_sets (exoid,ids,num_nodes_per_set,num_df_per_set, node_ind, df_ind, node_list, dist_fact); printf ("\nafter ex_get_concat_node_sets, error = %3d\n", error); printf ("\nconcatenated node set info\n"); printf ("ids = \n"); for (i=0; i<num_node_sets; i++) printf ("%3d\n", ids[i]); printf ("num_nodes_per_set = \n"); for (i=0; i<num_node_sets; i++) printf ("%3d\n", num_nodes_per_set[i]); printf ("node_ind = \n"); for (i=0; i<num_node_sets; i++) printf ("%3d\n", node_ind[i]); printf ("node_list = \n"); for (i=0; i<list_len; i++) printf ("%3d\n", node_list[i]); printf ("dist_fact = \n"); for (i=0; i<list_len; i++) printf ("%5.3f\n", dist_fact[i]); free (ids); free (num_nodes_per_set); free (df_ind); free (node_ind); free (num_df_per_set); free (node_list); free (dist_fact); /* read individual side sets */ ids = (int *) calloc(num_side_sets, sizeof(int)); error = ex_get_side_set_ids (exoid, ids); printf ("\nafter ex_get_side_set_ids, error = %3d\n", error); for (i=0; i<num_side_sets; i++) { error = ex_get_side_set_param (exoid, ids[i], &num_sides_in_set, &num_df_in_set); printf ("\nafter ex_get_side_set_param, error = %3d\n", error); printf ("side set %2d parameters:\n",ids[i]); printf ("num_sides = %3d\n",num_sides_in_set); printf ("num_dist_factors = %3d\n", num_df_in_set); /* Note: The # of elements is same as # of sides! */ num_elem_in_set = num_sides_in_set; elem_list = (int *) calloc(num_elem_in_set, sizeof(int)); side_list = (int *) calloc(num_sides_in_set, sizeof(int)); node_ctr_list = (int *) calloc(num_elem_in_set, sizeof(int)); node_list = (int *) calloc(num_elem_in_set*21, sizeof(int)); dist_fact = (float *) calloc(num_df_in_set, sizeof(float)); error = ex_get_side_set (exoid, ids[i], elem_list, side_list); printf ("\nafter ex_get_side_set, error = %3d\n", error); error = ex_get_side_set_node_list (exoid, ids[i], node_ctr_list, node_list); printf ("\nafter ex_get_side_set_node_list, error = %3d\n", error); if (num_df_in_set > 0) { error = ex_get_side_set_dist_fact (exoid, ids[i], dist_fact); printf ("\nafter ex_get_side_set_dist_fact, error = %3d\n", error); } printf ("element list for side set %2d\n", ids[i]); for (j=0; j<num_elem_in_set; j++) { printf ("%3d\n", elem_list[j]); } printf ("side list for side set %2d\n", ids[i]); for (j=0; j<num_sides_in_set; j++) { printf ("%3d\n", side_list[j]); } node_ctr = 0; printf ("node list for side set %2d\n", ids[i]); for (k=0; k<num_elem_in_set; k++) { for (j=0; j<node_ctr_list[k]; j++) { printf ("%3d\n", node_list[node_ctr+j]); } node_ctr += node_ctr_list[k]; } if (num_df_in_set > 0) { printf ("dist factors for side set %2d\n", ids[i]); for (j=0; j<num_df_in_set; j++) { printf ("%5.3f\n", dist_fact[j]); } } else printf ("no dist factors for side set %2d\n", ids[i]); free (elem_list); free (side_list); free (dist_fact); free (node_ctr_list); free (node_list); } /* read side set properties */ error = ex_inquire (exoid, EX_INQ_SS_PROP, &num_props, &fdum, cdum); printf ("\nafter ex_inquire, error = %d\n", error); printf ("\nThere are %2d properties for each side set\n", num_props); for (i=0; i<num_props; i++) { prop_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_prop_names(exoid,EX_SIDE_SET,prop_names); printf ("after ex_get_prop_names, error = %d\n", error); for (i=0; i<num_props; i++) { for (j=0; j<num_side_sets; j++) { error = ex_get_prop(exoid, EX_SIDE_SET, ids[j], prop_names[i], &prop_value); if (error == 0) { printf ("side set %2d, property(%2d): '%s'= %5d\n", j+1, i+1, prop_names[i], prop_value); } else printf ("after ex_get_prop, error = %d\n", error); } } for (i=0; i<num_props; i++) free(prop_names[i]); free (ids); error = ex_inquire (exoid, EX_INQ_SIDE_SETS, &num_side_sets, &fdum, cdum); printf ("\nafter ex_inquire: EX_INQ_SIDE_SETS = %d, error = %d\n", num_side_sets, error); if (num_side_sets > 0) { error = ex_inquire(exoid, EX_INQ_SS_ELEM_LEN, &elem_list_len, &fdum, cdum); printf ("\nafter ex_inquire: EX_INQ_SS_ELEM_LEN = %d, error = %d\n", elem_list_len, error); error = ex_inquire(exoid, EX_INQ_SS_NODE_LEN, &node_list_len, &fdum, cdum); printf ("\nafter ex_inquire: EX_INQ_SS_NODE_LEN = %d, error = %d\n", node_list_len, error); error = ex_inquire(exoid, EX_INQ_SS_DF_LEN, &df_list_len, &fdum, cdum); printf ("\nafter ex_inquire: EX_INQ_SS_DF_LEN = %d, error = %d\n", df_list_len, error); } /* read concatenated side sets; this produces the same information as * the above code which reads individual side sets */ /* concatenated side set read */ ids = (int *) calloc(num_side_sets, sizeof(int)); num_elem_per_set = (int *) calloc(num_side_sets, sizeof(int)); num_df_per_set = (int *) calloc(num_side_sets, sizeof(int)); elem_ind = (int *) calloc(num_side_sets, sizeof(int)); df_ind = (int *) calloc(num_side_sets, sizeof(int)); elem_list = (int *) calloc(elem_list_len, sizeof(int)); side_list = (int *) calloc(elem_list_len, sizeof(int)); dist_fact = (float *) calloc(df_list_len, sizeof(float)); error = ex_get_concat_side_sets (exoid, ids, num_elem_per_set, num_df_per_set, elem_ind, df_ind, elem_list, side_list, dist_fact); printf ("\nafter ex_get_concat_side_sets, error = %3d\n", error); printf ("concatenated side set info\n"); printf ("ids = \n"); for (i=0; i<num_side_sets; i++) printf ("%3d\n", ids[i]); printf ("num_elem_per_set = \n"); for (i=0; i<num_side_sets; i++) printf ("%3d\n", num_elem_per_set[i]); printf ("num_dist_per_set = \n"); for (i=0; i<num_side_sets; i++) printf ("%3d\n", num_df_per_set[i]); printf ("elem_ind = \n"); for (i=0; i<num_side_sets; i++) printf ("%3d\n", elem_ind[i]); printf ("dist_ind = \n"); for (i=0; i<num_side_sets; i++) printf ("%3d\n", df_ind[i]); printf ("elem_list = \n"); for (i=0; i<elem_list_len; i++) printf ("%3d\n", elem_list[i]); printf ("side_list = \n"); for (i=0; i<elem_list_len; i++) printf ("%3d\n", side_list[i]); printf ("dist_fact = \n"); for (i=0; i<df_list_len; i++) printf ("%5.3f\n", dist_fact[i]); free (ids); free (num_elem_per_set); free (num_df_per_set); free (df_ind); free (elem_ind); free (elem_list); free (side_list); free (dist_fact); /* end of concatenated side set read */ /* read QA records */ ex_inquire (exoid, EX_INQ_QA, &num_qa_rec, &fdum, cdum); for (i=0; i<num_qa_rec; i++) { for (j=0; j<4; j++) { qa_record[i][j] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } } error = ex_get_qa (exoid, qa_record); printf ("\nafter ex_get_qa, error = %3d\n", error); printf ("QA records = \n"); for (i=0; i<num_qa_rec; i++) { for (j=0; j<4; j++) { printf (" '%s'\n", qa_record[i][j]); free(qa_record[i][j]); } } /* read information records */ error = ex_inquire (exoid, EX_INQ_INFO, &num_info, &fdum, cdum); printf ("\nafter ex_inquire, error = %3d\n", error); for (i=0; i<num_info; i++) { info[i] = (char *) calloc ((MAX_LINE_LENGTH+1), sizeof(char)); } error = ex_get_info (exoid, info); printf ("\nafter ex_get_info, error = %3d\n", error); printf ("info records = \n"); for (i=0; i<num_info; i++) { printf (" '%s'\n", info[i]); free(info[i]); } /* read global variables parameters and names */ error = ex_get_var_param (exoid, "g", &num_glo_vars); printf ("\nafter ex_get_var_param, error = %3d\n", error); for (i=0; i<num_glo_vars; i++) { var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_var_name(exoid, "g", 1, var_names[0]); printf ("\nafter ex_get_var_name, error = %3d\n", error); printf ("There are %2d global variables; their names are :\n", num_glo_vars); for (i=0; i<num_glo_vars; i++) { printf (" '%s'\n", var_names[i]); free(var_names[i]); } /* read nodal variables parameters and names */ error = ex_get_var_param (exoid, "n", &num_nod_vars); printf ("\nafter ex_get_var_param, error = %3d\n", error); for (i=0; i<num_nod_vars; i++) { var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_var_names (exoid, "n", num_nod_vars, var_names); printf ("\nafter ex_get_var_names, error = %3d\n", error); printf ("There are %2d nodal variables; their names are :\n", num_nod_vars); for (i=0; i<num_nod_vars; i++) { printf (" '%s'\n", var_names[i]); free(var_names[i]); } /* read element variables parameters and names */ error = ex_get_var_param (exoid, "e", &num_ele_vars); printf ("\nafter ex_get_var_param, error = %3d\n", error); for (i=0; i<num_ele_vars; i++) { var_names[i] = (char *) calloc ((MAX_STR_LENGTH+1), sizeof(char)); } error = ex_get_var_names (exoid, "e", num_ele_vars, var_names); printf ("\nafter ex_get_var_names, error = %3d\n", error); printf ("There are %2d element variables; their names are :\n", num_ele_vars); for (i=0; i<num_ele_vars; i++) { printf (" '%s'\n", var_names[i]); free(var_names[i]); } /* read element variable truth table */ truth_tab = (int *) calloc ((num_elem_blk*num_ele_vars), sizeof(int)); error = ex_get_elem_var_tab (exoid, num_elem_blk, num_ele_vars, truth_tab); printf ("\nafter ex_get_elem_var_tab, error = %3d\n", error); printf ("This is the element variable truth table:\n"); k = 0; for (i=0; i<num_elem_blk*num_ele_vars; i++) { printf ("%2d\n", truth_tab[k++]); } free (truth_tab); /* determine how many time steps are stored */ error = ex_inquire (exoid, EX_INQ_TIME, &num_time_steps, &fdum, cdum); printf ("\nafter ex_inquire, error = %3d\n", error); printf ("There are %2d time steps in the database.\n", num_time_steps); /* read time value at one time step */ time_step = 3; error = ex_get_time (exoid, time_step, &time_value); printf ("\nafter ex_get_time, error = %3d\n", error); printf ("time value at time step %2d = %5.3f\n", time_step, time_value); /* read time values at all time steps */ time_values = (float *) calloc (num_time_steps, sizeof(float)); error = ex_get_all_times (exoid, time_values); printf ("\nafter ex_get_all_times, error = %3d\n", error); printf ("time values at all time steps are:\n"); for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", time_values[i]); free (time_values); /* read all global variables at one time step */ var_values = (float *) calloc (num_glo_vars, sizeof(float)); error = ex_get_glob_vars (exoid, time_step, num_glo_vars, var_values); printf ("\nafter ex_get_glob_vars, error = %3d\n", error); printf ("global variable values at time step %2d\n", time_step); for (i=0; i<num_glo_vars; i++) printf ("%5.3f\n", var_values[i]); free (var_values); /* read a single global variable through time */ var_index = 1; beg_time = 1; end_time = -1; var_values = (float *) calloc (num_time_steps, sizeof(float)); error = ex_get_glob_var_time (exoid, var_index, beg_time, end_time, var_values); printf ("\nafter ex_get_glob_var_time, error = %3d\n", error); printf ("global variable %2d values through time:\n", var_index); for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]); free (var_values); /* read a nodal variable at one time step */ var_values = (float *) calloc (num_nodes, sizeof(float)); error = ex_get_nodal_var (exoid, time_step, var_index, num_nodes, var_values); printf ("\nafter ex_get_nodal_var, error = %3d\n", error); printf ("nodal variable %2d values at time step %2d\n", var_index, time_step); for (i=0; i<num_nodes; i++) printf ("%5.3f\n", var_values[i]); free (var_values); /* read a nodal variable through time */ var_values = (float *) calloc (num_time_steps, sizeof(float)); node_num = 1; error = ex_get_nodal_var_time (exoid, var_index, node_num, beg_time, end_time, var_values); printf ("\nafter ex_get_nodal_var_time, error = %3d\n", error); printf ("nodal variable %2d values for node %2d through time:\n", var_index, node_num); for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]); free (var_values); /* read an element variable at one time step */ ids = (int *) calloc(num_elem_blk, sizeof(int)); error = ex_get_elem_blk_ids (exoid, ids); printf ("\n after ex_get_elem_blk_ids, error = %3d\n", error); for (i=0; i<num_elem_blk; i++) { var_values = (float *) calloc (num_elem_in_block[i], sizeof(float)); error = ex_get_elem_var (exoid, time_step, var_index, ids[i], num_elem_in_block[i], var_values); printf ("\nafter ex_get_elem_var, error = %3d\n", error); if (!error) { printf ("element variable %2d values of element block %2d at time step %2d\n", var_index, ids[i], time_step); for (j=0; j<num_elem_in_block[i]; j++) printf ("%5.3f\n", var_values[j]); } free (var_values); } free (num_elem_in_block); free(ids); /* read an element variable through time */ var_values = (float *) calloc (num_time_steps, sizeof(float)); var_index = 2; elem_num = 2; error = ex_get_elem_var_time (exoid, var_index, elem_num, beg_time, end_time, var_values); printf ("\nafter ex_get_elem_var_time, error = %3d\n", error); printf ("element variable %2d values for element %2d through time:\n", var_index, elem_num); for (i=0; i<num_time_steps; i++) printf ("%5.3f\n", var_values[i]); free (var_values); error = ex_close (exoid); printf ("\nafter ex_close, error = %3d\n", error); return 0; }
int write_nemesis(std::string &nemI_out_file, Machine_Description* machine, Problem_Description* problem, Mesh_Description<INT>* mesh, LB_Description<INT>* lb, Sphere_Info* sphere) { int exoid; char title[MAX_LINE_LENGTH+1], method1[MAX_LINE_LENGTH+1]; char method2[MAX_LINE_LENGTH+1]; int cpu_ws = sizeof(float); int io_ws = sizeof(float); printf("Outputting load balance to file %s\n", nemI_out_file.c_str()); /* Create the load balance file */ /* Attempt to create a netcdf4-format file; if it fails, then assume that the netcdf library does not support that mode and fall back to classic netcdf3 format. If that fails, issue an error and return failure. */ int mode3 = EX_CLOBBER; int mode4 = mode3|EX_NETCDF4|EX_NOCLASSIC|problem->int64db|problem->int64api; ex_opts(EX_DEFAULT); // Eliminate misleading error if the first ex_create fails, but the second succeeds. if((exoid=ex_create(nemI_out_file.c_str(), mode4, &cpu_ws, &io_ws)) < 0) { /* If int64api or int64db non-zero, then netcdf-4 format is required, so fail now... */ if (problem->int64db|problem->int64api) { Gen_Error(0, "fatal: failed to create Nemesis netcdf-4 file"); return 0; } if((exoid=ex_create(nemI_out_file.c_str(), mode3, &cpu_ws, &io_ws)) < 0) { Gen_Error(0, "fatal: failed to create Nemesis file"); return 0; } } ON_BLOCK_EXIT(ex_close, exoid); /* Set the error reporting value */ if (error_lev > 1) ex_opts(EX_VERBOSE | EX_DEBUG); else ex_opts(EX_VERBOSE); /* Enable compression (if netcdf-4) */ ex_set_option(exoid, EX_OPT_COMPRESSION_LEVEL, 1); ex_set_option(exoid, EX_OPT_COMPRESSION_SHUFFLE, 1); /* Create the title */ if(problem->type == NODAL) strcpy(method1, "nodal"); else strcpy(method1, "elemental"); sprintf(title, "nem_slice %s load balance file", method1); strcpy(method1, "method1: "); strcpy(method2, "method2: "); switch(lb->type) { case MULTIKL: strcat(method1, "Multilevel-KL decomposition"); strcat(method2, "With Kernighan-Lin refinement"); break; case SPECTRAL: strcat(method1, "Spectral decomposition"); break; case INERTIAL: strcat(method1, "Inertial decomposition"); break; case ZPINCH: strcat(method1, "ZPINCH decomposition"); break; case BRICK: strcat(method1, "BRICK decomposition"); break; case ZOLTAN_RCB: strcat(method1, "RCB decomposition"); break; case ZOLTAN_RIB: strcat(method1, "RIB decomposition"); break; case ZOLTAN_HSFC: strcat(method1, "HSFC decomposition"); break; case LINEAR: strcat(method1, "Linear decomposition"); break; case RANDOM: strcat(method1, "Random decomposition"); break; case SCATTERED: strcat(method1, "Scattered decomposition"); break; } if(lb->refine == KL_REFINE && lb->type != MULTIKL) strcat(method2, "with Kernighan-Lin refinement"); else if(lb->type != MULTIKL) strcat(method2, "no refinement"); switch(lb->num_sects) { case 1: strcat(method1, " via bisection"); break; case 2: strcat(method1, " via quadrasection"); break; case 3: strcat(method1, " via octasection"); break; } /* Do some sorting */ for(int proc=0; proc < machine->num_procs; proc++) { /* Sort node maps */ gds_qsort(TOPTR(lb->int_nodes[proc]), lb->int_nodes[proc].size()); if(problem->type == NODAL) { sort2(lb->ext_nodes[proc].size(), TOPTR(lb->ext_nodes[proc]), TOPTR(lb->ext_procs[proc])); } /* Sort element maps */ gds_qsort(TOPTR(lb->int_elems[proc]), lb->int_elems[proc].size()); } /* Output the info records */ char *info[3]; info[0] = title; info[1] = method1; info[2] = method2; if(ex_put_info(exoid, 3, info) < 0) Gen_Error(0, "warning: output of info records failed"); /* Generate a QA record for the utility */ time_t time_val = time(nullptr); char *ct_ptr = asctime(localtime(&time_val)); char tm_date[30]; strcpy(tm_date, ct_ptr); /* Break string with null characters */ tm_date[3] = '\0'; tm_date[7] = '\0'; tm_date[10] = '\0'; tm_date[19] = '\0'; char qa_date[15], qa_time[10], qa_name[MAX_STR_LENGTH]; char qa_vers[10]; sprintf(qa_date, "%s %s %s", &tm_date[8], &tm_date[4], &tm_date[20]); sprintf(qa_time, "%s", &tm_date[11]); strcpy(qa_name, UTIL_NAME); strcpy(qa_vers, ELB_VERSION); if(qa_date[strlen(qa_date)-1] == '\n') qa_date[strlen(qa_date)-1] = '\0'; char **lqa_record = (char **)array_alloc(1, 4, sizeof(char *)); for(int i2=0; i2 < 4; i2++) lqa_record[i2] = (char *)array_alloc(1, MAX_STR_LENGTH+1, sizeof(char)); strcpy(lqa_record[0], qa_name); strcpy(lqa_record[1], qa_vers); strcpy(lqa_record[2], qa_date); strcpy(lqa_record[3], qa_time); printf("QA Record:\n"); for(int i2=0; i2 < 4; i2++) { printf("\t%s\n", lqa_record[i2]); } if(ex_put_qa(exoid, 1, (char *(*)[4]) &lqa_record[0]) < 0) { Gen_Error(0, "fatal: unable to output QA records"); return 0; } /* free up memory */ for(int i2=0; i2 < 4; i2++) free(lqa_record[i2]); free(lqa_record); /* Output the the initial Nemesis global information */ if(ex_put_init_global(exoid, mesh->num_nodes, mesh->num_elems, mesh->num_el_blks, 0, 0) < 0) { Gen_Error(0, "fatal: failed to output initial Nemesis parameters"); return 0; } /* Set up dummy arrays for ouput */ std::vector<INT> num_nmap_cnts(machine->num_procs); std::vector<INT> num_emap_cnts(machine->num_procs); if(problem->type == NODAL) { /* need to check and make sure that there really are comm maps */ for(int cnt=0; cnt < machine->num_procs; cnt++) { if (!lb->bor_nodes[cnt].empty()) num_nmap_cnts[cnt] = 1; } } else { /* Elemental load balance */ if(((problem->num_vertices)-(sphere->num)) > 0) { /* need to check and make sure that there really are comm maps */ for(int cnt=0; cnt < machine->num_procs; cnt++) { if (!lb->bor_nodes[cnt].empty()) num_nmap_cnts[cnt] = 1; } for(int cnt=0; cnt < machine->num_procs; cnt++) { if (!lb->bor_elems[cnt].empty()) num_emap_cnts[cnt] = 1; } } } if(ex_put_init_info(exoid, machine->num_procs, machine->num_procs, (char*)"s") < 0) { Gen_Error(0, "fatal: unable to output init info"); return 0; } // Need to create 5 arrays with the sizes of lb->int_nodes[i].size()... { std::vector<INT> ins(machine->num_procs); std::vector<INT> bns(machine->num_procs); std::vector<INT> ens(machine->num_procs); std::vector<INT> ies(machine->num_procs); std::vector<INT> bes(machine->num_procs); for (int iproc = 0; iproc < machine->num_procs; iproc++) { ins[iproc] = lb->int_nodes[iproc].size(); bns[iproc] = lb->bor_nodes[iproc].size(); ens[iproc] = lb->ext_nodes[iproc].size(); ies[iproc] = lb->int_elems[iproc].size(); bes[iproc] = lb->bor_elems[iproc].size(); } if(ex_put_loadbal_param_cc(exoid, TOPTR(ins), TOPTR(bns), TOPTR(ens), TOPTR(ies), TOPTR(bes), TOPTR(num_nmap_cnts), TOPTR(num_emap_cnts)) < 0) { Gen_Error(0, "fatal: unable to output load-balance parameters"); return 0; } } if(problem->type == NODAL) /* Nodal load balance output */ { /* Set up for the concatenated communication map parameters */ std::vector<INT> node_proc_ptr(machine->num_procs+1); std::vector<INT> node_cmap_ids_cc(machine->num_procs); std::vector<INT> node_cmap_cnts_cc(machine->num_procs); node_proc_ptr[0] = 0; for(int proc=0; proc < machine->num_procs; proc++) { node_proc_ptr[proc+1] = node_proc_ptr[proc] + 1; node_cmap_cnts_cc[proc] = lb->ext_nodes[proc].size(); node_cmap_ids_cc[proc] = 1; } /* Output the communication map parameters */ if(ex_put_cmap_params_cc(exoid, TOPTR(node_cmap_ids_cc), TOPTR(node_cmap_cnts_cc), TOPTR(node_proc_ptr), nullptr, nullptr, nullptr) < 0) { Gen_Error(0, "fatal: unable to output communication map parameters"); return 0; } /* Output the node and element maps */ for(int proc=0; proc < machine->num_procs; proc++) { /* Output the nodal map */ if(ex_put_processor_node_maps(exoid, TOPTR(lb->int_nodes[proc]), TOPTR(lb->bor_nodes[proc]), TOPTR(lb->ext_nodes[proc]), proc) < 0) { Gen_Error(0, "fatal: failed to output node map"); return 0; } /* Output the elemental map */ if(ex_put_processor_elem_maps(exoid, TOPTR(lb->int_elems[proc]), nullptr, proc) < 0) { Gen_Error(0, "fatal: failed to output element map"); return 0; } /* * Reorder the nodal communication maps so that they are ordered * by processor and then by global ID. */ /* This is a 2-key sort */ qsort2(TOPTR(lb->ext_procs[proc]), TOPTR(lb->ext_nodes[proc]), lb->ext_nodes[proc].size()); /* Output the nodal communication map */ if(ex_put_node_cmap(exoid, 1, TOPTR(lb->ext_nodes[proc]), TOPTR(lb->ext_procs[proc]), proc) < 0) { Gen_Error(0, "fatal: failed to output nodal communication map"); return 0; } } /* End "for(proc=0; proc < machine->num_procs; proc++)" */ } else if(problem->type == ELEMENTAL) /* Elemental load balance output */ { std::vector<INT> node_proc_ptr(machine->num_procs+1); std::vector<INT> node_cmap_ids_cc(machine->num_procs); std::vector<INT> node_cmap_cnts_cc(machine->num_procs); node_proc_ptr[0] = 0; for(int proc=0; proc < machine->num_procs; proc++) { node_proc_ptr[proc+1] = node_proc_ptr[proc] + 1; node_cmap_cnts_cc[proc] = 0; for(size_t cnt=0; cnt < lb->bor_nodes[proc].size(); cnt++) node_cmap_cnts_cc[proc] += lb->born_procs[proc][cnt].size(); node_cmap_ids_cc[proc] = 1; } std::vector<INT> elem_proc_ptr(machine->num_procs+1); std::vector<INT> elem_cmap_ids_cc(machine->num_procs); std::vector<INT> elem_cmap_cnts_cc(machine->num_procs); elem_proc_ptr[0] = 0; for(int proc=0; proc < machine->num_procs; proc++) { elem_proc_ptr[proc+1] = elem_proc_ptr[proc] + 1; elem_cmap_cnts_cc[proc] = lb->e_cmap_elems[proc].size(); elem_cmap_ids_cc[proc] = 1; } /* Output the communication map parameters */ if(ex_put_cmap_params_cc(exoid, TOPTR(node_cmap_ids_cc), TOPTR(node_cmap_cnts_cc), TOPTR(node_proc_ptr), TOPTR(elem_cmap_ids_cc), TOPTR(elem_cmap_cnts_cc), TOPTR(elem_proc_ptr)) < 0) { Gen_Error(0, "fatal: unable to output communication map parameters"); return 0; } /* Output the node and element maps */ for(int proc=0; proc < machine->num_procs; proc++) { /* Output the nodal map */ if(ex_put_processor_node_maps(exoid, TOPTR(lb->int_nodes[proc]), TOPTR(lb->bor_nodes[proc]), nullptr, proc) < 0) { Gen_Error(0, "fatal: failed to output node map"); return 0; } /* Output the elemental map */ if(ex_put_processor_elem_maps(exoid, TOPTR(lb->int_elems[proc]), TOPTR(lb->bor_elems[proc]), proc) < 0) { Gen_Error(0, "fatal: failed to output element map"); return 0; } /* * Build a nodal communication map from the list of border nodes * and their associated processors and side IDs. */ size_t nsize = 0; for(size_t cnt=0; cnt < lb->bor_nodes[proc].size(); cnt++) nsize += lb->born_procs[proc][cnt].size(); if (nsize > 0) { std::vector<INT> n_cmap_nodes(nsize); std::vector<INT> n_cmap_procs(nsize); size_t cnt3 = 0; for(size_t cnt=0; cnt < lb->bor_nodes[proc].size(); cnt++) { for(size_t cnt2=0; cnt2 < lb->born_procs[proc][cnt].size(); cnt2++) { n_cmap_nodes[cnt3] = lb->bor_nodes[proc][cnt]; n_cmap_procs[cnt3++] = lb->born_procs[proc][cnt][cnt2]; } } /* * Reorder the nodal communication maps so that they are ordered * by processor and then by global ID. */ /* This is a 2-key sort */ qsort2(TOPTR(n_cmap_procs), TOPTR(n_cmap_nodes), cnt3); /* Output the nodal communication map */ if(ex_put_node_cmap(exoid, 1, TOPTR(n_cmap_nodes), TOPTR(n_cmap_procs), proc) < 0) { Gen_Error(0, "fatal: unable to output nodal communication map"); return 0; } } /* End "if (nsize > 0)" */ /* Output the elemental communication map */ if(!lb->e_cmap_elems[proc].empty()) { if(ex_put_elem_cmap(exoid, 1, TOPTR(lb->e_cmap_elems[proc]), TOPTR(lb->e_cmap_sides[proc]), TOPTR(lb->e_cmap_procs[proc]), proc) < 0) { Gen_Error(0, "fatal: unable to output elemental communication map"); return 0; } } } /* End "for(proc=0; proc < machine->num_procs; proc++)" */ } return 1; } /*------------------------End write_nemesis()------------------------------*/
int main(int argc, char *argv[]) { /* Local function calls */ int ne_test_glbp(int); int ne_test_piinf(int); int ne_test_pinig(int); int ne_test_pelbid(int); int ne_test_pnsp(int); int ne_test_pssp(int); int ne_test_pnm(int); int ne_test_pem(int); int ne_test_pcmp(int); int ne_test_pncm(int); int ne_test_pecm(int); int ne_test_giinf(int); int ne_test_ginig(int); int ne_test_gelbid(int); int ne_test_gnsp(int); int ne_test_gssp(int); int ne_test_gnm(int); int ne_test_gem(int); int ne_test_gncm(int); int ne_test_gecm(int); int ne_test_plbpc(int); int ne_test_pcmpc(int); /* Unitialized local variables */ int ne_file_id; float version; /* Initialized local variables */ int mode3 = EX_CLOBBER; int mode4 = EX_CLOBBER|EX_NETCDF4|EX_NOCLASSIC; char *yo="main"; int io_ws=0, cpu_ws=0, t_pass=0, t_fail=0; char *file_name = "ne_test.exo"; /*-----------------------------Execution Begins-----------------------------*/ /*---------------------------------------------------------------------------*/ /* OUTPUT TEST SECTION */ /*---------------------------------------------------------------------------*/ printf("*********************Output Tests***********************\n"); /* Create the ExodusII/Nemesis file */ printf("creating ExodusII file..."); fflush(stdout); /* Attempt to create a netcdf4-format file; if it fails, then assume that the netcdf library does not support that mode and fall back to classic netcdf3 format. If that fails, issue an error and die. */ if ((ne_file_id=ex_create(file_name, mode4, &cpu_ws, &io_ws)) < 0) { /* netcdf4 create failed, try netcdf3 */ if ((ne_file_id=ex_create(file_name, mode3, &cpu_ws, &io_ws)) < 0) { printf("FAILED\n"); t_fail++; fprintf(stderr, "[%s]: ERROR, unable to create test file \"%s\"!\n", yo, file_name); exit(-1); } } printf("successful\n"); fflush(stdout); t_pass++; /* Test the output of initial information */ printf("testing init info output..."); fflush(stdout); if (ne_test_piinf(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of initial global information */ printf("testing global init info output..."); fflush(stdout); if (ne_test_pinig(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the global element block IDs */ printf("testing global element block ID output..."); fflush(stdout); if (ne_test_pelbid(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the global node-set info */ printf("testing global node-set params output..."); fflush(stdout); if (ne_test_pnsp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the global side-set info */ printf("testing global side-set params output..."); fflush(stdout); if (ne_test_pssp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the concatenated load-balance parameters */ printf("testing concatenated load balance info output..."); fflush(stdout); if (ne_test_plbpc(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); } else { printf("succesful\n"); fflush(stdout); } /* Test the output of the node map */ printf("testing node map output..."); fflush(stdout); if (ne_test_pnm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the element map */ printf("testing element map output..."); fflush(stdout); if (ne_test_pem(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test the output of the concatenated communication map params */ printf("testing concatenated communication map params output..."); fflush(stdout); if (ne_test_pcmpc(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test nodal communication map output */ printf("testing nodal communication map output..."); fflush(stdout); if (ne_test_pncm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test elemental communication map output */ printf("testing elemental communication map output..."); fflush(stdout); if (ne_test_pecm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Close the ExodusII/Nemesis test file */ printf("closing ExodusII file..."); fflush(stdout); if (ex_close(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; fprintf(stderr, "[%s]: ERROR, unable to close test file \"%s\"!\n", yo, file_name); exit(-1); } printf("successful\n"); fflush(stdout); t_pass++; /*---------------------------------------------------------------------------*/ /* INPUT TEST SECTION */ /*---------------------------------------------------------------------------*/ printf("**********************Input Tests***********************\n"); /* Re-open the ExodusII/NemesisI file */ printf("reopening ExodusII file..."); fflush(stdout); if (ex_open(file_name, EX_READ, &cpu_ws, &io_ws, &version) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of of the initial information */ printf("testing init info input..."); fflush(stdout); if (ne_test_giinf(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of initial global information */ printf("testing global init info input..."); fflush(stdout); if (ne_test_ginig(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of global element block IDs */ printf("testing global element block IDs input..."); fflush(stdout); if (ne_test_gelbid(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of global node-set params */ printf("testing global node-set params input..."); fflush(stdout); if (ne_test_gnsp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of global side-set params */ printf("testing global side-set params input..."); fflush(stdout); if (ne_test_gssp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of load-balance params */ printf("testing load-balance params input..."); fflush(stdout); if (ne_test_glbp(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of the node map */ printf("testing node map input..."); fflush(stdout); if (ne_test_gnm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of element map */ printf("testing element map input..."); fflush(stdout); if (ne_test_gem(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of nodal communication maps */ printf("testing nodal communication map input..."); fflush(stdout); if (ne_test_gncm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Test read of elemental communication maps */ printf("testing elemental communication map input..."); fflush(stdout); if (ne_test_gecm(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; } else { printf("successful\n"); fflush(stdout); t_pass++; } /* Close the ExodusII/Nemesis test file */ printf("closing ExodusII file..."); fflush(stdout); if (ex_close(ne_file_id) < 0) { printf("FAILED\n"); fflush(stdout); t_fail++; fprintf(stderr, "[%s]: ERROR, unable to close test file \"%s\"!\n", yo, file_name); exit(-1); } printf("successful\n"); fflush(stdout); t_pass++; /* Output a test summary */ printf("\n"); printf("Tests Passed: %d\n", t_pass); printf("Tests Failed: %d\n", t_fail); return 0; }
int main (int argc, char **argv) { int exoid, num_dim, num_nodes, num_elem, num_elem_blk; int num_node_sets, num_side_sets, error; int i, j; int num_qa_rec, num_info; int num_glo_vars; int whole_time_step, num_time_steps; int CPU_word_size,IO_word_size; float *glob_var_vals; float time_value; char *coord_names[3], *qa_record[2][4], *info[3], *var_names[3]; ex_opts (EX_VERBOSE | EX_ABORT ); /* Specify compute and i/o word size */ CPU_word_size = 0; /* sizeof(float) */ IO_word_size = 4; /* (4 bytes) */ /* create EXODUS II file */ exoid = ex_create ("test.exo", /* filename path */ EX_CLOBBER, /* create mode */ &CPU_word_size, /* CPU float word size in bytes */ &IO_word_size); /* I/O float word size in bytes */ printf ("after ex_create for test.exo, exoid = %d\n", exoid); printf (" cpu word size: %d io word size: %d\n",CPU_word_size,IO_word_size); /* ncopts = NC_VERBOSE; */ /* initialize file with parameters */ num_dim = 1; num_nodes = 0; num_elem = 0; num_elem_blk = 0; num_node_sets = 0; num_side_sets = 0; error = ex_put_init (exoid, "This is a test", num_dim, num_nodes, num_elem, num_elem_blk, num_node_sets, num_side_sets); printf ("after ex_put_init, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } coord_names[0] = "xcoor"; error = ex_put_coord_names (exoid, coord_names); printf ("after ex_put_coord_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write 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_var_param (exoid, "g", num_glo_vars); printf ("after ex_put_var_param, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } error = ex_put_var_names (exoid, "g", num_glo_vars, var_names); printf ("after ex_put_var_names, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* 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); for (i=0; i<num_time_steps; i++) { time_value = (float)(i+1)/100.; /* write time value */ error = ex_put_time (exoid, whole_time_step, &time_value); printf ("after ex_put_time, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } /* write global variables */ for (j=0; j<num_glo_vars; j++) { glob_var_vals[j] = (float)(j+2) * time_value; } error = ex_put_glob_vars (exoid, whole_time_step, num_glo_vars, glob_var_vals); printf ("after ex_put_glob_vars, error = %d\n", error); if (error) { ex_close (exoid); exit(-1); } 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); /* 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; }
void write_exo_mesh(int debug, char *file_name, INT map_origin, INT num_nodes, INT num_elements, INT num_domains, INT num_nodal_fields, INT num_global_fields, INT num_element_fields, INT num_timesteps, realtyp *x, realtyp *y, realtyp *z, INT *connect, int compression_level, int shuffle, int int64bit) { int CPU_word_size = sizeof(realtyp); int IO_word_size = sizeof(realtyp); int exoid, err, num_dim, num_elem_blk, num_node_sets, num_side_sets; INT i, j, t, index, loc_num_elements, loc_num_nodes, len_connect; INT *elem_map = NULL, *node_map = NULL, *domain_connect = NULL, *loc_connect = NULL; int *elem_var_tab; INT accum_num_elements = 0; INT loc_node_size = -1; realtyp *loc_xcoords = NULL; realtyp *loc_ycoords = NULL; realtyp *loc_zcoords = NULL; realtyp *globals = NULL; char temporary_name[MAX_STRING_LEN]; char **var_name; accum_num_elements = 0; for (i = 0; i < num_domains; i++) { int mymode = EX_MAPS_INT64_API | EX_BULK_INT64_API | EX_IDS_INT64_API; if (int64bit) { mymode |= EX_MAPS_INT64_DB | EX_BULK_INT64_DB | EX_IDS_INT64_DB; } /* create the EXODUSII file */ get_file_name(file_name, "e", i, num_domains, NULL, temporary_name); exoid = ex_create(temporary_name, EX_CLOBBER | mymode, &CPU_word_size, &IO_word_size); if (exoid < 0) { fprintf(stderr, "after ex_create, error = %d\n", exoid); exit(-1); } ex_set_option(exoid, EX_OPT_COMPRESSION_LEVEL, compression_level); ex_set_option(exoid, EX_OPT_COMPRESSION_SHUFFLE, shuffle); if (num_domains > 1) { /* Determine local number of elements */ if (num_elements < num_domains) { fprintf(stderr, "number of elements is less than number of domains.\n"); if (i < num_elements) loc_num_elements = 1; else loc_num_elements = 0; } else { loc_num_elements = num_elements / num_domains; if (i < (num_elements % num_domains)) loc_num_elements++; } len_connect = NUM_NODES_PER_ELEM * loc_num_elements; /* malloc things we need */ if (i == 0) { /* first time through; max size arrays occur on first iteration */ elem_map = malloc(loc_num_elements * sizeof(INT)); domain_connect = malloc(len_connect * sizeof(INT)); loc_connect = malloc(len_connect * sizeof(INT)); node_map = malloc(num_nodes * sizeof(INT)); } /* Create element local/global map */ create_elem_map(loc_num_elements, accum_num_elements, elem_map, map_origin); /* Extract current domain's connectivity, referencing global node ids */ extract_connect(accum_num_elements, loc_num_elements, elem_map, connect, domain_connect, map_origin); accum_num_elements += loc_num_elements; /* The local/global node map is just the current domain's connectivity, sorted with duplicate entries removed */ create_node_map(num_nodes, len_connect, domain_connect, node_map, &loc_num_nodes, map_origin); /* Using local/global node map, convert the domain connectivity (referencing global node ids) to local connectivity (referencing local node ids) */ create_local_connect(node_map, loc_num_nodes, len_connect, domain_connect, loc_connect, map_origin); } else { loc_num_elements = num_elements; loc_num_nodes = num_nodes; } if (debug) { fprintf(stderr, "\n\n\n"); fprintf(stderr, "\n domain: %" PRId64 "\n", i); fprintf(stderr, "\n loc_num_elements: %" PRId64 "\n", loc_num_elements); fprintf(stderr, "\n loc_num_nodes: %" PRId64 "\n", loc_num_nodes); } num_dim = 3; num_elem_blk = 1; num_node_sets = 0; num_side_sets = 0; err = ex_put_init(exoid, "This is an EXODUSII performance test.", num_dim, loc_num_nodes, loc_num_elements, num_elem_blk, num_node_sets, num_side_sets); if (err) { fprintf(stderr, "after ex_put_init, error = %d\n", err); ex_close(exoid); exit(-1); } /* Extract the local x and y coordinates */ if (num_domains > 1) { if (loc_num_nodes > loc_node_size) { loc_xcoords = realloc(loc_xcoords, loc_num_nodes * sizeof(realtyp)); loc_ycoords = realloc(loc_ycoords, loc_num_nodes * sizeof(realtyp)); loc_zcoords = realloc(loc_zcoords, loc_num_nodes * sizeof(realtyp)); loc_node_size = loc_num_nodes; } for (j = 0; j < loc_num_nodes; j++) { index = node_map[j] - map_origin; loc_xcoords[j] = x[index]; loc_ycoords[j] = y[index]; loc_zcoords[j] = z[index]; } err = ex_put_coord(exoid, loc_xcoords, loc_ycoords, loc_zcoords); } else { err = ex_put_coord(exoid, x, y, z); } if (err) { fprintf(stderr, "after ex_put_coord, error = %d\n", err); ex_close(exoid); exit(-1); } if (debug) { fprintf(stderr, "\tCoordinates output.\n"); } #if 1 { INT ids[1] = {EBLK_ID}; INT num_elem_per_block[1]; char *names[1] = {"hex"}; INT num_node_per_elem[1]; INT num_attr_per_block[1]; int write_map = num_domains > 1 ? EX_TRUE : EX_FALSE; num_elem_per_block[0] = loc_num_elements; num_node_per_elem[0] = NUM_NODES_PER_ELEM; num_attr_per_block[0] = 0; err = ex_put_concat_elem_block(exoid, ids, names, num_elem_per_block, num_node_per_elem, num_attr_per_block, write_map); } #else err = ex_put_elem_block(exoid, 10000000000, "hex", loc_num_elements, NUM_NODES_PER_ELEM, 0); #endif if (err) { fprintf(stderr, "after ex_put_elem_block, error = %d\n", err); ex_close(exoid); exit(-1); } if (num_domains > 1) { err = ex_put_elem_conn(exoid, EBLK_ID, loc_connect); } else { err = ex_put_elem_conn(exoid, EBLK_ID, connect); } if (err) { fprintf(stderr, "after ex_put_elem_conn, error = %d\n", err); ex_close(exoid); exit(-1); } if (debug) { fprintf(stderr, "\tConnectivity output.\n"); } /* write out element and node maps */ if (num_domains > 1) { err = ex_put_id_map(exoid, EX_NODE_MAP, node_map); if (err) { fprintf(stderr, "after ex_put_id_map, error = %d\n", err); ex_close(exoid); exit(-1); } err = ex_put_id_map(exoid, EX_ELEM_MAP, elem_map); if (err) { fprintf(stderr, "after ex_put_id_map, error = %d\n", err); ex_close(exoid); exit(-1); } if (debug) { fprintf(stderr, "\tMaps output.\n"); } } /* write out simulated results fields; we'll just write out the x coordinate field 'num_nodal_fields' times */ if (loc_num_nodes < loc_num_elements) { fprintf(stderr, "INTERNAL ERROR: Programmer assumed number of nodes > number of elements, " "but that is not true.\n"); ex_close(exoid); exit(-1); } if (num_element_fields > 0) { elem_var_tab = malloc(num_element_fields * sizeof(int)); for (j = 0; j < num_element_fields; j++) elem_var_tab[j] = 1; } else { elem_var_tab = 0; } err = ex_put_all_var_param(exoid, num_global_fields, num_nodal_fields, num_element_fields, elem_var_tab, 0, 0, 0, 0); if (err) { fprintf(stderr, "after ex_put_all_var_param, error = %d\n", err); ex_close(exoid); exit(-1); } if (num_nodal_fields > 0) { var_name = malloc(num_nodal_fields * sizeof(char *)); for (j = 0; j < num_nodal_fields; j++) { var_name[j] = malloc((MAX_STRING_LEN + 1) * sizeof(char)); sprintf(var_name[j], "node_field_%" PRId64, j + 1); } err = ex_put_variable_names(exoid, EX_NODAL, num_nodal_fields, var_name); for (j = 0; j < num_nodal_fields; j++) { free(var_name[j]); } free(var_name); } if (num_global_fields > 0) { globals = malloc(num_global_fields * sizeof(realtyp)); var_name = malloc(num_global_fields * sizeof(char *)); for (j = 0; j < num_global_fields; j++) { var_name[j] = malloc((MAX_STRING_LEN + 1) * sizeof(char)); sprintf(var_name[j], "global_field_%" PRId64, j + 1); globals[j] = j; } err = ex_put_variable_names(exoid, EX_GLOBAL, num_global_fields, var_name); for (j = 0; j < num_global_fields; j++) { free(var_name[j]); } free(var_name); } if (num_element_fields > 0) { free(elem_var_tab); var_name = malloc(num_element_fields * sizeof(char *)); for (j = 0; j < num_element_fields; j++) { var_name[j] = malloc((MAX_STRING_LEN + 1) * sizeof(char)); sprintf(var_name[j], "element_field_%" PRId64, j + 1); } err = ex_put_variable_names(exoid, EX_ELEM_BLOCK, num_element_fields, var_name); for (j = 0; j < num_element_fields; j++) { free(var_name[j]); } free(var_name); } if (num_nodal_fields + num_global_fields + num_element_fields > 0) { fprintf(stderr, "Domain %" PRId64 "/%" PRId64 ", Writing Timestep: ", i + 1, num_domains); for (t = 0; t < num_timesteps; t++) { realtyp time = t; ex_put_time(exoid, t + 1, &time); fprintf(stderr, "%" PRId64 ", ", t + 1); if (num_global_fields > 0) { err = ex_put_var(exoid, t + 1, EX_GLOBAL, 1, 0, num_global_fields, globals); if (err) { fprintf(stderr, "after ex_put_global_var, error = %d\n", err); ex_close(exoid); exit(-1); } } for (j = 0; j < num_nodal_fields; j++) { err = ex_put_var(exoid, t + 1, EX_NODAL, j + 1, 0, loc_num_nodes, x); if (err) { fprintf(stderr, "after ex_put_nodal_var, error = %d\n", err); ex_close(exoid); exit(-1); } } for (j = 0; j < num_element_fields; j++) { err = ex_put_var(exoid, t + 1, EX_ELEM_BLOCK, j + 1, EBLK_ID, loc_num_elements, x); if (err) { fprintf(stderr, "after ex_put_element_var, error = %d\n", err); ex_close(exoid); exit(-1); } } } fprintf(stderr, "\n"); } err = ex_close(exoid); if (err) { fprintf(stderr, "after ex_close, error = %d\n", err); exit(-1); } if (debug) { fprintf(stderr, "\tFile written.\n"); } } /* * Free Memory */ if (num_domains > 1) { free(domain_connect); free(elem_map); free(loc_connect); free(loc_xcoords); free(loc_ycoords); free(loc_zcoords); free(node_map); } if (num_global_fields > 0) free(globals); }
void write_to_exodus(int rank, int num_procs, char * out_file_name) /*****************************************************************************/ { int exo_access = EX_CLOBBER; int cpu_word_size = sizeof(double); int io_word_size = sizeof(float); int out_id; int i; int b; ex_init_params exinit; int error = 0; out_id = ex_create(out_file_name, exo_access, &cpu_word_size, &io_word_size); if (out_id < 0){ printf("error opening file"); } strncpy( exinit.title, mss.title, MAX_LINE_LENGTH-1 ); exinit.title[MAX_LINE_LENGTH-1] = 0; exinit.num_dim = mss.num_dim; exinit.num_nodes = mss.num_nodes; exinit.num_edge = 0; exinit.num_edge_blk = 0; exinit.num_face = 0; exinit.num_face_blk = 0; exinit.num_elem = mss.num_elem; exinit.num_elem_blk = mss.num_elem_blk; exinit.num_node_sets = mss.num_node_sets; exinit.num_edge_sets = 0; exinit.num_face_sets = 0; exinit.num_side_sets = mss.num_side_sets; exinit.num_elem_sets = 0; exinit.num_node_maps = 0; exinit.num_edge_maps = 0; exinit.num_face_maps = 0; exinit.num_elem_maps = 0; PERROR; if ( ex_put_init_ext(out_id, &exinit) < 0 ) ++error; PERROR; /*now write parallel global information*/ if ( ne_put_init_global( out_id, mss.num_nodes_global, mss.num_elems_global, mss.num_elm_blks_global, mss.num_node_sets_global, mss.num_side_sets_global ) < 0 ) ++error; PERROR; if ( ne_put_init_info( out_id, mss.num_total_proc, mss.num_proc_in_file, mss.type ) < 0 ) ++error; PERROR; if ( ne_put_eb_info_global(out_id,mss.elem_blk_ids_global,mss.elem_blk_cnts_global) < 0 ) ++error; PERROR; if ( mss.num_node_sets_global > 0 ) { if ( ne_put_ns_param_global( out_id, mss.ns_ids_global, mss.ns_cnts_global, mss.ns_df_cnts_global ) < 0 ) ++error; } PERROR; if ( mss.num_side_sets_global > 0 ) { if ( ne_put_ss_param_global( out_id, mss.ss_ids_global, mss.ss_cnts_global, mss.ss_df_cnts_global ) < 0 ) ++error; } PERROR; /*writingparallel info*/ if ( ne_put_loadbal_param( out_id, mss.num_internal_nodes, mss.num_border_nodes, mss.num_external_nodes, mss.num_internal_elems, mss.num_border_elems, mss.num_node_comm_maps, mss.num_elem_comm_maps, rank ) < 0 ) ++error; PERROR; if ( ne_put_cmap_params( out_id, mss.node_cmap_ids, (int*)mss.node_cmap_node_cnts, mss.elem_cmap_ids, (int*)mss.elem_cmap_elem_cnts, rank ) < 0 ) ++error; PERROR; if ( ne_put_elem_map( out_id, mss.internal_elements, mss.border_elements, rank ) < 0 ) ++error; PERROR; if ( ne_put_node_map( out_id, mss.internal_nodes, mss.border_nodes, mss.external_nodes, rank ) < 0 ) ++error; PERROR; for (i = 0; i < mss.num_node_comm_maps; i++) { if ( ne_put_node_cmap( out_id, mss.node_cmap_ids[i], mss.comm_node_ids[i], mss.comm_node_proc_ids[i], rank ) < 0 ) ++error; } PERROR; for (i = 0; i < mss.num_elem_comm_maps; i++) { if ( ne_put_elem_cmap( out_id, mss.elem_cmap_ids[i], mss.comm_elem_ids[i], mss.comm_side_ids[i], mss.comm_elem_proc_ids[i], rank ) < 0 ) ++error; } PERROR; /*coords*/ error += ex_put_coord(out_id, mss.coord, (mss.coord)+mss.num_nodes, (mss.coord)+2*mss.num_nodes); PERROR; error += ex_put_coord_names(out_id, mss.bptr); PERROR; /*map*/ error += ex_put_map(out_id, mss.element_order_map); PERROR; error += ex_put_elem_num_map(out_id, mss.global_element_numbers); PERROR; error += ex_put_node_num_map(out_id, mss.global_node_numbers); PERROR; /*block info*/ for(b = 0; b < mss.num_elem_blk; b++) { int gpe = 0; int fpe = 0; error += ex_put_block( out_id, EX_ELEM_BLOCK, mss.block_id[b], mss.element_types[b], mss.elements[b], mss.nodes_per_element[b], gpe, fpe, mss.element_attributes[b] ); /* num attr */ PERROR; } /* write element connectivity information */ for (b = 0; b < mss.num_elem_blk; b++) { if ( mss.elements[b] > 0 ){ error += ex_put_elem_conn(out_id,mss.block_id[b],mss.elmt_node_linkage[b]); PERROR; } } /* write in nodal boundary sets for the body. */ for(i = 0; i < mss.num_node_sets; i++) { error += ex_put_node_set_param(out_id, mss.node_set_id[i], mss.num_nodes_in_node_set[i], mss.num_df_in_node_set[i]); PERROR; if(mss.num_nodes_in_node_set[i]) error += ex_put_node_set(out_id, mss.node_set_id[i], mss.node_set_nodes[i]); PERROR; } for(i = 0; i < mss.num_side_sets; i++) { error += ex_put_side_set_param(out_id, mss.side_set_id[i], mss.num_elements_in_side_set[i], mss.num_df_in_side_set[i]); PERROR; if(mss.num_elements_in_side_set[i]) error += ex_put_side_set(out_id, mss.side_set_id[i], mss.side_set_elements[i], mss.side_set_faces[i]); PERROR; } error += ex_put_qa(out_id, mss.num_qa_records, mss.qaRecord); PERROR; ex_close(out_id); }
int cCreateEdgeFace( int argc, char* argv[] ) { int exoid; int appWordSize = 8; int diskWordSize = 8; /* int concatBlocks = ex_have_arg( argc, argv, "-pcab" ); */ int concatSets = ex_have_arg( argc, argv, "-pcset" ); int concatResult = ex_have_arg( argc, argv, "-pvpax" ); double t; ex_init_params modelParams = { "CreateEdgeFace Test", /* title */ 3, /* num_dim */ 12, /* num_nodes */ 20, /* num_edge */ 1, /* num_edge_blk */ 11, /* num_face */ 3, /* num_face_blk */ 3, /* num_elem */ 2, /* num_elem_blk */ 1, /* num_node_sets */ 1, /* num_edge_sets */ 1, /* num_face_sets */ 1, /* num_side_sets */ 2, /* num_elem_sets */ 1, /* num_node_map */ 1, /* num_edge_map */ 1, /* num_face_map */ 1, /* num_elem_map */ }; ex_block edgeBlocks[1]; ex_block faceBlocks[3]; ex_block elemBlocks[2]; ex_var_params varParams; ex_opts (EX_VERBOSE | EX_ABORT ); edgeBlocks[0].type = EX_EDGE_BLOCK; edgeBlocks[0].id = 100; edgeBlocks[0].num_entry = 20; edgeBlocks[0].num_nodes_per_entry = 2; edgeBlocks[0].num_attribute = 1; strcpy(edgeBlocks[0].topology, "EDGE2"); faceBlocks[0].type = EX_FACE_BLOCK; faceBlocks[0].id = 500; faceBlocks[0].num_entry = 2; faceBlocks[0].num_nodes_per_entry = 4; faceBlocks[0].num_attribute = 1; strcpy(faceBlocks[0].topology, "QUAD4"); faceBlocks[1].type = EX_FACE_BLOCK; faceBlocks[1].id = 600; faceBlocks[1].num_entry = 1; faceBlocks[1].num_nodes_per_entry = 4; faceBlocks[1].num_attribute = 1; strcpy(faceBlocks[1].topology, "QUAD4"); faceBlocks[2].type = EX_FACE_BLOCK; faceBlocks[2].id = 700; faceBlocks[2].num_entry = 8; faceBlocks[2].num_nodes_per_entry = 4; faceBlocks[2].num_attribute = 1; strcpy(faceBlocks[2].topology, "QUAD4"); elemBlocks[0].type = EX_ELEM_BLOCK; elemBlocks[0].id = 200; elemBlocks[0].num_entry = 2; elemBlocks[0].num_nodes_per_entry = 8; elemBlocks[0].num_edges_per_entry = 12; elemBlocks[0].num_faces_per_entry = 6; elemBlocks[0].num_attribute = 2; strcpy(elemBlocks[0].topology, "HEX8"); elemBlocks[1].type = EX_ELEM_BLOCK; elemBlocks[1].id = 201; elemBlocks[1].num_entry = 1; elemBlocks[1].num_nodes_per_entry = 4; elemBlocks[1].num_edges_per_entry = 0; elemBlocks[1].num_faces_per_entry = 0; elemBlocks[1].num_attribute = 0; strcpy(elemBlocks[1].topology, "TET4"); varParams.edge_var_tab = (int*)malloc(2 * sizeof(int)); varParams.face_var_tab = (int*)malloc(3 * sizeof(int)); varParams.elem_var_tab = (int*)malloc(2 * sizeof(int)); varParams.nset_var_tab = (int*)0; varParams.eset_var_tab = (int*)0; varParams.fset_var_tab = (int*)malloc(1 * sizeof(int)); varParams.sset_var_tab = (int*)0; varParams.elset_var_tab = (int*)0; varParams.num_glob = 2; varParams.num_node = 1; varParams.num_edge = 2; varParams.edge_var_tab[0] = 1; varParams.edge_var_tab[1] = 1; varParams.num_face = 1; varParams.face_var_tab[0] = 1; varParams.face_var_tab[1] = 1; varParams.face_var_tab[2] = 1; varParams.num_elem = 1; varParams.elem_var_tab[0] = 1; varParams.elem_var_tab[1] = 0; varParams.num_nset = 0; varParams.num_eset = 0;; varParams.num_fset = 1; varParams.fset_var_tab[0] = 1; varParams.num_sset = 0; varParams.num_elset = 0; exoid = ex_create( EX_TEST_FILENAME, EX_CLOBBER, &appWordSize, &diskWordSize ); if ( exoid <= 0 ) { fprintf( stderr, "Unable to open \"%s\" for writing.\n", EX_TEST_FILENAME ); return 1; } EXCHECK( ex_put_init_ext( exoid, &modelParams ), "Unable to initialize database.\n" ); { int blk; for ( blk = 0; blk < modelParams.num_edge_blk; ++blk ) { EXCHECK( ex_put_block_param( exoid, edgeBlocks[blk]), "Unable to write edge block" ); } for ( blk = 0; blk < modelParams.num_face_blk; ++blk ) { EXCHECK( ex_put_block_param( exoid, faceBlocks[blk]), "Unable to write face block" ); } for ( blk = 0; blk < modelParams.num_elem_blk; ++blk ) { EXCHECK( ex_put_block_param( exoid, elemBlocks[blk]), "Unable to write elem block" ); } } EXCHECK( ex_put_coord( exoid, (void*)coordsX, (void*)coordsY, (void*)coordsZ ), "Unable to write coordinates.\n" ); EXCHECK( ex_put_coord_names( exoid, (char**)coordsNames ), "Unable to write coordinate names.\n" ); /* =============== Connectivity ================== */ /* *** NEW API *** */ EXCHECK( ex_put_conn( exoid, EX_EDGE_BLOCK, edgeBlocks[0].id, ebconn1, 0, 0 ), "Unable to write edge block connectivity.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_conn( exoid, EX_FACE_BLOCK, faceBlocks[0].id, fbconn1, 0, 0 ), "Unable to write face block 1 connectivity.\n" ); EXCHECK( ex_put_conn( exoid, EX_FACE_BLOCK, faceBlocks[1].id, fbconn2, 0, 0 ), "Unable to write face block 2 connectivity.\n" ); EXCHECK( ex_put_conn( exoid, EX_FACE_BLOCK, faceBlocks[2].id, fbconn3, 0, 0 ), "Unable to write face block 3 connectivity.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_conn( exoid, EX_ELEM_BLOCK, elemBlocks[0].id, conn1, econn1, fconn1 ), "Unable to write elem block 1 connectivity.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_conn( exoid, EX_ELEM_BLOCK, elemBlocks[1].id, conn2, 0, 0 ), "Unable to write elem block 2 connectivity.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_names( exoid, EX_EDGE_BLOCK, (char**)edblk_names ), "Unable to write edge block names.\n" ); EXCHECK( ex_put_names( exoid, EX_FACE_BLOCK, (char**)fablk_names ), "Unable to write face block names.\n" ); EXCHECK( ex_put_names( exoid, EX_ELEM_BLOCK, (char**) eblk_names ), "Unable to write element block names.\n" ); /* =============== Number Maps ================== */ /* *** NEW API *** */ EXCHECK( ex_put_num_map( exoid, EX_NODE_MAP, 300, nmap1 ), "Unable to write node map.\n" ); EXCHECK( ex_put_num_map( exoid, EX_EDGE_MAP, 800, edmap1 ), "Unable to write edge map.\n" ); EXCHECK( ex_put_num_map( exoid, EX_FACE_MAP, 900, famap1 ), "Unable to write face map.\n" ); EXCHECK( ex_put_num_map( exoid, EX_ELEM_MAP, 400, emap1 ), "Unable to write element map.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_names( exoid, EX_NODE_MAP, (char**) nmap_names ), "Unable to write node map names.\n" ); EXCHECK( ex_put_names( exoid, EX_EDGE_MAP, (char**)edmap_names ), "Unable to write edge map names.\n" ); EXCHECK( ex_put_names( exoid, EX_FACE_MAP, (char**)famap_names ), "Unable to write face map names.\n" ); EXCHECK( ex_put_names( exoid, EX_ELEM_MAP, (char**) emap_names ), "Unable to write element map names.\n" ); /* =============== Attribute names ================ */ /* *** NEW API *** */ EXCHECK( ex_put_attr_names( exoid, EX_EDGE_BLOCK, edgeBlocks[0].id, (char**)edge_attr_names1 ), "Unable to write edge block 1 attribute names.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_attr_names( exoid, EX_FACE_BLOCK, faceBlocks[0].id, (char**)face_attr_names1 ), "Unable to write face block 1 attribute names.\n" ); EXCHECK( ex_put_attr_names( exoid, EX_FACE_BLOCK, faceBlocks[1].id, (char**)face_attr_names2 ), "Unable to write face block 1 attribute names.\n" ); EXCHECK( ex_put_attr_names( exoid, EX_FACE_BLOCK, faceBlocks[2].id, (char**)face_attr_names3 ), "Unable to write face block 1 attribute names.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_attr_names( exoid, EX_ELEM_BLOCK, elemBlocks[0].id, (char**)elem_attr_names1 ), "Unable to write elem block 1 attribute names.\n" ); /* =============== Attribute values =============== */ /* *** NEW API *** */ EXCHECK( ex_put_attr( exoid, EX_EDGE_BLOCK, edgeBlocks[0].id, edge_attr_values1 ), "Unable to write edge block 1 attribute values.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_attr( exoid, EX_FACE_BLOCK, faceBlocks[0].id, face_attr_values1 ), "Unable to write face block 1 attribute values.\n" ); EXCHECK( ex_put_attr( exoid, EX_FACE_BLOCK, faceBlocks[1].id, face_attr_values2 ), "Unable to write face block 1 attribute values.\n" ); EXCHECK( ex_put_attr( exoid, EX_FACE_BLOCK, faceBlocks[2].id, face_attr_values3 ), "Unable to write face block 1 attribute values.\n" ); /* *** NEW API *** */ EXCHECK( ex_put_attr( exoid, EX_ELEM_BLOCK, elemBlocks[0].id, elem_attr_values1 ), "Unable to write elem block 1 attribute values.\n" ); /* =============== Set parameters ================= */ /* *** NEW API *** */ EXCHECK( ex_put_names( exoid, EX_NODE_SET, (char**)nset_names ), "Unable to write node set names.\n" ); EXCHECK( ex_put_names( exoid, EX_EDGE_SET, (char**)eset_names ), "Unable to write edge set names.\n" ); EXCHECK( ex_put_names( exoid, EX_FACE_SET, (char**)fset_names ), "Unable to write face set names.\n" ); EXCHECK( ex_put_names( exoid, EX_SIDE_SET, (char**)sset_names ), "Unable to write side set names.\n" ); EXCHECK( ex_put_names( exoid, EX_ELEM_SET, (char**)elset_names ), "Unable to write element set names.\n" ); { ex_set allSets[1+1+1+1+2]; ex_set *nodeSets = &allSets[0]; ex_set *edgeSets = &allSets[1]; ex_set *faceSets = &allSets[2]; ex_set *sideSets = &allSets[3]; ex_set *elemSets = &allSets[4]; nodeSets[0].type = EX_NODE_SET; nodeSets[0].id = 1000; nodeSets[0].num_entry = 3; nodeSets[0].num_distribution_factor = 0; nodeSets[0].entry_list = nset_nodes; nodeSets[0].extra_list = NULL; nodeSets[0].distribution_factor_list = NULL; edgeSets[0].type = EX_EDGE_SET; edgeSets[0].id = 1200; edgeSets[0].num_entry = 6; edgeSets[0].num_distribution_factor = 6; edgeSets[0].entry_list = eset_edges; edgeSets[0].extra_list = eset_orient; edgeSets[0].distribution_factor_list = eset_df; faceSets[0].type = EX_FACE_SET; faceSets[0].id = 1400; faceSets[0].num_entry = 2; faceSets[0].num_distribution_factor = 0; faceSets[0].entry_list = fset_faces; faceSets[0].extra_list = fset_orient; faceSets[0].distribution_factor_list = NULL; sideSets[0].type = EX_SIDE_SET; sideSets[0].id = 1400; sideSets[0].num_entry = 5; sideSets[0].num_distribution_factor = 0; sideSets[0].entry_list = sset_elems; sideSets[0].extra_list = sset_sides; sideSets[0].distribution_factor_list = NULL; elemSets[0].type = EX_ELEM_SET; elemSets[0].id = 1800; elemSets[0].num_entry = 1; elemSets[0].num_distribution_factor = 0; elemSets[0].entry_list = &elset_elems[0]; elemSets[0].extra_list = NULL; elemSets[0].distribution_factor_list = NULL; elemSets[1].type = EX_ELEM_SET; elemSets[1].id = 1900; elemSets[1].num_entry = 1; elemSets[1].num_distribution_factor = 0; elemSets[1].entry_list = &elset_elems[1]; elemSets[1].extra_list = NULL; elemSets[1].distribution_factor_list = NULL; if ( concatSets ) { EXCHECK( ex_put_sets(exoid, 1+2+1+1+1, allSets), "Unable to output concatenated sets.\n" ); } else { EXCHECK( ex_put_sets( exoid, 1, nodeSets), "Unable to write node sets.\n" ); EXCHECK( ex_put_sets( exoid, 1, edgeSets), "Unable to write edge sets.\n" ); EXCHECK( ex_put_sets( exoid, 1, faceSets), "Unable to write face sets.\n" ); EXCHECK( ex_put_sets( exoid, 1, sideSets), "Unable to write side sets.\n" ); EXCHECK( ex_put_sets( exoid, 2, elemSets), "Unable to write element sets.\n" ); } } /* =============== Result variable params ========= */ /* *** NEW API *** */ if ( concatResult ) { EXCHECK( ex_put_all_var_param_ext( exoid, &varParams ), "Unable to write result variable parameter information.\n" ); } else { EXCHECK( ex_put_var_param( exoid, "G", 2 ), "Unable to write global result variable parameters.\n" ); EXCHECK( ex_put_var_param( exoid, "N", 1 ), "Unable to write nodal result variable parameters.\n" ); EXCHECK( ex_put_var_param( exoid, "E", 1 ), "Unable to write element result variable parameters.\n" ); EXCHECK( ex_put_var_param( exoid, "L", 2 ), "Unable to write edge result variable parameters.\n" ); EXCHECK( ex_put_var_param( exoid, "F", 1 ), "Unable to write face result variable parameters.\n" ); EXCHECK( ex_put_var_param( exoid, "A", 1 ), "Unable to write faceset result variable parameters.\n" ); } /* =============== Result variable names ========== */ /* *** NEW API *** */ EXCHECK( ex_put_var_name( exoid, "G", 1, "CALIBER" ), "Unable to write variable name.\n" ); EXCHECK( ex_put_var_name( exoid, "g", 2, "GUNPOWDER" ), "Unable to write variable name.\n" ); EXCHECK( ex_put_var_name( exoid, "N", 1, "RHO" ), "Unable to write variable name.\n" ); EXCHECK( ex_put_var_name( exoid, "l", 1, "GAMMA1" ), "Unable to write variable name.\n" ); EXCHECK( ex_put_var_name( exoid, "L", 2, "GAMMA2" ), "Unable to write variable name.\n" ); EXCHECK( ex_put_var_name( exoid, "f", 1, "PHI" ), "Unable to write variable name.\n" ); EXCHECK( ex_put_var_name( exoid, "E", 1, "EPSTRN" ), "Unable to write variable name.\n" ); EXCHECK( ex_put_var_name( exoid, "A", 1, "PHI0" ), "Unable to write variable name.\n" ); /* =============== Result variable values ========= */ t = 1.; /* *** NEW API *** */ EXCHECK( ex_put_time( exoid, 1, &t ), "Unable to write time value.\n" ); EXCHECK( ex_put_var( exoid, 1, EX_GLOBAL, 1, 0/*N/A*/, 2, vals_glo_var[0] ), "Unable to write global var 1.\n" ); EXCHECK( ex_put_var( exoid, 1, EX_EDGE_BLOCK, 1, 100, 20, vals_edge_var1eb1[0] ), "Unable to write edge block 1 var 1.\n" ); EXCHECK( ex_put_var( exoid, 1, EX_EDGE_BLOCK, 2, 100, 20, vals_edge_var2eb1[0] ), "Unable to write edge block 1 var 2.\n" ); EXCHECK( ex_put_var( exoid, 1, EX_FACE_BLOCK, 1, 500, 2, vals_face_var1fb1[0] ), "Unable to write face block 1 var 1.\n" ); EXCHECK( ex_put_var( exoid, 1, EX_FACE_BLOCK, 1, 700, 8, vals_face_var1fb3[0] ), "Unable to write face block 3 var 1.\n" ); EXCHECK( ex_put_var( exoid, 1, EX_ELEM_BLOCK, 1, 200, 2, vals_elem_var1eb1[0] ), "Unable to write elem block 1 var 1.\n" ); EXCHECK( ex_put_var( exoid, 1, EX_FACE_SET, 1, 1400, 2, vals_fset_var1fs1[0] ), "Unable to write face set 1 var 1.\n" ); t = 2.; EXCHECK( ex_put_time( exoid, 2, &t ), "Unable to write time value.\n" ); EXCHECK( ex_put_var( exoid, 2, EX_GLOBAL, 1, 0/*N/A*/, 2, vals_glo_var[1] ), "Unable to write global var 1.\n" ); EXCHECK( ex_put_var( exoid, 2, EX_EDGE_BLOCK, 1, 100, 20, vals_edge_var1eb1[1] ), "Unable to write edge block 1 var 1.\n" ); EXCHECK( ex_put_var( exoid, 2, EX_EDGE_BLOCK, 2, 100, 20, vals_edge_var2eb1[1] ), "Unable to write edge block 1 var 2.\n" ); EXCHECK( ex_put_var( exoid, 2, EX_FACE_BLOCK, 1, 500, 2, vals_face_var1fb1[1] ), "Unable to write face block 1 var 1.\n" ); EXCHECK( ex_put_var( exoid, 2, EX_FACE_BLOCK, 1, 700, 8, vals_face_var1fb3[1] ), "Unable to write face block 3 var 1.\n" ); EXCHECK( ex_put_var( exoid, 2, EX_ELEM_BLOCK, 1, 200, 2, vals_elem_var1eb1[1] ), "Unable to write elem block 1 var 1.\n" ); EXCHECK( ex_put_var( exoid, 2, EX_FACE_SET, 1, 1400, 2, vals_fset_var1fs1[1] ), "Unable to write face set 1 var 1.\n" ); EXCHECK( ex_put_nodal_var( exoid, 1, 1, 12, vals_nod_var[0] ), "Unable to write nodal var 1.\n" ); EXCHECK( ex_put_nodal_var( exoid, 2, 1, 12, vals_nod_var[1] ), "Unable to write nodal var 1.\n" ); EXCHECK( ex_close( exoid ), "Unable to close database.\n" ); return 0; }