]> granicus.if.org Git - graphviz/commitdiff
sparse: remove 'transpose' parameter from 'SparseMatrix_multiply_vector'
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 27 May 2022 01:38:19 +0000 (18:38 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 4 Jun 2022 15:16:33 +0000 (08:16 -0700)
This function is only used to multiply untransposed matrices.

cmd/gvmap/power.c
lib/sfdpgen/Multilevel.c
lib/sfdpgen/sparse_solve.c
lib/sparse/SparseMatrix.c
lib/sparse/SparseMatrix.h
lib/sparse/clustering.c
lib/sparse/mq.c

index 33dddec1668b65469a6114d62b984ea8688e8113..5ca159234a9a41dec68878f0ecd55d57a7ece229 100644 (file)
@@ -92,7 +92,7 @@ void power_method(void *A, int n, int K, int random_seed,
          u[i] = u[i] - uij *v[j][i];
        }
       }
-      SparseMatrix_multiply_vector(A, u, &vv, FALSE);
+      SparseMatrix_multiply_vector(A, u, &vv);
 
       unorm = vector_product(n, vv, vv);/* ||u||^2 */    
       unorm = sqrt(unorm);
index 2c661d0afc52a3d2982475f7295d93eaa6f034fa..41e2fb0a56e29263d29145581208f9e7317db950 100644 (file)
@@ -935,7 +935,7 @@ static void Multilevel_coarsen_internal(SparseMatrix A, SparseMatrix *cA, Sparse
       */
     if (!*cA) goto RETURN;
 
-    SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE);
+    SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt);
     *R = SparseMatrix_divide_row_by_degree(*R);
     SparseMatrix_set_symmetric(*cA);
     SparseMatrix_set_pattern_symmetric(*cA);
@@ -995,7 +995,7 @@ static void Multilevel_coarsen_internal(SparseMatrix A, SparseMatrix *cA, Sparse
       *cA = SparseMatrix_multiply(B, *P); 
       */
     if (!*cA) goto RETURN;
-    SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE);
+    SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt);
     *R = SparseMatrix_divide_row_by_degree(*R);
     SparseMatrix_set_symmetric(*cA);
     SparseMatrix_set_pattern_symmetric(*cA);
@@ -1055,7 +1055,7 @@ static void Multilevel_coarsen_internal(SparseMatrix A, SparseMatrix *cA, Sparse
     *R = SparseMatrix_transpose(*P);
     *cA = SparseMatrix_multiply3(*R, A, *P); 
     if (!*cA) goto RETURN;
-    SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE);
+    SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt);
     SparseMatrix_set_symmetric(*cA);
     SparseMatrix_set_pattern_symmetric(*cA);
     *cA = SparseMatrix_remove_diagonal(*cA);
index aa53db32e09a31738958f7bed6e22b1e36c7db18..8304c5f30e92695f660cab060f711f6455eae227 100644 (file)
@@ -33,7 +33,7 @@ static double *Operator_uniform_stress_matmul_apply(Operator o, double *x, doubl
   double xsum = 0.;
   int m = A->m, i;
 
-  SparseMatrix_multiply_vector(A, x, &y, FALSE);
+  SparseMatrix_multiply_vector(A, x, &y);
 
   /* alpha*V*x */
   for (i = 0; i < m; i++) xsum += x[i];
@@ -60,7 +60,7 @@ Operator Operator_uniform_stress_matmul(SparseMatrix A, double alpha){
 
 static double *Operator_matmul_apply(Operator o, double *x, double *y){
   SparseMatrix A = (SparseMatrix) o->data;
-  SparseMatrix_multiply_vector(A, x, &y, FALSE);
+  SparseMatrix_multiply_vector(A, x, &y);
   return y;
 }
 
index 0b64d812c66547a2c2ca22f711a93ddbeda485b2..f72a7d7d4ed085a47ecb8f3ec6151de7abdca4f5 100644 (file)
@@ -1031,9 +1031,9 @@ void SparseMatrix_multiply_dense(SparseMatrix A, double *v, double **res, int di
   SparseMatrix_multiply_dense1(A, v, res, dim);
 }
 
-void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res, int transposed){
+void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res{
   /* A v or A^T v. Real only for now. */
-  int i, j, *ia, *ja, n, m;
+  int i, j, *ia, *ja, m;
   double *a, *u = NULL;
   int *ai;
   assert(A->format == FORMAT_CSR);
@@ -1042,47 +1042,26 @@ void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res, int t
   ia = A->ia;
   ja = A->ja;
   m = A->m;
-  n = A->n;
   u = *res;
 
   switch (A->type){
   case MATRIX_TYPE_REAL:
     a = (double*) A->a;
     if (v){
-      if (!transposed){
-       if (!u) u = MALLOC(sizeof(double)*((size_t)m));
-       for (i = 0; i < m; i++){
-         u[i] = 0.;
-         for (j = ia[i]; j < ia[i+1]; j++){
-           u[i] += a[j]*v[ja[j]];
-         }
-       }
-      } else {
-       if (!u) u = MALLOC(sizeof(double)*((size_t)n));
-       for (i = 0; i < n; i++) u[i] = 0.;
-       for (i = 0; i < m; i++){
-         for (j = ia[i]; j < ia[i+1]; j++){
-           u[ja[j]] += a[j]*v[i];
-         }
+      if (!u) u = MALLOC(sizeof(double)*((size_t)m));
+      for (i = 0; i < m; i++){
+       u[i] = 0.;
+       for (j = ia[i]; j < ia[i+1]; j++){
+         u[i] += a[j]*v[ja[j]];
        }
       }
     } else {
       /* v is assumed to be all 1's */
-      if (!transposed){
-       if (!u) u = MALLOC(sizeof(double)*((size_t)m));
-       for (i = 0; i < m; i++){
-         u[i] = 0.;
-         for (j = ia[i]; j < ia[i+1]; j++){
-           u[i] += a[j];
-         }
-       }
-      } else {
-       if (!u) u = MALLOC(sizeof(double)*((size_t)n));
-       for (i = 0; i < n; i++) u[i] = 0.;
-       for (i = 0; i < m; i++){
-         for (j = ia[i]; j < ia[i+1]; j++){
-           u[ja[j]] += a[j];
-         }
+      if (!u) u = MALLOC(sizeof(double)*((size_t)m));
+      for (i = 0; i < m; i++){
+       u[i] = 0.;
+       for (j = ia[i]; j < ia[i+1]; j++){
+         u[i] += a[j];
        }
       }
     }
@@ -1090,40 +1069,20 @@ void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res, int t
   case MATRIX_TYPE_INTEGER:
     ai = (int*) A->a;
     if (v){
-      if (!transposed){
-       if (!u) u = MALLOC(sizeof(double)*((size_t)m));
-       for (i = 0; i < m; i++){
-         u[i] = 0.;
-         for (j = ia[i]; j < ia[i+1]; j++){
-           u[i] += ai[j]*v[ja[j]];
-         }
-       }
-      } else {
-       if (!u) u = MALLOC(sizeof(double)*((size_t)n));
-       for (i = 0; i < n; i++) u[i] = 0.;
-       for (i = 0; i < m; i++){
-         for (j = ia[i]; j < ia[i+1]; j++){
-           u[ja[j]] += ai[j]*v[i];
-         }
+      if (!u) u = MALLOC(sizeof(double)*((size_t)m));
+      for (i = 0; i < m; i++){
+       u[i] = 0.;
+       for (j = ia[i]; j < ia[i+1]; j++){
+         u[i] += ai[j]*v[ja[j]];
        }
       }
     } else {
       /* v is assumed to be all 1's */
-      if (!transposed){
-       if (!u) u = MALLOC(sizeof(double)*((size_t)m));
-       for (i = 0; i < m; i++){
-         u[i] = 0.;
-         for (j = ia[i]; j < ia[i+1]; j++){
-           u[i] += ai[j];
-         }
-       }
-      } else {
-       if (!u) u = MALLOC(sizeof(double)*((size_t)n));
-       for (i = 0; i < n; i++) u[i] = 0.;
-       for (i = 0; i < m; i++){
-         for (j = ia[i]; j < ia[i+1]; j++){
-           u[ja[j]] += ai[j];
-         }
+      if (!u) u = MALLOC(sizeof(double)*((size_t)m));
+      for (i = 0; i < m; i++){
+       u[i] = 0.;
+       for (j = ia[i]; j < ia[i+1]; j++){
+         u[i] += ai[j];
        }
       }
     }
index 7c0840a0c4967e395a05a2d2baa17043b413bc2a..28d5ae1c9bd72265bd5df717f99f85b651615ddc 100644 (file)
@@ -75,7 +75,7 @@ SparseMatrix SparseMatrix_transpose(SparseMatrix A);
 SparseMatrix SparseMatrix_symmetrize(SparseMatrix A,
                                      bool pattern_symmetric_only);
 SparseMatrix SparseMatrix_symmetrize_nodiag(SparseMatrix A);
-void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res, int transposed);/* if v = NULL, v is assumed to be {1,1,...,1}*/
+void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res);/* if v = NULL, v is assumed to be {1,1,...,1}*/
 SparseMatrix SparseMatrix_remove_diagonal(SparseMatrix A);
 SparseMatrix SparseMatrix_remove_upper(SparseMatrix A);/* remove diag and upper diag */
 SparseMatrix SparseMatrix_divide_row_by_degree(SparseMatrix A);
index 3aa64e41c2a30fe16fc293e790b07a3751389a4c..5116e91c875e4f146489080243aec2ea7515a29e 100644 (file)
@@ -329,7 +329,7 @@ static void hierachical_modularity_clustering(SparseMatrix A, int ncluster_targe
   while (cgrid->prev){
     double *v = NULL;
     P = cgrid->prev->P;
-    SparseMatrix_multiply_vector(P, u, &v, FALSE);
+    SparseMatrix_multiply_vector(P, u, &v);
     free(u);
     u = v;
     cgrid = cgrid->prev;
index 4f611f9fceffd371f8c8ba9ff11c275c0725f8aa..e97289d376dc4bcf8362f1f25dada88f4da091fd 100644 (file)
@@ -571,7 +571,7 @@ static void hierachical_mq_clustering(SparseMatrix A, int maxcluster,
   while (cgrid->prev){
     double *v = NULL;
     P = cgrid->prev->P;
-    SparseMatrix_multiply_vector(P, u, &v, FALSE);
+    SparseMatrix_multiply_vector(P, u, &v);
     free(u);
     u = v;
     cgrid = cgrid->prev;