[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] (no subject)
From: |
Andriy Andreykiv |
Subject: |
[Getfem-commits] (no subject) |
Date: |
Wed, 3 Mar 2021 14:16:41 -0500 (EST) |
branch: touched_region_for_projected_fem
commit e13a0827f7bddb7c557cb3f8506ba6e96496da4d
Author: Andriy Andreykiv <aa@plaxis.com>
AuthorDate: Wed Mar 3 20:16:22 2021 +0100
projected_fem::touched_target_region()
---
src/getfem/getfem_projected_fem.h | 4 ++++
src/getfem_projected_fem.cc | 22 ++++++++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/src/getfem/getfem_projected_fem.h
b/src/getfem/getfem_projected_fem.h
index ae216b9..8eb1378 100644
--- a/src/getfem/getfem_projected_fem.h
+++ b/src/getfem/getfem_projected_fem.h
@@ -141,6 +141,10 @@ namespace getfem {
/** return the list of convexes of the projected mesh_fem which
* contain at least one gauss point (should be all convexes)! */
dal::bit_vector projected_convexes() const;
+
+ /** faces and convexes from the target region
+ * that contain at least one guass point that is projected by the source
*/
+ mesh_region touched_target_region() const;
/** return the min/max/mean number of gauss points in the convexes
* of the projected mesh_fem */
diff --git a/src/getfem_projected_fem.cc b/src/getfem_projected_fem.cc
index fa73548..c83861d 100644
--- a/src/getfem_projected_fem.cc
+++ b/src/getfem_projected_fem.cc
@@ -795,6 +795,28 @@ namespace getfem {
return bv;
}
+ mesh_region projected_fem::touched_target_region() const {
+ context_check();
+ mesh_region touched_region;
+ for (mr_visitor v(rg_target); !v.finished(); ++v) {
+ auto pim = mim_target.int_method_of_element(v.cv());
+ auto pai = pim->approx_method();
+ auto start_pt = v.is_face() ? pai->ind_first_point_on_face(v.f()) : 0;
+ auto nb_pts = v.is_face() ? pai->nb_points_on_face(v.f())
+ : pai->nb_points_on_convex();
+ auto isProjectedOn = false;
+ for (size_type ip = 0; ip != nb_pts; ++ip) {
+ auto &proj_data = elements.at(v.cv()).gausspt[start_pt + ip];
+ if (proj_data.iflags) {
+ isProjectedOn = true;
+ break;
+ }
+ }
+ if (isProjectedOn) touched_region.add(v.cv(), v.f());
+ }
+ return touched_region;
+ }
+
void projected_fem::gauss_pts_stats(unsigned &ming, unsigned &maxg,
scalar_type &meang) const {
std::vector<unsigned> v(mf_source.linked_mesh().nb_allocated_convex());