[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r5287 - in /trunk/getfem: interface/src/ src/ src/getfe
From: |
Yves . Renard |
Subject: |
[Getfem-commits] r5287 - in /trunk/getfem: interface/src/ src/ src/getfem/ |
Date: |
Tue, 05 Apr 2016 09:31:58 -0000 |
Author: renard
Date: Tue Apr 5 11:31:57 2016
New Revision: 5287
URL: http://svn.gna.org/viewcvs/getfem?rev=5287&view=rev
Log:
small optimization of enumerate_dof (precomputation of the face of dofs)
Modified:
trunk/getfem/interface/src/getfemint.h
trunk/getfem/interface/src/getfemint_misc.cc
trunk/getfem/src/getfem/getfem_fem.h
trunk/getfem/src/getfem_fem.cc
trunk/getfem/src/getfem_mesh_fem.cc
Modified: trunk/getfem/interface/src/getfemint.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/getfemint.h?rev=5287&r1=5286&r2=5287&view=diff
==============================================================================
--- trunk/getfem/interface/src/getfemint.h (original)
+++ trunk/getfem/interface/src/getfemint.h Tue Apr 5 11:31:57 2016
@@ -141,7 +141,7 @@
unsigned ndim_;
unsigned sizes_[ARRAY_DIMENSIONS_MAXDIM];
public:
- array_dimensions(): sz(0), ndim_(0) {}
+ array_dimensions(): sz(0), ndim_(0) { sizes_[0]=0; sizes_[1]=0; }
void push_back(unsigned d) {
GMM_ASSERT1(ndim_ != ARRAY_DIMENSIONS_MAXDIM-1,
" max. nb of dimensions for an output argument exceeded!");
Modified: trunk/getfem/interface/src/getfemint_misc.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/getfemint_misc.cc?rev=5287&r1=5286&r2=5287&view=diff
==============================================================================
--- trunk/getfem/interface/src/getfemint_misc.cc (original)
+++ trunk/getfem/interface/src/getfemint_misc.cc Tue Apr 5 11:31:57 2016
@@ -277,7 +277,7 @@
std::vector<size_type> cvpt(m.ind_points_of_convex(cv).begin(),
m.ind_points_of_convex(cv).end());
bgeot::mesh_edge_list_convex(m.structure_of_convex(cv), cvpt, cv,
elcv, merge_convex);
if (v.getm() == 2) { /* face numbers present */
- /* loop while the convex number is do not change */
+ /* loop while the convex number do not change */
do {
mesh_edge_list_merge(m, el, elcv, int(cv),
int(v(1,unsigned(j))-config::base_index()));
j++;
Modified: trunk/getfem/src/getfem/getfem_fem.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_fem.h?rev=5287&r1=5286&r2=5287&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_fem.h (original)
+++ trunk/getfem/src/getfem/getfem_fem.h Tue Apr 5 11:31:57 2016
@@ -240,6 +240,7 @@
inherits from dal::static_stored_object
*/
std::shared_ptr<bgeot::convex_structure> cvs_node;
+ std::vector<std::vector<short_type>> face_tab; // face list for each dof
bgeot::convex<base_node> cv_node;
mutable bgeot::pstored_point_tab pspt;
mutable bool pspt_valid;
@@ -315,6 +316,8 @@
*/
const base_node &node_of_dof(size_type cv, size_type i) const
{ return (*(node_tab(cv)))[i];}
+ virtual const std::vector<short_type> &
+ faces_of_dof(size_type /*cv*/, size_type i) const { return face_tab[i]; }
bool is_on_real_element(void) const { return real_element_defined; }
bool is_equivalent(void) const { return is_equiv; }
bool need_G(void) const
@@ -459,28 +462,7 @@
{ copy(f); DAL_STORED_OBJECT_DEBUG_CREATED(this, "Fem"); }
virtual ~virtual_fem() { DAL_STORED_OBJECT_DEBUG_DESTROYED(this, "Fem"); }
private:
- void copy(const virtual_fem &f) {
- dof_types_ = f.dof_types_;
-
- cvs_node = bgeot::new_convex_structure();
- *cvs_node = *f.cvs_node; // deep copy
- cv_node = f.cv_node;
- cv_node.structure() = cvs_node;
- pspt = 0;
- pspt_valid = false;
- cvr = f.cvr;
- dim_ = f.dim_;
- ntarget_dim = f.ntarget_dim;
- vtype = f.vtype;
- is_equiv = f.is_equiv;
- is_lag = f.is_lag;
- is_pol = f.is_pol;
- is_polycomp = f.is_polycomp;
- real_element_defined = f.real_element_defined;
- es_degree = f.es_degree;
- hier_raff = f.hier_raff;
- debug_name_ = f.debug_name_;
- }
+ void copy(const virtual_fem &f);
};
/**
Modified: trunk/getfem/src/getfem_fem.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_fem.cc?rev=5287&r1=5286&r2=5287&view=diff
==============================================================================
--- trunk/getfem/src/getfem_fem.cc (original)
+++ trunk/getfem/src/getfem_fem.cc Tue Apr 5 11:31:57 2016
@@ -519,10 +519,13 @@
cv_node.points().resize(nb+1);
cv_node.points()[nb] = pt;
dof_types_.resize(nb+1);
+ face_tab.resize(nb+1);
dof_types_[nb] = d;
cvs_node->add_point_adaptative(nb, short_type(-1));
- for (dal::bv_visitor f(faces); !f.finished(); ++f)
+ for (dal::bv_visitor f(faces); !f.finished(); ++f) {
cvs_node->add_point_adaptative(nb, short_type(f));
+ face_tab[nb].push_back(short_type(f));
+ }
pspt_valid = false;
}
@@ -538,6 +541,7 @@
void virtual_fem::init_cvs_node(void) {
cvs_node->init_for_adaptative(cvr->structure());
cv_node = bgeot::convex<base_node>(cvs_node);
+ face_tab.resize(0);
pspt_valid = false;
}
@@ -546,6 +550,29 @@
pspt_valid = false;
}
+ void virtual_fem::copy(const virtual_fem &f) {
+ dof_types_ = f.dof_types_;
+ cvs_node = bgeot::new_convex_structure();
+ *cvs_node = *f.cvs_node; // deep copy
+ cv_node = f.cv_node;
+ cv_node.structure() = cvs_node;
+ pspt = 0;
+ pspt_valid = false;
+ cvr = f.cvr;
+ dim_ = f.dim_;
+ ntarget_dim = f.ntarget_dim;
+ vtype = f.vtype;
+ is_equiv = f.is_equiv;
+ is_lag = f.is_lag;
+ is_pol = f.is_pol;
+ is_polycomp = f.is_polycomp;
+ real_element_defined = f.real_element_defined;
+ es_degree = f.es_degree;
+ hier_raff = f.hier_raff;
+ debug_name_ = f.debug_name_;
+ face_tab = f.face_tab;
+ }
+
/* ******************************************************************** */
/* PK class.
*/
/* ******************************************************************** */
Modified: trunk/getfem/src/getfem_mesh_fem.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_mesh_fem.cc?rev=5287&r1=5286&r2=5287&view=diff
==============================================================================
--- trunk/getfem/src/getfem_mesh_fem.cc (original)
+++ trunk/getfem/src/getfem_mesh_fem.cc Tue Apr 5 11:31:57 2016
@@ -315,7 +315,6 @@
// Auxilliary variables
std::vector<size_type> itab;
- std::vector<std::vector<short_type>> ftab;
base_node P(linked_mesh().dim());
fem_dof fd;
bgeot::mesh_structure::ind_set s;
@@ -336,14 +335,6 @@
size_type nbd = pf->nb_dof(cv);
pdof_description andof = global_dof(pf->dim());
itab.resize(nbd);
-
- // determine for each dof on which faces it lies
- ftab.resize(nbd);
- for (size_type i = 0; i < nbd; ++i) ftab[i].resize(0);
- for (short_type f = 0; f < pf->structure(cv)->nb_faces(); ++f) {
- for (short_type i : pf->structure(cv)->ind_points_of_face(f))
- ftab[i].push_back(f);
- }
for (size_type i = 0; i < nbd; i++) { // Loop on dofs
fd.pnd = pf->dof_types()[i];
@@ -363,7 +354,7 @@
} else { // For a standard linkable dof
pgp->transform(linked_mesh().points_of_convex(cv), i, P);
size_type idof = nbdof;
- linked_mesh().neighbours_of_convex(cv, ftab[i], s);
+ linked_mesh().neighbours_of_convex(cv, pf->faces_of_dof(cv, i), s);
for (size_type ncv : s) { // For each neighbour
// control if the dof already exists.
fd.ind_node = dof_nodes[ncv].search_node(P);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5287 - in /trunk/getfem: interface/src/ src/ src/getfem/,
Yves . Renard <=