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

📄 exgsnl.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
📖 第 1 页 / 共 2 页
字号:
                            &num_elem_in_blk,                            &num_nodes_per_elem,                            &num_attr)) == -1)    {      free(elem_blk_parms);      free(elem_blk_ids);      free(ss_elem_ndx);      free(side_set_side_list);      free(side_set_elem_list);      sprintf(errmsg,             "Error: failed to get element block %d parameters in file id %d",              elem_blk_ids[i], exoid);      ex_err("ex_get_side_set_node_list_len",errmsg,EX_MSG);      return(EX_FATAL);    }    elem_blk_parms[i].num_elem_in_blk = num_elem_in_blk;    elem_blk_parms[i].num_nodes_per_elem = num_nodes_per_elem;    elem_blk_parms[i].num_attr = num_attr;    elem_blk_parms[i].elem_blk_id = elem_blk_ids[i];    for (m=0; m < strlen(elem_type); m++)      elem_blk_parms[i].elem_type[m] = toupper(elem_type[m]);    elem_blk_parms[i].elem_type[m] = NULL_ELEMENT;    if (strncmp(elem_blk_parms[i].elem_type,"CIRCLE",3) == 0)    {      elem_blk_parms[i].elem_type_val = CIRCLE;      /* set side set node stride */        elem_blk_parms[i].num_nodes_per_side[0] = 1;    }    else if (strncmp(elem_blk_parms[i].elem_type,"SPHERE",3) == 0)    {      elem_blk_parms[i].elem_type_val = SPHERE;      /* set side set node stride */        elem_blk_parms[i].num_nodes_per_side[0] = 1;    }    else if (strncmp(elem_blk_parms[i].elem_type,"QUAD",3) == 0)    {      elem_blk_parms[i].elem_type_val = QUAD;      /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 4)        elem_blk_parms[i].num_nodes_per_side[0] = 2;      else if (elem_blk_parms[i].num_nodes_per_elem == 5)        elem_blk_parms[i].num_nodes_per_side[0] = 2;      else         elem_blk_parms[i].num_nodes_per_side[0] = 3;    }    else if (strncmp(elem_blk_parms[i].elem_type,"TRIANGLE",3) == 0)    {      elem_blk_parms[i].elem_type_val = TRIANGLE;      /* determine side set node stride */      if (ndim == 2) /* 2d TRIs */      {        if (elem_blk_parms[i].num_nodes_per_elem == 3)          elem_blk_parms[i].num_nodes_per_side[0] = 2;        else           elem_blk_parms[i].num_nodes_per_side[0] = 3;      }      else if (ndim == 3)  /* 3d TRIs */      {   /* set the default number of nodes per side; catch exceptions later */        if (elem_blk_parms[i].num_nodes_per_elem == 3)          elem_blk_parms[i].num_nodes_per_side[0] = 3;        else           elem_blk_parms[i].num_nodes_per_side[0] = 6;      }    }    else if (strncmp(elem_blk_parms[i].elem_type,"SHELL",3) == 0)    {      elem_blk_parms[i].elem_type_val = SHELL;      /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 2) /* KLUDGE for 2D Shells*/        elem_blk_parms[i].num_nodes_per_side[0] = 2;      else if (elem_blk_parms[i].num_nodes_per_elem == 4)        elem_blk_parms[i].num_nodes_per_side[0] = 4;      else        elem_blk_parms[i].num_nodes_per_side[0] = 8;    }    else if (strncmp(elem_blk_parms[i].elem_type,"HEX",3) == 0)    {      elem_blk_parms[i].elem_type_val = HEX;      /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 8)        elem_blk_parms[i].num_nodes_per_side[0] = 4;      else if (elem_blk_parms[i].num_nodes_per_elem == 9)        elem_blk_parms[i].num_nodes_per_side[0] = 4;      else if (elem_blk_parms[i].num_nodes_per_elem == 12) /* HEXSHELL */        elem_blk_parms[i].num_nodes_per_side[0] = 4;      else if (elem_blk_parms[i].num_nodes_per_elem == 27)        elem_blk_parms[i].num_nodes_per_side[0] = 9;      else        elem_blk_parms[i].num_nodes_per_side[0] = 8;    }    else if (strncmp(elem_blk_parms[i].elem_type,"TETRA",3) == 0)    {      elem_blk_parms[i].elem_type_val = TETRA;      /* 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;      else if (elem_blk_parms[i].num_nodes_per_elem == 8)        elem_blk_parms[i].num_nodes_per_side[0] = 4;      else        elem_blk_parms[i].num_nodes_per_side[0] = 6;    }    else if (strncmp(elem_blk_parms[i].elem_type,"WEDGE",3) == 0)    {      elem_blk_parms[i].elem_type_val = WEDGE;      /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 6)        elem_blk_parms[i].num_nodes_per_side[0] = 4;      else        elem_blk_parms[i].num_nodes_per_side[0] = 8;    }    else if (strncmp(elem_blk_parms[i].elem_type,"PYRAMID",3) == 0)    {      elem_blk_parms[i].elem_type_val = PYRAMID;      /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 5)        elem_blk_parms[i].num_nodes_per_side[0] = 4;      else        elem_blk_parms[i].num_nodes_per_side[0] = 8;    }    else if (strncmp(elem_blk_parms[i].elem_type,"BEAM",3) == 0)    {      elem_blk_parms[i].elem_type_val = BEAM;      /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 2)        elem_blk_parms[i].num_nodes_per_side[0] = 2;      else         elem_blk_parms[i].num_nodes_per_side[0] = 3;    }    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;      /* determine side set node stride */      if (elem_blk_parms[i].num_nodes_per_elem == 2)        elem_blk_parms[i].num_nodes_per_side[0] = 2;      else         elem_blk_parms[i].num_nodes_per_side[0] = 3;    }    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_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_nodes_per_side[0] = 0;    }    elem_ctr += elem_blk_parms[i].num_elem_in_blk;    elem_blk_parms[i].elem_ctr = elem_ctr;      /* save elem number max */  }/* Walk through element list and keep a running count of the node length */  *side_set_node_list_len = 0;  for (i=0;i<tot_num_ss_elem;i++)  {    for (j=0; j<num_elem_blks; j++)    {      if (elem_blk_parms[j].elem_type_val != NULL_ELEMENT)        if (side_set_elem_list[i] <= elem_blk_parms[j].elem_ctr)          break; /* stop because we found the parameters for this element */    }    if (j >= num_elem_blks)    {      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_list_len",errmsg,EX_MSG);      return (EX_FATAL);    }    /* Update *side_set_node_list_len (which points to next node in chain */    /* WEDGEs with 3 node sides (side 4 or 5) are special cases */    if (elem_blk_parms[j].elem_type_val == WEDGE &&        (side_set_side_list[i] == 4 || side_set_side_list[i] == 5))    {      if (elem_blk_parms[j].num_nodes_per_elem == 6)        *side_set_node_list_len += 3;  /* 3 node side */      else        *side_set_node_list_len += 6;  /* 6 node side */    }    /* PYRAMIDSs with 3 node sides (sides 1,2,3,4) are also special */    else if (elem_blk_parms[j].elem_type_val == PYRAMID &&             (side_set_side_list[i] < 5))    {      if (elem_blk_parms[j].num_nodes_per_elem == 5)        *side_set_node_list_len += 3;  /* 3 node side */      else        *side_set_node_list_len += 6;  /* 6 node side */    }    /* side numbers 3,4,5,6 for SHELLs are also special */    else if (elem_blk_parms[j].elem_type_val == SHELL &&        (side_set_side_list[i] > 2 ))    {      if (elem_blk_parms[j].num_nodes_per_elem == 4)        *side_set_node_list_len += 2;  /* 2 node side */      else        *side_set_node_list_len += 3;  /* 3 node side */    }    /* sides 3, 4, and 5 of 3d TRIs are special cases */    else if (elem_blk_parms[j].elem_type_val == TRIANGLE &&             ndim == 3 &&             side_set_side_list[i] > 2 )    {      if (elem_blk_parms[j].num_nodes_per_elem == 3)  /* 3-node TRI */        *side_set_node_list_len += 2;  /* 2 node side */      else  /* 6-node TRI */        *side_set_node_list_len += 3;  /* 3 node side */    }    else if (elem_blk_parms[j].elem_type_val == UNK)    {      exerrval = EX_BADPARAM;      sprintf(errmsg,             "Error: %s in elem block %d is an unsupported element type",              elem_blk_parms[i].elem_type, elem_blk_parms[i].elem_blk_id);      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_list_len",errmsg,EX_MSG);      return (EX_FATAL);    }    else /* all other element types */      *side_set_node_list_len += elem_blk_parms[j].num_nodes_per_side[0];  }  /* All done: release 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 + -