Skip to content

Commit c2785a9

Browse files
committed
Fix Issue #182
1 parent 7b4e806 commit c2785a9

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
@@ -303,8 +303,8 @@ namespace mgis::behaviour {
303303
std::copy(from.begin(), from.end(), to.begin());
304304
}; // end update_span
305305
auto update_field_holder =
306-
[&check_size](MaterialStateManager::FieldHolder& to,
307-
const MaterialStateManager::FieldHolder& from) {
306+
[&o, &check_size](MaterialStateManager::FieldHolder& to,
307+
const MaterialStateManager::FieldHolder& from) {
308308
if (std::holds_alternative<mgis::real>(from)) {
309309
to = std::get<mgis::real>(from);
310310
} else if (std::holds_alternative<std::vector<mgis::real>>(from)) {
@@ -317,6 +317,11 @@ namespace mgis::behaviour {
317317
} else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
318318
// reuse existing memory
319319
auto& to_v = std::get<std::vector<mgis::real>>(to);
320+
if (to_v.size() != from_v.size()) {
321+
if (to_v.size() * o.n == from_v.size()) {
322+
to_v.resize(from_v.size());
323+
}
324+
}
320325
check_size(from_v.size(), to_v.size());
321326
std::copy(from_v.begin(), from_v.end(), to_v.begin());
322327
} else {
@@ -332,7 +337,12 @@ namespace mgis::behaviour {
332337
std::copy(from_v.begin(), from_v.end(), to_v.begin());
333338
} else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
334339
// reuse existing memory
335-
auto to_v = std::get<std::vector<mgis::real>>(to);
340+
auto& to_v = std::get<std::vector<mgis::real>>(to);
341+
if (to_v.size() != from_v.size()) {
342+
if (to_v.size() * o.n == from_v.size()) {
343+
to_v.resize(from_v.size());
344+
}
345+
}
336346
check_size(from_v.size(), to_v.size());
337347
std::copy(from_v.begin(), from_v.end(), to_v.begin());
338348
} else {

0 commit comments

Comments
 (0)