← Back to team overview

ufl team mailing list archive

Re: Extending UFL

 

Quoting "Garth N. Wells" <gnw20@xxxxxxxxx>:

>
>
> Kristian Oelgaard wrote:
> > Quoting Martin Sandve Alnæs <martinal@xxxxxxxxx>:
> >
> >> Hi all,
> >> thanks for all the nice comments and feedback at the workshop.
> >> There was in particular some interest in how to extend UFL
> >> with experimental features without having to interfere with the
> >> main development branch. I'd like to compile a list of the kind
> >> of features that are most interesting to people, so we can figure
> >> out what to make extensible. Then I'll see what I can do.
> >
> > Extending UFL with lifting operators.
> >
> > Recall that for the Poisson equation we have:
> >
> > a = \int (grad(v) + R(v))(grad(u) + R(u)) d\Omega
> >     + \sum_e \int (\eta r^e(v) r^e(u) d\Omega
> >
> > with
> >
> > R(u) = \sum_e r^e(u)
> > and
> > \int_{E = E^{+} + E^{-}} w r^e(u) d\Omega = - \int_e {w}[u] d\Gamma
> >
> > where the last equation is the lifting operation.
> >
> > I think we need to introduce two new functions in order to distinguish
> terms
> > like grad(v)R(u) and the stabilisation term r^e(v)r^e(u).
> > As mentioned at the workshop, we probably also need a new integral type.
> >
> > So (some of) the terms in the Poisson equation could be represented as:
> >
> > element  = FiniteElement("Discontinuous Lagrange", triangle, 1)
> > l_space = VectorElement("Discontinuous Lagrange", triangle, 0)
> >
> > v = TestFunction(element)
> > u = TrialFunction(element)
> > R = LiftingFunction(l_space)
> > r = LiftingOperator(l_space)
> >
> > a = inner(grad(v), R(u))*dE + inner(r(v), r(u))*dE
> >
> > For this to work, we probably have to introduce a new type of integral in
> UFC
> > and modify the assembly in DOLFIN.
> >
>
> I think that this can be cast in a more generic framework of static
> condensation. The question then is how UFL should let a form compiler
> know that a dof should be eliminated at some local level (typically at
> the level of a cell or the union of two cells). This may also require an
> extension of UFC (to return/accept local and global parts of the tensor).

OK, so you want to define e.g., v and r(v) on a mixed element and then eliminate
r(v)?
I guess, in addition to where, we also need to define how we eliminate the dofs
i.e.

\int_{E = E^{+} + E^{-}} w r^e(u) d\Omega = - \int_e {w}[u] d\Gamma

Kristian


> Garth
>
> > Kristian
> >
> >> Martin
> >> _______________________________________________
> >> UFL-dev mailing list
> >> UFL-dev@xxxxxxxxxx
> >> http://fenics.org/mailman/listinfo/ufl-dev
> >>
> >
> >
> > _______________________________________________
> > UFL-dev mailing list
> > UFL-dev@xxxxxxxxxx
> > http://fenics.org/mailman/listinfo/ufl-dev
>
>




References