[dune-pdelab] localfunctionspace.hh -> globalIndex

Christian Kaltenecker christian_kalt at yahoo.de
Tue Sep 2 11:19:17 CEST 2014


Dear Dune,

I am sorry for my last E-Mail, where a lot of information was missing.

My problem is the missing globalIndex - method in the localfunctionspace.

The code is as follows(this is another part of the code, where the 
globalIndex-method was used than in the last E-Mail):

   typedef std::set<size_type> IndexSet;
   typedef std::vector<IndexSet> Graph;
(...)
     // gfs and matrix graph
     const GFS& gfsf = gfsh_.getGFS(level);  // fine gfs
     const GFS& gfsc = gfsh_.getGFS(level-1);// coarse gfs
     Graph graph(gfsf.globalSize());                        // matrix graph

     // make local function spaces
     typedef Dune::PDELab::LocalFunctionSpace<GFS> LFS;
     LFS lfsf(gfsf);
     LFS lfsc(gfsc);
(...)
     // interpolation weights are values of coarse grid basis functions 
at fine grid points
     for (typename LFS::Traits::SizeType i=0; i<lfsf.size(); i++)
       {
         typedef typename LFS::Traits::FiniteElementType::
           Traits::LocalBasisType::Traits::RangeType RangeType;
         std::vector<RangeType> phi(lfsc.size());
lfsc.finiteElement().localBasis().evaluateFunction(local_position_in_father[i],phi);
         for (typename LFS::Traits::SizeType j=0; j<lfsc.size(); j++)
           {
         if (phi[j]>1E-6)
           graph[lfsf.globalIndex(i)].insert(lfsc.globalIndex(j));
           }
       }

This is the original code. Because of the globalIndex(i) a compiler 
error occurs.
I have tried a few days ago to fix that. The compiler error was fixed by 
replacing:
graph[lfsf.globalIndex(i)].insert(lfsc.globalIndex(j));
with
for (typename LFS::Traits::SizeType k=0; 
k<lfsf.dofIndex(i).entityIndex().size(); k++) {
graph[lfsf.dofIndex(i).entityIndex()[k]].insert(lfsf.dofIndex(i).entityIndex()[k]);
}
but I think that this is not the right solution at all, is it?

I have also searched for the LFSIndexCache you have mentioned regarding 
the multi index, but don't know how I should use that.

Thank you for your help so far!

Regards,
Christian Kaltenecker

Am 01.09.2014 um 09:52 schrieb Christian Kaltenecker:
> Dear Dune,
>
> I am trying to port the program dune-parsolve from the lecture 
> "Parallele Lösung großer Gleichungssysteme" in order to run the 
> program with the DUNE 2.3.1 modules.
>
> The code is as follows:
>     // interpolation weights are values of coarse grid basis functions 
> at fine grid points
>     for (typename LFS::Traits::SizeType i=0; i<lfsf.size(); i++)
>       {
>         typedef typename LFS::Traits::FiniteElementType::
>           Traits::LocalBasisType::Traits::RangeType RangeType;
>         std::vector<RangeType> phi(lfsc.size());
> lfsc.finiteElement().localBasis().evaluateFunction(local_position_in_father[i],phi); 
>
>         for (typename LFS::Traits::SizeType j=0; j<lfsc.size(); j++)
>           if (phi[j]>1E-6)
>             (*this)[lfsf.globalIndex(i)][lfsc.globalIndex(j)] = phi[j];
>       }
>
> ----------------------------------
>
> Any other compiler error is fixed so far, so this one is the last one 
> I have to fix.
>
> What would you recommend to do in this case?
>
> I can also send the whole file containing the code above.
>
> Thanks in advance!
>
> Regards,
> Christian Kaltenecker
>
> Am 29.08.2014 um 15:05 schrieb Christian Engwer:
>> Dear Christian,
>>
>> On Fri, Aug 29, 2014 at 02:32:46PM +0200, Christian Kaltenecker wrote:
>>> Hello Dune,
>>>
>>> Thanks for your help regarding my last E-Mail. It was very helpful.
>>>
>>> Now my next and last problem is concerning the removed globalIndex.
>>> In Dune version 2.2 the globalIndex of the localfunctionspace was
>>> accessed this way:
>>> lfsf.globalIndex(i)
>>> but now in the version 2.3.1 the globalIndex-method is missing.
>>> I guess that it has something to do with the class DOFIndexContainer.
>>>
>>> Is there a way to get something like the global index?
>> usually it should not be necessary to do so... it would help us to
>> learn more about your particular use-case.
>>
>> The general idea is that we introduce different types of mappings:
>>
>> DOF -> multi index (this is what you get from the function space)
>>      the multi index is a hierarchic index, which store things like
>>      entity type, entity index, position in the function-space
>>      tree. This hierarchy does not necessarily comply to the the
>>      hierarchy induced by your GFS tree structure, but you can reorder
>>      it using the ordering tags.
>>
>> The second component is a mapping
>>
>> multi index -> container index
>>      this is computed by the ordering and is accessible via the
>>      lfsindexcache. This class maps from the generic multi index to a
>>      (multi) index type which is suitable for your particular container
>>      backend. If you are using a flat container, this is only a
>>      number. If you are using a blockmatrix this is really a
>>      multi-index.
>>
>> I hope this helps already. For anything else, please explain a little
>> bit more about what you need. Usually you should not have to access
>> this information yourself.
>>
>> Ciao
>> Christian
>>
>
>
> _______________________________________________
> dune-pdelab mailing list
> dune-pdelab at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-pdelab





More information about the dune-pdelab mailing list