← Back to team overview

dolfin team mailing list archive

Re: Mesh refine

 

On Thu, Feb 03, 2011 at 08:54:10PM +0000, Garth N. Wells wrote:
>
>
> On 03/02/11 20:49, Anders Logg wrote:
> > On Thu, Feb 03, 2011 at 08:26:14PM +0000, Garth N. Wells wrote:
> >> I haven't looked at the new mesh refine code, but I'm not too keen on
> >> the interface. It was neat to do
> >>
> >>   Mesh mesh("lshape.xml.gz");
> >>   mesh = refine(mesh);
> >>
> >> Doing the above, there is no compile time error, but there is a runtime
> >> error. Now we have to do
> >>
> >>   Mesh mesh0("lshape.xml.gz");
> >>   Mesh& mesh = refine(mesh0);
> >
> > The above is not possible. You have to do
> >
>
> ... seems that it is. Look at the NS demo.

That was probably before I merged my branch (assuming I have, see
other post regarding merge problems).

> >   Mesh mesh0("lshape.xml.gz");
> >   const Mesh& mesh = refine(mesh0);
> >
> > (const since the returned mesh has access to mesh0 which is a const
> > argument of refine)
> >
> > Alternatively, as I've done in the Navier-Stokes demo, you can do
> >
> >   Mesh mesh0("lshape.xml.gz");
> >   refine(mesh0);
> >   Mesh& mesh = mesh0.child(); // no const here
> >
> >> which I think is a bit clumsy. How can I refine a mesh easily if I'm not
> >> interested in keeping a hierarchy?
> >
> > I agree it's more clumsy.
> >
> > I don't know what the best solution is. Perhaps one could have a
> > global parameter "store_hierarchy" which defaults to False in
> > combination with return by value in the refine functions.
> >
> > Assignment would then only work when the depth of the hierarchy is 1
> > (when no hierarchy is stored).
> >
>
> I think that it's essential that the hierarchy can be disregarded. I use
> refine, but I'm not yet interested the hierarchy.
>
> > Another option would be to allow assignment from the returned
> > reference but then make sure that whenever we assign to an object that
> > is a member of a hierarchy, we destroy the (entire) hierarchy. This
> > might be cleaner since we don't need the parameter.
> >
>
> I would like to keep Mesh simple. Could we have something like a
> HierarchicalFoo container that can wrap a Mesh, and store the hierarchy,
> etc?

The Mesh class is just as simple as it was yesterday. That's the point
of the new base class that handles all the complexity.

The point is that we need to store the hierarchy as part of the
objects themselves since it would otherwise be a nightmare to
implement this function:

  refine(variational_problem).

This needs to refine all involved objects (meshes, function spaces,
functions, forms, bcs, ...).

I'll think of a way to make the hierarchy non-intrusive, in particular
making

  mesh = refine(mesh)

work (by destroying the hierarchy).

--
Anders



References