[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r5076 - in /trunk/getfem/src: getfem/bgeot_tensor.h get
From: |
Yves . Renard |
Subject: |
[Getfem-commits] r5076 - in /trunk/getfem/src: getfem/bgeot_tensor.h getfem/getfem_level_set.h getfem/getfem_mesher.h getfem_fem_level_set.cc |
Date: |
Wed, 02 Sep 2015 14:43:01 -0000 |
Author: renard
Date: Wed Sep 2 16:43:00 2015
New Revision: 5076
URL: http://svn.gna.org/viewcvs/getfem?rev=5076&view=rev
Log:
slight optimization of fem_level_set eval
Modified:
trunk/getfem/src/getfem/bgeot_tensor.h
trunk/getfem/src/getfem/getfem_level_set.h
trunk/getfem/src/getfem/getfem_mesher.h
trunk/getfem/src/getfem_fem_level_set.cc
Modified: trunk/getfem/src/getfem/bgeot_tensor.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/bgeot_tensor.h?rev=5076&r1=5075&r2=5076&view=diff
==============================================================================
--- trunk/getfem/src/getfem/bgeot_tensor.h (original)
+++ trunk/getfem/src/getfem/bgeot_tensor.h Wed Sep 2 16:43:00 2015
@@ -221,6 +221,20 @@
this->resize(i*j);
}
+ void init(size_type i, size_type j, size_type k) {
+ sizes_.resize(3); sizes_[0] = i; sizes_[1] = j; sizes_[2] = k;
+ coeff.resize(3); coeff[0] = 1; coeff[1] = i; coeff[2] = i*j;
+ this->resize(i*j*k);
+ }
+
+ void init(size_type i, size_type j, size_type k, size_type l) {
+ sizes_.resize(4);
+ sizes_[0] = i; sizes_[1] = j; sizes_[2] = k; sizes_[3] = k;
+ coeff.resize(4);
+ coeff[0] = 1; coeff[1] = i; coeff[2] = i*j; coeff[3] = i*j*k;
+ this->resize(i*j*k*l);
+ }
+
void adjust_sizes(const multi_index &mi) {
if (!mi.size() || (mi.size() != sizes().size())
|| !(std::equal(mi.begin(), mi.end(), sizes().begin())))
@@ -234,6 +248,17 @@
void adjust_sizes(size_type i, size_type j)
{ if (sizes_.size() != 2 || sizes_[0] != i || sizes_[1] != j) init(i, j); }
+
+ void adjust_sizes(size_type i, size_type j, size_type k) {
+ if (sizes_.size() != 3 || sizes_[0] != i || sizes_[1] != j
+ || sizes_[2] != k)
+ init(i, j, k);
+ }
+ void adjust_sizes(size_type i, size_type j, size_type k, size_type l) {
+ if (sizes_.size() != 3 || sizes_[0] != i || sizes_[1] != j
+ || sizes_[2] != k || sizes_[3] != l)
+ init(i, j, k, l);
+ }
tensor(const multi_index &c) { init(c); }
tensor(size_type i, size_type j, size_type k, size_type l)
Modified: trunk/getfem/src/getfem/getfem_level_set.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_level_set.h?rev=5076&r1=5075&r2=5076&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_level_set.h (original)
+++ trunk/getfem/src/getfem/getfem_level_set.h Wed Sep 2 16:43:00 2015
@@ -67,6 +67,7 @@
public :
void set_shift(scalar_type shift_ls_) { shift_ls = shift_ls_; }
+ scalar_type get_shift(void) const { return shift_ls; }
void simplify(scalar_type eps = 0.01);
void update_from_context(void) const { }
void reinit(void);
Modified: trunk/getfem/src/getfem/getfem_mesher.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_mesher.h?rev=5076&r1=5075&r2=5076&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_mesher.h (original)
+++ trunk/getfem/src/getfem/getfem_mesher.h Wed Sep 2 16:43:00 2015
@@ -127,7 +127,11 @@
template <typename VECT>
mesher_level_set(pfem pf_, const VECT &coeff_,
scalar_type shift_ls_ = scalar_type(0)) {
- shift_ls = shift_ls_; init_base(pf_, coeff_);
+ init_base(pf_, coeff_);
+ set_shift(shift_ls_);
+ }
+ void set_shift(scalar_type shift_ls_) {
+ shift_ls = shift_ls_;
if (shift_ls != scalar_type(0)) {
base_node P(pf->dim()); base_small_vector G(pf->dim());
grad(P, G);
Modified: trunk/getfem/src/getfem_fem_level_set.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_fem_level_set.cc?rev=5076&r1=5075&r2=5076&view=diff
==============================================================================
--- trunk/getfem/src/getfem_fem_level_set.cc (original)
+++ trunk/getfem/src/getfem_fem_level_set.cc Wed Sep 2 16:43:00 2015
@@ -1,3 +1,4 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
/*===========================================================================
Copyright (C) 1999-2015 Yves Renard
@@ -94,17 +95,24 @@
void fem_level_set::find_zone_id(const fem_interpolation_context &c,
std::vector<bool> &ids) const {
- size_type s = 0;
+ size_type s = 0, cv = c.convex_num();
for (size_type i = 0; i < dofzones.size(); ++i)
if (dofzones[i]) s += dofzones[i]->size();
ids.resize(0); ids.resize(dofzones.size()+1, false);
// cout << "dofzones.size() = " << dofzones.size() << endl;
std::string z(common_ls_zones);
+ base_vector coeff(32);
+
+ mesher_level_set eval;
for (dal::bv_visitor i(ls_index); !i.finished(); ++i) {
- mesher_level_set eval = mls.get_level_set(i)->
- mls_of_convex(c.convex_num());
+ const level_set *ls = mls.get_level_set(i);
+ const mesh_fem &mf = ls->get_mesh_fem();
+ slice_vector_on_basic_dof_of_element(mf, ls->values(), cv, coeff);
+ eval.init_base(mf.fem_of_element(cv), coeff);
+ eval.set_shift(ls->get_shift());
+
+ // mesher_level_set eval = mls.get_level_set(i)->mls_of_convex(cv);
scalar_type v = eval(c.xref());
- // z[i] = (v > 1e-9) ? '+' : ((v < -1e-9) ? '-' : '0');
z[(size_t)i] = (v > 0.) ? '+' : '-';
}
unsigned cnt = 0;
@@ -112,7 +120,6 @@
if (!dofzones[d]) continue;
for (mesh_level_set::zoneset::const_iterator it = dofzones[d]->begin();
it != dofzones[d]->end(); ++it, ++cnt) {
- // cout << "cnt = " << cnt << endl;
ids[cnt] = false;
for (mesh_level_set::zone::const_iterator it2 = (*it)->begin();
it2 != (*it)->end(); ++it2) {
@@ -124,9 +131,9 @@
void fem_level_set::real_base_value(const fem_interpolation_context &c,
base_tensor &t, bool) const {
- bgeot::multi_index mi(2);
- mi[1] = target_dim(); mi[0] = short_type(nb_base(0));
- t.adjust_sizes(mi);
+ // bgeot::multi_index mi(2);
+ // mi[1] = target_dim(); mi[0] = short_type(nb_base(0));
+ t.adjust_sizes(nb_base(0), target_dim());
base_tensor::iterator it = t.begin();
fem_interpolation_context c0 = c;
if (c0.have_pfp())
@@ -151,10 +158,10 @@
void fem_level_set::real_grad_base_value(const fem_interpolation_context &c,
base_tensor &t, bool) const {
- bgeot::multi_index mi(3);
- mi[2] = short_type(c.N()); mi[1] = target_dim();
- mi[0] = short_type(nb_base(0));
- t.adjust_sizes(mi);
+ // bgeot::multi_index mi(3);
+ // mi[2] = short_type(c.N()); mi[1] = target_dim();
+ // mi[0] = short_type(nb_base(0));
+ t.adjust_sizes(nb_base(0), target_dim(), c.N());
fem_interpolation_context c0 = c;
if (c0.have_pfp())
c0.set_pfp(fem_precomp(bfem, &c0.pfp()->get_point_tab(), c0.pfp()));
@@ -182,11 +189,11 @@
}
void fem_level_set::real_hess_base_value(const fem_interpolation_context &c,
- base_tensor &t, bool) const {
- bgeot::multi_index mi(4);
- mi[3] = mi[2] = short_type(c.N()); mi[1] = target_dim();
- mi[0] = short_type(nb_base(0));
- t.adjust_sizes(mi);
+ base_tensor &t, bool) const {
+ // bgeot::multi_index mi(4);
+ // mi[3] = mi[2] = short_type(c.N()); mi[1] = target_dim();
+ // mi[0] = short_type(nb_base(0));
+ t.adjust_sizes(nb_base(0), target_dim(), c.N(), c.N());
fem_interpolation_context c0 = c;
if (c0.have_pfp())
c0.set_pfp(fem_precomp(bfem, &c0.pfp()->get_point_tab(), c0.pfp()));
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5076 - in /trunk/getfem/src: getfem/bgeot_tensor.h getfem/getfem_level_set.h getfem/getfem_mesher.h getfem_fem_level_set.cc,
Yves . Renard <=