OGS
ProcessLib::Assembly::ConcurrentMatrixView< Dim > Class Template Reference

Detailed Description

template<std::size_t Dim>
class ProcessLib::Assembly::ConcurrentMatrixView< Dim >

Definition at line 67 of file MatrixElementCache.h.

#include <MatrixElementCache.h>

Public Member Functions

 ConcurrentMatrixView (GlobalMatOrVec &mat_or_vec)
 
void add (std::vector< MatrixElementCacheEntry< Dim > > const &entries)
 

Private Types

using GlobalMatOrVec
 

Private Attributes

std::mutex mutex_
 
GlobalMatOrVecmat_or_vec_
 

Member Typedef Documentation

◆ GlobalMatOrVec

template<std::size_t Dim>
using ProcessLib::Assembly::ConcurrentMatrixView< Dim >::GlobalMatOrVec
private
Initial value:
std::conditional_t<Dim == 1, GlobalVector, GlobalMatrix>

Definition at line 70 of file MatrixElementCache.h.

Constructor & Destructor Documentation

◆ ConcurrentMatrixView()

template<std::size_t Dim>
ProcessLib::Assembly::ConcurrentMatrixView< Dim >::ConcurrentMatrixView ( GlobalMatOrVec & mat_or_vec)
inlineexplicit

Definition at line 74 of file MatrixElementCache.h.

75 : mat_or_vec_{mat_or_vec}
76 {
77 }

Member Function Documentation

◆ add()

template<std::size_t Dim>
void ProcessLib::Assembly::ConcurrentMatrixView< Dim >::add ( std::vector< MatrixElementCacheEntry< Dim > > const & entries)
inline

Definition at line 79 of file MatrixElementCache.h.

80 {
81 std::lock_guard<std::mutex> const lock(mutex_);
82
83 if constexpr (Dim == 2)
84 {
85 auto const n_cols = mat_or_vec_.getNumberOfColumns();
86
87 // TODO would be more efficient if our global matrix and vector
88 // implementations supported batch addition of matrix elements with
89 // arbitrary indices (not restricted to (n x m) shaped submatrices).
90 for (auto const [rc, value] : entries)
91 {
92 auto const [r, c] = rc;
93
94 auto const c_no_ghost =
96
97 mat_or_vec_.add(r, c_no_ghost, value);
98 }
99 }
100 else
101 {
102 // TODO batch addition would be more efficient. That needs the
103 // refactoring of the matrix element cache.
104 for (auto const [r, value] : entries)
105 {
106 mat_or_vec_.add(r.front(), value);
107 }
108 }
109 }
GlobalIndexType transformToNonGhostIndex(GlobalIndexType const i, GlobalIndexType const n)

References ProcessLib::Assembly::ConcurrentMatrixView< Dim >::mat_or_vec_, ProcessLib::Assembly::ConcurrentMatrixView< Dim >::mutex_, and ProcessLib::Assembly::detail::transformToNonGhostIndex().

Referenced by ProcessLib::Assembly::MatrixElementCache< Dim >::addToGlobal().

Member Data Documentation

◆ mat_or_vec_

template<std::size_t Dim>
GlobalMatOrVec& ProcessLib::Assembly::ConcurrentMatrixView< Dim >::mat_or_vec_
private

◆ mutex_

template<std::size_t Dim>
std::mutex ProcessLib::Assembly::ConcurrentMatrixView< Dim >::mutex_
private

The documentation for this class was generated from the following file: