On Fri, 2010-06-18 at 12:23 +0200, Kristian Oelgaard wrote: > On 18 June 2010 12:05, Marie Rognes <m...@simula.no> wrote: > > On 18. juni 2010 11:38, Kristian Oelgaard wrote: > >> On 18 June 2010 01:44, Marie Rognes <m...@simula.no> wrote: > >> > >>> On 17. juni 2010 15:44, Mehdi wrote: > >>> > >>> On Wed, 2010-06-16 at 18:04 +0200, Kristian Oelgaard wrote: > >>> > >>> > >>> > >>> Mehdi and I discussed this a bit, one way to get around this in FFC is to > >>> let > >>> VectorElement accept a FiniteElement as argument, then you can do > >>> > >>> element = VectorElement(V + Q) > >>> > >>> and still be dimension independent. > >>> > >>> Or in UFL we can tweak the '+' operator, such that enriching a > >>> VectorElement means enriching each of the components of 'self' with > >>> the components of 'other'. For this to work the dimension of the two > >>> vector elements must of course be identical but I guess that will > >>> always be the case, otherwise we throw an error. > >>> > >>> > >>> I will go for this option. This allows us to have simpler code and > >>> preserves accessing to the sub-elements of enriched mixed element. > >>> > >>> > >>> > >>> How do you plan on handling elements such as the following (relevant in > >>> connection with the PEERS element for linear elasticity) with this > >>> approach? > >>> > >>> V = FiniteElement("RT", "triangle", 1) > >>> Q = VectorElement("B", "triangle", 3) > >>> W = V + Q > >>> > >> I was planning on throwing an error :) > >> > > > > > > Please don't :) > > > >> I did not know that one would ever want to enrich a scalar element > >> with a vector bubble function, > > > > Since RT is a vector-valued element, enriching it with a vector bubble > > function > > is well-defined. > > Ha, I completely missed the 'RT', that's what you get for working with > 'CG' only :) > Now it makes a lot more sense to me. > > > Strictly speaking, my example is not the enrichment of one UFL VectorElement > > with another VectorElement. So, I guess you could overload + for > > VectorElement (and TensorElement) only. However, that would make > > Yes, that's what we had in mind, then instead of an error we just > return an EnrichedElement, then it's up to the user to make sure that > the enrichment makes sense. I haven't looked at the code in detail > now, but maybe there are other things we need to check for. > > > V = FiniteElement("CG", "triangle", 1) > > V = V*V > > B = VectorElement("B", "triangle", 3) > > W = V + B > > > > and > > > > V2 = VectorElement("CG", "triangle", 1) > > W = V2 + B > > > > behave differently, which I imagine could be rather confusing. > > They do? > I would expect both instances to end up meaning > W = MixedElement([FiniteElement('CG', 'triangle', 1) + B]*2) > > or can you spell it out for me? > > > > >> but since this appears to be the case > >> the only two options, as I see it, are: > >> > >> 1) do nothing such that one will have to do > >> > >> P1 = FiniteElement("Lagrange", tetrahedron, 1) > >> B = FiniteElement("Bubble", tetrahedron, 3) > >> Q = FiniteElement("CG", triangle, 1) > >> Mini = MixedElement([P1 + B], [P1 + B], [P1 + B])*Q > >> > >> manually. > >> > >> 2) have VectorElement accept FiniteElementBase as argument to allow > >> > >> Mini = VectorElement(P1 + B)*Q > >> > >> which will reduce the labour of defining elements and still be > >> independent of dimensions. > >> > >> > > > > > > Option 2) sounds neat and useful in other contexts too :) > > We of course still do this even if we decide on option 1).
Option 2 is also fine with me. Let's see what Garth thinks. Mehdi > > Kristian > > > > >> We could of course try to 'guess' what the user wants but I don't > >> think that is a good idea. > >> > >> > > > > > > Agree. > > > > -- > > Marie > > > > > >> Kristian > >> > >> > >>> v = TestFunction(W) > >>> u = TrialFunction(W) > >>> a = dot(v, u)*dx > >>> > >>> -- > >>> Marie > >>> > >>> > >>> > >>> > >>> Mehdi > >>> > >>> > >>> Kristian > >>> > >>> > >>> > >>> Garth > >>> > >>> > >>> > >>> Kristian > >>> > >>> > >>> > >>> Garth > >>> > >>> > >>> > >>> > >>> > >>> -- > >>> Marie > >>> > >>> > >>> > >>> Mehdi > >>> > >>> > >>> > >>> > >>> -- > >>> Marie > >>> > >>> > >>> > >>> > >>> > >>> Mehdi > >>> > >>> > >>> > >>> > >>> > >>> _______________________________________________ > >>> 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 > >>> > >>> > >>> _______________________________________________ > >>> 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 > >>> > >>> > >>> > > > > _______________________________________________ Mailing list: https://launchpad.net/~ffc Post to : ffc@lists.launchpad.net Unsubscribe : https://launchpad.net/~ffc More help : https://help.launchpad.net/ListHelp