getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] r5374 - in /trunk/getfem: contrib/opt_assembly/opt_asse


From: Yves . Renard
Subject: [Getfem-commits] r5374 - in /trunk/getfem: contrib/opt_assembly/opt_assembly.cc src/gmm/gmm_blas.h src/gmm/gmm_vector.h
Date: Mon, 26 Sep 2016 19:16:42 -0000

Author: renard
Date: Mon Sep 26 21:16:41 2016
New Revision: 5374

URL: http://svn.gna.org/viewcvs/getfem?rev=5374&view=rev
Log:
small fixes

Modified:
    trunk/getfem/contrib/opt_assembly/opt_assembly.cc
    trunk/getfem/src/gmm/gmm_blas.h
    trunk/getfem/src/gmm/gmm_vector.h

Modified: trunk/getfem/contrib/opt_assembly/opt_assembly.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/opt_assembly/opt_assembly.cc?rev=5374&r1=5373&r2=5374&view=diff
==============================================================================
--- trunk/getfem/contrib/opt_assembly/opt_assembly.cc   (original)
+++ trunk/getfem/contrib/opt_assembly/opt_assembly.cc   Mon Sep 26 21:16:41 2016
@@ -424,21 +424,19 @@
   GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
   FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
 
-  gmm::row_matrix<gmm::dsvector<double>> MM(15, 15);
+  gmm::row_matrix<gmm::dsvector<double>> MM(15, 200000);
   MM(1, 1) = 5.; MM(1, 1) += 5.;
   MM(1, 3) = 2.;
   MM(2, 2) += 5.; MM(2, 2) -= 4.999;
+  MM(2, 150000) = 6.;
 
   cout << "MM(1, 1) = " << MM(1, 1) << endl;
   cout << "MM(2, 2) = " << MM(2, 2) << endl;
   cout << "nnz(MM) = " << gmm::nnz(MM) << endl;
 
-
-  gmm::resize(MM, 20, 20);
-
   cout << "MM = " << MM << endl;
 
-  gmm::row_matrix<gmm::dsvector<double>> MM2(20, 20);
+  gmm::row_matrix<gmm::dsvector<double>> MM2(15, 200000);
   gmm::copy(MM, MM2);
 
   cout << "MM2 = " << MM2 << endl;

Modified: trunk/getfem/src/gmm/gmm_blas.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/gmm/gmm_blas.h?rev=5374&r1=5373&r2=5374&view=diff
==============================================================================
--- trunk/getfem/src/gmm/gmm_blas.h     (original)
+++ trunk/getfem/src/gmm/gmm_blas.h     Mon Sep 26 21:16:41 2016
@@ -691,7 +691,7 @@
     
     std::vector<R> aux(mat_ncols(m));
     for (size_type i = 0; i < mat_nrows(m); ++i) {
-      auto row = mat_const_row(m, i);
+      typename linalg_traits<M>::const_sub_row_type row = mat_const_row(m, i);
       auto it = vect_const_begin(row), ite = vect_const_end(row);
       for (size_type k = 0; it != ite; ++it, ++k)
        aux[index_of_it(it, k, store_type())] += gmm::abs(*it);
@@ -745,7 +745,7 @@
     
     std::vector<R> aux(mat_nrows(m));
     for (size_type i = 0; i < mat_ncols(m); ++i) {
-      auto col = mat_const_col(m, i);
+      typename linalg_traits<M>::const_sub_col_type col = mat_const_col(m, i);
       auto it = vect_const_begin(col), ite = vect_const_end(col);
       for (size_type k = 0; it != ite; ++it, ++k)
        aux[index_of_it(it, k, store_type())] += gmm::abs(*it);
@@ -1156,9 +1156,13 @@
   void copy_vect(const L1& l1, L2& l2, abstract_sparse, abstract_sparse) {
     auto  it  = vect_const_begin(l1), ite = vect_const_end(l1);
     clear(l2);
-    for (; it != ite; ++it)
+    // cout << "copy " << l1 << " of size " << vect_size(l1) << " nnz = " << 
nnz(l1) << endl;
+    for (; it != ite; ++it) {
+      // cout << "*it = " << *it << endl;
+      // cout << "it.index() = " << it.index() << endl;
       if (*it != (typename linalg_traits<L1>::value_type)(0))
        l2[it.index()] = *it;
+    }
   }
   
   template <typename L1, typename L2>
@@ -1950,7 +1954,7 @@
       size_type i,j, k = mat_nrows(l1);
       
       for (i = 0; i < k; ++i) {
-       auto r1=mat_const_row(l1, i);
+       typename linalg_traits<L1>::const_sub_row_type r1=mat_const_row(l1, i);
        for (it2 = it2b, j = 0; it2 != ite; ++it2, ++j)
          l3(i,j) = vect_sp(r1, linalg_traits<L2>::col(it2));
       }
@@ -1982,7 +1986,7 @@
     clear(l3);
     size_type nn = mat_nrows(l3);
     for (size_type i = 0; i < nn; ++i) {
-      auto rl1 = mat_const_row(l1, i);
+      typename linalg_traits<L1>::const_sub_row_type rl1=mat_const_row(l1, i);
       auto it = vect_const_begin(rl1), ite = vect_const_end(rl1);
       for (; it != ite; ++it)
        add(scaled(mat_const_row(l2, it.index()), *it), mat_row(l3, i));
@@ -2024,7 +2028,7 @@
     clear(l3);
     size_type nn = mat_ncols(l3);
     for (size_type i = 0; i < nn; ++i) {
-      auto rc2 = mat_const_col(l2, i);
+      typename linalg_traits<L2>::const_sub_col_type rc2 = mat_const_col(l2, 
i);
       auto it = vect_const_begin(rc2), ite = vect_const_end(rc2);
       for (; it != ite; ++it)
        add(scaled(mat_const_col(l1, it.index()), *it), mat_col(l3, i));
@@ -2075,7 +2079,7 @@
     clear(l3);
     size_type nn = mat_ncols(l1);
     for (size_type i = 0; i < nn; ++i) {
-      auto rc1 = mat_const_col(l1, i);
+      typename linalg_traits<L1>::const_sub_col_type rc1 = mat_const_col(l1, 
i);
       auto it = vect_const_begin(rc1), ite = vect_const_end(rc1);
       for (; it != ite; ++it)
        add(scaled(mat_const_row(l2, i), *it), mat_row(l3, it.index()));
@@ -2127,7 +2131,7 @@
   bool is_symmetric(const MAT &A, magnitude_of_linalg(MAT) tol, 
                    row_major) {
     for (size_type i = 0; i < mat_nrows(A); ++i) {
-      auto row = mat_const_row(A, i);
+      typename linalg_traits<MAT>::const_sub_row_type row = mat_const_row(A, 
i);
       auto it = vect_const_begin(row), ite = vect_const_end(row);
       for (; it != ite; ++it)
        if (gmm::abs(*it - A(it.index(), i)) > tol) return false;
@@ -2139,7 +2143,7 @@
   bool is_symmetric(const MAT &A, magnitude_of_linalg(MAT) tol, 
                    col_major) {
     for (size_type i = 0; i < mat_ncols(A); ++i) {
-      auto col = mat_const_col(A, i);
+      typename linalg_traits<MAT>::const_sub_col_type col = mat_const_col(A, 
i);
       auto it = vect_const_begin(col), ite = vect_const_end(col);
       for (; it != ite; ++it)
        if (gmm::abs(*it - A(i, it.index())) > tol) return false;
@@ -2188,7 +2192,7 @@
   bool is_hermitian(const MAT &A, magnitude_of_linalg(MAT) tol, 
                    row_major) {
     for (size_type i = 0; i < mat_nrows(A); ++i) {
-      auto row = mat_const_row(A, i);
+      typename linalg_traits<MAT>::const_sub_row_type row = mat_const_row(A, 
i);
       auto it = vect_const_begin(row), ite = vect_const_end(row);
       for (; it != ite; ++it)
        if (gmm::abs(gmm::conj(*it) - A(it.index(), i)) > tol) return false;
@@ -2200,7 +2204,7 @@
   bool is_hermitian(const MAT &A, magnitude_of_linalg(MAT) tol, 
                    col_major) {
     for (size_type i = 0; i < mat_ncols(A); ++i) {
-      auto col = mat_const_col(A, i);
+      typename linalg_traits<MAT>::const_sub_col_type col = mat_const_col(A, 
i);
       auto it = vect_const_begin(col), ite = vect_const_end(col);
       for (; it != ite; ++it)
        if (gmm::abs(gmm::conj(*it) - A(i, it.index())) > tol) return false;

Modified: trunk/getfem/src/gmm/gmm_vector.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/gmm/gmm_vector.h?rev=5374&r1=5373&r2=5374&view=diff
==============================================================================
--- trunk/getfem/src/gmm/gmm_vector.h   (original)
+++ trunk/getfem/src/gmm/gmm_vector.h   Mon Sep 26 21:16:41 2016
@@ -365,7 +365,7 @@
        size_type j = (i & my_mask) >> my_shift;
        void_pointer q = ((void_pointer *)(p))[j];
        if (!q) {
-         if (k+1 == depth) {
+         if (k+1 != depth) {
            q = new void_pointer[16];
            std::memset(q, 0, 16*sizeof(void_pointer));
          } else {
@@ -417,7 +417,7 @@
       if (my_depth) {
        for (size_type k = 0; k < 16; ++k)
          if (((void_pointer *)(p))[k] && (base + (k+1)*(mask+1)) >= i)
-           rec_clean_i(((void_pointer *)(p))[k], my_depth-1, (my_mask << 4),
+           rec_clean_i(((void_pointer *)(p))[k], my_depth-1, (my_mask >> 4),
                        i, base + k*(mask+1));
       } else {
        for (size_type k = 0; k < 16; ++k)
@@ -441,8 +441,8 @@
 
     void copy_rec(void_pointer &p, const_void_pointer q, size_type my_depth) {
       if (depth) {
-       p = new void_pointer [16];
-       std::memset(root_ptr, 0, 16*sizeof(void_pointer));
+       p = new void_pointer[16];
+       std::memset(p, 0, 16*sizeof(void_pointer));
        for (size_type l = 0; l < 16; ++l)
          if (((const const_void_pointer *)(q))[l])
            copy_rec(((void_pointer *)(p))[l],
@@ -461,12 +461,15 @@
 
     void next_pos_rec(void_pointer p, size_type my_depth, size_type my_mask,
                      const_pointer &pp, size_type &i, size_type base) const {
+      // cout << "base = " << base << endl;
+      // cout << "mask+1 = " << my_mask+1 << " (mask >> 4) = " << (my_mask >> 
4) << endl;
       size_type ii = i;
       if (my_depth) {
+       my_mask = (my_mask >> 4);
        for (size_type k = 0; k < 16; ++k)
-         if (((void_pointer *)(p))[k] && (base + (k+1)*(mask+1)) >= i) {
-           next_pos_rec(((void_pointer *)(p))[k], my_depth-1, (my_mask << 4),
-                        pp, i, base + k*(mask+1));
+         if (((void_pointer *)(p))[k] && (base + (k+1)*(my_mask+1)) >= i) {
+           next_pos_rec(((void_pointer *)(p))[k], my_depth-1, my_mask,
+                        pp, i, base + k*(my_mask+1));
            if (i != size_type(-1)) return; else i = ii;
        }
        i = size_type(-1); pp = 0;
@@ -483,10 +486,11 @@
                          size_type base) const {
       size_type ii = i;
       if (my_depth) {
+       my_mask = (my_mask >> 4);
        for (size_type k = 15; k != size_type(-1); --k)
-         if (((void_pointer *)(p))[k] && ((base + k*(mask+1)) < i)) {
-           next_pos_rec(((void_pointer *)(p))[k], my_depth-1, (my_mask << 4),
-                        pp, i, base + k*(mask+1));
+         if (((void_pointer *)(p))[k] && ((base + k*(my_mask+1)) < i)) {
+           previous_pos_rec(((void_pointer *)(p))[k], my_depth-1,
+                            my_mask, pp, i, base + k*(my_mask+1));
            if (i != size_type(-1)) return; else i = ii;
        }
        i = size_type(-1); pp = 0;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]