summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/mat_cr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/mat_cr.h')
-rw-r--r--src/lib/netlist/plib/mat_cr.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/lib/netlist/plib/mat_cr.h b/src/lib/netlist/plib/mat_cr.h
index 827f9a6c270..be2d730b215 100644
--- a/src/lib/netlist/plib/mat_cr.h
+++ b/src/lib/netlist/plib/mat_cr.h
@@ -28,6 +28,9 @@
namespace plib
{
+ // FIXME: causes a crash with GMRES handler
+ // template<typename T, int N, typename C = std::size_t>
+
template<typename T, int N, typename C = uint16_t>
struct matrix_compressed_rows_t
{
@@ -69,7 +72,7 @@ namespace plib
~matrix_compressed_rows_t() = default;
- index_type size() const { return m_size; }
+ constexpr index_type size() const { return (N>0) ? N : m_size; }
void set_scalar(const T scalar)
{
@@ -382,7 +385,7 @@ namespace plib
*
*/
- for (std::size_t i = 1; i < m_size; i++) // row i
+ for (std::size_t i = 1; i < size(); i++) // row i
{
const std::size_t p_i_end = row_idx[i + 1];
// loop over all columns k left of diag in row i
@@ -398,8 +401,8 @@ namespace plib
while (i_j < p_i_end && k_j < p_k_end ) // pj = (i, j)
{
// we can assume that within a row ja increases continuously */
- const auto c_i_j = col_idx[i_j]; // row i, column j
- const auto c_k_j = col_idx[k_j]; // row i, column j
+ const std::size_t c_i_j = col_idx[i_j]; // row i, column j
+ const std::size_t c_k_j = col_idx[k_j]; // row i, column j
if (c_k_j < c_i_j)
k_j++;
else if (c_k_j == c_i_j)
@@ -435,7 +438,7 @@ namespace plib
* This can be solved for x using backwards elimination in U.
*
*/
- for (std::size_t i = 1; i < m_size; ++i )
+ for (std::size_t i = 1; i < size(); ++i )
{
T tmp = 0.0;
const std::size_t j1 = row_idx[i];
@@ -443,11 +446,10 @@ namespace plib
for (std::size_t j = j1; j < j2; ++j )
tmp += A[j] * r[col_idx[j]];
-
r[i] -= tmp;
}
// i now is equal to n;
- for (std::size_t i = m_size; i-- > 0; )
+ for (std::size_t i = size(); i-- > 0; )
{
T tmp = 0.0;
const std::size_t di = diag[i];