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

📄 exgssn.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
📖 第 1 页 / 共 3 页
字号:
          }        }        else if (ndim == 3)  /* 3d TRIs */        {          side_set_node_list[node_pos] =             connect[connect_offset+tri3_table[side_num][0]-1];          side_set_node_list[node_pos+1] =             connect[connect_offset+tri3_table[side_num][1]-1];          side_set_node_cnt_list[ss_elem_ndx[j]] = 2;   /* 2 node object */          if (side_num+1 <= 2)  /* 3- or 6-node face */          {            if (num_nodes_per_elem == 3)  /* 3-node face */            {              side_set_node_cnt_list[ss_elem_ndx[j]] = 3; /* 3 node object */              side_set_node_list[node_pos+2] =                 connect[connect_offset+tri3_table[side_num][2]-1];            }            else   /* 6-node face */            {              side_set_node_cnt_list[ss_elem_ndx[j]] = 6; /* 6 node object */              side_set_node_list[node_pos+2] =                 connect[connect_offset+tri3_table[side_num][2]-1];              side_set_node_list[node_pos+3] =                 connect[connect_offset+tri3_table[side_num][3]-1];              side_set_node_list[node_pos+4] =                 connect[connect_offset+tri3_table[side_num][4]-1];              side_set_node_list[node_pos+5] =                 connect[connect_offset+tri3_table[side_num][5]-1];            }          }          else /* 2- or 3-node edge */          {            if (num_nodes_per_elem > 3)  /* 3-node edge */            {              side_set_node_cnt_list[ss_elem_ndx[j]] = 3; /* 3 node object */              side_set_node_list[node_pos+2] =                 connect[connect_offset+tri3_table[side_num][2]-1];            }          }        }        break;      }      case QUAD:      {        if (side_num+1 < 1 || side_num+1 > 4) /* side number range check */        {          exerrval = EX_BADPARAM;          sprintf(errmsg,                 "Error: Invalid quad edge number %d in file id %d",                  side_num+1, exoid);          ex_err("ex_get_side_set_node_list",errmsg,exerrval);          free(connect);          free(elem_blk_parms);          free(elem_blk_ids);          free(ss_elem_ndx);          free(ss_elem_node_ndx);          free(ss_parm_ndx);          free(side_set_side_list);          free(side_set_elem_list);          return(EX_FATAL);        }                side_set_node_list[node_pos] =           connect[connect_offset+quad_table[side_num][0]-1];        side_set_node_list[node_pos+1] =           connect[connect_offset+quad_table[side_num][1]-1];        side_set_node_cnt_list[ss_elem_ndx[j]] = 2;   /* 2 node object */        if (num_nodes_per_elem > 5)        {          side_set_node_cnt_list[ss_elem_ndx[j]] = 3; /* 3 node object */          side_set_node_list[node_pos+2] =             connect[connect_offset+quad_table[side_num][2]-1];        }        break;      }      case SHELL:      {        if (side_num+1 < 1 || side_num+1 > 6) /* side number range check */        {          exerrval = EX_BADPARAM;          sprintf(errmsg,                 "Error: Invalid shell face number %d in file id %d",                  side_num+1, exoid);          ex_err("ex_get_side_set_node_list",errmsg,exerrval);          free(connect);          free(elem_blk_parms);          free(elem_blk_ids);          free(ss_elem_ndx);          free(ss_elem_node_ndx);          free(ss_parm_ndx);          free(side_set_side_list);          free(side_set_elem_list);          return(EX_FATAL);        }        side_set_node_list[node_pos] =           connect[connect_offset+shell_table[side_num][0]-1];        side_set_node_list[node_pos+1] =           connect[connect_offset+shell_table[side_num][1]-1];        side_set_node_cnt_list[ss_elem_ndx[j]] = 2;   /* 2 node object */        if (num_nodes_per_elem > 2) /*** KLUDGE for 2D shells ***/        {          if (side_num+1 <= 2)  /* 4-node face */          {            side_set_node_cnt_list[ss_elem_ndx[j]] = 4;   /* 4 node object */            side_set_node_list[node_pos+2] =               connect[connect_offset+shell_table[side_num][2]-1];            side_set_node_list[node_pos+3] =               connect[connect_offset+shell_table[side_num][3]-1];          }        }        if (num_nodes_per_elem == 8)        {          if (side_num+1 <= 2)  /* 8-node face */          {            side_set_node_cnt_list[ss_elem_ndx[j]] = 8; /* 8 node object */            side_set_node_list[node_pos+4] =               connect[connect_offset+shell_table[side_num][4]-1];            side_set_node_list[node_pos+5] =               connect[connect_offset+shell_table[side_num][5]-1];            side_set_node_list[node_pos+6] =               connect[connect_offset+shell_table[side_num][6]-1];            side_set_node_list[node_pos+7] =               connect[connect_offset+shell_table[side_num][7]-1];          }          else           {            side_set_node_cnt_list[ss_elem_ndx[j]] = 3; /* 3 node edge */            side_set_node_list[node_pos+2] =               connect[connect_offset+shell_table[side_num][2]-1];          }        }        break;      }      case TETRA:      {        if (side_num+1 < 1 || side_num+1 > 4) /* side number range check */        {          exerrval = EX_BADPARAM;          sprintf(errmsg,                 "Error: Invalid tetra face number %d in file id %d",                  side_num+1, exoid);          ex_err("ex_get_side_set_node_list",errmsg,exerrval);          free(connect);          free(elem_blk_parms);          free(elem_blk_ids);          free(ss_elem_ndx);          free(ss_elem_node_ndx);          free(ss_parm_ndx);          free(side_set_side_list);          free(side_set_elem_list);          return(EX_FATAL);        }        side_set_node_list[node_pos] =           connect[connect_offset+tetra_table[side_num][0]-1];        side_set_node_list[node_pos+1] =           connect[connect_offset+tetra_table[side_num][1]-1];        side_set_node_list[node_pos+2] =           connect[connect_offset+tetra_table[side_num][2]-1];        side_set_node_cnt_list[ss_elem_ndx[j]] = 3;   /* 3 node object */        if (num_nodes_per_elem == 8)        {          side_set_node_cnt_list[ss_elem_ndx[j]] = 4; /* 4 node object */          side_set_node_list[node_pos+3] =             connect[connect_offset+tetra_table[side_num][3]-1];        }        else if (num_nodes_per_elem > 8)        {          side_set_node_cnt_list[ss_elem_ndx[j]] = 6; /* 6 node object */          side_set_node_list[node_pos+3] =             connect[connect_offset+tetra_table[side_num][3]-1];          side_set_node_list[node_pos+4] =             connect[connect_offset+tetra_table[side_num][4]-1];          side_set_node_list[node_pos+5] =             connect[connect_offset+tetra_table[side_num][5]-1];        }        break;      }      case WEDGE:      {        if (side_num+1 < 1 || side_num+1 > 5) /* side number range check */        {          exerrval = EX_BADPARAM;          sprintf(errmsg,                 "Error: Invalid wedge face number %d in file id %d",                  side_num+1, exoid);          ex_err("ex_get_side_set_node_list",errmsg,exerrval);          free(connect);          free(elem_blk_parms);          free(elem_blk_ids);          free(ss_elem_ndx);          free(ss_elem_node_ndx);          free(ss_parm_ndx);          free(side_set_side_list);          free(side_set_elem_list);          return(EX_FATAL);        }        side_set_node_list[node_pos++] =           connect[connect_offset+wedge_table[side_num][0]-1];        side_set_node_list[node_pos++] =           connect[connect_offset+wedge_table[side_num][1]-1];        side_set_node_list[node_pos++] =           connect[connect_offset+wedge_table[side_num][2]-1];        if (wedge_table[side_num][3] == 0) { /* degenerate side? */          side_set_node_cnt_list[ss_elem_ndx[j]] = 3;   /* 3 node side */        }        else        {          side_set_node_list[node_pos++] =            connect[connect_offset+wedge_table[side_num][3]-1];          side_set_node_cnt_list[ss_elem_ndx[j]] = 4;   /* 4 node side */        }        if (num_nodes_per_elem > 6)        {          side_set_node_cnt_list[ss_elem_ndx[j]] = 8; /* 8 node object */          side_set_node_list[node_pos++] =             connect[connect_offset+wedge_table[side_num][4]-1];          side_set_node_list[node_pos++] =             connect[connect_offset+wedge_table[side_num][5]-1];          side_set_node_list[node_pos++] =             connect[connect_offset+wedge_table[side_num][6]-1];          if (wedge_table[side_num][7] == 0) /* degenerate side? */            side_set_node_cnt_list[ss_elem_ndx[j]] = 6;   /* 6 node side */          else          {            side_set_node_list[node_pos++] =              connect[connect_offset+wedge_table[side_num][7]-1];            side_set_node_cnt_list[ss_elem_ndx[j]] = 8;   /* 8 node side */          }        }        break;      }      case PYRAMID:      {        if (side_num+1 < 1 || side_num+1 > 5) /* side number range check */        {          exerrval = EX_BADPARAM;          sprintf(errmsg,                 "Error: Invalid pyramid face number %d in file id %d",                  side_num+1, exoid);          ex_err("ex_get_side_set_node_list",errmsg,exerrval);          free(connect);          free(elem_blk_parms);          free(elem_blk_ids);          free(ss_elem_ndx);          free(ss_elem_node_ndx);          free(ss_parm_ndx);          free(side_set_side_list);          free(side_set_elem_list);          return(EX_FATAL);        }        side_set_node_list[node_pos++] =           connect[connect_offset+pyramid_table[side_num][0]-1];        side_set_node_list[node_pos++] =           connect[connect_offset+pyramid_table[side_num][1]-1];        side_set_node_list[node_pos++] =           connect[connect_offset+pyramid_table[side_num][2]-1];        if (pyramid_table[side_num][3] == 0) { /* degenerate side? */          side_set_node_cnt_list[ss_elem_ndx[j]] = 3;   /* 3 node side */        }        else        {          side_set_node_list[node_pos++] =            connect[connect_offset+pyramid_table[side_num][3]-1];          side_set_node_cnt_list[ss_elem_ndx[j]] = 4;   /* 4 node side */        }        if (num_nodes_per_elem > 5)        {          side_set_node_cnt_list[ss_elem_ndx[j]] = 8; /* 8 node object */          side_set_node_list[node_pos++] =             connect[connect_offset+pyramid_table[side_num][4]-1];          side_set_node_list[node_pos++] =             connect[connect_offset+pyramid_table[side_num][5]-1];          side_set_node_list[node_pos++] =             connect[connect_offset+pyramid_table[side_num][6]-1];          if (pyramid_table[side_num][7] == 0) /* degenerate side? */            side_set_node_cnt_list[ss_elem_ndx[j]] = 6;   /* 6 node side */          else          {            side_set_node_list[node_pos++] =              connect[connect_offset+pyramid_table[side_num][7]-1];            side_set_node_cnt_list[ss_elem_ndx[j]] = 8;   /* 8 node side */          }        }        break;      }      case HEX:      {        if (side_num+1 < 1 || side_num+1 > 6) /* side number range check */        {          exerrval = EX_BADPARAM;          sprintf(errmsg,                 "Error: Invalid hex face number %d in file id %d",                  side_num+1, exoid);          ex_err("ex_get_side_set_node_list",errmsg,exerrval);          free(connect);          free(elem_blk_parms);          free(elem_blk_ids);          free(ss_elem_ndx);          free(ss_elem_node_ndx);          free(ss_parm_ndx);          free(side_set_side_list);          free(side_set_elem_list);          return(EX_FATAL);        }        side_set_node_list[node_pos] =           connect[connect_offset+hex_table[side_num][0]-1];        side_set_node_list[node_pos+1] =           connect[connect_offset+hex_table[side_num][1]-1];        side_set_node_list[node_pos+2] =           connect[connect_offset+hex_table[side_num][2]-1];        side_set_node_list[node_pos+3] =           connect[connect_offset+hex_table[side_num][3]-1];        side_set_node_cnt_list[ss_elem_ndx[j]] = 4;   /* 4 node object */        if (num_nodes_per_elem > 12)   /* more nodes than HEXSHELL */        {          side_set_node_cnt_list[ss_elem_ndx[j]] = 8; /* 8 node object */          side_set_node_list[node_pos+4] =             connect[connect_offset+hex_table[side_num][4]-1];          side_set_node_list[node_pos+5] =             connect[connect_offset+hex_table[side_num][5]-1];          side_set_node_list[node_pos+6] =             connect[connect_offset+hex_table[side_num][6]-1];          side_set_node_list[node_pos+7] =             connect[connect_offset+hex_table[side_num][7]-1];        }        if (num_nodes_per_elem == 27)                 /* 27-node brick */        {          side_set_node_cnt_list[ss_elem_ndx[j]] = 9; /* 9 node object */          side_set_node_list[node_pos+8] =             connect[connect_offset+hex_table[side_num][8]-1];        }        break;      }      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_get_side_set_node_list",errmsg,exerrval);        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_parm_ndx);  free(elem_blk_ids);  free(elem_blk_parms);  free(ss_elem_ndx);  free(ss_elem_node_ndx);  free(side_set_side_list);  free(side_set_elem_list);  return(EX_NOERR);}

⌨️ 快捷键说明

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