getfem-commits
[Top][All Lists]
Advanced

[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:



reply via email to

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