FEniCS / ffcx

Next generation FEniCS Form Compiler for finite element forms
https://fenicsproject.org
Other
146 stars 39 forks source link

ufl expression cannot be compiled in fenicsx tutorial #707

Closed iliTheFallen closed 3 months ago

iliTheFallen commented 3 months ago

Hello, I am trying to run the following tutorial : Deflection of a Membrane ; but it throws a compilation error at jit level. I think it cannot compile the ufl expression that defines the “LinearProblem”. The instruction at which it throws the exception is:

problem = LinearProblem(a, L, bcs=[bc], petsc_options={"ksp_type": "preonly", "pc_type": "lu"})

The error is the following:

In file included from libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:586:0:
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:287:23](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=286): error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
       float* restrict A, const float* restrict w,
                       ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:297:24](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=296): error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
       double* restrict A, const double* restrict w,
                        ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:307:32](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=306): error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
       float _Complex* restrict A, const float _Complex* restrict w,
                                ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:317:33](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=316): error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
       double _Complex* restrict A, const double _Complex* restrict w,
                                 ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:325:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=324): error: unknown type name ‘ufcx_tabulate_tensor_float32’
     ufcx_tabulate_tensor_float32* tabulate_tensor_float32;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:326:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=325): error: unknown type name ‘ufcx_tabulate_tensor_float64’
     ufcx_tabulate_tensor_float64* tabulate_tensor_float64;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:327:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=326): error: unknown type name ‘ufcx_tabulate_tensor_complex64’
     ufcx_tabulate_tensor_complex64* tabulate_tensor_complex64;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:328:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=327): error: unknown type name ‘ufcx_tabulate_tensor_complex128’
     ufcx_tabulate_tensor_complex128* tabulate_tensor_complex128;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:344:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=343): error: unknown type name ‘ufcx_tabulate_tensor_float32’
     ufcx_tabulate_tensor_float32* tabulate_tensor_float32;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:345:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=344): error: unknown type name ‘ufcx_tabulate_tensor_float64’
     ufcx_tabulate_tensor_float64* tabulate_tensor_float64;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:346:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=345): error: unknown type name ‘ufcx_tabulate_tensor_complex64’
     ufcx_tabulate_tensor_complex64* tabulate_tensor_complex64;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:347:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=346): error: unknown type name ‘ufcx_tabulate_tensor_complex128’
     ufcx_tabulate_tensor_complex128* tabulate_tensor_complex128;
     ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:775:89: error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
 void tabulate_tensor_integral_a2e12337731339d4d0174b7c4959a0fdc321393a(double* restrict A,
                                                                                         ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:891:30: error: ‘tabulate_tensor_integral_a2e12337731339d4d0174b7c4959a0fdc321393a’ undeclared here (not in a function)
   .tabulate_tensor_float64 = tabulate_tensor_integral_a2e12337731339d4d0174b7c4959a0fdc321393a,
                              ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c: In function ‘_cffi_checkfld__ufcx_integral’:
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:1225:104: warning: initialization from incompatible pointer type [enabled by default]
   { void(* *tmp)(float *, float const *, float const *, float const *, int const *, uint8_t const *) = &p->tabulate_tensor_float32; (void)tmp; }
                                                                                                        ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:1226:108: warning: initialization from incompatible pointer type [enabled by default]
   { void(* *tmp)(double *, double const *, double const *, double const *, int const *, uint8_t const *) = &p->tabulate_tensor_float64; (void)tmp; }
                                                                                                            ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:1227:131: warning: initialization from incompatible pointer type [enabled by default]
   { void(* *tmp)(float _Complex *, float _Complex const *, float _Complex const *, float const *, int const *, uint8_t const *) = &p->tabulate_tensor_complex64; (void)tmp; }
                                                                                                                                   ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:1228:135: warning: initialization from incompatible pointer type [enabled by default]
   { void(* *tmp)(double _Complex *, double _Complex const *, double _Complex const *, double const *, int const *, uint8_t const *) = &p->tabulate_tensor_complex128; (void)tmp; }
                                                                                                                                       ^
---------------------------------------------------------------------------
DistutilsExecError                        Traceback (most recent call last)
File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/unixccompiler.py:188](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/unixccompiler.py#line=187), in UnixCCompiler._compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    187 try:
--> 188     self.spawn(compiler_so + cc_args + [src, '-o', obj] + extra_postargs)
    189 except DistutilsExecError as msg:

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py:1041](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py#line=1040), in CCompiler.spawn(self, cmd, **kwargs)
   1040 def spawn(self, cmd, **kwargs):
-> 1041     spawn(cmd, dry_run=self.dry_run, **kwargs)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/spawn.py:68](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/spawn.py#line=67), in spawn(cmd, search_path, verbose, dry_run, env)
     67     cmd = cmd[0]
---> 68 raise DistutilsExecError(f"command {cmd!r} failed with exit code {exitcode}")

DistutilsExecError: command '[/usr/bin/gcc](http://localhost:52225/usr/bin/gcc)' failed with exit code 1

During handling of the above exception, another exception occurred:

CompileError                              Traceback (most recent call last)
File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py:48](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py#line=47), in _build(tmpdir, ext, compiler_verbose, debug)
     47 set_verbosity(compiler_verbose)
---> 48 dist.run_command('build_ext')
     49 cmd_obj = dist.get_command_obj('build_ext')

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/dist.py:968](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/dist.py#line=967), in Distribution.run_command(self, command)
    965 # Postpone defaults until all explicit configuration is considered
    966 # (setup() args, config files, command line and plugins)
--> 968 super().run_command(command)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/dist.py:988](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/dist.py#line=987), in Distribution.run_command(self, command)
    987 cmd_obj.ensure_finalized()
--> 988 cmd_obj.run()
    989 self.have_run[command] = 1

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/command/build_ext.py:91](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/command/build_ext.py#line=90), in build_ext.run(self)
     90 old_inplace, self.inplace = self.inplace, 0
---> 91 _build_ext.run(self)
     92 self.inplace = old_inplace

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py:359](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py#line=358), in build_ext.run(self)
    358 # Now actually compile and link everything.
--> 359 self.build_extensions()

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py:479](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py#line=478), in build_ext.build_extensions(self)
    478 else:
--> 479     self._build_extensions_serial()

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py:505](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py#line=504), in build_ext._build_extensions_serial(self)
    504 with self._filter_build_errors(ext):
--> 505     self.build_extension(ext)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/command/build_ext.py:252](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/command/build_ext.py#line=251), in build_ext.build_extension(self, ext)
    251     self.compiler = self.shlib_compiler
--> 252 _build_ext.build_extension(self, ext)
    253 if ext._needs_stub:

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py:560](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py#line=559), in build_ext.build_extension(self, ext)
    558     macros.append((undef,))
--> 560 objects = self.compiler.compile(
    561     sources,
    562     output_dir=self.build_temp,
    563     macros=macros,
    564     include_dirs=ext.include_dirs,
    565     debug=self.debug,
    566     extra_postargs=extra_args,
    567     depends=ext.depends,
    568 )
    570 # XXX outdated variable, kept here in case third-part code
    571 # needs it.

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py:600](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py#line=599), in CCompiler.compile(self, sources, output_dir, macros, include_dirs, debug, extra_preargs, extra_postargs, depends)
    599         continue
--> 600     self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
    602 # Return *all* object filenames, not just the ones we just built.

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/unixccompiler.py:190](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/unixccompiler.py#line=189), in UnixCCompiler._compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    189 except DistutilsExecError as msg:
--> 190     raise CompileError(msg)

CompileError: command '[/usr/bin/gcc](http://localhost:52225/usr/bin/gcc)' failed with exit code 1

During handling of the above exception, another exception occurred:

VerificationError                         Traceback (most recent call last)
Cell In[1], line 116
    114 A = ufl.dot(ufl.grad(u), ufl.grad(v)) * ufl.dx
    115 b = p * v * ufl.dx
--> 116 problem = LinearProblem(
    117     A, 
    118     b, 
    119     bcs=[bc], 
    120     petsc_options={"ksp_type": "preonly", "pc_type": "lu"}
    121 )
    122 uh = problem.solve()
    123 # # ############################################################# #
    124 # # Step#6-We want to display a smoother function for pressure 'p'
    125 # # and hence, we interpolate it into a higher degree function
   (...)
    153 # )
    154 # plotter.show()

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/petsc.py:762](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/petsc.py#line=761), in LinearProblem.__init__(self, a, L, bcs, u, petsc_options, form_compiler_options, jit_options)
    724 def __init__(
    725     self,
    726     a: ufl.Form,
   (...)
    732     jit_options: typing.Optional[dict] = None,
    733 ):
    734     """Initialize solver for a linear variational problem.
    735 
    736     Args:
   (...)
    760                                                                    "mumps"})
    761     """
--> 762     self._a = _create_form(
    763         a, form_compiler_options=form_compiler_options, jit_options=jit_options
    764     )
    765     self._A = create_matrix(self._a)
    766     self._L = _create_form(
    767         L, form_compiler_options=form_compiler_options, jit_options=jit_options
    768     )

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py:249](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py#line=248), in form(form, dtype, form_compiler_options, jit_options, entity_maps)
    246         return list(map(lambda sub_form: _create_form(sub_form), form))
    247     return form
--> 249 return _create_form(form)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py:244](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py#line=243), in form.<locals>._create_form(form)
    241 """Recursively convert ufl.Forms to dolfinx.fem.Form, otherwise
    242 return form argument"""
    243 if isinstance(form, ufl.Form):
--> 244     return _form(form)
    245 elif isinstance(form, collections.abc.Iterable):
    246     return list(map(lambda sub_form: _create_form(sub_form), form))

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py:186](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py#line=185), in form.<locals>._form(form)
    184 if mesh is None:
    185     raise RuntimeError("Expecting to find a Mesh in the form.")
--> 186 ufcx_form, module, code = jit.ffcx_jit(
    187     mesh.comm, form, form_compiler_options=form_compiler_options, jit_options=jit_options
    188 )
    190 # For each argument in form extract its function space
    191 V = [arg.ufl_function_space()._cpp_object for arg in form.arguments()]

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/jit.py:51](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/jit.py#line=50), in mpi_jit_decorator.<locals>.mpi_jit(comm, *args, **kwargs)
     47 @functools.wraps(local_jit)
     48 def mpi_jit(comm, *args, **kwargs):
     49     # Just call JIT compiler when running in serial
     50     if comm.size == 1:
---> 51         return local_jit(*args, **kwargs)
     53     # Default status (0 == ok, 1 == fail)
     54     status = 0

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/jit.py:201](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/jit.py#line=200), in ffcx_jit(ufl_object, form_compiler_options, jit_options)
    199 # Switch on type and compile, returning cffi object
    200 if isinstance(ufl_object, ufl.Form):
--> 201     r = ffcx.codegeneration.jit.compile_forms([ufl_object], options=p_ffcx, **p_jit)
    202 elif isinstance(ufl_object, ufl.AbstractFiniteElement):
    203     r = ffcx.codegeneration.jit.compile_elements([ufl_object], options=p_ffcx, **p_jit)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py:276](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py#line=275), in compile_forms(forms, options, cache_dir, timeout, cffi_extra_compile_args, cffi_verbose, cffi_debug, cffi_libraries, visualise)
    274     except Exception:
    275         pass
--> 276     raise e
    278 obj, module = _load_objects(cache_dir, module_name, form_names)
    279 return obj, module, (decl, impl)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py:256](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py#line=255), in compile_forms(forms, options, cache_dir, timeout, cffi_extra_compile_args, cffi_verbose, cffi_debug, cffi_libraries, visualise)
    253     for name in form_names:
    254         decl += form_template.format(name=name)
--> 256     impl = _compile_objects(
    257         decl,
    258         forms,
    259         form_names,
    260         module_name,
    261         p,
    262         cache_dir,
    263         cffi_extra_compile_args,
    264         cffi_verbose,
    265         cffi_debug,
    266         cffi_libraries,
    267         visualise=visualise,
    268     )
    269 except Exception as e:
    270     try:
    271         # remove c file so that it will not timeout next time

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py:416](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py#line=415), in _compile_objects(decl, ufl_objects, object_names, module_name, options, cache_dir, cffi_extra_compile_args, cffi_verbose, cffi_debug, cffi_libraries, visualise)
    414 root_logger.handlers = [logging.StreamHandler(f)]
    415 with redirect_stdout(f):
--> 416     ffibuilder.compile(tmpdir=cache_dir, verbose=True, debug=cffi_debug)
    417 s = f.getvalue()
    418 if cffi_verbose:

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/api.py:725](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/api.py#line=724), in FFI.compile(self, tmpdir, verbose, target, debug)
    723     raise ValueError("set_source() must be called before compile()")
    724 module_name, source, source_extension, kwds = self._assigned_source
--> 725 return recompile(self, module_name, source, tmpdir=tmpdir,
    726                  target=target, source_extension=source_extension,
    727                  compiler_verbose=verbose, debug=debug, **kwds)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/recompiler.py:1564](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/recompiler.py#line=1563), in recompile(ffi, module_name, preamble, tmpdir, call_c_compiler, c_file, source_extension, extradir, compiler_verbose, target, debug, **kwds)
   1562         print('%s %r' % (msg, os.path.abspath(tmpdir)))
   1563     os.chdir(tmpdir)
-> 1564     outputfilename = ffiplatform.compile('.', ext,
   1565                                          compiler_verbose, debug)
   1566 finally:
   1567     os.chdir(cwd)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py:20](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py#line=19), in compile(tmpdir, ext, compiler_verbose, debug)
     18 saved_environ = os.environ.copy()
     19 try:
---> 20     outputfilename = _build(tmpdir, ext, compiler_verbose, debug)
     21     outputfilename = os.path.abspath(outputfilename)
     22 finally:
     23     # workaround for a distutils bugs where some env vars can
     24     # become longer and longer every time it is used

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py:54](http://localhost:52225/lab/tree/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py#line=53), in _build(tmpdir, ext, compiler_verbose, debug)
     52         set_threshold(old_level)
     53 except (CompileError, LinkError) as e:
---> 54     raise VerificationError('%s: %s' % (e.__class__.__name__, e))
     55 #
     56 return soname

VerificationError: CompileError: command '[/usr/bin/gcc](http://localhost:52225/usr/bin/gcc)' failed with exit code 1

OS : CentOS 7.3.1611 Dolfinx version : 0.8.0 ufl version : 2024.1.0 petsc4py : 3.21.2

jorgensd commented 3 months ago

Could you provide the output of:

import gmsh

gmsh.initialize()

membrane = gmsh.model.occ.addDisk(0, 0, 0, 1, 1)
gmsh.model.occ.synchronize()

gdim = 2
gmsh.model.addPhysicalGroup(gdim, [membrane], 1)

gmsh.option.setNumber("Mesh.CharacteristicLengthMin", 0.05)
gmsh.option.setNumber("Mesh.CharacteristicLengthMax", 0.05)
gmsh.model.mesh.generate(gdim)

from dolfinx.fem.petsc import LinearProblem
from dolfinx.io import gmshio
from mpi4py import MPI
import dolfinx

print(dolfinx.common.git_commit_hash)

gmsh_model_rank = 0
mesh_comm = MPI.COMM_WORLD
domain, cell_markers, facet_markers = gmshio.model_to_mesh(
    gmsh.model, mesh_comm, gmsh_model_rank, gdim=gdim
)

from dolfinx import fem

V = fem.functionspace(domain, ("Lagrange", 1))

import ufl
from dolfinx import default_scalar_type

x = ufl.SpatialCoordinate(domain)
beta = fem.Constant(domain, default_scalar_type(12))
R0 = fem.Constant(domain, default_scalar_type(0.3))
p = 4 * ufl.exp(-(beta**2) * (x[0] ** 2 + (x[1] - R0) ** 2))

import numpy as np

def on_boundary(x):
    return np.isclose(np.sqrt(x[0] ** 2 + x[1] ** 2), 1)

boundary_dofs = fem.locate_dofs_geometrical(V, on_boundary)

bc = fem.dirichletbc(default_scalar_type(0), boundary_dofs, V)

u = ufl.TrialFunction(V)
v = ufl.TestFunction(V)
a = ufl.dot(ufl.grad(u), ufl.grad(v)) * ufl.dx
L = p * v * ufl.dx
problem = LinearProblem(
    a, L, bcs=[bc], petsc_options={"ksp_type": "preonly", "pc_type": "lu"}
)
uh = problem.solve()

Q = fem.functionspace(domain, ("Lagrange", 5))
expr = fem.Expression(p, Q.element.interpolation_points())
pressure = fem.Function(Q)
pressure.interpolate(expr)
iliTheFallen commented 3 months ago

Hello @jorgensd!

I ran it and here is the output:

Info    : Meshing 1D...
Info    : Meshing curve 1 (Ellipse)
Info    : Done meshing 1D (Wall 0.000475142s, CPU 0.000915s)
Info    : Meshing 2D...
Info    : Meshing surface 1 (Plane, Frontal-Delaunay)
Info    : Done meshing 2D (Wall 0.141706s, CPU 0.137624s)
Info    : 1550 nodes 3099 elements
ad7bf8b551a6795a19aaaec058ecba438d55b279
In file included from libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:586:0:
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:287:23](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=286): error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
       float* restrict A, const float* restrict w,
                       ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:297:24](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=296): error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
       double* restrict A, const double* restrict w,
                        ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:307:32](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=306): error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
       float _Complex* restrict A, const float _Complex* restrict w,
                                ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:317:33](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=316): error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
       double _Complex* restrict A, const double _Complex* restrict w,
                                 ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:325:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=324): error: unknown type name ‘ufcx_tabulate_tensor_float32’
     ufcx_tabulate_tensor_float32* tabulate_tensor_float32;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:326:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=325): error: unknown type name ‘ufcx_tabulate_tensor_float64’
     ufcx_tabulate_tensor_float64* tabulate_tensor_float64;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:327:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=326): error: unknown type name ‘ufcx_tabulate_tensor_complex64’
     ufcx_tabulate_tensor_complex64* tabulate_tensor_complex64;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:328:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=327): error: unknown type name ‘ufcx_tabulate_tensor_complex128’
     ufcx_tabulate_tensor_complex128* tabulate_tensor_complex128;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:344:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=343): error: unknown type name ‘ufcx_tabulate_tensor_float32’
     ufcx_tabulate_tensor_float32* tabulate_tensor_float32;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:345:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=344): error: unknown type name ‘ufcx_tabulate_tensor_float64’
     ufcx_tabulate_tensor_float64* tabulate_tensor_float64;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:346:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=345): error: unknown type name ‘ufcx_tabulate_tensor_complex64’
     ufcx_tabulate_tensor_complex64* tabulate_tensor_complex64;
     ^
[/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h:347:5](http://localhost:52225/truba/home/igurcan/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/ufcx.h#line=346): error: unknown type name ‘ufcx_tabulate_tensor_complex128’
     ufcx_tabulate_tensor_complex128* tabulate_tensor_complex128;
     ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:775:89: error: expected ‘;’, ‘,’ or ‘)’ before ‘A’
 void tabulate_tensor_integral_a2e12337731339d4d0174b7c4959a0fdc321393a(double* restrict A,
                                                                                         ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:891:30: error: ‘tabulate_tensor_integral_a2e12337731339d4d0174b7c4959a0fdc321393a’ undeclared here (not in a function)
   .tabulate_tensor_float64 = tabulate_tensor_integral_a2e12337731339d4d0174b7c4959a0fdc321393a,
                              ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c: In function ‘_cffi_checkfld__ufcx_integral’:
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:1225:104: warning: initialization from incompatible pointer type [enabled by default]
   { void(* *tmp)(float *, float const *, float const *, float const *, int const *, uint8_t const *) = &p->tabulate_tensor_float32; (void)tmp; }
                                                                                                        ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:1226:108: warning: initialization from incompatible pointer type [enabled by default]
   { void(* *tmp)(double *, double const *, double const *, double const *, int const *, uint8_t const *) = &p->tabulate_tensor_float64; (void)tmp; }
                                                                                                            ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:1227:131: warning: initialization from incompatible pointer type [enabled by default]
   { void(* *tmp)(float _Complex *, float _Complex const *, float _Complex const *, float const *, int const *, uint8_t const *) = &p->tabulate_tensor_complex64; (void)tmp; }
                                                                                                                                   ^
libffcx_forms_4496a4745a0030841e01354f4d867a8c1577d00c.c:1228:135: warning: initialization from incompatible pointer type [enabled by default]
   { void(* *tmp)(double _Complex *, double _Complex const *, double _Complex const *, double const *, int const *, uint8_t const *) = &p->tabulate_tensor_complex128; (void)tmp; }
                                                                                                                                       ^
---------------------------------------------------------------------------
DistutilsExecError                        Traceback (most recent call last)
File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/unixccompiler.py:188](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/unixccompiler.py#line=187), in UnixCCompiler._compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    187 try:
--> 188     self.spawn(compiler_so + cc_args + [src, '-o', obj] + extra_postargs)
    189 except DistutilsExecError as msg:

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py:1041](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py#line=1040), in CCompiler.spawn(self, cmd, **kwargs)
   1040 def spawn(self, cmd, **kwargs):
-> 1041     spawn(cmd, dry_run=self.dry_run, **kwargs)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/spawn.py:68](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/spawn.py#line=67), in spawn(cmd, search_path, verbose, dry_run, env)
     67     cmd = cmd[0]
---> 68 raise DistutilsExecError(f"command {cmd!r} failed with exit code {exitcode}")

DistutilsExecError: command '[/usr/bin/gcc](http://localhost:52225/usr/bin/gcc)' failed with exit code 1

During handling of the above exception, another exception occurred:

CompileError                              Traceback (most recent call last)
File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py:48](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py#line=47), in _build(tmpdir, ext, compiler_verbose, debug)
     47 set_verbosity(compiler_verbose)
---> 48 dist.run_command('build_ext')
     49 cmd_obj = dist.get_command_obj('build_ext')

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/dist.py:968](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/dist.py#line=967), in Distribution.run_command(self, command)
    965 # Postpone defaults until all explicit configuration is considered
    966 # (setup() args, config files, command line and plugins)
--> 968 super().run_command(command)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/dist.py:988](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/dist.py#line=987), in Distribution.run_command(self, command)
    987 cmd_obj.ensure_finalized()
--> 988 cmd_obj.run()
    989 self.have_run[command] = 1

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/command/build_ext.py:91](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/command/build_ext.py#line=90), in build_ext.run(self)
     90 old_inplace, self.inplace = self.inplace, 0
---> 91 _build_ext.run(self)
     92 self.inplace = old_inplace

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py:359](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py#line=358), in build_ext.run(self)
    358 # Now actually compile and link everything.
--> 359 self.build_extensions()

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py:479](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py#line=478), in build_ext.build_extensions(self)
    478 else:
--> 479     self._build_extensions_serial()

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py:505](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py#line=504), in build_ext._build_extensions_serial(self)
    504 with self._filter_build_errors(ext):
--> 505     self.build_extension(ext)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/command/build_ext.py:252](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/command/build_ext.py#line=251), in build_ext.build_extension(self, ext)
    251     self.compiler = self.shlib_compiler
--> 252 _build_ext.build_extension(self, ext)
    253 if ext._needs_stub:

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py:560](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py#line=559), in build_ext.build_extension(self, ext)
    558     macros.append((undef,))
--> 560 objects = self.compiler.compile(
    561     sources,
    562     output_dir=self.build_temp,
    563     macros=macros,
    564     include_dirs=ext.include_dirs,
    565     debug=self.debug,
    566     extra_postargs=extra_args,
    567     depends=ext.depends,
    568 )
    570 # XXX outdated variable, kept here in case third-part code
    571 # needs it.

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py:600](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py#line=599), in CCompiler.compile(self, sources, output_dir, macros, include_dirs, debug, extra_preargs, extra_postargs, depends)
    599         continue
--> 600     self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
    602 # Return *all* object filenames, not just the ones we just built.

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/unixccompiler.py:190](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/setuptools/_distutils/unixccompiler.py#line=189), in UnixCCompiler._compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    189 except DistutilsExecError as msg:
--> 190     raise CompileError(msg)

CompileError: command '[/usr/bin/gcc](http://localhost:52225/usr/bin/gcc)' failed with exit code 1

During handling of the above exception, another exception occurred:

VerificationError                         Traceback (most recent call last)
Cell In[1], line 57
     55 a = ufl.dot(ufl.grad(u), ufl.grad(v)) * ufl.dx
     56 L = p * v * ufl.dx
---> 57 problem = LinearProblem(
     58     a, L, bcs=[bc], petsc_options={"ksp_type": "preonly", "pc_type": "lu"}
     59 )
     60 uh = problem.solve()
     61 Q = fem.functionspace(domain, ("Lagrange", 5))

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/petsc.py:762](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/petsc.py#line=761), in LinearProblem.__init__(self, a, L, bcs, u, petsc_options, form_compiler_options, jit_options)
    724 def __init__(
    725     self,
    726     a: ufl.Form,
   (...)
    732     jit_options: typing.Optional[dict] = None,
    733 ):
    734     """Initialize solver for a linear variational problem.
    735 
    736     Args:
   (...)
    760                                                                    "mumps"})
    761     """
--> 762     self._a = _create_form(
    763         a, form_compiler_options=form_compiler_options, jit_options=jit_options
    764     )
    765     self._A = create_matrix(self._a)
    766     self._L = _create_form(
    767         L, form_compiler_options=form_compiler_options, jit_options=jit_options
    768     )

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py:249](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py#line=248), in form(form, dtype, form_compiler_options, jit_options, entity_maps)
    246         return list(map(lambda sub_form: _create_form(sub_form), form))
    247     return form
--> 249 return _create_form(form)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py:244](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py#line=243), in form.<locals>._create_form(form)
    241 """Recursively convert ufl.Forms to dolfinx.fem.Form, otherwise
    242 return form argument"""
    243 if isinstance(form, ufl.Form):
--> 244     return _form(form)
    245 elif isinstance(form, collections.abc.Iterable):
    246     return list(map(lambda sub_form: _create_form(sub_form), form))

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py:186](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/fem/forms.py#line=185), in form.<locals>._form(form)
    184 if mesh is None:
    185     raise RuntimeError("Expecting to find a Mesh in the form.")
--> 186 ufcx_form, module, code = jit.ffcx_jit(
    187     mesh.comm, form, form_compiler_options=form_compiler_options, jit_options=jit_options
    188 )
    190 # For each argument in form extract its function space
    191 V = [arg.ufl_function_space()._cpp_object for arg in form.arguments()]

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/jit.py:51](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/jit.py#line=50), in mpi_jit_decorator.<locals>.mpi_jit(comm, *args, **kwargs)
     47 @functools.wraps(local_jit)
     48 def mpi_jit(comm, *args, **kwargs):
     49     # Just call JIT compiler when running in serial
     50     if comm.size == 1:
---> 51         return local_jit(*args, **kwargs)
     53     # Default status (0 == ok, 1 == fail)
     54     status = 0

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/jit.py:201](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx/jit.py#line=200), in ffcx_jit(ufl_object, form_compiler_options, jit_options)
    199 # Switch on type and compile, returning cffi object
    200 if isinstance(ufl_object, ufl.Form):
--> 201     r = ffcx.codegeneration.jit.compile_forms([ufl_object], options=p_ffcx, **p_jit)
    202 elif isinstance(ufl_object, ufl.AbstractFiniteElement):
    203     r = ffcx.codegeneration.jit.compile_elements([ufl_object], options=p_ffcx, **p_jit)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py:276](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py#line=275), in compile_forms(forms, options, cache_dir, timeout, cffi_extra_compile_args, cffi_verbose, cffi_debug, cffi_libraries, visualise)
    274     except Exception:
    275         pass
--> 276     raise e
    278 obj, module = _load_objects(cache_dir, module_name, form_names)
    279 return obj, module, (decl, impl)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py:256](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py#line=255), in compile_forms(forms, options, cache_dir, timeout, cffi_extra_compile_args, cffi_verbose, cffi_debug, cffi_libraries, visualise)
    253     for name in form_names:
    254         decl += form_template.format(name=name)
--> 256     impl = _compile_objects(
    257         decl,
    258         forms,
    259         form_names,
    260         module_name,
    261         p,
    262         cache_dir,
    263         cffi_extra_compile_args,
    264         cffi_verbose,
    265         cffi_debug,
    266         cffi_libraries,
    267         visualise=visualise,
    268     )
    269 except Exception as e:
    270     try:
    271         # remove c file so that it will not timeout next time

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py:416](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/ffcx/codegeneration/jit.py#line=415), in _compile_objects(decl, ufl_objects, object_names, module_name, options, cache_dir, cffi_extra_compile_args, cffi_verbose, cffi_debug, cffi_libraries, visualise)
    414 root_logger.handlers = [logging.StreamHandler(f)]
    415 with redirect_stdout(f):
--> 416     ffibuilder.compile(tmpdir=cache_dir, verbose=True, debug=cffi_debug)
    417 s = f.getvalue()
    418 if cffi_verbose:

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/api.py:725](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/api.py#line=724), in FFI.compile(self, tmpdir, verbose, target, debug)
    723     raise ValueError("set_source() must be called before compile()")
    724 module_name, source, source_extension, kwds = self._assigned_source
--> 725 return recompile(self, module_name, source, tmpdir=tmpdir,
    726                  target=target, source_extension=source_extension,
    727                  compiler_verbose=verbose, debug=debug, **kwds)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/recompiler.py:1564](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/recompiler.py#line=1563), in recompile(ffi, module_name, preamble, tmpdir, call_c_compiler, c_file, source_extension, extradir, compiler_verbose, target, debug, **kwds)
   1562         print('%s %r' % (msg, os.path.abspath(tmpdir)))
   1563     os.chdir(tmpdir)
-> 1564     outputfilename = ffiplatform.compile('.', ext,
   1565                                          compiler_verbose, debug)
   1566 finally:
   1567     os.chdir(cwd)

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py:20](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py#line=19), in compile(tmpdir, ext, compiler_verbose, debug)
     18 saved_environ = os.environ.copy()
     19 try:
---> 20     outputfilename = _build(tmpdir, ext, compiler_verbose, debug)
     21     outputfilename = os.path.abspath(outputfilename)
     22 finally:
     23     # workaround for a distutils bugs where some env vars can
     24     # become longer and longer every time it is used

File [~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py:54](http://localhost:52225/lab/tree/fenics/~/miniconda3/envs/fenicsx-env/lib/python3.12/site-packages/cffi/ffiplatform.py#line=53), in _build(tmpdir, ext, compiler_verbose, debug)
     52         set_threshold(old_level)
     53 except (CompileError, LinkError) as e:
---> 54     raise VerificationError('%s: %s' % (e.__class__.__name__, e))
     55 #
     56 return soname

VerificationError: CompileError: command '[/usr/bin/gcc](http://localhost:52225/usr/bin/gcc)' failed with exit code 1
jorgensd commented 3 months ago

@minrk any idea whats wrong here?

minrk commented 3 months ago

What's suspicious to me is the use of /usr/bin/gcc instead of the conda-packaged compiler, which is a dependency of dolfinx.

Can you export CC=$CONDA_PREFIX/bin/gcc and try again?

conda list is also always a good thing to share.

iliTheFallen commented 3 months ago

Hello @minrk and @jorgensd ! Yes, your trick did the job! After I had set the following env vars for both conda env and jupyter kernel resp and then, restarting both jupyter and the conda env:

conda activate fenicsx-env
conda env config vars set CC=$CONDA_PREFIX/bin/x86_64-conda-linux-gnu-gcc

and

{
 "argv": [
  "/truba/home/igurcan/miniconda3/envs/fenicsx-env/bin/python",
  "-Xfrozen_modules=off",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "env": {
  "CC": "/truba/home/igurcan/miniconda3/envs/fenicsx-env/bin/x86_64-conda-linux-gnu-gcc"
 },
 "display_name": "fenicsx-env",
 "language": "python",
 "metadata": {
  "debugger": true
 }
}

So, can we say that the reason was my gcc compiler is not compatible with your ffcx? On the other hand; the one, which is downloaded by conda installation, is compatible?

francesco-ballarin commented 3 months ago

After all, it turned out that this was not a ffcx issue. I am going to close this, and invite anyone who still wants to reply to do so at the cross posted message https://fenicsproject.discourse.group/t/ufl-expression-cannot-be-compiled-in-fenicsx-tutorial/14977/3