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 <m...@simula.no> > >> To: > >> Mehdi <m.nikba...@tudelft.nl> > >> CC: > >> gn...@cam.ac.uk, Anders Logg > >> <l...@simula.no> > >> > >> > >> 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@lists.launchpad.net > >> Unsubscribe : https://launchpad.net/~ffc > >> More help : https://help.launchpad.net/ListHelp > >> > > > _______________________________________________ Mailing list: https://launchpad.net/~ffc Post to : ffc@lists.launchpad.net Unsubscribe : https://launchpad.net/~ffc More help : https://help.launchpad.net/ListHelp