Error with ALE.move

Esteemed,

I searched here on the Discourse but I couldn’t find the answer.

I’m trying to run the examples that contain the command ALE.move, such as demo_submesh.py and the demo_ale.py example itself, and in all cases I have the following error return:

File "/Users/...../demo_ale.py", line 42, in <module>
      ALE.move (mesh, boundary)

File "/Users/.../opt/anaconda3/envs/fenics2/lib/python3.8/site-packages/fenics_adjoint/types/mesh.py", line 133, in motion
      assert isinstance (mesh, OverloadedType)

AssertionError

It looks like an error linked to installing Adjoint. Can anybody help me?

The demo_ale.py code follows below:

"""This demo demonstrates how to move the vertex coordinates of a
boundary mesh and then updating the interior vertex coordinates of the
original mesh by suitably interpolating the vertex coordinates (useful
for implementation of ALE methods)."""

# Copyright (C) 2008 Solveig Bruvoll and Anders Logg
#
# This file is part of DOLFIN.
#
# DOLFIN is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# DOLFIN is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
#
# First added:  2008-05-02
# Last changed: 2008-12-12

from dolfin import *
import matplotlib.pyplot as plt


# Create mesh
mesh = UnitSquareMesh(20, 20)

# Create boundary mesh
boundary = BoundaryMesh(mesh, "exterior")

# Move vertices in boundary
for x in boundary.coordinates():
    x[0] *= 3.0
    x[1] += 0.1*sin(5.0*x[0])

# Move mesh
ALE.move(mesh, boundary)

# Plot mesh
plot(mesh)
plt.show()

# Write mesh to file
File("deformed_mesh.pvd") << mesh

The command you are trying to use is not supported with dolfin-adjoint.

However, the code you are showing does not import dolfin-adjoint, and runs fine on my system.

Are you sure that you are running the exact code you have stated below?
If yes, how did you install dolfin, and what is the output of python3 -c "import dolfin; print(dolfin.__version__, dolfin)"

1 Like

Dear, I don’t know what happened but it was some internal error by Spyder. I restarted the computer and it worked.

But taking advantage of your comment, there are two examples on the Dolfin-Adjoint website that use the ALE.move command:
1 - Drag minimization over an obstacle in Stokes-flow
2 - Tube shape-derivatives
(the two examples above are working here)

Could you explain better the reason for saying that the command is not supported by dolfin adjoint?

The two command used in dolfin-adjoint supports the input mesh and function to perturb the mesh. This is because the second argument is annotated a s a control variable (the deformation field). With dolfin-adjoint, there is no way of specifying the BoundaryMesh as a control, and thus it cannot be used as input to ALE.move when used with dolfin-adjoint.