source: inundation/pymetis/metis-4.0/Programs/kmetis.c @ 3031

Last change on this file since 3031 was 2051, checked in by jack, 19 years ago

Python interface to metis. Currently provides only the
METIS_PartMeshNodal function, since that is what is currently needed for partitioning.
Module name is metis.

File size: 2.9 KB
Line 
1/*
2 * Copyright 1997, Regents of the University of Minnesota
3 *
4 * kmetis.c
5 *
6 * This file contains the driving routine for kmetis
7 *
8 * Started 8/28/94
9 * George
10 *
11 * $Id: kmetis.c,v 1.1 1998/11/27 17:59:35 karypis Exp $
12 *
13 */
14
15#include <metis.h>
16
17
18
19/*************************************************************************
20* Let the game begin
21**************************************************************************/
22main(int argc, char *argv[])
23{
24  int i, nparts, options[10];
25  idxtype *part;
26  float rubvec[MAXNCON], lbvec[MAXNCON];
27  GraphType graph;
28  char filename[256];
29  int numflag = 0, wgtflag = 0, edgecut;
30  timer TOTALTmr, METISTmr, IOTmr;
31
32  if (argc != 3) {
33    printf("Usage: %s <GraphFile> <Nparts>\n",argv[0]);
34    exit(0);
35  }
36   
37  strcpy(filename, argv[1]);
38  nparts = atoi(argv[2]);
39
40  if (nparts < 2) {
41    printf("The number of partitions should be greater than 1!\n");
42    exit(0);
43  }
44
45  cleartimer(TOTALTmr);
46  cleartimer(METISTmr);
47  cleartimer(IOTmr);
48
49  starttimer(TOTALTmr);
50  starttimer(IOTmr);
51  ReadGraph(&graph, filename, &wgtflag);
52  if (graph.nvtxs <= 0) {
53    printf("Empty graph. Nothing to do.\n");
54    exit(0);
55  }
56  stoptimer(IOTmr);
57
58  printf("**********************************************************************\n");
59  printf("%s", METISTITLE);
60  printf("Graph Information ---------------------------------------------------\n");
61  printf("  Name: %s, #Vertices: %d, #Edges: %d, #Parts: %d\n", filename, graph.nvtxs, graph.nedges/2, nparts);
62  if (graph.ncon > 1)
63    printf("  Balancing Constraints: %d\n", graph.ncon);
64  printf("\nK-way Partitioning... -----------------------------------------------\n");
65
66  part = idxmalloc(graph.nvtxs, "main: part");
67  options[0] = 0;
68
69  starttimer(METISTmr);
70  if (graph.ncon == 1) {
71    METIS_PartGraphKway(&graph.nvtxs, graph.xadj, graph.adjncy, graph.vwgt, graph.adjwgt, 
72          &wgtflag, &numflag, &nparts, options, &edgecut, part);
73  }
74  else {
75    for (i=0; i<graph.ncon; i++)
76      rubvec[i] = HORIZONTAL_IMBALANCE;
77
78    METIS_mCPartGraphKway(&graph.nvtxs, &graph.ncon, graph.xadj, graph.adjncy, graph.vwgt, 
79          graph.adjwgt, &wgtflag, &numflag, &nparts, rubvec, options, &edgecut, part);
80  }
81  stoptimer(METISTmr);
82
83  ComputePartitionBalance(&graph, nparts, part, lbvec);
84
85  printf("  %d-way Edge-Cut: %7d, Balance: ", nparts, edgecut);
86  for (i=0; i<graph.ncon; i++)
87    printf("%5.2f ", lbvec[i]);
88  printf("\n");
89
90  starttimer(IOTmr);
91  WritePartition(filename, part, graph.nvtxs, nparts); 
92  stoptimer(IOTmr);
93  stoptimer(TOTALTmr);
94
95  printf("\nTiming Information --------------------------------------------------\n");
96  printf("  I/O:          \t\t %7.3f\n", gettimer(IOTmr));
97  printf("  Partitioning: \t\t %7.3f   (KMETIS time)\n", gettimer(METISTmr));
98  printf("  Total:        \t\t %7.3f\n", gettimer(TOTALTmr));
99  printf("**********************************************************************\n");
100
101
102  GKfree(&graph.xadj, &graph.adjncy, &graph.vwgt, &graph.adjwgt, &part, LTERM);
103} 
104
105
Note: See TracBrowser for help on using the repository browser.