From 7225af9d149054e7d2c64fe785f17507e425650f Mon Sep 17 00:00:00 2001
From: Kilian Weishaupt <kilian.weishaupt@iws.uni-stuttgart.de>
Date: Fri, 21 May 2021 14:16:35 +0000
Subject: [PATCH] Merge branch 'feature/box-multidomain-internal-dirichlet'
 into 'master'

[md][box] Internal Dirichlet

See merge request dumux-repositories/dumux!2637

(cherry picked from commit dce216a4a2b624fbd2cfec3db86ef21c646c2775)

f2e2f221 [md][box] Internal Dirichlet
---
 dumux/assembly/fvlocalassemblerbase.hh          |  4 ++--
 dumux/multidomain/subdomainboxlocalassembler.hh | 10 ++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/dumux/assembly/fvlocalassemblerbase.hh b/dumux/assembly/fvlocalassemblerbase.hh
index 5b77bb6106..35773d0f51 100644
--- a/dumux/assembly/fvlocalassemblerbase.hh
+++ b/dumux/assembly/fvlocalassemblerbase.hh
@@ -221,10 +221,10 @@ public:
         // and set the residual to (privar - dirichletvalue)
         for (const auto& scvI : scvs(this->fvGeometry()))
         {
-            const auto internalDirichletConstraints = this->problem().hasInternalDirichletConstraint(this->element(), scvI);
+            const auto internalDirichletConstraints = asImp_().problem().hasInternalDirichletConstraint(this->element(), scvI);
             if (internalDirichletConstraints.any())
             {
-                const auto dirichletValues = this->problem().internalDirichlet(this->element(), scvI);
+                const auto dirichletValues = asImp_().problem().internalDirichlet(this->element(), scvI);
                 // set the Dirichlet conditions in residual and jacobian
                 for (int eqIdx = 0; eqIdx < internalDirichletConstraints.size(); ++eqIdx)
                     if (internalDirichletConstraints[eqIdx])
diff --git a/dumux/multidomain/subdomainboxlocalassembler.hh b/dumux/multidomain/subdomainboxlocalassembler.hh
index f81dfaca33..9ad5a02366 100644
--- a/dumux/multidomain/subdomainboxlocalassembler.hh
+++ b/dumux/multidomain/subdomainboxlocalassembler.hh
@@ -388,6 +388,7 @@ class SubDomainBoxLocalAssembler<id, TypeTag, Assembler, DiffMethod::numeric, /*
     using FVElementGeometry = typename GridGeometry::LocalView;
     using GridView = typename GridGeometry::GridView;
     using Element = typename GridView::template Codim<0>::Entity;
+    using Problem = GetPropType<TypeTag, Properties::Problem>;
 
     enum { numEq = GetPropType<TypeTag, Properties::ModelTraits>::numEq() };
     enum { dim = GridView::dimension };
@@ -581,6 +582,15 @@ public:
                             A[scv.dofIndex()][globalJ][eqIdx][pvIdx] = 0.0;
                         else
                             A[scv.dofIndex()][globalJ][eqIdx][pvIdx] += partialDerivs[scv.localDofIndex()][eqIdx];
+
+                        // enforce internal Dirichlet constraints
+                        if constexpr (Problem::enableInternalDirichletConstraints())
+                        {
+                            const auto internalDirichletConstraints = this->problem().hasInternalDirichletConstraint(this->element(), scv);
+                            if (internalDirichletConstraints[eqIdx])
+                                A[scv.dofIndex()][globalJ][eqIdx][pvIdx] = 0.0;
+                        }
+
                     }
                 }
 
-- 
GitLab