]> granicus.if.org Git - graphviz/commitdiff
remove function pointer argument to power_method
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 12 Jun 2021 04:24:23 +0000 (21:24 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 19 Jun 2021 17:16:47 +0000 (10:16 -0700)
This function is only ever called with matvec_sparse, so we can simplify it by
just calling this function directly. This is also a minor optimization.

cmd/gvmap/country_graph_coloring.c
cmd/gvmap/power.c
cmd/gvmap/power.h

index dec42c234eae6dd03b5ed151b539fd1f1418be59..e60bee50c79589f70330d4782d9d33821b0b0570 100644 (file)
@@ -305,7 +305,7 @@ static void country_graph_coloring_internal(int seed, SparseMatrix A, int **p, r
     real tol = 0.00001;
     real eig, *eigv;
     eigv = &eig;
-    power_method(matvec_sparse, L, L->n, 1, seed, maxit, tol, &v, &eigv);
+    power_method(L, L->n, 1, seed, maxit, tol, &v, &eigv);
   }
 
   vector_ordering(n, v, p, TRUE);
index c6268142104c8530481d40ab67e46280476f4f43..d14b83ff5df326b35cea51f2a9d5f4c9579979a6 100644 (file)
@@ -11,8 +11,8 @@
 #include "power.h"
 #include <sparse/SparseMatrix.h>
 
-void power_method(void (*matvec)(void *, real*, real **, int, int*),
-                 void *A, int n, int K, int random_seed, int maxit, real tol, real **eigv, real **eigs){
+void power_method(void *A, int n, int K, int random_seed, int maxit, real tol,
+    real **eigv, real **eigs){
   /* find k-largest eigenvectors of a matrix A. Result in eigv. if eigv == NULL; memory will be allocated.
      maxium of maxit iterations will be done, and tol is the convergence criterion
 
@@ -20,7 +20,6 @@ void power_method(void (*matvec)(void *, real*, real **, int, int*),
      next largest eigenvalues separate from the largest ones
 
      input:
-     matvec: a function point that takes a matrix M and a vector u, produce v = M.u
      A: the matrix
      n: dimension of matrix A
      K: number of eigenes to find
@@ -90,7 +89,7 @@ void power_method(void (*matvec)(void *, real*, real **, int, int*),
          u[i] = u[i] - uij *v[j][i];
        }
       }
-      matvec(A, u, &vv, FALSE, &flag);
+      matvec_sparse(A, u, &vv, FALSE, &flag);
       assert(!flag);
 
       unorm = vector_product(n, vv, vv);/* ||u||^2 */    
index 28690fdb3f1995a40206d56e0f4446e629851ee4..80ccd2e6186167000175f60a4dbad4f67f2af442 100644 (file)
@@ -13,9 +13,8 @@
 
 #include <sparse/general.h>
 
-/* if you have a standard sparse matrix, set matvec to matvec_sparse*/
-void power_method(void (*matvec)(void *M, real *u, real **v, int transposed, int *flag),
-          void *A, int n, int K, int random_seed, int maxit, real tol, real **eigv, real **eigs);
+void power_method(void *A, int n, int K, int random_seed, int maxit, real tol,
+  real **eigv, real **eigs);
 
 void matvec_sparse(void *M, real *u, real **v, int transposed, int *flag);