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

📄 debug.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
字号:
/* * Copyright 1997, Regents of the University of Minnesota * * debug.c * * This file contains various functions that are used to display debuging  * information * * Started 10/20/96 * George * * $Id: debug.c 2501 2007-11-20 02:33:29Z benkirk $ * */#include <parmetislib.h>/************************************************************************** This function prints a vector stored in each processor **************************************************************************/void PrintVector(CtrlType *ctrl, int n, int first, idxtype *vec, char *title){  int i, penum;  for (penum=0; penum<ctrl->npes; penum++) {    if (ctrl->mype == penum) {      if (ctrl->mype == 0)        printf("%s\n", title);      printf("\t%3d. ", ctrl->mype);      for (i=0; i<n; i++)        printf("[%d %hd] ", first+i, vec[i]);      printf("\n");      fflush(stdout);    }    MPI_Barrier(ctrl->comm);  }}/************************************************************************** This function prints a vector stored in each processor **************************************************************************/void PrintVector2(CtrlType *ctrl, int n, int first, idxtype *vec, char *title){  int i, penum;  for (penum=0; penum<ctrl->npes; penum++) {    if (ctrl->mype == penum) {      if (ctrl->mype == 0)        printf("%s\n", title);      printf("\t%3d. ", ctrl->mype);      for (i=0; i<n; i++)        printf("[%d %d.%hd] ", first+i, (vec[i]>=KEEP_BIT ? 1 : 0), (vec[i]>=KEEP_BIT ? vec[i]-KEEP_BIT : vec[i]));      printf("\n");      fflush(stdout);    }    MPI_Barrier(ctrl->comm);  }}/************************************************************************** This function prints a vector stored in each processor **************************************************************************/void PrintPairs(CtrlType *ctrl, int n, KeyValueType *pairs, char *title){  int i, penum;  for (penum=0; penum<ctrl->npes; penum++) {    if (ctrl->mype == penum) {      if (ctrl->mype == 0)        printf("%s\n", title);      printf("\t%3d. ", ctrl->mype);      for (i=0; i<n; i++)        printf("[%d %hd,%hd] ", i, pairs[i].key, pairs[i].val);      printf("\n");      fflush(stdout);    }    MPI_Barrier(ctrl->comm);  }}/************************************************************************** This function prints the local portion of the graph stored at each * processor**************************************************************************/void PrintGraph(CtrlType *ctrl, GraphType *graph){  int i, j, penum;  int firstvtx;  MPI_Barrier(ctrl->comm);  firstvtx = graph->vtxdist[ctrl->mype];  for (penum=0; penum<ctrl->npes; penum++) {    if (ctrl->mype == penum) {      printf("\t%d", penum);      for (i=0; i<graph->nvtxs; i++) {        if (i==0)          printf("\t%2d %2d\t", firstvtx+i, graph->vwgt[i]);        else          printf("\t\t%2d %2d\t", firstvtx+i, graph->vwgt[i]);        for (j=graph->xadj[i]; j<graph->xadj[i+1]; j++)          printf("[%d %d] ", graph->adjncy[j], graph->adjwgt[j]);        printf("\n");      }      fflush(stdout);    }    MPI_Barrier(ctrl->comm);  }}/************************************************************************** This function prints the local portion of the graph stored at each * processor along with degree information during refinement**************************************************************************/void PrintGraph2(CtrlType *ctrl, GraphType *graph){  int i, j, penum;  int firstvtx;  MPI_Barrier(ctrl->comm);  firstvtx = graph->vtxdist[ctrl->mype];  for (penum=0; penum<ctrl->npes; penum++) {    if (ctrl->mype == penum) {      printf("\t%d", penum);      for (i=0; i<graph->nvtxs; i++) {        if (i==0)          printf("\t%2d %2d [%d %d %d]\t", firstvtx+i, graph->vwgt[i], graph->where[i], graph->rinfo[i].id, graph->rinfo[i].ed);        else          printf("\t\t%2d %2d [%d %d %d]\t", firstvtx+i, graph->vwgt[i], graph->where[i], graph->rinfo[i].id, graph->rinfo[i].ed);        for (j=graph->xadj[i]; j<graph->xadj[i+1]; j++)          printf("[%d %d] ", graph->adjncy[j], graph->adjwgt[j]);        printf("\n");      }      fflush(stdout);    }    MPI_Barrier(ctrl->comm);  }}/************************************************************************** This function prints the information computed during setup**************************************************************************/void PrintSetUpInfo(CtrlType *ctrl, GraphType *graph){  int i, j, penum;  MPI_Barrier(ctrl->comm);  for (penum=0; penum<ctrl->npes; penum++) {    if (ctrl->mype == penum) {      printf("PE: %d, nnbrs: %d\n", ctrl->mype, graph->nnbrs);      printf("\tSending...\n");      for (i=0; i<graph->nnbrs; i++) {        printf("\t\tTo: %d: ", graph->peind[i]);        for (j=graph->sendptr[i]; j<graph->sendptr[i+1]; j++)          printf("%d ", graph->sendind[j]);        printf("\n");      }      printf("\tReceiving...\n");      for (i=0; i<graph->nnbrs; i++) {        printf("\t\tFrom: %d: ", graph->peind[i]);        for (j=graph->recvptr[i]; j<graph->recvptr[i+1]; j++)          printf("%d ", graph->recvind[j]);        printf("\n");      }      printf("\n");    }    MPI_Barrier(ctrl->comm);  }}/************************************************************************** This function prints information about the graphs that were sent/received**************************************************************************/void PrintTransferedGraphs(CtrlType *ctrl, int nnbrs, idxtype *peind, idxtype *slens,       idxtype *rlens, idxtype *sgraph, idxtype *rgraph){  int i, ii, jj, ll, penum;  MPI_Barrier(ctrl->comm);  for (penum=0; penum<ctrl->npes; penum++) {    if (ctrl->mype == penum) {      printf("PE: %d, nnbrs: %d", ctrl->mype, nnbrs);      for (ll=i=0; i<nnbrs; i++) {        if (slens[i+1]-slens[i] > 0) {          printf("\n\tTo %d\t", peind[i]);          for (ii=slens[i]; ii<slens[i+1]; ii++) {            printf("%d %d %d, ", sgraph[ll], sgraph[ll+1], sgraph[ll+2]);            for (jj=0; jj<sgraph[ll+1]; jj++)              printf("[%d %d] ", sgraph[ll+3+2*jj], sgraph[ll+3+2*jj+1]);            printf("\n\t\t");            ll += 3+2*sgraph[ll+1];          }        }      }      for (ll=i=0; i<nnbrs; i++) {        if (rlens[i+1]-rlens[i] > 0) {          printf("\n\tFrom %d\t", peind[i]);          for (ii=rlens[i]; ii<rlens[i+1]; ii++) {            printf("%d %d %d, ", rgraph[ll], rgraph[ll+1], rgraph[ll+2]);            for (jj=0; jj<rgraph[ll+1]; jj++)              printf("[%d %d] ", rgraph[ll+3+2*jj], rgraph[ll+3+2*jj+1]);            printf("\n\t\t");            ll += 3+2*rgraph[ll+1];          }        }      }      printf("\n");    }    MPI_Barrier(ctrl->comm);  }}/************************************************************************** This function writes a graph in the format used by serial METIS**************************************************************************/void WriteMetisGraph(int nvtxs, idxtype *xadj, idxtype *adjncy, idxtype *vwgt, idxtype *adjwgt){  int i, j;  FILE *fp;  fp = fopen("test.graph", "w");  fprintf(fp, "%d %d 11", nvtxs, xadj[nvtxs]/2);  for (i=0; i<nvtxs; i++) {    fprintf(fp, "\n%d ", vwgt[i]);    for (j=xadj[i]; j<xadj[i+1]; j++)      fprintf(fp, " %d %d", adjncy[j]+1, adjwgt[j]);  }  fclose(fp);}

⌨️ 快捷键说明

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