[Dune] persistent containers
Matteo Semplice
matteo.semplice at unito.it
Wed Mar 6 15:37:10 CET 2013
On 06/03/2013 13:56, Matteo Semplice wrote:
> Hi dune,
> I wanted to use a PersistentContainer for codim=1 entities, but ran
> into the following compilation error (with a freshly updated 2.2 svn
> version).
>
> matteo at cassin:~/src/dune/dune-fv/src$ make dune_fv
> g++ -std=c++0x -DHAVE_CONFIG_H -I. -I..
> -I/home/matteo/src/dune/dune-common
> -I/home/matteo/src/dune/dune-geometry
> -I/home/matteo/src/dune/dune-grid -I/usr/lib/openmpi/include
> -I/usr/lib/openmpi/include/openmpi -pthread -DMPIPP_H -DENABLE_MPI=1
> -I/home/matteo/include -I/home/matteo/include/alberta -DALBERTA_DIM=1
> -DENABLE_ALBERTA -I/usr/lib/openmpi/include
> -I/usr/lib/openmpi/include/openmpi -pthread -DMPIPP_H -DENABLE_MPI=1
> -I/home/matteo/include -I/home/matteo/include/serial
> -I/home/matteo/include/duneinterface -DENABLE_ALUGRID
> -I/home/matteo/include/parallel -DGRIDDIM=1 -DWORLDDIM=1 -DONEDGRID -g
> -O3 -march=native -MT dune_fv-dune_fv.o -MD -MP -MF
> .deps/dune_fv-dune_fv.Tpo -c -o dune_fv-dune_fv.o `test -f
> 'dune_fv.cc' || echo './'`dune_fv.cc
> In file included from
> /home/matteo/src/dune/dune-grid/dune/grid/common/grid.hh:1327,
> from /home/matteo/src/dune/dune-grid/dune/grid/onedgrid.hh:12,
> from ../config.h:561,
> from dune_fv.cc:30:
> /home/matteo/src/dune/dune-grid/dune/grid/common/indexidset.hh: In
> member function ‘IdTypeImp Dune::IdSet<GridImp, IdSetImp,
> IdTypeImp>::id(const EntityType&) const [with EntityType =
> Dune::Intersection<const Dune::OneDGrid,
> Dune::OneDGridLeafIntersection>, GridImp = const Dune::OneDGrid,
> IdSetImp = Dune::OneDGridIdSet<const Dune::OneDGrid>, IdTypeImp =
> unsigned int]’:
> /home/matteo/src/dune/dune-grid/dune/grid/utility/persistentcontainer.hh:321:
> instantiated from ‘typename Map::mapped_type&
> Dune::PersistentContainerMap<Grid, Id, Map>::operator[](const Entity&)
> [with Entity = Dune::Intersection<const Dune::OneDGrid,
> Dune::OneDGridLeafIntersection>, Grid = Dune::OneDGrid, Id =
> Dune::IdSet<const Dune::OneDGrid, Dune::OneDGridIdSet<const
> Dune::OneDGrid>, unsigned int>, Map = std::map<const unsigned int,
> double, std::less<const unsigned int>, std::allocator<unsigned int> >]’
> dune_fv.cc:297: instantiated from here
> /home/matteo/src/dune/dune-grid/dune/grid/common/indexidset.hh:411:
> error: no matching function for call to ‘Dune::OneDGridIdSet<const
> Dune::OneDGrid>::id(const Dune::Intersection<const Dune::OneDGrid,
> Dune::OneDGridLeafIntersection>&) const’
> make: *** [dune_fv-dune_fv.o] Error 1
>
> The relevant portion of the code is:
>
> typedef Dune::PersistentContainer<G,double> PC;
> PC ElemData(grid,0);
> PC Fluxes(grid,1);
> typedef G::LeafGridView GridView;
> typedef GridView::Codim<0>::Iterator LeafIterator;
> typedef GridView::IntersectionIterator IntersectionIterator;
> typedef G::Codim<0>::EntityPointer EntityPointer;
> typedef G::Codim<0>::Entity Entity;
> GridView gridView = grid.leafView();
> LeafIterator endit = gridView.end<0>();
> for (LeafIterator it = gridView.begin<0>(); it!=endit; ++it)
> {
> const Entity& inside = *it;
> double &u=ElemData[inside];
> IntersectionIterator isend = gridView.iend(inside);
> for (IntersectionIterator is = gridView.ibegin(inside); is!=isend; ++is){
> typedef IntersectionIterator::Intersection t_intersection;
> const t_intersection &face = is.operator* ();
> double& p = Fluxes[face]; //<==== this is line 297
> }}
>
> and the error is triggered by the line with Fluxes[face]. Note that
> the line with ElemData[inside] compiles and the created reference u
> can be used correctly. This seems to happen with OneDGrid, Alberta and
> ALU, so I guess it's me doing something wrong here...
>
> Any hints?
>
On second thought, do I get the error above because I try to call
operator[] on an Intersection, but Intersections are not Entities in
general?
If so, is there another way to attach data to intersections in a way
that can survive grid adaption (at least refinement)? I have been
looking at intersectionindexset.hh from PDElab, but that is not
persistent. Is there a persistent version already available?
Matteo
More information about the Dune
mailing list