[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] (no subject)
From: |
Yves Renard |
Subject: |
[Getfem-commits] (no subject) |
Date: |
Sun, 1 Dec 2019 10:01:10 -0500 (EST) |
branch: master
commit ce49908df2aed128aede0457de296d03631e145f
Author: Yves Renard <address@hidden>
Date: Sun Dec 1 15:51:31 2019 +0100
fix a small problem with generic assembly optimization
---
src/getfem_generic_assembly_compile_and_exec.cc | 8 ++++----
src/getfem_generic_assembly_semantic.cc | 9 +++------
src/getfem_generic_assembly_tree.cc | 11 +++++++----
3 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/src/getfem_generic_assembly_compile_and_exec.cc
b/src/getfem_generic_assembly_compile_and_exec.cc
index bf18df4..e53f9c8 100644
--- a/src/getfem_generic_assembly_compile_and_exec.cc
+++ b/src/getfem_generic_assembly_compile_and_exec.cc
@@ -4885,11 +4885,11 @@ namespace getfem {
}
return;
}
+ cout << "sub_tree_are_equal = " << int(sub_tree_are_equal(pnode,
pnode1, workspace, 1)) << endl;
std::stringstream ss;
- ss << "Detected wrong equivalent nodes: ";
- ga_print_node(pnode, ss);
- ss << " and "; ga_print_node(pnode1, ss);
- ss << " (no problem, but hash values could be adapted) " << endl;
+ ss << "Detected wrong equivalent nodes: \n";
+ ga_print_node(pnode, ss); ss << "\n and \n"; ga_print_node(pnode1, ss);
+ ss << "\nNo problem, but hash values could be adapted." << endl;
GMM_TRACE2(ss.str());
}
}
diff --git a/src/getfem_generic_assembly_semantic.cc
b/src/getfem_generic_assembly_semantic.cc
index b211575..595afe9 100644
--- a/src/getfem_generic_assembly_semantic.cc
+++ b/src/getfem_generic_assembly_semantic.cc
@@ -296,7 +296,7 @@ namespace getfem {
static scalar_type ga_hash_code(const base_tensor &t) {
scalar_type c(0);
for (size_type i = 0; i < t.size(); ++i)
- c += sin(M_E+t[i]+M_E*M_E*scalar_type(i+1))+scalar_type(i+1)*M_PI;
+ c += sin((1.+M_E)*t[i]+M_E*M_E*scalar_type(i+1))+scalar_type(i+1)*M_PI;
return c;
}
@@ -2607,15 +2607,12 @@ namespace getfem {
default:GMM_ASSERT1(false, "Unexpected node type " << pnode->node_type
<< " in semantic analysis. Internal error.");
}
- // cout << " begin hash code = " << pnode->hash_value << endl;
pnode->hash_value = ga_hash_code(pnode);
- // cout << "node_type = " << pnode->node_type << " op_type = "
- // << pnode->op_type << " proper hash code = " << pnode->hash_value;
for (size_type i = 0; i < pnode->children.size(); ++i) {
pnode->hash_value += (pnode->children[i]->hash_value)
- * 1.0101 * (pnode->symmetric_op ? scalar_type(1) : scalar_type(i+1));
+ * 1.0101*(pnode->symmetric_op ? scalar_type(1) : scalar_type(1+i));
}
- // cout << " final hash code = " << pnode->hash_value << endl;
+ pnode->hash_value = sin(1.2003*pnode->hash_value);
}
diff --git a/src/getfem_generic_assembly_tree.cc
b/src/getfem_generic_assembly_tree.cc
index a9d1364..6978d90 100644
--- a/src/getfem_generic_assembly_tree.cc
+++ b/src/getfem_generic_assembly_tree.cc
@@ -480,11 +480,11 @@ namespace getfem {
bool sub_tree_are_equal
(const pga_tree_node pnode1, const pga_tree_node pnode2,
const ga_workspace &workspace, int version) {
+
size_type ntype1 = pnode1->node_type;
if (ntype1 == GA_NODE_ZERO) ntype1 = GA_NODE_CONSTANT;
size_type ntype2 = pnode2->node_type;
if (ntype2 == GA_NODE_ZERO) ntype2 = GA_NODE_CONSTANT;
-
if (ntype1 != ntype2) return false;
if (pnode1->children.size() != pnode2->children.size()) return false;
@@ -538,9 +538,12 @@ namespace getfem {
return false;
break;
case GA_NODE_C_MATRIX:
- if (pnode1->t.sizes().size() != pnode2->t.sizes().size()) return false;
- for (size_type i = 0; i < pnode1->t.sizes().size(); ++i)
- if (pnode1->t.sizes()[i] != pnode2->t.sizes()[i]) return false;
+ if (pnode1->children.size() != pnode2->children.size()) return false;
+ if (pnode1->nb_test_functions() != pnode2->nb_test_functions())
+ return false;
+ // if (pnode1->t.sizes().size() != pnode2->t.sizes().size()) return
false;
+ // for (size_type i=nb_test_functions(); i<pnode1->t.sizes().size(); ++i)
+ // if (pnode1->t.sizes()[i] != pnode2->t.sizes()[i]) return false;
if (pnode1->nbc1 != pnode2->nbc1) return false;
break;
case GA_NODE_INTERPOLATE_FILTER: