FFC

Implement support for restrictions to subdomains

Registered by Kristian B. ├ślgaard

FFC should support forms defined over elements defined over different domains/regions. Today, FFC simplify ignores the differing domains.
Instead, for each integral in the form, FFC should generate tabulate-tensor functions
computing local element tensors of the minimal dimension necessary.

Take ~this as an example:

  D = Domain(triangle, name='Universe')
  left = Region(D, (0, 2), name='left')
  right = Region(D, (1, 2), name='right')

  V1 = FiniteElement("CG", left, 1)
  V2 = FiniteElement("CG", right, 2)
  W = V1*V2

  (u1, u2) = TrialFunctions(W)
  (v1, v2) = TestFunctions(W)
  a = u1*v1*dx(0) + u2*v2*dx(1) + u1*v1*dx(2)

For the case above, the local element tensors corresponding to dx(0),
should be 3x3, while those corresponding to dx(1) should be 6x6,
and those corresponding to dx(2) would be 9x9.

This, potentially in combination with clever tabulate_dofs or dof map
construction, should enable assembly over multidomains without much overhead.

Blueprint information

Status:
Not started
Approver:
None
Priority:
High
Drafter:
None
Direction:
Needs approval
Assignee:
None
Definition:
Discussion
Series goal:
None
Implementation:
Unknown
Milestone target:
None

Related branches

Whiteboard

MER: I don't understand what this blueprint is about.

MSA: This is for function spaces living on subdomains. Core topic for the upcoming sprint. Note that the UFL syntax will be up for revision if we add better support for expressing subdomains.

MER: So, what is the existing UFL syntax for this?

MSA:

In [3]: V = FiniteElement("CG", triangle, 1)
In [4]: V[dx(0)]
Out[4]: RestrictedElement(FiniteElement('Lagrange', Cell('triangle', Space(2)), 1, None), Measure('cell', 0, None))

MER: Ack. I'll up the priority then :-)

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.