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 <[email protected]> >> To: >> Mehdi <[email protected]> >> CC: >> [email protected], Anders Logg >> <[email protected]> >> >> >> 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 : [email protected] >> Unsubscribe : https://launchpad.net/~ffc >> More help : https://help.launchpad.net/ListHelp >> > _______________________________________________ Mailing list: https://launchpad.net/~ffc Post to : [email protected] Unsubscribe : https://launchpad.net/~ffc More help : https://help.launchpad.net/ListHelp

