Coupling manager for Stokes and Darcy domains with equal dimension.
#include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh>
Public Types | |
using | CouplingData = StokesDarcyCouplingData< MDTraits, StokesDarcyCouplingManager< MDTraits > > |
using | Traits = MDTraits |
using | CouplingStencilType = std::vector< std::size_t > |
default type used for coupling element stencils More... | |
Public Member Functions | |
StokesDarcyCouplingManager (std::shared_ptr< const GridGeometry< stokesIdx > > stokesFvGridGeometry, std::shared_ptr< const GridGeometry< darcyIdx > > darcyFvGridGeometry) | |
Constructor. More... | |
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. More... | |
void | computeStencils () |
Prepare the coupling stencils. More... | |
template<std::size_t i, class Assembler , std::enable_if_t<(i==stokesCellCenterIdx||i==stokesFaceIdx), int > = 0> | |
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.e. Darcy information) More... | |
template<std::size_t i, std::enable_if_t<(i==stokesCellCenterIdx||i==stokesFaceIdx), int > = 0> | |
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.e. Darcy information) More... | |
template<class Assembler > | |
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.e. Stokes information) More... | |
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.e. Stokes information) More... | |
template<class LocalAssemblerI > | |
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 this is called whenever one of the primary variables that the element residual depends on changes in domain j More... | |
template<class LocalAssemblerI > | |
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 this is called whenever one of the primary variables that the element residual depends on changes in domain j More... | |
template<class LocalAssemblerI > | |
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 this is called whenever one of the primary variables that the element residual depends on changes in domain j More... | |
template<std::size_t i, class LocalAssemblerI , std::enable_if_t<(i==stokesCellCenterIdx||i==stokesFaceIdx), int > = 0> | |
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 this is called whenever one of the primary variables that the element residual depends on changes in domain j More... | |
const auto & | couplingData () const |
Access the coupling data. More... | |
const auto & | stokesCouplingContext (const Element< stokesIdx > &element, const SubControlVolumeFace< stokesIdx > &scvf) const |
Access the coupling context needed for the Stokes domain. More... | |
const auto & | darcyCouplingContext (const Element< darcyIdx > &element, const SubControlVolumeFace< darcyIdx > &scvf) const |
Access the coupling context needed for the Darcy domain. More... | |
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. More... | |
template<std::size_t i, std::size_t j> | |
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 depends on. More... | |
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. More... | |
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. More... | |
template<std::size_t i, std::size_t j> | |
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 Stokes domain. More... | |
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. More... | |
template<class IdType > | |
const std::vector< std::size_t > & | getAdditionalDofDependencies (IdType id, std::size_t stokesElementIdx) const |
There are no additional dof dependencies. More... | |
template<class IdType > | |
const std::vector< std::size_t > & | getAdditionalDofDependenciesInverse (IdType id, std::size_t darcyElementIdx) const |
There are no additional dof dependencies. More... | |
bool | isCoupledEntity (Dune::index_constant< stokesIdx >, const SubControlVolumeFace< stokesFaceIdx > &scvf) const |
Returns whether a given free flow scvf is coupled to the other domain. More... | |
bool | isCoupledEntity (Dune::index_constant< darcyIdx >, const SubControlVolumeFace< darcyIdx > &scvf) const |
Returns whether a given free flow scvf is coupled to the other domain. More... | |
template<class LocalAssemblerI , std::size_t j> | |
decltype(auto) | evalCouplingResidual (Dune::index_constant< cellCenterIdx > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, std::size_t dofIdxGlobalJ) const |
Methods to be accessed by the assembly. More... | |
template<class LocalAssemblerI , std::size_t j> | |
decltype(auto) | evalCouplingResidual (Dune::index_constant< faceIdx > domainI, const SubControlVolumeFace &scvfI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, std::size_t dofIdxGlobalJ) const |
Methods to be accessed by the assembly. More... | |
template<std::size_t i, std::size_t j, class LocalAssemblerI , class PriVarsJ > | |
void | updateCouplingContext (Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, const std::size_t dofIdxGlobalJ, const PriVarsJ &priVarsJ, int pvIdxJ) |
updates all data and variables that are necessary to evaluate the residual of the element of domain i this is called whenever one of the primary variables that the element residual depends on changes in domain j More... | |
const CouplingStencil & | couplingStencil (Dune::index_constant< cellCenterIdx > domainI, const Element &elementI, Dune::index_constant< faceIdx > domainJ) const |
returns an iterable container of all indices of degrees of freedom of domain j that couple with / influence the element residual of the given element of domain i More... | |
template<std::size_t i, std::size_t j> | |
const CouplingStencil | couplingStencil (Dune::index_constant< i > domainI, const SubControlVolumeFace &scvfI, 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 subcontrolvolume face of domain i More... | |
const CouplingStencil & | couplingStencil (Dune::index_constant< faceIdx > domainI, const SubControlVolumeFace &scvfI, Dune::index_constant< cellCenterIdx > 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 subcontrolvolume face of domain i More... | |
template<std::size_t i, typename std::enable_if_t<(GridGeometry< i >::discMethod !=DiscretizationMethods::staggered), int > = 0> | |
decltype(auto) | numericEpsilon (Dune::index_constant< i > id, const std::string ¶mGroup) const |
return the numeric epsilon used for deflecting primary variables of coupled domain i. More... | |
template<std::size_t i, typename std::enable_if_t<(GridGeometry< i >::discMethod==DiscretizationMethods::staggered), int > = 0> | |
decltype(auto) | numericEpsilon (Dune::index_constant< i >, const std::string ¶mGroup) const |
return the numeric epsilon used for deflecting primary variables of coupled domain i. More... | |
member functions concerning the coupling stencils | |
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... | |
Static Public Attributes | |
static constexpr auto | stokesFaceIdx = typename MDTraits::template SubDomain<0>::Index() |
static constexpr auto | stokesCellCenterIdx = typename MDTraits::template SubDomain<1>::Index() |
static constexpr auto | stokesIdx = stokesFaceIdx |
static constexpr auto | darcyIdx = typename MDTraits::template SubDomain<2>::Index() |
static constexpr auto | cellCenterIdx = GridGeometry<0>::cellCenterIdx() |
static constexpr auto | faceIdx = GridGeometry<0>::faceIdx() |
Protected Types | |
using | SolutionVectorStorage = typename Traits::template TupleOfSharedPtr< SubSolutionVector > |
the type in which the solution vector is stored in the manager More... | |
Protected Member Functions | |
std::vector< std::size_t > & | emptyStencil () |
Return a reference to an empty stencil. More... | |
void | removeDuplicates_ (std::vector< std::size_t > &stencil) |
member functions concerning variable caching for element residual evaluations | |
void | updateCouplingContext (Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, std::size_t dofIdxGlobalJ, const PrimaryVariables< j > &priVarsJ, int pvIdxJ) |
updates all data and variables that are necessary to evaluate the residual of the element of domain i this is called whenever one of the primary variables that the element residual depends on changes in domain j More... | |
decltype(auto) | evalCouplingResidual (Dune::index_constant< i > 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 degree of freedom with index dofIdxGlobalJ of domain j More... | |
void | bindCouplingContext (Dune::index_constant< i > domainI, const Element< i > &elementI, const Assembler &assembler) |
prepares all data and variables that are necessary to evaluate the residual of the element of domain i More... | |
void | updateCoupledVariables (Dune::index_constant< i > domainI, const LocalAssemblerI &localAssemblerI, UpdatableElementVolVars &elemVolVars, UpdatableFluxVarCache &elemFluxVarsCache) |
update variables of domain i that depend on variables in domain j after the coupling context has been updated More... | |
void | updateSolution (const SolutionVector &curSol) |
Updates the entire solution vector, e.g. before assembly or after grid adaption Overload might want to overload function if the solution vector is stored outside this class to make sure updates don't happen more than once. 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 | setSubProblems (const std::tuple< std::shared_ptr< SubProblems >... > &problems) |
set the pointers to the sub problems More... | |
void | setSubProblem (std::shared_ptr< SubProblem > problem, Dune::index_constant< i > domainIdx) |
set a pointer to one of the sub problems More... | |
const Problem< i > & | problem (Dune::index_constant< i > domainIdx) const |
Return a reference to the sub problem. More... | |
void | attachSolution (const SolutionVectorStorage &curSol) |
Attach a solution vector stored outside of this class. More... | |
SubSolutionVector< i > & | curSol (Dune::index_constant< i > domainIdx) |
the solution vector of the subproblem More... | |
const SubSolutionVector< i > & | curSol (Dune::index_constant< i > domainIdx) const |
the solution vector of the subproblem More... | |
using Dumux::StokesDarcyCouplingManager< MDTraits >::CouplingData = StokesDarcyCouplingData<MDTraits, StokesDarcyCouplingManager<MDTraits> > |
|
inherited |
|
protectedinherited |
|
inherited |
|
inline |
|
inlineprotectedinherited |
|
inline |
|
inline |
|
inlineinherited |
domainI | the domain index of domain i |
elementI | the element whose residual we are assemling next |
assembler | the multidomain assembler for access to all data necessary for the assembly of all domains |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineinherited |
domainI | the domain index of domain i |
elementI | the coupled element of domain í |
domainJ | the domain index of domain j |
|
inline |
domainI | The darcy domain index. |
elementI | The element in the Darcy domain. |
domainJ | the domain index of the Stokes domain |
|
inline |
domainI | The darcy domain index. |
elementI | The element in the Darcy domain. |
domainJ | the domain index of the Stokes domain |
|
inlineinherited |
domainI | the domain index of domain i |
scvfI | the coupled subcontrolvolume face of domain í |
domainJ | the domain index of domain j |
|
inline |
domainI | the index of the domain in which the given element lives. |
elementI | the coupled element of domainI |
domainJ | the domain index of the coupled domain |
|
inlineinherited |
domainI | the domain index of domain i |
scvfI | the coupled subcontrolvolume face of domain í |
domainJ | the domain index of domain j |
|
inline |
domainI | the index of the domain in which the given element lives. |
scvfI | the coupled sub-control volume face of the Stokes domain |
domainJ | the domain index of the coupled domain |
|
inline |
domainI | The Stokes domain index. |
elementI | The Sokes domain element. |
domainJ | The Darcy domain index. |
|
inline |
domainI | the index of the Stokes domain |
scvfI | the coupled subcontrolvolume face of the Stokes domain |
domainJ | the index of the Darcy domain |
|
inlineprotectedinherited |
domainIdx | The domain index |
|
inlineprotectedinherited |
domainIdx | The domain index |
|
inline |
|
inlineprotected |
|
inlineinherited |
|
inline |
|
inline |
|
inlineinherited |
domainI | the domain index of domain i |
localAssemblerI | the local assembler assembling the element residual of an element of domain i |
domainJ | the domain index of domain j |
dofIdxGlobalJ | the index of the degree of freedom of domain j which has an influence on the element residual of domain i |
|
inlineinherited |
|
inline |
|
inline |
|
inline |
Initialize the coupling manager
|
inline |
|
inline |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
domainIdx | The domain index We avoid exception handling here because the performance of this function is critical |
|
inlineprotected |
|
inlineinherited |
problem | a pointer to the sub problem |
domainIdx | the domain index of the sub problem |
|
inlineinherited |
problems | A tuple of shared pointers to the sub problems |
|
inline |
|
inlineinherited |
domainI | the index of domain i |
localAssemblerI | the local assembler assembling the element residual of an element of domain i |
elemVolVars | the element volume variables (all volume variables in the element local stencil) to be updated |
elemFluxVarsCache | the element flux variable cache (all flux variables in the element local stencil) to be updated |
|
inline |
domainI | the domain index of domain i |
localAssemblerI | the local assembler assembling the element residual of an element of domain i |
domainJ | the domain index of domain j |
dofIdxGlobalJ | the index of the degree of freedom of domain j whose solution changed |
priVarsJ | the new solution at the degree of freedom of domain j with index dofIdxGlobalJ |
pvIdxJ | the index of the primary variable of domain j which has been updated |
|
inline |
domainI | the domain index of domain i |
localAssemblerI | the local assembler assembling the element residual of an element of domain i |
domainJ | the domain index of domain j |
dofIdxGlobalJ | the index of the degree of freedom of domain j whose solution changed |
priVarsJ | the new solution at the degree of freedom of domain j with index dofIdxGlobalJ |
pvIdxJ | the index of the primary variable of domain j which has been updated |
|
inline |
domainI | the domain index of domain i |
localAssemblerI | the local assembler assembling the element residual of an element of domain i |
domainJ | the domain index of domain j |
dofIdxGlobalJ | the index of the degree of freedom of domain j whose solution changed |
priVarsJ | the new solution at the degree of freedom of domain j with index dofIdxGlobalJ |
pvIdxJ | the index of the primary variable of domain j which has been updated |
|
inline |
domainI | the domain index of domain i |
localAssemblerI | the local assembler assembling the element residual of an element of domain i |
domainJ | the domain index of domain j |
dofIdxGlobalJ | the index of the degree of freedom of domain j whose solution changed |
priVarsJ | the new solution at the degree of freedom of domain j with index dofIdxGlobalJ |
pvIdxJ | the index of the primary variable of domain j which has been updated |
|
inlineinherited |
domainI | the domain index of domain i |
localAssemblerI | the local assembler assembling the element residual of an element of domain i |
domainJ | the domain index of domain j |
dofIdxGlobalJ | the index of the degree of freedom of domain j whose solution changed |
priVarsJ | the new solution at the degree of freedom of domain j with index dofIdxGlobalJ |
pvIdxJ | the index of the primary variable of domain j which has been updated |
|
inlineinherited |
domainI | the domain index of domain i |
localAssemblerI | the local assembler assembling the element residual of an element of domain i |
domainJ | the domain index of domain j |
dofIdxGlobalJ | the index of the degree of freedom of domain j whose solution changed |
priVarsJ | the new solution at the degree of freedom of domain j with index dofIdxGlobalJ |
pvIdxJ | the index of the primary variable of domain j which has been updated |
|
inlineinherited |
|
staticconstexprinherited |
|
staticconstexpr |
|
staticconstexprinherited |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |