@@ -275,8 +275,8 @@ namespace mgis::behaviour {
275275 std::copy (from.begin (), from.end (), to.begin ());
276276 }; // end update_span
277277 auto update_field_holder =
278- [&check_size](MaterialStateManager::FieldHolder& to,
279- const MaterialStateManager::FieldHolder& from) {
278+ [&o, & check_size](MaterialStateManager::FieldHolder& to,
279+ const MaterialStateManager::FieldHolder& from) {
280280 if (std::holds_alternative<mgis::real>(from)) {
281281 to = std::get<mgis::real>(from);
282282 } else if (std::holds_alternative<std::vector<mgis::real>>(from)) {
@@ -289,6 +289,11 @@ namespace mgis::behaviour {
289289 } else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
290290 // reuse existing memory
291291 auto & to_v = std::get<std::vector<mgis::real>>(to);
292+ if (to_v.size () != from_v.size ()) {
293+ if (to_v.size () * o.n == from_v.size ()) {
294+ to_v.resize (from_v.size ());
295+ }
296+ }
292297 check_size (from_v.size (), to_v.size ());
293298 std::copy (from_v.begin (), from_v.end (), to_v.begin ());
294299 } else {
@@ -304,7 +309,12 @@ namespace mgis::behaviour {
304309 std::copy (from_v.begin (), from_v.end (), to_v.begin ());
305310 } else if (std::holds_alternative<std::vector<mgis::real>>(to)) {
306311 // reuse existing memory
307- auto to_v = std::get<std::vector<mgis::real>>(to);
312+ auto & to_v = std::get<std::vector<mgis::real>>(to);
313+ if (to_v.size () != from_v.size ()) {
314+ if (to_v.size () * o.n == from_v.size ()) {
315+ to_v.resize (from_v.size ());
316+ }
317+ }
308318 check_size (from_v.size (), to_v.size ());
309319 std::copy (from_v.begin (), from_v.end (), to_v.begin ());
310320 } else {
0 commit comments