[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r5112 - in /trunk/getfem/src: getfem/getfem_mesh.h getf
From: |
Yves . Renard |
Subject: |
[Getfem-commits] r5112 - in /trunk/getfem/src: getfem/getfem_mesh.h getfem_mesh.cc |
Date: |
Thu, 29 Oct 2015 16:25:23 -0000 |
Author: renard
Date: Thu Oct 29 17:25:22 2015
New Revision: 5112
URL: http://svn.gna.org/viewcvs/getfem?rev=5112&view=rev
Log:
adding a function to select the inner faces of elements in a mesh
Modified:
trunk/getfem/src/getfem/getfem_mesh.h
trunk/getfem/src/getfem_mesh.cc
Modified: trunk/getfem/src/getfem/getfem_mesh.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_mesh.h?rev=5112&r1=5111&r2=5112&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_mesh.h (original)
+++ trunk/getfem/src/getfem/getfem_mesh.h Thu Oct 29 17:25:22 2015
@@ -674,6 +674,13 @@
inline mesh_region APIDECL outer_faces_of_mesh(const mesh &m)
{ mesh_region fl; outer_faces_of_mesh(m,m.convex_index(),fl); return fl; }
+ /** Select all the faces sharing at least two element of the given mesh
+ region. Each face is represented only once and is arbitrary chosen
+ between the two neighbour elements.
+ */
+ mesh_region APIDECL inner_faces_of_mesh(const mesh &m,
+ const mesh_region &mr);
+
/** Select in the region mr the faces of the mesh m with their unit
outward vector having a maximal angle "angle" with the vector V.
*/
Modified: trunk/getfem/src/getfem_mesh.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_mesh.cc?rev=5112&r1=5111&r2=5112&view=diff
==============================================================================
--- trunk/getfem/src/getfem_mesh.cc (original)
+++ trunk/getfem/src/getfem_mesh.cc Thu Oct 29 17:25:22 2015
@@ -772,6 +772,52 @@
}
}
+ /* Select all the faces sharing at least two element of the given mesh
+ region. Each face is represented only once and is arbitrary chosen
+ between the two neighbour elements. Try to minimize the number of
+ elements.
+ */
+ mesh_region inner_faces_of_mesh(const mesh &m,
+ const mesh_region &mr) {
+ mr.error_if_not_convexes();
+ mesh_region mrr;
+ dal::bit_vector visited;
+
+ for (mr_visitor i(mr); !i.finished(); ++i) {
+ size_type cv1 = i.cv();
+ short_type nbf = m.structure_of_convex(i.cv())->nb_faces();
+ bool neighbour_visited = false;
+ for (short_type f = 0; f < nbf; f++) {
+ size_type cv2 = m.neighbour_of_convex(cv1, f);
+ if (cv2 == size_type(-1) && visited.is_in(cv2))
+ { neighbour_visited = true; break; }
+ }
+ if (!neighbour_visited) {
+ for (short_type f = 0; f < nbf; f++) {
+ size_type cv2 = m.neighbour_of_convex(cv1, f);
+ if (cv2 == size_type(-1) && mr.is_in(cv2) && !(visited.is_in(cv2)))
+ mrr.add(cv1,f);
+ }
+ visited.add(cv1);
+ }
+ }
+
+ for (mr_visitor i(mr); !i.finished(); ++i) {
+ size_type cv1 = i.cv();
+ short_type nbf = m.structure_of_convex(i.cv())->nb_faces();
+ if (!(visited.is_in(cv1))) {
+ for (short_type f = 0; f < nbf; f++) {
+ size_type cv2 = m.neighbour_of_convex(i.cv(), f);
+ if (cv2 == size_type(-1) && mr.is_in(cv2) && !(visited.is_in(cv2)))
+ mrr.add(cv1,f);
+ }
+ visited.add(cv1);
+ }
+ }
+ return mrr;
+ }
+
+
mesh_region select_faces_of_normal(const mesh &m, const mesh_region &mr,
const base_small_vector &V,
scalar_type angle) {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5112 - in /trunk/getfem/src: getfem/getfem_mesh.h getfem_mesh.cc,
Yves . Renard <=