3.6-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
Modules | Files | Classes | Typedefs | Functions
Multidomain simulations

Coupling of several regular DuMux problems. More...

Description

Coupling of several regular DuMux problems.

The multi domain module allows coupling regular DuMux problems. Several coupling modes are currently available.

Modules

 Boundary coupling mode
 Couples problems of different or equal dimension that touch at the domain boundary. Examples are equal-dimension multi-physics problems like Darcy-Stokes coupling or PNM (pore network model)-Darcy coupling.
 
 Embedded mixed-dimension coupling mode
 Couples problems of different dimensions where one or more lower-dimensional problems (lowdim) are embedded in a higher-dimensional domain (bulk). Examples are embedded one-dimensional networks for the simulation of blood tissue perfusion, or root-soil interaction, and embedded fracture models.
 
 Conforming mixed-dimension facet coupling mode
 Couples problems of different dimensions where one or more lower-dimensional problems (lowdim) live on the facets of the higher-dimensional domain (bulk). Examples are discrete facet conforming fracture models and problems with physics on a domain surface.
 

Files

file  couplingjacobianpattern.hh
 Helper function to generate Jacobian pattern for multi domain models.
 
file  multidomain/couplingmanager.hh
 The interface of the coupling manager for multi domain problems.
 
file  multidomain/freeflow/couplingmanager.hh
 Freeflow coupling managers (Navier-Stokes mass-momentum coupling)
 
file  couplingmanager_diamond.hh
 Freeflow coupling managers (Navier-Stokes mass-momentum coupling)
 
file  couplingmanager_pq1bubble.hh
 Freeflow coupling managers (Navier-Stokes mass-momentum coupling)
 
file  couplingmanager_staggered.hh
 Freeflow coupling managers (Navier-Stokes mass-momentum coupling)
 
file  multidomain/fvassembler.hh
 A linear system assembler (residual and Jacobian) for finite volume schemes with multiple domains.
 
file  multidomain/fvgridgeometry.hh
 Multidomain wrapper for multiple grid geometries.
 
file  multidomain/fvgridvariables.hh
 Multidomain wrapper for multiple grid variables.
 
file  multidomain/fvproblem.hh
 Multidomain wrapper for multiple problems.
 
file  glue.hh
 A class glueing two grids of potentially different dimension geometrically. Intersections are computed using axis-aligned bounding box trees.
 
file  multidomain/io/vtkoutputmodule.hh
 Multidomain wrapper for multiple vtk output modules.
 
file  multibinarycouplingmanager.hh
 
file  multidomain/newtonconvergencewriter.hh
 This class provides the infrastructure to write the convergence behaviour of the Newton method for multidomain simulations into a VTK file.
 
file  multidomain/newtonsolver.hh
 
file  staggeredcouplingmanager.hh
 The interface of the coupling manager for multi domain problems.
 
file  multidomain/staggeredfreeflow/couplingmanager.hh
 Freeflow coupling managers (Navier-Stokes mass-momentum coupling)
 
file  staggeredtraits.hh
 Linear algebra traits for mixeddimension problems.
 
file  subdomainboxlocalassembler.hh
 An assembler for Jacobian and residual contribution per element (box methods) for multidomain problems.
 
file  subdomaincclocalassembler.hh
 A multidomain local assembler for Jacobian and residual contribution per element (cell-centered methods)
 
file  subdomainfcdiamondlocalassembler.hh
 An assembler for Jacobian and residual contribution per element (face-centered diamond methods) for multidomain problems.
 
file  subdomainfclocalassembler.hh
 An assembler for Jacobian and residual contribution per element (face-centered staggered methods) for multidomain problems.
 
file  subdomainpq1bubblelocalassembler.hh
 An assembler for Jacobian and residual contribution per element for multidomain problems.
 
file  subdomainstaggeredlocalassembler.hh
 A multidomain assembler for Jacobian and residual contribution per element (staggered method)
 
file  multidomain/traits.hh
 Traits for multidomain problems.
 

Classes

class  Dumux::CouplingManager< Traits >
 The interface of the coupling manager for multi domain problems. More...
 
class  Dumux::FCDiamondFreeFlowCouplingManager< Traits >
 The interface of the coupling manager for free flow systems. More...
 
class  Dumux::PQ1BubbleFreeFlowCouplingManager< Traits >
 The interface of the coupling manager for free flow systems. More...
 
class  Dumux::FCStaggeredFreeFlowCouplingManager< Traits >
 The interface of the coupling manager for free flow systems. More...
 
struct  Dumux::CouplingManagerSupportsMultithreadedAssembly< CM >
 trait that is specialized for coupling manager supporting multithreaded assembly More...
 
class  Dumux::MultiDomainFVAssembler< MDTraits, CMType, diffMethod, useImplicitAssembly >
 A linear system assembler (residual and Jacobian) for finite volume schemes (box, tpfa, mpfa, ...) with multiple domains. More...
 
class  Dumux::MultiDomainFVGridGeometry< MDTraits >
 A multidomain wrapper for multiple grid geometries. More...
 
class  Dumux::MultiDomainFVGridVariables< MDTraits >
 A multidomain wrapper for multiple grid variables. More...
 
class  Dumux::MultiDomainFVProblem< MDTraits >
 A multidomain wrapper for multiple problems. More...
 
class  Dumux::MultiDomainVtkOutputModule< MDTraits, Module >
 A multidomain wrapper for multiple vtk output modules. More...
 
class  Dumux::MultiBinaryCouplingManager< MDTraits, CouplingMap, CouplingMgrs >
 Coupling manager that combines an arbitrary number of binary coupling manager (coupling two domains each) More...
 
class  Dumux::MultiDomainNewtonConvergenceWriter< MDTraits >
 Writes the intermediate solutions for every Newton iteration. More...
 
class  Dumux::MultiDomainNewtonSolver< Assembler, LinearSolver, CouplingManager, Reassembler, Comm >
 Newton solver for coupled problems. More...
 
class  Dumux::StaggeredCouplingManager< MDTraits >
 Base coupling manager for the staggered discretization. More...
 
class  Dumux::SubDomainBoxLocalAssemblerBase< id, TypeTag, Assembler, Implementation, implicit >
 A base class for all box local assemblers. More...
 
class  Dumux::SubDomainBoxLocalAssembler< id, TypeTag, Assembler, DM, implicit >
 The box scheme multidomain local assembler. More...
 
class  Dumux::SubDomainBoxLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, true >
 Box scheme multi domain local assembler using numeric differentiation and implicit time discretization. More...
 
class  Dumux::SubDomainBoxLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, false >
 Box scheme multi domain local assembler using numeric differentiation and explicit time discretization. More...
 
class  Dumux::SubDomainCCLocalAssemblerBase< id, TypeTag, Assembler, Implementation, implicit >
 A base class for all multidomain local assemblers. More...
 
class  Dumux::SubDomainCCLocalAssembler< id, TypeTag, Assembler, DM, implicit >
 The cell-centered scheme multidomain local assembler. More...
 
class  Dumux::SubDomainCCLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, true >
 Cell-centered scheme multidomain local assembler using numeric differentiation and implicit time discretization. More...
 
class  Dumux::SubDomainCCLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, false >
 Cell-centered scheme multidomain local assembler using numeric differentiation and explicit time discretization. More...
 
class  Dumux::SubDomainCCLocalAssembler< id, TypeTag, Assembler, DiffMethod::analytic, true >
 Cell-centered scheme local assembler using analytic differentiation and implicit time discretization. More...
 
class  Dumux::SubDomainFaceCenteredDiamondLocalAssemblerBase< id, TypeTag, Assembler, Implementation, dm, implicit >
 A base class for all face-centered staggered local assemblers. More...
 
class  Dumux::SubDomainFaceCenteredDiamondLocalAssembler< id, TypeTag, Assembler, DM, implicit >
 The face-centered staggered scheme multidomain local assembler. More...
 
class  Dumux::SubDomainFaceCenteredDiamondLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, true >
 Face-centered staggered scheme multi domain local assembler using numeric differentiation and implicit time discretization. More...
 
class  Dumux::SubDomainFaceCenteredLocalAssemblerBase< id, TypeTag, Assembler, Implementation, dm, implicit >
 A base class for all face-centered staggered local assemblers. More...
 
class  Dumux::SubDomainFaceCenteredLocalAssembler< id, TypeTag, Assembler, DM, implicit >
 The face-centered staggered scheme multidomain local assembler. More...
 
class  Dumux::SubDomainFaceCenteredLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, true >
 Face-centered staggered scheme multi domain local assembler using numeric differentiation and implicit time discretization. More...
 
class  Dumux::SubDomainFaceCenteredLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, false >
 Face-centered staggered scheme multi domain local assembler using numeric differentiation and explicit time discretization. More...
 
class  Dumux::SubDomainPQ1BubbleLocalAssemblerBase< id, TypeTag, Assembler, Implementation, dm, implicit >
 A base class for PQ1Bubble local assemblers. More...
 
class  Dumux::SubDomainPQ1BubbleLocalAssembler< id, TypeTag, Assembler, DM, implicit >
 The PQ1Bubble scheme multidomain local assembler. More...
 
class  Dumux::SubDomainPQ1BubbleLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, true >
 Control-volume fe staggered scheme multi domain local assembler using numeric differentiation and implicit time discretization. More...
 
class  Dumux::SubDomainStaggeredLocalAssemblerBase< id, TypeTag, Assembler, Implementation, isImplicit >
 A base class for all multidomain local assemblers (staggered) More...
 
class  Dumux::SubDomainStaggeredLocalAssemblerImplicitBase< id, TypeTag, Assembler, Implementation >
 A base class for all implicit multidomain local assemblers (staggered) More...
 
class  Dumux::SubDomainStaggeredLocalAssembler< id, TypeTag, Assembler, DM, implicit >
 The staggered multidomain local assembler. More...
 
class  Dumux::SubDomainStaggeredLocalAssembler< id, TypeTag, Assembler, DiffMethod::numeric, true >
 Staggered scheme local assembler using numeric differentiation and implicit time discretization. More...
 

Typedefs

template<class Traits >
using Dumux::FreeFlowCouplingManager = typename Detail::FreeFlowCouplingManagerSelector< Traits >::type
 The interface of the coupling manager for free flow systems. More...
 
template<class DomainGridView , class TargetGridView , class DomainMapper , class TargetMapper >
using Dumux::MultiDomainGlue = IntersectionEntitySet< GridViewGeometricEntitySet< DomainGridView, 0, DomainMapper >, GridViewGeometricEntitySet< TargetGridView, 0, TargetMapper > >
 A convenience alias for the IntersectionEntitySet of two GridViewGeometricEntitySets. More...
 
template<class Traits >
using Dumux::StaggeredFreeFlowCouplingManager = FreeFlowCouplingManager< Traits >
 The interface of the coupling manager for free flow systems. More...
 

Functions

template<bool isImplicit, class CouplingManager , class GridGeometryI , class GridGeometryJ , std::size_t i, std::size_t j, typename std::enable_if_t<((GridGeometryI::discMethod==DiscretizationMethods::cctpfa)||(GridGeometryI::discMethod==DiscretizationMethods::ccmpfa)), int > = 0>
Dune::MatrixIndexSet Dumux::getCouplingJacobianPattern (const CouplingManager &couplingManager, Dune::index_constant< i > domainI, const GridGeometryI &gridGeometryI, Dune::index_constant< j > domainJ, const GridGeometryJ &gridGeometryJ)
 Helper function to generate coupling Jacobian pattern (off-diagonal blocks) for cell-centered schemes. More...
 
template<std::size_t j, class LocalAssemblerI >
decltype(auto) Dumux::FCStaggeredFreeFlowCouplingManager< Traits >::evalCouplingResidual (Dune::index_constant< freeFlowMomentumIndex > domainI, const LocalAssemblerI &localAssemblerI, const SubControlVolume< freeFlowMomentumIndex > &scvI, 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...
 
template<class DomainGG , class TargetGG >
MultiDomainGlue< typename DomainGG::GridView, typename TargetGG::GridView, typename DomainGG::ElementMapper, typename TargetGG::ElementMapper > Dumux::makeGlue (const DomainGG &domainGridGeometry, const TargetGG &targetGridGeometry)
 Creates the glue object containing the intersections between two grids obtained from given grid geometries. More...
 

member functions concerning variable caching for element residual evaluations

template<std::size_t i, std::size_t j, class LocalAssemblerI >
void Dumux::CouplingManager< Traits >::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...
 
template<std::size_t i, std::size_t j, class LocalAssemblerI >
decltype(auto) Dumux::CouplingManager< Traits >::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...
 

member functions concerning variable caching for element residual evaluations

template<std::size_t i, std::size_t j, class LocalAssemblerI >
void Dumux::FCDiamondFreeFlowCouplingManager< Traits >::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...
 

member functions concerning variable caching for element residual evaluations

template<std::size_t i, std::size_t j, class LocalAssemblerI >
void Dumux::PQ1BubbleFreeFlowCouplingManager< Traits >::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...
 

Typedef Documentation

◆ FreeFlowCouplingManager

template<class Traits >
using Dumux::FreeFlowCouplingManager = typedef typename Detail::FreeFlowCouplingManagerSelector<Traits>::type

The interface of the coupling manager for free flow systems.

◆ MultiDomainGlue

template<class DomainGridView , class TargetGridView , class DomainMapper , class TargetMapper >
using Dumux::MultiDomainGlue = typedef IntersectionEntitySet<GridViewGeometricEntitySet<DomainGridView, 0, DomainMapper>, GridViewGeometricEntitySet<TargetGridView, 0, TargetMapper> >

A convenience alias for the IntersectionEntitySet of two GridViewGeometricEntitySets.

◆ StaggeredFreeFlowCouplingManager

template<class Traits >
using Dumux::StaggeredFreeFlowCouplingManager = typedef FreeFlowCouplingManager<Traits>

The interface of the coupling manager for free flow systems.

Function Documentation

◆ evalCouplingResidual() [1/2]

template<class Traits >
template<std::size_t j, class LocalAssemblerI >
decltype(auto) Dumux::FCStaggeredFreeFlowCouplingManager< Traits >::evalCouplingResidual ( Dune::index_constant< freeFlowMomentumIndex domainI,
const LocalAssemblerI &  localAssemblerI,
const SubControlVolume< freeFlowMomentumIndex > &  scvI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ 
) const
inline

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

Parameters
domainIthe domain index of domain i
localAssemblerIthe local assembler assembling the element residual of an element of domain i
scvIthe sub-control-volume of domain i
domainJthe domain index of domain j
dofIdxGlobalJthe index of the degree of freedom of domain j which has an influence on the element residual of domain i
Note
the element whose residual is to be evaluated can be retrieved from the local assembler as localAssemblerI.element() as well as all up-to-date variables and caches.
the default implementation evaluates the complete element residual if only parts (i.e. only certain scvs, or only certain terms of the residual) of the residual are coupled to dof with index dofIdxGlobalJ the function can be overloaded in the coupling manager
Returns
the element residual

◆ evalCouplingResidual() [2/2]

template<class Traits >
template<std::size_t i, std::size_t j, class LocalAssemblerI >
decltype(auto) Dumux::CouplingManager< Traits >::evalCouplingResidual ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ 
) const
inline

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

Parameters
domainIthe domain index of domain i
localAssemblerIthe local assembler assembling the element residual of an element of domain i
domainJthe domain index of domain j
dofIdxGlobalJthe index of the degree of freedom of domain j which has an influence on the element residual of domain i
Note
the element whose residual is to be evaluated can be retrieved from the local assembler as localAssemblerI.element() as well as all up-to-date variables and caches.
the default implementation evaluates the complete element residual if only parts (i.e. only certain scvs, or only certain terms of the residual) of the residual are coupled to dof with index dofIdxGlobalJ the function can be overloaded in the coupling manager
Returns
the element residual

◆ getCouplingJacobianPattern()

template<bool isImplicit, class CouplingManager , class GridGeometryI , class GridGeometryJ , std::size_t i, std::size_t j, typename std::enable_if_t<((GridGeometryI::discMethod==DiscretizationMethods::cctpfa)||(GridGeometryI::discMethod==DiscretizationMethods::ccmpfa)), int > = 0>
Dune::MatrixIndexSet Dumux::getCouplingJacobianPattern ( const CouplingManager couplingManager,
Dune::index_constant< i >  domainI,
const GridGeometryI &  gridGeometryI,
Dune::index_constant< j >  domainJ,
const GridGeometryJ &  gridGeometryJ 
)

Helper function to generate coupling Jacobian pattern (off-diagonal blocks) for cell-centered schemes.

Helper function to generate coupling Jacobian pattern (off-diagonal blocks) for the pq1bubble scheme.

Helper function to generate coupling Jacobian pattern (off-diagonal blocks) for the diamond scheme.

Helper function to generate coupling Jacobian pattern (off-diagonal blocks) for the staggered scheme (degrees of freedom on faces)

Helper function to generate coupling Jacobian pattern (off-diagonal blocks) for the staggered scheme (degrees of freedom on cell centers)

Helper function to generate coupling Jacobian pattern (off-diagonal blocks) for the box scheme.

◆ makeGlue()

template<class DomainGG , class TargetGG >
MultiDomainGlue< typename DomainGG::GridView, typename TargetGG::GridView, typename DomainGG::ElementMapper, typename TargetGG::ElementMapper > Dumux::makeGlue ( const DomainGG &  domainGridGeometry,
const TargetGG &  targetGridGeometry 
)

Creates the glue object containing the intersections between two grids obtained from given grid geometries.

Parameters
domainGridGeometryThe grid geometry of the domain
targetGridGeometryThe grid geometry of the target domain
Returns
The glue object containing the intersections

◆ updateCouplingContext() [1/3]

template<class Traits >
template<std::size_t i, std::size_t j, class LocalAssemblerI >
void Dumux::CouplingManager< Traits >::updateCouplingContext ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ,
const PrimaryVariables< j > &  priVarsJ,
int  pvIdxJ 
)
inline

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

Parameters
domainIthe domain index of domain i
localAssemblerIthe local assembler assembling the element residual of an element of domain i
domainJthe domain index of domain j
dofIdxGlobalJthe index of the degree of freedom of domain j whose solution changed
priVarsJthe new solution at the degree of freedom of domain j with index dofIdxGlobalJ
pvIdxJthe index of the primary variable of domain j which has been updated
Note
this concerns all data that is used in the evaluation of the element residual and depends on the primary variables at the degree of freedom location with index dofIdxGlobalJ
the element whose residual is to be evaluated can be retrieved from the local assembler as localAssemblerI.element()
per default, we update the solution vector, if the element residual of domain i depends on more than the primary variables of domain j update the other dependent data here by overloading this function

◆ updateCouplingContext() [2/3]

template<class Traits >
template<std::size_t i, std::size_t j, class LocalAssemblerI >
void Dumux::FCDiamondFreeFlowCouplingManager< Traits >::updateCouplingContext ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ,
const PrimaryVariables< j > &  priVarsJ,
int  pvIdxJ 
)
inline

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

Parameters
domainIthe domain index of domain i
localAssemblerIthe local assembler assembling the element residual of an element of domain i
domainJthe domain index of domain j
dofIdxGlobalJthe index of the degree of freedom of domain j whose solution changed
priVarsJthe new solution at the degree of freedom of domain j with index dofIdxGlobalJ
pvIdxJthe index of the primary variable of domain j which has been updated
Note
this concerns all data that is used in the evaluation of the element residual and depends on the primary variables at the degree of freedom location with index dofIdxGlobalJ
the element whose residual is to be evaluated can be retrieved from the local assembler as localAssemblerI.element()
per default, we update the solution vector, if the element residual of domain i depends on more than the primary variables of domain j update the other dependent data here by overloading this function

◆ updateCouplingContext() [3/3]

template<class Traits >
template<std::size_t i, std::size_t j, class LocalAssemblerI >
void Dumux::PQ1BubbleFreeFlowCouplingManager< Traits >::updateCouplingContext ( Dune::index_constant< i >  domainI,
const LocalAssemblerI &  localAssemblerI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ,
const PrimaryVariables< j > &  priVarsJ,
int  pvIdxJ 
)
inline

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

Parameters
domainIthe domain index of domain i
localAssemblerIthe local assembler assembling the element residual of an element of domain i
domainJthe domain index of domain j
dofIdxGlobalJthe index of the degree of freedom of domain j whose solution changed
priVarsJthe new solution at the degree of freedom of domain j with index dofIdxGlobalJ
pvIdxJthe index of the primary variable of domain j which has been updated
Note
this concerns all data that is used in the evaluation of the element residual and depends on the primary variables at the degree of freedom location with index dofIdxGlobalJ
the element whose residual is to be evaluated can be retrieved from the local assembler as localAssemblerI.element()
per default, we update the solution vector, if the element residual of domain i depends on more than the primary variables of domain j update the other dependent data here by overloading this function