Skip to content

Commit ec027e6

Browse files
committed
Fix Issue #182
1 parent f1a971e commit ec027e6

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
@@ -304,8 +304,8 @@ namespace mgis::behaviour {
304304
std::copy(from.begin(), from.end(), to.begin());
305305
}; // end update_span
306306
auto update_field_holder =
307-
[&check_size](MaterialStateManager::FieldHolder& to,
308-
const MaterialStateManager::FieldHolder& from) {
307+
[&o, &check_size](MaterialStateManager::FieldHolder& to,
308+
const MaterialStateManager::FieldHolder& from) {
309309
if (std::holds_alternative<mgis::real>(from)) {
310310
to = std::get<mgis::real>(from);
311311
} else if (std::holds_alternative<std::vector<mgis::real>>(from)) {
@@ -318,6 +318,11 @@ namespace mgis::behaviour {
318318
} else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
319319
// reuse existing memory
320320
auto& to_v = std::get<std::vector<mgis::real>>(to);
321+
if (to_v.size() != from_v.size()) {
322+
if (to_v.size() * o.n == from_v.size()) {
323+
to_v.resize(from_v.size());
324+
}
325+
}
321326
check_size(from_v.size(), to_v.size());
322327
std::copy(from_v.begin(), from_v.end(), to_v.begin());
323328
} else {
@@ -333,7 +338,12 @@ namespace mgis::behaviour {
333338
std::copy(from_v.begin(), from_v.end(), to_v.begin());
334339
} else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
335340
// reuse existing memory
336-
auto to_v = std::get<std::vector<mgis::real>>(to);
341+
auto& to_v = std::get<std::vector<mgis::real>>(to);
342+
if (to_v.size() != from_v.size()) {
343+
if (to_v.size() * o.n == from_v.size()) {
344+
to_v.resize(from_v.size());
345+
}
346+
}
337347
check_size(from_v.size(), to_v.size());
338348
std::copy(from_v.begin(), from_v.end(), to_v.begin());
339349
} else {

0 commit comments

Comments
 (0)