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_;
287 inline void markAsDeleted()
const 290 if(indexSet_->state_ !=
RESIZE)
292 <<
"while in RESIZE state!");
338 inline void add(
const GlobalIndex&
global);
348 inline void add(
const GlobalIndex& global,
const LocalIndex&
local);
357 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>
789 <<
"while in RESIZE state!");
791 newIndices_.push_back(
IndexPair(global));
794 template<
class TG,
class TL,
int N>
801 <<
"while in RESIZE state!");
803 newIndices_.push_back(
IndexPair(global,local));
806 template<
class TG,
class TL,
int N>
813 <<
"while in RESIZE state!");
815 deletedEntries_ =
true;
817 global.markAsDeleted();
820 template<
class TG,
class TL,
int N>
826 <<
"in RESIZE state!");
836 template<
class TG,
class TL,
int N>
838 if(localIndices_.size()==0)
840 localIndices_=newIndices_;
843 else if(newIndices_.size()>0 || deletedEntries_)
849 iterator old=localIndices_.begin();
850 iterator added=newIndices_.begin();
851 const const_iterator endold=localIndices_.end();
852 const const_iterator endadded=newIndices_.end();
854 while(old != endold && added!= endadded)
856 if(old->local().state()==
DELETED) {
861 if(old->global() < added->global() ||
862 (old->global() == added->global()
878 if(old->local().state()!=
DELETED) {
884 while(added!= endadded)
889 localIndices_ = tempPairs;
894 template<
class TG,
class TL,
int N>
899 int low=0, high=localIndices_.size()-1, probe=-1;
903 probe = (high + low) / 2;
904 if(global <= localIndices_[probe].
global())
913 if( localIndices_[low].
global() != global)
916 return localIndices_[low];
919 template<
class TG,
class TL,
int N>
924 int low=0, high=localIndices_.size()-1, probe=-1;
928 probe = (high + low) / 2;
929 if(global <= localIndices_[probe].
global())
935 return localIndices_[low];
937 template<
class TG,
class TL,
int N>
941 int low=0, high=localIndices_.size()-1, probe=-1;
945 probe = (high + low) / 2;
955 if( localIndices_[low].
global() != global)
958 return localIndices_[low];
961 template<
class TG,
class TL,
int N>
965 int low=0, high=localIndices_.size()-1, probe=-1;
969 probe = (high + low) / 2;
976 return localIndices_[low];
978 template<
class TG,
class TL,
int N>
982 return iterator(*
this, localIndices_.begin());
986 template<
class TG,
class TL,
int N>
990 return iterator(*
this,localIndices_.end());
993 template<
class TG,
class TL,
int N>
997 return localIndices_.begin();
1001 template<
class TG,
class TL,
int N>
1005 return localIndices_.end();
1008 template<
class TG,
class TL,
int N>
1013 <<
"GROUND state for renumberLocal()");
1017 const const_iterator end_ = end();
1020 for(iterator pair=begin(); pair!=end_; index++, ++pair)
1021 pair->local()=index;
1024 template<
class TG,
class TL,
int N>
1030 template<
class TG,
class TL,
int N>
1033 return localIndices_.size();
1039 : indexSet_(indexset), size_(size),
1040 indices_(size_, static_cast<const IndexPair*>(0))
1042 const_iterator end_ = indexSet_.end();
1044 for(const_iterator pair = indexSet_.begin(); pair!=end_; ++pair) {
1045 assert(pair->local()<size_);
1046 indices_[pair->local()] = &(*pair);
1052 : indexSet_(indexset), size_(0)
1054 const_iterator end_ = indexSet_.end();
1055 for(const_iterator pair = indexSet_.begin(); pair!=end_; ++pair)
1056 size_=std::max(size_,static_cast<std::size_t>(pair->local()));
1058 indices_.resize(++size_, 0);
1060 for(const_iterator pair = indexSet_.begin(); pair!=end_; ++pair)
1061 indices_[pair->local()] = &(*pair);
1072 return indices_[
local];
1079 return indexSet_[
global];
1085 return indexSet_.begin();
1091 return indexSet_.end();
1103 return indexSet_.seqNo();
1106 template<
typename TG,
typename TL,
int N,
typename TG1,
typename TL1,
int N1>
1114 Iter iter=idxset.
begin();
1115 for(Iter1 iter1=idxset1.
begin(); iter1 != idxset1.
end(); ++iter, ++iter1) {
1116 if(iter1->global()!=iter->global())
1119 const PI& pi=iter->local(), pi1=iter1->local();
1127 template<
typename TG,
typename TL,
int N,
typename TG1,
typename TL1,
int N1>
1131 return !(idxset==idxset1);
#define DUNE_UNUSED_PARAMETER(parm)
A macro to mark intentionally unused function parameters with.
Definition: unused.hh:25
bool operator==(const IndexPair< TG, TL > &, const TG &)
Definition: indexset.hh:692
I ParallelIndexSet
The type of the index set.
Definition: indexset.hh:511
ArrayList< IndexPair, N >::const_iterator const_iterator
The constant iterator over the pairs.
Definition: indexset.hh:307
Definition: localindex.hh:26
iterator end()
Get an iterator over the indices positioned after the last index.
void setLocal(int index)
Set the local index.
The default mode. Indicates that the index set is ready to be used.
Definition: indexset.hh:185
IndexPair & at(const GlobalIndex &global)
Find the index pair with a specific global id.
Definition of the DUNE_UNUSED macro for the case that config.h is not available.
size_t size() const
Get the total number (public and nonpublic) indices.
Dune::IndexPair< typename I::GlobalIndex, typename I::LocalIndex > IndexPair
Definition: indexset.hh:528
const_iterator begin() const
Get an iterator over the indices positioned at the first index.
TG GlobalIndex
the type of the global index. This type has to provide at least a operator< for sorting.
Definition: indexset.hh:225
ParallelIndexSet()
Constructor.
Manager class for the mapping between local indices and globally unique indices.
Definition: indexset.hh:216
A pair consisting of a global and local index.
Definition: indexset.hh:30
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:233
LocalIndex & local()
Get the local index.
friend bool operator>(const IndexPair< TG, TL > &, const IndexPair< TG, TL > &)
Definition: indexset.hh:674
TL LocalIndex
the type of the local index.
Definition: indexset.hh:119
GlobalLookupIndexSet(const ParallelIndexSet &indexset, std::size_t size)
Constructor.
A dynamically growing random access list.
Definition: arraylist.hh:59
Provides classes for use as the local index in ParallelIndexSet.
const IndexPair & operator[](const GlobalIndex &global) const
Find the index pair with a specific global id.
Definition: indexset.hh:613
iterator(ParallelIndexSet< TG, TL, N > &indexSet, const Father &father)
Definition: indexset.hh:263
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:675
~GlobalLookupIndexSet()
Destructor.
size_t size() const
Get the total number (public and nonpublic) indices.
TL LocalIndex
The type of the local index, e.g. ParallelLocalIndex.
Definition: indexset.hh:238
Default exception if a function was called while the object is not in a valid state for that function...
Definition: exceptions.hh:279
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:255
friend bool operator>=(const IndexPair< TG, TL > &, const IndexPair< TG, TL > &)
Definition: indexset.hh:686
ParallelIndexSet::LocalIndex LocalIndex
The type of the local index.
Definition: indexset.hh:516
A few common exception classes.
const ParallelIndexSetState & state()
Get the state the index set is in.
Definition: indexset.hh:318
IndexPair()
Construct a new Pair.
Dune namespace.
Definition: alignedallocator.hh:9
void endResize()
Indicate that the resizing finishes.
Implements a random-access container that can efficiently change size (similar to std::deque) ...
Decorates an index set with the possibility to find a global index that is mapped to a specific local...
Definition: indexset.hh:207
Indicates that the index set is currently being resized.
Definition: indexset.hh:189
Dune::IndexPair< GlobalIndex, LocalIndex > IndexPair
The type of the pair stored.
Definition: indexset.hh:243
const GlobalIndex & global() const
Get the global index.
void push_back(const_reference entry)
Append an entry to the list.
Definition: arraylist.hh:491
int seqNo() const
Get the internal sequence number.
A constant random access iterator for the Dune::ArrayList class.
Definition: arraylist.hh:20
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:697
The iterator over the pairs.
Definition: indexset.hh:256
Exception indicating that the index set is not in the expected state.
Definition: indexset.hh:204
iterator(const iterator &other)
Definition: indexset.hh:267
int seqNo() const
Get the internal sequence number.
bool operator()(const IndexPair< TG, TL > &i1, const IndexPair< TG, TL > &i2)
Definition: indexset.hh:625
friend bool operator==(const IndexPair< TG, TL > &, const IndexPair< TG, TL > &)
Definition: indexset.hh:656
A traits class describing the mapping of types onto MPI_Datatypes.
Definition: bigunsignedint.hh:25
iterator & operator==(const iterator &other)
Definition: indexset.hh:271
friend bool operator!=(const IndexPair< TG, TL > &, const IndexPair< TG, TL > &)
Definition: indexset.hh:662
Default exception class for range errors.
Definition: exceptions.hh:252
A random access iterator for the Dune::ArrayList class.
Definition: arraylist.hh:17
Definition: indexset.hh:623
void beginResize()
Indicate that the index set is to be resized.
ParallelIndexSetState
The states the index set can be in.
Definition: indexset.hh:179
bigunsignedint< k > operator*(const bigunsignedint< k > &x, std::uintmax_t y)
Definition: bigunsignedint.hh:543
static bool compare(const T &t1, const T &t2)
Definition: indexset.hh:615
IndexPair & operator[](const GlobalIndex &global)
Find the index pair with a specific global id.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:216
ParallelIndexSet::GlobalIndex GlobalIndex
The type of the global index.
Definition: indexset.hh:521
const IndexPair * pair(const std::size_t &local) const
Get the index pair corresponding to a local index.
const_iterator end() const
Get an iterator over the indices positioned after the last index.
void add(const GlobalIndex &global)
Add an new index to the set.
iterator begin()
Get an iterator over the indices positioned at the first index.
void markAsDeleted(const iterator &position)
Mark an index as deleted.
ParallelIndexSet::const_iterator const_iterator
The iterator over the index pairs.
Definition: indexset.hh:526
void renumberLocal()
Renumbers the local index numbers.
TG GlobalIndex
the type of the global index.
Definition: indexset.hh:106