Projection of conditional expression crashes with form_compiler optimization

Issue #383 resolved
Mikael Mortensen created an issue

Following code is ok on 1.4.0, but crashes on new version of dolfin

from dolfin import *
mesh = UnitSquareMesh(10, 10)
DG = FunctionSpace(mesh, "DG", 0)
project(Max(1,2), DG) # This is ok
parameters["form_compiler"]["optimize"] = True
project(Max(1,2), DG) # This crashes

Error message: Calling FFC just-in-time (JIT) compiler, this may take some time.


AttributeError Traceback (most recent call last) <ipython-input-6-c2b596704007> in <module>() ----> 1 project(Max(1,2), DG)

/home/mikael/Fenics/bitbucket/dolfin/local.master/lib/python2.7/site-packages/dolfin/fem/projection.pyc in project(v, V, bcs, mesh, function, solver_type, preconditioner_type, form_compiler_parameters) 109 # Assemble linear system 110 A, b = assemble_system(a, L, bcs=bcs, --> 111 form_compiler_parameters=form_compiler_parameters) 112 113 # Solve linear system for projection

/home/mikael/Fenics/bitbucket/dolfin/local.master/lib/python2.7/site-packages/dolfin/fem/assembling.pyc in assemble_system(A_form, b_form, bcs, x0, form_compiler_parameters, add_values, finalize_tensor, keep_diagonal, A_tensor, b_tensor, backend, cell_domains, exterior_facet_domains, interior_facet_domains)
279 cell_domains, exterior_facet_domains, interior_facet_domains) 280 b_dolfin_form = _create_dolfin_form(b_form, form_compiler_parameters, --> 281 cell_domains, exterior_facet_domains, interior_facet_domains) 282 283 # Create tensors

/home/mikael/Fenics/bitbucket/dolfin/local.master/lib/python2.7/site-packages/dolfin/fem/assembling.pyc in _create_dolfin_form(form, form_compiler_parameters, cell_domains, exterior_facet_domains, interior_facet_domains) 73 # Wrap form 74 dolfin_form = Form(form, ---> 75 form_compiler_parameters=form_compiler_parameters) 76 # Attach domains to form
77 if cell_domains is not None:

/home/mikael/Fenics/bitbucket/dolfin/local.master/lib/python2.7/site-packages/dolfin/fem/form.pyc in init(self, form, form_compiler_parameters, subdomains) 67 # Jit the module, this will take some time... 68 self._compiled_form, module, prefix \ ---> 69 = jit(form, form_compiler_parameters) 70 71 # Extract function spaces of form arguments

/home/mikael/Fenics/bitbucket/dolfin/local.master/lib/python2.7/site-packages/dolfin/compilemodules/jit.pyc in mpi_jit(args, kwargs) 61 # Just call JIT compiler when running in serial 62 if MPI.size(mpi_comm) == 1: ---> 63 return local_jit(args, **kwargs) 64 65 # Compile first on process 0

/home/mikael/Fenics/bitbucket/dolfin/local.master/lib/python2.7/site-packages/dolfin/compilemodules/jit.pyc in jit(form, form_compiler_parameters) 125 126 # Execute! --> 127 return form_compiler.jit(form, parameters=p)

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/jitcompiler.pyc in jit(ufl_object, parameters) 72 return jit_element(ufl_object, parameters) 73 else: ---> 74 return jit_form(ufl_object, parameters) 75 76

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/jitcompiler.pyc in jit_form(form, parameters) 128 compile_form(form, 129 prefix=module_name, --> 130 parameters=parameters) 131 132 # Build module using Instant (through UFC)

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/compiler.pyc in compile_form(forms, object_names, prefix, parameters) 154 # Stage 2: intermediate representation 155 cpu_time = time() --> 156 ir = compute_ir(analysis, parameters) 157 _print_timing(2, time() - cpu_time) 158

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/representation.pyc in compute_ir(analysis, parameters) 92 info("Computing representation of integrals") 93 irs = [_compute_integral_ir(fd, i, element_numbers, parameters) \ ---> 94 for (i, fd) in enumerate(form_datas)] 95 ir_integrals = [ir for ir in chain(*irs) if not ir is None] 96

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/representation.pyc in _compute_integral_ir(form_data, form_id, element_numbers, parameters) 216 form_id, 217 element_numbers, --> 218 parameters) 219 220 # Append representation

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/quadrature/quadraturerepresentation.pyc in compute_integral_ir(itg_data, form_data, form_id, element_numbers, parameters) 91 cell = itg_data.domain.cell() 92 ir["trans_integrals"] = _transform_integrals_by_type(ir, transformer, integrals_dict, ---> 93 itg_data.integral_type, cell) 94 95 # Save tables populated by transformer

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/quadrature/quadraturerepresentation.pyc in _transform_integrals_by_type(ir, transformer, integrals_dict, integral_type, cell) 158 info("Transforming cell integral") 159 transformer.update_cell() --> 160 terms = _transform_integrals(transformer, integrals_dict, integral_type) 161 162 elif integral_type == "exterior_facet":

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/quadrature/quadraturerepresentation.pyc in _transform_integrals(transformer, integrals, integral_type) 201 for point, integral in sorted(integrals.items()): 202 transformer.update_points(point) --> 203 terms = transformer.generate_terms(integral.integrand(), integral_type) 204 transformed_integrals.append((point, terms, transformer.function_data, 205 {}, transformer.coordinate, transformer.conditionals))

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/quadrature/quadraturetransformerbase.pyc in generate_terms(self, integrand, integral_type) 820 821 # Get terms --> 822 terms = self.visit(integrand) 823 824 # Get formatting

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ufl/algorithms/transformer.pyc in visit(self, o) 100 if visit_children_first: 101 # Yes, visit all children first and then call h. --> 102 r = h(o, *[self.visit(op) for op in o.ufl_operands]) 103 else: 104 # No, this is a handler that handles its own children

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/quadrature/optimisedquadraturetransformer.pyc in product(self, o, *operands) 132 ffc_assert(tuple(l) not in code, "This key should not be in the code.") 133 --> 134 code[tuple(l)] = create_product(val + not_permute) 135 else: 136 return {():create_product(not_permute)}

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/quadrature/symbolics.pyc in create_product(variables) 67 # print "found product in cache" 68 return _product_cache[key] ---> 69 product = Product(key) 70 _product_cache[key] = product 71 return product

/home/mikael/Fenics/saucy/dev/lib/python2.7/site-packages/ffc/quadrature/product.pyc in init(self, variables) 60 for var in variables: 61 # If any value is zero the entire product is zero. ---> 62 if var.val == 0.0: 63 self.val = 0.0 64 self.vrs = [create_float(0.0)]

AttributeError: 'str' object has no attribute 'val'

Comments (5)

  1. Log in to comment