dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #16674
Re: Auto-detection of elements
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?
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!
>
> --
> Marie
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help : https://help.launchpad.net/ListHelp
Follow ups
References