4 #ifndef DUNE_ISTL_BCRSMATRIX_HH
5 #define DUNE_ISTL_BCRSMATRIX_HH
19 #include <dune/common/stdstreams.hh>
20 #include <dune/common/iteratorfacades.hh>
21 #include <dune/common/typetraits.hh>
22 #include <dune/common/ftraits.hh>
23 #include <dune/common/nullptr.hh>
80 template<
typename size_type>
138 return _m.entry(_i,j);
167 if (m.buildMode() != Matrix::implicit)
168 DUNE_THROW(
BCRSMatrixError,
"You can only create an ImplicitBuilder for a matrix in implicit build mode");
169 if (m.buildStage() != Matrix::building)
170 DUNE_THROW(
BCRSMatrixError,
"You can only create an ImplicitBuilder for a matrix with set size that has not been compressed() yet");
191 if (m.buildStage() != Matrix::notAllocated)
192 DUNE_THROW(
BCRSMatrixError,
"You can only set up a matrix for this ImplicitBuilder if it has no memory allocated yet");
193 m.setBuildMode(Matrix::implicit);
194 m.setImplicitBuildModeParameters(avg_cols_per_row,overflow_fraction);
195 m.setSize(rows,cols);
411 template<
class B,
class A=std::allocator<B> >
500 #ifdef DUNE_ISTL_WITH_CHECKING
502 DUNE_THROW(
BCRSMatrixError,
"You cannot use operator[] in implicit build mode before calling compress()");
512 #ifdef DUNE_ISTL_WITH_CHECKING
514 DUNE_THROW(
BCRSMatrixError,
"You cannot use operator[] in implicit build mode before calling compress()");
527 :
public RandomAccessIteratorFacade<RealRowIterator<T>, T>
599 void advance(std::ptrdiff_t diff)
604 T& elementAt(std::ptrdiff_t diff)
const
739 DUNE_THROW(
BCRSMatrixError,
"Only call this constructor when using the implicit build mode");
744 if (_overflowsize < 0.0)
745 DUNE_THROW(
BCRSMatrixError,
"You cannot set a negative overflow fraction");
760 DUNE_THROW(InvalidStateException,
"BCRSMatrix can only be copy-constructed when source matrix is completely empty (size not set) or fully built)");
800 DUNE_THROW(InvalidStateException,
"Matrix structure cannot be changed at this stage anymore (ready == "<<
ready<<
").");
826 DUNE_THROW(
Dune::BCRSMatrixError,
"number of non-zeroes may not be set in implicit mode, use setImplicitBuildModeParameters() instead");
834 allocate(rows, columns, nnz,
true,
false);
853 DUNE_THROW(
BCRSMatrixError,
"You cannot set a negative overflow fraction");
857 DUNE_THROW(InvalidStateException,
"You cannot modify build mode parameters at this stage anymore");
871 if (&Mat==
this)
return *
this;
874 DUNE_THROW(InvalidStateException,
"BCRSMatrix can only be copied when both target and source are empty or fully built)");
881 if (
n>0 &&
n!=Mat.
n) {
883 for(
row_type *riter=
r+(
n-1), *rend=
r-1; riter!=rend; --riter)
909 DUNE_THROW(InvalidStateException,
"Scalar assignment only works on fully built BCRSMatrix)");
923 : Mat(_Mat), i(_i), nnz(0), current_row(nullptr, Mat.
j_.
get(), 0)
930 DUNE_THROW(
BCRSMatrixError,
"creation only allowed for uninitialized matrix");
932 DUNE_THROW(
BCRSMatrixError,
"creation only allowed if row wise allocation was requested in the constructor");
982 for (
typename PatternType::const_iterator it=pattern.begin(); it!=pattern.end(); ++it)
1010 return (i!=it.i) || (&Mat!=&it.Mat);
1016 return (i==it.i) && (&Mat==&it.Mat);
1034 if (pattern.find(j)!=pattern.end())
1046 return pattern.size();
1053 typedef std::set<size_type,std::less<size_type> > PatternType;
1054 PatternType pattern;
1090 #ifdef DUNE_ISTL_WITH_CHECKING
1126 else if(
nnz_ < total)
1128 <<
"sufficient for calculated nonzeros ("<<total<<
"! ");
1160 DUNE_THROW(
BCRSMatrixError,
"matrix size not set and no memory allocated yet");
1170 size_type* pos = std::lower_bound(first,last,col);
1173 if (pos!=last && *pos == col)
return;
1181 std::copy_backward(pos,end,end+1);
1193 template<
typename It>
1200 if ((col_end = std::copy(begin,end,
r[row].getindexptr())) != col_begin + row_size)
1203 <<
") does not match number of passed entries (" << (col_end - col_begin) <<
")");
1204 std::sort(col_begin,col_end);
1217 DUNE_THROW(
BCRSMatrixError,
"matrix size not set and no memory allocated yet");
1225 if (j.index() >=
m) {
1226 dwarn <<
"WARNING: size of row "<< i.
index()<<
" is "<<j.offset()<<
". But was specified as being "<< (*i).end().offset()
1227 <<
". This means you are wasting valuable space and creating additional cache misses!"<<std::endl;
1257 #ifdef DUNE_ISTL_WITH_CHECKING
1261 DUNE_THROW(
BCRSMatrixError,
"matrix already built up, use operator[] for entry access now");
1263 DUNE_THROW(
BCRSMatrixError,
"matrix size not set and no memory allocated yet");
1265 DUNE_THROW(InvalidStateException,
"You may only use entry() during the 'building' stage");
1276 size_type* pos = std::find(begin, end, col);
1289 if (
r[row].getsize() ==
avg)
1290 return overflow[std::make_pair(row,col)];
1324 DUNE_THROW(
BCRSMatrixError,
"matrix already built up, no more need for compression");
1326 DUNE_THROW(
BCRSMatrixError,
"matrix size not set and no memory allocated yet");
1328 DUNE_THROW(InvalidStateException,
"You may only call compress() at the end of the 'building' stage");
1340 typename OverflowType::iterator oit =
overflow.begin();
1343 std::vector<size_type*> perm;
1355 typename std::vector<size_type*>::iterator it = perm.begin();
1356 for (
size_type* iit = begin; iit < begin + size; ++iit, ++it)
1366 for (it = perm.begin(); it != perm.end(); ++it)
1369 while ((oit!=
overflow.end()) && (oit->first < std::make_pair(i,**it)))
1374 "Allocated memory for BCRSMatrix exhausted during compress()!"
1375 "Please increase either the average number of entries per row or the overflow fraction."
1378 *jiit = oit->first.second;
1380 *aiit = oit->second;
1389 "Allocated memory for BCRSMatrix exhausted during compress()!"
1390 "Please increase either the average number of entries per row or the overflow fraction."
1396 B* apos = *it -
j_.get() +
a;
1402 while ((oit!=
overflow.end()) && (oit->first.first == i))
1407 "Allocated memory for BCRSMatrix exhausted during compress()!"
1408 "Please increase either the average number of entries per row or the overflow fraction."
1412 *jiit = oit->first.second;
1414 *aiit = oit->second;
1431 stats.
avg = (double) (
nnz_) / (double) n;
1445 #ifdef DUNE_ISTL_WITH_CHECKING
1447 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1473 #ifdef DUNE_ISTL_WITH_CHECKING
1475 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1506 #ifdef DUNE_ISTL_WITH_CHECKING
1508 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1509 if(
N()!=b.
N() ||
M() != b.
M())
1510 DUNE_THROW(RangeError,
"Matrix sizes do not match!");
1528 #ifdef DUNE_ISTL_WITH_CHECKING
1530 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1531 if(
N()!=b.
N() ||
M() != b.
M())
1532 DUNE_THROW(RangeError,
"Matrix sizes do not match!");
1553 #ifdef DUNE_ISTL_WITH_CHECKING
1555 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1556 if(
N()!=b.
N() ||
M() != b.
M())
1557 DUNE_THROW(RangeError,
"Matrix sizes do not match!");
1570 template<
class X,
class Y>
1571 void mv (
const X& x, Y& y)
const
1573 #ifdef DUNE_ISTL_WITH_CHECKING
1575 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1577 "Size mismatch: M: " <<
N() <<
"x" <<
M() <<
" x: " << x.N());
1579 "Size mismatch: M: " <<
N() <<
"x" <<
M() <<
" y: " << y.N());
1587 (*j).umv(x[j.index()],y[i.index()]);
1592 template<
class X,
class Y>
1593 void umv (
const X& x, Y& y)
const
1595 #ifdef DUNE_ISTL_WITH_CHECKING
1597 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1606 (*j).umv(x[j.index()],y[i.index()]);
1611 template<
class X,
class Y>
1612 void mmv (
const X& x, Y& y)
const
1614 #ifdef DUNE_ISTL_WITH_CHECKING
1616 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1625 (*j).mmv(x[j.index()],y[i.index()]);
1630 template<
typename F,
class X,
class Y>
1631 void usmv (F&& alpha,
const X& x, Y& y)
const
1633 #ifdef DUNE_ISTL_WITH_CHECKING
1635 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1644 (*j).usmv(alpha,x[j.index()],y[i.index()]);
1649 template<
class X,
class Y>
1650 void mtv (
const X& x, Y& y)
const
1652 #ifdef DUNE_ISTL_WITH_CHECKING
1654 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1664 template<
class X,
class Y>
1667 #ifdef DUNE_ISTL_WITH_CHECKING
1669 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1678 (*j).umtv(x[i.index()],y[j.index()]);
1683 template<
class X,
class Y>
1686 #ifdef DUNE_ISTL_WITH_CHECKING
1695 (*j).mmtv(x[i.index()],y[j.index()]);
1700 template<
class X,
class Y>
1703 #ifdef DUNE_ISTL_WITH_CHECKING
1705 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1714 (*j).usmtv(alpha,x[i.index()],y[j.index()]);
1719 template<
class X,
class Y>
1722 #ifdef DUNE_ISTL_WITH_CHECKING
1724 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1733 (*j).umhv(x[i.index()],y[j.index()]);
1738 template<
class X,
class Y>
1741 #ifdef DUNE_ISTL_WITH_CHECKING
1743 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1752 (*j).mmhv(x[i.index()],y[j.index()]);
1757 template<
class X,
class Y>
1760 #ifdef DUNE_ISTL_WITH_CHECKING
1762 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1771 (*j).usmhv(alpha,x[i.index()],y[j.index()]);
1781 #ifdef DUNE_ISTL_WITH_CHECKING
1783 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1793 sum += (*j).frobenius_norm2();
1809 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1818 sum += (*j).infinity_norm();
1819 max = std::max(max,sum);
1827 #ifdef DUNE_ISTL_WITH_CHECKING
1829 DUNE_THROW(
BCRSMatrixError,
"You can only call arithmetic operations on fully built BCRSMatrix instances");
1839 sum += (*j).infinity_norm_real();
1840 max = std::max(max,sum);
1883 #ifdef DUNE_ISTL_WITH_CHECKING
1887 if (
r[i].size() &&
r[i].find(j)!=
r[i].
end())
1920 std::shared_ptr<size_type>
j_;
1938 r[i].
set(s,current_row.getptr(), current_row.getindexptr());
1940 current_row.setptr(current_row.getptr()+s);
1941 current_row.setindexptr(current_row.getindexptr()+s);
1985 if (
r[i].getsize() > 0) {
2038 if (
r[i].getsize()>0)
2040 for (B *
col=
r[i].getptr()+(
r[i].getsize()-1),
2041 *colend =
r[i].getptr()-1;
col!=colend; --
col) {
2048 r[i].
set(0,
nullptr,
nullptr);
2053 if (
n>0 && deallocateRows &&
r) {
2054 for(
row_type *riter=
r+(
n-1), *rend=
r-1; riter!=rend; --riter)
2068 typename A::template rebind<size_type>::other& sizeAllocator_;
2071 Deallocator(
typename A::template rebind<size_type>::other& sizeAllocator)
2072 : sizeAllocator_(sizeAllocator)
2101 nnz_ = allocationSize_;
2108 DUNE_THROW(InvalidStateException,
"Rows have already been allocated, cannot allocate a second time");
2135 DUNE_THROW(InvalidStateException,
"Cannot allocate data array (already allocated)");
2154 DUNE_THROW(InvalidStateException,
"implicit_allocate() may only be called in implicit build mode");
2156 DUNE_THROW(InvalidStateException,
"memory has already been allocated");
2160 DUNE_THROW(InvalidStateException,
"You have to set the implicit build mode parameters before starting to build the matrix");
2169 B* aptr =
a + osize;
2172 r[i].
set(0,aptr,jptr);
B::field_type field_type
export the type representing the field
Definition: bcrsmatrix.hh:435
A::template rebind< B >::other allocator_
Definition: bcrsmatrix.hh:1900
BCRSMatrix & axpy(field_type alpha, const BCRSMatrix &b)
Add the scaled entries of another matrix to this one.
Definition: bcrsmatrix.hh:1551
size_type n
Definition: bcrsmatrix.hh:1907
void implicit_allocate(size_type _n, size_type _m)
organizes allocation implicit mode calculates correct array size to be allocated and sets the the win...
Definition: bcrsmatrix.hh:2151
A::template rebind< row_type >::other rowAllocator_
Definition: bcrsmatrix.hh:1902
size_type M() const
The number of columns in the matrix.
Definition: bcrsmatrix.hh:211
Row row
Definition: matrixmatrix.hh:345
size_type avg
Definition: bcrsmatrix.hh:1923
RealRowIterator(const RealRowIterator< ValueType > &it)
Definition: bcrsmatrix.hh:549
A allocator_type
export the allocator type
Definition: bcrsmatrix.hh:441
Error specific to BCRSMatrix.
Definition: istlexception.hh:19
BCRSMatrix & operator=(const BCRSMatrix &Mat)
assignment
Definition: bcrsmatrix.hh:868
size_type M() const
number of columns (counted in blocks)
Definition: bcrsmatrix.hh:1855
BCRSMatrix(size_type _n, size_type _m, size_type _nnz, BuildMode bm)
matrix with known number of nonzeroes
Definition: bcrsmatrix.hh:705
~BCRSMatrix()
destructor
Definition: bcrsmatrix.hh:781
M_ Matrix
The underlying matrix.
Definition: bcrsmatrix.hh:116
BuildStage buildStage() const
The current build stage of the matrix.
Definition: bcrsmatrix.hh:1867
friend class CreateIterator
allow CreateIterator to access internal data
Definition: bcrsmatrix.hh:1059
ImplicitMatrixBuilder(Matrix &m)
Creates an ImplicitMatrixBuilder for matrix m.
Definition: bcrsmatrix.hh:164
A wrapper for uniform access to the BCRSMatrix during and after the build stage in implicit build mod...
Definition: bcrsmatrix.hh:110
BuildMode buildMode() const
The currently selected build mode of the matrix.
Definition: bcrsmatrix.hh:1873
PropertyMapTypeSelector< Amg::VertexVisitedTag, Amg::PropertiesGraph< G, Amg::VertexProperties, EP, VM, EM > >::Type get(const Amg::VertexVisitedTag &tag, Amg::PropertiesGraph< G, Amg::VertexProperties, EP, VM, EM > &graph)
Definition: dependency.hh:292
ConstIterator end() const
Get const iterator to one beyond last row.
Definition: bcrsmatrix.hh:667
Iterator class for sequential creation of blocks
Definition: bcrsmatrix.hh:918
A::size_type size_type
The type for the index access and the size.
Definition: bcrsmatrix.hh:447
Build mode not set!
Definition: bcrsmatrix.hh:492
iterator class for sequential access
Definition: basearray.hh:580
Build in a row-wise manner.
Definition: bcrsmatrix.hh:470
Col col
Definition: matrixmatrix.hh:347
void set(size_type _n, B *_p, size_type *_j)
set size and pointer
Definition: bvector.hh:1024
bool equals(const RealRowIterator< ValueType > &other) const
equality
Definition: bcrsmatrix.hh:573
A::template rebind< size_type >::other sizeAllocator_
Definition: bcrsmatrix.hh:1904
size_type nonzeroes() const
number of blocks that are stored (the number of blocks that possibly are nonzero) ...
Definition: bcrsmatrix.hh:1861
FieldTraits< field_type >::real_type infinity_norm_real() const
simplified infinity norm (uses Manhattan norm for complex values)
Definition: bcrsmatrix.hh:1825
void addindex(size_type row, size_type col)
add index (row,col) to the matrix
Definition: bcrsmatrix.hh:1151
void usmhv(const field_type &alpha, const X &x, Y &y) const
y += alpha A^H x
Definition: bcrsmatrix.hh:1758
CreateIterator createbegin()
get initial create iterator
Definition: bcrsmatrix.hh:1062
BCRSMatrix(size_type _n, size_type _m, BuildMode bm)
matrix with unknown number of nonzeroes
Definition: bcrsmatrix.hh:714
void setImplicitBuildModeParameters(size_type _avg, double _overflow)
Set parameters needed for creation in implicit build mode.
Definition: bcrsmatrix.hh:846
void mmhv(const X &x, Y &y) const
y -= A^H x
Definition: bcrsmatrix.hh:1739
CreateIterator & operator++()
prefix increment
Definition: bcrsmatrix.hh:936
Build entries randomly.
Definition: bcrsmatrix.hh:479
BuildMode build_mode
Definition: bcrsmatrix.hh:1896
void setindexptr(size_type *_j)
set pointer only
Definition: bvector.hh:1044
RealRowIterator< row_type > iterator
The iterator over the (mutable matrix rows.
Definition: bcrsmatrix.hh:620
void setColumnPointers(ConstRowIterator row)
Copy row sizes from iterator range starting at row and set column index pointers for all rows...
Definition: bcrsmatrix.hh:1954
Proxy row object for entry access.
Definition: bcrsmatrix.hh:130
ConstIterator beforeEnd() const
Definition: bcrsmatrix.hh:674
FieldTraits< field_type >::real_type frobenius_norm2() const
square of frobenius norm, need for block recursion
Definition: bcrsmatrix.hh:1779
B * getptr()
get pointer
Definition: bvector.hh:1050
Matrix & A
Definition: matrixmatrix.hh:216
Matrix::size_type size_type
The size_type of the underlying matrix.
Definition: bcrsmatrix.hh:122
void setIndices(size_type row, It begin, It end)
Set all column indices for row from the given iterator range.
Definition: bcrsmatrix.hh:1194
A sparse block matrix with compressed row storage.
Definition: bcrsmatrix.hh:412
row_type & operator[](size_type i)
random access to the rows
Definition: bcrsmatrix.hh:498
The overflow error used during implicit BCRSMatrix construction was exhausted.
Definition: istlexception.hh:32
void allocate(size_type rows, size_type columns, size_type allocationSize_, bool allocateRows, bool allocate_data)
Allocate memory for the matrix structure.
Definition: bcrsmatrix.hh:2096
size_type N() const
The number of rows in the matrix.
Definition: bcrsmatrix.hh:205
Iterator end()
Get iterator to one beyond last row.
Definition: bcrsmatrix.hh:630
CreateIterator(BCRSMatrix &_Mat, size_type _i)
constructor
Definition: bcrsmatrix.hh:922
BCRSMatrix & operator+=(const BCRSMatrix &b)
Add the entries of another matrix to this one.
Definition: bcrsmatrix.hh:1504
The matrix structure is fully built.
Definition: bcrsmatrix.hh:429
Iterator beforeEnd()
Definition: bcrsmatrix.hh:637
row_type::ConstIterator ConstColIterator
Const iterator to the entries of a row.
Definition: bcrsmatrix.hh:690
size_type overflow_total
total number of elements written to the overflow area during construction.
Definition: bcrsmatrix.hh:88
void setSize(size_type rows, size_type columns, size_type nnz=0)
Set the size of the matrix.
Definition: bcrsmatrix.hh:818
CompressionStatistics compress()
Finishes the buildstage in implicit mode.
Definition: bcrsmatrix.hh:1319
void setrowsize(size_type i, size_type s)
set number of indices in row i to s
Definition: bcrsmatrix.hh:1077
size_type N() const
number of rows (counted in blocks)
Definition: bcrsmatrix.hh:1849
bool exists(size_type i, size_type j) const
return true if (i,j) is in pattern
Definition: bcrsmatrix.hh:1881
void usmv(F &&alpha, const X &x, Y &y) const
y += alpha A x
Definition: bcrsmatrix.hh:1631
The row sizes of the matrix are known.
Definition: bcrsmatrix.hh:427
void umtv(const X &x, Y &y) const
y += A^T x
Definition: bcrsmatrix.hh:1665
void operator()(size_type *p)
Definition: bcrsmatrix.hh:2075
void copyWindowStructure(const BCRSMatrix &Mat)
Copy the window structure from another matrix.
Definition: bcrsmatrix.hh:1999
Iterator access to matrix rows
Definition: bcrsmatrix.hh:526
FieldTraits< field_type >::real_type frobenius_norm() const
frobenius norm: sqrt(sum over squared values of entries)
Definition: bcrsmatrix.hh:1800
remove_const< T >::type ValueType
The unqualified value type.
Definition: bcrsmatrix.hh:532
BCRSMatrix & operator*=(const field_type &k)
vector space multiplication with scalar
Definition: bcrsmatrix.hh:1443
void mv(const X &x, Y &y) const
y = A x
Definition: bcrsmatrix.hh:1571
std::ptrdiff_t distanceTo(const RealRowIterator< ValueType > &other) const
Definition: bcrsmatrix.hh:560
size_type size() const
Get the current row size.
Definition: bcrsmatrix.hh:1044
void endindices()
indicate that all indices are defined, check consistency
Definition: bcrsmatrix.hh:1208
void allocateData()
Definition: bcrsmatrix.hh:2132
FieldTraits< field_type >::real_type infinity_norm() const
infinity norm (row sum norm, how to generalize for blocks?)
Definition: bcrsmatrix.hh:1806
size_type allocationSize
Definition: bcrsmatrix.hh:1910
size_type getrowsize(size_type i) const
get current number of indices in row i
Definition: bcrsmatrix.hh:1088
Definition: matrixutils.hh:513
void setBuildMode(BuildMode bm)
Sets the build mode of the matrix.
Definition: bcrsmatrix.hh:790
bool operator==(const CreateIterator &it) const
equality
Definition: bcrsmatrix.hh:1014
void deallocate(bool deallocateRows=true)
deallocate memory of the matrix.
Definition: bcrsmatrix.hh:2016
double mem_ratio
fraction of wasted memory resulting from non-used overflow area.
Definition: bcrsmatrix.hh:93
::Dune::CompressionStatistics< size_type > CompressionStatistics
The type for the statistics object returned by compress()
Definition: bcrsmatrix.hh:450
void incrementrowsize(size_type i, size_type s=1)
increment size of row i by s (1 by default)
Definition: bcrsmatrix.hh:1098
The number of blocklevels the matrix contains.
Definition: bcrsmatrix.hh:455
ConstIterator begin() const
Get const iterator to first row.
Definition: bcrsmatrix.hh:661
RealRowIterator()
empty constructor, use with care!
Definition: bcrsmatrix.hh:545
size_type * getindexptr()
get pointer
Definition: bvector.hh:1056
void setWindowPointers(ConstRowIterator row)
Definition: bcrsmatrix.hh:1929
RealRowIterator(row_type *_p, size_type _i)
constructor
Definition: bcrsmatrix.hh:540
void usmtv(const field_type &alpha, const X &x, Y &y) const
y += alpha A^T x
Definition: bcrsmatrix.hh:1701
Matrix::block_type block_type
The block_type of the underlying matrix.
Definition: bcrsmatrix.hh:119
size_type index() const
return index
Definition: bcrsmatrix.hh:555
size_type nnz_
Definition: bcrsmatrix.hh:1909
RealRowIterator< const row_type > const_iterator
The const iterator over the matrix rows.
Definition: bcrsmatrix.hh:656
void umhv(const X &x, Y &y) const
y += A^H x
Definition: bcrsmatrix.hh:1720
Build entries randomly with an educated guess on entries per row.
Definition: bcrsmatrix.hh:488
BCRSMatrix(size_type _n, size_type _m, size_type _avg, double _overflowsize, BuildMode bm)
construct matrix with a known average number of entries per row
Definition: bcrsmatrix.hh:733
B * a
Definition: bcrsmatrix.hh:1917
std::shared_ptr< size_type > j_
Definition: bcrsmatrix.hh:1920
BCRSMatrix & operator-=(const BCRSMatrix &b)
Substract the entries of another matrix to this one.
Definition: bcrsmatrix.hh:1526
row_object operator[](size_type i) const
Returns a proxy for entries in row i.
Definition: bcrsmatrix.hh:199
void setsize(size_type _n)
set size only
Definition: bvector.hh:1032
size_type m
Definition: bcrsmatrix.hh:1908
void setDataPointers()
Set data pointers for all rows.
Definition: bcrsmatrix.hh:1980
ConstIterator beforeBegin() const
Definition: bcrsmatrix.hh:681
ImplicitMatrixBuilder(Matrix &m, size_type rows, size_type cols, size_type avg_cols_per_row, double overflow_fraction)
Sets up matrix m for implicit construction using the given parameters and creates an ImplicitBmatrixu...
Definition: bcrsmatrix.hh:188
CreateIterator createend()
get create iterator pointing to one after the last block
Definition: bcrsmatrix.hh:1068
Iterator begin()
Get iterator to first row.
Definition: bcrsmatrix.hh:624
BCRSMatrix & operator/=(const field_type &k)
vector space division by scalar
Definition: bcrsmatrix.hh:1471
Some handy generic functions for ISTL matrices.
B block_type
export the type representing the components
Definition: bcrsmatrix.hh:438
RealRowIterator< row_type > Iterator
Definition: bcrsmatrix.hh:621
void setptr(B *_p)
set pointer only
Definition: bvector.hh:1038
OverflowType overflow
Definition: bcrsmatrix.hh:1927
bool operator!=(const CreateIterator &it) const
inequality
Definition: bcrsmatrix.hh:1008
Statistics about compression achieved in implicit mode.
Definition: bcrsmatrix.hh:81
void umv(const X &x, Y &y) const
y += A x
Definition: bcrsmatrix.hh:1593
bool contains(size_type j)
return true if column index is in row
Definition: bcrsmatrix.hh:1032
row_type * r
Definition: bcrsmatrix.hh:1914
A generic dynamic dense matrix.
Definition: matrix.hh:24
size_type maximum
maximum number of non-zeroes per row.
Definition: bcrsmatrix.hh:86
void mmtv(const X &x, Y &y) const
y -= A^T x
Definition: bcrsmatrix.hh:1684
This file implements a vector space as a tensor product of a given vector space. The number of compon...
ConstIterator ConstRowIterator
rename the const row iterator for easier access
Definition: bcrsmatrix.hh:687
std::map< std::pair< size_type, size_type >, B > OverflowType
Definition: bcrsmatrix.hh:1926
B & entry(size_type row, size_type col)
Returns reference to entry (row,col) of the matrix.
Definition: bcrsmatrix.hh:1255
row_type::Iterator ColIterator
Iterator for the entries of each row.
Definition: bcrsmatrix.hh:653
Deallocator(typename A::template rebind< size_type >::other &sizeAllocator)
Definition: bcrsmatrix.hh:2071
Definition: bcrsmatrix.hh:71
A::size_type size_type
Type for indices and sizes.
Definition: matrix.hh:41
Iterator RowIterator
rename the iterators for easier access
Definition: bcrsmatrix.hh:650
Iterator beforeBegin()
Definition: bcrsmatrix.hh:644
BCRSMatrix(const BCRSMatrix &Mat)
copy constructor
Definition: bcrsmatrix.hh:754
void insert(size_type j)
put column index in row
Definition: bcrsmatrix.hh:1026
T block_type
Export the type representing the components.
Definition: matrix.hh:32
size_type index() const
return index corresponding to pointer
Definition: basearray.hh:626
BCRSMatrix()
an empty matrix
Definition: bcrsmatrix.hh:698
BuildMode
we support two modes
Definition: bcrsmatrix.hh:459
bool equals(const RealRowIterator< const ValueType > &other) const
equality
Definition: bcrsmatrix.hh:580
size_type size() const
number of blocks in the array (are of size 1 here)
Definition: basearray.hh:752
CompressedBlockVectorWindow< B, A > row_type
implement row_type with compressed vector
Definition: bcrsmatrix.hh:444
BuildStage
Definition: bcrsmatrix.hh:416
BuildStage ready
Definition: bcrsmatrix.hh:1897
Matrix is not built at all, no memory has been allocated, build mode and size can still be set...
Definition: bcrsmatrix.hh:420
Class used by shared_ptr to deallocate memory using the proper allocator.
Definition: bcrsmatrix.hh:2066
Matrix is currently being built, some memory has been allocated, build mode and size are fixed...
Definition: bcrsmatrix.hh:422
block_type & operator[](size_type j) const
Returns entry in column j.
Definition: bcrsmatrix.hh:136
size_type getsize() const
get size
Definition: bvector.hh:1073
void endrowsizes()
indicate that size of all rows is defined
Definition: bcrsmatrix.hh:1109
size_type index() const
dereferencing
Definition: bcrsmatrix.hh:1020
double avg
average number of non-zeroes per row.
Definition: bcrsmatrix.hh:84
Definition: bvector.hh:924
std::ptrdiff_t distanceTo(const RealRowIterator< const ValueType > &other) const
Definition: bcrsmatrix.hh:566
double overflowsize
Definition: bcrsmatrix.hh:1924
RealRowIterator< const row_type > ConstIterator
Definition: bcrsmatrix.hh:657
void mmv(const X &x, Y &y) const
y -= A x
Definition: bcrsmatrix.hh:1612
Matrix is not built at all, no memory has been allocated, build mode and size can still be set...
Definition: bcrsmatrix.hh:418
void mtv(const X &x, Y &y) const
y = A^T x
Definition: bcrsmatrix.hh:1650