[Dune] same ID for several interfaces!

Carsten Gräser graeser at math.fu-berlin.de
Wed Jun 8 14:49:29 CEST 2011


Hi,

Am 08.06.2011 14:28, schrieb Benjamin Faigle:
> Hello,
> 
> to clarify the concerns, I want to extend my small sketch:
> 
> +---+-------+-------+
> |   |       |       |
> +---+   7   |   8   |
> |   |       |       |
> +---+---+---+-------+
> |   | 39| 38|       |
> +---+---+---+   15  |
> |   | 36| 37|       |
> +---+---+---+-------+
> |   |       |       |
> +---+   6   |   12  |
> |   |       |       |
> +---+-------+-------+
> 
> I doublechecked the sketch, both with indices and via global positions through
> is.geometry().center(). The wrong faces are not next to each other. But I indeed made a mistake in
> my mail, same IDs are for 38-7 and !37!-6, however that should not really be a difference.
it does make a difference. This might be exactly the (second)
situation I mentioned:

38 and 37 have a common face (1-subentity) and the global id might be the one
from this entity. The check with is.geometry().center() does not show this.
As Oliver mentioned the problem is the following:

Starting from 38 indexInOutside gives you the LOCAL index i of the
subentity with respect to 7. If you use the subIndex method with
the element inside, a.k. 38 but with the local index i with respect
to 7 you get the id of a face of 38 that is in general NOT contained
in the intersection. See the example:

+----------+
|    0     |
|          |
|3        1|   7
|          |
|    2     |
+-----+----+
|  0  |
|3   1|  38
|  2  |
+-----+  <<<<<
|     |  36
+-----+

If you have the intersection of 38 and 7 starting from 38 you have
indexInOutside=2 and indexInInside=0. Hence subId(inside, indexInOutside,1)
gives you the id of the bottom face of 38 and NOT of the top face related
to the intersection. If this happens on 38 and 36 you might get the common
face of those two.

While is.geometry().center() gives you the center of the intersection
and not the unrelated face refered to by indexInOutside the following
really uses the geometry of this face:

  is.inside->subEntity<1>(is.indexInOutside()).geometry().center()

Best,
Carsten

> 
> I also checked the is.indexInOutside(), which is 2 for IS 38->7 and is 3 for IS 37->6.
> 
> I will try it with dune 2.1, but this will take some time...
> Cheers,
> 
> Benjamin
> 
> 
> On 06/08/2011 02:02 PM, Carsten Gräser wrote:
>> Hi Benjamin,
>>
>> Am 08.06.2011 13:53, schrieb Oliver Sander:
>>> Hi Benjamin!
>>> Thanks for reporting this.  So you claim that you have come across a
>>> UGGrid configuration with non-unique edge indices?  That would indeed
>>> be a bug.
>>>
>>> However, you know that the line
>>>
>>> grid.globalIdSet().subId(*is.inside(), is.indexInOutside(), 1);
>>>
>>> is not what you want: you would want is is.indexInInside().  That may
>>> already explain your problem with the double id: if you are on 38 then
>>> indexInOutside is one of 0,1,2,3,4.  However element 38 has only
>>> four edges.  Hence if indexInOutside happens to be 4 you run into
>>> undefined behaviour.
>> this is not true. In your case both have four faces.
>>
>> If the situation is exactly as you depicted this is an error. Since
>> 7,8,36,38 all have four faces but 36 and 38 do not share a common
>> face this should not happen.
>>
>> If the situation is only similar to your drawing, the behaviour
>> might be OK:
>>
>> * If 7 or 6 have more faces then 38 or 36, respectively, (triangles and quads)
>>    you have undefined behaviour. That's the case Oliver had in mind.
>> * If you exchange 38 and 39 this behaviour might be correct,
>>    since 36 and 38 would share a face.
>>
>>> Here's my suggestion:
>>> Try the same with Dune 2.1 and see if the problem persists.
>>> If it does persist create a test case that triggers the problem
>>> while using the grid API correctly.  If you have such a test
>>> case please report back to me and I will try to fix it.
>> In addition please check if one of the two points above apply.
>>
>> Thanks,
>> Carsten
>>
>>>
>>> Thanks in advance,
>>> Oliver
>>>
>>>
> 
> _______________________________________________
> Dune mailing list
> Dune at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune


-- 
----------------------------------------------------------------------
Carsten Gräser           | phone: +49-30 / 838-75349
Freie Universität Berlin | fax  : +49-30 / 838-54977
Institut für Mathematik  | email: graeser at math.fu-berlin.de
Arnimallee 6             |
14195 Berlin, Germany    | URL  : http://page.mi.fu-berlin.de/graeser
----------------------------------------------------------------------




More information about the Dune mailing list