dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #16676
Re: Auto-detection of elements
On Thu, Nov 26, 2009 at 10:59:56PM +0000, Garth N. Wells wrote:
>
>
> Marie Rognes wrote:
> > Anders Logg wrote:
> >> On Thu, Nov 26, 2009 at 08:20:31PM +0100, Marie Rognes wrote:
> >>
> >>> Anders Logg wrote:
> >>>
> >>>> I made some fixes to UFL and FFC to allow auto-detection of degree and
> >>>> shape for all types of elements.
> >>>>
> >>>> I also changed in expression.py in DOLFIN to use Lagrange by default
> >>>> instead of Quadrature.
>
> This is really bad. It should be quadrature. Why was it changed?
It's not that bad. It's pretty good.
--
Anders
> Garth
>
> The Poisson demo now works with the new simple
> >>>> Expression interface:
> >>>>
> >>>> f = Expression("10*exp(-(pow(x[0] - 0.5, 2) + pow(x[1] - 0.5, 2)) /
> >>>> 0.02)")
> >>>> g = Expression("sin(5*x[0])")
> >>>>
> >>>>
> >>> Nice :)
> >>>
> >>>
> >>>> No need for V=V anymore.
> >>>>
> >>>>
> >>> Can one still use V=V if one wants to prescribe a function space?
> >>>
> >>
> >> Yes, one can do things like
> >>
> >> f = Expression(("sin(5*x[0])"), ("cos(x[1])"),
> >> element=FiniteElement("BDM", triangle, 10))
> >>
> >> or just
> >>
> >> f = Expression(("sin(5*x[0])"), ("cos(x[1])"), degree=5)
> >>
> >>
> >
> > Good.
> >
> >>>> I think it would be ok to use Lagrange by default.
> >>>>
> >>>>
> >>> Lagrange yes, but maybe higher order? (Using the same (or lower)
> >>> order for input
> >>> data as the discretization tends to be slightly dangerous.)
> >>>
> >>
> >> Any input on how it should be chosen is appreciated!
> >>
> >> All the logic is in the function _adjust_elements in compiler.py in FFC:
> >>
> >> def _adjust_elements(form_data):
> >> "Adjust cell and degree for elements when unspecified"
> >>
> >> # Extract common cell
> >> common_cell = form_data.cell
> >> if common_cell.domain() is None:
> >> error("Missing cell definition in form.")
> >>
> >> # Extract common degree
> >> degrees = [metadata["quadrature_order"] for metadata in
> >> form_data.metadata.itervalues()]
> >> degrees = [q for q in degrees if not q is None]
> >> if degrees:
> >> common_degree = max(degrees)
> >> else:
> >> common_degree = default_quadrature_degree
> >>
> >> # Set cell and degree if missing
> >> for element in form_data.elements:
> >>
> >> # Check if cell and degree need to be adjusted
> >> cell = element.cell()
> >> degree = element.degree()
> >> if degree is None:
> >> info("Adjusting element degree from %s to %d" %
> >> (istr(degree), common_degree))
> >> element.set_degree(common_degree)
> >> if cell.domain() is None:
> >> info("Adjusting element cell from %s to %s." %
> >> (istr(cell), str(common_cell)))
> >> element.set_cell(common_cell)
> >>
> >> Please help out to get this right.
> >>
> >
> > Ok!
> >
>
>
Attachment:
signature.asc
Description: Digital signature
References