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

📄 coarsen.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
字号:
/* * coarsen.c * * This file contains the driving routines for the coarsening process  * * Started 7/23/97 * George * * $Id: coarsen.c 2501 2007-11-20 02:33:29Z benkirk $ * */#include <metis.h>/************************************************************************** This function takes a graph and creates a sequence of coarser graphs**************************************************************************/GraphType *Coarsen2Way(CtrlType *ctrl, GraphType *graph){  int clevel;  GraphType *cgraph;  IFSET(ctrl->dbglvl, DBG_TIME, starttimer(ctrl->CoarsenTmr));  cgraph = graph;  /* The following is ahack to allow the multiple bisections to go through with correct     coarsening */  if (ctrl->CType > 20) {    clevel = 1;    ctrl->CType -= 20;  }  else    clevel = 0;  do {    IFSET(ctrl->dbglvl, DBG_COARSEN, printf("%6d %7d [%d] [%d %d]\n",          cgraph->nvtxs, cgraph->nedges, ctrl->CoarsenTo, ctrl->maxvwgt,           (cgraph->vwgt ? idxsum(cgraph->nvtxs, cgraph->vwgt) : cgraph->nvtxs)));    if (cgraph->adjwgt) {      switch (ctrl->CType) {        case MATCH_RM:          Match_RM(ctrl, cgraph);          break;        case MATCH_HEM:          if (clevel < 1 || cgraph->nedges == 0)            Match_RM(ctrl, cgraph);          else            Match_HEM(ctrl, cgraph);          break;        case MATCH_SHEM:          if (clevel < 1 || cgraph->nedges == 0)            Match_RM(ctrl, cgraph);          else            Match_SHEM(ctrl, cgraph);          break;        case MATCH_SHEMKWAY:          if (cgraph->nedges == 0)            Match_RM(ctrl, cgraph);          else            Match_SHEM(ctrl, cgraph);          break;        default:          errexit("Unknown CType: %d\n", ctrl->CType);      }    }    else {      Match_RM_NVW(ctrl, cgraph);    }    cgraph = cgraph->coarser;    clevel++;  } while (cgraph->nvtxs > ctrl->CoarsenTo && cgraph->nvtxs < COARSEN_FRACTION2*cgraph->finer->nvtxs && cgraph->nedges > cgraph->nvtxs/2);   IFSET(ctrl->dbglvl, DBG_COARSEN, printf("%6d %7d [%d] [%d %d]\n",        cgraph->nvtxs, cgraph->nedges, ctrl->CoarsenTo, ctrl->maxvwgt,         (cgraph->vwgt ? idxsum(cgraph->nvtxs, cgraph->vwgt) : cgraph->nvtxs)));  IFSET(ctrl->dbglvl, DBG_TIME, stoptimer(ctrl->CoarsenTmr));  return cgraph;}

⌨️ 快捷键说明

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