[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r4706 - in /trunk/getfem: interface/src/gf_model_get.cc
From: |
logari81 |
Subject: |
[Getfem-commits] r4706 - in /trunk/getfem: interface/src/gf_model_get.cc src/getfem/getfem_generic_assembly.h src/getfem_generic_assembly.cc |
Date: |
Wed, 09 Jul 2014 14:20:13 -0000 |
Author: logari81
Date: Wed Jul 9 16:20:13 2014
New Revision: 4706
URL: http://svn.gna.org/viewcvs/getfem?rev=4706&view=rev
Log:
improve interface for interpolation of generic assembly expressions onto a set
of points
Modified:
trunk/getfem/interface/src/gf_model_get.cc
trunk/getfem/src/getfem/getfem_generic_assembly.h
trunk/getfem/src/getfem_generic_assembly.cc
Modified: trunk/getfem/interface/src/gf_model_get.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_model_get.cc?rev=4706&r1=4705&r2=4706&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_model_get.cc (original)
+++ trunk/getfem/interface/src/gf_model_get.cc Wed Jul 9 16:20:13 2014
@@ -197,21 +197,47 @@
);
- /address@hidden V = ('interpolation', @str expr, @tmf mf[, @int region])
- Interpolate a certain expression relatively to the mesh_fem `mf`.
- The expression have to be a valid expression in the sense of the
- high-level generic assembly with authorised references to the variables
- and data of the model. @*/
- sub_command
- ("interpolation", 2, 3, 0, 1, // should be extended to complex models ...
+ /address@hidden V = ('interpolation', @str expr, address@hidden mf | @vec
pts, @tmesh m}[, @int region[, @int extrapolation[, @int rg_source]]])
+ Interpolate a certain expression with respect to the mesh_fem `mf`
+ or the set of points `pts` on mesh `m`.
+ The expression has to be valid according to the high-level generic
+ assembly language possibly including references to the variables
+ and data of the model.
+
+ The options `extrapolation` and `rg_source` are specific to
+ interpolations with respect to a set of points `pts`. @*/
+ sub_command
+ ("interpolation", 2, 6, 0, 1, // should be extended to complex models ...
std::string expr = in.pop().to_string();
- getfemint_mesh_fem *gfi_mf = in.pop().to_getfemint_mesh_fem();
-
- size_type rg = size_type(-1);
- if (in.remaining()) rg = in.pop().to_integer();
getfem::base_vector result;
- getfem::ga_interpolation_Lagrange_fem(md->model(), expr,
- gfi_mf->mesh_fem(), result, rg);
+ if (in.front().is_mesh_fem()) {
+ getfemint_mesh_fem *gfi_mf = in.pop().to_getfemint_mesh_fem();
+
+ size_type rg = in.remaining() ? in.pop().to_integer()
+ : size_type(-1);
+ getfem::ga_interpolation_Lagrange_fem(md->model(), expr,
+ gfi_mf->mesh_fem(), result, rg);
+ } else {
+ darray st = in.pop().to_darray();
+ std::vector<double> PTS(st.begin(), st.end());
+ const getfem::mesh *m = in.pop().to_const_mesh();
+ size_type N = m->dim();
+ size_type nbpoints = gmm::vect_size(PTS) / N;
+ getfem::base_node p(N);
+ getfem::mesh_trans_inv mti(*m);
+ for (size_type i = 0; i < nbpoints; ++i) {
+ gmm::copy(gmm::sub_vector(PTS, gmm::sub_interval(i*N, N)), p);
+ mti.add_point(p);
+ }
+ size_type rg = in.remaining() ? in.pop().to_integer()
+ : size_type(-1);
+ int extrapolation = in.remaining() ? in.pop().to_integer()
+ : size_type(0);
+ size_type rg_source = in.remaining() ? in.pop().to_integer()
+ : size_type(-1);
+ getfem::ga_interpolation_mti(md->model(), expr, mti,
+ result, rg, extrapolation, rg_source);
+ }
out.pop().from_dcvector(result);
);
Modified: trunk/getfem/src/getfem/getfem_generic_assembly.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_generic_assembly.h?rev=4706&r1=4705&r2=4706&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_generic_assembly.h (original)
+++ trunk/getfem/src/getfem/getfem_generic_assembly.h Wed Jul 9 16:20:13 2014
@@ -548,8 +548,8 @@
// Not tested
void ga_interpolation_mti
(const getfem::model &md, const std::string &expr, mesh_trans_inv &mti,
- base_vector &result, int extrapolation = 0,
- const mesh_region &rg=mesh_region::all_convexes(),
+ base_vector &result, const mesh_region &rg=mesh_region::all_convexes(),
+ int extrapolation = 0, const mesh_region
&rg_source=mesh_region::all_convexes(),
size_type nbdof_ = size_type(-1));
// Not tested
Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=4706&r1=4705&r2=4706&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Wed Jul 9 16:20:13 2014
@@ -8464,10 +8464,11 @@
virtual const mesh &linked_mesh(void) { return mti.linked_mesh(); }
ga_interpolation_context_mti(mesh_trans_inv &mti_, base_vector &r,
- int extrapolation, const mesh_region &rg,
+ int extrapolation,
+ const mesh_region &rg_source,
size_type nbdof_ = size_type(-1))
: result(r), mti(mti_), initialized(false), nbdof(nbdof_) {
- mti.distribute(extrapolation, rg);
+ mti.distribute(extrapolation, rg_source);
if (nbdof == size_type(-1)) nbdof = mti.nb_points();
}
};
@@ -8476,13 +8477,13 @@
// To be parallelized ...
void ga_interpolation_mti
(const getfem::model &md, const std::string &expr, mesh_trans_inv &mti,
- base_vector &result, int extrapolation, const mesh_region &rg,
- size_type nbdof) {
+ base_vector &result, const mesh_region &rg, int extrapolation,
+ const mesh_region &rg_source, size_type nbdof) {
ga_workspace workspace(md);
workspace.add_interpolation_expression(expr, mti.linked_mesh(), rg);
- ga_interpolation_context_mti gic(mti, result, extrapolation, rg, nbdof);
+ ga_interpolation_context_mti gic(mti, result, extrapolation, rg_source,
nbdof);
ga_interpolation(workspace, gic);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r4706 - in /trunk/getfem: interface/src/gf_model_get.cc src/getfem/getfem_generic_assembly.h src/getfem_generic_assembly.cc,
logari81 <=