getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] (no subject)


From: Markus Bürg
Subject: [Getfem-commits] (no subject)
Date: Thu, 23 May 2019 10:24:01 -0400 (EDT)

branch: mb-Use_rtree_in_poly_composite
commit 180e774202fa78a21f26e225217f41f8f4404c98
Author: mb <address@hidden>
Date:   Thu May 23 16:20:56 2019 +0200

    Make functions const such that they can be called in parallel.
---
 src/bgeot_rtree.cc                              | 42 ++++++++++++++-----------
 src/getfem/bgeot_rtree.h                        | 16 +++++-----
 src/getfem_generic_assembly_interpolation.cc    |  1 +
 src/getfem_interpolation_on_deformed_domains.cc |  1 +
 4 files changed, 33 insertions(+), 27 deletions(-)

diff --git a/src/bgeot_rtree.cc b/src/bgeot_rtree.cc
index 8d57e30..747ed30 100644
--- a/src/bgeot_rtree.cc
+++ b/src/bgeot_rtree.cc
@@ -196,45 +196,49 @@ namespace bgeot {
 
   void rtree::find_intersecting_boxes(const base_node& bmin,
                                       const base_node& bmax,
-                                      pbox_set& boxlst) {
-    boxlst.clear(); if (!root) build_tree();
-    if (root) 
find_matching_boxes_(root.get(),boxlst,intersection_p(bmin,bmax));
+                                      pbox_set& boxlst) const {
+    boxlst.clear();
+    GMM_ASSERT1(root, "Boxtree not initialised.");
+    find_matching_boxes_(root.get(),boxlst,intersection_p(bmin,bmax));
   }
 
   void rtree::find_containing_boxes(const base_node& bmin,
-                                    const base_node& bmax, pbox_set& boxlst) {
-    boxlst.clear(); if (!root) build_tree();
-    if (root) find_matching_boxes_(root.get(), boxlst, contains_p(bmin,bmax));
+                                    const base_node& bmax, pbox_set& boxlst) 
const {
+    boxlst.clear();
+    GMM_ASSERT1(root, "Boxtree not initialised.");
+    find_matching_boxes_(root.get(), boxlst, contains_p(bmin,bmax));
   }
 
   void rtree::find_contained_boxes(const base_node& bmin,
-                                   const base_node& bmax, pbox_set& boxlst) {
-    boxlst.clear(); if (!root) build_tree();
-    if (root) find_matching_boxes_(root.get(), boxlst, contained_p(bmin,bmax));
+                                   const base_node& bmax, pbox_set& boxlst) 
const {
+    boxlst.clear();
+    GMM_ASSERT1(root, "Boxtree not initialised.");
+    find_matching_boxes_(root.get(), boxlst, contained_p(bmin,bmax));
   }
 
-  void rtree::find_boxes_at_point(const base_node& P, pbox_set& boxlst) {
-    boxlst.clear(); if (!root) build_tree();
+  void rtree::find_boxes_at_point(const base_node& P, pbox_set& boxlst) const {
+    boxlst.clear();
     GMM_ASSERT1(root, "Boxtree not initialised.");
     find_matching_boxes_(root.get(), boxlst, has_point_p(P, EPS));
   }
 
   void rtree::find_line_intersecting_boxes(const base_node& org,
                                            const base_small_vector& dirv,
-                                           pbox_set& boxlst) {
-    boxlst.clear(); if (!root) build_tree();
-    if (root) find_matching_boxes_(root.get(),boxlst,intersect_line(org, 
dirv));
+                                           pbox_set& boxlst) const {
+    boxlst.clear();
+    GMM_ASSERT1(root, "Boxtree not initialised.");
+    find_matching_boxes_(root.get(),boxlst,intersect_line(org, dirv));
   }
 
   void rtree::find_line_intersecting_boxes(const base_node& org,
                                            const base_small_vector& dirv,
                                            const base_node& bmin,
                                            const base_node& bmax,
-                                           pbox_set& boxlst) {
-    boxlst.clear(); if (!root) build_tree();
-    if (root)
-      find_matching_boxes_(root.get(), boxlst,
-                           intersect_line_and_box(org, dirv, bmin, bmax));
+                                           pbox_set& boxlst) const {
+    boxlst.clear();
+    GMM_ASSERT1(root, "Boxtree not initialised.");
+    find_matching_boxes_(root.get(), boxlst,
+                         intersect_line_and_box(org, dirv, bmin, bmax));
   }
 
   /*
diff --git a/src/getfem/bgeot_rtree.h b/src/getfem/bgeot_rtree.h
index 48a5b5e..eac890a 100644
--- a/src/getfem/bgeot_rtree.h
+++ b/src/getfem/bgeot_rtree.h
@@ -88,20 +88,20 @@ namespace bgeot {
     void clear() { root = std::unique_ptr<rtree_elt_base>(); boxes.clear(); }
 
     void find_intersecting_boxes(const base_node& bmin, const base_node& bmax,
-                                 pbox_set& boxlst);
+                                 pbox_set& boxlst) const;
     void find_containing_boxes(const base_node& bmin, const base_node& bmax,
-                               pbox_set& boxlst);
+                               pbox_set& boxlst) const;
     void find_contained_boxes(const base_node& bmin, const base_node& bmax,
-                              pbox_set& boxlst);
-    void find_boxes_at_point(const base_node& P, pbox_set& boxlst);
+                              pbox_set& boxlst) const;
+    void find_boxes_at_point(const base_node& P, pbox_set& boxlst) const;
     void find_line_intersecting_boxes(const base_node& org,
                                       const base_small_vector& dirv,
-                                      pbox_set& boxlst);
+                                      pbox_set& boxlst) const;
     void find_line_intersecting_boxes(const base_node& org,
                                       const base_small_vector& dirv,
                                       const base_node& bmin,
                                       const base_node& bmax,
-                                      pbox_set& boxlst);
+                                      pbox_set& boxlst) const;
 
     void find_intersecting_boxes(const base_node& bmin, const base_node& bmax,
                                  std::vector<size_type>& idvec) {
@@ -122,7 +122,7 @@ namespace bgeot {
       find_contained_boxes(bmin, bmax, bs);
       pbox_set_to_idvec(bs, idvec);
     }
-    void find_boxes_at_point(const base_node& P, std::vector<size_type>& idvec)
+    void find_boxes_at_point(const base_node& P, std::vector<size_type>& 
idvec) const
     { pbox_set bs; find_boxes_at_point(P, bs);  pbox_set_to_idvec(bs, idvec); }
     void find_line_intersecting_boxes(const base_node& org,
                                       const base_small_vector& dirv,
@@ -144,7 +144,7 @@ namespace bgeot {
     void dump();
     void build_tree();
   private:
-    static void pbox_set_to_idvec(pbox_set bs, std::vector<size_type>& idvec) {
+    void pbox_set_to_idvec(pbox_set bs, std::vector<size_type>& idvec) const {
       idvec.reserve(bs.size()); idvec.resize(0);
       for (pbox_set::const_iterator it=bs.begin(); it != bs.end(); ++it)
         idvec.push_back((*it)->id);
diff --git a/src/getfem_generic_assembly_interpolation.cc 
b/src/getfem_generic_assembly_interpolation.cc
index 3a4ce15..dedaa01 100644
--- a/src/getfem_generic_assembly_interpolation.cc
+++ b/src/getfem_generic_assembly_interpolation.cc
@@ -613,6 +613,7 @@ namespace getfem {
 
           element_boxes.add_box(bmin, bmax, cv);
         }
+        element_boxes.build_tree();
         recompute_elt_boxes = false;
       }
     }
diff --git a/src/getfem_interpolation_on_deformed_domains.cc 
b/src/getfem_interpolation_on_deformed_domains.cc
index 2224184..c6f8610 100644
--- a/src/getfem_interpolation_on_deformed_domains.cc
+++ b/src/getfem_interpolation_on_deformed_domains.cc
@@ -157,6 +157,7 @@ class  interpolate_transformation_on_deformed_domains
       element_boxes.add_box(bmin, bmax, box_to_convex.size());
       box_to_convex.push_back(cv);
     }
+    element_boxes.build_tree();
   }
 
   fem_interpolation_context deformed_master_context(size_type cv) const



reply via email to

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