⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 excn2s.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
📖 第 1 页 / 共 3 页
字号:
         and adding the element number position * number of nodes per elem */    num_nodes_per_elem =                elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].num_nodes_per_elem;    for (n=0; n<num_nodes_per_elem; n++)    {      /* find node in connectivity array that matches first node in side set */      if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]] ==           connect[num_nodes_per_elem*(elem_num_pos)+n])      {        switch (elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].elem_type_val)        {          case CIRCLE:          case SPHERE:          {            /* simple case: 1st node number is same as side # */                side_sets_side_list[ss_elem_ndx[j]] = n+1;            break;          }          case QUAD:          case TRIANGLE:          case TRUSS:          case BEAM:          {            /* simple case: 1st node number is same as side # */                side_sets_side_list[ss_elem_ndx[j]] = n+1;            break;          }          case TRISHELL:          {            /* use table to find which node to compare to next */            num_node_per_side = ss_elem_node_ndx[ss_elem_ndx[j]+1] -                                 ss_elem_node_ndx[ss_elem_ndx[j]];            if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                connect[num_nodes_per_elem*(elem_num_pos)+                        (trishell_table[0][2*n]-1)])             {              /* Assume only front or back, no edges... */              side_sets_side_list[ss_elem_ndx[j]] = trishell_table[1][2*n];            }            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                connect[num_nodes_per_elem*(elem_num_pos)+                        (trishell_table[0][2*n+1]-1)])             {              /* Assume only front or back, no edges... */              side_sets_side_list[ss_elem_ndx[j]] = trishell_table[1][2*n+1];            }            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                connect[num_nodes_per_elem*(elem_num_pos)+                        (trishell_table[0][2*n+2]-1)])             {              /* Assume only front or back, no edges... */              side_sets_side_list[ss_elem_ndx[j]] = trishell_table[1][2*n+2];            }            else            {               exerrval = EX_BADPARAM;              sprintf(errmsg,                     "Error: failed to find TRIANGULAR SHELL element %d, node %d in connectivity array %d for file id %d",                     side_sets_elem_list[ss_elem_ndx[j]],                     side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1],                     elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].elem_blk_id,                     exoid);              ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);              free(connect);              free(ss_elem_node_ndx);              free(ss_parm_ndx);              free(elem_blk_parms);              free(elem_blk_ids);              free(ss_elem_ndx);              return (EX_FATAL);            }            break;          }          case SHELL:          {            /* use table to find which node to compare to next */            num_node_per_side = ss_elem_node_ndx[ss_elem_ndx[j]+1] -                                 ss_elem_node_ndx[ss_elem_ndx[j]];            if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                connect[num_nodes_per_elem*(elem_num_pos)+                        (shell_table[0][2*n]-1)])             {              if (num_node_per_side >= 4)                /* 4- or 8-node side (front or back face) */                side_sets_side_list[ss_elem_ndx[j]] = shell_table[1][2*n];              else                /* 2- or 3-node side (edge of shell) */                side_sets_side_list[ss_elem_ndx[j]] = shell_edge_table[1][2*n];            }            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                connect[num_nodes_per_elem*(elem_num_pos)+                        (shell_table[0][2*n+1]-1)])             {              if (num_node_per_side >= 4)                /* 4- or 8-node side (front or back face) */                side_sets_side_list[ss_elem_ndx[j]] = shell_table[1][2*n+1];              else                /* 2- or 3-node side (edge of shell) */                side_sets_side_list[ss_elem_ndx[j]]=shell_edge_table[1][2*n+1];            }            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                connect[num_nodes_per_elem*(elem_num_pos)+                        (shell_table[0][2*n+2]-1)])             {              if (num_node_per_side >= 4)                /* 4- or 8-node side (front or back face) */                side_sets_side_list[ss_elem_ndx[j]] = shell_table[1][2*n+2];              else                /* 2- or 3-node side (edge of shell) */                side_sets_side_list[ss_elem_ndx[j]]=shell_edge_table[1][2*n+2];            }            else            {               exerrval = EX_BADPARAM;              sprintf(errmsg,                     "Error: failed to find SHELL element %d, node %d in connectivity array %d for file id %d",                     side_sets_elem_list[ss_elem_ndx[j]],                     side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1],                     elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].elem_blk_id,                     exoid);              ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);              free(connect);              free(ss_elem_node_ndx);              free(ss_parm_ndx);              free(elem_blk_parms);              free(elem_blk_ids);              free(ss_elem_ndx);              return (EX_FATAL);            }            break;          }          case HEX:          {            /* use table to find which node to compare to next */                      if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (hex_table[0][3*n]-1)])              side_sets_side_list[ss_elem_ndx[j]] = hex_table[1][3*n];            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (hex_table[0][3*n+1]-1)])              side_sets_side_list[ss_elem_ndx[j]] = hex_table[1][3*n+1];            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (hex_table[0][3*n+2]-1)])              side_sets_side_list[ss_elem_ndx[j]] = hex_table[1][3*n+2];            else            {              exerrval = EX_BADPARAM;              sprintf(errmsg,                     "Error: failed to find HEX element %d, node %d in connectivity array %d for file id %d",                     side_sets_elem_list[ss_elem_ndx[j]],                     side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1],                     elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].elem_blk_id,                     exoid);              ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);              free(connect);              free(ss_elem_node_ndx);              free(ss_parm_ndx);              free(elem_blk_parms);              free(elem_blk_ids);              free(ss_elem_ndx);              return (EX_FATAL);            }            break;          }          case TETRA:          {            /* use table to find which node to compare to next */                      if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (tetra_table[0][3*n]-1)])              side_sets_side_list[ss_elem_ndx[j]] = tetra_table[1][3*n];            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (tetra_table[0][3*n+1]-1)])              side_sets_side_list[ss_elem_ndx[j]] = tetra_table[1][3*n+1];            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (tetra_table[0][3*n+2]-1)])              side_sets_side_list[ss_elem_ndx[j]] = tetra_table[1][3*n+2];            else            {              exerrval = EX_BADPARAM;              sprintf(errmsg,                     "Error: failed to find TETRA element %d, node %d in connectivity array %d for file id %d",                     side_sets_elem_list[ss_elem_ndx[j]],                     side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1],                     elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].elem_blk_id,                     exoid);              ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);              free(connect);              free(ss_elem_node_ndx);              free(ss_parm_ndx);              free(elem_blk_parms);              free(elem_blk_ids);              free(ss_elem_ndx);              return (EX_FATAL);            }            break;          }          case PYRAMID:          { /* NOTE: PYRAMID elements in side set node lists are currently not supported */            exerrval = EX_BADPARAM;            sprintf(errmsg,  "ERROR: unsupported PYRAMID element found in side set node list in file id %d",                    exoid);            ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);            free(connect);            free(ss_elem_node_ndx);            free(ss_parm_ndx);            free(elem_blk_parms);            free(elem_blk_ids);            free(ss_elem_ndx);            return (EX_FATAL);          }          case WEDGE:          {#if 1 /* NOTE: WEDGE elements in side set node lists are currently not supported */            exerrval = EX_BADPARAM;            sprintf(errmsg,  "ERROR: unsupported WEDGE element found in side set node list in file id %d",                    exoid);            ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);            free(connect);            free(ss_elem_node_ndx);            free(ss_parm_ndx);            free(elem_blk_parms);            free(elem_blk_ids);            free(ss_elem_ndx);            return (EX_FATAL);#else            /* use wedge_table to find which node to compare to next */          /* This section is commented out because Wedges are no longer supported !!!*/            if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (wedge_table[0][3*n]-1)])              side_sets_side_list[ss_elem_ndx[j]] = wedge_table[1][3*n];            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (wedge_table[0][3*n+1]-1)])              side_sets_side_list[ss_elem_ndx[j]] = wedge_table[1][3*n+1];            else if (side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1] ==                 connect[num_nodes_per_elem*(elem_num_pos)+                        (wedge_table[0][3*n+2]-1)])              side_sets_side_list[ss_elem_ndx[j]] = wedge_table[1][3*n+2];            else            {              exerrval = EX_BADPARAM;              sprintf(errmsg,                     "Error: failed to find WEDGE element %d, node %d in connectivity array %d for file id %d",                     side_sets_elem_list[ss_elem_ndx[j]],                     side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]+1],                     elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].elem_blk_id,                     exoid);              ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);              free(connect);              free(ss_elem_node_ndx);              free(ss_parm_ndx);              free(elem_blk_parms);              free(elem_blk_ids);              free(ss_elem_ndx);              return (EX_FATAL);            }            break;#endif          }          default:          {            exerrval = EX_BADPARAM;            sprintf(errmsg,                   "Error: %s is an unsupported element type",                    elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].elem_type);            ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);            return(EX_FATAL);          }        }        break; /* done with this element */      }    }    if (n >= num_nodes_per_elem) /* did we find the node? */    {      exerrval = EX_BADPARAM;      sprintf(errmsg,             "Error: failed to find element %d, node %d in element block %d for file id %d",              side_sets_elem_list[ss_elem_ndx[j]],              side_sets_node_list[ss_elem_node_ndx[ss_elem_ndx[j]]],              elem_blk_parms[ss_parm_ndx[ss_elem_ndx[j]]].elem_blk_id,              exoid);      ex_err("ex_cvt_nodes_to_sides",errmsg,exerrval);      free(connect);      free(ss_elem_node_ndx);      free(ss_parm_ndx);      free(elem_blk_parms);      free(elem_blk_ids);      free(ss_elem_ndx);      return (EX_FATAL);    }  }  /* All done: release connectivity array space, element block ids array,     element block parameters array, and side set element index array */  free(connect);  free(ss_elem_node_ndx);  free(ss_parm_ndx);  free(elem_blk_parms);  free(elem_blk_ids);  free(ss_elem_ndx);  return (EX_NOERR);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -