Skip to content

Commit 2737b67

Browse files
committed
Fix Issue #182
1 parent 3fb7fab commit 2737b67

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

src/MaterialStateManager.cxx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,8 @@ namespace mgis::behaviour {
275275
std::copy(from.begin(), from.end(), to.begin());
276276
}; // end update_span
277277
auto update_field_holder =
278-
[&check_size](MaterialStateManager::FieldHolder& to,
279-
const MaterialStateManager::FieldHolder& from) {
278+
[&o, &check_size](MaterialStateManager::FieldHolder& to,
279+
const MaterialStateManager::FieldHolder& from) {
280280
if (std::holds_alternative<mgis::real>(from)) {
281281
to = std::get<mgis::real>(from);
282282
} else if (std::holds_alternative<std::vector<mgis::real>>(from)) {
@@ -289,6 +289,11 @@ namespace mgis::behaviour {
289289
} else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
290290
// reuse existing memory
291291
auto& to_v = std::get<std::vector<mgis::real>>(to);
292+
if (to_v.size() != from_v.size()) {
293+
if (to_v.size() * o.n == from_v.size()) {
294+
to_v.resize(from_v.size());
295+
}
296+
}
292297
check_size(from_v.size(), to_v.size());
293298
std::copy(from_v.begin(), from_v.end(), to_v.begin());
294299
} else {
@@ -304,7 +309,12 @@ namespace mgis::behaviour {
304309
std::copy(from_v.begin(), from_v.end(), to_v.begin());
305310
} else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
306311
// reuse existing memory
307-
auto to_v = std::get<std::vector<mgis::real>>(to);
312+
auto& to_v = std::get<std::vector<mgis::real>>(to);
313+
if (to_v.size() != from_v.size()) {
314+
if (to_v.size() * o.n == from_v.size()) {
315+
to_v.resize(from_v.size());
316+
}
317+
}
308318
check_size(from_v.size(), to_v.size());
309319
std::copy(from_v.begin(), from_v.end(), to_v.begin());
310320
} else {

0 commit comments

Comments
 (0)