version 3.10.0
Loading...
Searching...
No Matches
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<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, const SolutionVector &prevSol)
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.
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
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.
auto & subCouplingManager (Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ)
 return the binary sub-coupling manager
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
void updateSolution (const typename MDTraits::SolutionVector &curSol)
 Update the solution vector before assembly.
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
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
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.
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.
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.
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)
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 ()

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()

SolutionVectors & Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps, CouplingMgrs >::curSol ( )
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()

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() [1/2]

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

◆ init() [2/2]

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,
const SolutionVector & prevSol )
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()

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

◆ subCouplingManager()

auto & Dumux::MultiBinaryCouplingManager< MDTraits, FreeFlowPorousMediumDetail::CouplingMaps, CouplingMgrs >::subCouplingManager ( Dune::index_constant< i > domainI,
Dune::index_constant< j > domainJ )
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>
auto Dumux::FreeFlowPorousMediumCouplingManagerBase< MDTraits >::freeFlowMassIndex = FreeFlowPorousMediumDetail::freeFlowMassIndex
staticconstexpr

◆ freeFlowMomentumIndex

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

◆ porousMediumIndex

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

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