Skip to content
Snippets Groups Projects
reverse.hh 1.03 KiB
Newer Older
  • Learn to ignore specific revisions
  • // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    // vi: set et ts=4 sw=2 sts=2:
    #ifndef REVERSE_HH
    #define REVERSE_HH
    
    #include "buildindexset.hh"
    
    /**
     * @brief Reverse the local indices of an index set.
     *
     * Let the index set have N entries than the index 0 will become N-1,
     * 1 become N-2, ..., and N-1 will become 0.
     * @param indexSet The index set to reverse.
     */
    template<typename TG, typename TL, int N>
    void reverseLocalIndex(Dune::ParallelIndexSet<TG,TL,N>& indexSet)
    {
      // reverse the local indices
      typedef typename Dune::ParallelIndexSet<TG,TL,N>::iterator iterator;
    
      iterator end = indexSet.end();
      size_t maxLocal = 0;
    
      // find the maximal local index
      for(iterator index = indexSet.begin(); index != end; ++index) {
        // Get the local index
        LocalIndex& local = index->local();
        maxLocal = std::max(maxLocal, local.local());
      }
    
      for(iterator index = indexSet.begin(); index != end; ++index) {
        // Get the local index
        LocalIndex& local = index->local();
        local = maxLocal--;
      }
    
    }
    #endif