]> granicus.if.org Git - graphviz/commitdiff
remove dynamic allocation capability of power_method for eigs
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Wed, 23 Jun 2021 01:13:42 +0000 (18:13 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 25 Jun 2021 14:39:33 +0000 (07:39 -0700)
The behavior to dynamically allocate memory for eigs was not documented (unlike
the parameter eigv). However, the only caller was not using this anyway. This
commit removes it to ease ongoing maintenance.

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

index c7f763bb06aaab3c6bae7e9c07b650a09bfbb75f..fd314f759ccf4186cd352ee11f80a597e9cab007 100644 (file)
@@ -136,9 +136,8 @@ static void country_graph_coloring_internal(int seed, SparseMatrix A, int **p, r
 
   /* largest eigen vector */
   {
-    real eig, *eigv;
-    eigv = &eig;
-    power_method(L, L->n, 1, seed, &v, &eigv);
+    real eig;
+    power_method(L, L->n, 1, seed, &v, &eig);
   }
 
   vector_ordering(n, v, p);
index 230afdfd6bdc6fa669cc92e9f6069125d1d6baf9..76be11089509651ee31c840aa753e260a3b508e4 100644 (file)
@@ -18,7 +18,7 @@ static const int maxit = 100;
 static const real tolerance = 0.00001;
 
 void power_method(void *A, int n, int K, int random_seed,
-    real **eigv, real **eigs){
+    real **eigv, real *eigs){
   /* find k-largest eigenvectors of a matrix A. Result in eigv. if eigv == NULL; memory will be allocated.
 
      This converges only if the largest eigenvectors/values are real (e.g., if A is symmetric) and the 
@@ -64,7 +64,6 @@ void power_method(void *A, int n, int K, int random_seed,
   assert(K <= n && K > 0);
 
   if (!(*eigv)) *eigv = MALLOC(sizeof(real)*n*K);
-  if (!(*eigs)) *eigs = MALLOC(sizeof(real)*K);
   v = MALLOC(sizeof(real*)*K);
 
   vv = MALLOC(sizeof(real)*n);
@@ -96,7 +95,7 @@ void power_method(void *A, int n, int K, int random_seed,
 
       unorm = vector_product(n, vv, vv);/* ||u||^2 */    
       unorm = sqrt(unorm);
-      (*eigs)[k] = unorm;
+      eigs[k] = unorm;
       if (unorm > 0) {
        unorm = 1/unorm;
       } else {
index c95794d56f33c99b701de1a3f1400a36285ff355..c2e66cf4ebe982896cfee019b635a2270d51e662 100644 (file)
@@ -14,6 +14,6 @@
 #include <sparse/general.h>
 
 void power_method(void *A, int n, int K, int random_seed,
-  real **eigv, real **eigs);
+  real **eigv, real *eigs);
 
 #endif