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

📄 memory.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
字号:
/* * Copyright 1997, Regents of the University of Minnesota * * memory.c * * This file contains routines that deal with memory allocation * * Started 2/24/96 * George * * $Id: memory.c 2501 2007-11-20 02:33:29Z benkirk $ * */#include <parmetislib.h>/************************************************************************** This function allocate various pools of memory**************************************************************************/void PreAllocateMemory(CtrlType *ctrl, GraphType *graph, WorkSpaceType *wspace){  wspace->nlarge  = 2*graph->nedges;  wspace->maxcore = 8*graph->nedges+1;  wspace->core    = idxmalloc(wspace->maxcore, "PreAllocateMemory: wspace->core");  wspace->pairs   = (KeyValueType *)wspace->core;  wspace->indices = (idxtype *)(wspace->pairs + wspace->nlarge);  wspace->degrees = (EdgeType *)(wspace->indices + wspace->nlarge);  wspace->pv1 = idxmalloc(ctrl->nparts+ctrl->npes+1, "PreAllocateMemory: wspace->pv?");  wspace->pv2 = idxmalloc(ctrl->nparts+ctrl->npes+1, "PreAllocateMemory: wspace->pv?");  wspace->pv3 = idxmalloc(ctrl->nparts+ctrl->npes+1, "PreAllocateMemory: wspace->pv?");  wspace->pv4 = idxmalloc(ctrl->nparts+ctrl->npes+1, "PreAllocateMemory: wspace->pv?");  wspace->pepairs1 = (KeyValueType *)GKmalloc(sizeof(KeyValueType)*(ctrl->nparts+ctrl->npes+1), "PreAllocateMemory: wspace->pepairs?");  wspace->pepairs2 = (KeyValueType *)GKmalloc(sizeof(KeyValueType)*(ctrl->nparts+ctrl->npes+1), "PreAllocateMemory: wspace->pepairs?");}/************************************************************************** This function de-allocate various pools of memory**************************************************************************/void FreeWSpace(WorkSpaceType *wspace){  GKfree((void **)&wspace->core,          (void **)&wspace->pv1,          (void **)&wspace->pv2,          (void **)&wspace->pv3,         (void **)&wspace->pv4,          (void **)&wspace->pepairs1,          (void **)&wspace->pepairs2,          LTERM);}/************************************************************************** This function de-allocates memory allocated for the control structures**************************************************************************/void FreeCtrl(CtrlType *ctrl){  MPI_Comm_free(&(ctrl->gcomm));}/************************************************************************** This function creates a CoarseGraphType data structure and initializes* the various fields**************************************************************************/GraphType *CreateGraph(void){  GraphType *graph;  graph = (GraphType *)GKmalloc(sizeof(GraphType), "CreateCoarseGraph: graph");  InitGraph(graph);  return graph;}/************************************************************************** This function creates a CoarseGraphType data structure and initializes* the various fields**************************************************************************/void InitGraph(GraphType *graph) {  graph->gnvtxs = graph->nvtxs = graph->nedges = graph->nsep = -1;  graph->nnbrs = graph->nrecv = graph->nsend = graph->nlocal = -1;  graph->xadj = graph->vwgt = graph->vsize = graph->adjncy = graph->adjwgt = NULL;  graph->nvwgt = NULL;  graph->vtxdist = NULL;  graph->match = graph->cmap = NULL;  graph->label = NULL;  graph->peind = NULL;  graph->sendptr = graph->sendind = graph->recvptr = graph->recvind = NULL;  graph->imap = NULL;  graph->pexadj = graph->peadjncy = graph->peadjloc = NULL;  graph->lperm = NULL;  graph->slens = graph->rlens = NULL;  graph->rcand = NULL;  graph->where = graph->home = graph->lpwgts = graph->gpwgts = NULL;  graph->lnpwgts = graph->gnpwgts = NULL;  graph->rinfo = NULL;  graph->nrinfo = NULL;  graph->sepind = NULL;  graph->coarser = graph->finer = NULL;}/************************************************************************** This function deallocates any memory stored in a graph**************************************************************************/void FreeGraph(GraphType *graph) {  GKfree((void **)&graph->xadj,          (void **)&graph->vwgt,         (void **)&graph->nvwgt,         (void **)&graph->vsize,         (void **)&graph->adjncy,         (void **)&graph->adjwgt,         (void **)&graph->vtxdist,          (void **)&graph->match,          (void **)&graph->cmap,          (void **)&graph->lperm,          (void **)&graph->label,          (void **)&graph->where,          (void **)&graph->home,          (void **)&graph->rinfo,          (void **)&graph->nrinfo,          (void **)&graph->sepind,         (void **)&graph->lpwgts,          (void **)&graph->gpwgts,          (void **)&graph->lnpwgts,          (void **)&graph->gnpwgts,          (void **)&graph->peind,          (void **)&graph->sendptr,          (void **)&graph->sendind,          (void **)&graph->recvptr,          (void **)&graph->recvind,          (void **)&graph->imap,         (void **)&graph->rlens,         (void **)&graph->slens,         (void **)&graph->rcand,         (void **)&graph->pexadj,         (void **)&graph->peadjncy,         (void **)&graph->peadjloc,         LTERM);  free(graph);}/************************************************************************** This function deallocates any memory stored in a graph**************************************************************************/void FreeInitialGraphAndRemap(GraphType *graph, int wgtflag) {  int i, nedges;  idxtype *adjncy, *imap;  nedges = graph->nedges;  adjncy = graph->adjncy;  imap = graph->imap;  if (imap != NULL) {    for (i=0; i<nedges; i++)      adjncy[i] = imap[adjncy[i]];  /* Apply local to global transformation */  }  /* Free Metis's things */  GKfree((void **)&graph->match,          (void **)&graph->cmap,          (void **)&graph->lperm,          (void **)&graph->where,          (void **)&graph->label,          (void **)&graph->rinfo,          (void **)&graph->nrinfo,          (void **)&graph->nvwgt,          (void **)&graph->lpwgts,          (void **)&graph->gpwgts,          (void **)&graph->lnpwgts,          (void **)&graph->gnpwgts,          (void **)&graph->sepind,         (void **)&graph->peind,          (void **)&graph->sendptr,          (void **)&graph->sendind,          (void **)&graph->recvptr,          (void **)&graph->recvind,          (void **)&graph->imap,         (void **)&graph->rlens,         (void **)&graph->slens,         (void **)&graph->rcand,         (void **)&graph->pexadj,         (void **)&graph->peadjncy,         (void **)&graph->peadjloc,         LTERM);  if ((wgtflag&2) == 0)     GKfree((void **)&graph->vwgt, (void **)&graph->vsize, LTERM);  if ((wgtflag&1) == 0)     GKfree((void **)&graph->adjwgt, LTERM);  free(graph);}

⌨️ 快捷键说明

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