[Dune] calling subId(...) inside Dune::CommDataHandleIF::gather(...)
Vogelbacher Florian
Florian.Vogelbacher at psi.ch
Fri Sep 10 14:24:16 CEST 2010
Hi Andreas,
it seems to work. So many thanks.
The reason for calling subId() is to sort DoFs:
Considering two processes. I have to access the DoFs of a ghost entity.
However if I just communicate with the other process, it might happen
that the other process sends me the DoFs in another order as I would
expect them. Or in other words: Is node=0 of the ghost entity of
processA also the node=0 of the corresponding (overlap) element of
processB? In my opinion not. Therefore I sort them ascending to the ID
before sending.
Am I possibly wrong with this thesis?
Bye
Florian
Andreas Dedner wrote:
> Hi,
> that you only want codim 0 is not really a compile
> time information, so the the gather method in this
> form needs to be created for any codimension and
> the subId method is not available on entities of
> lower codimension - been discussed for some time but
> has not happened yet. To solve this problem just
> remove EntityType from the template list of your
> gather method and fix the type to codim 0 - you probably
> have to have a dummy method with template argument just
> doing nothing to keep the compiler happy.
>
> BTW: why do you use subId instead of subIndex?
>
> Best
> Andreas
>
> On Fri, 10 Sep 2010 12:23:15 +0200
> Vogelbacher Florian <Florian.Vogelbacher at psi.ch> wrote:
>> Dear Dune,
>>
>> inside the function gather(...) from a class derived from
>> Dune::CommDataHandleIF I like to call the subId(...)
>> function using the entity provided by the gather
>> parameter list. However it throws me a whole bunch of
>> errors. Follwing a excerpt of the gather().
>>
>> [...]
>> template<class MessageBuffer, class EntityType>
>> void gather (MessageBuffer& buff, const EntityType&
>> entity) const
>> {
>> /** \brief Calculate codimensions of vertex and edge */
>> unsigned int codimofvertex = GridType::dimension;
>>
>> /** \brief Storing the local corner numbers */
>> int vi = 0;
>> int vj = 1;
>> int vk = 2;
>> int vl = 3;
>>
>> /** \brief We get the global ID of each subentity 'node'
>> and the
>> GlobalId idNodeI = globalIdSet_.template subId(entity,
>> vi, codimofvertex);
>> GlobalId idNodeJ = globalIdSet_.template subId(entity,
>> vj, codimofvertex);
>> GlobalId idNodeK = globalIdSet_.template subId(entity,
>> vk, codimofvertex);
>> GlobalId idNodeL = globalIdSet_.template subId(entity,
>> vl, codimofvertex);
>> [...]
>>
>> The error is as follwing:
>>
>> ../algebra/parallelsolverdiscontinuousgalerkin.hh:298:
>> error: no matching function for call to
>> ‘Dune::IdSet<Dune::ALU3dGrid<3, 3, tetra>,
>> Dune::ALU3dGridGlobalIdSet<3, 3, tetra>,
>> Dune::ALUGridId<Dune::ALUMacroKey> >::subId(const
>> Dune::Entity<1, 3, const Dune::ALU3dGrid<3, 3, tetra>,
>> Dune::ALU3dGridEntity>&, int&, unsigned int&) const’
>>
> /home4/vogelbacher_f/svnwork/dune-trunk/dune-grid/dune/grid/common/indexidset.hh:377:
>> note: candidates are: IdTypeImp Dune::IdSet<GridImp,
>> IdSetImp, IdTypeImp>::subId(const typename
>> std::remove_const<_Tp>::type::Traits::Codim<0>::Entity&,
>> int, unsigned int) const [with GridImp =
>> Dune::ALU3dGrid<3, 3, tetra>, IdSetImp =
>> Dune::ALU3dGridGlobalIdSet<3, 3, tetra>, IdTypeImp =
>> Dune::ALUGridId<Dune::ALUMacroKey>]
>>
>> There are two things confusing me. First, why the
>> function tries to use a parameter Dune::Entity<1,3,..>
>> (and later in the error list for Dune::Entity<2,3,..>,
>> Dune::Entity<3,3,..>) even though I use CODIM0 only.
>>
>> Secondly, how I might be able to change the type of the
>> entity to be of the type used in the subId(...) function
>> so I can call subId correctly.
>>
>> thanks a lot in advance
>> florian
>>
>> --
>> ---------------------------
>> Paul Scherrer Institut
>> Florian Vogelbacher
>> WBCA/004
>> 5232 Villigen PSI
>> Switzerland
>>
>> Mail: Florian.Vogelbacher at psi.ch
>> Phone: +41 (0) 563105019
>> Web: www.psi.ch
>> ---------------------------
>>
>> _______________________________________________
>> Dune mailing list
>> Dune at dune-project.org
>> http://lists.dune-project.org/mailman/listinfo/dune
>
--
---------------------------
Paul Scherrer Institut
Florian Vogelbacher
WBCA/004
5232 Villigen PSI
Switzerland
Mail: Florian.Vogelbacher at psi.ch
Phone: +41 (0) 563105019
Web: www.psi.ch
---------------------------
More information about the Dune
mailing list