← Back to team overview

ffc team mailing list archive

Fwd: Re: function on EnrichedElement

 


-------- Original Message --------
Subject: 	Re: function on EnrichedElement
Date: 	Tue, 15 Jun 2010 15:27:44 +0200
From: 	Marie Rognes <meg@xxxxxxxxx>
To: 	Mehdi <m.nikbakht@xxxxxxxxxx>
CC: 	gnw20@xxxxxxxxx, Anders Logg <logg@xxxxxxxxx>



On 15. juni 2010 15:12, Mehdi wrote:
> On Tue, 2010-06-15 at 14:26 +0200, Marie Rognes wrote:
>   
>> On 14. juni 2010 19:57, Marie Rognes wrote:
>>     
>>> On 14. juni 2010 19:37, Mehdi wrote:
>>>   
>>>       
>>>> On Mon, 2010-06-14 at 19:18 +0200, Marie Rognes wrote:
>>>>   
>>>>     
>>>>         
>>>>> On 14. juni 2010 18:10, Mehdi wrote:
>>>>>     
>>>>>       
>>>>>           
>>>>>> Hi Marie,
>>>>>>
>>>>>> I have a function defined on Enriched Element. I want to have access to
>>>>>> the subfunctions defined on this space. How ffc/ufl can be extended to
>>>>>> handle this issue? 
>>>>>>
>>>>>>   
>>>>>>       
>>>>>>         
>>>>>>             
>>>>> Could you give me a piece of sample code?
>>>>>     
>>>>>       
>>>>>           
>>>> The input is something like this,
>>>>
>>>> Elem1 = VectorElement("Lagrange", triangle, 2)
>>>> Elem2 = VectorElement("Lagrange", triangle, 1)
>>>>
>>>> Element = Elem1 + Elem2
>>>>
>>>> u = Coefficient(Element)
>>>>
>>>> # I want to have this functionality
>>>> u1, u2 = split(u)
>>>>
>>>> Thank you in advance.
>>>>
>>>>   
>>>>     
>>>>         
>>> Will see what I can do tomorrow.
>>>
>>> Note that functions on enriched spaces can be a bit treacherous since
>>> the basis is not a nodal basis.
>>>
>>>       
>> I've been thinking some about this. Let me try to explain why this is
>> nontrivial.
>>
>> Say, we have two element spaces
>>
>>     V = span ( {v_i} )
>>     Q = span ( {q_j})
>>
>> and create an "enriched space"
>>
>>     W = V + Q
>>
>> so that
>>
>>     W = span ( {v_i, q_j})
>>
>> We also define the degrees of freedom on W by taking the set of
>> all degrees of freedom on V (L_i) and all degrees of freedom on Q (K_j)
>>
>>     ( {L_i}, {K_j} )
>>
>> At this point, we are starting to tweak the ffc element framework a bit,
>> because the basis for W is _not_ a nodal basis with respect to the
>> degrees of freedom: it might be (actually, quite often is) that
>>
>>     L_i (q_j) \not = 0
>>
>> for all i, j and vice versa for K_j (v_i).)
>>
>> A function f in W can be represented as
>>
>>     f = \alpha_i v_i + beta_j q_j
>>
>> However, note that for some degree of freedom L_k,
>>
>>     L_k(f) = \alpha_k + \beta_j L_k(q_j)
>>
>> Hence, the coefficients in the vector do _not_ directly correspond to
>> the degrees of freedom, unless L_k(q_j) = 0 for all k, j. This means
>> that most kinds of function manipulation on enriched elements give you
>> something different than what you might think you get.
>>    
>> There are however exceptions where things are good: Take for instance
>> continuous linears plus bubble:
>>
>>     V = FiniteElement("CG", "triangle", 1)
>>     Q = FiniteElement("B", "triangle", 3)
>>     W = V + Q
>>
>> Since the bubble basis functions are zero on the boundary of each
>> element, with the above notation
>>
>>     L_k (q_j) = 0
>>
>> for all k, j. This means that you can do
>>
>>     f = Function(W)
>>     g = interpolate(f, V)
>>
>> Then g will be what I think you want from
>>
>>     (g, h) = split(f)
>>    
>> In order to get h, you could do
>>
>>     h = f - g
>>
>>
>> It would be possible to extract the vectors {\alpha_i} and {\beta_j}
>> from a Function on an enriched elements, but this requires quite a bit
>> of work, and is mainly DOLFIN related (rather than FFC/UFL).
>>     
> Actually we were handling this inside main file before, but we didn't
> like it. It makes code dirty especially for the nonlinear problems in
> which we need to obtain these functions in each iteration explicitly.
>
>  We think that handling enriched elements inside FFC/UFL is not
> consistent with the rest. This causes problems while working with
> enriched elements.
>   


So, let's take this discussion on a mailing list instead?

--
Marie



Follow ups