On Wednesday January 19 2011 01:31:23 Anders Logg wrote: > On Tue, Jan 18, 2011 at 08:20:43AM -0800, Johan Hake wrote: > > On Tuesday January 18 2011 06:33:31 Anders Logg wrote: > > > Can somone remind me why we have sub() instead of [] for accessing > > > subspaces in Python? > > > > This is because the way UFL handles Indexed(*). > > > > We have not (yet) managed to figure out how we can inherit (dynamic or > > static) from and Indexed(*). We need this when the resulting subfunction > > is returned. > > > > So therefore is [] used in ufl forms and .sub when a dolfin.SubFunction > > is needed. I am also not sure it would work to extract a SubFunction and > > then let it inherite Indexed(Coefficient(MixedElement(*))) as UFL assume > > it is an index into a MixedFunction. If the underlaying dolfin.Function > > is a SubFunction the indexing might get screwed. > > > > It might be possible with some magic to recognize a passed > > Indexed(Coefficient(MixedElement(*))) and then extract the > > dolfin.SubFunction when that is needed. It is magic but might work if > > the number of occasions it is used is limited. We might also just keep > > .sub for direct access to the SubFunction. > > > > In what places do we need a SubFunction? > > I was thinking more about the FunctionSpace class and how we set > subsystem boundary conditions with W.sub(0), W.sub(1) etc.
Ok, I missed that detail... > Using sub is probably better since it is consistent with sub for > Functions (which we need for the reasons you stated above). I actually think that this was the main reason of chosing sub. > One problem that remains is the inconsistency between C++ and Python > for setting the bcs. In Python we use sub() whereas in C++ we use > SubSpace. We do use SubSpaces in Python too. W.sub(0) returns a subspace. Johan _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : dolfin@lists.launchpad.net Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp