getfem-commits
[Top][All Lists]
Advanced

[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); }
 



reply via email to

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