[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] [getfem-commits] branch master updated: Maintain underl
From: |
Konstantinos Poulios |
Subject: |
[Getfem-commits] [getfem-commits] branch master updated: Maintain underlying mesh_fem type when cloning mesh_fem objects in scripting API |
Date: |
Tue, 07 Nov 2023 07:38:21 -0500 |
This is an automated email from the git hooks/post-receive script.
logari81 pushed a commit to branch master
in repository getfem.
The following commit(s) were added to refs/heads/master by this push:
new 938c963d Maintain underlying mesh_fem type when cloning mesh_fem
objects in scripting API
938c963d is described below
commit 938c963d4f74d80b1f68c2bc7b98d52c67fcb4c9
Author: Konstantinos Poulios <logari81@gmail.com>
AuthorDate: Tue Nov 7 13:37:56 2023 +0100
Maintain underlying mesh_fem type when cloning mesh_fem objects in
scripting API
---
interface/src/gf_mesh_fem.cc | 37 +++++++++++++++++++++++++++++-----
src/getfem/getfem_mesh_fem_level_set.h | 9 +++++----
src/getfem/getfem_partial_mesh_fem.h | 2 ++
3 files changed, 39 insertions(+), 9 deletions(-)
diff --git a/interface/src/gf_mesh_fem.cc b/interface/src/gf_mesh_fem.cc
index 93f33046..3851f036 100644
--- a/interface/src/gf_mesh_fem.cc
+++ b/interface/src/gf_mesh_fem.cc
@@ -134,10 +134,36 @@ void gf_mesh_fem(getfemint::mexargs_in& m_in,
Create a copy of a @tmf.@*/
sub_command
("clone", 1, 1, 0, 1,
-
- getfem::mesh_fem *mmf2 = to_meshfem_object(in.pop());
- mm = &mmf2->linked_mesh();
- mmf = std::make_shared<getfem::mesh_fem>(*mmf2);
+ getfem::mesh_fem *mmf_in = to_meshfem_object(in.pop());
+ mm = &mmf_in->linked_mesh();
+ getfem::mesh_fem_sum *mfsum
+ = dynamic_cast<getfem::mesh_fem_sum *>(mmf_in);
+ getfem::mesh_fem_product *mfprod
+ = dynamic_cast<getfem::mesh_fem_product *>(mmf_in);
+ getfem::mesh_fem_level_set *mfls
+ = dynamic_cast<getfem::mesh_fem_level_set *>(mmf_in);
+ getfem::partial_mesh_fem *mfpart
+ = dynamic_cast<getfem::partial_mesh_fem *>(mmf_in);
+ getfem::mesh_fem_global_function *mfglob
+ = dynamic_cast<getfem::mesh_fem_global_function *>(mmf_in);
+ if (mfsum)
+ mmf = std::make_shared<getfem::mesh_fem_sum>(*mfsum);
+ else if (mfprod)
+ mmf = std::make_shared<getfem::mesh_fem_product>(*mfprod);
+ else if (mfls) {
+ std::shared_ptr<getfem::mesh_fem_level_set> mmfls
+ =
std::make_shared<getfem::mesh_fem_level_set>(mfls->linked_mesh_level_set(),
+
mfls->linked_mesh_fem());
+ mmfls->adapt();
+ mmf = mmfls;
+ } else if (mfpart) {
+ GMM_WARNING1("Cloning a partial_mesh_fem simply clones the underlying"
+ " adapted mesh_fem");
+ mmf = std::make_shared<getfem::mesh_fem>(mfpart->linked_mesh_fem());
+ } else if (mfglob)
+ mmf = std::make_shared<getfem::mesh_fem_global_function>(*mfglob);
+ else
+ mmf = std::make_shared<getfem::mesh_fem>(*mmf_in);
);
@@ -156,7 +182,8 @@ void gf_mesh_fem(getfemint::mexargs_in& m_in,
if (mmf.get() == 0) {
mm = &gfimf->linked_mesh();
msum = std::make_shared<getfem::mesh_fem_sum>(*mm);
- mmf = msum; store_meshfem_object(mmf);
+ mmf = msum;
+ store_meshfem_object(mmf);
}
workspace().set_dependence(mmf.get(), gfimf);
mftab.push_back(gfimf);
diff --git a/src/getfem/getfem_mesh_fem_level_set.h
b/src/getfem/getfem_mesh_fem_level_set.h
index 1e803b28..c892cbf6 100644
--- a/src/getfem/getfem_mesh_fem_level_set.h
+++ b/src/getfem/getfem_mesh_fem_level_set.h
@@ -59,12 +59,13 @@ namespace getfem {
void build_method_of_convex(size_type cv);
public :
- void update_from_context(void) const { is_adapted = false; }
- void adapt(void);
- void clear(void); // to be modified
- size_type get_xfem_index(void) const { return xfem_index; }
+ void update_from_context() const { is_adapted = false; }
+ void adapt();
+ void clear(); // to be modified
+ size_type get_xfem_index() const { return xfem_index; }
const mesh_level_set &linked_mesh_level_set() const { return mls; }
+ const mesh_fem &linked_mesh_fem() const { return mf; }
size_type memsize() const {
return mesh_fem::memsize(); // + ... ;
diff --git a/src/getfem/getfem_partial_mesh_fem.h
b/src/getfem/getfem_partial_mesh_fem.h
index c0b7fadb..83ca0a23 100644
--- a/src/getfem/getfem_partial_mesh_fem.h
+++ b/src/getfem/getfem_partial_mesh_fem.h
@@ -98,6 +98,8 @@ namespace getfem {
"the original fem");
}
+ const mesh_fem &linked_mesh_fem() const { return mf; }
+
ind_dof_ct ind_basic_dof_of_element(size_type cv) const
{ return mf.ind_basic_dof_of_element(cv); }
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] [getfem-commits] branch master updated: Maintain underlying mesh_fem type when cloning mesh_fem objects in scripting API,
Konstantinos Poulios <=