[Dune] Grid refinement and persistent geometry objects
Martin Weiser
weiser at zib.de
Mon Oct 16 12:16:52 CEST 2006
Dear DUNE developers,
I think that for prolongating FE functions during grid refinement,
persistent geometry objects are needed. In the following, somewhat
detailed and lengthy, elaborations I will describe how this requirement
arises, and subsequently suggest a design that should solve the problem.
Since this concerns the design of DUNE and in particular the
implementation of grid interfaces, I'd appreciate any constructive
comment.
Assume I have FE functions defined in terms of Lagrangian shape functions
associated to certain nodes in the codimension 0 elements (cells for
short). Note that the nodes may be distributed in a fairly complex
fashion, in particular, no one to one correspondence to grid subentities
of certain codimension need exist.
The preferred way to interpolate FE functions during refinement is to
simply evaluate the function at the new nodes, giving the new
coefficients. Since I use DUNE for good reason,
(i) I don't know these new nodes before refinement, since I don't know
wheter bisection or red/green refinement is used. In fact, even if I
knew, it is a rather difficult and global computation to decide whether
any cell is refined at all.
(ii) I cannot access geometry objects for the pre-refinement leaf cells,
since these cells need not exist after refinement (clear for coarsening,
but also true for green closures removed before refinement). Remember
that the Geometry class does not offer any guarantees or specific
information about the mapping from reference to grid cell. Most often it
will be affine, but that's in no way guaranteed.
Now the problem is that in order to evaluate a pre-refinement FE function,
I need the local coordinates of *new* nodes wrt the *old* cell in which
the node happens to be. But the new node is known only after refinement,
whereas the old cell geometry is known only before refinement. Am I
missing somewhat?
A solution to this dilemma may be structured as follows:
Every Grid exports via its Codim<0> traits a class PersistentGeometry that
can be constructed from a Codim<0>::Geometry object. This
PersistentGeometry should be a model of Dune::Geometry<>.
In that way, PersistentGeometry objects can be stored along with the
(persistent) id of old leaf cells and be accessible *after* refinement.
For affine mappings it is quite trivial to store the required information
without any reference to the grid. In fact, a default implementation can
be reused by any specific grid by just defining the
Codim<0>::PersistentGeometry type.
For, say, isoparametric mappings this is somewhat more involved, but not
that hard.
A second approach would be to require Geometry<> objects to be copy
constructible and not be invalidated by grid refinement, but this might
incur inefficiencies and require more massive code changes.
Yours,
Martin
--
Dr. Martin Weiser web: www.zib.de/weiser
Zuse Institute Berlin mail: weiser at zib.de
Numerical Analysis and Modelling pgp key: www.zib.de/weiser/weiser.asc
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <https://lists.dune-project.org/pipermail/dune/attachments/20061016/9c43e53a/attachment.sig>
More information about the Dune
mailing list