[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, 11 Jun 2018 05:35:34 -0400 (EDT) |
branch: master
commit 3a1c26a8adfd7eacd320f6a109b9ba10557556d4
Author: Konstantinos Poulios <address@hidden>
Date: Mon Jun 11 11:35:17 2018 +0200
Add target region option to interpolate transformation from expression
---
src/getfem/getfem_generic_assembly.h | 27 +++++++++++------
src/getfem_generic_assembly_interpolation.cc | 44 ++++++++++++++++++++--------
2 files changed, 50 insertions(+), 21 deletions(-)
diff --git a/src/getfem/getfem_generic_assembly.h
b/src/getfem/getfem_generic_assembly.h
index 2bd1478..ae00f13 100644
--- a/src/getfem/getfem_generic_assembly.h
+++ b/src/getfem/getfem_generic_assembly.h
@@ -659,20 +659,29 @@ namespace getfem {
// Interpolate transformations
//=========================================================================
- /** Add a transformation to the model `md` from mesh `source_mesh` to mesh
- `target_mesh` given by the expression `expr` which corresponds to a
- high-level generic assembly expression which may contains some
- variable of the model. CAUTION: For the moment, the derivative of the
- transformation with respect to the eventual variables used is not
- taken into account in the model solve.
+ /** Add a transformation to a workspace `workspace` or a model `md` mapping
+ point in mesh `source_mesh` to mesh `target_mesh`, optionally restricted
+ to the region `target_region`. The transformation is defined by the
+ expression `expr`, which has to be in the high-level generic assembly
+ syntax and may contain some variables of the workspace/model.
+ CAUTION: For the moment, the derivative of the transformation with
+ respect to any of these variables is not taken into account in the model
+ solve.
*/
void add_interpolate_transformation_from_expression
- (model &md, const std::string &transname, const mesh &source_mesh,
- const mesh &target_mesh, const std::string &expr);
-
+ (ga_workspace &workspace, const std::string &transname,
+ const mesh &source_mesh, const mesh &target_mesh, const std::string &expr);
void add_interpolate_transformation_from_expression
(ga_workspace &workspace, const std::string &transname,
+ const mesh &source_mesh, const mesh &target_mesh,
+ size_type target_region, const std::string &expr);
+ void add_interpolate_transformation_from_expression
+ (model &md, const std::string &transname,
const mesh &source_mesh, const mesh &target_mesh, const std::string &expr);
+ void add_interpolate_transformation_from_expression
+ (model &md, const std::string &transname,
+ const mesh &source_mesh, const mesh &target_mesh,
+ size_type target_region, const std::string &expr);
/** Add a transformation to the workspace that creates an identity mapping
between two meshes in deformed state. Conceptually, it can be viewed
diff --git a/src/getfem_generic_assembly_interpolation.cc
b/src/getfem_generic_assembly_interpolation.cc
index 2a48225..c6c1563 100644
--- a/src/getfem_generic_assembly_interpolation.cc
+++ b/src/getfem_generic_assembly_interpolation.cc
@@ -489,6 +489,7 @@ namespace getfem {
const mesh &source_mesh;
const mesh &target_mesh;
+ const size_type target_region;
std::string expr;
mutable bgeot::rtree element_boxes;
mutable bool recompute_elt_boxes;
@@ -579,8 +580,11 @@ namespace getfem {
element_boxes.clear();
base_node bmin(N), bmax(N);
- for (dal::bv_visitor cv(target_mesh.convex_index());
- !cv.finished(); ++cv) {
+ const dal::bit_vector&
+ convex_index = (target_region == mesh_region::all_convexes().id())
+ ? target_mesh.convex_index()
+ : target_mesh.region(target_region).index();
+ for (dal::bv_visitor cv(convex_index); !cv.finished(); ++cv) {
bgeot::pgeometric_trans pgt = target_mesh.trans_of_convex(cv);
@@ -708,9 +712,9 @@ namespace getfem {
return ret_type;
}
- interpolate_transformation_expression(const mesh &sm, const mesh &tm,
- const std::string &expr_)
- : source_mesh(sm), target_mesh(tm), expr(expr_),
+ interpolate_transformation_expression
+ (const mesh &sm, const mesh &tm, size_type trg, const std::string &expr_)
+ : source_mesh(sm), target_mesh(tm), target_region(trg), expr(expr_),
recompute_elt_boxes(true), extract_variable_done(false),
extract_data_done(false)
{ this->add_dependency(tm); }
@@ -719,21 +723,37 @@ namespace getfem {
void add_interpolate_transformation_from_expression
- (model &md, const std::string &name, const mesh &sm, const mesh &tm,
- const std::string &expr) {
- pinterpolate_transformation
- p = std::make_shared<interpolate_transformation_expression>(sm, tm,
expr);
- md.add_interpolate_transformation(name, p);
+ (ga_workspace &workspace, const std::string &name, const mesh &sm,
+ const mesh &tm, const std::string &expr) {
+ add_interpolate_transformation_from_expression
+ (workspace, name, sm, tm, size_type(-1), expr);
}
void add_interpolate_transformation_from_expression
(ga_workspace &workspace, const std::string &name, const mesh &sm,
- const mesh &tm, const std::string &expr) {
+ const mesh &tm, size_type trg, const std::string &expr) {
pinterpolate_transformation
- p = std::make_shared<interpolate_transformation_expression>(sm, tm,
expr);
+ p = std::make_shared<interpolate_transformation_expression>
+ (sm, tm, trg, expr);
workspace.add_interpolate_transformation(name, p);
}
+ void add_interpolate_transformation_from_expression
+ (model &md, const std::string &name, const mesh &sm, const mesh &tm,
+ const std::string &expr) {
+ add_interpolate_transformation_from_expression
+ (md, name, sm, tm, size_type(-1), expr);
+ }
+
+ void add_interpolate_transformation_from_expression
+ (model &md, const std::string &name, const mesh &sm, const mesh &tm,
+ size_type trg, const std::string &expr) {
+ pinterpolate_transformation
+ p = std::make_shared<interpolate_transformation_expression>
+ (sm, tm, trg, expr);
+ md.add_interpolate_transformation(name, p);
+ }
+
//=========================================================================
// Interpolate transformation on neighbour element (for internal faces)
//=========================================================================