← Back to team overview

ffc team mailing list archive

Re: Fwd: Re: function on EnrichedElement

 

On Wed, 2010-06-16 at 14:03 +0200, Marie Rognes wrote:
> 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 :)

OK. let me give it a try. Maybe this is a hack, but I think we may need
to attach offsets for the sub functions derived from enriched space. Is
there any reason why not this should work?

 Mehdi

> 
> --
> 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