File: pmetis.c

package info (click to toggle)
metis-edf 4.1-2-4
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye, buster, sid
  • size: 3,696 kB
  • sloc: ansic: 15,702; makefile: 121; sh: 100; fortran: 61
file content (105 lines) | stat: -rw-r--r-- 3,112 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
 /* 
  * Copyright 1997, Regents of the University of Minnesota 
  * 
  * pmetis.c 
  * 
  * This file contains the driving routine for multilevel method 
  * 
  * Started 8/28/94 
  * George 
  * 
  * $Id: pmetis.c,v 1.1 1998/11/27 17:59:39 karypis Exp $ 
  * 
  */ 

 #include <metis.h> 



 /************************************************************************* 
 * Let the game begin 
 **************************************************************************/ 
 main(long argc, char *argv[]) 
 { 
   long i, nparts, options[10]; 
   idxtype *part; 
   float lbvec[MAXNCON]; 
   GraphType graph; 
   char filename[256]; 
   long numflag = 0, wgtflag = 0, edgecut; 
   timer TOTALTmr, METISTmr, IOTmr; 


   if (argc != 3) { 
     printf("Usage: %s <GraphFile> <Nparts>\n",argv[0]); 
     exit(4); 
   } 
      
   strcpy(filename, argv[1]); 
   nparts = atoi(argv[2]); 

   if (nparts < 2) { 
     printf("The number of partitions should be greater than 1!\n"); 
     exit(4); 
   } 

   cleartimer(TOTALTmr); 
   cleartimer(METISTmr); 
   cleartimer(IOTmr); 

   starttimer(TOTALTmr); 
   starttimer(IOTmr); 
   ReadGraph(&graph, filename, &wgtflag); 
   if (graph.nvtxs <= 0) { 
     printf("Empty graph. Nothing to do.\n"); 
     exit(4); 
   } 
   stoptimer(IOTmr); 

   printf("**********************************************************************\n"); 
   printf("%s", METISTITLE); 
   printf("Graph Information ---------------------------------------------------\n"); 
   printf("  Name: %s, #Vertices: %ld, #Edges: %ld, #Parts: %ld\n", filename, graph.nvtxs, graph.nedges/2, nparts); 
   if (graph.ncon > 1) 
     printf("  Balancing Constraints: %ld\n", graph.ncon); 
   printf("\nRecursive Partitioning... -------------------------------------------\n"); 

   part = idxmalloc(graph.nvtxs, "main: part"); 
   options[0] = 0; 

   starttimer(METISTmr); 
   if (graph.ncon == 1) { 
     METIS_PartGraphRecursive(&graph.nvtxs, graph.xadj, graph.adjncy, graph.vwgt, graph.adjwgt,  
           &wgtflag, &numflag, &nparts, options, &edgecut, part); 
   } 
   else { 
     METIS_mCPartGraphRecursive(&graph.nvtxs, &graph.ncon, graph.xadj, graph.adjncy, graph.vwgt,  
           graph.adjwgt, &wgtflag, &numflag, &nparts, options, &edgecut, part); 
   } 

   stoptimer(METISTmr); 

   ComputePartitionBalance(&graph, nparts, part, lbvec); 

   printf("  %ld-way Edge-Cut: %7ld, Balance: ", nparts, edgecut); 
   for (i=0; i<graph.ncon; i++) 
     printf("%5.2f ", lbvec[i]); 
   printf("\n"); 


   starttimer(IOTmr); 
   WritePartition(filename, part, graph.nvtxs, nparts);  
   stoptimer(IOTmr); 
   stoptimer(TOTALTmr); 

   printf("\nTiming Information --------------------------------------------------\n"); 
   printf("  I/O:          \t\t %7.3f\n", gettimer(IOTmr)); 
   printf("  Partitioning: \t\t %7.3f   (PMETIS time)\n", gettimer(METISTmr)); 
   printf("  Total:        \t\t %7.3f\n", gettimer(TOTALTmr)); 
   printf("**********************************************************************\n"); 


   GKfree(&graph.xadj, &graph.adjncy, &graph.vwgt, &graph.adjwgt, &part, LTERM); 
 }