From d29e28889975870b69e7501c0c02fe283ef6a287 Mon Sep 17 00:00:00 2001
From: Tobias Leibner <tobias.leibner@googlemail.com>
Date: Mon, 27 Jan 2020 15:37:15 +0100
Subject: [PATCH] [local.numerical-fluxes] adapt to changes in fvector/fmatrix

---
 dune/gdt/local/numerical-fluxes/engquist-osher.hh | 3 ++-
 dune/gdt/local/numerical-fluxes/upwind.hh         | 2 +-
 dune/gdt/local/numerical-fluxes/vijayasundaram.hh | 2 +-
 dune/gdt/operators/ipdg-flux-reconstruction.hh    | 9 ++++++---
 4 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/dune/gdt/local/numerical-fluxes/engquist-osher.hh b/dune/gdt/local/numerical-fluxes/engquist-osher.hh
index c308728f9..75182bce3 100644
--- a/dune/gdt/local/numerical-fluxes/engquist-osher.hh
+++ b/dune/gdt/local/numerical-fluxes/engquist-osher.hh
@@ -85,7 +85,8 @@ public:
         const auto local_uu = quadrature_point.position();
         const auto uu = state_interval.geometry().global(local_uu);
         const auto df = local_flux.jacobian(x, uu, param);
-        ret += state_interval.geometry().integrationElement(local_uu) * quadrature_point.weight() * min_max(n * df, 0.);
+        ret +=
+            state_interval.geometry().integrationElement(local_uu) * quadrature_point.weight() * min_max(n * df[0], 0.);
       }
       return ret;
     };
diff --git a/dune/gdt/local/numerical-fluxes/upwind.hh b/dune/gdt/local/numerical-fluxes/upwind.hh
index b7519530b..293ead52c 100644
--- a/dune/gdt/local/numerical-fluxes/upwind.hh
+++ b/dune/gdt/local/numerical-fluxes/upwind.hh
@@ -66,7 +66,7 @@ public:
   {
     this->compute_entity_coords(x);
     const auto df = local_flux_inside_->jacobian(x_in_inside_coords_, (u + v) / 2., param);
-    if (n * df > 0)
+    if (n * df[0] > 0)
       return local_flux_inside_->evaluate(x_in_inside_coords_, u, param) * n;
     else
       return local_flux_outside_->evaluate(x_in_outside_coords_, v, param) * n;
diff --git a/dune/gdt/local/numerical-fluxes/vijayasundaram.hh b/dune/gdt/local/numerical-fluxes/vijayasundaram.hh
index ffe41e0a4..041b9368f 100644
--- a/dune/gdt/local/numerical-fluxes/vijayasundaram.hh
+++ b/dune/gdt/local/numerical-fluxes/vijayasundaram.hh
@@ -14,7 +14,7 @@
 #include <functional>
 #include <tuple>
 
-#include <dune/xt/common/matrix.hh>
+#include <dune/xt/common/fmatrix.hh>
 #include <dune/xt/common/math.hh>
 #include <dune/xt/la/eigen-solver.hh>
 
diff --git a/dune/gdt/operators/ipdg-flux-reconstruction.hh b/dune/gdt/operators/ipdg-flux-reconstruction.hh
index 187ae6b15..2666b7ab4 100644
--- a/dune/gdt/operators/ipdg-flux-reconstruction.hh
+++ b/dune/gdt/operators/ipdg-flux-reconstruction.hh
@@ -174,12 +174,15 @@ public:
                 const auto source_grad_element = local_source_element->jacobian(point_in_reference_element, param)[0];
                 const auto source_grad_neighbor =
                     local_source_neighbor->jacobian(point_in_reference_neighbor, param)[0];
+                // df_value_* is of type FieldVector<F, 1>
                 const auto df_value_element = local_df_element->evaluate(point_in_reference_element, param);
                 const auto df_value_neighbor = local_df_neighbor->evaluate(point_in_reference_neighbor, param);
+                // dt_value_* is of type FieldMatrix<F, d, d>
                 const auto dt_value_element = local_dt_element->evaluate(point_in_reference_element, param);
                 const auto dt_value_neighbor = local_dt_neighbor->evaluate(point_in_reference_neighbor, param);
-                const auto diffusion_element = dt_value_element * df_value_element;
-                const auto diffusion_neighbor = dt_value_neighbor * df_value_neighbor;
+                // use df_value_*[0] to avoid confusion with matrix-vector multiplication
+                const auto diffusion_element = dt_value_element * df_value_element[0];
+                const auto diffusion_neighbor = dt_value_neighbor * df_value_neighbor[0];
                 // compute penalty factor (see Epshteyn, Riviere, 2007)
                 const F sigma = LocalEllipticIpdgIntegrands::internal::inner_sigma(max_polorder);
                 const double beta = LocalEllipticIpdgIntegrands::internal::default_beta(d);
@@ -249,7 +252,7 @@ public:
               const auto source_grad_element = local_source_element->jacobian(point_in_reference_element, param)[0];
               const auto df_value_element = local_df_element->evaluate(point_in_reference_element, param);
               const auto dt_value_element = local_dt_element->evaluate(point_in_reference_element, param);
-              const auto diffusion_element = dt_value_element * df_value_element;
+              const auto diffusion_element = dt_value_element * df_value_element[0];
               // compute penalty (see Epshteyn, Riviere, 2007)
               const F sigma = LocalEllipticIpdgIntegrands::internal::boundary_sigma(max_polorder);
               const double beta = LocalEllipticIpdgIntegrands::internal::default_beta(d);
-- 
GitLab