← Back to team overview

ffc team mailing list archive

Re: [UFL-dev] Quadrature order

 

Quoting Anders Logg <logg@xxxxxxxxx>:

> On Fri, Mar 06, 2009 at 05:49:45PM +0100, Kristian Oelgaard wrote:
> > Quoting "Garth N. Wells" <gnw20@xxxxxxxxx>:
> >
> > >
> > >
> > > Kristian Oelgaard wrote:
> > > > Quoting "Garth N. Wells" <gnw20@xxxxxxxxx>:
> > > >
> > > >> I just tested the new FFC generated code (with quadrature) from the
> UFL
> > > >> input for Poisson. From the input code
> > > >>
> > > >>      element = FiniteElement("Lagrange", "triangle", 1)
> > > >>      v = TestFunction(element)
> > > >>      u = TrialFunction(element)
> > > >>      f = Function(element)
> > > >>
> > > >>      a = dot(grad(v), grad(u))*dx(0, {"quadrature_order":1})
> > > >>      L = v*f*dx(0, {"quadrature_order":2})
> > > >>
> > > >> I computed exactly the same solution as with the FFC .form code, but
> with
> > > >>
> > > >>      element = FiniteElement("Lagrange", "triangle", 1)
> > > >>      v = TestFunction(element)
> > > >>      u = TrialFunction(element)
> > > >>      f = Function(element)
> > > >>
> > > >>      a = dot(grad(v), grad(u))*dx
> > > >>      L = v*f*dx
> > > >>
> > > >> I see differences. How is the order of integration being selected?
> > > >
> > > > As far as I remember the UFL algorithm currently just looks at order of
> the
> > > > basis functions:
> > > >
> > >
> > > So it only looks at the test and trial functions, and not the other
> > > functions? And it doesn't take into account derivatives?
> >
> > Yes.
> >
> > > What, if anything, specific will UFL provide to the compiler to help
> > > decide on the integration order?
> >
> > The algorithm to compute this is present in UFL now it *just* needs to be
> > finished, but I don't know the priority of this.
> >
> > Kristian
>
> But it's strange that there should be a difference. The old code
> presumably used quadrature of high enough order to integrate
> exactly. Even if the new code uses quadrature of even higher order,
> there shouldn't be any difference (to within machine precision).

old code:
order of a = 0 --> 1 point
order of L = 2 --> 2 points

new code:
order of a = 2 --> 2 points
order of L = 1 --> 1 points, which is the problem.

> By the way, is quadrature_order the polynomial degree of the
> polynomials that should be integrated exactly, or is it the order of
> convergence. In case it is the former, maybe we should rename it to
> quadrature_degree to avoid confusion?

As I understood it quadrature_order is the polynomial degree that the quadrature
rule must be able to integrate.

Kristian

> --
> Anders
>




References