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

📄 struct.h

📁 一个用来实现偏微分方程中网格的计算库
💻 H
字号:
/* * Copyright 1997, Regents of the University of Minnesota * * struct.h * * This file contains data structures for ILU routines. * * Started 9/26/95 * George * * $Id: struct.h 2501 2007-11-20 02:33:29Z benkirk $ *//* Indexes are as long as integers for now */#ifdef IDXTYPE_INT#define IDX_DATATYPE	MPI_INT#define MAX_INT		INT_MAX#define MIN_INT		INT_MIN#else#define IDX_DATATYPE	MPI_SHORT#define MAX_INT		SHRT_MAX#define MIN_INT		SHRT_MIN#endif/************************************************************************** The following data structure stores key-value pair**************************************************************************/struct KeyValueType {  idxtype key;  idxtype val;};typedef struct KeyValueType KeyValueType;/************************************************************************** The following data structure stores key-value pair**************************************************************************/struct KVType {  int key;  float val;};typedef struct KVType KVType;/************************************************************************** The following data structure stores key-value pair**************************************************************************/struct FKeyValueType {  float key;  idxtype val;};typedef struct FKeyValueType FKeyValueType;/************************************************************************** The following data structure stores key-key-value triplets**************************************************************************/struct KeyKeyValueType {  idxtype key1, key2;  idxtype val;};typedef struct KeyKeyValueType KeyKeyValueType;/************************************************************************** The following data structure is used to store the buckets for the * refinment algorithms**************************************************************************/struct PQueueType {  int nnodes;  int maxnnodes;  idxtype *perm, *iperm, *values;    /* iperm[i] stores where the ith entry is located     perm[i] stores the entry that is located in the ith position */};typedef struct PQueueType PQueueType;/************************************************************************** The following data structure is used to store the buckets for the* refinment algorithms**************************************************************************/struct FPQueueType {  int type;                     /* The type of the representation used */  int nnodes;  int maxnodes;  /* Heap version of the data structure */  FKeyValueType *heap;  idxtype *locator;};typedef struct FPQueueType FPQueueType;/************************************************************************** The following data structure stores an edge**************************************************************************/struct edgedef {  idxtype edge;  idxtype ewgt;};typedef struct edgedef EdgeType;/************************************************************************** This data structure holds various working space data**************************************************************************/struct workspacedef {  idxtype *core;			/* Where pairs, indices, and degrees are coming from */  int maxcore;  int nlarge;				/* The size of 'Large' */  KeyValueType *pairs;			/* Large pair array used during setup */  idxtype *indices;			/* Large array of indxtype used for various purposes */  /* Auxiliary parameters */  idxtype *pv1, *pv2, *pv3, *pv4;	/* Vectors of npes+1 size used in various places */  KeyValueType *pepairs1, *pepairs2;  EdgeType *degrees;};typedef struct workspacedef WorkSpaceType;/************************************************************************** The following data structure holds information on degrees for k-way* partition**************************************************************************/struct rinfodef { int id, ed;            /* ID/ED of edges */ int ndegrees;          /* The number of different ext-degrees */ EdgeType *degrees;     /* List of edges */};typedef struct rinfodef RInfoType;/************************************************************************** The following data structure holds information on degrees for k-way* partition**************************************************************************/struct nrinfodef { int edegrees[2];  };typedef struct nrinfodef NRInfoType;/************************************************************************** The following data structure stores a sparse matrix in CSR format* The diagonal entry is in the first position of each row.**************************************************************************/struct matrixdef {  int nrows, nnzs;		/* Number of rows and nonzeros in the matrix */  idxtype *rowptr;  idxtype *colind;  float *values;  float *transfer;};typedef struct matrixdef MatrixType;/************************************************************************** This data structure holds the input graph**************************************************************************/struct graphdef {  int gnvtxs, nvtxs, nedges, ncon, nobj;  idxtype *xadj;		/* Pointers to the locally stored vertices */  idxtype *vwgt;		/* Vertex weights */  float *nvwgt;		/* Vertex weights */  idxtype *vsize;		/* Vertex size */  idxtype *adjncy;		/* Array that stores the adjacency lists of nvtxs */  idxtype *adjwgt;		/* Array that stores the weights of the adjacency lists */  idxtype *vtxdist;		/* Distribution of vertices */  idxtype *match;  idxtype *cmap;  idxtype *label;  /* Communication/Setup parameters */  int nnbrs, nrecv, nsend;		/* The number of neighboring processors */  idxtype *peind;			/* Array of size nnbrs storing the neighboring PEs */  idxtype *sendptr, *sendind;		/* CSR format of the vertices that are sent */  idxtype *recvptr, *recvind;		/* CSR format of the vertices that are received */  idxtype *imap;			/* The inverse map of local to global indices */  idxtype *pexadj, *peadjncy,           *peadjloc;			/* CSR format of the PEs each vertex is adjancent to */  int nlocal;			/* Number of interior vertices */  idxtype *lperm;		/* lperm[0:nlocal] points to interior vertices, the rest are interface */  /* Communication parameters for projecting the partition.    * These are computed during CreateCoarseGraph and used during projection    * Note that during projection, the meaning of received and sent is reversed! */  idxtype *rlens, *slens;	/* Arrays of size nnbrs of how many vertices you are sending and receiving */  KeyValueType *rcand;  /* Partition parameters */  idxtype *where, *home;  idxtype *lpwgts, *gpwgts;  float *lnpwgts, *gnpwgts;  RInfoType *rinfo;  /* Node refinement information */  NRInfoType *nrinfo;  int nsep;  			/* The number of vertices in the separator */  idxtype *sepind;		/* The indices of the vertices in the separator */  int lmincut, mincut;  int level;  int match_type;  int edgewgt_type;  struct graphdef *coarser, *finer;};typedef struct graphdef GraphType;/************************************************************************** The following data type implements a timer**************************************************************************/typedef double timer;/************************************************************************** The following structure stores information used by parallel kmetis**************************************************************************/struct controldef {  int mype, npes;		/* Info about the parallel system */  int CoarsenTo;		/* The # of vertices in the coarsest graph */  int dbglvl;			/* Controls the debuging output of the program */  int nparts;			/* The number of partitions */  int foldf;			/* What is the folding factor */  int ipart;			/* The type of initial partitioning */  int xyztype;			/* The type of coordinate indexing */  int seed;			/* Random number seed */  int sync;			/* Random number seed */  float *tpwgts;		/* Target subdomain weights */  int tvwgts[MAXNCON];  float ubvec[MAXNCON];  int partType;  int ps_relation;  float redist_factor, redist_base, ipc_factor;  float edge_size_ratio;  MatrixType *matrix;  MPI_Comm gcomm;  MPI_Comm comm;		/* MPI Communicator */  MPI_Request sreq[MAX_PES],               rreq[MAX_PES];    /* MPI send and receive requests */  MPI_Status statuses[MAX_PES];  MPI_Status status;  /* Various Timers */  timer TotalTmr, InitPartTmr, MatchTmr, ContractTmr, CoarsenTmr, RefTmr,        SetupTmr, ColorTmr, ProjectTmr, KWayInitTmr, KWayTmr, MoveTmr,        RemapTmr, AuxTmr1, AuxTmr2, AuxTmr3, AuxTmr4, AuxTmr5, AuxTmr6;};typedef struct controldef CtrlType;/************************************************************************** The following data structure stores a mesh.**************************************************************************/struct meshdef {  int etype;  int gnelms, gnns;  int nelms, nns;  int ncon;  int esize, gminnode;  idxtype *elmdist;  idxtype *elements;  idxtype *elmwgt;};typedef struct meshdef MeshType;

⌨️ 快捷键说明

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