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