[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r5375 - in /trunk/getfem: contrib/opt_assembly/ src/get
From: |
Yves . Renard |
Subject: |
[Getfem-commits] r5375 - in /trunk/getfem: contrib/opt_assembly/ src/getfem/ src/gmm/ |
Date: |
Tue, 27 Sep 2016 10:48:57 -0000 |
Author: renard
Date: Tue Sep 27 12:48:56 2016
New Revision: 5375
URL: http://svn.gna.org/viewcvs/getfem?rev=5375&view=rev
Log:
small fixes
Modified:
trunk/getfem/contrib/opt_assembly/opt_assembly.cc
trunk/getfem/src/getfem/dal_tree_sorted.h
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=5375&r1=5374&r2=5375&view=diff
==============================================================================
--- trunk/getfem/contrib/opt_assembly/opt_assembly.cc (original)
+++ trunk/getfem/contrib/opt_assembly/opt_assembly.cc Tue Sep 27 12:48:56 2016
@@ -134,9 +134,7 @@
cout << "Elapsed time for new assembly " << ch.elapsed() << endl; \
getfem::model_real_sparse_matrix K(ndof1, ndof2), K2(ndof1, ndof2); \
ch.init(); ch.tic(); old_asm; ch.toc(); \
- cout << "begin copy" << endl;
\
gmm::copy(K, K2); \
- cout << "end copy" << endl; \
cout << "Elapsed time for old assembly " << ch.elapsed() << endl; \
gmm::add(gmm::scaled(gmm::sub_matrix(workspace.assembled_matrix(), \
I1_, I2_), scalar_type(-1)), K); \
@@ -423,24 +421,6 @@
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, 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;
-
- cout << "MM = " << MM << endl;
-
- gmm::row_matrix<gmm::dsvector<double>> MM2(15, 200000);
- gmm::copy(MM, MM2);
-
- cout << "MM2 = " << MM2 << endl;
-
// Mesured times for new assembly, old one, alterantive new assembly,
// storage estimate part for the new assembly, global assembly part,
@@ -471,7 +451,7 @@
// Mass : 6.90 | 1.60 | 0.65 | 1.77 | 0.01 | .005 | 0.21 |
// Laplacian : 0.90 | 0.89 | 0.32 | 0.43 | 0.01 | .005 | 0.07 |
// Homogeneous elas : 11.1 | 6.65 | 0.90 | 1.69 | 0.01 | .005 | 2.50 |
- // Non-homogeneous elast: 11.0 | 49.1 | 0.55 | 1.48 | 0.01 | .005 | 2.45 |
+ // Non-homogeneous elast: 11.0 | 49.1 | 0.95 | 1.48 | 0.01 | .005 | 2.45 |
// Conclusions :
// Desactivation of debug test has no sensible effect.
Modified: trunk/getfem/src/getfem/dal_tree_sorted.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/dal_tree_sorted.h?rev=5375&r1=5374&r2=5375&view=diff
==============================================================================
--- trunk/getfem/src/getfem/dal_tree_sorted.h (original)
+++ trunk/getfem/src/getfem/dal_tree_sorted.h Tue Sep 27 12:48:56 2016
@@ -50,7 +50,7 @@
/* d'insertion ou de suppression. */
/* ********************************************************************* */
- static const size_t DEPTHMAX__ = size_t(CHAR_BIT*sizeof(size_t)*3) / 2;
+ static const size_t DEPTHMAX__ = 64;
static const size_t ST_NIL = size_t(-1);
template<typename T, typename COMP = gmm::less<T>, int pks = 5>
@@ -83,7 +83,7 @@
inline size_type father(void) const
{ return (depth<=1) ? ST_NIL : path[depth-2];}
inline size_type index_(void) const
- { return path[size_t(depth-1)]; }
+ { return path[(depth-1) & 63]; }
inline short_type direction(void) const
{ return (depth==0) ? 0 : dir[depth-1];}
inline void up(void) { if (depth > 0) depth--; }
Modified: trunk/getfem/src/gmm/gmm_blas.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/gmm/gmm_blas.h?rev=5375&r1=5374&r2=5375&view=diff
==============================================================================
--- trunk/getfem/src/gmm/gmm_blas.h (original)
+++ trunk/getfem/src/gmm/gmm_blas.h Tue Sep 27 12:48:56 2016
@@ -950,18 +950,14 @@
void copy_mat_by_row(const L1& l1, L2& l2) {
size_type nbr = mat_nrows(l1);
for (size_type i = 0; i < nbr; ++i)
- copy_vect(mat_const_row(l1, i), mat_row(l2, i),
- typename linalg_traits<L1>::storage_type(),
- typename linalg_traits<L2>::storage_type());
+ copy(mat_const_row(l1, i), mat_row(l2, i));
}
template <typename L1, typename L2>
void copy_mat_by_col(const L1 &l1, L2 &l2) {
size_type nbc = mat_ncols(l1);
for (size_type i = 0; i < nbc; ++i) {
- copy_vect(mat_const_col(l1, i), mat_col(l2, i),
- typename linalg_traits<L1>::storage_type(),
- typename linalg_traits<L2>::storage_type());
+ copy(mat_const_col(l1, i), mat_col(l2, i));
}
}
Modified: trunk/getfem/src/gmm/gmm_vector.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/gmm/gmm_vector.h?rev=5375&r1=5374&r2=5375&view=diff
==============================================================================
--- trunk/getfem/src/gmm/gmm_vector.h (original)
+++ trunk/getfem/src/gmm/gmm_vector.h Tue Sep 27 12:48:56 2016
@@ -415,10 +415,11 @@
void rec_clean_i(void_pointer p, size_type my_depth, size_type my_mask,
size_type i, size_type base) {
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)
- rec_clean_i(((void_pointer *)(p))[k], my_depth-1, (my_mask >> 4),
- i, base + k*(mask+1));
+ rec_clean_i(((void_pointer *)(p))[k], my_depth-1, my_mask,
+ i, base + k*(my_mask+1));
} else {
for (size_type k = 0; k < 16; ++k)
if (base+k > i) ((T *)(p))[k] = T(0);
@@ -440,7 +441,7 @@
}
void copy_rec(void_pointer &p, const_void_pointer q, size_type my_depth) {
- if (depth) {
+ if (my_depth) {
p = new void_pointer[16];
std::memset(p, 0, 16*sizeof(void_pointer));
for (size_type l = 0; l < 16; ++l)
@@ -461,8 +462,6 @@
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);
@@ -506,23 +505,25 @@
public:
void clean(double eps) { if (root_ptr) rec_clean(root_ptr, depth); }
void resize(size_type n_) {
- n = n_;
- if (n_ < n) { // Depth unchanged (a choice)
- if (root_ptr) rec_clean_i(root_ptr, depth, mask, n_, 0);
- } else {
- // may change the depth (add some levels)
- size_type my_depth = 0, my_shift = 0, my_mask = 1; if (n_) --n_;
- while (n_) { n_ /= 16; ++my_depth; my_shift += 4; my_mask *= 16; }
- my_mask--; if (my_shift) my_shift -= 4; if (my_depth) --my_depth;
- if (my_depth > depth) {
- if (root_ptr) {
- for (size_type k = depth; k < my_depth; ++k) {
- void_pointer *q = new void_pointer [16];
- std::memset(q, 0, 16*sizeof(void_pointer));
- q[0] = root_ptr; root_ptr = q;
+ if (n_ != n) {
+ n = n_;
+ if (n_ < n) { // Depth unchanged (a choice)
+ if (root_ptr) rec_clean_i(root_ptr, depth, mask, n_, 0);
+ } else {
+ // may change the depth (add some levels)
+ size_type my_depth = 0, my_shift = 0, my_mask = 1; if (n_) --n_;
+ while (n_) { n_ /= 16; ++my_depth; my_shift += 4; my_mask *= 16; }
+ my_mask--; if (my_shift) my_shift -= 4; if (my_depth) --my_depth;
+ if (my_depth > depth || depth == 0) {
+ if (root_ptr) {
+ for (size_type k = depth; k < my_depth; ++k) {
+ void_pointer *q = new void_pointer [16];
+ std::memset(q, 0, 16*sizeof(void_pointer));
+ q[0] = root_ptr; root_ptr = q;
+ }
}
+ mask = my_mask; depth = my_depth; shift = my_shift;
}
- mask = my_mask; depth = my_depth; shift = my_shift;
}
}
}
@@ -541,17 +542,23 @@
}
iterator begin(void) {
- iterator it(*this); it.i = 0; it.p = const_cast<T *>(read_access(0));
- if (!(it.p) || *(it.p) == T(0))
- next_pos(*(const_cast<const_pointer *>(&(it.p))), it.i);
+ iterator it(*this);
+ if (n && root_ptr) {
+ it.i = 0; it.p = const_cast<T *>(read_access(0));
+ if (!(it.p) || *(it.p) == T(0))
+ next_pos(*(const_cast<const_pointer *>(&(it.p))), it.i);
+ }
return it;
}
iterator end(void) { return iterator(*this); }
const_iterator begin(void) const {
- const_iterator it(*this); it.i = 0; it.p = read_access(0);
- if (!(it.p) || *(it.p) == T(0)) next_pos(it.p, it.i);
+ const_iterator it(*this);
+ if (n && root_ptr) {
+ it.i = 0; it.p = read_access(0);
+ if (!(it.p) || *(it.p) == T(0)) next_pos(it.p, it.i);
+ }
return it;
}
@@ -581,7 +588,7 @@
}
/* Constructors */
- dsvector(const dsvector<T> &v) { root_ptr = 0; copy(v); }
+ dsvector(const dsvector<T> &v) { init(0); copy(v); }
dsvector<T> &operator =(const dsvector<T> &v) { copy(v); return *this; }
explicit dsvector(size_type l){ init(l); }
dsvector(void) { init(0); }
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5375 - in /trunk/getfem: contrib/opt_assembly/ src/getfem/ src/gmm/,
Yves . Renard <=