← Back to team overview

ffc team mailing list archive

Re: Fwd: Re: function on EnrichedElement

 

On 16. juni 2010 13:41, Mehdi wrote:
> On Tue, 2010-06-15 at 15:35 +0200, Marie Rognes wrote:
>   
>>
>> -------- 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
>>>>         
> This is not the case for the enrichment space(Q) in the partition of
> unity method. They are often defined on the same dofs that we have
> defined standard space V.
>
>   
>>>> 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).
>>>>
>>>>         
> To handle this inside DOLFIN, we extract required data form vectors. Why
> performing the approach inisde FFC/UFL is difficult? Isn't it just
> enough to pick up the components corresponding to a specific space from
> enriched space?
>
>   


I don't see how to do this. If you or anyone else know how, go ahead :)

--
Marie


> Mehdi
>
>   
>>      
>>     
>>> 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
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~ffc
>> Post to     : ffc@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~ffc
>> More help   : https://help.launchpad.net/ListHelp
>>     
>   




Follow ups

References