@@ -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