From 72b5bf3ccf8c61add3823f88480f2d834ec5612a Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Tue, 26 Jul 2016 12:01:14 +0200
Subject: [PATCH] Add lower solver w/o additional copy

---
 dune/matrix-vector/triangularsolve.hh | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/dune/matrix-vector/triangularsolve.hh b/dune/matrix-vector/triangularsolve.hh
index 76bd133..e21426b 100644
--- a/dune/matrix-vector/triangularsolve.hh
+++ b/dune/matrix-vector/triangularsolve.hh
@@ -10,7 +10,18 @@ namespace MatrixVector {
     x = 0;
     Vector r = b;
     if (transpose) {
-      // TODO: not yet handled
+      for (auto it = A.begin(); it != A.end(); ++it) {
+        const size_t i = it.index();
+        if (ignore != nullptr and (*ignore)[i].all())
+          continue;
+        auto cIt = it->begin();
+        assert(cIt.index() == it.index());
+        x[i] = r[i] / *cIt;
+        for (; cIt != it->end(); ++cIt) {
+          const size_t j = cIt.index();
+          r[j] -= x[i] * *cIt;
+        }
+      }
     } else {
       for (auto it = A.begin(); it != A.end(); ++it) {
         size_t i = it.index();
-- 
GitLab