From b2ab39d09d5ecf555a0a2f41bda6016a13a4f436 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dennis=20Gl=C3=A4ser?= <dennis.glaeser@iws.uni-stuttgart.de>
Date: Thu, 22 Nov 2018 13:43:42 +0100
Subject: [PATCH] [mpfa][localassemblerbase] add function to reconstruct face
 unknowns

---
 .../cellcentered/mpfa/localassemblerbase.hh   | 23 +++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/dumux/discretization/cellcentered/mpfa/localassemblerbase.hh b/dumux/discretization/cellcentered/mpfa/localassemblerbase.hh
index b182e9d9e3..9d0d8516e5 100644
--- a/dumux/discretization/cellcentered/mpfa/localassemblerbase.hh
+++ b/dumux/discretization/cellcentered/mpfa/localassemblerbase.hh
@@ -138,6 +138,29 @@ class InteractionVolumeAssemblerBase
         DUNE_THROW(Dune::NotImplemented, "Implementation does not provide a assemble() function for the cell/Dirichlet unknowns");
     }
 
+    /*!
+     * \brief Assembles the vector of face unknowns within an interaction volume.
+     * \note  This requires the data handle to be fully assembled already.
+     *
+     * \param handle The data handle in which the vector is stored
+     * \param iv The interaction volume
+     */
+    template< class DataHandle, class IV >
+    static typename IV::Traits::MatVecTraits::FaceVector
+    assembleFaceUnkowns(const DataHandle& handle, const IV& iv)
+    {
+        typename IV::Traits::MatVecTraits::FaceVector u;
+        resizeVector_(u, iv.numFaces());
+
+        handle.AB().mv(handle.uj(), u);
+
+        // maybe add gravity terms
+        if (handle.deltaG().size() == iv.numUnknowns())
+            handle.AB().umv(handle.deltaG(), u);
+
+        return u;
+    }
+
     /*!
      * \brief Assembles the gravitational flux contributions on the scvfs within an
      *        interaction volume.
-- 
GitLab