← Back to team overview

dolfin team mailing list archive

Re: Python mixed spaces and dof numbering

 

On Fri, Aug 06, 2010 at 11:50:58AM -0700, Johan Hake wrote:
> On Friday August 6 2010 11:44:50 Anders Logg wrote:
> > On Fri, Aug 06, 2010 at 06:52:58PM +0100, Garth N. Wells wrote:
> > > On Fri, 2010-08-06 at 10:06 -0700, Johan Hake wrote:
> > > > On Friday August 6 2010 09:52:20 Garth N. Wells wrote:
> > > > > We have an issue with MixedFunctionSpace which makes incorrect usage
> > > > > very easy. For example, if I have
> > > > >
> > > > >     V = VectorFunctionSpace(mesh, "CG", 2)
> > > > >     Q = FunctionSpace(mesh, "CG", 1)
> > > > >     W = V * Q
> > > > >
> > > > > The dof maps for Q and W.sub(1) are not the same. I've seen a number
> > > > > of users using V or Q in setting boundary conditions rather than
> > > > > W.sub(0) and W.sub(1).
> > > >
> > > > I have done this mistake myself :P
> > > >
> > > > I guess this problem only excist in POyDOLFIN?
> > >
> > > Yes.
> > >
> > > > > When using
> > > > >
> > > > >     W = MixedFunctionSpace([ V, Q])
> > > > >
> > > > > could we create W and then inside the MixedFunctionSpace constructor
> > > > > set
> > > > >
> > > > >    V = W.sub(0)
> > > > >    Q = W.sub(1)
> > > >
> > > > No as you are then just changing the local references of V and Q inside
> > > > the __init__ method.
> > >
> > > I realise this, but then at least Q and W.sub(1) will point to the same
> > > space. It may be confusing the creating a mixed space changes V and Q.
> >
> > I don't understand how that will work. There is no way that the call
> > to MixedFunctionSpace can change the meaning of V and Q.
>
> I agree
>
> > It would also
> > be confusing and dangerous. What we could do is change some property
> > of V and Q (like the offset) but that would lead to other problems
> > (see below).
> >
> > > > What you need is a method of FunctionSpace that transform it
> > > > to a SubSpace. Not sure that is possible?
> > > >
> > > > Is there a user case where V and Q are used for what they are (not
> > > > subspaces), after a declaration of a mixed space? We will screw such a
> > > > use if we turn V and Q into a subspaces.
> > > >
> > > > If this is not a consern, we might be able to tag V and Q as beeing
> > > > used to create a mixed space inside the __init__ of mixedfunctionspace
> > > > and issue some kind of warning (or exception!) whenever these are used
> > > > to create a Function or someother FunctionSpace dependent object. This
> > > > can be done purely in the Python layer.
> > >
> > > I'm really not sure what the best approach is.
> >
> > Tagging V and Q as special because they have been used to create a
> > mixed function space would be bad since V and Q might very well be
> > used to create other functions which have no relation to the mixed
> > space. A simple example is a right-hand side f = Function(V) in
> > Stokes.
> >
> > A solution would be to let the BoundaryCondition class check that the
> > global size of the dofmap (of which the sub dofmaps are parts) and
> > compare with the vector or matrix it is manipulating. That check would
> > fail for V and Q but work for W.sub(0) and W.sub(1).
>
> Aren't there quite alot of examples where this need to e checked?

It should be checked all the time.

--
Anders

Attachment: signature.asc
Description: Digital signature


References