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).