← Back to team overview

ffc team mailing list archive

Re: Fwd: Re: function on EnrichedElement

 

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?

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