SCM

SCM Repository

[matrix] Diff of /pkg/src/Metis_utils.c
ViewVC logotype

Diff of /pkg/src/Metis_utils.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 146, Sat May 1 20:27:04 2004 UTC revision 148, Mon May 3 12:49:17 2004 UTC
# Line 1  Line 1 
1  #include "Metis_utils.h"  #include "Metis_utils.h"
2    
3  void ssc_metis_order(int n, const int Tp [], const int Ti [],  void ssc_metis_order(int n, const int Tp [], const int Ti [],
4                       idxtype* perm, idxtype* iperm)                       int Perm[], int iPerm[])
5  {  {
6      int  j, num_flag = 0, options_flag = 0;      int  j, num_flag = 0, options_flag = 0;
7      idxtype      idxtype
8          *xadj = Calloc(n+1, idxtype),          *xadj = Calloc(n+1, idxtype),
9          *adj = Calloc(2 * (Tp[n] - n), idxtype);          *adj = Calloc(2 * (Tp[n] - n), idxtype),
10            *perm = Calloc(n, idxtype), /* in case idxtype != int */
11            *iperm = Calloc(n, idxtype);
12    
13                                  /* temporarily use perm to store lengths */                                  /* temporarily use perm to store lengths */
14      memset(perm, 0, sizeof(idxtype) * n);      memset(perm, 0, sizeof(idxtype) * n);
# Line 37  Line 39 
39          }          }
40      }      }
41      METIS_NodeND(&n, xadj, adj, &num_flag, &options_flag, perm, iperm);      METIS_NodeND(&n, xadj, adj, &num_flag, &options_flag, perm, iperm);
42      Free(xadj); Free(adj);      for (j = 0; j < n; j++) {
43  }          Perm[i] = (int) perm[i];
44            iPerm[i] = (int) iperm[i];
 void col_metis_order(int j0, int j1, int i2, const int Tp[], const int Ti[],  
                      int ans[])  
 {  
     int j, nz = 0;              /* count off-diagonal pairs */  
     for (j = j0; j < j1; j++) { /* columns of interest */  
         int ii, nr = 0, p2 = Tp[j + 1];  
         for (ii = Tp[j]; ii < p2; ii++) {  
             int i = Ti[ii];  
             if (j1 <= i && i < i2) nr++; /* verify row index */  
         }  
         nz += (nr * (nr - 1))/2; /* add number of pairs of rows */  
     }  
     if (nz > 0) {               /* Form an ssc Matrix */  
         int j, n = i2 - j1,     /* number of rows */  
             nnz = n + nz, pos;  
         int *Ap = Calloc(n + 1, int),  
             *Ai = Calloc(nnz, int),  
             *Tj = Calloc(nnz, int),  
             *TTi = Calloc(nnz, int);  
         double                  /* needed for triplet_to_col */  
             *Ax = Calloc(nnz, double), /* FIXME: change triplet_to_col */  
             *Tx = Calloc(nnz, double); /* to check for null pointers */  
         idxtype *perm = Calloc(n, idxtype),  
             *iperm = Calloc(n, idxtype);  
   
         for (j = 0; j < n; j++) { /* diagonals */  
             TTi[j] = Tj[j] = j;  
             Tx[j] = 1.;  
         }  
         pos = n;  
         for (j = j0; j < j1; j++) { /* create the pairs */  
             int ii, nr = 0, p2 = Tp[j + 1];  
             for (ii = Tp[j]; ii < p2; ii++) {  
                 int r1 = Ti[ii], i1;  
                 if (j1 <= r1 && r1 < i2) {  
                     for (i1 = ii + 1; i1 < p2; i1++) {  
                         int r2 = Ti[i1];  
                         if (r2 < i2) {  
                             TTi[pos] = r2 - j1;  
                             Tj[pos] = r1 - j1;  
                             Tx[pos] = 1.;  
                             pos++;  
                         }  
                     }  
                 }  
             }  
         }  
         triplet_to_col(n, n, nnz, TTi, Tj, Tx, Ap, Ai, Ax);  
         ssc_metis_order(n, Ap, Ai, perm, iperm);  
         for (j = j1; j < i2; j++) ans[j] = j1 + iperm[j - j1];  
         Free(Tx); Free(Ax); Free(TTi); Free(Tj); Free(Ai); Free(Ap);  
         Free(perm); Free(iperm);  
45      }      }
46        Free(iperm); Free(perm); Free(xadj); Free(adj);
47  }  }

Legend:
Removed from v.146  
changed lines
  Added in v.148

root@r-forge.r-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business Powered By FusionForge