getfem-commits
[Top][All Lists]
Advanced

[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: Thu, 10 Jan 2019 09:34:03 -0500 (EST)

branch: master
commit f821dce7436bfb41cc650b6af3f9480d1d0b49ee
Author: Konstantinos Poulios <address@hidden>
Date:   Thu Jan 10 15:33:53 2019 +0100

    Add projected_fem to the scripting interface
---
 interface/src/gf_fem.cc | 70 ++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 55 insertions(+), 15 deletions(-)

diff --git a/interface/src/gf_fem.cc b/interface/src/gf_fem.cc
index 217cffe..5f4bb77 100644
--- a/interface/src/gf_fem.cc
+++ b/interface/src/gf_fem.cc
@@ -22,6 +22,7 @@
 #include <getfem/getfem_mesh_im.h>
 #include <getfem/getfem_mesh_fem.h>
 #include <getfem/getfem_interpolated_fem.h>
+#include <getfem/getfem_projected_fem.h>
 #include <getfem/getfem_fem.h>
 #include <getfemint_misc.h>
 #include <getfemint_workspace.h>
@@ -39,30 +40,69 @@ void gf_fem(getfemint::mexargs_in& in, 
getfemint::mexargs_out& out) {
   }
   std::string cmd = in.pop().to_string();
   id_type id = id_type(-1);
-  if (check_cmd(cmd, "interpolated fem", in, out, 2, 3, 0, 1)) {
-    /address@hidden F = ('interpolated_fem', @tmf mf, @tmim mim, 
address@hidden blocked_dof])
+  if (check_cmd(cmd, "interpolated fem", in, out, 2, 4, 0, 1)) {
+    /address@hidden F = ('interpolated_fem', @tmf mf_source, @tmim mim_target, 
address@hidden blocked_dofs[, @bool caching]])
     Build a special @tfem which is interpolated from another @tmf.
 
     Using this special finite element, it is possible to interpolate a given
-    @tmf `mf` on another mesh, given the integration method `mim` that will
-    be used on this mesh.
-
-    Note that this finite element may be quite slow, and eats much
-    address@hidden/
-    getfem::mesh_fem *mf  = to_meshfem_object(in.pop());
-    getfem::mesh_im  *mim = to_meshim_object(in.pop());
-    dal::bit_vector blocked_dof;
-    if (in.remaining())
-      blocked_dof = in.pop().to_bit_vector();
+    @tmf `mf_source` on another mesh, given the integration method `mim_target`
+    that will be used on this mesh.
+
+    Note that this finite element may be quite slow or consume much
+    memory depending if caching is used or not. By default `caching` is
+    address@hidden/
+    getfem::mesh_fem *mf_source  = to_meshfem_object(in.pop());
+    getfem::mesh_im  *mim_target = to_meshim_object(in.pop());
+    dal::bit_vector blocked_dofs;
+    bool caching(true);
+    if (in.remaining()) {
+      blocked_dofs = in.pop().to_bit_vector();
+      if (in.remaining())
+        caching = in.pop().to_bool();
+    }
     getfem::pfem pf =
-      getfem::new_interpolated_fem(*mf, *mim, 0, blocked_dof);
+      getfem::new_interpolated_fem(*mf_source, *mim_target, 0, blocked_dofs,
+                                   caching);
     // gfi_pf = getfemint_pfem::get_from(pf);
     // gfi_pf->nbdof_need_convex_number() = true;
     
     id = store_fem_object(pf);
 
-    workspace().set_dependence(id, mim);
-    workspace().set_dependence(id, mf);
+    workspace().set_dependence(id, mim_target);
+    workspace().set_dependence(id, mf_source);
+  } else if (check_cmd(cmd, "projected fem", in, out, 4, 6, 0, 1)) {
+    /address@hidden F = ('projected_fem', @tmf mf_source, @tmim mim_target, 
@int rg_source, @int rg_target[, @ivec blocked_dofs[, @bool caching]])
+    Build a special @tfem which is interpolated from another @tmf.
+
+    Using this special finite element, it is possible to interpolate a given
+    @tmf `mf_source` on another mesh, given the integration method `mim_target`
+    that will be used on this mesh.
+
+    Note that this finite element may be quite slow or consume much
+    memory depending if caching is used or not. By default `caching` is
+    address@hidden/
+    getfem::mesh_fem *mf_source  = to_meshfem_object(in.pop());
+    getfem::mesh_im  *mim_target = to_meshim_object(in.pop());
+    size_type rg_source = in.pop().to_integer();
+    size_type rg_target = in.pop().to_integer();
+
+    dal::bit_vector blocked_dofs;
+    bool caching(true);
+    if (in.remaining()) {
+      blocked_dofs = in.pop().to_bit_vector();
+      if (in.remaining())
+        caching = in.pop().to_bool();
+    }
+    getfem::pfem pf =
+      getfem::new_projected_fem(*mf_source, *mim_target, rg_source, rg_target,
+                                blocked_dofs, caching);
+    // gfi_pf = getfemint_pfem::get_from(pf);
+    // gfi_pf->nbdof_need_convex_number() = true;
+
+    id = store_fem_object(pf);
+
+    workspace().set_dependence(id, mim_target);
+    workspace().set_dependence(id, mf_source);
   } else {
     /address@hidden F = ('.list', @str fem_name)
       The `fem_name` should contain a description of the finite element



reply via email to

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