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