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