[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r4730 - in /trunk/getfem/interface/src: gf_asm.cc gf_me
From: |
logari81 |
Subject: |
[Getfem-commits] r4730 - in /trunk/getfem/interface/src: gf_asm.cc gf_mesh_im_data_get.cc gf_mesh_im_data_set.cc |
Date: |
Mon, 21 Jul 2014 21:56:04 -0000 |
Author: logari81
Date: Mon Jul 21 23:56:03 2014
New Revision: 4730
URL: http://svn.gna.org/viewcvs/getfem?rev=4730&view=rev
Log:
minor improvements in the im_data interface for python/matlab
Modified:
trunk/getfem/interface/src/gf_asm.cc
trunk/getfem/interface/src/gf_mesh_im_data_get.cc
trunk/getfem/interface/src/gf_mesh_im_data_set.cc
Modified: trunk/getfem/interface/src/gf_asm.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_asm.cc?rev=4730&r1=4729&r2=4730&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_asm.cc (original)
+++ trunk/getfem/interface/src/gf_asm.cc Mon Jul 21 23:56:03 2014
@@ -423,8 +423,11 @@
std::string varname = in.pop().to_string();
bool is_cte = (in.pop().to_integer() == 0);
const getfem::mesh_fem *mf(0);
+ const getfem::im_data *mimd(0);
if (in.front().is_mesh_fem()) {
mf = in.pop().to_const_mesh_fem();
+ } else if (in.front().is_mesh_im_data()) {
+ mimd = in.pop().to_const_mesh_im_data();
}
darray U = in.pop().to_darray();
GMM_ASSERT1(vectors.find(varname) == vectors.end(),
@@ -432,19 +435,23 @@
gmm::resize(vectors[varname], U.size());
gmm::copy(U, vectors[varname]);
if (is_cte) {
- if (!mf)
+ if (mf)
+ workspace.add_fem_constant(varname, *mf, vectors[varname]);
+ else if (mimd)
+ workspace.add_im_data(varname, *mimd, vectors[varname]);
+ else
workspace.add_fixed_size_constant(varname, vectors[varname]);
- else
- workspace.add_fem_constant(varname, *mf, vectors[varname]);
} else {
- if (!mf) {
+ if (mf) {
+ gmm::sub_interval I(nbdof, mf->nb_dof());
+ nbdof += mf->nb_dof();
+ workspace.add_fem_variable(varname, *mf, I, vectors[varname]);
+ } else if (mimd) {
+ THROW_BADARG("Data defined on integration points can not be a
variable");
+ } else {
gmm::sub_interval I(nbdof, U.size());
nbdof += U.size();
workspace.add_fixed_size_variable(varname, I, vectors[varname]);
- } else {
- gmm::sub_interval I(nbdof, mf->nb_dof());
- nbdof += mf->nb_dof();
- workspace.add_fem_variable(varname, *mf, I, vectors[varname]);
}
}
}
@@ -1044,14 +1051,14 @@
);
- /address@hidden @CELL{...} = ('generic', @tmim mim, @int order, @str
expression, @int region, address@hidden varname, @int is_variable[, @tmf
mesh_fem], value], ...)
+ /address@hidden @CELL{...} = ('generic', @tmim mim, @int order, @str
expression, @int region, address@hidden varname, @int is_variable[,
address@hidden mf, @tmimd mimd}], value], ...)
High-level generic assembly procedure for volumic assembly.
Performs the generic assembly of `expression` with the integration
method `mim` on the mesh region of index `region` (-1 means all
- the element of the mesh). The smae mesh should be shared by
- the integration method and all the finite element methods
- corresponding to the variables.
+ the element of the mesh). The same mesh should be shared by
+ the integration method and all the finite element methods or
+ mesh_im_data corresponding to the variables.
`order` indicates either that the (scalar) potential
(order = 0) or the (vector) residual (order = 1) or the
@@ -1061,7 +1068,8 @@
region number. For each variable/constant, first the variable/constant
name should be given (as it is referred in the assembly string), then
1 if it is a variable or 0 for a constant, then the finite element
- method if it is a fem variable/constant, and the vector representing
+ method if it is a fem variable/constant or the mesh_im_data if it is
+ data defined on integration points, and the vector representing
the value of the variable/constant. It is possible to give an arbitrary
number of variable/constant. The difference between a variable and a
constant is that automatic differentiation is done with respect to
Modified: trunk/getfem/interface/src/gf_mesh_im_data_get.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_mesh_im_data_get.cc?rev=4730&r1=4729&r2=4730&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_mesh_im_data_get.cc (original)
+++ trunk/getfem/interface/src/gf_mesh_im_data_get.cc Mon Jul 21 23:56:03 2014
@@ -90,11 +90,21 @@
out.pop().from_integer(int(mimd->nb_filtered_index()));
);
- /address@hidden ('tensor_size')
+ /address@hidden ('nb tensor elements')
Output the size of the stored data (per integration point).
@*/
sub_command
- ("tensor_size", 0, 0, 0, 1,
+ ("nb tensor elements", 0, 0, 0, 1,
+ if (mimd->tensor_size().size()) {
+ out.pop().from_integer(int(mimd->nb_tensor_elem()));
+ }
+ );
+
+ /address@hidden ('tensor size')
+ Output the size of the stored data (per integration point).
+ @*/
+ sub_command
+ ("tensor size", 0, 0, 0, 1,
if (mimd->tensor_size().size()) {
iarray oidx =
out.pop().create_iarray_h(unsigned(mimd->tensor_size().size()));
std::copy(mimd->tensor_size().begin(),
Modified: trunk/getfem/interface/src/gf_mesh_im_data_set.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_mesh_im_data_set.cc?rev=4730&r1=4729&r2=4730&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_mesh_im_data_set.cc (original)
+++ trunk/getfem/interface/src/gf_mesh_im_data_set.cc Mon Jul 21 23:56:03 2014
@@ -42,8 +42,8 @@
@*/
size_type rnum = size_type(in.pop().to_integer());
mimd->set_region(rnum);
- } else if (check_cmd(cmd, "tensor_size", in, out, 1, 1, 0, 0)) {
- /address@hidden ('tensor_size', )
+ } else if (check_cmd(cmd, "tensor size", in, out, 1, 1, 0, 0)) {
+ /address@hidden ('tensor size', )
Set the size of the data per integration point.
@*/
iarray v = in.pop().to_iarray(-1);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r4730 - in /trunk/getfem/interface/src: gf_asm.cc gf_mesh_im_data_get.cc gf_mesh_im_data_set.cc,
logari81 <=