[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] (no subject)
From: |
Yves Renard |
Subject: |
[Getfem-commits] (no subject) |
Date: |
Mon, 8 Apr 2019 08:14:42 -0400 (EDT) |
branch: master
commit 29638bd83676d40f20c1228a4a1fd3586e4a809a
Author: Yves Renard <address@hidden>
Date: Mon Apr 8 14:14:15 2019 +0200
remove the dependance of the model in the mesh_im of bricks. Force the
update of individual bricks when a mesh_im is changed
---
src/getfem_models.cc | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/src/getfem_models.cc b/src/getfem_models.cc
index 6cd0103..daa6f74 100644
--- a/src/getfem_models.cc
+++ b/src/getfem_models.cc
@@ -326,9 +326,10 @@ namespace getfem {
// In case of change in fems or mims, linear terms have to be recomputed
// We could select which brick is to be recomputed if we would be able
- // to know which fem or mim is changed.
- for (dal::bv_visitor ib(valid_bricks); !ib.finished(); ++ib)
- bricks[ib].terms_to_be_computed = true;
+ // to know which fem or mim is changed
+ // -> already taken into account in update_brick()
+ // for (dal::bv_visitor ib(valid_bricks); !ib.finished(); ++ib)
+ // bricks[ib].terms_to_be_computed = true;
for (auto &&v : variables) {
const std::string &vname = v.first;
@@ -865,6 +866,7 @@ namespace getfem {
variables[name].set_size();
act_size_to_be_done = true;
add_dependency(mf);
+ add_dependency(mim);
}
void model::disable_variable(const std::string &name) {
@@ -993,9 +995,9 @@ namespace getfem {
active_bricks.add(ib);
valid_bricks.add(ib);
-
- for (size_type i = 0; i < bricks[ib].mims.size(); ++i)
- add_dependency(*(bricks[ib].mims[i]));
+ // The brick itself already react to a mesh_im change in update_brick()
+ // for (size_type i = 0; i < bricks[ib].mims.size(); ++i)
+ // add_dependency(*(bricks[ib].mims[i]));
GMM_ASSERT1(pbr->is_real() || is_complex(),
"Impossible to add a complex brick to a real model");
@@ -1955,7 +1957,7 @@ namespace getfem {
|| brick.pbr->is_to_be_computed_each_time()
|| !(brick.pbr->is_linear());
- // check variable list to test if a mesh_fem as changed.
+ // check variable list to test if a mesh_fem has changed.
if (!tobecomputed ) {
for (size_type i = 0; i < brick.vlist.size() && !tobecomputed; ++i) {
var_description &vd = variables[brick.vlist[i]];
@@ -1972,6 +1974,13 @@ namespace getfem {
}
}
+ // Check if a mesh_im has changed
+ if (!tobecomputed ) {
+ for (size_type i = 0; i < brick.mims.size() && !tobecomputed; ++i) {
+ if (brick.mims[i]->version_number() > brick.v_num) tobecomputed = true;
+ }
+ }
+
if (tobecomputed) {
brick.external_load = scalar_type(0);