← Back to team overview

dolfin team mailing list archive

Re: Issues with interpolate

 

On Thursday 02 July 2009 13:24:28 Garth N. Wells wrote:
> Johan Hake wrote:
> > On Thursday 02 July 2009 13:07:47 Garth N. Wells wrote:
> >> Marie Rognes wrote:
> >>> Garth N. Wells wrote:
> >>>> Marie Rognes wrote:
> >>>>> The following code gives r = 0.0. It is not supposed to be.
> >>>>>
> >>>>> The problem seems to be that f's vector is still all zeros at the
> >>>>> call to interpolate. Could this be easily fixed?
> >>>>
> >>>> This example should have led to an error message since f is not a
> >>>> discrete function. I'll take a look.
> >>>
> >>> Ok, thanks!
> >>>
> >>> However,
> >>>
> >>> (a) Why is f not a discrete function? (It is defined on a finite
> >>> element space?)
> >>
> >> On second thought, it may be a discrete function. I think that this is
> >> defined in the Python interface and not the C++ interface, so I'll take
> >> a look.
> >
> > A user defined function is not a discrete function untill you either call
> > interpolate() or vector, also in python. The problem with the later is
> > that you then create a vector which is initialized to 0.
> >
> > I think this has been discussed before, but should we populate the vector
> > using f.interpolate() when vector is called on a userdefined function?
>
> Or perhaps Function::vector() should throw an error if the vector has
> not already been allocated.

I vote for this.

The error message can include information about the user might want to call 
interpolate?

Johan

> Garth
>
> > johan
> >
> >>> (b) I would very much like this not to give an error, but rather work
> >>> ;) I would use something like this all the time when checking
> >>> convergence.
> >>
> >> Just do
> >>
> >>    f.interpolate()
> >>
> >> Garth
> >>
> >>> --
> >>> Marie
> >>>
> >>>> Garth
> >>>>
> >>>>> --
> >>>>> from dolfin import *
> >>>>>
> >>>>> mesh = UnitSquare(1,1)
> >>>>> V_h = FunctionSpace(mesh, "CG", 1)
> >>>>> f = Function(V_h, "1.0")
> >>>>>
> >>>>> Q_h = FunctionSpace(mesh, "DG", 1)
> >>>>> Pi_f = interpolate(f, Q_h)
> >>>>>
> >>>>> r = norm(Pi_f)
> >>>>> print "r = ", r
> >>>>> ---
> >>>>>
> >>>>> --
> >>>>> Marie
> >>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> DOLFIN-dev mailing list
> >>>>> DOLFIN-dev@xxxxxxxxxx
> >>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
> >>
> >> _______________________________________________
> >> DOLFIN-dev mailing list
> >> DOLFIN-dev@xxxxxxxxxx
> >> http://www.fenics.org/mailman/listinfo/dolfin-dev




Follow ups

References