-
Notifications
You must be signed in to change notification settings - Fork 19
Open
Description
A debian bug at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1096535 reports that dolfinx_mpc fails to build (fails tests) with gcc-15:
Build log at http://qa-logs.debian.net/2025/02/16/amd64exp/dolfinx-mpc_0.9.0-2_unstable_gccexp.log.gz
There is a gcc-15 porting guide at http://gcc.gnu.org/gcc-15/porting_to.html
The report is for v0.9.0. I haven't tested independently, I don't know if it's fixed in 0.9.1.
sample error:
_________________________ test_cube_contact[True-C++] __________________________
generate_hex_boxes = (<dolfinx.mesh.Mesh object at 0x7f3c6595ae40>, <dolfinx.mesh.MeshTags object at 0x7f3c7748cb90>)
nonslip = True
get_assemblers = (<function assemble_matrix at 0x7f3c5d5e9d00>, <function assemble_vector at 0x7f3c5d5eb7e0>)
@pytest.mark.parametrize("get_assemblers", ["C++"], indirect=True)
@pytest.mark.parametrize("nonslip", [True, False])
def test_cube_contact(generate_hex_boxes, nonslip, get_assemblers): # noqa: F811
assemble_matrix, assemble_vector = get_assemblers
comm = MPI.COMM_WORLD
root = 0
# Generate mesh
mesh_data = generate_hex_boxes
mesh, mt = mesh_data
fdim = mesh.topology.dim - 1
# Create functionspaces
V = fem.functionspace(mesh, ("Lagrange", 1, (mesh.geometry.dim,)))
# Helper for orienting traction
# Bottom boundary is fixed in all directions
u_bc = fem.Function(V)
with u_bc.x.petsc_vec.localForm() as u_local:
u_local.set(0.0)
u_bc.x.petsc_vec.destroy()
bottom_dofs = fem.locate_dofs_topological(V, fdim, mt.find(5))
bc_bottom = fem.dirichletbc(u_bc, bottom_dofs)
g_vec = [0, 0, -4.25e-1]
if not nonslip:
# Helper for orienting traction
r_matrix = dolfinx_mpc.utils.rotation_matrix([1 / np.sqrt(2), 1 / np.sqrt(2), 0], -theta)
# Top boundary has a given deformation normal to the interface
g_vec = np.dot(r_matrix, [0, 0, -4.25e-1])
# Top boundary has a given deformation normal to the interface
def top_v(x):
values = np.empty((3, x.shape[1]))
values[0] = g_vec[0]
values[1] = g_vec[1]
values[2] = g_vec[2]
return values
u_top = fem.Function(V)
u_top.interpolate(top_v)
top_dofs = fem.locate_dofs_topological(V, fdim, mt.find(3))
bc_top = fem.dirichletbc(u_top, top_dofs)
bcs = [bc_bottom, bc_top]
# Elasticity parameters
E = 1.0e3
nu = 0
mu = fem.Constant(mesh, default_scalar_type(E / (2.0 * (1.0 + nu))))
lmbda = fem.Constant(mesh, default_scalar_type(E * nu / ((1.0 + nu) * (1.0 - 2.0 * nu))))
# Stress computation
def sigma(v):
return 2.0 * mu * ufl.sym(ufl.grad(v)) + lmbda * ufl.tr(ufl.sym(ufl.grad(v))) * ufl.Identity(len(v))
# Define variational problem
u = ufl.TrialFunction(V)
v = ufl.TestFunction(V)
a = ufl.inner(sigma(u), ufl.grad(v)) * ufl.dx
rhs = ufl.inner(fem.Constant(mesh, default_scalar_type((0, 0, 0))), v) * ufl.dx
bilinear_form = fem.form(a)
linear_form = fem.form(rhs)
# Create LU solver
solver = PETSc.KSP().create(comm)
solver.setType("preonly")
solver.setTolerances(rtol=1.0e-14)
solver.getPC().setType("lu")
# Create MPC contact condition and assemble matrices
mpc = dolfinx_mpc.MultiPointConstraint(V)
if nonslip:
with Timer("~Contact: Create non-elastic constraint"):
> mpc.create_contact_inelastic_condition(mt, 4, 9, eps2=500 * np.finfo(default_scalar_type).resolution)
test_cube_contact.py:242:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <dolfinx_mpc.multipointconstraint.MultiPointConstraint object at 0x7f3c775fece0>
meshtags = <dolfinx.mesh.MeshTags object at 0x7f3c7748cb90>, slave_marker = 4
master_marker = 9, eps2 = 5e-13
def create_contact_inelastic_condition(
self,
meshtags: _cpp.mesh.MeshTags_int32,
slave_marker: int,
master_marker: int,
eps2: float = 1e-20,
):
"""
Create a contact inelastic condition between two sets of facets marker with individual markers.
The interfaces should be within machine precision of eachother, but the vertices does not need to align.
The condition created is :math:`u_s = u_m` where `s` is the restriction to the
slave facets, `m` to the master facets.
Args:
meshtags: The meshtags of the set of facets to tie together
slave_marker: The marker of the slave facets
master_marker: The marker of the master facets
eps2: The tolerance for the squared distance between cells to be considered as a collision
"""
if isinstance(eps2, numpy.generic): # nanobind conversion of numpy dtypes to general Python types
eps2 = eps2.item() # type: ignore
> mpc_data = dolfinx_mpc.cpp.mpc.create_contact_inelastic_condition(
self.V._cpp_object, meshtags._cpp_object, slave_marker, master_marker, eps2
)
E TypeError: create_contact_inelastic_condition(): incompatible function arguments. The following argument types are supported:
E 1. create_contact_inelastic_condition(arg0: dolfinx::fem::FunctionSpace<float>, arg1: dolfinx::mesh::MeshTags<int>, arg2: int, arg3: int, arg4: float, /) -> dolfinx_mpc.cpp.mpc.mpc_data_float
E 2. create_contact_inelastic_condition(arg0: dolfinx::fem::FunctionSpace<float>, arg1: dolfinx::mesh::MeshTags<int>, arg2: int, arg3: int, arg4: float, /) -> dolfinx_mpc.cpp.mpc.mpc_data_complex_float
E 3. create_contact_inelastic_condition(arg0: dolfinx::fem::FunctionSpace<double>, arg1: dolfinx::mesh::MeshTags<int>, arg2: int, arg3: int, arg4: float, /) -> dolfinx_mpc.cpp.mpc.mpc_data_double
E 4. create_contact_inelastic_condition(arg0: dolfinx::fem::FunctionSpace<double>, arg1: dolfinx::mesh::MeshTags<int>, arg2: int, arg3: int, arg4: float, /) -> dolfinx_mpc.cpp.mpc.mpc_data_complex_double
E
E Invoked with types: dolfinx.cpp.fem.FunctionSpace_float64, dolfinx.cpp.mesh.MeshTags_int32, int, int, float
../../debian/python3-dolfinx-mpc/usr/lib/python3.13/dist-packages/dolfinx_mpc/multipointconstraint.py:461: TypeError
---------------------------- Captured stdout setup -----------------------------
Info : Clearing all models and views...
Info : Done clearing all models and views
Metadata
Metadata
Assignees
Labels
No labels