13#ifndef DUMUX_STOKES_DARCY_COUPLINGMANAGER_HH 
   14#define DUMUX_STOKES_DARCY_COUPLINGMANAGER_HH 
   19#include <dune/common/float_cmp.hh> 
   20#include <dune/common/exceptions.hh> 
   35template<
class MDTraits>
 
   39    using Scalar = 
typename MDTraits::Scalar;
 
   43    static constexpr auto stokesFaceIdx = 
typename MDTraits::template SubDomain<0>::Index();
 
   46    static constexpr auto darcyIdx = 
typename MDTraits::template SubDomain<2>::Index();
 
   50    using SolutionVector = 
typename MDTraits::SolutionVector;
 
   53    using StokesTypeTag = 
typename MDTraits::template SubDomain<0>::TypeTag;
 
   54    using DarcyTypeTag = 
typename MDTraits::template SubDomain<2>::TypeTag;
 
   56    using CouplingStencils = std::unordered_map<std::size_t, std::vector<std::size_t> >;
 
   57    using CouplingStencil = CouplingStencils::mapped_type;
 
   60    template<std::
size_t id>
 
   61    using SubDomainTypeTag = 
typename MDTraits::template SubDomain<id>::TypeTag;
 
   67    template<std::
size_t id> 
using PrimaryVariables = 
typename MDTraits::template SubDomain<id>::PrimaryVariables;
 
   73    template<std::
size_t id> 
using FVElementGeometry = 
typename GridGeometry<id>::LocalView;
 
   77    template<std::
size_t id> 
using Element = 
typename GridView<id>::template Codim<0>::Entity;
 
   78    template<std::
size_t id> 
using SubControlVolumeFace  = 
typename FVElementGeometry<id>::SubControlVolumeFace;
 
   82    using VelocityVector = 
typename Element<stokesIdx>::Geometry::GlobalCoordinate;
 
   86    struct StationaryStokesCouplingContext
 
   88        Element<darcyIdx> element;
 
   89        FVElementGeometry<darcyIdx> fvGeometry;
 
   90        std::size_t darcyScvfIdx;
 
   91        std::size_t stokesScvfIdx;
 
   92        VolumeVariables<darcyIdx> volVars;
 
   95    struct StationaryDarcyCouplingContext
 
   97        Element<stokesIdx> element;
 
   98        FVElementGeometry<stokesIdx> fvGeometry;
 
   99        std::size_t stokesScvfIdx;
 
  100        std::size_t darcyScvfIdx;
 
  101        VelocityVector velocity;
 
  102        VolumeVariables<stokesIdx> volVars;
 
  110                               std::shared_ptr<
const GridGeometry<darcyIdx>> darcyFvGridGeometry)
 
 
  119    void init(std::shared_ptr<
const Problem<stokesIdx>> stokesProblem,
 
  120              std::shared_ptr<
const Problem<darcyIdx>> darcyProblem,
 
  121              const SolutionVector& 
curSol)
 
  123        if (Dune::FloatCmp::ne(stokesProblem->gravity(), darcyProblem->spatialParams().gravity({})))
 
  124            DUNE_THROW(Dune::InvalidStateException, 
"Both models must use the same gravity vector");
 
  126        this->
setSubProblems(std::make_tuple(stokesProblem, stokesProblem, darcyProblem));
 
  128        couplingData_ = std::make_shared<CouplingData>(*
this);
 
 
  137        couplingMapper_.computeCouplingMapsAndStencils(*
this,
 
  138                                                       darcyToStokesCellCenterCouplingStencils_,
 
  139                                                       darcyToStokesFaceCouplingStencils_,
 
  140                                                       stokesCellCenterCouplingStencils_,
 
  141                                                       stokesFaceCouplingStencils_);
 
  143        for(
auto&& stencil : darcyToStokesCellCenterCouplingStencils_)
 
  145        for(
auto&& stencil : darcyToStokesFaceCouplingStencils_)
 
  147        for(
auto&& stencil : stokesCellCenterCouplingStencils_)
 
  149        for(
auto&& stencil : stokesFaceCouplingStencils_)
 
 
  163    template<std::
size_t i, 
class Assembler, std::enable_if_t<(i == stokesCellCenterIdx || i == stokesFaceIdx), 
int> = 0>
 
  164    void bindCouplingContext(Dune::index_constant<i> domainI, 
const Element<stokesCellCenterIdx>& element, 
const Assembler& assembler)
 const 
 
  170    template<std::
size_t i, std::enable_if_t<(i == stokesCellCenterIdx || i == stokesFaceIdx), 
int> = 0>
 
  171    void bindCouplingContext(Dune::index_constant<i> domainI, 
const Element<stokesCellCenterIdx>& element)
 const 
  173        stokesCouplingContext_.clear();
 
  175        const auto stokesElementIdx = this->
problem(
stokesIdx).gridGeometry().elementMapper().index(element);
 
  176        boundStokesElemIdx_ = stokesElementIdx;
 
  179        if(!couplingMapper_.stokesElementToDarcyElementMap().count(stokesElementIdx))
 
  183        const auto& darcyIndices = couplingMapper_.stokesElementToDarcyElementMap().at(stokesElementIdx);
 
  185        for(
auto&& indices : darcyIndices)
 
  187            const auto& darcyElement = this->
problem(
darcyIdx).gridGeometry().boundingBoxTree().entitySet().entity(indices.eIdx);
 
  188            darcyFvGeometry.bindElement(darcyElement);
 
  189            const auto& scv = (*scvs(darcyFvGeometry).begin());
 
  192            VolumeVariables<darcyIdx> darcyVolVars;
 
  193            darcyVolVars.update(darcyElemSol, this->
problem(
darcyIdx), darcyElement, scv);
 
  196            stokesCouplingContext_.push_back({darcyElement, darcyFvGeometry, indices.scvfIdx, indices.flipScvfIdx, darcyVolVars});
 
 
  203    template<
class Assembler>
 
  204    void bindCouplingContext(Dune::index_constant<darcyIdx> domainI, 
const Element<darcyIdx>& element, 
const Assembler& assembler)
 const 
 
  212        darcyCouplingContext_.clear();
 
  214        const auto darcyElementIdx = this->
problem(
darcyIdx).gridGeometry().elementMapper().index(element);
 
  215        boundDarcyElemIdx_ = darcyElementIdx;
 
  218        if(!couplingMapper_.darcyElementToStokesElementMap().count(darcyElementIdx))
 
  222        const auto& stokesElementIndices = couplingMapper_.darcyElementToStokesElementMap().at(darcyElementIdx);
 
  225        for(
auto&& indices : stokesElementIndices)
 
  227            const auto& stokesElement = this->
problem(
stokesIdx).gridGeometry().boundingBoxTree().entitySet().entity(indices.eIdx);
 
  228            stokesFvGeometry.bindElement(stokesElement);
 
  230            VelocityVector faceVelocity(0.0);
 
  232            for(
const auto& scvf : scvfs(stokesFvGeometry))
 
  234                if(scvf.index() == indices.scvfIdx)
 
  238            using PriVarsType = 
typename VolumeVariables<stokesCellCenterIdx>::PrimaryVariables;
 
  242            VolumeVariables<stokesIdx> stokesVolVars;
 
  243            for(
const auto& scv : scvs(stokesFvGeometry))
 
  244                stokesVolVars.update(elemSol, this->
problem(
stokesIdx), stokesElement, scv);
 
  247            darcyCouplingContext_.push_back({stokesElement, stokesFvGeometry, indices.scvfIdx, indices.flipScvfIdx, faceVelocity, stokesVolVars});
 
 
  254    template<
class LocalAssemblerI>
 
  256                               const LocalAssemblerI& localAssemblerI,
 
  257                               Dune::index_constant<darcyIdx> domainJ,
 
  258                               std::size_t dofIdxGlobalJ,
 
  259                               const PrimaryVariables<darcyIdx>& priVarsJ,
 
  262        this->
curSol(domainJ)[dofIdxGlobalJ][pvIdxJ] = priVarsJ[pvIdxJ];
 
 
  266    template<
class LocalAssemblerI>
 
  268                               const LocalAssemblerI& localAssemblerI,
 
  269                               Dune::index_constant<stokesCellCenterIdx> domainJ,
 
  270                               const std::size_t dofIdxGlobalJ,
 
  271                               const PrimaryVariables<stokesCellCenterIdx>& priVarsJ,
 
  274        this->
curSol(domainJ)[dofIdxGlobalJ] = priVarsJ;
 
  276        for (
auto& data : darcyCouplingContext_)
 
  278            const auto stokesElemIdx = this->
problem(
stokesIdx).gridGeometry().elementMapper().index(data.element);
 
  280            if(stokesElemIdx != dofIdxGlobalJ)
 
  283            using PriVarsType = 
typename VolumeVariables<stokesCellCenterIdx>::PrimaryVariables;
 
  286            for(
const auto& scv : scvs(data.fvGeometry))
 
 
  292    template<
class LocalAssemblerI>
 
  294                               const LocalAssemblerI& localAssemblerI,
 
  295                               Dune::index_constant<stokesFaceIdx> domainJ,
 
  296                               const std::size_t dofIdxGlobalJ,
 
  297                               const PrimaryVariables<stokesFaceIdx>& priVarsJ,
 
  300        this->
curSol(domainJ)[dofIdxGlobalJ] = priVarsJ;
 
  302        for (
auto& data : darcyCouplingContext_)
 
  304            for(
const auto& scvf : scvfs(data.fvGeometry))
 
  306                if(scvf.dofIndex() == dofIdxGlobalJ)
 
  307                    data.velocity[scvf.directionIndex()] = priVarsJ;
 
 
  313    template<std::
size_t i, 
class LocalAssemblerI, std::enable_if_t<(i == stokesCellCenterIdx || i == stokesFaceIdx), 
int> = 0>
 
  315                               const LocalAssemblerI& localAssemblerI,
 
  316                               Dune::index_constant<darcyIdx> domainJ,
 
  317                               const std::size_t dofIdxGlobalJ,
 
  318                               const PrimaryVariables<darcyIdx>& priVarsJ,
 
  321        this->
curSol(domainJ)[dofIdxGlobalJ] = priVarsJ;
 
  323        for (
auto& data : stokesCouplingContext_)
 
  325            const auto darcyElemIdx = this->
problem(
darcyIdx).gridGeometry().elementMapper().index(data.element);
 
  327            if(darcyElemIdx != dofIdxGlobalJ)
 
  332            for(
const auto& scv : scvs(data.fvGeometry))
 
  333                data.volVars.update(darcyElemSol, this->
problem(
darcyIdx), data.element, scv);
 
 
  344        return *couplingData_;
 
 
  350    const auto& 
stokesCouplingContext(
const Element<stokesIdx>& element, 
const SubControlVolumeFace<stokesIdx>& scvf)
 const 
  352        if (stokesCouplingContext_.empty() || boundStokesElemIdx_ != scvf.insideScvIdx())
 
  355        for(
const auto& context : stokesCouplingContext_)
 
  357            if(scvf.index() == context.stokesScvfIdx)
 
  361        DUNE_THROW(Dune::InvalidStateException, 
"No coupling context found at scvf " << scvf.center());
 
 
  367    const auto& 
darcyCouplingContext(
const Element<darcyIdx>& element, 
const SubControlVolumeFace<darcyIdx>& scvf)
 const 
  369        if (darcyCouplingContext_.empty() || boundDarcyElemIdx_ != scvf.insideScvIdx())
 
  372        for(
const auto& context : darcyCouplingContext_)
 
  374            if(scvf.index() == context.darcyScvfIdx)
 
  378        DUNE_THROW(Dune::InvalidStateException, 
"No coupling context found at scvf " << scvf.center());
 
 
  395    const CouplingStencil& 
couplingStencil(Dune::index_constant<stokesCellCenterIdx> domainI,
 
  396                                           const Element<stokesIdx>& elementI,
 
  397                                           Dune::index_constant<darcyIdx> domainJ)
 const 
  399        const auto eIdx = this->
problem(domainI).gridGeometry().elementMapper().index(elementI);
 
  400        if(stokesCellCenterCouplingStencils_.count(eIdx))
 
  401            return stokesCellCenterCouplingStencils_.at(eIdx);
 
  403            return emptyStencil_;
 
 
  414    template<std::
size_t i, std::
size_t j>
 
  416                                           const Element<i>& elementI,
 
  417                                           Dune::index_constant<j> domainJ)
 const 
  418    { 
return emptyStencil_; }
 
 
  429                                           const Element<darcyIdx>& elementI,
 
  430                                           Dune::index_constant<stokesCellCenterIdx> domainJ)
 const 
  432        const auto eIdx = this->
problem(domainI).gridGeometry().elementMapper().index(elementI);
 
  433        if(darcyToStokesCellCenterCouplingStencils_.count(eIdx))
 
  434            return darcyToStokesCellCenterCouplingStencils_.at(eIdx);
 
  436            return emptyStencil_;
 
 
  448                                           const Element<darcyIdx>& elementI,
 
  449                                           Dune::index_constant<stokesFaceIdx> domainJ)
 const 
  451        const auto eIdx = this->
problem(domainI).gridGeometry().elementMapper().index(elementI);
 
  452        if (darcyToStokesFaceCouplingStencils_.count(eIdx))
 
  453            return darcyToStokesFaceCouplingStencils_.at(eIdx);
 
  455            return emptyStencil_;
 
 
  466    template<std::
size_t i, std::
size_t j>
 
  468                                           const SubControlVolumeFace<stokesIdx>& scvfI,
 
  469                                           Dune::index_constant<j> domainJ)
 const 
  470    { 
return emptyStencil_; }
 
 
  480                                           const SubControlVolumeFace<stokesIdx>& scvfI,
 
  481                                           Dune::index_constant<darcyIdx> domainJ)
 const 
  483        const auto faceDofIdx = scvfI.dofIndex();
 
  484        if(stokesFaceCouplingStencils_.count(faceDofIdx))
 
  485            return stokesFaceCouplingStencils_.at(faceDofIdx);
 
  487            return emptyStencil_;
 
 
  495    template<
class IdType>
 
  497    { 
return emptyStencil_; }
 
 
  502    template<
class IdType>
 
  504    { 
return emptyStencil_; }
 
 
  509    bool isCoupledEntity(Dune::index_constant<stokesIdx>, 
const SubControlVolumeFace<stokesFaceIdx>& scvf)
 const 
  511        return stokesFaceCouplingStencils_.count(scvf.dofIndex());
 
 
  517    bool isCoupledEntity(Dune::index_constant<darcyIdx>, 
const SubControlVolumeFace<darcyIdx>& scvf)
 const 
  519        return couplingMapper_.isCoupledDarcyScvf(scvf.index());
 
 
  526    { 
return emptyStencil_; }
 
 
  530        std::sort(stencil.begin(), stencil.end());
 
  531        stencil.erase(std::unique(stencil.begin(), stencil.end()), stencil.end());
 
 
  536    std::vector<bool> isCoupledDarcyDof_;
 
  537    std::shared_ptr<CouplingData> couplingData_;
 
  539    std::unordered_map<std::size_t, std::vector<std::size_t> > stokesCellCenterCouplingStencils_;
 
  540    std::unordered_map<std::size_t, std::vector<std::size_t> > stokesFaceCouplingStencils_;
 
  541    std::unordered_map<std::size_t, std::vector<std::size_t> > darcyToStokesCellCenterCouplingStencils_;
 
  542    std::unordered_map<std::size_t, std::vector<std::size_t> > darcyToStokesFaceCouplingStencils_;
 
  543    std::vector<std::size_t> emptyStencil_;
 
  548    mutable std::vector<StationaryStokesCouplingContext> stokesCouplingContext_;
 
  549    mutable std::vector<StationaryDarcyCouplingContext> darcyCouplingContext_;
 
  551    mutable std::size_t boundStokesElemIdx_;
 
  552    mutable std::size_t boundDarcyElemIdx_;
 
  554    CouplingMapper couplingMapper_;
 
 
Coupling mapper for Stokes and Darcy domains with equal dimension.
void setSubProblems(const std::tuple< std::shared_ptr< SubProblems >... > &problems)
Definition multidomain/couplingmanager.hh:275
const Problem< i > & problem(Dune::index_constant< i > domainIdx) const
Definition multidomain/couplingmanager.hh:297
SubSolutionVector< i > & curSol(Dune::index_constant< i > domainIdx)
Definition multidomain/couplingmanager.hh:326
void updateSolution(const SolutionVector &curSol)
Definition multidomain/couplingmanager.hh:207
Base coupling manager for the staggered discretization.
Definition staggeredcouplingmanager.hh:32
decltype(auto) evalCouplingResidual(Dune::index_constant< cellCenterIdx > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, std::size_t dofIdxGlobalJ) const
evaluates the element residual of a coupled element of domain i which depends on the variables at the...
Definition staggeredcouplingmanager.hh:139
const CouplingStencil & couplingStencil(Dune::index_constant< i > domainI, const SubControlVolumeFace< stokesIdx > &scvfI, Dune::index_constant< j > domainJ) const
Return the dof indices of a subdomain that influence the residual of a sub-control volume face of the...
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:467
void computeStencils()
Prepare the coupling stencils.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:135
const CouplingStencil & couplingStencil(Dune::index_constant< darcyIdx > domainI, const Element< darcyIdx > &elementI, Dune::index_constant< stokesCellCenterIdx > domainJ) const
Return the Stokes cell indices that influence the residual of an element in the Darcy domain.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:428
void bindCouplingContext(Dune::index_constant< i > domainI, const Element< stokesCellCenterIdx > &element) const
prepares all data and variables that are necessary to evaluate the residual of an Darcy element (i....
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:171
StokesDarcyCouplingData< MDTraits, StokesDarcyCouplingManager< MDTraits > > CouplingData
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:106
void updateCouplingContext(Dune::index_constant< darcyIdx > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< stokesFaceIdx > domainJ, const std::size_t dofIdxGlobalJ, const PrimaryVariables< stokesFaceIdx > &priVarsJ, int pvIdxJ)
updates all data and variables that are necessary to evaluate the residual of the element of domain i...
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:293
void updateCouplingContext(Dune::index_constant< darcyIdx > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< darcyIdx > domainJ, std::size_t dofIdxGlobalJ, const PrimaryVariables< darcyIdx > &priVarsJ, int pvIdxJ)
updates all data and variables that are necessary to evaluate the residual of the element of domain i...
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:255
const CouplingStencil & couplingStencil(Dune::index_constant< stokesCellCenterIdx > domainI, const Element< stokesIdx > &elementI, Dune::index_constant< darcyIdx > domainJ) const
The Stokes cell center coupling stencil w.r.t. Darcy DOFs.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:395
std::vector< std::size_t > & emptyStencil()
Return a reference to an empty stencil.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:525
const std::vector< std::size_t > & getAdditionalDofDependencies(IdType id, std::size_t stokesElementIdx) const
There are no additional dof dependencies.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:496
static constexpr auto darcyIdx
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:46
const auto & stokesCouplingContext(const Element< stokesIdx > &element, const SubControlVolumeFace< stokesIdx > &scvf) const
Access the coupling context needed for the Stokes domain.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:350
StokesDarcyCouplingManager(std::shared_ptr< const GridGeometry< stokesIdx > > stokesFvGridGeometry, std::shared_ptr< const GridGeometry< darcyIdx > > darcyFvGridGeometry)
Constructor.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:109
void bindCouplingContext(Dune::index_constant< darcyIdx > domainI, const Element< darcyIdx > &element) const
prepares all data and variables that are necessary to evaluate the residual of an Darcy element (i....
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:210
void updateCouplingContext(Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< darcyIdx > domainJ, const std::size_t dofIdxGlobalJ, const PrimaryVariables< darcyIdx > &priVarsJ, int pvIdxJ)
updates all data and variables that are necessary to evaluate the residual of the element of domain i...
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:314
const auto & darcyCouplingContext(const Element< darcyIdx > &element, const SubControlVolumeFace< darcyIdx > &scvf) const
Access the coupling context needed for the Darcy domain.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:367
void removeDuplicates_(std::vector< std::size_t > &stencil)
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:528
void init(std::shared_ptr< const Problem< stokesIdx > > stokesProblem, std::shared_ptr< const Problem< darcyIdx > > darcyProblem, const SolutionVector &curSol)
Methods to be accessed by main.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:119
const auto & couplingData() const
Access the coupling data.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:342
void updateCouplingContext(Dune::index_constant< darcyIdx > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< stokesCellCenterIdx > domainJ, const std::size_t dofIdxGlobalJ, const PrimaryVariables< stokesCellCenterIdx > &priVarsJ, int pvIdxJ)
updates all data and variables that are necessary to evaluate the residual of the element of domain i...
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:267
const CouplingStencil & couplingStencil(Dune::index_constant< darcyIdx > domainI, const Element< darcyIdx > &elementI, Dune::index_constant< stokesFaceIdx > domainJ) const
Return the Stokes face indices that influence the residual of an element in the Darcy domain.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:447
bool isCoupledEntity(Dune::index_constant< stokesIdx >, const SubControlVolumeFace< stokesFaceIdx > &scvf) const
Returns whether a given free flow scvf is coupled to the other domain.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:509
void bindCouplingContext(Dune::index_constant< darcyIdx > domainI, const Element< darcyIdx > &element, const Assembler &assembler) const
prepares all data and variables that are necessary to evaluate the residual of an Darcy element (i....
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:204
static constexpr auto stokesCellCenterIdx
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:44
const std::vector< std::size_t > & getAdditionalDofDependenciesInverse(IdType id, std::size_t darcyElementIdx) const
There are no additional dof dependencies.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:503
void bindCouplingContext(Dune::index_constant< i > domainI, const Element< stokesCellCenterIdx > &element, const Assembler &assembler) const
prepares all data and variables that are necessary to evaluate the residual of an Darcy element (i....
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:164
bool isCoupledEntity(Dune::index_constant< darcyIdx >, const SubControlVolumeFace< darcyIdx > &scvf) const
Returns whether a given free flow scvf is coupled to the other domain.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:517
static constexpr auto stokesFaceIdx
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:43
static constexpr auto stokesIdx
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:45
const CouplingStencil & couplingStencil(Dune::index_constant< i > domainI, const Element< i > &elementI, Dune::index_constant< j > domainJ) const
The coupling stencil of domain I, i.e. which domain J DOFs the given domain I element's residual depe...
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:415
const CouplingStencil & couplingStencil(Dune::index_constant< stokesFaceIdx > domainI, const SubControlVolumeFace< stokesIdx > &scvfI, Dune::index_constant< darcyIdx > domainJ) const
The coupling stencil of a Stokes face w.r.t. Darcy DOFs.
Definition multidomain/boundary/stokesdarcy/couplingmanager.hh:479
Coupling mapper for Stokes and Darcy domains with equal dimension.
Definition boundary/stokesdarcy/couplingmapper.hh:30
Defines all properties used in Dumux.
Data for the coupling of a Darcy model (cell-centered finite volume) with a (Navier-)Stokes model (st...
typename NumEqVectorTraits< PrimaryVariables >::type NumEqVector
A vector with the same size as numbers of equations This is the default implementation and has to be ...
Definition numeqvector.hh:34
GridCache::LocalView localView(const GridCache &gridCache)
Free function to get the local view of a grid cache object.
Definition localview.hh:26
StaggeredElementSolution< PrimaryVariables > makeElementSolutionFromCellCenterPrivars(const CellCenterPrimaryVariables &cellCenterPriVars)
Helper function to create an elementSolution from cell center primary variables.
Definition staggered/elementsolution.hh:65
auto elementSolution(const Element &element, const SolutionVector &sol, const GridGeometry &gg) -> std::enable_if_t< GridGeometry::discMethod==DiscretizationMethods::cctpfa||GridGeometry::discMethod==DiscretizationMethods::ccmpfa, CCElementSolution< typename GridGeometry::LocalView, std::decay_t< decltype(std::declval< SolutionVector >()[0])> > >
Make an element solution for cell-centered schemes.
Definition cellcentered/elementsolution.hh:101
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition propertysystem.hh:296
StokesDarcyCouplingDataImplementation< MDTraits, CouplingManager, GetPropType< typename MDTraits::template SubDomain< 0 >::TypeTag, Properties::ModelTraits >::enableEnergyBalance(),(GetPropType< typename MDTraits::template SubDomain< 0 >::TypeTag, Properties::ModelTraits >::numFluidComponents() > 1)> StokesDarcyCouplingData
Data for the coupling of a Darcy model (cell-centered finite volume) with a (Navier-)Stokes model (st...
Definition couplingdata.hh:202
A helper to deduce a vector with the same size as numbers of equations.
The local element solution class for staggered methods.
The interface of the coupling manager for multi domain problems.