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

📄 exgssc.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
📖 第 1 页 / 共 2 页
字号:
    else if (strncmp(elem_blk_parms[i].elem_type,"QUAD",3) == 0)    {      elem_blk_parms[i].elem_type_val = QUAD;      elem_blk_parms[i].num_sides = 4;      if (elem_blk_parms[i].num_nodes_per_elem == 4) {        elem_blk_parms[i].num_nodes_per_side[0] = 2;        elem_blk_parms[i].num_nodes_per_side[1] = 2;        elem_blk_parms[i].num_nodes_per_side[2] = 2;        elem_blk_parms[i].num_nodes_per_side[3] = 2;      } else if (elem_blk_parms[i].num_nodes_per_elem == 5) {        elem_blk_parms[i].num_nodes_per_side[0] = 2;        elem_blk_parms[i].num_nodes_per_side[1] = 2;        elem_blk_parms[i].num_nodes_per_side[2] = 2;        elem_blk_parms[i].num_nodes_per_side[3] = 2;      } else if (elem_blk_parms[i].num_nodes_per_elem == 9 ||                 elem_blk_parms[i].num_nodes_per_elem == 8) {        elem_blk_parms[i].num_nodes_per_side[0] = 3;        elem_blk_parms[i].num_nodes_per_side[1] = 3;        elem_blk_parms[i].num_nodes_per_side[2] = 3;        elem_blk_parms[i].num_nodes_per_side[3] = 3;      } else {        EL_NODE_COUNT_ERROR;      }    }    else if (strncmp(elem_blk_parms[i].elem_type,"TRIANGLE",3) == 0)    {      elem_blk_parms[i].elem_type_val = TRIANGLE;      if (ndim == 2) { /* 2d TRIs */        elem_blk_parms[i].num_sides = 3;        if (elem_blk_parms[i].num_nodes_per_elem == 3) {          elem_blk_parms[i].num_nodes_per_side[0] = 2;          elem_blk_parms[i].num_nodes_per_side[1] = 2;          elem_blk_parms[i].num_nodes_per_side[2] = 2;        } else if (elem_blk_parms[i].num_nodes_per_elem == 6) {          elem_blk_parms[i].num_nodes_per_side[0] = 3;          elem_blk_parms[i].num_nodes_per_side[1] = 3;          elem_blk_parms[i].num_nodes_per_side[2] = 3;        }      } else if (ndim == 3) { /* 3d TRIs -- triangular shell*/        elem_blk_parms[i].num_sides = 5; /* 2 Faces and 3 Edges */        if (elem_blk_parms[i].num_nodes_per_elem == 3) {          elem_blk_parms[i].num_nodes_per_side[0] = 3;          elem_blk_parms[i].num_nodes_per_side[1] = 3;          elem_blk_parms[i].num_nodes_per_side[2] = 2;          elem_blk_parms[i].num_nodes_per_side[3] = 2;          elem_blk_parms[i].num_nodes_per_side[4] = 2;        } else if (elem_blk_parms[i].num_nodes_per_elem == 6) {          elem_blk_parms[i].num_nodes_per_side[0] = 6;          elem_blk_parms[i].num_nodes_per_side[1] = 6;          elem_blk_parms[i].num_nodes_per_side[2] = 3;          elem_blk_parms[i].num_nodes_per_side[3] = 3;          elem_blk_parms[i].num_nodes_per_side[4] = 3;        } else {          EL_NODE_COUNT_ERROR;        }      }    }    else if (strncmp(elem_blk_parms[i].elem_type,"SHELL",3) == 0)    {      elem_blk_parms[i].elem_type_val = SHELL;      if (elem_blk_parms[i].num_nodes_per_elem == 2) {/* KLUDGE for 2D Shells*/        elem_blk_parms[i].num_sides = 2;         elem_blk_parms[i].num_nodes_per_side[0] = 2;        elem_blk_parms[i].num_nodes_per_side[1] = 2;      } else if (elem_blk_parms[i].num_nodes_per_elem == 4) {        elem_blk_parms[i].num_sides = 6;  /* 2 Faces, 4 Edges */        elem_blk_parms[i].num_nodes_per_side[0] = 4;        elem_blk_parms[i].num_nodes_per_side[1] = 4;        elem_blk_parms[i].num_nodes_per_side[2] = 2;        elem_blk_parms[i].num_nodes_per_side[3] = 2;        elem_blk_parms[i].num_nodes_per_side[4] = 2;        elem_blk_parms[i].num_nodes_per_side[5] = 2;      } else if (elem_blk_parms[i].num_nodes_per_elem == 8 ||                 elem_blk_parms[i].num_nodes_per_elem == 9) {        elem_blk_parms[i].num_sides = 6;  /* 2 Faces, 4 Edges */        elem_blk_parms[i].num_nodes_per_side[0] =          elem_blk_parms[i].num_nodes_per_elem; /* 8 or 9 */        elem_blk_parms[i].num_nodes_per_side[1] =          elem_blk_parms[i].num_nodes_per_elem; /* 8 or 9 */        elem_blk_parms[i].num_nodes_per_side[2] = 3;        elem_blk_parms[i].num_nodes_per_side[3] = 3;        elem_blk_parms[i].num_nodes_per_side[4] = 3;        elem_blk_parms[i].num_nodes_per_side[5] = 3;      } else {        EL_NODE_COUNT_ERROR;      }    }    else if (strncmp(elem_blk_parms[i].elem_type,"HEX",3) == 0)    {      elem_blk_parms[i].elem_type_val = HEX;      elem_blk_parms[i].num_sides = 6;        /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 8) {  /* 8-node bricks */        elem_blk_parms[i].num_nodes_per_side[0] = 4;        elem_blk_parms[i].num_nodes_per_side[1] = 4;        elem_blk_parms[i].num_nodes_per_side[2] = 4;        elem_blk_parms[i].num_nodes_per_side[3] = 4;        elem_blk_parms[i].num_nodes_per_side[4] = 4;        elem_blk_parms[i].num_nodes_per_side[5] = 4;      } else if (elem_blk_parms[i].num_nodes_per_elem == 9) { /* 9-node bricks */        elem_blk_parms[i].num_nodes_per_side[0] = 4;        elem_blk_parms[i].num_nodes_per_side[1] = 4;        elem_blk_parms[i].num_nodes_per_side[2] = 4;        elem_blk_parms[i].num_nodes_per_side[3] = 4;        elem_blk_parms[i].num_nodes_per_side[4] = 4;        elem_blk_parms[i].num_nodes_per_side[5] = 4;      } else if (elem_blk_parms[i].num_nodes_per_elem == 12) { /* HEXSHELLS */        elem_blk_parms[i].num_nodes_per_side[0] = 6;        elem_blk_parms[i].num_nodes_per_side[1] = 6;        elem_blk_parms[i].num_nodes_per_side[2] = 6;        elem_blk_parms[i].num_nodes_per_side[3] = 6;        elem_blk_parms[i].num_nodes_per_side[4] = 4;        elem_blk_parms[i].num_nodes_per_side[5] = 4;      } else if (elem_blk_parms[i].num_nodes_per_elem == 20) { /* 20-node bricks */        elem_blk_parms[i].num_nodes_per_side[0] = 8;        elem_blk_parms[i].num_nodes_per_side[1] = 8;        elem_blk_parms[i].num_nodes_per_side[2] = 8;        elem_blk_parms[i].num_nodes_per_side[3] = 8;        elem_blk_parms[i].num_nodes_per_side[4] = 8;        elem_blk_parms[i].num_nodes_per_side[5] = 8;      } else if (elem_blk_parms[i].num_nodes_per_elem == 27) { /* 27-node bricks */        elem_blk_parms[i].num_nodes_per_side[0] = 9;        elem_blk_parms[i].num_nodes_per_side[1] = 9;        elem_blk_parms[i].num_nodes_per_side[2] = 9;        elem_blk_parms[i].num_nodes_per_side[3] = 9;        elem_blk_parms[i].num_nodes_per_side[4] = 9;        elem_blk_parms[i].num_nodes_per_side[5] = 9;      } else {        EL_NODE_COUNT_ERROR;      }    }    else if (strncmp(elem_blk_parms[i].elem_type,"TETRA",3) == 0)    {      elem_blk_parms[i].elem_type_val = TETRA;      elem_blk_parms[i].num_sides = 4;        /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 4) {        elem_blk_parms[i].num_nodes_per_side[0] = 3;        elem_blk_parms[i].num_nodes_per_side[1] = 3;        elem_blk_parms[i].num_nodes_per_side[2] = 3;        elem_blk_parms[i].num_nodes_per_side[3] = 3;      } else if (elem_blk_parms[i].num_nodes_per_elem == 8) {        elem_blk_parms[i].num_nodes_per_side[0] = 4;        elem_blk_parms[i].num_nodes_per_side[1] = 4;        elem_blk_parms[i].num_nodes_per_side[2] = 4;        elem_blk_parms[i].num_nodes_per_side[3] = 4;      } else if (elem_blk_parms[i].num_nodes_per_elem == 10) {        elem_blk_parms[i].num_nodes_per_side[0] = 6;        elem_blk_parms[i].num_nodes_per_side[1] = 6;        elem_blk_parms[i].num_nodes_per_side[2] = 6;        elem_blk_parms[i].num_nodes_per_side[3] = 6;      } else {        EL_NODE_COUNT_ERROR;      }    }    else if (strncmp(elem_blk_parms[i].elem_type,"WEDGE",3) == 0)    {      elem_blk_parms[i].elem_type_val = WEDGE;      elem_blk_parms[i].num_sides = 5;        if (elem_blk_parms[i].num_nodes_per_elem == 6) {        elem_blk_parms[i].num_nodes_per_side[0] = 4;        elem_blk_parms[i].num_nodes_per_side[1] = 4;        elem_blk_parms[i].num_nodes_per_side[2] = 4;        elem_blk_parms[i].num_nodes_per_side[3] = 3;        elem_blk_parms[i].num_nodes_per_side[4] = 3;      } else if (elem_blk_parms[i].num_nodes_per_elem == 15){        elem_blk_parms[i].num_nodes_per_side[0] = 8;        elem_blk_parms[i].num_nodes_per_side[1] = 8;        elem_blk_parms[i].num_nodes_per_side[2] = 8;        elem_blk_parms[i].num_nodes_per_side[3] = 6;        elem_blk_parms[i].num_nodes_per_side[4] = 6;      } else {        EL_NODE_COUNT_ERROR;      }    }    else if (strncmp(elem_blk_parms[i].elem_type,"PYRAMID",3) == 0)    {      elem_blk_parms[i].elem_type_val = PYRAMID;      elem_blk_parms[i].num_sides = 5;        if (elem_blk_parms[i].num_nodes_per_elem == 5) {        elem_blk_parms[i].num_nodes_per_side[0] = 3;        elem_blk_parms[i].num_nodes_per_side[1] = 3;        elem_blk_parms[i].num_nodes_per_side[2] = 3;        elem_blk_parms[i].num_nodes_per_side[3] = 3;        elem_blk_parms[i].num_nodes_per_side[4] = 4;      } else if (elem_blk_parms[i].num_nodes_per_elem == 13){        elem_blk_parms[i].num_nodes_per_side[0] = 6;        elem_blk_parms[i].num_nodes_per_side[1] = 6;        elem_blk_parms[i].num_nodes_per_side[2] = 6;        elem_blk_parms[i].num_nodes_per_side[3] = 6;        elem_blk_parms[i].num_nodes_per_side[4] = 8;      } else {        EL_NODE_COUNT_ERROR;      }    }    else if (strncmp(elem_blk_parms[i].elem_type,"BEAM",3) == 0)    {      elem_blk_parms[i].elem_type_val = BEAM;      elem_blk_parms[i].num_sides = 2;        if (elem_blk_parms[i].num_nodes_per_elem == 2) {        elem_blk_parms[i].num_nodes_per_side[0] = 2;        elem_blk_parms[i].num_nodes_per_side[1] = 2;      } else if (elem_blk_parms[i].num_nodes_per_elem == 3){        elem_blk_parms[i].num_nodes_per_side[0] = 3;        elem_blk_parms[i].num_nodes_per_side[1] = 3;      } else {        EL_NODE_COUNT_ERROR;      }    }    else if ( (strncmp(elem_blk_parms[i].elem_type,"TRUSS",3) == 0) ||              (strncmp(elem_blk_parms[i].elem_type,"BAR",3) == 0) ||              (strncmp(elem_blk_parms[i].elem_type,"EDGE",3) == 0) )    {      elem_blk_parms[i].elem_type_val = TRUSS;      elem_blk_parms[i].num_sides = 2;        if (elem_blk_parms[i].num_nodes_per_elem == 2) {        elem_blk_parms[i].num_nodes_per_side[0] = 2;        elem_blk_parms[i].num_nodes_per_side[1] = 2;      } else if (elem_blk_parms[i].num_nodes_per_elem == 3) {        elem_blk_parms[i].num_nodes_per_side[0] = 3;        elem_blk_parms[i].num_nodes_per_side[1] = 3;      } else {        EL_NODE_COUNT_ERROR;      }    }    /* Used for an empty block in a parallel decomposition */    else if (strncmp(elem_blk_parms[i].elem_type,"NULL",3) == 0) {      elem_blk_parms[i].elem_type_val = NULL_ELEMENT;      elem_blk_parms[i].num_sides = 0;        elem_blk_parms[i].num_nodes_per_side[0] = 0;      elem_blk_parms[i].num_elem_in_blk = 0;    } else {      /* unsupported element type; no problem if no sides specified for         this element block */      elem_blk_parms[i].elem_type_val = UNK;      elem_blk_parms[i].num_sides = 0;        elem_blk_parms[i].num_nodes_per_side[0] = 0;    }    elem_blk_parms[i].elem_blk_id = elem_blk_ids[i];    /* save id */    elem_ctr += elem_blk_parms[i].num_elem_in_blk;    elem_blk_parms[i].elem_ctr = elem_ctr;      /* save elem number max */  }  /* Finally... Create the list of node counts for each face in the   * side set.   */  j = 0; /* The current element block... */  for (ii=0;ii<tot_num_ss_elem;ii++) {    i = ss_elem_ndx[ii];    elem = side_set_elem_list[i];    side = side_set_side_list[i]-1; /* Convert to 0-based sides */    /*     * Since the elements are being accessed in sorted, order, the     * block that contains the elements must progress sequentially     * from block 0 to block[num_elem_blks-1]. Once we find an element     * not in this block, find a following block that contains it...     */           for ( ; j<num_elem_blks; j++) {      if (elem <= elem_blk_parms[j].elem_ctr) {        break;      }    }    if (j < num_elem_blks) {      assert(side < elem_blk_parms[j].num_sides);        side_set_node_cnt_list[i] = elem_blk_parms[j].num_nodes_per_side[side];    } else {      exerrval = EX_BADPARAM;      sprintf(errmsg,             "Error: Invalid element number %d found in side set %d in file %d",              side_set_elem_list[i], side_set_id, exoid);      free(elem_blk_parms);      free(elem_blk_ids);      free(ss_elem_ndx);      free(side_set_side_list);      free(side_set_elem_list);      ex_err("ex_get_side_set_node_count",errmsg,EX_MSG);      return (EX_FATAL);    }  }  /* All done: release connectivity array space, element block ids   * array, element block parameters array, and side set element index   * array   */  free(elem_blk_ids);  free(elem_blk_parms);  free(ss_elem_ndx);  free(side_set_side_list);  free(side_set_elem_list);  return(EX_NOERR);}

⌨️ 快捷键说明

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