3.1-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
Modules | Files | Classes | 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/couplingmanager.hh
 The interface of the coupling manager for multi domain problems.
 
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  multidomain/newtonsolver.hh
 
file  staggeredcouplingmanager.hh
 The interface of the coupling manager for multi domain problems.
 
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  subdomainstaggeredlocalassembler.hh
 A multidomain assembler for Jacobian and residual contribution per element (staggered method)
 
file  traits.hh
 Traits for multidomain problems.
 

Classes

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::Glue::Intersection< DomainGridView, TargetGridView, DomainMapper, TargetMapper >
 An intersection object representing the intersection between two grid entites of different grids. More...
 
class  Dumux::MultiDomainGlue< DomainGridView, TargetGridView, DomainMapper, TargetMapper >
 Manages the coupling between domain elements and lower dimensional elements Point sources on each integration point are computed by an AABB tree. Both domain are assumed to be discretized using a cc finite volume scheme. More...
 
class  Dumux::MultiDomainVtkOutputModule< MDTraits, Module >
 A multidomain wrapper for multiple vtk output modules. More...
 
class  Dumux::MultiDomainNewtonSolver< Assembler, LinearSolver, CouplingManager, Reassembler, Comm >
 Newton sover 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::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...
 

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==DiscretizationMethod::cctpfa)||(GridGeometryI::discMethod==DiscretizationMethod::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<class DomainGridView , class TargetGridView , class DomainMapper , class TargetMapper >
Dune::IteratorRange< typename MultiDomainGlue< DomainGridView, TargetGridView, DomainMapper, TargetMapper >::Intersections::const_iterator > Dumux::intersections (const MultiDomainGlue< DomainGridView, TargetGridView, DomainMapper, TargetMapper > &glue)
 Range generator to iterate with range-based for loops over all intersections as follows: for (const auto& is : intersections(glue)) { ... }. 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...
 
template<class LocalAssemblerI , std::size_t j>
decltype(auto) Dumux::StaggeredCouplingManager< MDTraits >::evalCouplingResidual (Dune::index_constant< faceIdx > domainI, const SubControlVolumeFace &scvfI, const LocalAssemblerI &localAssemblerI, Dune::index_constant< j > domainJ, std::size_t dofIdxGlobalJ) const
 evaluates the face residual of a coupled face 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::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...
 

Function Documentation

◆ evalCouplingResidual() [1/2]

template<class MDTraits >
template<class LocalAssemblerI , std::size_t j>
decltype(auto) Dumux::StaggeredCouplingManager< MDTraits >::evalCouplingResidual ( Dune::index_constant< faceIdx domainI,
const SubControlVolumeFace &  scvfI,
const LocalAssemblerI &  localAssemblerI,
Dune::index_constant< j >  domainJ,
std::size_t  dofIdxGlobalJ 
) const
inline

evaluates the face residual of a coupled face 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
scvfIthe subcontrol volume face whose residual shall be evaluated 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 default implementation evaluates the complete face residual if 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 face 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==DiscretizationMethod::cctpfa)||(GridGeometryI::discMethod==DiscretizationMethod::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 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.

◆ intersections()

template<class DomainGridView , class TargetGridView , class DomainMapper , class TargetMapper >
Dune::IteratorRange< typename MultiDomainGlue< DomainGridView, TargetGridView, DomainMapper, TargetMapper >::Intersections::const_iterator > Dumux::intersections ( const MultiDomainGlue< DomainGridView, TargetGridView, DomainMapper, TargetMapper > &  glue)

Range generator to iterate with range-based for loops over all intersections as follows: for (const auto& is : intersections(glue)) { ... }.

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

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 udpate 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