Revision: 38874
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38874
Author:   shuvro
Date:     2011-07-31 07:03:02 +0000 (Sun, 31 Jul 2011)
Log Message:
-----------
Tablification of the code and some code clean up.

Modified Paths:
--------------
    branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp
    branches/soc-2011-avocado/blender/intern/autoseam/EigenSolver.cpp
    branches/soc-2011-avocado/blender/intern/autoseam/EigenSolver.h
    branches/soc-2011-avocado/blender/intern/autoseam/EigenSolverArpack.cpp
    branches/soc-2011-avocado/blender/intern/autoseam/SparseMatrix.h

Modified: 
branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp
===================================================================
--- branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp     
2011-07-31 06:38:23 UTC (rev 38873)
+++ branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp     
2011-07-31 07:03:02 UTC (rev 38874)
@@ -44,7 +44,7 @@
        m_index_map_vector.resize(dimension, -1);
        mul_vec     = Eigen::VectorXd(dimension);
        matrix_dimension = dimension;
-       //threshold_value = min_value;
+       
 }
 
 void AutoseamAdjacency::set(int row, int col, float value)
@@ -94,7 +94,7 @@
 
 void AutoseamAdjacency::set_mapping(int index, int value)
 {
-       //m_index_map[index] =  value;
+       
        m_index_map_vector[index] = value;
 }
 
@@ -130,42 +130,32 @@
        //eigen_vectors = calculate_eigen_arpack();
        
 
-       // Need to modify the errors of the commented code.
        
+       
        EigenSolverArpack solver(matrix_dimension);
        //solver.matrix =  a;
-    // We need to set up our matrix here.
-    
-    //logic: if any member of a is non-zero then push it into the matrix
-    for (int i = 0; i < n; i++) {
-        for (int j = 0; j < n; j++) {
-            if(fabs(a(i,j)) > VALUE_ZERO){
-                solver.sparse_matrix(i,j) = a(i,j);
-            }
-        }
-    }
-    
+       // We need to set up our matrix here.
+       for (int i = 0; i < n; i++) {
+               for (int j = 0; j < n; j++) {
+                       if(fabs(a(i,j)) > VALUE_ZERO){
+                               solver.sparse_matrix(i,j) = a(i,j);
+                       }
+               }
+       }
+       
        eigen_vectors = solver.calculate_eigen_space();
        
        if(a.rows() && a.cols() && eigen_vectors != NULL){
                
-               //Eigen::SelfAdjointEigenSolver<MatrixXd> es(a);
-               //Eigen::VectorXd evalues(es.eigenvalues());
                int f = 0;
                bool found = false;
 
                MatrixXd aplus;
                MatrixXd aminus;
        
-               //while ( (f < num_eigen_values)) {
+
                while ( (f < solver.num_eigen_vectors)) {
-                       // Eigenvalues seem to be sorted largest to smallest, 
we need the 30 smallest
-                       // in the future only those will be calculated by the 
algorithm (if we use ARPACK)
                        
-                       //if(fabs(eigen_values[n-f-1]) > 0.0005){
-                       //if(fabs(eigen_values[f]) > 0.0005){
-                       
-                       printf("eigen values: %f\n", 
fabs(solver.eigen_values[f]));
                        if(fabs(solver.eigen_values[f]) > THRESHOLD_ZERO){
                                
                                int loop;
@@ -185,7 +175,7 @@
                                aes->split();
                                aes->fill_adjacency(a, aplus, aminus);
                        
-                               // printf("four values are: %d %d %d %d", 
aplus.rows(), aplus.cols(), aminus.rows(), aminus.cols());
+                               
                                // We filter out eigenspaces that give 
non-connected F+ and F- as in the paper
                                if ((is_graph_connected(aplus, threshold_value) 
&& is_graph_connected(aminus, threshold_value))) {
                                        m_eigenspaces.push_back(aes);

Modified: branches/soc-2011-avocado/blender/intern/autoseam/EigenSolver.cpp
===================================================================
--- branches/soc-2011-avocado/blender/intern/autoseam/EigenSolver.cpp   
2011-07-31 06:38:23 UTC (rev 38873)
+++ branches/soc-2011-avocado/blender/intern/autoseam/EigenSolver.cpp   
2011-07-31 07:03:02 UTC (rev 38874)
@@ -33,7 +33,7 @@
 EigenSolver::EigenSolver(int dimension)
 {
        matrix_dimension  = dimension;
-    sparse_matrix     = SparseMatrix<double> (dimension);
+       sparse_matrix     = SparseMatrix<double> (dimension);
        
 }
 

Modified: branches/soc-2011-avocado/blender/intern/autoseam/EigenSolver.h
===================================================================
--- branches/soc-2011-avocado/blender/intern/autoseam/EigenSolver.h     
2011-07-31 06:38:23 UTC (rev 38873)
+++ branches/soc-2011-avocado/blender/intern/autoseam/EigenSolver.h     
2011-07-31 07:03:02 UTC (rev 38874)
@@ -40,10 +40,10 @@
                
        
        public:
-        int  num_eigen_vectors;
-        SparseMatrix<double> sparse_matrix;
+               int  num_eigen_vectors;
+               SparseMatrix<double> sparse_matrix;
                EigenSolver(int dimension);
-        virtual double * calculate_eigen_space() = 0;        // Declared it as 
pure virtual, so that subclasses must have to implement this.
+               virtual double * calculate_eigen_space() = 0;        // 
Declared it as pure virtual, so that subclasses must have to implement this.
                ~EigenSolver();
                
        

Modified: 
branches/soc-2011-avocado/blender/intern/autoseam/EigenSolverArpack.cpp
===================================================================
--- branches/soc-2011-avocado/blender/intern/autoseam/EigenSolverArpack.cpp     
2011-07-31 06:38:23 UTC (rev 38873)
+++ branches/soc-2011-avocado/blender/intern/autoseam/EigenSolverArpack.cpp     
2011-07-31 07:03:02 UTC (rev 38874)
@@ -53,30 +53,6 @@
        
 }
 
-/*int EigenSolverArpack:: mul_matrix_vector(int dimension, double *vec, double 
* result)
-{
-       int i;
-       Eigen::VectorXd output(dimension);
-       Eigen::VectorXd mul_vec(dimension);
-       
-       //printf("the dimesion passed here : %d\n The output values are: \n", 
dimension);
-       
-       for(i = 0; i < dimension; i++){
-               //printf("%lf ", *(vec + i));
-               mul_vec(i) = *(vec + i);
-       }
-       
-       output = matrix * mul_vec;
-       
-       //pack the values into result
-       for(i = 0; i < dimension; i++){
-               //printf("%lf ", output(i));
-               *(result + i) = output(i);
-       }
-       
-       return 0;
-       
-}*/
 
 
 double * EigenSolverArpack:: calculate_eigen_space()
@@ -200,7 +176,7 @@
                        //perform matrix-vector multiplication
                        //av_(&nx, &workd[ipntr[0] - 1], &workd[ipntr[1] - 1]);
                        //mul_matrix_vector(n, &workd[ipntr[0] - 1], 
&workd[ipntr[1] - 1]);
-            sparse_matrix.mul_matrix_vector(n, &workd[ipntr[0] - 1], 
&workd[ipntr[1] - 1]);
+                       sparse_matrix.mul_matrix_vector(n, &workd[ipntr[0] - 
1], &workd[ipntr[1] - 1]);
                        //goto L10;
                }
                else{

Modified: branches/soc-2011-avocado/blender/intern/autoseam/SparseMatrix.h
===================================================================
--- branches/soc-2011-avocado/blender/intern/autoseam/SparseMatrix.h    
2011-07-31 06:38:23 UTC (rev 38873)
+++ branches/soc-2011-avocado/blender/intern/autoseam/SparseMatrix.h    
2011-07-31 07:03:02 UTC (rev 38874)
@@ -1,3 +1,32 @@
+/* $Id: SparseMatrix.h 38873 2011-07-31 06:38:23Z shuvro $ 
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2011 by Shuvro Sarker.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Shuvro Sarker
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+
 #ifndef _SPARSE_MATRIX_H
 #define        _SPARSE_MATRIX_H
 
@@ -15,98 +44,98 @@
 class SparseMatrix
 {
 public:
-    typedef std::map<size_t, std::map<size_t , T> > mat_t;
-    typedef typename mat_t::iterator row_iter;
-    typedef std::map<size_t, T> col_t;
-    typedef typename col_t::iterator col_iter;
-    
-    SparseMatrix(){};
-    SparseMatrix(size_t i){ m=i; n=i; }
-    SparseMatrix(size_t i, size_t j){ m=i; n=j; }
+       typedef std::map<size_t, std::map<size_t , T> > mat_t;
+       typedef typename mat_t::iterator row_iter;
+       typedef std::map<size_t, T> col_t;
+       typedef typename col_t::iterator col_iter;
+       
+       SparseMatrix(){};
+       SparseMatrix(size_t i){ m=i; n=i; }
+       SparseMatrix(size_t i, size_t j){ m=i; n=j; }
 
-    inline
-    T& operator()(size_t i, size_t j)
-    {
-        if(i>=m || j>=n) throw;
-        return mat[i][j];
-    }
-    inline
-    T operator()(size_t i, size_t j) const
-    {
-        if(i>=m || j>=n) throw;
-        return mat[i][j];
-    }
+       inline
+       T& operator()(size_t i, size_t j)
+       {
+               if(i>=m || j>=n) throw;
+               return mat[i][j];
+       }
+       inline
+       T operator()(size_t i, size_t j) const
+       {
+               if(i>=m || j>=n) throw;
+               return mat[i][j];
+       }
 
-    /**
-     * Multiplies vector x with matrix m and returns
-     * the result as a vector.
-     */
-    std::vector<T> operator*(const std::vector<T>& x)
-    {  
-        if(this->m != x.size()) throw;
-        
-        std::vector<T> y(this->m);
-        T sum;
-        
-        row_iter ii;
-        col_iter jj;
-        
-        for(ii=this->mat.begin(); ii!=this->mat.end(); ii++){
-            sum=0;
-            for(jj=(*ii).second.begin(); jj!=(*ii).second.end(); jj++){
-                sum += (*jj).second * x[(*jj).first];
-            }
-            y[(*ii).first]=sum;
-        }
-        
-        return y;
-    }
-    
-    /**
-     * Multiplies input_vector of length dimension with matrix m and stores
-     * it in result. Both the input_vector and the result need to be a valid
-     * pointer of type T
-     */
-    void mul_matrix_vector(int dimension, T *input_vector, T * result)
-    {
-        if(this->m != dimension) throw;
-        
-        T sum;
-        
-        row_iter ii;
-        col_iter jj;
-        
-        for(ii=this->mat.begin(); ii!=this->mat.end(); ii++){
-            sum=0;
-            for(jj=(*ii).second.begin(); jj!=(*ii).second.end(); jj++){
-                sum += (*jj).second *  input_vector[(*jj).first];
-            }
-            result[(*ii).first]=sum;
-        }
-    
-    }
+       /**
+        * Multiplies vector x with matrix m and returns
+        * the result as a vector.
+        */
+       std::vector<T> operator*(const std::vector<T>& x)
+       {  
+               if(this->m != x.size()) throw;
+               
+               std::vector<T> y(this->m);
+               T sum;
+               
+               row_iter ii;
+               col_iter jj;
+               
+               for(ii=this->mat.begin(); ii!=this->mat.end(); ii++){
+                       sum=0;
+                       for(jj=(*ii).second.begin(); jj!=(*ii).second.end(); 
jj++){
+                               sum += (*jj).second * x[(*jj).first];
+                       }
+                       y[(*ii).first]=sum;
+               }
+               
+               return y;
+       }
+       
+       /**
+        * Multiplies input_vector of length dimension with matrix m and stores
+        * it in result. Both the input_vector and the result need to be a valid
+        * pointer of type T
+        */
+       void mul_matrix_vector(int dimension, T *input_vector, T * result)
+       {
+               if(this->m != dimension) throw;
+               
+               T sum;
+               
+               row_iter ii;
+               col_iter jj;
+               
+               for(ii=this->mat.begin(); ii!=this->mat.end(); ii++){
+                       sum=0;
+                       for(jj=(*ii).second.begin(); jj!=(*ii).second.end(); 
jj++){

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to