Hitmap 1.3
 All Data Structures Namespaces Files Functions Variables Typedefs Friends Macros Groups Pages
mutil.c
Go to the documentation of this file.
1 /*
2  * mutil.c
3  *
4  * This file contains various utility functions for the MOC portion of the
5  * code
6  *
7  * Started 2/15/98
8  * George
9  *
10  * $Id: mutil.c,v 1.1 1998/11/27 17:59:27 karypis Exp $
11  *
12  */
13 
14 #include <metis.h>
15 
16 
17 /*************************************************************************
18 * This function checks if the vertex weights of two vertices are below
19 * a given set of values
20 **************************************************************************/
21 int AreAllVwgtsBelow(int ncon, float alpha, float *vwgt1, float beta, float *vwgt2, float limit)
22 {
23  int i;
24 
25  for (i=0; i<ncon; i++)
26  if (alpha*vwgt1[i] + beta*vwgt2[i] > limit)
27  return 0;
28 
29  return 1;
30 }
31 
32 
33 /*************************************************************************
34 * This function checks if the vertex weights of two vertices are below
35 * a given set of values
36 **************************************************************************/
37 int AreAnyVwgtsBelow(int ncon, float alpha, float *vwgt1, float beta, float *vwgt2, float limit)
38 {
39  int i;
40 
41  for (i=0; i<ncon; i++)
42  if (alpha*vwgt1[i] + beta*vwgt2[i] < limit)
43  return 1;
44 
45  return 0;
46 }
47 
48 
49 
50 /*************************************************************************
51 * This function checks if the vertex weights of two vertices are above
52 * a given set of values
53 **************************************************************************/
54 int AreAllVwgtsAbove(int ncon, float alpha, float *vwgt1, float beta, float *vwgt2, float limit)
55 {
56  int i;
57 
58  for (i=0; i<ncon; i++)
59  if (alpha*vwgt1[i] + beta*vwgt2[i] < limit)
60  return 0;
61 
62  return 1;
63 }
64 
65 
66 /*************************************************************************
67 * This function computes the load imbalance over all the constrains
68 * For now assume that we just want balanced partitionings
69 **************************************************************************/
70 float ComputeLoadImbalance(int ncon, int nparts, float *npwgts, float *tpwgts)
71 {
72  int i, j;
73  float max, lb=0.0;
74 
75  for (i=0; i<ncon; i++) {
76  max = 0.0;
77  for (j=0; j<nparts; j++) {
78  if (npwgts[j*ncon+i] > max)
79  max = npwgts[j*ncon+i];
80  }
81  if (max*nparts > lb)
82  lb = max*nparts;
83  }
84 
85  return lb;
86 }
87 
88 /*************************************************************************
89 * This function checks if the vertex weights of two vertices are below
90 * a given set of values
91 **************************************************************************/
92 int AreAllBelow(int ncon, float *v1, float *v2)
93 {
94  int i;
95 
96  for (i=0; i<ncon; i++)
97  if (v1[i] > v2[i])
98  return 0;
99 
100  return 1;
101 }
#define AreAllVwgtsAbove
Definition: rename.h:281
#define AreAnyVwgtsBelow
Definition: rename.h:280
#define AreAllVwgtsBelow
Definition: rename.h:279
#define ComputeLoadImbalance
Definition: rename.h:282
#define AreAllBelow
Definition: rename.h:283
#define max(a, b)
Definition: cannonAsync.c:47