Skip to content

Commit dd3ea03

Browse files
committed
Fix Issue #182
1 parent 6f5bc95 commit dd3ea03

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

src/MaterialStateManager.cxx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ namespace mgis {
392392
std::copy(from.begin(), from.end(), to.begin());
393393
}; // end update_span
394394
auto update_field_holder =
395-
[&check_size](MaterialStateManager::FieldHolder& to,
395+
[&o, &check_size](MaterialStateManager::FieldHolder& to,
396396
const MaterialStateManager::FieldHolder& from) {
397397
if (mgis::holds_alternative<mgis::real>(from)) {
398398
to = mgis::get<mgis::real>(from);
@@ -406,6 +406,11 @@ namespace mgis {
406406
} else if (mgis::holds_alternative<std::vector<mgis::real>>(to)) {
407407
// reuse existing memory
408408
auto& to_v = mgis::get<std::vector<mgis::real>>(to);
409+
if (to_v.size() != from_v.size()) {
410+
if (to_v.size() * o.n == from_v.size()) {
411+
to_v.resize(from_v.size());
412+
}
413+
}
409414
check_size(from_v.size(), to_v.size());
410415
std::copy(from_v.begin(), from_v.end(), to_v.begin());
411416
} else {
@@ -421,7 +426,12 @@ namespace mgis {
421426
std::copy(from_v.begin(), from_v.end(), to_v.begin());
422427
} else if (mgis::holds_alternative<std::vector<mgis::real>>(to)) {
423428
// reuse existing memory
424-
auto to_v = mgis::get<std::vector<mgis::real>>(to);
429+
auto& to_v = mgis::get<std::vector<mgis::real>>(to);
430+
if (to_v.size() != from_v.size()) {
431+
if (to_v.size() * o.n == from_v.size()) {
432+
to_v.resize(from_v.size());
433+
}
434+
}
425435
check_size(from_v.size(), to_v.size());
426436
std::copy(from_v.begin(), from_v.end(), to_v.begin());
427437
} else {

0 commit comments

Comments
 (0)