Skip to content

Commit 2632a17

Browse files
committed
Fix Issue #182
1 parent 481d0e6 commit 2632a17

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
@@ -401,8 +401,8 @@ namespace mgis::behaviour {
401401
std::copy(from.begin(), from.end(), to.begin());
402402
}; // end update_span
403403
auto update_field_holder =
404-
[&check_size](MaterialStateManager::FieldHolder& to,
405-
const MaterialStateManager::FieldHolder& from) {
404+
[&o, &check_size](MaterialStateManager::FieldHolder& to,
405+
const MaterialStateManager::FieldHolder& from) {
406406
if (std::holds_alternative<mgis::real>(from)) {
407407
to = std::get<mgis::real>(from);
408408
} else if (std::holds_alternative<std::vector<mgis::real>>(from)) {
@@ -415,6 +415,11 @@ namespace mgis::behaviour {
415415
} else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
416416
// reuse existing memory
417417
auto& to_v = std::get<std::vector<mgis::real>>(to);
418+
if (to_v.size() != from_v.size()) {
419+
if (to_v.size() * o.n == from_v.size()) {
420+
to_v.resize(from_v.size());
421+
}
422+
}
418423
check_size(from_v.size(), to_v.size());
419424
std::copy(from_v.begin(), from_v.end(), to_v.begin());
420425
} else {
@@ -430,7 +435,12 @@ namespace mgis::behaviour {
430435
std::copy(from_v.begin(), from_v.end(), to_v.begin());
431436
} else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
432437
// reuse existing memory
433-
auto to_v = std::get<std::vector<mgis::real>>(to);
438+
auto& to_v = std::get<std::vector<mgis::real>>(to);
439+
if (to_v.size() != from_v.size()) {
440+
if (to_v.size() * o.n == from_v.size()) {
441+
to_v.resize(from_v.size());
442+
}
443+
}
434444
check_size(from_v.size(), to_v.size());
435445
std::copy(from_v.begin(), from_v.end(), to_v.begin());
436446
} else {

0 commit comments

Comments
 (0)