Integrating and gradient across internal boundary in Dolfinx: Compile Error

Hi.

I am solving the heat equation over a square plate with a tri-material distribution with different thermal conductivities. In the centre of the plate I have a circle, and I would like to calculate the heat flux into this circle. I have seen this topic Calculate flux from solution with Fenicsx - #19 by dokken and have tried unsuccesfully to interpolate grad(Th) into a DG0 space.

I am getting an error I have gotten before since switching from legacy fenics, and previously resolved by either restarting the computer or creating a new environment. This time, neither of those have worked. Here is the terminal output:

hwloc/linux: Ignoring PCI device with non-16bit domain.
Pass --enable-32bits-pci-domain to configure to support such devices
(warning: it would break the library ABI, don't enable unless really needed).
Info    : Meshing 1D...
Info    : [  0%] Meshing curve 1 (Line)
Info    : [ 20%] Meshing curve 2 (Line)
Info    : [ 40%] Meshing curve 3 (Line)
Info    : [ 60%] Meshing curve 4 (Line)
Info    : [ 80%] Meshing curve 5 (Ellipse)
Info    : Done meshing 1D (Wall 0.000599726s, CPU 0.00273s)
Info    : Meshing 2D...
Info    : [  0%] Meshing surface 1 (Plane, Frontal-Delaunay)
Info    : [ 50%] Meshing surface 2 (Plane, Frontal-Delaunay)
Info    : Done meshing 2D (Wall 0.117702s, CPU 0.619779s)
Info    : 3198 nodes 6477 elements
Info    : Writing 'example_mesh.msh'...
Info    : Done writing 'example_mesh.msh'
Info    : Reading 'example_mesh.msh'...
Info    : 12 entities
Info    : 3060 nodes
Info    : 5958 elements
Info    : Done reading 'example_mesh.msh'
INFO:root:running build_ext
INFO:root:building 'libffcx_elements_fe1a0993602258ab98fb05640c655d4a385d47cf' extension
INFO:root:/home/matei/anaconda3/envs/fenicsx-v1/bin/x86_64-conda-linux-gnu-cc -Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /home/matei/anaconda3/envs/fenicsx-v1/include -fPIC -O2 -isystem /home/matei/anaconda3/envs/fenicsx-v1/include -march -DNDEBUG -D_FORTIFY_SOURCE -fPIC -I/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/ffcx/codegeneration -I/home/matei/anaconda3/envs/fenicsx-v1/include/python3.10 -c libffcx_elements_fe1a0993602258ab98fb05640c655d4a385d47cf.c -o ./libffcx_elements_fe1a0993602258ab98fb05640c655d4a385d47cf.o -O2 -g0
x86_64-conda-linux-gnu-cc: error: unrecognized command-line option '-march'
Traceback (most recent call last):
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/unixccompiler.py", line 185, in _compile
    self.spawn(compiler_so + cc_args + [src, '-o', obj] + extra_postargs)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/ccompiler.py", line 1041, in spawn
    spawn(cmd, dry_run=self.dry_run, **kwargs)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/spawn.py", line 70, in spawn
    raise DistutilsExecError(
distutils.errors.DistutilsExecError: command '/home/matei/anaconda3/envs/fenicsx-v1/bin/x86_64-conda-linux-gnu-cc' failed with exit code 1
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/cffi/ffiplatform.py", line 48, in _build
    dist.run_command('build_ext')
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/dist.py", line 989, in run_command
    super().run_command(command)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
    cmd_obj.run()
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/command/build_ext.py", line 88, in run
    _build_ext.run(self)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/command/build_ext.py", line 345, in run
    self.build_extensions()
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/command/build_ext.py", line 467, in build_extensions
    self._build_extensions_serial()
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/command/build_ext.py", line 493, in _build_extensions_serial
    self.build_extension(ext)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/command/build_ext.py", line 249, in build_extension
    _build_ext.build_extension(self, ext)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/command/build_ext.py", line 548, in build_extension
    objects = self.compiler.compile(
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/ccompiler.py", line 600, in compile
    self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/setuptools/_distutils/unixccompiler.py", line 187, in _compile
    raise CompileError(msg)
distutils.errors.CompileError: command '/home/matei/anaconda3/envs/fenicsx-v1/bin/x86_64-conda-linux-gnu-cc' failed with exit code 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/matei/PhD/GAOpt/src/solvers/mwe.py", line 70, in <module>
    V = fem.VectorFunctionSpace(msh, ("DG", 0))
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/dolfinx/fem/function.py", line 609, in VectorFunctionSpace
    return FunctionSpace(mesh, ufl_element)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/dolfinx/fem/function.py", line 487, in __init__
    (self._ufcx_element, self._ufcx_dofmap), module, code = jit.ffcx_jit(
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/dolfinx/jit.py", line 56, in mpi_jit
    return local_jit(*args, **kwargs)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/dolfinx/jit.py", line 206, in ffcx_jit
    r = ffcx.codegeneration.jit.compile_elements([ufl_object], options=p_ffcx, **p_jit)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/ffcx/codegeneration/jit.py", line 144, in compile_elements
    impl = _compile_objects(decl, elements, names, module_name, p, cache_dir,
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/ffcx/codegeneration/jit.py", line 270, in _compile_objects
    ffibuilder.compile(tmpdir=cache_dir, verbose=True, debug=cffi_debug)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/cffi/api.py", line 725, in compile
    return recompile(self, module_name, source, tmpdir=tmpdir,
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/cffi/recompiler.py", line 1564, in recompile
    outputfilename = ffiplatform.compile('.', ext,
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/cffi/ffiplatform.py", line 20, in compile
    outputfilename = _build(tmpdir, ext, compiler_verbose, debug)
  File "/home/matei/anaconda3/envs/fenicsx-v1/lib/python3.10/site-packages/cffi/ffiplatform.py", line 54, in _build
    raise VerificationError('%s: %s' % (e.__class__.__name__, e))
cffi.VerificationError: CompileError: command '/home/matei/anaconda3/envs/fenicsx-v1/bin/x86_64-conda-linux-gnu-cc' failed with exit code 1

In this MWE, I have set the conductivity as uniform (1.0), as I still get the same error. I am using fenicsx 0.6.0 installed via conda-forge on Ubuntu. I am not sure if this error is because of my instillation or because of a mistake in the way I am trying to acquire the heat flux. Many thanks for any help.

import numpy as np
from dolfinx import fem
from dolfinx.mesh import meshtags
from dolfinx.fem import (Function, FunctionSpace)
from dolfinx.io import gmshio
import ufl
from ufl import (ds, dx, grad, inner, TrialFunction, TestFunction)
from mpi4py import MPI
from petsc4py.PETSc import ScalarType
import gmsh

gmsh.initialize()
proc = MPI.COMM_WORLD.rank
r = 0.125  # Circle radius
cx, cy = 0.5, 0.5  # Circle center
element_size = 0.02  # Mesh element size
if proc == 0:
    # Set the mesh element size
    gmsh.option.setNumber("Mesh.CharacteristicLengthMin", element_size)
    gmsh.option.setNumber("Mesh.CharacteristicLengthMax", element_size)

    square = gmsh.model.occ.addRectangle(0, 0, 0, 1, 1)

    # Create circle within the rectangle
    circle = gmsh.model.occ.addDisk(cx, cy, 0, r, r)

    gmsh.model.occ.synchronize()

    # Marking the physical groups (modify as per your needs)

    circle_boundary = gmsh.model.getBoundary([(2, circle)])
    gmsh.model.mesh.embed(1, [circle_boundary[0][1]], 2, square)

    gmsh.model.addPhysicalGroup(2, [square], 1)
    gmsh.model.addPhysicalGroup(1, [circle_boundary[0][1]], 2)
    # gmsh.model.mesh.generate(1)
    gmsh.model.mesh.generate(2)
    gmsh.write("example_mesh.msh")

gmsh.finalize()

msh, cell_markers, facet_markers = gmshio.read_from_msh("example_mesh.msh", MPI.COMM_WORLD, gdim=2)
V = FunctionSpace(msh, ("CG", 1))

# locate DOFs associated w boundary
dofs_L = fem.locate_dofs_geometrical(V, lambda x: np.isclose(x[0], 0))
bc_L = fem.dirichletbc(value=ScalarType(293), dofs=dofs_L, V=V)
dofs_R = fem.locate_dofs_geometrical(V, lambda x: np.isclose(x[0], 1))
bc_R = fem.dirichletbc(value=ScalarType(393), dofs=dofs_R, V=V)

T, v = TrialFunction(V), TestFunction(V)
a = inner(1.0 * grad(T), grad(v)) * dx
L = fem.Constant(msh, ScalarType(0)) * v * dx + fem.Constant(msh, ScalarType(0)) * v * ds  # No source term and zero-neumann
problem = fem.petsc.LinearProblem(a, L, bcs=[bc_L, bc_R],
                                  petsc_options={"ksp_type": "preonly",  # preonly / gmres
                                                 "pc_type": "lu"})  # lu / ilu
Th = problem.solve()

bnd_tag = 2  # boundary tag
arc_indices = facet_markers.indices[facet_markers.values == bnd_tag]
arc_tags = meshtags(msh, 1, arc_indices, bnd_tag)
dS = ufl.Measure("dS", domain=msh, subdomain_data=arc_tags)

# HEAT FLUX
n = ufl.FacetNormal(msh)  # normal vector
V = fem.VectorFunctionSpace(msh, ("DG", 0))
qw = Function(V)
qw_expr = fem.Expression(1*grad(Th), V.element.interpolation_points())
qw.interpolate(qw_expr)

flux = ufl.dot(qw, n('+'))*dS  # heat flux
flux_form = fem.form(flux)  # fem form
flux_local = fem.assemble_scalar(flux_form)  # assemble over cell
total_flux = msh.comm.allreduce(flux_local, op=MPI.SUM)  # sum all procs