getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r5071 - in /trunk/getfem: interface/src/ src/ src/getfe


From: logari81
Subject: [Getfem-commits] r5071 - in /trunk/getfem: interface/src/ src/ src/getfem/
Date: Tue, 18 Aug 2015 08:35:32 -0000

Author: logari81
Date: Tue Aug 18 10:35:32 2015
New Revision: 5071

URL: http://svn.gna.org/viewcvs/getfem?rev=5071&view=rev
Log:
let the user increase the tolerance for detecting overlapping points at merging 
of meshes

Modified:
    trunk/getfem/interface/src/gf_mesh_set.cc
    trunk/getfem/src/bgeot_node_tab.cc
    trunk/getfem/src/getfem/bgeot_mesh.h
    trunk/getfem/src/getfem/bgeot_node_tab.h
    trunk/getfem/src/getfem/getfem_mesh.h

Modified: trunk/getfem/interface/src/gf_mesh_set.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_mesh_set.cc?rev=5071&r1=5070&r2=5071&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_mesh_set.cc   (original)
+++ trunk/getfem/interface/src/gf_mesh_set.cc   Tue Aug 18 10:35:32 2015
@@ -355,16 +355,20 @@
        );
 
 
-    /address@hidden ('merge', @tmesh m2)
+    /address@hidden ('merge', @tmesh m2[, @scalar  tol])
       Merge with the @tmesh `m2`.
       
-      Overlapping points won't be duplicated. If `m2` is a @tmf object,
-      its linked mesh will be address@hidden/
-    sub_command
-      ("merge", 1, 1, 0, 0,
+      Overlapping points, within a tolerance radius `tol`, will not be
+      duplicated. If `m2` is a @tmf object, its linked mesh will be 
address@hidden/
+    sub_command
+      ("merge", 1, 2, 0, 0,
        const getfem::mesh *pmesh2 = in.pop().to_const_mesh();
+       scalar_type tol(0);
+       if (in.remaining()) tol = in.pop().to_scalar();
        for (dal::bv_visitor cv(pmesh2->convex_index()); !cv.finished(); ++cv)
-         pmesh->add_convex_by_points(pmesh2->trans_of_convex(cv), 
pmesh2->points_of_convex(cv).begin());
+         pmesh->add_convex_by_points(pmesh2->trans_of_convex(cv),
+                                     pmesh2->points_of_convex(cv).begin(),
+                                     tol);
        );
 
 

Modified: trunk/getfem/src/bgeot_node_tab.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/bgeot_node_tab.cc?rev=5071&r1=5070&r2=5071&view=diff
==============================================================================
--- trunk/getfem/src/bgeot_node_tab.cc  (original)
+++ trunk/getfem/src/bgeot_node_tab.cc  Tue Aug 18 10:35:32 2015
@@ -92,7 +92,8 @@
     eps = max_radius * prec_factor;
   }
 
-  size_type node_tab::add_node(const base_node &pt) {
+  size_type node_tab::add_node(const base_node &pt,
+                               const scalar_type radius) {
     scalar_type npt = gmm::vect_norm2(pt);
     max_radius = std::max(max_radius, npt);
     eps = max_radius * prec_factor;
@@ -105,7 +106,7 @@
     }
     else {
       GMM_ASSERT1(dim_ == pt.size(), "Nodes should have the same dimension");
-      id = search_node(pt);
+      id = search_node(pt, radius);
       if (id == size_type(-1)) {
         id = dal::dynamic_tas<base_node>::add(pt);
         for (size_type i = 0; i < sorters.size(); ++i) {

Modified: trunk/getfem/src/getfem/bgeot_mesh.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/bgeot_mesh.h?rev=5071&r1=5070&r2=5071&view=diff
==============================================================================
--- trunk/getfem/src/getfem/bgeot_mesh.h        (original)
+++ trunk/getfem/src/getfem/bgeot_mesh.h        Tue Aug 18 10:35:32 2015
@@ -87,7 +87,10 @@
       return ref_mesh_pt_ct(pts.begin(), rct.begin(), rct.end());
     } 
 
-    size_type add_point(const base_node &pt) { return pts.add_node(pt); }
+    size_type add_point(const base_node &pt,
+                        const scalar_type tol=scalar_type(0)) {
+      return pts.add_node(pt, tol);
+    }
 
     template<class ITER>
     size_type add_convex(bgeot::pgeometric_trans pgt, ITER ipts) { 

Modified: trunk/getfem/src/getfem/bgeot_node_tab.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/bgeot_node_tab.h?rev=5071&r1=5070&r2=5071&view=diff
==============================================================================
--- trunk/getfem/src/getfem/bgeot_node_tab.h    (original)
+++ trunk/getfem/src/getfem/bgeot_node_tab.h    Tue Aug 18 10:35:32 2015
@@ -83,7 +83,7 @@
     /** Add a point to the array or identify it with a very close existing
        point.
     */
-    size_type add_node(const base_node &pt);
+    size_type add_node(const base_node &pt, const scalar_type radius=0);
     size_type add(const base_node &pt) { return add_node(pt); }
     void sup_node(size_type i);
     void sup(size_type i) { sup_node(i); }

Modified: trunk/getfem/src/getfem/getfem_mesh.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_mesh.h?rev=5071&r1=5070&r2=5071&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_mesh.h       (original)
+++ trunk/getfem/src/getfem/getfem_mesh.h       Tue Aug 18 10:35:32 2015
@@ -216,7 +216,10 @@
         already existing point.
         @param pt the point coordinates.
     */
-    size_type add_point(const base_node &pt) { return pts.add_node(pt); }
+    size_type add_point(const base_node &pt,
+                        const scalar_type tol=scalar_type(0)) {
+      return pts.add_node(pt, tol);
+    }
     //                        scalar_type characteristic_size = 
scalar_type(1));
 
     /// Give the number of geometrical nodes in the mesh.
@@ -278,7 +281,8 @@
         @return the number of the new convex.
     */
     template<class ITER>
-    size_type add_convex_by_points(bgeot::pgeometric_trans pgt, ITER ipts);
+    size_type add_convex_by_points(bgeot::pgeometric_trans pgt, ITER ipts,
+                                   const scalar_type tol=scalar_type(0));
 
     /** Add a simplex to the mesh, given its dimension and point numbers.
      */
@@ -579,11 +583,11 @@
 
  template<class ITER>
     size_type mesh::add_convex_by_points(bgeot::pgeometric_trans pgt,
-                                                                   ITER ipts)
+                                         ITER ipts, const scalar_type tol)
   {
     short_type nb = short_type(pgt->nb_points());
     std::vector<size_type> ind(nb);
-    for (short_type i = 0; i < nb; ++ipts, ++i) ind[i] = add_point(*ipts);
+    for (short_type i = 0; i < nb; ++ipts, ++i) ind[i] = add_point(*ipts, tol);
     return add_convex(pgt, ind.begin());
   }
 




reply via email to

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