Welcome to the Bug Tracking System for the DUNE project.
Due to increasing spam attacks, we had to disable the feature of anonymous bug reports. You will have to register before you are able to report a new bug.
In case you experience any problems, let us know at http://www.dune-project.org/mailinglists.html .
Due to increasing spam attacks, we had to disable the feature of anonymous bug reports. You will have to register before you are able to report a new bug.
In case you experience any problems, let us know at http://www.dune-project.org/mailinglists.html .
FS#666 - Refinement of parallel UGGrid leads to assertion failure
Attached to Project:
Dune
Opened by Oliver Sander (sander) - Friday, 20 November 2009, 18:27 GMT+2
Last edited by Oliver Sander (sander) - Friday, 16 April 2010, 16:41 GMT+2
Opened by Oliver Sander (sander) - Friday, 20 November 2009, 18:27 GMT+2
Last edited by Oliver Sander (sander) - Friday, 16 April 2010, 16:41 GMT+2
|
DetailsWhen running the parallel ug test with two processes I get an assertion failure during global refinement. The assertion is in identif.c:1100 (in ug) and reads
if (VEC_DEF_IN_OBJ_OF_GRID(theGrid,SIDEVEC)) { IdentifySideVector(theElement,theNeighbor,SonList[j],SonSides[j]); /* this is not debugged */ assert(0); } Stefan: Does this mean I should remove the assertion and hope for the best? I removed the assertion and hoped for the best. Now the test produces considerable more output and crashes eventually with a segfault in ifuse.c:154 (ug, again). The code in question: if (DDD_GetOption(OPT_IF_REUSE_BUFFERS) == OPT_OFF) { ForIF(ifId,ifHead) { BufferFree(ifHead->bufIn); BufferFree(ifHead->bufOut); } } Does somebody who knows parallel UG have any ideas? Thanks, Oliver |
This task depends upon
Closed by Oliver Sander (sander)
Friday, 16 April 2010, 16:41 GMT+2
Reason for closing: Fixed
Additional comments about closing: In dune-grid revision 6609.
Friday, 16 April 2010, 16:41 GMT+2
Reason for closing: Fixed
Additional comments about closing: In dune-grid revision 6609.
Program received signal SIGSEGV, Segmentation fault.
0xb7ef0d17 in _int_free () from /usr/lib/liblam.so.4
(gdb) bt
#0 0xb7ef0d17 in _int_free () from /usr/lib/liblam.so.4
#1 0xb7ef109d in free () from /usr/lib/liblam.so.4
#2 0x0823800f in UG::D3::IFExitComm (ifId=6) at if/ifuse.c:154
#3 0x080f7183 in Dune::UG_NS<3>::DDD_IFOneway (dddIf=6, dddIfDir=UG::D3::IF_FORWARD, s=8,
gather=0x80f2583 <Dune::UGMessageBuffer<DataExchange<Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::DefaultLevelGridViewTraits<Dune::UGGrid<3> const, (Dune::PartitionIteratorType)4> >, LayoutWrapper<0>::Layout>, 0>, 3, 0>::ugGather_(char*, void*)>,
scatter=0x80f2384 <Dune::UGMessageBuffer<DataExchange<Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::DefaultLevelGridViewTraits<Dune::UGGrid<3> const, (Dune::PartitionIteratorType)4> >, LayoutWrapper<0>::Layout>, 0>, 3, 0>::ugScatter_(char*, void*)>)
at ../../../dune/grid/uggrid/ugwrapper.hh:96
#4 0x080f723d in Dune::UGGrid<3>::communicateUG_<DataExchange<Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::DefaultLevelGridViewTraits<Dune::UGGrid<3> const, (Dune::PartitionIteratorType)4> >, LayoutWrapper<0>::Layout>, 0>, 0> (this=0xbffff554,
dataHandle=..., iftype=Dune::InteriorBorder_All_Interface, dir=Dune::ForwardCommunication) at ../../../dune/grid/uggrid.hh:668
#5 0x080f769c in Dune::UGGrid<3>::communicate<DataExchange<Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::DefaultLevelGridViewTraits<Dune::UGGrid<3> const, (Dune::PartitionIteratorType)4> >, LayoutWrapper<0>::Layout>, 0> > (this=0xbffff554,
dataHandle=..., iftype=Dune::InteriorBorder_All_Interface, dir=Dune::ForwardCommunication) at ../../../dune/grid/uggrid.hh:631
#6 0x080f7c01 in testCommunication<Dune::GridView<Dune::DefaultLevelGridViewTraits<Dune::UGGrid<3> const, (Dune::PartitionIteratorType)4> >, 0> (gridView=...) at test-parallel-ug.cc:337
#7 0x080f97da in testParallelUG<3> () at test-parallel-ug.cc:462
#8 0x08050391 in main (argc=Cannot access memory at address 0x40702000
) at test-parallel-ug.cc:485
patch -p0 <parallelug.patch
The basic problem is that DDD tries to send data from all grid levels. Since I have no clue how to convince DDD to only send stuff from a particular level, I enhanced the UGMessageBuffer in uggrid.hh a bit so that he prevents that data from wrong levels is communicated.
So communication on the level views now appears to be working for a uniformly refined parallel UGGrid!
Although the test works, I still run into problems on the leaf view when trying to do some pdelab calculations. It segfaulted in the constructLeafSubfaces routine in uggridintersections.cc. I started a discussion with Oliver on this, so maybe there is more information to follow.
I would propose to call this issue solved, since it should not matter to calculate on the finest level view instead of the leaf view. And one can use the coarser level views.
In case that you now wander what is the difference between finest level and leaf under uniform refinement: it is in the ghost elements. From a refined ghost element, the children intersecting the border go both into level and leaf, and the other children are thrown away. Miraculously, the leaf view also keeps the father ghost element. Explanations are welcome...
patch -p0 <parallelug.patch
The basic problem is that DDD tries to send data from all grid levels. Since I have no clue how to convince DDD to only send stuff from a particular level, I enhanced the UGMessageBuffer in uggrid.hh a bit so that he prevents that data from wrong levels is communicated.
So communication on the level views now appears to be working for a uniformly refined parallel UGGrid!
Although the test works, I still run into problems on the leaf view when trying to do some pdelab calculations. It segfaulted in the constructLeafSubfaces routine in uggridintersections.cc. I started a discussion with Oliver on this, so maybe there is more information to follow.
I would propose to call this issue solved, since it should not matter to calculate on the finest level view instead of the leaf view. And one can use the coarser level views.
In case that you now wander what is the difference between finest level and leaf under uniform refinement: it is in the ghost elements. From a refined ghost element, the children intersecting the border go both into level and leaf, and the other children are thrown away. Miraculously, the leaf view also keeps the father ghost element. Explanations are welcome...
patch -p0 <parallelugwithleaf.patch
Sorry for the delay! I tested the patch and I can confirm that test-parallel-ug does pass now. Great! I also looked at the patch and I have nothing to complain about. It has been committed to the trunk now.
Thank you for your help!