From c91c3078b7047bad589910490c61467caef811dc Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Tue, 30 Jul 2013 17:42:02 +0200
Subject: [PATCH] New add() function for global matrices using
 RowColumnIndices.

---
 MathLib/LinAlg/Dense/GlobalDenseMatrix.h | 10 ++++++++++
 MathLib/LinAlg/Lis/LisMatrix.h           | 11 +++++++++++
 2 files changed, 21 insertions(+)

diff --git a/MathLib/LinAlg/Dense/GlobalDenseMatrix.h b/MathLib/LinAlg/Dense/GlobalDenseMatrix.h
index 35d3d656054..7272c9888b8 100644
--- a/MathLib/LinAlg/Dense/GlobalDenseMatrix.h
+++ b/MathLib/LinAlg/Dense/GlobalDenseMatrix.h
@@ -20,6 +20,8 @@
 #include "DenseMatrix.h"
 #include "DenseVector.h"
 
+#include "MathLib/LinAlg/RowColumnIndices.h"
+
 namespace MathLib
 {
 
@@ -80,6 +82,14 @@ public:
 		this->add(row_pos, row_pos, sub_matrix, fkt);
 	}
 
+	template<class T_DENSE_MATRIX>
+	void add(RowColumnIndices<IDX_TYPE> const& indices,
+			const T_DENSE_MATRIX &sub_matrix,
+			FP_TYPE fkt = static_cast<FP_TYPE>(1.0))
+	{
+		this->add(indices.rows, indices.columns, sub_matrix, fkt);
+	}
+
 	template<class T_DENSE_MATRIX>
 	void add(std::vector<IDX_TYPE> const& row_pos,
 			std::vector<IDX_TYPE> const& col_pos, const T_DENSE_MATRIX &sub_matrix,
diff --git a/MathLib/LinAlg/Lis/LisMatrix.h b/MathLib/LinAlg/Lis/LisMatrix.h
index 415a4a5d627..8fbcb06eedc 100644
--- a/MathLib/LinAlg/Lis/LisMatrix.h
+++ b/MathLib/LinAlg/Lis/LisMatrix.h
@@ -19,6 +19,8 @@
 #include <cmath>
 #include <vector>
 
+#include "MathLib/LinAlg/RowColumnIndices.h"
+
 #include "lis.h"
 
 #include "LisOption.h"
@@ -92,6 +94,15 @@ public:
         this->add(row_pos, row_pos, sub_matrix, fkt);
     }
 
+    /// Add sub-matrix at positions given by \c indices.
+    template<class T_DENSE_MATRIX>
+    void add(RowColumnIndices<std::size_t> const& indices,
+            const T_DENSE_MATRIX &sub_matrix,
+            double fkt = 1.0)
+    {
+        this->add(indices.rows, indices.columns, sub_matrix, fkt);
+    }
+
     ///
     template <class T_DENSE_MATRIX>
     void add(std::vector<std::size_t> const& row_pos,
-- 
GitLab