ExodusII 4.96
excn2s.c File Reference
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include "exodusII.h"
#include "exodusII_int.h"
Include dependency graph for excn2s.c:

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)

Function Documentation

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.

Parameters:
exoidexodus file id
*num_elem_per_setnumber of element per set
*num_nodes_per_setnumber of nodes per set
*side_sets_elem_indexindex array of elements into elem list
*side_sets_node_indexindex array of nodes
*side_sets_elem_listarray of elements
*side_sets_node_listarray of nodes
[out]*side_sets_side_listarray 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.