dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #04227
Re: a question about dolfin
On Mon, Jan 22, 2007 at 11:37:47AM +0100, Anders Logg wrote:
> On Sun, Jan 21, 2007 at 10:44:11PM +0100, Johan Jansson wrote:
> > On Sun, Jan 21, 2007 at 06:11:03PM -0300, Pablo De Napoli wrote:
> > > Hi!
> > >
> > > My name is Pablo De Nápoli, I work at the Department of Mathematics atBuenos
> > > Aires University, Argentina.
> > >
> > > I'm new to Dolfin, and I'm planning to use for some numerical experiments in
> > > my research. I think it is a very interesting software specially for
> > > the close to the
> > > mathematical-thinking way of representing the PDEs in weak formulation.
> > >
> >
> > ...
> >
> > > Could you please explain me what is wrong in this program?
> > > User-defined functions can't be plotted? (exported to files?)
> > >
> >
> > Hi Pablo,
> >
> > Yes, user-defined functions cannot be directly plotted/exported to
> > file. You need to project the function to a finite element space to do
> > that. I've modified your program to achieve that:
> >
> > #include <dolfin.h>
> > #include "Projection.h"
> >
> > using namespace dolfin;
> >
> > int main()
> > {
> > class Myfunction : public Function
> > {
> > real eval(const Point& p, unsigned int i)
> > {
> > real x= p.x();
> > real y= p.y();
> > return (x+y);
> > }
> > };
> >
> >
> > UnitSquare mesh(16, 16);
> >
> > Myfunction f;
> > Projection::BilinearForm a;
> > Projection::LinearForm L(f);
> >
> > LinearPDE pde(a, L, mesh);
> >
> > Function F;
> > pde.solve(F);
> >
> > File file("F.pvd");
> > file << F;
> >
> > return 0;
> > }
> >
> > with the form "Projection.form":
> >
> > # Compile this form with FFC: ffc Projection.form.
> >
> > element = FiniteElement("Lagrange", "triangle", 1)
> >
> > v = TestFunction(element)
> > U = TrialFunction(element)
> > f = Function(element)
> >
> > a = v * U * dx
> > L = v * f * dx
> >
> > There is experimental functionality to simplify the computation of
> > projections, since it's so fundamental, but it's not quite stable yet.
> >
> > Export of user-defined functions could be implemented by automatically
> > performing a projection as above.
> >
> > > By the way, I think that the code in section 4.3.2 Dolfin's manual
> > > (User-defined functions) is not correct
> > >
> > > for example Instead of
> > >
> > > class Source : public Function
> > > {
> > > real eval(const Point& p, unsigned int i)
> > > {
> > > return x*y*sin(z / DOLFIN_PI);
> > > }
> > > };
> > >
> > > (this form of the code didn't work for me)
> > > it should be
> > >
> > > class Source : public Function
> > > {
> > > real eval(const Point& p, unsigned int i)
> > > {
> > > return p.x()*p.y()*sin(p.z() / DOLFIN_PI);
> > > }
> > > };
> > >
> > > and likewise in the other examples in that section....
> >
> > You're right, this is because the mesh representation has recently
> > changed. The documentation should be updated more frequently, but
> > since fundamental interfaces are still being implemented/improved,
> > that is given higher priority.
>
> This will improve in the near future. The linear algebra interface
> stabilized during the summer, the new mesh library is now in firm
> place and the assembly/form evaluation will soon be in place (and stay
> fixed).
>
> After that, the interfaces will be remain mostly constant and we will
> be able to write a useful manual.
>
> /Anders
Another comment concerning plotting: Ola Skavhaug has developed a
small and simple VTK-based plot library that can be used for simple
plotting of DOLFIN functions (not yet user-defined). When this new
library is in place, you'll be able to do
u = Function(...)
plot(u)
from PyDOLFIN.
/Anders
References