version 3.9-dev
Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits > Class Template Reference

Base coupling manager for coupling freeflow and porous medium flow models.

#include <dumux/multidomain/boundary/freeflowporousmedium/couplingmanager_base.hh>

Inheritance diagram for Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >:

Public Types

template<std::size_t i, std::size_t j>
using SubCouplingManager = typename ParentType::template SubCouplingManager< i, j >
 

Public Member Functions

template<class GridVarsTuple >
void init (std::shared_ptr< Problem< freeFlowMomentumIndex > > freeFlowMomentumProblem, std::shared_ptr< Problem< freeFlowMassIndex > > freeFlowMassProblem, std::shared_ptr< Problem< porousMediumIndex > > porousMediumProblem, GridVarsTuple &&gridVarsTuple, const SolutionVector &curSol)
 
template<std::size_t i>
const Problem< i > & problem (Dune::index_constant< i > domainI) const
 
template<std::size_t i, std::size_t j>
bool isCoupled (Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ, const SubControlVolumeFace< i > &scvf) const
 
template<std::size_t i, std::size_t j>
bool isCoupled (Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ, const SubControlVolume< i > &scv) const
 If the boundary entity is on a coupling boundary. More...
 
template<std::size_t j>
const auto & couplingStencil (Dune::index_constant< freeFlowMomentumIndex > domainI, const Element< freeFlowMomentumIndex > &elementI, const SubControlVolume< freeFlowMomentumIndex > &scvI, Dune::index_constant< j > domainJ) const
 returns an iterable container of all indices of degrees of freedom of domain j that couple with / influence the residual of the given sub-control volume of domain i More...
 
template<std::size_t i, class Entity , std::size_t j>
const auto & couplingStencil (Dune::index_constant< i > domainI, const Entity &entity, Dune::index_constant< j > domainJ) const
 Return the coupling element stencil for a given bulk domain element. More...
 
auto & subCouplingManager (Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ)
 return the binary sub-coupling manager More...
 
const auto & subCouplingManager (Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ) const
 return the binary sub-coupling manager More...
 
decltype(auto) subApply (Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ, Apply &&apply)
 apply a function to the domainI-domainJ sub coupling manager using its local indices More...
 
decltype(auto) subApply (Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ, const Apply &apply) const
 apply a function to the domainI-domainJ sub coupling manager using its local indices More...
 
decltype(auto) subApply (Dune::index_constant< i > domainI, Apply &&apply)
 apply a function to a sub coupling manager containing this domain More...
 
decltype(auto) subApply (Dune::index_constant< i > domainI, const Apply &apply) const
 apply a function to a sub coupling manager containing this domain More...
 
void updateSolution (const typename MDTraits::SolutionVector &curSol)
 Update the solution vector before assembly. More...
 
void extendJacobianPattern (Dune::index_constant< id > domainI, JacobianPattern &pattern) const
 extend the jacobian pattern of the diagonal block of domain i by those entries that are not already in the uncoupled pattern More...
 
decltype(auto) evalCouplingResidual (Dune::index_constant< i > domainI, const SubControlVolumeFace< i > &scvfI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, std::size_t dofIdxGlobalJ) const
 
decltype(auto) evalCouplingResidual (Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, std::size_t dofIdxGlobalJ) const
 
decltype(auto) evalCouplingResidual (Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, const SubControlVolume< i > &scvI, Dune::index_constant< j > domainJ, std::size_t dofIdxGlobalJ) const
 
void updateCouplingContext (Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, const std::size_t dofIdxGlobalJ, const PrimaryVariables &priVars, int pvIdxJ)
 Update the coupling context for the bulk face residual w.r.t to the lowDim dofs. More...
 
void bindCouplingContext (Dune::index_constant< i > domainI, const Element< i > &element, const Assembler &assembler=0)
 Bind the coupling context for a low dim element TODO remove Assembler. More...
 
decltype(auto) numericEpsilon (Dune::index_constant< i > domainI, const std::string &paramGroup) const
 return the numeric epsilon used for deflecting primary variables of coupled domain i. More...
 
void evalAdditionalDomainDerivatives (Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, const typename LocalAssemblerI::LocalResidual::ElementResidualVector &origResiduals, JacobianMatrixDiagBlock &A, GridVariables &gridVariables)
 evaluate additional derivatives of the element residual of a domain with respect to dofs in the same domain that are not in the regular stencil (see CouplingManager::extendJacobianPattern) More...
 
void updateCoupledVariables (Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, UpdatableElementVolVars &elemVolVars, UpdatableFluxVarCache &elemFluxVarsCache)
 

Static Public Attributes

static constexpr auto freeFlowMomentumIndex = FreeFlowPorousMediumDetail::freeFlowMomentumIndex
 
static constexpr auto freeFlowMassIndex = FreeFlowPorousMediumDetail::freeFlowMassIndex
 
static constexpr auto porousMediumIndex = FreeFlowPorousMediumDetail::porousMediumIndex
 

Protected Member Functions

SolutionVectors & curSol ()
 
const SolutionVectors & curSol () const
 

Member Typedef Documentation

◆ SubCouplingManager

template<class MDTraits >
template<std::size_t i, std::size_t j>
using Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::SubCouplingManager = typename ParentType::template SubCouplingManager<i, j>

Member Function Documentation

◆ bindCouplingContext()

void Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::bindCouplingContext ( Dune::index_constant< i >  domainI,
const Element< i > &  element,
const Assembler &  assembler = 0 
)
inlineinherited

◆ couplingStencil() [1/2]

template<class MDTraits >
template<std::size_t j>
const auto & Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::couplingStencil ( Dune::index_constant< freeFlowMomentumIndex domainI,
const Element< freeFlowMomentumIndex > &  elementI,
const SubControlVolume< freeFlowMomentumIndex > &  scvI,
Dune::index_constant< j >  domainJ 
) const
inline
Parameters
domainIthe domain index of domain i
elementIthe coupled element of domain í
scvIthe sub-control volume of domain i
domainJthe domain index of domain j

◆ couplingStencil() [2/2]

template<class MDTraits >
template<std::size_t i, class Entity , std::size_t j>
const auto & Dumux::MultiBinaryCouplingManager< MDTraits, CouplingMap, CouplingMgrs >::couplingStencil ( Dune::index_constant< i >  domainI,
const Entity &  entity,
Dune::index_constant< j >  domainJ 
) const
inline

◆ curSol() [1/2]

SolutionVectors & Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::curSol ( )
inlineprotectedinherited

◆ curSol() [2/2]

const SolutionVectors & Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::curSol ( ) const
inlineprotectedinherited

◆ evalAdditionalDomainDerivatives()

void Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::evalAdditionalDomainDerivatives ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
const typename LocalAssemblerI::LocalResidual::ElementResidualVector &  origResiduals,
JacobianMatrixDiagBlock &  A,
GridVariables &  gridVariables 
)
inlineinherited
Note
Such additional dependencies can arise from the coupling, e.g. if a coupling source term depends on a non-local average of a quantity of the same domain

◆ evalCouplingResidual() [1/3]

decltype(auto) Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::evalCouplingResidual ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
const SubControlVolume< i > &  scvI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ 
) const
inlineinherited

evaluate coupling residual for the derivative low dim DOF with respect to bulk DOF we only need to evaluate the part of the residual that will be influence by the bulk DOF

◆ evalCouplingResidual() [2/3]

decltype(auto) Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::evalCouplingResidual ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ 
) const
inlineinherited

evaluate coupling residual for the derivative low dim DOF with respect to bulk DOF we only need to evaluate the part of the residual that will be influence by the bulk DOF

◆ evalCouplingResidual() [3/3]

decltype(auto) Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::evalCouplingResidual ( Dune::index_constant< i >  domainI,
const SubControlVolumeFace< i > &  scvfI,
const LocalAssemblerI &  localAssemblerI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ 
) const
inlineinherited

◆ extendJacobianPattern()

void Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::extendJacobianPattern ( Dune::index_constant< id >  domainI,
JacobianPattern &  pattern 
) const
inlineinherited
Note
per default we do not add such additional dependencies
Such additional dependencies can arise from the coupling, e.g. if a coupling source term depends on a non-local average of a quantity of the same domain
Warning
if you overload this also implement evalAdditionalDomainDerivatives

◆ init()

template<class MDTraits >
template<class GridVarsTuple >
void Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::init ( std::shared_ptr< Problem< freeFlowMomentumIndex > >  freeFlowMomentumProblem,
std::shared_ptr< Problem< freeFlowMassIndex > >  freeFlowMassProblem,
std::shared_ptr< Problem< porousMediumIndex > >  porousMediumProblem,
GridVarsTuple &&  gridVarsTuple,
const SolutionVector &  curSol 
)
inline

◆ isCoupled() [1/2]

template<class MDTraits >
template<std::size_t i, std::size_t j>
bool Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::isCoupled ( Dune::index_constant< i >  domainI,
Dune::index_constant< j >  domainJ,
const SubControlVolume< i > &  scv 
) const
inline
Parameters
domainIthe domain index of domain i for which to compute the flux
domainJthe domain index of domain j for which to compute the flux
scvthe sub control volume

◆ isCoupled() [2/2]

template<class MDTraits >
template<std::size_t i, std::size_t j>
bool Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::isCoupled ( Dune::index_constant< i >  domainI,
Dune::index_constant< j >  domainJ,
const SubControlVolumeFace< i > &  scvf 
) const
inline

◆ numericEpsilon()

decltype(auto) Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::numericEpsilon ( Dune::index_constant< i >  domainI,
const std::string &  paramGroup 
) const
inlineinherited
Note
specialization for free-flow schemes

◆ problem()

template<class MDTraits >
template<std::size_t i>
const Problem< i > & Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::problem ( Dune::index_constant< i >  domainI) const
inline

◆ subApply() [1/4]

decltype(auto) Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::subApply ( Dune::index_constant< i >  domainI,
Apply &&  apply 
)
inlineinherited

◆ subApply() [2/4]

decltype(auto) Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::subApply ( Dune::index_constant< i >  domainI,
const Apply &  apply 
) const
inlineinherited

◆ subApply() [3/4]

decltype(auto) Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::subApply ( Dune::index_constant< i >  domainI,
Dune::index_constant< j >  domainJ,
Apply &&  apply 
)
inlineinherited

◆ subApply() [4/4]

decltype(auto) Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::subApply ( Dune::index_constant< i >  domainI,
Dune::index_constant< j >  domainJ,
const Apply &  apply 
) const
inlineinherited

◆ subCouplingManager() [1/2]

auto & Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::subCouplingManager ( Dune::index_constant< i >  domainI,
Dune::index_constant< j >  domainJ 
)
inlineinherited

◆ subCouplingManager() [2/2]

const auto & Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::subCouplingManager ( Dune::index_constant< i >  domainI,
Dune::index_constant< j >  domainJ 
) const
inlineinherited

◆ updateCoupledVariables()

void Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::updateCoupledVariables ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
UpdatableElementVolVars &  elemVolVars,
UpdatableFluxVarCache &  elemFluxVarsCache 
)
inlineinherited

◆ updateCouplingContext()

void Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::updateCouplingContext ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
Dune::index_constant< j >  domainJ,
const std::size_t  dofIdxGlobalJ,
const PrimaryVariables &  priVars,
int  pvIdxJ 
)
inlineinherited

◆ updateSolution()

void Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps , CouplingMgrs >::updateSolution ( const typename MDTraits::SolutionVector &  curSol)
inlineinherited

Member Data Documentation

◆ freeFlowMassIndex

template<class MDTraits >
constexpr auto Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::freeFlowMassIndex = FreeFlowPorousMediumDetail::freeFlowMassIndex
staticconstexpr

◆ freeFlowMomentumIndex

template<class MDTraits >
constexpr auto Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::freeFlowMomentumIndex = FreeFlowPorousMediumDetail::freeFlowMomentumIndex
staticconstexpr

◆ porousMediumIndex

template<class MDTraits >
constexpr auto Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::porousMediumIndex = FreeFlowPorousMediumDetail::porousMediumIndex
staticconstexpr

The documentation for this class was generated from the following file: