Nektar++
Public Types | Public Member Functions | Protected Attributes | List of all members
Nektar::NekSparseDiagBlkMatrix< SparseStorageType > Class Template Reference

#include <SparseDiagBlkMatrix.hpp>

Public Types

typedef SparseStorageType StorageType
 
typedef SparseStorageType::DataType DataType
 
typedef std::shared_ptr< SparseStorageType > SparseStorageSharedPtr
 
typedef Array< OneD, DataTypeDataVectorType
 
typedef Array< OneD, const DataTypeConstDataVectorType
 
typedef Array< OneD, SparseStorageSharedPtrSparseStorageSharedPtrVector
 

Public Member Functions

 NekSparseDiagBlkMatrix (const SparseStorageSharedPtrVector &sparseStoragePtrVector)
 
 NekSparseDiagBlkMatrix (const NekSparseDiagBlkMatrix &src)
 
 ~NekSparseDiagBlkMatrix ()
 
IndexType GetRows () const
 
IndexType GetColumns () const
 
IndexType GetNumNonZeroEntries ()
 
DataType GetFillInRatio () const
 
IndexType GetRows (int i) const
 number of rows at i-th submatrix More...
 
IndexType GetColumns (int i) const
 number of columns at i-th submatrix More...
 
IndexType GetNumberOfMatrixBlocks () const
 
IndexType GetNumNonZeroEntries (int i) const
 
DataType GetFillInRatio (int i) const
 
boost::call_traits< DataType >::const_reference operator() (const IndexType row, const IndexType column) const
 
boost::call_traits< DataType >::const_reference operator() (const IndexType block, const IndexType row, const IndexType column) const
 
void Multiply (const DataVectorType &in, DataVectorType &out)
 
void Multiply (const DataType *in, DataType *out)
 
void MultiplySubMatrix (const IndexType blockNum, DataType *in, DataType *out)
 
size_t GetMemoryFootprint ()
 
size_t GetMemoryFootprint (IndexType i) const
 
unsigned long GetMulCallsCounter () const
 
DataType GetAvgRowDensity ()
 
DataType GetAvgRowDensity (IndexType i) const
 
IndexType GetBandwidth ()
 
IndexType GetBandwidth (IndexType i)
 
COOMatTypeSharedPtr GetCooStorage ()
 
COOMatTypeSharedPtr GetCooStorage (IndexType i)
 
void writeSparsityPatternTo (std::ostream &out, IndexType blockSize=64)
 
void writeSubmatrixSparsityPatternTo (std::ostream &out, const IndexType subMatrixIdx, IndexType blockSize=64)
 
void writeBlockSparsityPatternTo (std::ostream &out, const IndexType blk_row=0, const IndexType blk_col=0, IndexType blockSize=64)
 
void writeSubmatrixBlockSparsityPatternTo (std::ostream &out, const IndexType subMatrixIdx, const IndexType blk_row=0, const IndexType blk_col=0, IndexType blockSize=64)
 Complementary routine to the previous. It generates exact non-zero pattern of a given block matrix entry to *this object. E.g., for a 6x6 matrix defined as A(i,i):=i, A(i,j):=0, block size = 2 and blk_row=blk_col=2 it produces 2x2 matrix with 5 and 6 along the diagonal. More...
 

Protected Attributes

IndexType m_rows
 
IndexType m_cols
 
IndexVector m_rowoffset
 
unsigned long m_mulCallsCounter
 
SparseStorageSharedPtrVector m_submatrix
 

Detailed Description

template<typename SparseStorageType>
class Nektar::NekSparseDiagBlkMatrix< SparseStorageType >

Definition at line 59 of file SparseDiagBlkMatrix.hpp.

Member Typedef Documentation

◆ ConstDataVectorType

template<typename SparseStorageType >
typedef Array<OneD, const DataType> Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::ConstDataVectorType

Definition at line 66 of file SparseDiagBlkMatrix.hpp.

◆ DataType

template<typename SparseStorageType >
typedef SparseStorageType::DataType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::DataType

Definition at line 63 of file SparseDiagBlkMatrix.hpp.

◆ DataVectorType

template<typename SparseStorageType >
typedef Array<OneD, DataType> Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::DataVectorType

Definition at line 65 of file SparseDiagBlkMatrix.hpp.

◆ SparseStorageSharedPtr

template<typename SparseStorageType >
typedef std::shared_ptr<SparseStorageType> Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::SparseStorageSharedPtr

Definition at line 64 of file SparseDiagBlkMatrix.hpp.

◆ SparseStorageSharedPtrVector

template<typename SparseStorageType >
typedef Array<OneD, SparseStorageSharedPtr> Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::SparseStorageSharedPtrVector

Definition at line 67 of file SparseDiagBlkMatrix.hpp.

◆ StorageType

template<typename SparseStorageType >
typedef SparseStorageType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::StorageType

Definition at line 62 of file SparseDiagBlkMatrix.hpp.

Constructor & Destructor Documentation

◆ NekSparseDiagBlkMatrix() [1/2]

template<typename SparseStorageType >
Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::NekSparseDiagBlkMatrix ( const SparseStorageSharedPtrVector sparseStoragePtrVector)

Definition at line 51 of file SparseDiagBlkMatrix.cpp.

53 : m_rows(0), m_cols(0), m_rowoffset(sparseStoragePtrVector.size() + 1, 0.0),
55 m_submatrix(sparseStoragePtrVector.size(), sparseStoragePtrVector)
56{
57 for (int i = 0; i < sparseStoragePtrVector.size(); i++)
58 {
59 const IndexType rows = sparseStoragePtrVector[i]->GetRows();
60 m_rows += rows;
61 m_cols += sparseStoragePtrVector[i]->GetColumns();
62 m_rowoffset[i + 1] = m_rowoffset[i] + rows;
63 }
64}
SparseStorageSharedPtrVector m_submatrix
unsigned int IndexType

References Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::m_cols, Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::m_rowoffset, and Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::m_rows.

◆ NekSparseDiagBlkMatrix() [2/2]

template<typename SparseStorageType >
Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::NekSparseDiagBlkMatrix ( const NekSparseDiagBlkMatrix< SparseStorageType > &  src)

Definition at line 67 of file SparseDiagBlkMatrix.cpp.

69 : m_rows(src.m_rows), m_cols(src.m_cols), m_rowoffset(src.m_rowoffset),
70 m_mulCallsCounter(src.m_mulCallsCounter), m_submatrix(src.m_submatrix)
71{
72}

◆ ~NekSparseDiagBlkMatrix()

template<typename SparseStorageType >
Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::~NekSparseDiagBlkMatrix

Definition at line 75 of file SparseDiagBlkMatrix.cpp.

76{
77}

Member Function Documentation

◆ GetAvgRowDensity() [1/2]

template<typename SparseStorageType >
SparseStorageType::DataType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetAvgRowDensity

Definition at line 251 of file SparseDiagBlkMatrix.cpp.

252{
253 DataType avgRowDensity = 0.0;
254 for (int i = 0; i < m_submatrix.size(); i++)
255 {
256 avgRowDensity += (DataType)m_submatrix[i]->GetNumNonZeroEntries() /
258 }
259 return avgRowDensity / m_submatrix.size();
260}
SparseStorageType::DataType DataType

◆ GetAvgRowDensity() [2/2]

template<typename SparseStorageType >
SparseStorageType::DataType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetAvgRowDensity ( IndexType  i) const

Definition at line 264 of file SparseDiagBlkMatrix.cpp.

265{
266 return (DataType)m_submatrix[i]->GetNumNonZeroEntries() /
268}

References Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetNumNonZeroEntries().

◆ GetBandwidth() [1/2]

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetBandwidth

Definition at line 271 of file SparseDiagBlkMatrix.cpp.

272{
273 IndexType bandwidth = 0;
274 for (int i = 0; i < m_submatrix.size(); i++)
275 {
276 typename SparseStorageType::const_iterator entry =
277 m_submatrix[i]->begin();
278 for (; entry != m_submatrix[i]->end(); ++entry)
279 {
280 bandwidth =
281 (std::max)(static_cast<int>(bandwidth),
282 2 * abs(static_cast<int>(entry->first.first -
283 entry->first.second) +
284 1));
285 }
286 }
287 return bandwidth;
288}
scalarT< T > abs(scalarT< T > in)
Definition: scalar.hpp:298

References tinysimd::abs().

◆ GetBandwidth() [2/2]

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetBandwidth ( IndexType  i)

Definition at line 291 of file SparseDiagBlkMatrix.cpp.

292{
293 IndexType bandwidth = 0;
294 typename SparseStorageType::const_iterator entry = m_submatrix[i]->begin();
295 for (; entry != m_submatrix[i]->end(); ++entry)
296 {
297 bandwidth = (std::max)(
298 static_cast<int>(bandwidth),
299 2 * abs(static_cast<int>(entry->first.first - entry->first.second) +
300 1));
301 }
302 return bandwidth;
303}

References tinysimd::abs().

◆ GetColumns() [1/2]

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetColumns

Definition at line 86 of file SparseDiagBlkMatrix.cpp.

87{
88 return m_cols;
89}

Referenced by Nektar::operator<<().

◆ GetColumns() [2/2]

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetColumns ( int  i) const

number of columns at i-th submatrix

Definition at line 100 of file SparseDiagBlkMatrix.cpp.

101{
102 return m_submatrix[i]->GetColumns();
103}

◆ GetCooStorage() [1/2]

template<typename SparseStorageType >
COOMatTypeSharedPtr Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetCooStorage

Definition at line 321 of file SparseDiagBlkMatrix.cpp.

322{
324 IndexType row_offset = 0;
325 IndexType col_offset = 0;
326 for (IndexType i = 0; i < m_submatrix.size(); i++)
327 {
328 typename SparseStorageType::const_iterator entry =
329 m_submatrix[i]->begin();
330 for (; entry != m_submatrix[i]->end(); entry++)
331 {
332 IndexType loc_row = entry->first.first;
333 IndexType loc_col = entry->first.second;
334 (*coo)[std::make_pair(loc_row + row_offset, loc_col + col_offset)] =
335 entry->second;
336 }
337 row_offset += m_submatrix[i]->GetRows();
338 col_offset += m_submatrix[i]->GetColumns();
339 }
340 return coo;
341}
std::shared_ptr< COOMatType > COOMatTypeSharedPtr
std::map< CoordType, NekDouble > COOMatType

◆ GetCooStorage() [2/2]

template<typename SparseStorageType >
COOMatTypeSharedPtr Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetCooStorage ( IndexType  i)

Definition at line 306 of file SparseDiagBlkMatrix.cpp.

308{
310 typename SparseStorageType::const_iterator entry = m_submatrix[i]->begin();
311 for (; entry != m_submatrix[i]->end(); entry++)
312 {
313 IndexType loc_row = entry->first.first;
314 IndexType loc_col = entry->first.second;
315 (*coo)[std::make_pair(loc_row, loc_col)] = entry->second;
316 }
317 return coo;
318}

◆ GetFillInRatio() [1/2]

template<typename SparseStorageType >
NekSparseDiagBlkMatrix< SparseStorageType >::DataType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetFillInRatio

Definition at line 140 of file SparseDiagBlkMatrix.cpp.

141{
142 IndexType stored = 0;
143 IndexType nnz = 0;
144 for (int i = 0; i < m_submatrix.size(); i++)
145 {
146 stored += m_submatrix[i]->GetNumStoredDoubles();
147 nnz += m_submatrix[i]->GetNumNonZeroEntries();
148 }
149 return (DataType)stored / (DataType)nnz;
150}

References Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetNumNonZeroEntries().

Referenced by Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetFillInRatio().

◆ GetFillInRatio() [2/2]

template<typename SparseStorageType >
NekSparseDiagBlkMatrix< SparseStorageType >::DataType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetFillInRatio ( int  i) const

Definition at line 133 of file SparseDiagBlkMatrix.cpp.

134{
135 return m_submatrix[i]->GetFillInRatio();
136}

References Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetFillInRatio().

◆ GetMemoryFootprint() [1/2]

template<typename SparseStorageType >
size_t Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetMemoryFootprint

Definition at line 220 of file SparseDiagBlkMatrix.cpp.

221{
222 size_t bytes = sizeof(IndexType) * 2 + // sizes
223 sizeof(unsigned long) + // mulCallsCounter
224 sizeof(IndexVector) +
225 sizeof(IndexType) * m_rowoffset.capacity() +
227 sizeof(SparseStorageSharedPtr) * m_submatrix.capacity();
228 for (int i = 0; i < m_submatrix.size(); i++)
229 {
230 bytes += m_submatrix[i]->GetMemoryUsage();
231 }
232 return bytes;
233}
Array< OneD, SparseStorageSharedPtr > SparseStorageSharedPtrVector
std::shared_ptr< SparseStorageType > SparseStorageSharedPtr
Array< OneD, IndexType > IndexVector

◆ GetMemoryFootprint() [2/2]

template<typename SparseStorageType >
size_t Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetMemoryFootprint ( IndexType  i) const

Definition at line 236 of file SparseDiagBlkMatrix.cpp.

238{
239 return m_submatrix[i]->GetMemoryUsage();
240}

◆ GetMulCallsCounter()

template<typename SparseStorageType >
unsigned long Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetMulCallsCounter

Definition at line 243 of file SparseDiagBlkMatrix.cpp.

245{
246 return m_mulCallsCounter;
247}

◆ GetNumberOfMatrixBlocks()

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetNumberOfMatrixBlocks

Definition at line 106 of file SparseDiagBlkMatrix.cpp.

108{
109 return m_submatrix.size();
110}

◆ GetNumNonZeroEntries() [1/2]

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetNumNonZeroEntries

Definition at line 113 of file SparseDiagBlkMatrix.cpp.

114{
115 IndexType nnz = 0;
116 for (int i = 0; i < m_submatrix.size(); i++)
117 {
118 nnz += m_submatrix[i]->GetNumNonZeroEntries();
119 }
120 return nnz;
121}

Referenced by Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetAvgRowDensity(), and Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetFillInRatio().

◆ GetNumNonZeroEntries() [2/2]

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetNumNonZeroEntries ( int  i) const

Definition at line 125 of file SparseDiagBlkMatrix.cpp.

127{
128 return m_submatrix[i]->GetNumNonZeroEntries();
129}

◆ GetRows() [1/2]

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetRows

Definition at line 80 of file SparseDiagBlkMatrix.cpp.

81{
82 return m_rows;
83}

Referenced by Nektar::operator<<().

◆ GetRows() [2/2]

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::GetRows ( int  i) const

number of rows at i-th submatrix

Definition at line 93 of file SparseDiagBlkMatrix.cpp.

94{
95 return m_submatrix[i]->GetRows();
96}

◆ Multiply() [1/2]

template<typename SparseStorageType >
void Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::Multiply ( const DataType in,
DataType out 
)

Definition at line 200 of file SparseDiagBlkMatrix.cpp.

202{
203 for (int i = 0; i < m_submatrix.size(); ++i)
204 {
205 m_submatrix[i]->Multiply(&in[m_rowoffset[i]], &out[m_rowoffset[i]]);
206 }
208}

◆ Multiply() [2/2]

template<typename SparseStorageType >
void Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::Multiply ( const DataVectorType in,
DataVectorType out 
)

Definition at line 189 of file SparseDiagBlkMatrix.cpp.

191{
192 for (int i = 0; i < m_submatrix.size(); ++i)
193 {
194 m_submatrix[i]->Multiply(&in[m_rowoffset[i]], &out[m_rowoffset[i]]);
195 }
197}

◆ MultiplySubMatrix()

template<typename SparseStorageType >
void Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::MultiplySubMatrix ( const IndexType  blockNum,
DataType in,
DataType out 
)

Definition at line 211 of file SparseDiagBlkMatrix.cpp.

213{
214 m_submatrix[blockNum]->Multiply(in + m_rowoffset[blockNum],
215 out + m_rowoffset[blockNum]);
216 // m_mulCallsCounter++;
217}

◆ operator()() [1/2]

template<typename SparseStorageType >
boost::call_traits< typenameSparseStorageType::DataType >::const_reference Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::operator() ( const IndexType  block,
const IndexType  row,
const IndexType  column 
) const

Definition at line 155 of file SparseDiagBlkMatrix.cpp.

157{
158 return m_submatrix[block]->GetValue(loc_row, loc_column);
159}

◆ operator()() [2/2]

template<typename SparseStorageType >
boost::call_traits< typenameSparseStorageType::DataType >::const_reference Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::operator() ( const IndexType  row,
const IndexType  column 
) const
Todo:
double check, might be a bug when local_col > local column

Definition at line 164 of file SparseDiagBlkMatrix.cpp.

166{
167 IndexType i = 0;
168 static DataType defaultReturnValue = 0;
169
170 signed int local_row = glob_row;
171 signed int local_col = glob_column;
172
173 while ((local_row >= m_submatrix[i]->GetRows()) && (local_col >= 0))
174 {
175 local_row -= m_submatrix[i]->GetRows();
176 local_col -= m_submatrix[i]->GetColumns();
177 i++;
178 }
179 /// \todo double check, might be a bug when local_col > local column
180 if (local_col < 0)
181 {
182 return defaultReturnValue;
183 }
184
185 return m_submatrix[i]->GetValue(local_row, local_col);
186}

◆ writeBlockSparsityPatternTo()

template<typename SparseStorageType >
void Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::writeBlockSparsityPatternTo ( std::ostream &  out,
const IndexType  blk_row = 0,
const IndexType  blk_col = 0,
IndexType  blockSize = 64 
)

Definition at line 482 of file SparseDiagBlkMatrix.cpp.

485{
486 blockSize = (std::min)(blockSize, GetRows());
487 std::vector<std::vector<int>> grid(blockSize);
488 for (int row = 0; row < blockSize; row++)
489 {
490 grid[row].resize(blockSize, 0.0);
491 }
492
493 IndexType row_offset = 0;
494 IndexType col_offset = 0;
495 for (int i = 0; i < m_submatrix.size(); i++)
496 {
497 typename SparseStorageType::const_iterator entry =
498 m_submatrix[i]->begin();
499 typename SparseStorageType::const_iterator stop = m_submatrix[i]->end();
500 for (; entry != stop; ++entry)
501 {
502 const IndexType row = entry->first.first + row_offset;
503 const IndexType col = entry->first.second + col_offset;
504
505 if (blk_row != row / blockSize)
506 {
507 continue;
508 }
509 if (blk_col != col / blockSize)
510 {
511 continue;
512 }
513 grid[row % blockSize][col % blockSize]++;
514 }
515 row_offset += m_submatrix[i]->GetRows();
516 col_offset += m_submatrix[i]->GetColumns();
517 }
518
519 for (int row = 0; row < blockSize; row++)
520 {
521 for (int col = 0; col < blockSize; col++)
522 {
523 out << grid[row][col] << " ";
524 }
525 out << std::endl;
526 }
527}

◆ writeSparsityPatternTo()

template<typename SparseStorageType >
void Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::writeSparsityPatternTo ( std::ostream &  out,
IndexType  blockSize = 64 
)

Definition at line 388 of file SparseDiagBlkMatrix.cpp.

390{
391 const int matRows = GetRows();
392 const int gridRows = matRows / blockSize + (matRows % blockSize > 0);
393 const int gridCols = gridRows;
394
395 std::vector<std::vector<int>> grid(gridRows);
396 for (int row = 0; row < gridRows; row++)
397 {
398 grid[row].resize(gridCols, 0.0);
399 }
400
401 IndexType row_offset = 0;
402 IndexType col_offset = 0;
403 for (int i = 0; i < m_submatrix.size(); i++)
404 {
405 typename SparseStorageType::const_iterator entry =
406 m_submatrix[i]->begin();
407 typename SparseStorageType::const_iterator stop = m_submatrix[i]->end();
408 for (; entry != stop; ++entry)
409 {
410 const IndexType row = entry->first.first + row_offset;
411 const IndexType col = entry->first.second + col_offset;
412 const int gridRow = row / blockSize;
413 const int gridCol = col / blockSize;
414 grid[gridRow][gridCol]++;
415 }
416 row_offset += m_submatrix[i]->GetRows();
417 col_offset += m_submatrix[i]->GetColumns();
418 }
419
420 for (int row = 0; row < gridRows; row++)
421 {
422 for (int col = 0; col < gridCols; col++)
423 {
424 out << grid[row][col] << " ";
425 }
426 out << std::endl;
427 }
428}

◆ writeSubmatrixBlockSparsityPatternTo()

template<typename SparseStorageType >
void Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::writeSubmatrixBlockSparsityPatternTo ( std::ostream &  out,
const IndexType  subMatrixIdx,
const IndexType  blk_row = 0,
const IndexType  blk_col = 0,
IndexType  blockSize = 64 
)

Complementary routine to the previous. It generates exact non-zero pattern of a given block matrix entry to *this object. E.g., for a 6x6 matrix defined as A(i,i):=i, A(i,j):=0, block size = 2 and blk_row=blk_col=2 it produces 2x2 matrix with 5 and 6 along the diagonal.

Definition at line 437 of file SparseDiagBlkMatrix.cpp.

443{
444 blockSize = (std::min)(blockSize, m_submatrix[subMatrixIdx]->GetRows());
445 std::vector<std::vector<int>> grid(blockSize);
446 for (int row = 0; row < blockSize; row++)
447 {
448 grid[row].resize(blockSize, 0.0);
449 }
450
451 typename SparseStorageType::const_iterator entry =
452 m_submatrix[subMatrixIdx]->begin();
453 typename SparseStorageType::const_iterator stop =
454 m_submatrix[subMatrixIdx]->end();
455 for (; entry != stop; ++entry)
456 {
457 const IndexType row = entry->first.first;
458 const IndexType col = entry->first.second;
459
460 if (blk_row != row / blockSize)
461 {
462 continue;
463 }
464 if (blk_col != col / blockSize)
465 {
466 continue;
467 }
468 grid[row % blockSize][col % blockSize]++;
469 }
470
471 for (int row = 0; row < blockSize; row++)
472 {
473 for (int col = 0; col < blockSize; col++)
474 {
475 out << grid[row][col] << " ";
476 }
477 out << std::endl;
478 }
479}

◆ writeSubmatrixSparsityPatternTo()

template<typename SparseStorageType >
void Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::writeSubmatrixSparsityPatternTo ( std::ostream &  out,
const IndexType  subMatrixIdx,
IndexType  blockSize = 64 
)

Definition at line 351 of file SparseDiagBlkMatrix.cpp.

353{
354 const int matRows = m_submatrix[subMatrixIdx]->GetRows();
355 const int gridRows = matRows / blockSize + (matRows % blockSize > 0);
356 const int gridCols = gridRows;
357
358 std::vector<std::vector<int>> grid(gridRows);
359 for (int row = 0; row < gridRows; row++)
360 {
361 grid[row].resize(gridCols, 0.0);
362 }
363
364 typename SparseStorageType::const_iterator entry =
365 m_submatrix[subMatrixIdx]->begin();
366 typename SparseStorageType::const_iterator stop =
367 m_submatrix[subMatrixIdx]->end();
368 for (; entry != stop; ++entry)
369 {
370 const IndexType row = entry->first.first;
371 const IndexType col = entry->first.second;
372 const int gridRow = row / blockSize;
373 const int gridCol = col / blockSize;
374 grid[gridRow][gridCol]++;
375 }
376
377 for (int row = 0; row < gridRows; row++)
378 {
379 for (int col = 0; col < gridCols; col++)
380 {
381 out << grid[row][col] << " ";
382 }
383 out << std::endl;
384 }
385}

Member Data Documentation

◆ m_cols

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::m_cols
protected

◆ m_mulCallsCounter

template<typename SparseStorageType >
unsigned long Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::m_mulCallsCounter
protected

Definition at line 126 of file SparseDiagBlkMatrix.hpp.

◆ m_rowoffset

template<typename SparseStorageType >
IndexVector Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::m_rowoffset
protected

◆ m_rows

template<typename SparseStorageType >
IndexType Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::m_rows
protected

◆ m_submatrix

template<typename SparseStorageType >
SparseStorageSharedPtrVector Nektar::NekSparseDiagBlkMatrix< SparseStorageType >::m_submatrix
protected

Definition at line 127 of file SparseDiagBlkMatrix.hpp.