← Back to team overview

dolfin team mailing list archive

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