|
ExodusII 4.96
|
#include <ctype.h>#include <string.h>#include <stdlib.h>#include "exodusII.h"#include "exodusII_int.h"
Functions | |
| int | ex_cvt_nodes_to_sides (int exoid, int *num_elem_per_set, int *num_nodes_per_set, int *side_sets_elem_index, int *side_sets_node_index, int *side_sets_elem_list, int *side_sets_node_list, int *side_sets_side_list) |
| int ex_cvt_nodes_to_sides | ( | int | exoid, |
| int * | num_elem_per_set, | ||
| int * | num_nodes_per_set, | ||
| int * | side_sets_elem_index, | ||
| int * | side_sets_node_index, | ||
| int * | side_sets_elem_list, | ||
| int * | side_sets_node_list, | ||
| int * | side_sets_side_list | ||
| ) |
This routine is designed to take the results from retrieving the ExodusI style concatenated side sets to the Exodus II V 2.0 definition uses the element id to get the coordinate node list, element block connectivity, element type to convert the side set node list to a side/face list.
| exoid | exodus file id | |
| *num_elem_per_set | number of element per set | |
| *num_nodes_per_set | number of nodes per set | |
| *side_sets_elem_index | index array of elements into elem list | |
| *side_sets_node_index | index array of nodes | |
| *side_sets_elem_list | array of elements | |
| *side_sets_node_list | array of nodes | |
| [out] | *side_sets_side_list | array of sides/faces |
Algorithm:
Read elem_block_ids --> elem_blk_id[array]
Read element block parameters --> elem_blk_parms[array]
Determine total number of elements in side set by summing num_elem_per_set
Build side set element to side set node list index --> ss_elem_node_ndx[array]
For each element in the side_set_elem_list {
If Jth element is not in current element block (e.g. J>elem_ctr) {
get element block parameters (num_elem_in_blk, ...)
elem_ctr += num_elem_in_blk
free old connectity array space
allocate connectivity array: size=num_elem_in_blk*num_nodes_per_elem
get connectivity array
}
If Jth element is in current element block (e.g. J<=elem_ctr) {
For each node in element (linear search of up to num_nodes_per_elem) {
If side set element node[1] == element node[i] {
Case element type = Hex {
If side set element node[2] == element node[Hex_table[i,1]]
Jth side = Hex_table[i,2]
break
}
Case element type = Wedge {
If side set element node[2] == element node[Wedge_table[i,1]]
Jth side = Wedge_table[i,2]
break
}
}
}
}
}
References elem_blk_parm::elem_blk_id, elem_blk_parm::elem_ctr, elem_blk_parm::elem_type, elem_blk_parm::elem_type_val, EX_BADPARAM, EX_EL_BEAM, EX_EL_CIRCLE, EX_EL_HEX, EX_EL_NULL_ELEMENT, EX_EL_PYRAMID, EX_EL_QUAD, EX_EL_SHELL, EX_EL_SPHERE, EX_EL_TETRA, EX_EL_TRIANGLE, EX_EL_TRISHELL, EX_EL_TRUSS, EX_EL_UNK, EX_EL_WEDGE, ex_err(), EX_FATAL, ex_get_elem_blk_ids(), ex_get_elem_block(), ex_get_elem_conn(), EX_INQ_DIM, EX_INQ_ELEM, EX_INQ_ELEM_BLK, EX_INQ_SIDE_SETS, ex_inquire(), ex_iqsort(), EX_MEMFAIL, EX_MSG, EX_NOERR, EX_WARN, exerrval, FALSE, MAX_ERR_LENGTH, MAX_STR_LENGTH, NULL, elem_blk_parm::num_attr, elem_blk_parm::num_elem_in_blk, elem_blk_parm::num_nodes_per_elem, elem_blk_parm::num_nodes_per_side, and TRUE.