← Back to team overview

dolfin team mailing list archive

[Bug 745646] Re: Problem with assemble() with MixedFunctionSpace of symmetric TensorFunctionSpaces

 

The following simple form also fails:

T1 = TensorElement('CG', triangle, 1, symmetry=True)
T2 = TensorElement('CG', triangle, 1, symmetry=True)
TT = T1*T2
P, Q = Coefficients(TT)
M = inner(P, Q)*dx
print M

Printing 'M' results in:

{ ([[
  [ (w_0)[0], (w_0)[1] ],
  [ (w_0)[1], (w_0)[3] ]
]]) : ([[
  [ (w_0)[4], (w_0)[5] ],
  [ (w_0)[5], (w_0)[7] ]
]]) } * dx0

which illustrates the problem in FFC for both tensor and quadrature representations.
The component '7' in the ListTensor does not exist in the MixedElement of FFC which, due to symmetry, only contain 6 'unique' subelements (components).
One could argue that UFL should keep track of symmetry when creating the indices of list tensors such that it maps 3->2, 4->3, 5->4 and 7->6.

-- 
You received this bug notification because you are a member of DOLFIN
Team, which is subscribed to DOLFIN.
https://bugs.launchpad.net/bugs/745646

Title:
  Problem with assemble() with MixedFunctionSpace of symmetric
  TensorFunctionSpaces

Status in DOLFIN:
  New

Bug description:
  from dolfin import *

  mesh = Rectangle(0,0,1,1,10,10)
  dim = 2 #assume 2D
  symm = dict(((i,j), (j,i))
              for i in range(dim) for j in range(dim) if i > j )

  T1 = TensorFunctionSpace(mesh, 'CG', 1, symmetry=symm)
  T2 = TensorFunctionSpace(mesh, 'CG', 1, symmetry=symm)

  TT = T1*T2

  R, S = TrialFunctions(TT)
  v_R, v_S = TestFunctions(TT)

  P = Function(T1)
  Q = Function(T2)

  Fr = inner(R,v_R)*dx+ inner(P,v_R)*dx

  Fs = inner( S, v_S )*dx + inner( Q, v_S )*dx

  F = Fr + Fs

  A = lhs(F)
  B = rhs(F)

  a = Matrix()
  a = assemble(A, tensor=a)
  b = Vector()
  b = assemble(B, tensor=b)

  I get the following error:

  Calling FFC just-in-time (JIT) compiler, this may take some time.
  Traceback (most recent call last):
    File "tensortest2.py", line 28, in <module>
      a = assemble(A, tensor=a)
    File "/usr/lib/python2.6/dist-packages/dolfin/fem/assemble.py", line 100, in assemble
      common_cell=common_cell)
    File "/usr/lib/python2.6/dist-packages/dolfin/fem/form.py", line 34, in __init__
      (self._compiled_form, module, self.form_data) = jit(form, form_compiler_parameters, common_cell)
    File "/usr/lib/python2.6/dist-packages/dolfin/compilemodules/jit.py", line 47, in mpi_jit
      return local_jit(*args, **kwargs)
    File "/usr/lib/python2.6/dist-packages/dolfin/compilemodules/jit.py", line 114, in jit
      return jit_compile(form, parameters=p, common_cell=common_cell)
    File "/usr/lib/python2.6/dist-packages/ffc/jitcompiler.py", line 64, in jit
      return jit_form(object, parameters, common_cell)
    File "/usr/lib/python2.6/dist-packages/ffc/jitcompiler.py", line 122, in jit_form
      compile_form(preprocessed_form, prefix=jit_object.signature(), parameters=parameters)
    File "/usr/lib/python2.6/dist-packages/ffc/compiler.py", line 140, in compile_form
      ir = compute_ir(analysis, parameters)
    File "/usr/lib/python2.6/dist-packages/ffc/representation.py", line 66, in compute_ir
      irs = [_compute_integral_ir(f, i, parameters) for (i, f) in enumerate(forms)]
    File "/usr/lib/python2.6/dist-packages/ffc/representation.py", line 186, in _compute_integral_ir
      parameters)
    File "/usr/lib/python2.6/dist-packages/ffc/tensor/tensorrepresentation.py", line 59, in compute_integral_ir
      ir["AK"] = _compute_terms(monomial_form, None, None, domain_type, quadrature_degree)
    File "/usr/lib/python2.6/dist-packages/ffc/tensor/tensorrepresentation.py", line 98, in _compute_terms
      quadrature_degree)
    File "/usr/lib/python2.6/dist-packages/ffc/tensor/referencetensor.py", line 28, in __init__
      self.A0 = integrate(monomial, domain_type, facet0, facet1, quadrature_order)
    File "/usr/lib/python2.6/dist-packages/ffc/tensor/monomialintegration.py", line 50, in integrate
      psis = [_compute_psi(v, table, len(points), domain_type) for v in monomial.arguments]
    File "/usr/lib/python2.6/dist-packages/ffc/tensor/monomialintegration.py", line 169, in _compute_psi
      Psi[component][tuple(dlist)] = etable[dtuple][:, cindex[0].index_range[component], :]



Follow ups

References