version 3.10.0
Loading...
Searching...
No Matches
Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits > Class Template Reference

Coupling manager for coupling freeflow and porous medium flow models specialization for staggered-cctpfa coupling.

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

Inheritance diagram for Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >:

Public Types

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

Public Member Functions

template<std::size_t i, std::size_t j>
auto massCouplingCondition (Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ, const FVElementGeometry< i > &fvGeometry, const typename FVElementGeometry< i >::SubControlVolumeFace &scvf, const ElementVolumeVariables< i > &elemVolVars) const
 Returns the mass flux across the coupling boundary.
NumEqVector< freeFlowMomentumIndexmomentumCouplingCondition (Dune::index_constant< freeFlowMomentumIndex > domainI, Dune::index_constant< porousMediumIndex > domainJ, const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const typename FVElementGeometry< freeFlowMomentumIndex >::SubControlVolumeFace &scvf, const ElementVolumeVariables< freeFlowMomentumIndex > &elemVolVars) const
auto darcyPermeability (const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const SubControlVolumeFace< freeFlowMomentumIndex > &scvf) const
 Returns the intrinsic permeability of the coupled Darcy element.
Scalar pressure (const Element< freeFlowMomentumIndex > &element, const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const SubControlVolumeFace< freeFlowMomentumIndex > &scvf) const
 Returns the pressure at a given sub control volume face.
Scalar cellPressure (const Element< freeFlowMomentumIndex > &element, const SubControlVolumeFace< freeFlowMomentumIndex > &scvf) const
 Returns the pressure at the center of a sub control volume corresponding to a given sub control volume face. This is used for setting a Dirichlet pressure for the mass model when a fixed pressure for the momentum balance is set at another boundary. Since the the pressure at the given scvf is solution-dependent and thus unknown a priori, we just use the value of the interior cell here.
Scalar density (const Element< freeFlowMomentumIndex > &element, const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const SubControlVolumeFace< freeFlowMomentumIndex > &scvf, const bool considerPreviousTimeStep=false) const
 Returns the density at a given sub control volume face.
auto insideAndOutsideDensity (const Element< freeFlowMomentumIndex > &element, const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const SubControlVolumeFace< freeFlowMomentumIndex > &scvf, const bool considerPreviousTimeStep=false) const
Scalar density (const Element< freeFlowMomentumIndex > &element, const SubControlVolume< freeFlowMomentumIndex > &scv, const bool considerPreviousTimeStep=false) const
 Returns the density at a given sub control volume.
Scalar effectiveViscosity (const Element< freeFlowMomentumIndex > &element, const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const SubControlVolumeFace< freeFlowMomentumIndex > &scvf) const
 Returns the pressure at a given sub control volume face.
auto faceVelocity (const Element< freeFlowMassIndex > &element, const SubControlVolumeFace< freeFlowMassIndex > &scvf) const
 Returns the velocity at a given sub control volume face.
bool isCoupledLateralScvf (Dune::index_constant< freeFlowMomentumIndex > domainI, Dune::index_constant< porousMediumIndex > domainJ, const SubControlVolumeFace< freeFlowMomentumIndex > &scvf) const
 Returns whether a given scvf is coupled to the other domain.
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 = ParentType::freeFlowMomentumIndex
static constexpr auto freeFlowMassIndex = ParentType::freeFlowMassIndex
static constexpr auto porousMediumIndex = ParentType::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>
inherited

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

◆ cellPressure()

template<class MDTraits>
Scalar Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::cellPressure ( const Element< freeFlowMomentumIndex > & element,
const SubControlVolumeFace< freeFlowMomentumIndex > & scvf ) const
inline

◆ 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
inlineinherited
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
inlineinherited

◆ curSol()

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

◆ darcyPermeability()

template<class MDTraits>
auto Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::darcyPermeability ( const FVElementGeometry< freeFlowMomentumIndex > & fvGeometry,
const SubControlVolumeFace< freeFlowMomentumIndex > & scvf ) const
inline

◆ density() [1/2]

template<class MDTraits>
Scalar Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::density ( const Element< freeFlowMomentumIndex > & element,
const FVElementGeometry< freeFlowMomentumIndex > & fvGeometry,
const SubControlVolumeFace< freeFlowMomentumIndex > & scvf,
const bool considerPreviousTimeStep = false ) const
inline

◆ density() [2/2]

template<class MDTraits>
Scalar Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::density ( const Element< freeFlowMomentumIndex > & element,
const SubControlVolume< freeFlowMomentumIndex > & scv,
const bool considerPreviousTimeStep = false ) const
inline

◆ effectiveViscosity()

template<class MDTraits>
Scalar Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::effectiveViscosity ( const Element< freeFlowMomentumIndex > & element,
const FVElementGeometry< freeFlowMomentumIndex > & fvGeometry,
const SubControlVolumeFace< freeFlowMomentumIndex > & scvf ) const
inline

◆ 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

◆ faceVelocity()

template<class MDTraits>
auto Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::faceVelocity ( const Element< freeFlowMassIndex > & element,
const SubControlVolumeFace< freeFlowMassIndex > & scvf ) const
inline

◆ 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 )
inlineinherited

◆ 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 )
inlineinherited

◆ insideAndOutsideDensity()

template<class MDTraits>
auto Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::insideAndOutsideDensity ( const Element< freeFlowMomentumIndex > & element,
const FVElementGeometry< freeFlowMomentumIndex > & fvGeometry,
const SubControlVolumeFace< freeFlowMomentumIndex > & scvf,
const bool considerPreviousTimeStep = false ) const
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
inlineinherited
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
inlineinherited

◆ isCoupledLateralScvf()

template<class MDTraits>
bool Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::isCoupledLateralScvf ( Dune::index_constant< freeFlowMomentumIndex > domainI,
Dune::index_constant< porousMediumIndex > domainJ,
const SubControlVolumeFace< freeFlowMomentumIndex > & scvf ) const
inline

◆ massCouplingCondition()

template<class MDTraits>
template<std::size_t i, std::size_t j>
auto Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::massCouplingCondition ( Dune::index_constant< i > domainI,
Dune::index_constant< j > domainJ,
const FVElementGeometry< i > & fvGeometry,
const typename FVElementGeometry< i >::SubControlVolumeFace & scvf,
const ElementVolumeVariables< i > & elemVolVars ) const
inline

◆ momentumCouplingCondition()

template<class MDTraits>
NumEqVector< freeFlowMomentumIndex > Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::momentumCouplingCondition ( Dune::index_constant< freeFlowMomentumIndex > domainI,
Dune::index_constant< porousMediumIndex > domainJ,
const FVElementGeometry< freeFlowMomentumIndex > & fvGeometry,
const typename FVElementGeometry< freeFlowMomentumIndex >::SubControlVolumeFace & scvf,
const ElementVolumeVariables< freeFlowMomentumIndex > & elemVolVars ) 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

◆ pressure()

template<class MDTraits>
Scalar Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::pressure ( const Element< freeFlowMomentumIndex > & element,
const FVElementGeometry< freeFlowMomentumIndex > & fvGeometry,
const SubControlVolumeFace< freeFlowMomentumIndex > & scvf ) const
inline

◆ problem()

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

◆ 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::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::freeFlowMassIndex = ParentType::freeFlowMassIndex
staticconstexpr

◆ freeFlowMomentumIndex

template<class MDTraits>
auto Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::freeFlowMomentumIndex = ParentType::freeFlowMomentumIndex
staticconstexpr

◆ porousMediumIndex

template<class MDTraits>
auto Dumux::FreeFlowPorousMediumCouplingManagerStaggeredCCTpfa< MDTraits >::porousMediumIndex = ParentType::porousMediumIndex
staticconstexpr

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