3 #ifndef DUNE_INDEXSET_HH 4 #define DUNE_INDEXSET_HH 29 template<
class TG,
class TL>
37 template<
class TG,
class TL>
38 std::ostream& operator<<(std::ostream& os, const IndexPair<TG,TL>& pair);
40 template<
class TG,
class TL>
43 template<
class TG,
class TL>
46 template<
class TG,
class TL>
49 template<
class TG,
class TL>
52 template<
class TG,
class TL>
55 template<
class TG,
class TL>
58 template<
class TG,
class TL>
61 template<
class TG,
class TL>
64 template<
class TG,
class TL>
65 bool operator<(const IndexPair<TG,TL>&,
const TG&);
67 template<
class TG,
class TL>
70 template<
class TG,
class TL>
71 bool operator<=(const IndexPair<TG,TL>&,
const TG&);
73 template<
class TG,
class TL>
82 template<
class TG,
class TL>
146 inline const GlobalIndex&
global()
const;
153 inline LocalIndex&
local();
160 inline const LocalIndex&
local()
const;
215 template<
typename TG,
typename TL,
int N=100>
252 arraySize= (N>0) ? N : 1
264 : Father(father), indexSet_(&indexSet)
268 : Father(other), indexSet_(other.indexSet_)
274 indexSet_ = other.indexSet_;
288 if(indexSet_->state_ !=
RESIZE)
290 <<
"while in RESIZE state!");
346 inline void add(
const GlobalIndex& global,
const LocalIndex&
local)
356 inline void markAsDeleted(
const iterator& position)
384 operator[](
const GlobalIndex& global);
396 at(
const GlobalIndex& global);
408 inline const IndexPair&
409 operator[](
const GlobalIndex& global)
const;
420 inline const IndexPair&
421 at(
const GlobalIndex& global)
const;
456 inline void renumberLocal();
464 inline int seqNo()
const;
470 inline size_t size()
const;
482 bool deletedEntries_;
496 template<
class TG,
class TL,
int N>
497 std::ostream& operator<<(std::ostream& os, const ParallelIndexSet<TG,TL,N>& indexSet);
559 inline const IndexPair&
560 operator[](
const GlobalIndex&
global)
const;
565 inline const IndexPair*
566 pair(
const std::size_t&
local)
const;
572 inline const_iterator begin()
const;
578 inline const_iterator end()
const;
586 inline int seqNo()
const;
592 inline size_t size()
const;
597 const ParallelIndexSet& indexSet_;
607 std::vector<const IndexPair*> indices_;
615 static bool compare(
const T& t1,
const T& t2){
622 template<
class TG,
class TL>
635 template<
class TG,
class TL>
636 inline std::ostream& operator<<(std::ostream& os, const IndexPair<TG,TL>& pair)
638 os<<
"{global="<<pair.global_<<
", local="<<pair.local_<<
"}";
642 template<
class TG,
class TL,
int N>
643 inline std::ostream& operator<<(std::ostream& os, const ParallelIndexSet<TG,TL,N>& indexSet)
646 Iterator end = indexSet.end();
648 for(Iterator index = indexSet.begin(); index != end; ++index)
655 template<
class TG,
class TL>
658 return a.global_==b.global_;
661 template<
class TG,
class TL>
664 return a.global_!=b.global_;
667 template<
class TG,
class TL>
670 return a.global_<b.global_;
673 template<
class TG,
class TL>
676 return a.global_>b.global_;
679 template<
class TG,
class TL>
682 return a.global_<=b.global_;
685 template<
class TG,
class TL>
688 return a.global_>=b.global_;
691 template<
class TG,
class TL>
697 template<
class TG,
class TL>
703 template<
class TG,
class TL>
704 inline bool operator<(const IndexPair<TG,TL>& a,
const TG& b)
709 template<
class TG,
class TL>
715 template<
class TG,
class TL>
716 inline bool operator<=(const IndexPair<TG,TL>& a,
const TG& b)
721 template<
class TG,
class TL>
729 template<
class TG,
class TL>
731 : global_(global), local_(local){}
733 template<
class TG,
class TL>
735 : global_(global), local_(){}
737 template<
class TG,
class TL>
739 : global_(), local_(){}
741 template<
class TG,
class TL>
746 template<
class TG,
class TL>
751 template<
class TG,
class TL>
756 template<
class TG,
class TL>
761 template<
class TG,
class TL,
int N>
763 : state_(
GROUND), seqNo_(0)
766 template<
class TG,
class TL,
int N>
774 "IndexSet has to be in GROUND state, when " 775 <<
"beginResize() is called!");
779 deletedEntries_ =
false;
782 template<
class TG,
class TL,
int N>
790 <<
"while in RESIZE state!");
792 newIndices_.push_back(
IndexPair(global));
795 template<
class TG,
class TL,
int N>
803 <<
"while in RESIZE state!");
805 newIndices_.push_back(
IndexPair(global,local));
808 template<
class TG,
class TL,
int N>
815 <<
"while in RESIZE state!");
817 deletedEntries_ =
true;
819 global.markAsDeleted();
822 template<
class TG,
class TL,
int N>
828 <<
"in RESIZE state!");
838 template<
class TG,
class TL,
int N>
840 if(localIndices_.size()==0)
842 localIndices_=newIndices_;
845 else if(newIndices_.size()>0 || deletedEntries_)
851 iterator old=localIndices_.begin();
852 iterator added=newIndices_.begin();
853 const const_iterator endold=localIndices_.end();
854 const const_iterator endadded=newIndices_.end();
856 while(old != endold && added!= endadded)
858 if(old->local().state()==
DELETED) {
863 if(old->global() < added->global() ||
864 (old->global() == added->global()
880 if(old->local().state()!=
DELETED) {
886 while(added!= endadded)
891 localIndices_ = tempPairs;
896 template<
class TG,
class TL,
int N>
901 int low=0, high=localIndices_.size()-1, probe=-1;
905 probe = (high + low) / 2;
906 if(global <= localIndices_[probe].
global())
915 if( localIndices_[low].
global() != global)
918 return localIndices_[low];
921 template<
class TG,
class TL,
int N>
926 int low=0, high=localIndices_.size()-1, probe=-1;
930 probe = (high + low) / 2;
931 if(global <= localIndices_[probe].
global())
937 return localIndices_[low];
939 template<
class TG,
class TL,
int N>
943 int low=0, high=localIndices_.size()-1, probe=-1;
947 probe = (high + low) / 2;
957 if( localIndices_[low].
global() != global)
960 return localIndices_[low];
963 template<
class TG,
class TL,
int N>
967 int low=0, high=localIndices_.size()-1, probe=-1;
971 probe = (high + low) / 2;
978 return localIndices_[low];
980 template<
class TG,
class TL,
int N>
984 return iterator(*
this, localIndices_.begin());
988 template<
class TG,
class TL,
int N>
992 return iterator(*
this,localIndices_.end());
995 template<
class TG,
class TL,
int N>
999 return localIndices_.begin();
1003 template<
class TG,
class TL,
int N>
1007 return localIndices_.end();
1010 template<
class TG,
class TL,
int N>
1015 <<
"GROUND state for renumberLocal()");
1019 const const_iterator end_ = end();
1022 for(iterator pair=begin(); pair!=end_; index++, ++pair)
1023 pair->local()=index;
1026 template<
class TG,
class TL,
int N>
1032 template<
class TG,
class TL,
int N>
1035 return localIndices_.size();
1041 : indexSet_(indexset), size_(size),
1042 indices_(size_, static_cast<const IndexPair*>(0))
1044 const_iterator end_ = indexSet_.end();
1046 for(const_iterator pair = indexSet_.begin(); pair!=end_; ++pair) {
1047 assert(pair->local()<size_);
1048 indices_[pair->local()] = &(*pair);
1054 : indexSet_(indexset), size_(0)
1056 const_iterator end_ = indexSet_.end();
1057 for(const_iterator pair = indexSet_.begin(); pair!=end_; ++pair)
1058 size_=std::max(size_,static_cast<std::size_t>(pair->local()));
1060 indices_.resize(++size_, 0);
1062 for(const_iterator pair = indexSet_.begin(); pair!=end_; ++pair)
1063 indices_[pair->local()] = &(*pair);
1074 return indices_[
local];
1081 return indexSet_[
global];
1087 return indexSet_.begin();
1093 return indexSet_.end();
1105 return indexSet_.seqNo();
1108 template<
typename TG,
typename TL,
int N,
typename TG1,
typename TL1,
int N1>
1116 Iter iter=idxset.
begin();
1117 for(Iter1 iter1=idxset1.
begin(); iter1 != idxset1.
end(); ++iter, ++iter1) {
1118 if(iter1->global()!=iter->global())
1121 const PI& pi=iter->local(), pi1=iter1->local();
1129 template<
typename TG,
typename TL,
int N,
typename TG1,
typename TL1,
int N1>
1133 return !(idxset==idxset1);
size_t size() const
Get the total number (public and nonpublic) indices.
ArrayList< IndexPair, N >::const_iterator const_iterator
The constant iterator over the pairs.
Definition: indexset.hh:305
TG GlobalIndex
the type of the global index. This type has to provide at least a operator< for sorting.
Definition: indexset.hh:225
A pair consisting of a global and local index.
Definition: indexset.hh:30
size_t size() const
Get the total number (public and nonpublic) indices.
iterator(ParallelIndexSet< TG, TL, N > &indexSet, const Father &father)
Definition: indexset.hh:263
void renumberLocal()
Renumbers the local index numbers.
TG GlobalIndex
the type of the global index.
Definition: indexset.hh:106
~GlobalLookupIndexSet()
Destructor.
const GlobalIndex & global() const
Get the global index.
bigunsignedint< k > operator*(const bigunsignedint< k > &x, std::uintmax_t y)
Definition: bigunsignedint.hh:527
TL LocalIndex
The type of the local index, e.g. ParallelLocalIndex.
Definition: indexset.hh:238
#define DUNE_UNUSED_PARAMETER(parm)
A macro to mark intentional unused function parameters with.
Definition: unused.hh:18
IndexPair & at(const GlobalIndex &global)
Find the index pair with a specific global id.
The iterator over the pairs.
Definition: indexset.hh:256
IndexPair & operator[](const GlobalIndex &global)
Find the index pair with a specific global id.
Indicates that the index set is currently being resized.
Definition: indexset.hh:189
Definition: indexset.hh:623
const IndexPair & operator[](const GlobalIndex &global) const
Find the index pair with a specific global id.
EnableIfInterOperable< T1, T2, bool >::type operator!=(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
Checks for inequality.
Definition: iteratorfacades.hh:252
TL LocalIndex
the type of the local index.
Definition: indexset.hh:119
GlobalLookupIndexSet(const ParallelIndexSet &indexset, std::size_t size)
Constructor.
Manager class for the mapping between local indices and globally unique indices.
Definition: indexset.hh:216
IndexPair()
Construct a new Pair.
Dune::IndexPair< GlobalIndex, LocalIndex > IndexPair
The type of the pair stored.
Definition: indexset.hh:243
void markAsDeleted(const iterator &position)
Mark an index as deleted.
friend bool operator>=(const IndexPair< TG, TL > &, const IndexPair< TG, TL > &)
Definition: indexset.hh:686
friend bool operator!=(const IndexPair< TG, TL > &, const IndexPair< TG, TL > &)
Definition: indexset.hh:662
const_iterator begin() const
Get an iterator over the indices positioned at the first index.
Dune::IndexPair< typename I::GlobalIndex, typename I::LocalIndex > IndexPair
Definition: indexset.hh:528
The default mode. Indicates that the index set is ready to be used.
Definition: indexset.hh:185
iterator(const iterator &other)
Definition: indexset.hh:267
void endResize()
Indicate that the resizing finishes.
bool operator()(const IndexPair< TG, TL > &i1, const IndexPair< TG, TL > &i2)
Definition: indexset.hh:625
A random access iterator for the Dune::ArrayList class.
Definition: arraylist.hh:17
void push_back(const_reference entry)
Append an entry to the list.
Definition: arraylist.hh:491
LocalIndex & local()
Get the local index.
Exception indicating that the index set is not in the expected state.
Definition: indexset.hh:204
ParallelIndexSet::LocalIndex LocalIndex
The type of the local index.
Definition: indexset.hh:516
ParallelIndexSet::GlobalIndex GlobalIndex
The type of the global index.
Definition: indexset.hh:521
A few common exception classes.
Provides classes for use as the local index in ParallelIndexSet.
Definition: localindex.hh:26
iterator end()
Get an iterator over the indices positioned after the last index.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:243
const IndexPair * pair(const std::size_t &local) const
Get the index pair corresponding to a local index.
void setLocal(int index)
Set the local index.
EnableIfInterOperable< T1, T2, bool >::type operator==(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
Checks for equality.
Definition: iteratorfacades.hh:230
int seqNo() const
Get the internal sequence number.
Definition: indexset.hh:613
ParallelIndexSet()
Constructor.
EnableIfInterOperable< T1, T2, bool >::type operator>=(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
Comparison operator.
Definition: iteratorfacades.hh:694
Default exception class for range errors.
Definition: exceptions.hh:279
Decorates an index set with the possibility to find a global index that is mapped to a specific local...
Definition: indexset.hh:207
iterator begin()
Get an iterator over the indices positioned at the first index.
A traits class describing the mapping of types onto MPI_Datatypes.
Definition: bigunsignedint.hh:30
bool operator==(const IndexPair< TG, TL > &, const TG &)
Definition: indexset.hh:692
friend bool operator>(const IndexPair< TG, TL > &, const IndexPair< TG, TL > &)
Definition: indexset.hh:674
void add(const GlobalIndex &global)
Add an new index to the set.
const_iterator end() const
Get an iterator over the indices positioned after the last index.
friend bool operator==(const IndexPair< TG, TL > &, const IndexPair< TG, TL > &)
Definition: indexset.hh:656
ParallelIndexSet::const_iterator const_iterator
The iterator over the index pairs.
Definition: indexset.hh:526
const ParallelIndexSetState & state()
Get the state the index set is in.
Definition: indexset.hh:316
I ParallelIndexSet
The type of the index set.
Definition: indexset.hh:511
A constant random access iterator for the Dune::ArrayList class.
Definition: arraylist.hh:20
Default exception if a function was called while the object is not in a valid state for that function...
Definition: exceptions.hh:306
EnableIfInterOperable< T1, T2, bool >::type operator>(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
Comparison operator.
Definition: iteratorfacades.hh:672
int seqNo() const
Get the internal sequence number.
iterator & operator==(const iterator &other)
Definition: indexset.hh:271
Definition of the DUNE_UNUSED macro for the case that config.h is not available.
Dune namespace.
Definition: alignment.hh:9
Implements a random-access container that can efficiently change size (similar to std::deque) ...
ParallelIndexSetState
The states the index set can be in.
Definition: indexset.hh:179
void beginResize()
Indicate that the index set is to be resized. If index set was not in ParallelIndexSetState::GROUND m...
A dynamically growing random access list.
Definition: arraylist.hh:59
static bool compare(const T &t1, const T &t2)
Definition: indexset.hh:615