diff --git a/changelog-entries/554.md b/changelog-entries/554.md deleted file mode 100644 index 0896242d2..000000000 --- a/changelog-entries/554.md +++ /dev/null @@ -1 +0,0 @@ -- Use `assign` function instead of directly accessing vectors in perpendicular-flap/solid-fenics. Fixes problem with checkpointing. diff --git a/perpendicular-flap/solid-fenics/requirements.txt b/perpendicular-flap/solid-fenics/requirements.txt index fe29958de..9bfbff756 100644 --- a/perpendicular-flap/solid-fenics/requirements.txt +++ b/perpendicular-flap/solid-fenics/requirements.txt @@ -1,4 +1,4 @@ -fenicsprecice~=2.0 +fenicsprecice~=2.2 numpy >1, <2 matplotlib diff --git a/perpendicular-flap/solid-fenics/solid.py b/perpendicular-flap/solid-fenics/solid.py index 20d3e1f07..dc07af7cc 100644 --- a/perpendicular-flap/solid-fenics/solid.py +++ b/perpendicular-flap/solid-fenics/solid.py @@ -158,14 +158,16 @@ 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_new = update_a(u, u_old, v_old, a_old) - v_new = update_v(u, u_old, v_old, a_old) + 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) - # update values - a_old.assign(project(a_new, V)) - v_old.assign(project(v_new, V)) - u_old.assign(u) + # assign u->u_old + v_old.vector()[:], a_old.vector()[:] = v_vec, a_vec + u_old.vector()[:] = u.vector() def avg(x_old, x_new, alpha): @@ -236,6 +238,7 @@ 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