[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r5449 - in /trunk/getfem: contrib/opt_assembly/ src/ sr
From: |
Yves . Renard |
Subject: |
[Getfem-commits] r5449 - in /trunk/getfem: contrib/opt_assembly/ src/ src/getfem/ |
Date: |
Thu, 27 Oct 2016 19:52:19 -0000 |
Author: renard
Date: Thu Oct 27 21:52:18 2016
New Revision: 5449
URL: http://svn.gna.org/viewcvs/getfem?rev=5449&view=rev
Log:
some small optimizations
Modified:
trunk/getfem/contrib/opt_assembly/opt_assembly.cc
trunk/getfem/src/getfem/getfem_context.h
trunk/getfem/src/getfem/getfem_mesh_fem.h
trunk/getfem/src/getfem_context.cc
trunk/getfem/src/getfem_generic_assembly.cc
trunk/getfem/src/getfem_mesh_fem.cc
Modified: trunk/getfem/contrib/opt_assembly/opt_assembly.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/opt_assembly/opt_assembly.cc?rev=5449&r1=5448&r2=5449&view=diff
==============================================================================
--- trunk/getfem/contrib/opt_assembly/opt_assembly.cc (original)
+++ trunk/getfem/contrib/opt_assembly/opt_assembly.cc Thu Oct 27 21:52:18 2016
@@ -256,7 +256,7 @@
bool all = false;
bool select = true;
- int only_one = 2;
+ int only_one = 1;
if (all || select || only_one == 1) {
VEC_TEST_1("Test for source term", ndofu, "u.Test_u", mim, size_type(-1),
Modified: trunk/getfem/src/getfem/getfem_context.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_context.h?rev=5449&r1=5448&r2=5449&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_context.h (original)
+++ trunk/getfem/src/getfem/getfem_context.h Thu Oct 27 21:52:18 2016
@@ -97,15 +97,16 @@
void sup_dependent_(const context_dependencies &cd) const;
void sup_dependency_(const context_dependencies &cd) const;
- void invalid_context(void) const;
+ void invalid_context() const;
+ bool go_check() const;
public :
/** this function has to be defined and should update the object when
the context is modified. */
- virtual void update_from_context(void) const = 0;
+ virtual void update_from_context() const = 0;
- void change_context(void) const
+ void change_context() const
{
if (state == CONTEXT_NORMAL)
{
@@ -125,11 +126,12 @@
void clear_dependencies();
- bool is_context_valid(void) const { return (state != CONTEXT_INVALID); }
+ bool is_context_valid() const { return (state != CONTEXT_INVALID); }
bool is_context_changed() const { return (state == CONTEXT_CHANGED); }
/** return true if update_from_context was called */
- bool context_check(void) const;
- void touch(void) const;
+ bool context_check() const
+ { if (state == CONTEXT_NORMAL) return false; return go_check(); }
+ void touch() const;
virtual ~context_dependencies();
context_dependencies() : state(CONTEXT_NORMAL), touched( ) {touched =
false;}
context_dependencies(const context_dependencies& cd);
Modified: trunk/getfem/src/getfem/getfem_mesh_fem.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_mesh_fem.h?rev=5449&r1=5448&r2=5449&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_mesh_fem.h (original)
+++ trunk/getfem/src/getfem/getfem_mesh_fem.h Thu Oct 27 21:52:18 2016
@@ -153,7 +153,7 @@
void copy_from(const mesh_fem &mf); /* Remember to change copy_from if
adding components to mesh_fem */
- dal::dynamic_array<pfem> f_elems;
+ std::vector<pfem> f_elems;
dal::bit_vector fe_convex;
const mesh *linked_mesh_;
REDUCTION_MATRIX R_;
@@ -424,7 +424,7 @@
* vectorization due to qdim nor the optional reduction.
*/
virtual pfem fem_of_element(size_type cv) const
- { return f_elems[cv]; }
+ { return f_elems[cv]; }
/** Give an array of the dof numbers a of convex.
* @param cv the convex number.
* @return a pseudo-container of the dof number.
@@ -577,7 +577,7 @@
size_type memsize() const {
return dof_structure.memsize() +
sizeof(mesh_fem) - sizeof(bgeot::mesh_structure) +
- f_elems.memsize() + fe_convex.memsize();
+ f_elems.size() * sizeof(pfem) + fe_convex.memsize();
}
void init_with_mesh(const mesh &me, dim_type Q = 1);
/** Build a new mesh_fem. A mesh object must be supplied.
@@ -660,6 +660,29 @@
}
}
+ template <typename VEC1, typename VEC2>
+ void slice_vector_on_basic_dof_of_element(const mesh_fem &mf,
+ const VEC1 &vec,
+ size_type cv, VEC2 &coeff,
+ size_type qmult) {
+ auto &ct = mf.ind_scalar_basic_dof_of_element(cv);
+ size_type qmult2 = mf.get_qdim();
+ if (qmult2 > 1) qmult2 /= mf.fem_of_element(cv)->target_dim();
+ size_type qmultot = qmult*qmult2;
+ gmm::resize(coeff, ct.size()*qmultot);
+
+ auto it = ct.begin();
+ auto itc = coeff.begin();
+ if (qmultot == 1) {
+ for (; it != ct.end(); ++it) *itc++ = vec[*it];
+ } else {
+ for (; it != ct.end(); ++it) {
+ auto itv = vec.begin()+(*it)*qmult;
+ for (size_type m = 0; m < qmultot; ++m) *itc++ = *itv++;
+ }
+ }
+ }
+
void vectorize_base_tensor(const base_tensor &t, base_matrix &vt,
size_type ndof, size_type qdim, size_type N);
Modified: trunk/getfem/src/getfem_context.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_context.cc?rev=5449&r1=5448&r2=5449&view=diff
==============================================================================
--- trunk/getfem/src/getfem_context.cc (original)
+++ trunk/getfem/src/getfem_context.cc Thu Oct 27 21:52:18 2016
@@ -62,7 +62,7 @@
dependencies.resize(s);
}
- void context_dependencies::invalid_context(void) const {
+ void context_dependencies::invalid_context() const {
if (state != CONTEXT_INVALID)
{
iterator_list it = dependent.begin(), ite = dependent.end();
@@ -84,7 +84,7 @@
cd.dependent.push_back(this);
}
- bool context_dependencies::context_check(void) const
+ bool context_dependencies::go_check() const
{
if (state == CONTEXT_CHANGED)
{
@@ -103,7 +103,7 @@
return false;
}
- void context_dependencies::touch(void) const
+ void context_dependencies::touch() const
{
if (!touched)
{
Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=5449&r1=5448&r2=5449&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Thu Oct 27 21:52:18 2016
@@ -2708,23 +2708,26 @@
cv_old(-1) {}
};
+
struct ga_instruction_slice_local_dofs : public ga_instruction {
const mesh_fem &mf;
const base_vector &U;
const fem_interpolation_context &ctx;
base_vector &coeff;
const size_type &ipt;
+ size_type qmult;
virtual int exec() {
- GA_DEBUG_INFO("Instruction: Slice local dofs");
if (ipt == 0) {
- slice_vector_on_basic_dof_of_element(mf, U, ctx.convex_num(), coeff);
+ GA_DEBUG_INFO("Instruction: Slice local dofs");
+ slice_vector_on_basic_dof_of_element(mf,U,ctx.convex_num(),coeff,qmult);
}
return 0;
}
ga_instruction_slice_local_dofs(const mesh_fem &mf_, const base_vector &U_,
const fem_interpolation_context &ctx_,
- base_vector &coeff_, const size_type &ipt_)
- : mf(mf_), U(U_), ctx(ctx_), coeff(coeff_), ipt(ipt_) {}
+ base_vector &coeff_, const size_type &ipt_,
+ size_type qmult_)
+ : mf(mf_), U(U_), ctx(ctx_), coeff(coeff_), ipt(ipt_), qmult(qmult_) {}
};
struct ga_instruction_update_pfp : public ga_instruction {
@@ -10597,7 +10600,8 @@
// cout << "local dof of " << pnode->name << endl;
pgai = std::make_shared<ga_instruction_slice_local_dofs>
(*mf, *(gis.extended_vars[pnode->name]), gis.ctx,
- rmi.local_dofs[pnode->name], gis.ipt);
+ rmi.local_dofs[pnode->name], gis.ipt,
+ gis.extended_vars[pnode->name]->size() / mf->nb_basic_dof());
rmi.instructions.push_back(std::move(pgai));
}
Modified: trunk/getfem/src/getfem_mesh_fem.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_mesh_fem.cc?rev=5449&r1=5448&r2=5449&view=diff
==============================================================================
--- trunk/getfem/src/getfem_mesh_fem.cc (original)
+++ trunk/getfem/src/getfem_mesh_fem.cc Thu Oct 27 21:52:18 2016
@@ -142,11 +142,21 @@
"Incompatibility between Qdim=" << int(Qdim) <<
" and target_dim " << int(pf->target_dim()) << " of " <<
name_of_fem(pf));
- if (!fe_convex.is_in(cv) || f_elems[cv] != pf) {
- fe_convex.add(cv);
- f_elems[cv] = pf;
- dof_enumeration_made = false;
+
+
+ if (cv == f_elems.size()) {
+ f_elems.push_back(pf);
+ fe_convex.add(cv);
+ dof_enumeration_made = false;
touch(); v_num = act_counter();
+ } else {
+ if (cv > f_elems.size()) f_elems.resize(cv+1);
+ if (!fe_convex.is_in(cv) || f_elems[cv] != pf) {
+ fe_convex.add(cv);
+ f_elems[cv] = pf;
+ dof_enumeration_made = false;
+ touch(); v_num = act_counter();
+ }
}
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5449 - in /trunk/getfem: contrib/opt_assembly/ src/ src/getfem/,
Yves . Renard <=