getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] (no subject)


From: Konstantinos Poulios
Subject: [Getfem-commits] (no subject)
Date: Mon, 16 Oct 2023 09:10:06 -0400 (EDT)

branch: master
commit 88a69becf3d33fa2b55d083a76e88a5033bbaab4
Author: Konstantinos Poulios <logari81@gmail.com>
AuthorDate: Mon Oct 16 14:37:11 2023 +0200

    Whitespace changes
---
 src/getfem_mesh_im_level_set.cc | 694 ++++++++++++++++++++--------------------
 1 file changed, 347 insertions(+), 347 deletions(-)

diff --git a/src/getfem_mesh_im_level_set.cc b/src/getfem_mesh_im_level_set.cc
index 00edc831..11eae1b6 100644
--- a/src/getfem_mesh_im_level_set.cc
+++ b/src/getfem_mesh_im_level_set.cc
@@ -39,12 +39,12 @@ namespace getfem {
     mesh_im::clear();
     clear_build_methods();
     is_adapted = false;
-  }  
+  }
 
-  void mesh_im_level_set::init_with_mls(mesh_level_set &me, 
-                                       int integrate_where_,
-                                       pintegration_method reg,
-                                       pintegration_method sing) {
+  void mesh_im_level_set::init_with_mls(mesh_level_set &me,
+                                        int integrate_where_,
+                                        pintegration_method reg,
+                                        pintegration_method sing) {
     init_with_mesh(me.linked_mesh());
     cut_im.init_with_mesh(me.linked_mesh());
     mls = &me;
@@ -55,9 +55,9 @@ namespace getfem {
   }
 
   mesh_im_level_set::mesh_im_level_set(mesh_level_set &me,
-                                      int integrate_where_, 
-                                      pintegration_method reg,
-                                      pintegration_method sing) {
+                                       int integrate_where_,
+                                       pintegration_method reg,
+                                       pintegration_method sing) {
     mls = 0;
     init_with_mls(me, integrate_where_, reg, sing);
   }
@@ -66,14 +66,14 @@ namespace getfem {
   { mls = 0; is_adapted = false; }
 
 
-  pintegration_method 
+  pintegration_method
   mesh_im_level_set::int_method_of_element(size_type cv) const {
     if (!is_adapted) const_cast<mesh_im_level_set *>(this)->adapt();
-    if (cut_im.convex_index().is_in(cv)) 
-      return cut_im.int_method_of_element(cv); 
+    if (cut_im.convex_index().is_in(cv))
+      return cut_im.int_method_of_element(cv);
     else {
       if (ignored_im.is_in(cv)) //integrate_where == INTEGRATE_BOUNDARY)
-       return getfem::im_none();
+        return getfem::im_none();
 
       return mesh_im::int_method_of_element(cv);
     }
@@ -91,16 +91,16 @@ namespace getfem {
     for (unsigned i = 0; i < mls->nb_level_sets(); ++i) {
       isin = isin && ((*(mesherls0[i]))(P) < 0);
       if (gmm::abs((*(mesherls0[i]))(P)) < 1e-7)
-       isbin = i+1;
+        isbin = i+1;
       if (mls->get_level_set(i)->has_secondary())
-       isin = isin && ((*(mesherls1[i]))(P) < 0);
+        isin = isin && ((*(mesherls1[i]))(P) < 0);
     }
-    bool2 b; 
+    bool2 b;
     b.in = ((integrate_where & INTEGRATE_OUTSIDE)) ? !isin : isin;
     b.bin = isbin;
     return b;
   }
-  
+
 
   /* very rustic set operations evaluator */
   struct is_in_eval {
@@ -110,77 +110,77 @@ namespace getfem {
     bool2 do_expr(const char *&s) {
       bool2 r;
       if (*s == '(') {
-       r = do_expr(++s);
-       GMM_ASSERT1(*s++ == ')', 
-                   "expecting ')' in csg expression at '" << s-1 << "'");
+        r = do_expr(++s);
+        GMM_ASSERT1(*s++ == ')',
+                    "expecting ')' in csg expression at '" << s-1 << "'");
       } else if (*s == '!') { // complementary
-       r = do_expr(++s); r.in = !r.in;
+        r = do_expr(++s); r.in = !r.in;
       } else if (*s >= 'a' && *s <= 'z') {
-       unsigned idx = (*s) - 'a';
-       r.in  = in.is_in(idx);
-       r.bin = bin.is_in(idx) ? idx+1 : 0; 
-       ++s;
-      } else 
-       GMM_ASSERT1(false, "parse error in csg expression at '" << s << "'");
+        unsigned idx = (*s) - 'a';
+        r.in  = in.is_in(idx);
+        r.bin = bin.is_in(idx) ? idx+1 : 0;
+        ++s;
+      } else
+        GMM_ASSERT1(false, "parse error in csg expression at '" << s << "'");
       if (*s == '+') { // Union
-       //cerr << "s = " << s << ", r = " << r << "\n";
-       bool2 a = r, b = do_expr(++s);
-       //cerr << "->b = " << b << "\n";
-       r.in = b.in || a.in;
-       if      (b.bin && !a.in) r.bin = b.bin;
-       else if (a.bin && !b.in) r.bin = a.bin;
-       else r.bin = 0;
+        //cerr << "s = " << s << ", r = " << r << "\n";
+        bool2 a = r, b = do_expr(++s);
+        //cerr << "->b = " << b << "\n";
+        r.in = b.in || a.in;
+        if      (b.bin && !a.in) r.bin = b.bin;
+        else if (a.bin && !b.in) r.bin = a.bin;
+        else r.bin = 0;
       } else if (*s == '-') { // Set difference
-       bool2 a = r, b = do_expr(++s);
-       r.in  = a.in && !b.in;
-       if      (a.bin && !b.in) r.bin = a.bin;
-       else if (a.in  && b.bin) r.bin = b.bin;
-       else r.bin = 0;
+        bool2 a = r, b = do_expr(++s);
+        r.in  = a.in && !b.in;
+        if      (a.bin && !b.in) r.bin = a.bin;
+        else if (a.in  && b.bin) r.bin = b.bin;
+        else r.bin = 0;
       } else if (*s == '*') { // Intersection
-       bool2 a = r, b = do_expr(++s);
-       r.in  = a.in && b.in;
-       if      (a.bin && b.in)  r.bin = a.bin;
-       else if (a.in  && b.bin) r.bin = b.bin;
-       else r.bin = 0;
+        bool2 a = r, b = do_expr(++s);
+        r.in  = a.in && b.in;
+        if      (a.bin && b.in)  r.bin = a.bin;
+        else if (a.in  && b.bin) r.bin = b.bin;
+        else r.bin = 0;
       }
       return r;
     }
-    bool2 is_in(const char*s) { 
-      bool2 b = do_expr(s); 
+    bool2 is_in(const char*s) {
+      bool2 b = do_expr(s);
       GMM_ASSERT1(!(*s), "parse error in CSG expression at " << s);
       return b;
     }
     void check() {
       const char *s[] = { "a*b*c*d",
-                         "a+b+c+d",
-                         "(a+b+c+d)",
-                         "d*(a+b+c)",
-                         "(a+b)-(c+d)",
-                         "((a+b)-(c+d))",
-                         "!a",
-                         0 };
-      for (const char **p = s; *p; ++p) 
-       cerr << *p << "\n";
+                          "a+b+c+d",
+                          "(a+b+c+d)",
+                          "d*(a+b+c)",
+                          "(a+b)-(c+d)",
+                          "((a+b)-(c+d))",
+                          "!a",
+                          0 };
+      for (const char **p = s; *p; ++p)
+        cerr << *p << "\n";
       for (unsigned c=0; c < 16; ++c) {
-       in[0] = (c&1); bin[0] = 1;
-       in[1] = (c&2); bin[1] = 1;
-       in[2] = (c&4); bin[2] = 1;
-       in[3] = (c&8); bin[3] = 1;
-       cerr << in[0] << in[1] << in[2] << in[3] << ": ";
-       for (const char **p = s; *p; ++p) {
-         bool2 b = is_in(*p);
-         cerr << b.in << "/" << b.bin << " ";
-       }
-       cerr << "\n";
+        in[0] = (c&1); bin[0] = 1;
+        in[1] = (c&2); bin[1] = 1;
+        in[2] = (c&4); bin[2] = 1;
+        in[3] = (c&8); bin[3] = 1;
+        cerr << in[0] << in[1] << in[2] << in[3] << ": ";
+        for (const char **p = s; *p; ++p) {
+          bool2 b = is_in(*p);
+          cerr << b.in << "/" << b.bin << " ";
+        }
+        cerr << "\n";
       }
     }
   };
-  
-  mesh_im_level_set::bool2 
+
+  mesh_im_level_set::bool2
   mesh_im_level_set::is_point_in_selected_area
            (const std::vector<pmesher_signed_distance> &mesherls0,
-           const std::vector<pmesher_signed_distance> &mesherls1,
-           const base_node& P) {
+            const std::vector<pmesher_signed_distance> &mesherls1,
+            const base_node& P) {
     is_in_eval ev;
     for (unsigned i = 0; i < mls->nb_level_sets(); ++i) {
       bool sec = mls->get_level_set(i)->has_secondary();
@@ -188,12 +188,12 @@ namespace getfem {
       scalar_type d2 = (sec ? (*(mesherls1[i]))(P) : -1);
       if (d1 < 0 && d2 < 0) ev.in.add(i);
       // if ((integrate_where & INTEGRATE_OUTSIDE) /*&& !sec*/)
-      //       ev.in[i].flip();
+      //        ev.in[i].flip();
 
-      if (gmm::abs(d1) < 1e-7 && d2 < 1e-7) 
-       ev.bin.add(i);
+      if (gmm::abs(d1) < 1e-7 && d2 < 1e-7)
+        ev.bin.add(i);
     }
-    
+
 
     bool2 r;
     if (ls_csg_description.size())
@@ -204,20 +204,20 @@ namespace getfem {
     }
 
     if (integrate_where & INTEGRATE_OUTSIDE) r.in = !(r.in);
-    
+
 
 
     /*bool2 r2 = is_point_in_selected_area2(mesherls0,mesherls1,P);
     if (r2.in != r.in || r2.bin != r.bin) {
       cerr << "ev.in = " << ev.in << ", bin=" << ev.bin<<"\n";
       cerr << "is_point_in_selected_area2("<<P <<"): r="<<r.in<<"/"<<r.bin
-          << ", r2=" << r2.in<<"/"<<r2.bin <<"\n";
+           << ", r2=" << r2.in<<"/"<<r2.bin <<"\n";
       assert(0);
       }*/
 
     return r;
   }
-  
+
   void mesh_im_level_set::build_method_of_convex(size_type cv) {
     const mesh &msh(mls->mesh_of_convex(cv));
     GMM_ASSERT3(msh.convex_index().card() != 0, "Internal error");
@@ -232,17 +232,17 @@ namespace getfem {
     for (unsigned i = 0; i < mls->nb_level_sets(); ++i) {
       mesherls0[i] =  mls->get_level_set(i)->mls_of_convex(cv, 0, false);
       if (mls->get_level_set(i)->has_secondary())
-       mesherls1[i] =  mls->get_level_set(i)->mls_of_convex(cv, 1, false);
+        mesherls1[i] =  mls->get_level_set(i)->mls_of_convex(cv, 1, false);
     }
 
     if (integrate_where != (INTEGRATE_ALL)) {
       for (dal::bv_visitor scv(msh.convex_index()); !scv.finished(); ++scv) {
-       B = gmm::mean_value(msh.points_of_convex(scv));
-       convexes_arein[scv] = 
-         is_point_in_selected_area(mesherls0, mesherls1, B).in;
+        B = gmm::mean_value(msh.points_of_convex(scv));
+        convexes_arein[scv] =
+          is_point_in_selected_area(mesherls0, mesherls1, B).in;
       }
     }
-    
+
     bgeot::pgeometric_trans pgt = linked_mesh().trans_of_convex(cv);
     bgeot::pgeometric_trans pgt2
       = msh.trans_of_convex(msh.convex_index().first_true());
@@ -250,9 +250,9 @@ namespace getfem {
 
     if (base_singular_pim) GMM_ASSERT1
       ((n != 2 ||
-       base_singular_pim->structure()== bgeot::parallelepiped_structure(2))
+        base_singular_pim->structure()== bgeot::parallelepiped_structure(2))
        && (n != 3
-          || base_singular_pim->structure() == bgeot::prism_P1_structure(3))
+           || base_singular_pim->structure() == bgeot::prism_P1_structure(3))
        && (n >= 2) && (n <= 3),
        "Base integration method for quasi polar integration not convenient");
 
@@ -266,140 +266,140 @@ namespace getfem {
 
     for (dal::bv_visitor i(msh.convex_index()); !i.finished(); ++i) {
       papprox_integration pai = regular_simplex_pim->approx_method();
-      
+
       GMM_ASSERT1(regular_simplex_pim->structure() == 
bgeot::simplex_structure(n), "Base integration method should be defined on a 
simplex of same dimension than the mesh");
-      
+
       if ((integrate_where != INTEGRATE_ALL) &&
-         !convexes_arein[i]) continue;
-      
+          !convexes_arein[i]) continue;
+
       if (base_singular_pim && mls->crack_tip_convexes().is_in(cv)) {
-       ptsing.resize(0);
-       unsigned sing_ls = unsigned(-1);
-
-       for (unsigned ils = 0; ils < mls->nb_level_sets(); ++ils)
-         if (mls->get_level_set(ils)->has_secondary()) {
-           for (unsigned ipt = 0; ipt <= n; ++ipt) {
-             if (gmm::abs((*(mesherls0[ils]))(msh.points_of_convex(i)[ipt]))
-                 < 1E-10
-                 && gmm::abs((*(mesherls1[ils]))(msh.points_of_convex(i)[ipt]))
-                 < 1E-10) {
-               if (sing_ls == unsigned(-1)) sing_ls = ils;
-               GMM_ASSERT1(sing_ls == ils, "Two singular point in one "
-                           "sub element : " << sing_ls << ", " << ils <<
-                           ". To be done.");
-               ptsing.push_back(ipt);
-             }
-           }
-         }
-       assert(ptsing.size() < n);
-
-       if (ptsing.size() > 0) {
-         std::stringstream sts;
-         sts << "IM_QUASI_POLAR(" << name_of_int_method(base_singular_pim)
-             << ", " << ptsing[0];
-         if (ptsing.size() > 1) sts << ", " <<  ptsing[1];
-         sts << ")";
-         pai = int_method_descriptor(sts.str())->approx_method();
-       }
+        ptsing.resize(0);
+        unsigned sing_ls = unsigned(-1);
+
+        for (unsigned ils = 0; ils < mls->nb_level_sets(); ++ils)
+          if (mls->get_level_set(ils)->has_secondary()) {
+            for (unsigned ipt = 0; ipt <= n; ++ipt) {
+              if (gmm::abs((*(mesherls0[ils]))(msh.points_of_convex(i)[ipt]))
+                  < 1E-10
+                  && 
gmm::abs((*(mesherls1[ils]))(msh.points_of_convex(i)[ipt]))
+                  < 1E-10) {
+                if (sing_ls == unsigned(-1)) sing_ls = ils;
+                GMM_ASSERT1(sing_ls == ils, "Two singular point in one "
+                            "sub element : " << sing_ls << ", " << ils <<
+                            ". To be done.");
+                ptsing.push_back(ipt);
+              }
+            }
+          }
+        assert(ptsing.size() < n);
+
+        if (ptsing.size() > 0) {
+          std::stringstream sts;
+          sts << "IM_QUASI_POLAR(" << name_of_int_method(base_singular_pim)
+              << ", " << ptsing[0];
+          if (ptsing.size() > 1) sts << ", " <<  ptsing[1];
+          sts << ")";
+          pai = int_method_descriptor(sts.str())->approx_method();
+        }
       }
 
       base_matrix G2;
       vectors_to_base_matrix(G2, linked_mesh().points_of_convex(cv));
       bgeot::geotrans_interpolation_context
-       cc(linked_mesh().trans_of_convex(cv), pai->point(0), G2);
+        cc(linked_mesh().trans_of_convex(cv), pai->point(0), G2);
 
       if (integrate_where & (INTEGRATE_INSIDE | INTEGRATE_OUTSIDE)) {
-               
-       vectors_to_base_matrix(G, msh.points_of_convex(i));
-       bgeot::geotrans_interpolation_context c(msh.trans_of_convex(i),
-                                               pai->point(0), G);
-
-       for (size_type j = 0; j < pai->nb_points_on_convex(); ++j) {
-         c.set_xref(pai->point(j));
-         pgt2->poly_vector_grad(pai->point(j), pc);
-         gmm::mult(G,pc,KK);
-         scalar_type J = gmm::lu_det(KK);
-         new_approx->add_point(c.xreal(), pai->coeff(j) * gmm::abs(J));
-
-         /*if (integrate_where == INTEGRATE_INSIDE) {
-           cc.set_xref(c.xreal());
-           totof << cc.xreal()[0] << "\t" << cc.xreal()[1] << "\t"
-           << pai->coeff(j) * gmm::abs(J) << "\n";
-           }*/
-       }
+
+        vectors_to_base_matrix(G, msh.points_of_convex(i));
+        bgeot::geotrans_interpolation_context c(msh.trans_of_convex(i),
+                                                pai->point(0), G);
+
+        for (size_type j = 0; j < pai->nb_points_on_convex(); ++j) {
+          c.set_xref(pai->point(j));
+          pgt2->poly_vector_grad(pai->point(j), pc);
+          gmm::mult(G,pc,KK);
+          scalar_type J = gmm::lu_det(KK);
+          new_approx->add_point(c.xreal(), pai->coeff(j) * gmm::abs(J));
+
+          /*if (integrate_where == INTEGRATE_INSIDE) {
+            cc.set_xref(c.xreal());
+            totof << cc.xreal()[0] << "\t" << cc.xreal()[1] << "\t"
+            << pai->coeff(j) * gmm::abs(J) << "\n";
+            }*/
+        }
       }
 
       // pgt2 = msh.trans_of_convex(i);
 
       for (short_type f = 0; f < pgt2->structure()->nb_faces(); ++f) {
-       short_type ff = short_type(-1);
-       unsigned isin = unsigned(-1);
-
-       if (integrate_where == INTEGRATE_BOUNDARY) {
-         bool lisin = true;
-         for (unsigned ipt = 0; ipt < 
-                pgt2->structure()->nb_points_of_face(f); ++ipt) {
-           const base_node &P = msh.points_of_face_of_convex(i, f)[ipt];
-           isin = is_point_in_selected_area(mesherls0, mesherls1, P).bin;
-           //cerr << P << ":" << isin << " ";
-           if (!isin) { lisin = false; break; }
-         }
-         if (!lisin) continue;
-         else isin--;
-       } else {
-         B = gmm::mean_value(msh.points_of_face_of_convex(i, f));
-         if (pgt->convex_ref()->is_in(B) < -1E-7) continue;
-         for (short_type fi = 0; fi < pgt->structure()->nb_faces(); ++fi) {
-           if (gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) < 2E-6) ff = fi;
-         }
-
-         if (ff == short_type(-1)) {
-           cout << "Distance to the element : "
-                << pgt->convex_ref()->is_in(B) << endl;
-           for (short_type fi = 0; fi < pgt->structure()->nb_faces(); ++fi) {
-             cout << "Distance to face " << fi << " : "
-                  << gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) << endl;
-           }
-           GMM_ASSERT3(false, "the point is neither in the interior nor "
-                       "the boundary of the element");
-         }
-       }
-         
-       vectors_to_base_matrix(G, msh.points_of_convex(i));
-       bgeot::geotrans_interpolation_context c(msh.trans_of_convex(i),
-                                               pai->point(0), G);
-       
-       
-       for (size_type j = 0; j < pai->nb_points_on_face(f); ++j) {
-         if (gmm::abs(c.J()) > 1E-11) {
-           c.set_xref(pai->point_on_face(f, j));
-           base_small_vector un = pgt2->normals()[f], up(msh.dim());
-           gmm::mult(c.B(), un, up);
-           scalar_type nup = gmm::vect_norm2(up);
-           
-           scalar_type nnup(1);
-           if (integrate_where == INTEGRATE_BOUNDARY) {
-             cc.set_xref(c.xreal());
-             mesherls0[isin]->grad(c.xreal(), un);
-             un /= gmm::vect_norm2(un);
-             gmm::mult(cc.B(), un, up);
-             nnup = gmm::vect_norm2(up);
-           }
-           new_approx->add_point(c.xreal(), pai->coeff_on_face(f, j)
-                                 * gmm::abs(c.J()) * nup * nnup, ff);
-         }
-       } 
+        short_type ff = short_type(-1);
+        unsigned isin = unsigned(-1);
+
+        if (integrate_where == INTEGRATE_BOUNDARY) {
+          bool lisin = true;
+          for (unsigned ipt = 0; ipt <
+                 pgt2->structure()->nb_points_of_face(f); ++ipt) {
+            const base_node &P = msh.points_of_face_of_convex(i, f)[ipt];
+            isin = is_point_in_selected_area(mesherls0, mesherls1, P).bin;
+            //cerr << P << ":" << isin << " ";
+            if (!isin) { lisin = false; break; }
+          }
+          if (!lisin) continue;
+          else isin--;
+        } else {
+          B = gmm::mean_value(msh.points_of_face_of_convex(i, f));
+          if (pgt->convex_ref()->is_in(B) < -1E-7) continue;
+          for (short_type fi = 0; fi < pgt->structure()->nb_faces(); ++fi) {
+            if (gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) < 2E-6) ff = fi;
+          }
+
+          if (ff == short_type(-1)) {
+            cout << "Distance to the element : "
+                 << pgt->convex_ref()->is_in(B) << endl;
+            for (short_type fi = 0; fi < pgt->structure()->nb_faces(); ++fi) {
+              cout << "Distance to face " << fi << " : "
+                   << gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) << endl;
+            }
+            GMM_ASSERT3(false, "the point is neither in the interior nor "
+                        "the boundary of the element");
+          }
+        }
+
+        vectors_to_base_matrix(G, msh.points_of_convex(i));
+        bgeot::geotrans_interpolation_context c(msh.trans_of_convex(i),
+                                                pai->point(0), G);
+
+
+        for (size_type j = 0; j < pai->nb_points_on_face(f); ++j) {
+          if (gmm::abs(c.J()) > 1E-11) {
+            c.set_xref(pai->point_on_face(f, j));
+            base_small_vector un = pgt2->normals()[f], up(msh.dim());
+            gmm::mult(c.B(), un, up);
+            scalar_type nup = gmm::vect_norm2(up);
+
+            scalar_type nnup(1);
+            if (integrate_where == INTEGRATE_BOUNDARY) {
+              cc.set_xref(c.xreal());
+              mesherls0[isin]->grad(c.xreal(), un);
+              un /= gmm::vect_norm2(un);
+              gmm::mult(cc.B(), un, up);
+              nnup = gmm::vect_norm2(up);
+            }
+            new_approx->add_point(c.xreal(), pai->coeff_on_face(f, j)
+                                  * gmm::abs(c.J()) * nup * nnup, ff);
+          }
+        }
       }
     }
 
     if (new_approx->nb_points()) {
       new_approx->valid_method();
       pintegration_method
-       pim = std::make_shared<integration_method>(new_approx);
+        pim = std::make_shared<integration_method>(new_approx);
       dal::pstatic_stored_object_key
-       pk = std::make_shared<special_imls_key>(new_approx);
+        pk = std::make_shared<special_imls_key>(new_approx);
       dal::add_stored_object(pk, pim, new_approx->ref_convex(),
-                            new_approx->pintegration_points());
+                             new_approx->pintegration_points());
       build_methods.push_back(pim);
       cut_im.set_integration_method(cv, pim);
     }
@@ -410,31 +410,31 @@ namespace getfem {
     context_check();
     clear_build_methods();
     ignored_im.clear();
-    for (dal::bv_visitor cv(linked_mesh().convex_index()); 
-        !cv.finished(); ++cv) {
+    for (dal::bv_visitor cv(linked_mesh().convex_index());
+         !cv.finished(); ++cv) {
       if (mls->is_convex_cut(cv)) build_method_of_convex(cv);
 
       if (!cut_im.convex_index().is_in(cv)) {
-       /* not exclusive with mls->is_convex_cut ... sometimes, cut cv
-          contains no integration points.. */
-
-       if (integrate_where == INTEGRATE_BOUNDARY) {
-         ignored_im.add(cv);
-       } else if (integrate_where != (INTEGRATE_OUTSIDE|INTEGRATE_INSIDE)) {
-         /* remove convexes that are not in the integration area */
-         std::vector<pmesher_signed_distance> mesherls0(mls->nb_level_sets());
-         std::vector<pmesher_signed_distance> mesherls1(mls->nb_level_sets());
-         for (unsigned i = 0; i < mls->nb_level_sets(); ++i) {
-           mesherls0[i] = mls->get_level_set(i)->mls_of_convex(cv, 0, false);
-           if (mls->get_level_set(i)->has_secondary())
-             mesherls1[i] = mls->get_level_set(i)->mls_of_convex(cv,1, false);
-         }
-
-         base_node B(gmm::mean_value(linked_mesh().trans_of_convex(cv)
-                                     ->convex_ref()->points()));
-         if (!is_point_in_selected_area(mesherls0, mesherls1, B).in)
-           ignored_im.add(cv);
-       }
+        /* not exclusive with mls->is_convex_cut ... sometimes, cut cv
+           contains no integration points.. */
+
+        if (integrate_where == INTEGRATE_BOUNDARY) {
+          ignored_im.add(cv);
+        } else if (integrate_where != (INTEGRATE_OUTSIDE|INTEGRATE_INSIDE)) {
+          /* remove convexes that are not in the integration area */
+          std::vector<pmesher_signed_distance> mesherls0(mls->nb_level_sets());
+          std::vector<pmesher_signed_distance> mesherls1(mls->nb_level_sets());
+          for (unsigned i = 0; i < mls->nb_level_sets(); ++i) {
+            mesherls0[i] = mls->get_level_set(i)->mls_of_convex(cv, 0, false);
+            if (mls->get_level_set(i)->has_secondary())
+              mesherls1[i] = mls->get_level_set(i)->mls_of_convex(cv,1, false);
+          }
+
+          base_node B(gmm::mean_value(linked_mesh().trans_of_convex(cv)
+                                      ->convex_ref()->points()));
+          if (!is_point_in_selected_area(mesherls0, mesherls1, B).in)
+            ignored_im.add(cv);
+        }
       }
     }
     is_adapted = true; touch();
@@ -447,19 +447,19 @@ namespace getfem {
     std::vector<pmesher_signed_distance> mesherls0(nb_ls);
     if (vec.size() != linked_mesh().dim()) vec.resize(linked_mesh().dim());
     base_small_vector un(ctx.pgt()->dim());
-                        
+
     if (nb_ls == 0) {
-      gmm::clear(vec); return; 
+      gmm::clear(vec); return;
     } else if (nb_ls == 1) {
       mesherls0[0]
-       = mls->get_level_set(0)->mls_of_convex(ctx.convex_num(), 0, false);
+        = mls->get_level_set(0)->mls_of_convex(ctx.convex_num(), 0, false);
     } else {
       scalar_type d_min(0);
       for (unsigned i = 0; i < nb_ls; ++i) {
-       mesherls0[i]
-         = mls->get_level_set(i)->mls_of_convex(ctx.convex_num(), 0, false);
-       scalar_type d = gmm::abs((*(mesherls0[i]))(ctx.xref()));
-       if (i == 0 || d < d_min) { d_min = d; j = i; }
+        mesherls0[i]
+          = mls->get_level_set(i)->mls_of_convex(ctx.convex_num(), 0, false);
+        scalar_type d = gmm::abs((*(mesherls0[i]))(ctx.xref()));
+        if (i == 0 || d < d_min) { d_min = d; j = i; }
       }
     }
     mesherls0[j]->grad(ctx.xref(), un);
@@ -482,11 +482,11 @@ namespace getfem {
   }
 
   void mesh_im_cross_level_set::clear(void)
-  { mesh_im::clear(); clear_build_methods(); is_adapted = false; }   
+  { mesh_im::clear(); clear_build_methods(); is_adapted = false; }
 
-  void mesh_im_cross_level_set::init_with_mls(mesh_level_set &me, 
-                                       size_type ind_ls1_, size_type ind_ls2_,
-                                       pintegration_method pim) {
+  void mesh_im_cross_level_set::init_with_mls(mesh_level_set &me,
+                                        size_type ind_ls1_, size_type ind_ls2_,
+                                        pintegration_method pim) {
     init_with_mesh(me.linked_mesh());
     cut_im.init_with_mesh(me.linked_mesh());
     mls = &me;
@@ -497,31 +497,31 @@ namespace getfem {
   }
 
   mesh_im_cross_level_set::mesh_im_cross_level_set(mesh_level_set &me,
-                                      size_type ind_ls1_, size_type ind_ls2_,
-                                      pintegration_method pim)
+                                       size_type ind_ls1_, size_type ind_ls2_,
+                                       pintegration_method pim)
   { mls = 0; init_with_mls(me, ind_ls1_, ind_ls2_, pim); }
 
   mesh_im_cross_level_set::mesh_im_cross_level_set(void)
   { mls = 0; is_adapted = false; }
 
 
-  pintegration_method 
+  pintegration_method
   mesh_im_cross_level_set::int_method_of_element(size_type cv) const {
     if (!is_adapted) const_cast<mesh_im_cross_level_set *>(this)->adapt();
-    if (cut_im.convex_index().is_in(cv)) 
-      return cut_im.int_method_of_element(cv); 
+    if (cut_im.convex_index().is_in(cv))
+      return cut_im.int_method_of_element(cv);
     else {
       if (ignored_im.is_in(cv)) return getfem::im_none();
 
       return mesh_im::int_method_of_element(cv);
     }
   }
-  
+
   static bool is_point_in_intersection
   (const std::vector<pmesher_signed_distance> &mesherls0,
    const std::vector<pmesher_signed_distance> &mesherls1,
    const base_node& P) {
-    
+
     bool r = true;
     for (unsigned i = 0; i < mesherls0.size(); ++i) {
       bool sec = (dynamic_cast<const mesher_level_set 
*>(mesherls1[i].get()))->is_initialized();
@@ -533,13 +533,13 @@ namespace getfem {
   }
 
   static bool is_edges_intersect(const base_node &PP1, const base_node &PP2,
-                                const base_node &PR1, const base_node &PR2) {
+                                 const base_node &PR1, const base_node &PR2) {
     size_type n = gmm::vect_size(PP1), k1 = 0;
     scalar_type c1 = scalar_type(0);
     base_node V = PR2 - PR1;
     for (size_type k = 0; k < n; ++k)
       if (gmm::abs(V[k]) > gmm::abs(c1)) { c1 = V[k]; k1 = k; }
-    
+
     scalar_type alpha1 = (PP1[k1] - PR1[k1]) / c1;
     scalar_type alpha2 = (PP2[k1] - PR1[k1]) / c1;
     base_node W1 = PP1 - PR1 - alpha1 * V;
@@ -551,7 +551,7 @@ namespace getfem {
     return true;
   }
 
-  
+
   void mesh_im_cross_level_set::build_method_of_convex
   (size_type cv, mesh &global_intersection, bgeot::rtree &rtree_seg) {
     const mesh &msh(mls->mesh_of_convex(cv));
@@ -569,7 +569,7 @@ namespace getfem {
       mesherls1[0] = mls->get_level_set(ind_ls1)->mls_of_convex(cv, 1, false);
     if (mls->get_level_set(ind_ls2)->has_secondary())
       mesherls1[1] = mls->get_level_set(ind_ls2)->mls_of_convex(cv, 1, false);
-    
+
     bgeot::pgeometric_trans pgt = linked_mesh().trans_of_convex(cv);
     bgeot::pgeometric_trans pgt2
       = msh.trans_of_convex(msh.convex_index().first_true());
@@ -584,133 +584,133 @@ namespace getfem {
     for (dal::bv_visitor i(msh.convex_index()); !i.finished(); ++i) {
       papprox_integration pai = segment_pim->approx_method();
       GMM_ASSERT1(gmm::vect_size(pai->point(0)) == 1,
-                 "A segment integration method is needed");
+                  "A segment integration method is needed");
 
       base_matrix G2;
       vectors_to_base_matrix(G2, linked_mesh().points_of_convex(cv));
       bgeot::geotrans_interpolation_context
-       cc(linked_mesh().trans_of_convex(cv), base_node(n), G2);
-      
+        cc(linked_mesh().trans_of_convex(cv), base_node(n), G2);
+
       dal::bit_vector ptinter;
       for (short_type k = 0; k < n; ++k) {
-       size_type ipt = msh.structure_of_convex(i)->ind_dir_points()[k];
-       const base_node &P = msh.points_of_convex(i)[ipt];
-       if (is_point_in_intersection(mesherls0, mesherls1, P))
-         ptinter.add(ipt);
+        size_type ipt = msh.structure_of_convex(i)->ind_dir_points()[k];
+        const base_node &P = msh.points_of_convex(i)[ipt];
+        if (is_point_in_intersection(mesherls0, mesherls1, P))
+          ptinter.add(ipt);
       }
 
       switch (n) {
       case 2:
-       for (short_type k = 0; k < n; ++k) {
-         size_type ipt = msh.structure_of_convex(i)->ind_dir_points()[k];
-         if (ptinter.is_in(ipt)) {
-           
-           const base_node &P = msh.points_of_convex(i)[ipt];
-           cc.set_xref(P);
-           
-           if (global_intersection.search_point(cc.xreal())
-               == size_type(-1)) {
-             global_intersection.add_point(cc.xreal());
-             new_approx->add_point(msh.points_of_convex(i)[ipt],
-                                   scalar_type(1)); 
-           }
-           
-         }
-       }
+        for (short_type k = 0; k < n; ++k) {
+          size_type ipt = msh.structure_of_convex(i)->ind_dir_points()[k];
+          if (ptinter.is_in(ipt)) {
+
+            const base_node &P = msh.points_of_convex(i)[ipt];
+            cc.set_xref(P);
+
+            if (global_intersection.search_point(cc.xreal())
+                == size_type(-1)) {
+              global_intersection.add_point(cc.xreal());
+              new_approx->add_point(msh.points_of_convex(i)[ipt],
+                                    scalar_type(1));
+            }
+
+          }
+        }
         break;
       case 3:
-       {
-         for (short_type k1 = 1; k1 < n; ++k1) {
-           size_type ipt1 = msh.structure_of_convex(i)->ind_dir_points()[k1];
-           for (short_type k2 = 0; k2 < k1; ++k2) {
-             size_type ipt2=msh.structure_of_convex(i)->ind_dir_points()[k2];
-             if (ptinter.is_in(ipt1) && ptinter.is_in(ipt2)) {
-               
-               const base_node &P1 = msh.points_of_convex(i)[ipt1];
-               const base_node &P2 = msh.points_of_convex(i)[ipt2];
-               cc.set_xref(P1);
-               base_node PR1 = cc.xreal();
-               cc.set_xref(P2);
-               base_node PR2 = cc.xreal();
-
-               size_type i1 = global_intersection.search_point(PR1);
-               size_type i2 = global_intersection.search_point(PR2);
-
-               if (i1 == size_type(-1) || i2 == size_type(-1) ||
-                   !global_intersection.nb_convex_with_edge(i1, i2)) {
-
-                 base_node min(n), max(n);
-                 for (size_type k = 0; k < n; ++k) {
-                   min[k] = std::min(PR1[k], PR2[k]);
-                   max[k] = std::max(PR1[k], PR2[k]);
-                 }
-                 bgeot::rtree::pbox_set boxlst;
-                 rtree_seg.find_intersecting_boxes(min, max, boxlst);
-                 
-                 bool found_intersect = false;
-
-                 for (bgeot::rtree::pbox_set::const_iterator
-                        it=boxlst.begin(); it != boxlst.end(); ++it) {
-                   const base_node &PP1
-                     = global_intersection.points_of_convex((*it)->id)[0];
-                   const base_node &PP2
-                     = global_intersection.points_of_convex((*it)->id)[1];
-                   if (is_edges_intersect(PP1, PP2, PR1, PR2))
-                     { found_intersect = true; break; }
-                 }
-                 
-                 if (!found_intersect) {
-                   
-                   i1 = global_intersection.add_point(PR1);
-                   i2 = global_intersection.add_point(PR2);
-                   
-                   size_type is = global_intersection.add_segment(i1, i2);
-
-                   rtree_seg.add_box(min, max, is);
+        {
+          for (short_type k1 = 1; k1 < n; ++k1) {
+            size_type ipt1 = msh.structure_of_convex(i)->ind_dir_points()[k1];
+            for (short_type k2 = 0; k2 < k1; ++k2) {
+              size_type ipt2=msh.structure_of_convex(i)->ind_dir_points()[k2];
+              if (ptinter.is_in(ipt1) && ptinter.is_in(ipt2)) {
+
+                const base_node &P1 = msh.points_of_convex(i)[ipt1];
+                const base_node &P2 = msh.points_of_convex(i)[ipt2];
+                cc.set_xref(P1);
+                base_node PR1 = cc.xreal();
+                cc.set_xref(P2);
+                base_node PR2 = cc.xreal();
+
+                size_type i1 = global_intersection.search_point(PR1);
+                size_type i2 = global_intersection.search_point(PR2);
+
+                if (i1 == size_type(-1) || i2 == size_type(-1) ||
+                    !global_intersection.nb_convex_with_edge(i1, i2)) {
+
+                  base_node min(n), max(n);
+                  for (size_type k = 0; k < n; ++k) {
+                    min[k] = std::min(PR1[k], PR2[k]);
+                    max[k] = std::max(PR1[k], PR2[k]);
+                  }
+                  bgeot::rtree::pbox_set boxlst;
+                  rtree_seg.find_intersecting_boxes(min, max, boxlst);
+
+                  bool found_intersect = false;
+
+                  for (bgeot::rtree::pbox_set::const_iterator
+                         it=boxlst.begin(); it != boxlst.end(); ++it) {
+                    const base_node &PP1
+                      = global_intersection.points_of_convex((*it)->id)[0];
+                    const base_node &PP2
+                      = global_intersection.points_of_convex((*it)->id)[1];
+                    if (is_edges_intersect(PP1, PP2, PR1, PR2))
+                      { found_intersect = true; break; }
+                  }
+
+                  if (!found_intersect) {
+
+                    i1 = global_intersection.add_point(PR1);
+                    i2 = global_intersection.add_point(PR2);
+
+                    size_type is = global_intersection.add_segment(i1, i2);
+
+                    rtree_seg.add_box(min, max, is);
                     rtree_seg.build_tree(); // Not efficient !
 
-                   
-                   const base_node &PE1
-                     = msh.trans_of_convex(i)->convex_ref()->points()[ipt1];
-                   const base_node &PE2
-                     = msh.trans_of_convex(i)->convex_ref()->points()[ipt1];
-                   base_node V = PE2 - PE1, W1(n), W2(n);
-                   
-                   base_matrix G3;
-                   vectors_to_base_matrix(G3, msh.points_of_convex(i));
-                   bgeot::geotrans_interpolation_context
-                     ccc(msh.trans_of_convex(i), base_node(n), G3);
-                   
-                   for (size_type j=0; j < pai->nb_points_on_convex(); ++j) {
-                     base_node PE = pai->point(j)[0] * PE2
-                       + (scalar_type(1) - pai->point(j)[0]) * PE1;
-                     ccc.set_xref(PE);
-                     cc.set_xref(ccc.xreal());
-                     gmm::mult(ccc.K(), V, W1);
-                     gmm::mult(cc.K(), W1, W2);
-                     new_approx->add_point(ccc.xreal(),
-                                     pai->coeff(j) * gmm::vect_norm2(W2));
-                   } 
-                 }
-               }
-             }
-           }
-         }
-       }
-       break;
+
+                    const base_node &PE1
+                      = msh.trans_of_convex(i)->convex_ref()->points()[ipt1];
+                    const base_node &PE2
+                      = msh.trans_of_convex(i)->convex_ref()->points()[ipt1];
+                    base_node V = PE2 - PE1, W1(n), W2(n);
+
+                    base_matrix G3;
+                    vectors_to_base_matrix(G3, msh.points_of_convex(i));
+                    bgeot::geotrans_interpolation_context
+                      ccc(msh.trans_of_convex(i), base_node(n), G3);
+
+                    for (size_type j=0; j < pai->nb_points_on_convex(); ++j) {
+                      base_node PE = pai->point(j)[0] * PE2
+                        + (scalar_type(1) - pai->point(j)[0]) * PE1;
+                      ccc.set_xref(PE);
+                      cc.set_xref(ccc.xreal());
+                      gmm::mult(ccc.K(), V, W1);
+                      gmm::mult(cc.K(), W1, W2);
+                      new_approx->add_point(ccc.xreal(),
+                                      pai->coeff(j) * gmm::vect_norm2(W2));
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        break;
       default: GMM_ASSERT1(false, "internal error");
-       
+
       }
     }
 
     if (new_approx->nb_points()) {
       new_approx->valid_method();
       pintegration_method
-       pim = std::make_shared<integration_method>(new_approx);
+        pim = std::make_shared<integration_method>(new_approx);
       dal::pstatic_stored_object_key
-       pk = std::make_shared<special_imls_key>(new_approx);
+        pk = std::make_shared<special_imls_key>(new_approx);
       dal::add_stored_object(pk, pim, new_approx->ref_convex(),
-                            new_approx->pintegration_points());
+                             new_approx->pintegration_points());
       build_methods.push_back(pim);
       cut_im.set_integration_method(cv, pim);
     }
@@ -719,8 +719,8 @@ namespace getfem {
   void mesh_im_cross_level_set::adapt(void) {
     GMM_ASSERT1(linked_mesh_ != 0, "mesh level set uninitialized");
     GMM_ASSERT1(linked_mesh_->dim() > 1 && linked_mesh_->dim() <= 3,
-               "Sorry, works only in dimension 2 or 3");
-    
+                "Sorry, works only in dimension 2 or 3");
+
     context_check();
     clear_build_methods();
     ignored_im.clear();
@@ -733,18 +733,18 @@ namespace getfem {
 
     for (size_type i = 0; i < icv.size(); ++i) {
       if (ils[i].is_in(ind_ls1) && ils[i].is_in(ind_ls2)) {
-       build_method_of_convex(icv[i], global_intersection, rtree_seg);
+        build_method_of_convex(icv[i], global_intersection, rtree_seg);
       }
     }
 
-    for (dal::bv_visitor cv(linked_mesh().convex_index()); 
-        !cv.finished(); ++cv) 
+    for (dal::bv_visitor cv(linked_mesh().convex_index());
+         !cv.finished(); ++cv)
       if (!cut_im.convex_index().is_in(cv)) ignored_im.add(cv);
 
     is_adapted = true; touch();
   }
 
-  
+
 }  /* end of namespace getfem.                                             */
 
 



reply via email to

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