diff --git a/changelog-entries/554.md b/changelog-entries/554.md new file mode 100644 index 000000000..0896242d2 --- /dev/null +++ b/changelog-entries/554.md @@ -0,0 +1 @@ +- Use `assign` function instead of directly accessing vectors in perpendicular-flap/solid-fenics. Fixes problem with checkpointing. diff --git a/perpendicular-flap/solid-fenics/solid.py b/perpendicular-flap/solid-fenics/solid.py index dc07af7cc..20d3e1f07 100644 --- a/perpendicular-flap/solid-fenics/solid.py +++ b/perpendicular-flap/solid-fenics/solid.py @@ -158,16 +158,14 @@ def update_v(a, u_old, v_old, a_old, ufl=True): def update_fields(u, u_old, v_old, a_old): """Update all fields at the end of a timestep.""" - u_vec, u0_vec = u.vector(), u_old.vector() - v0_vec, a0_vec = v_old.vector(), a_old.vector() - # call update functions - a_vec = update_a(u_vec, u0_vec, v0_vec, a0_vec, ufl=False) - v_vec = update_v(a_vec, u0_vec, v0_vec, a0_vec, ufl=False) + a_new = update_a(u, u_old, v_old, a_old) + v_new = update_v(u, u_old, v_old, a_old) - # assign u->u_old - v_old.vector()[:], a_old.vector()[:] = v_vec, a_vec - u_old.vector()[:] = u.vector() + # update values + a_old.assign(project(a_new, V)) + v_old.assign(project(v_new, V)) + u_old.assign(u) def avg(x_old, x_new, alpha): @@ -238,7 +236,6 @@ def avg(x_old, x_new, alpha): n = n_cp else: update_fields(u_np1, u_n, v_n, a_n) - u_n.assign(u_np1) t += float(dt) n += 1