<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
  <title></title>
</head>
<body text="#000000" bgcolor="#ffffff">
Hi,<br>
<br>
I added a new page to our wiki - I think we decided, that that is a
good place for a discussion <br>
on the agenda for our meetings?<br>
<br>
I started by copying in Robert's suggestions...<br>
<br>
Best<br>
Andreas<br>
<br>
<br>
On 27/09/10 13:11, Robert Kloefkorn wrote:
<blockquote cite="mid:4CA089D6.9040802@mathematik.uni-freiburg.de"
 type="cite">Dear Dune Developers,
  <br>
  <br>
the followings changes to the DUNE-Grid interface I do consider very
  <br>
useful and I think these can be achieved during the next year:
  <br>
  <br>
=============================================
  <br>
1) Performance issues of the Grid interface:
  <br>
=============================================
  <br>
  <br>
&nbsp;i) Entity and EntityPointers:
  <br>
&nbsp;&nbsp;&nbsp; Entity can be stored (although this might be memory consuming)
  <br>
&nbsp;&nbsp;&nbsp; meaning one can write:
  <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entity entity = *it;
  <br>
  <br>
&nbsp;&nbsp;&nbsp; For efficiency reasons the Entity class can be implemented as a
  <br>
&nbsp;&nbsp;&nbsp; reference counted pointer which would allow both, easy use and no
copying.
  <br>
  <br>
&nbsp;&nbsp;&nbsp; Code of the from
  <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Entity&amp; entity = *it ;
  <br>
  <br>
&nbsp;&nbsp;&nbsp; will still be valid.
  <br>
  <br>
&nbsp;&nbsp;&nbsp; The best consequence of this is:
  <br>
  <br>
&nbsp;ii) removal of EntityPointer
  <br>
  <br>
&nbsp;&nbsp;&nbsp; The transition should be not to difficult since the typedef for
  <br>
&nbsp;&nbsp;&nbsp; EntityPointer will point to Entity and on the Entity class we
introduce
  <br>
&nbsp;&nbsp;&nbsp; the method
  <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Entity* operator -&gt; () const { return this; }
  <br>
  <br>
&nbsp;&nbsp;&nbsp; After this the interface will be much better to understand
  <br>
&nbsp;&nbsp;&nbsp; better to use.
  <br>
  <br>
&nbsp;&nbsp;&nbsp; In fact, all methods returning a reference to an object should be
revised.
  <br>
  <br>
&nbsp; iii) For "storage" of Entities in array-like structures we introduce
the
  <br>
&nbsp;&nbsp;&nbsp; concept EntityKey (appropriate name to be found) which only
  <br>
&nbsp;&nbsp;&nbsp; contains the minimal information needed to create the corresponding
  <br>
&nbsp;&nbsp;&nbsp; Entity from this. An appropriate method will be available on the
Grid class.
  <br>
&nbsp;&nbsp;&nbsp; This makes the implementation of Grids and the maintenance of
current
  <br>
&nbsp;&nbsp;&nbsp; grids much easier since the we do not have to implement two
contrary
  <br>
&nbsp;&nbsp;&nbsp; concepts in one class.
  <br>
  <br>
&nbsp; iv) the method jacobianInverseTransposed (and probably the method
  <br>
&nbsp;&nbsp;&nbsp; jacobian) return not a FieldMatrix but an object specified by the
  <br>
&nbsp;&nbsp;&nbsp; implementation (which can still be a FieldMatrix) which implements
all
  <br>
&nbsp;&nbsp;&nbsp; mult methods and casts into a FieldMatrix. With this extension we
can
  <br>
&nbsp;&nbsp;&nbsp; implement the jacobianInverseTransposed for Cartesian grids much
more
  <br>
&nbsp;&nbsp;&nbsp; efficiently, not the full matvec is needed in this case.
  <br>
  <br>
&nbsp; v) not only the jacobianInverseTransposed but also the Geometry (on
Entity and
  <br>
&nbsp;&nbsp;&nbsp; Intersection) should not be returned as a reference. This would
improve
  <br>
&nbsp;&nbsp;&nbsp; the performance of meta grids which is currently not good,
  <br>
&nbsp;&nbsp;&nbsp; i.e. about 25% are lost when wrapping a grid to provide
  <br>
&nbsp;&nbsp;&nbsp; additional features, e.g. GeometryGrid, PrismGrid, ....
  <br>
  <br>
  <br>
=============================================
  <br>
2) Interface design issues:
  <br>
=============================================
  <br>
  <br>
&nbsp; i) The boundarySegmentIndex is put into an index set (like any other
  <br>
&nbsp;&nbsp;&nbsp; index) instead of implementing it on an class. This is a
contradiction
  <br>
&nbsp;&nbsp;&nbsp; to the existing interface and also something one might only
generate
  <br>
&nbsp;&nbsp;&nbsp; when needed.
  <br>
  <br>
  <br>
&nbsp;ii) Boundary projections have to become "user data". The current
  <br>
&nbsp;&nbsp;&nbsp; approach is a contradiction to separation of data and grid
structures.
  <br>
  <br>
  <br>
&nbsp;iii) Persistent Index Container: Currently when a DoF mapping is built
  <br>
&nbsp;&nbsp;&nbsp; that should be persistent also in an adaptive computation one would
  <br>
&nbsp;&nbsp;&nbsp; have to use LocalIdSet in some sense which implies O(log(N)) index
  <br>
&nbsp;&nbsp;&nbsp; access instead of O(1). Using AlbertaGrid or ALUGrid together with
  <br>
&nbsp;&nbsp;&nbsp; DUNE-Fem there is a concept to overcome this shortcoming. This
should
  <br>
&nbsp;&nbsp;&nbsp; also be introduced in the DUNE-Grid interface and replace the
LocalIdSet
  <br>
&nbsp;&nbsp;&nbsp; (not the GlobalIdSet which is still needed as it is). We could
  <br>
&nbsp;&nbsp;&nbsp; introduce a utility class that uses the current IdSet to
  <br>
&nbsp;&nbsp;&nbsp; implement this feature (by default) and which can be specialized
  <br>
&nbsp;&nbsp;&nbsp; for each grid if a better implementation is available.
  <br>
  <br>
  <br>
=============================================
  <br>
3) Interface extension for special purpose:
  <br>
=============================================
  <br>
  <br>
&nbsp; i) Easier extension of the Grid interface to introduce new features
  <br>
&nbsp;&nbsp;&nbsp; much more easily and, for example, to allow change of the interface
in a better way.
  <br>
  <br>
&nbsp;ii) The method getRealImp() should be replaced by impl() and should be
public which
  <br>
&nbsp;&nbsp; would be a good step towards i). Together with this "capabilities"
in a namespace
  <br>
&nbsp;&nbsp; Extensions are needed that tell whether special features are
available or not.
  <br>
  <br>
  <br>
Best regards
  <br>
  <br>
Robert
  <br>
  <br>
  <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
Dune mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Dune@dune-project.org">Dune@dune-project.org</a>
<a class="moz-txt-link-freetext" href="http://lists.dune-project.org/mailman/listinfo/dune">http://lists.dune-project.org/mailman/listinfo/dune</a>
  </pre>
</blockquote>
<br>
</body>
</html>