version 3.8
multidomain/boundary/freeflowporenetwork/couplingmanager.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
13#ifndef DUMUX_MULTIDOMAIN_BOUNDARY_FREEFLOW_PORENETWORK_COUPLINGMANAGER_HH
14#define DUMUX_MULTIDOMAIN_BOUNDARY_FREEFLOW_PORENETWORK_COUPLINGMANAGER_HH
15
16#include <utility>
17#include <memory>
18
19#include <dune/common/indices.hh>
25
26#include "couplingconditions.hh"
27#include "couplingmapper.hh"
28
29namespace Dumux {
30
31namespace FreeFlowPoreNetworkDetail {
32
33// global subdomain indices
34static constexpr auto freeFlowMomentumIndex = Dune::index_constant<0>();
35static constexpr auto freeFlowMassIndex = Dune::index_constant<1>();
36static constexpr auto poreNetworkIndex = Dune::index_constant<2>();
37
38// coupling indices
39static constexpr auto freeFlowMassToFreeFlowMomentumIndex = Dune::index_constant<0>();
40static constexpr auto freeFlowMomentumToPoreNetworkIndex = Dune::index_constant<1>();
41static constexpr auto freeFlowMassToPoreNetworkIndex = Dune::index_constant<2>();
42static constexpr auto noCouplingIdx = Dune::index_constant<99>();
43
44constexpr auto makeCouplingManagerMap()
45{
46 auto map = std::array<std::array<std::size_t, 3>, 3>{};
47
48 // free flow (momentum-mass)
51
52 // free flow momentum - porous medium
55
56 // free flow mass - porous medium
59
60 return map;
61}
62
63template<std::size_t i>
64constexpr auto coupledDomains(Dune::index_constant<i> domainI)
65{
66 if constexpr (i == freeFlowMomentumIndex)
67 return std::make_tuple(freeFlowMassIndex, poreNetworkIndex);
68 else if constexpr (i == freeFlowMassIndex)
69 return std::make_tuple(freeFlowMomentumIndex, poreNetworkIndex);
70 else // i == poreNetworkIndex
71 return std::make_tuple(freeFlowMomentumIndex, freeFlowMassIndex);
72}
73
74template<std::size_t i, std::size_t j>
75constexpr auto globalToLocalDomainIndices(Dune::index_constant<i>, Dune::index_constant<j>)
76{
77 static_assert(i <= 2 && j <= 2);
78 static_assert(i != j);
79
80 if constexpr (i < j)
81 return std::pair<Dune::index_constant<0>, Dune::index_constant<1>>{};
82 else
83 return std::pair<Dune::index_constant<1>, Dune::index_constant<0>>{};
84}
85
87{
88 static constexpr auto managerMap()
89 {
91 }
92
93 template<std::size_t i, std::size_t j>
94 static constexpr auto globalToLocal(Dune::index_constant<i> domainI, Dune::index_constant<j> domainJ)
95 {
97 }
98
99 template<std::size_t i>
100 static constexpr auto coupledDomains(Dune::index_constant<i> domainI)
101 {
103 }
104};
105
106template<class MDTraits>
108{
109 template<std::size_t id>
110 using SubDomainTypeTag = typename MDTraits::template SubDomain<id>::TypeTag;
111
114 >;
115
118 >;
119
122 >;
123
130};
131
132} // end namespace Detail
133
138template<class MDTraits>
141 MDTraits,
142 FreeFlowPoreNetworkDetail::CouplingMaps,
143 typename FreeFlowPoreNetworkDetail::CouplingManagers<MDTraits>::FreeFlowCouplingManager,
144 typename FreeFlowPoreNetworkDetail::CouplingManagers<MDTraits>::FreeFlowMomentumPoreNetworkCouplingManager,
145 typename FreeFlowPoreNetworkDetail::CouplingManagers<MDTraits>::FreeFlowMassPoreNetworkCouplingManager
146>
147{
149 MDTraits,
154 >;
155
157
158 using Scalar = typename MDTraits::Scalar;
159
160 // the sub domain type tags
161 template<std::size_t id>
162 using SubDomainTypeTag = typename MDTraits::template SubDomain<id>::TypeTag;
163
164 template<std::size_t id> using Problem = GetPropType<SubDomainTypeTag<id>, Properties::Problem>;
165 template<std::size_t id> using GridGeometry = GetPropType<SubDomainTypeTag<id>, Properties::GridGeometry>;
166 template<std::size_t id> using FVElementGeometry = typename GridGeometry<id>::LocalView;
167 template<std::size_t id> using SubControlVolumeFace = typename FVElementGeometry<id>::SubControlVolumeFace;
168 template<std::size_t id> using SubControlVolume = typename FVElementGeometry<id>::SubControlVolume;
169 template<std::size_t id> using ElementVolumeVariables = typename GetPropType<SubDomainTypeTag<id>, Properties::GridVolumeVariables>::LocalView;
170 template<std::size_t id> using NumEqVector = typename Problem<id>::Traits::NumEqVector;
171
172 template<std::size_t id> using GridView = typename GridGeometry<id>::GridView;
173 template<std::size_t id> using Element = typename GridView<id>::template Codim<0>::Entity;
174 using SolutionVector = typename MDTraits::SolutionVector;
175
178
179public:
180
181 template<std::size_t i, std::size_t j>
182 using SubCouplingManager = typename ParentType::template SubCouplingManager<i, j>;
183
187
188public:
189 using ParentType::ParentType;
190
191 template<class GridVarsTuple>
192 void init(std::shared_ptr<Problem<freeFlowMomentumIndex>> freeFlowMomentumProblem,
193 std::shared_ptr<Problem<freeFlowMassIndex>> freeFlowMassProblem,
194 std::shared_ptr<Problem<poreNetworkIndex>> poreNetworkProblem,
195 GridVarsTuple&& gridVarsTuple,
196 const SolutionVector& curSol)
197 {
198 this->updateSolution(curSol); // generic coupling manager stores tuple of shared_ptr
199
200 auto couplingMapper = std::make_shared<CouplingMapper>();
201 couplingMapper->update(freeFlowMomentumProblem->gridGeometry(),
202 freeFlowMassProblem->gridGeometry(),
203 poreNetworkProblem->gridGeometry()
204 );
205
206 // initialize the binary sub coupling managers
208 std::get<0>(ffSolVecTuple) = std::get<freeFlowMomentumIndex>(this->curSol());
209 std::get<1>(ffSolVecTuple) = std::get<freeFlowMassIndex>(this->curSol());
211 freeFlowMomentumProblem, freeFlowMassProblem,
212 std::make_tuple(std::get<freeFlowMomentumIndex>(gridVarsTuple), std::get<freeFlowMassIndex>(gridVarsTuple)),
213 ffSolVecTuple
214 );
215
217 std::get<0>(ffMassPmSolVecTuple) = std::get<freeFlowMassIndex>(this->curSol());
218 std::get<1>(ffMassPmSolVecTuple) = std::get<poreNetworkIndex>(this->curSol());
220 freeFlowMassProblem, poreNetworkProblem, couplingMapper, ffMassPmSolVecTuple
221 );
222
224 std::get<0>(ffMomentumPmSolVecTuple) = std::get<freeFlowMomentumIndex>(this->curSol());
225 std::get<1>(ffMomentumPmSolVecTuple) = std::get<poreNetworkIndex>(this->curSol());
227 freeFlowMomentumProblem, poreNetworkProblem,
228 std::make_tuple(std::get<freeFlowMomentumIndex>(gridVarsTuple), std::get<poreNetworkIndex>(gridVarsTuple)),
229 couplingMapper, ffMomentumPmSolVecTuple
230 );
231 }
232
236 auto massCouplingCondition(Dune::index_constant<poreNetworkIndex> domainI, Dune::index_constant<freeFlowMassIndex> domainJ,
237 const FVElementGeometry<poreNetworkIndex>& fvGeometry,
238 const typename FVElementGeometry<poreNetworkIndex>::SubControlVolume& scv,
239 const ElementVolumeVariables<poreNetworkIndex>& elemVolVars) const
240 {
241
242 const auto& couplingContext = this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj) -> const auto& {
243 return cm.couplingContext(ii, fvGeometry, scv);
244 });
245
246 const auto& freeFlowMassGridGeometry = this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj) -> const auto& {
247 return cm.problem(jj).gridGeometry();
248 });
249
250 for (auto& c : couplingContext)
251 {
252 const auto& freeFlowElement = freeFlowMassGridGeometry.element(c.scv.elementIndex());
253 c.velocity = this->subCouplingManager(freeFlowMomentumIndex, freeFlowMassIndex).faceVelocity(freeFlowElement, c.scvf);
254 }
255
256 return CouplingConditions::massCouplingCondition(domainI, domainJ, fvGeometry, scv, elemVolVars, couplingContext);
257 }
258
262 auto massCouplingCondition(Dune::index_constant<freeFlowMassIndex> domainI, Dune::index_constant<poreNetworkIndex> domainJ,
263 const FVElementGeometry<freeFlowMassIndex>& fvGeometry,
264 const typename FVElementGeometry<freeFlowMassIndex>::SubControlVolumeFace& scvf,
265 const ElementVolumeVariables<freeFlowMassIndex>& elemVolVars) const
266 {
267
268 const auto& couplingContext = this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj) -> const auto& {
269 return cm.couplingContext(ii, fvGeometry, scvf);
270 });
271
272 couplingContext.velocity = this->subCouplingManager(freeFlowMomentumIndex, freeFlowMassIndex).faceVelocity(fvGeometry.element(), scvf);
273 return CouplingConditions::massCouplingCondition(domainI, domainJ, fvGeometry, scvf, elemVolVars, couplingContext);
274 }
275
278
279 NumEqVector<freeFlowMomentumIndex> momentumCouplingCondition(Dune::index_constant<freeFlowMomentumIndex> domainI,
280 Dune::index_constant<poreNetworkIndex> domainJ,
281 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
282 const typename FVElementGeometry<freeFlowMomentumIndex>::SubControlVolumeFace& scvf,
283 const ElementVolumeVariables<freeFlowMomentumIndex>& elemVolVars) const
284 {
285 if (scvf.isLateral())
286 return NumEqVector<freeFlowMomentumIndex>(0.0);
287
288 const auto& context = this->subCouplingManager(freeFlowMomentumIndex, poreNetworkIndex).couplingContext(
289 fvGeometry, scvf
290 );
291
292 return CouplingConditions::momentumCouplingCondition(fvGeometry, scvf, elemVolVars, context);
293 }
294
295 Scalar coupledPoreInscribedRadius(const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
296 const typename FVElementGeometry<freeFlowMomentumIndex>::SubControlVolumeFace& scvf) const
297 {
298 const auto& context = this->subCouplingManager(freeFlowMomentumIndex, poreNetworkIndex).couplingContext(
299 fvGeometry, scvf
300 );
301
302 const auto& pnmScv = [&]
303 {
304 for (const auto& scv : scvs(context.fvGeometry))
305 if (scv.dofIndex() == context.poreNetworkDofIdx)
306 return scv;
307
308 DUNE_THROW(Dune::InvalidStateException, "No scv found");
309 }();
310
311 return context.elemVolVars[pnmScv].poreInscribedRadius();
312 }
313
314 auto interfaceThroatVelocity(const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
315 const typename FVElementGeometry<freeFlowMomentumIndex>::SubControlVolumeFace& scvf) const
316 {
317 const auto& context = this->subCouplingManager(freeFlowMomentumIndex, poreNetworkIndex).couplingContext(
318 fvGeometry, scvf
319 );
320
321 return CouplingConditions::interfaceThroatVelocity(fvGeometry, scvf, context);
322 }
323
324 // //////////////////////// Conditions for FreeFlowMomentum - FreeFlowMass coupling //////////
325 // ///////////////////////////////////////////////////////////////////////////////////////////
326
330 Scalar pressure(const Element<freeFlowMomentumIndex>& element,
331 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
332 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf) const
333 {
335 element, fvGeometry, scvf
336 );
337 }
338
345 Scalar cellPressure(const Element<freeFlowMomentumIndex>& element,
346 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf) const
347 {
349 element, scvf
350 );
351 }
352
356 Scalar density(const Element<freeFlowMomentumIndex>& element,
357 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
358 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf,
359 const bool considerPreviousTimeStep = false) const
360 {
362 element, fvGeometry, scvf, considerPreviousTimeStep
363 );
364 }
365
366 auto insideAndOutsideDensity(const Element<freeFlowMomentumIndex>& element,
367 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
368 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf,
369 const bool considerPreviousTimeStep = false) const
370 {
371 return this->subCouplingManager(freeFlowMomentumIndex, freeFlowMassIndex).insideAndOutsideDensity(
372 element, fvGeometry, scvf, considerPreviousTimeStep
373 );
374 }
375
379 Scalar density(const Element<freeFlowMomentumIndex>& element,
380 const SubControlVolume<freeFlowMomentumIndex>& scv,
381 const bool considerPreviousTimeStep = false) const
382 {
384 element, scv, considerPreviousTimeStep
385 );
386 }
387
391 Scalar effectiveViscosity(const Element<freeFlowMomentumIndex>& element,
392 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
393 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf) const
394 {
395 return this->subCouplingManager(freeFlowMomentumIndex, freeFlowMassIndex).effectiveViscosity(
396 element, fvGeometry, scvf
397 );
398 }
399
403 auto faceVelocity(const Element<freeFlowMassIndex>& element,
404 const SubControlVolumeFace<freeFlowMassIndex>& scvf) const
405 {
407 element, scvf
408 );
409 }
410
411 template<std::size_t i>
412 const Problem<i>& problem(Dune::index_constant<i> domainI) const
413 {
414 return this->subApply(domainI, [&](const auto& cm, auto&& ii) -> const auto& {
415 return cm.problem(ii);
416 });
417 }
418
419 template<std::size_t i, std::size_t j>
420 bool isCoupled(Dune::index_constant<i> domainI,
421 Dune::index_constant<j> domainJ,
422 const SubControlVolumeFace<i>& scvf) const
423 {
424 return this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj){
425 return cm.isCoupled(ii, scvf);
426 });
427 }
428
435 template<std::size_t i, std::size_t j>
436 bool isCoupled(Dune::index_constant<i> domainI,
437 Dune::index_constant<j> domainJ,
438 const SubControlVolume<i>& scv) const
439 {
440 return this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj){
441 return cm.isCoupled(ii, scv);
442 });
443 }
444
445 // /*!
446 // * \brief Returns whether a given scvf is coupled to the other domain
447 // */
448 // bool isCoupledLateralScvf(Dune::index_constant<freeFlowMomentumIndex> domainI,
449 // Dune::index_constant<poreNetworkIndex> domainJ,
450 // const SubControlVolumeFace<freeFlowMomentumIndex>& scvf) const
451 // {
452 // return this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj){
453 // return cm.isCoupledLateralScvf(ii, scvf);
454 // });
455 // }
456
457
468 template<std::size_t j>
469 const auto& couplingStencil(Dune::index_constant<freeFlowMomentumIndex> domainI,
470 const Element<freeFlowMomentumIndex>& elementI,
471 const SubControlVolume<freeFlowMomentumIndex>& scvI,
472 Dune::index_constant<j> domainJ) const
473 {
474 static_assert(freeFlowMomentumIndex != j);
475 return this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj) -> const auto& {
476 return cm.couplingStencil(ii, elementI, scvI, jj);
477 });
478 }
479};
480
481} // end namespace Dumux
482
483#endif
Coupling manager for free-flow mass and pore-network models.
Definition: multidomain/boundary/freeflowporenetwork/ffmassporenetwork/couplingmanager.hh:35
Coupling manager for free-flow momentum and pore-network models.
Definition: multidomain/boundary/freeflowporenetwork/ffmomentumporenetwork/couplingmanager.hh:35
Definition: freeflowporenetwork/couplingconditions.hh:31
Coupling manager for coupling freeflow and pore-network models.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:147
auto insideAndOutsideDensity(const Element< freeFlowMomentumIndex > &element, const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const SubControlVolumeFace< freeFlowMomentumIndex > &scvf, const bool considerPreviousTimeStep=false) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:366
bool isCoupled(Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ, const SubControlVolumeFace< i > &scvf) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:420
void init(std::shared_ptr< Problem< freeFlowMomentumIndex > > freeFlowMomentumProblem, std::shared_ptr< Problem< freeFlowMassIndex > > freeFlowMassProblem, std::shared_ptr< Problem< poreNetworkIndex > > poreNetworkProblem, GridVarsTuple &&gridVarsTuple, const SolutionVector &curSol)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:192
Scalar density(const Element< freeFlowMomentumIndex > &element, const SubControlVolume< freeFlowMomentumIndex > &scv, const bool considerPreviousTimeStep=false) const
Returns the density at a given sub control volume.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:379
static constexpr auto freeFlowMomentumIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:184
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.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:356
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.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:391
auto massCouplingCondition(Dune::index_constant< poreNetworkIndex > domainI, Dune::index_constant< freeFlowMassIndex > domainJ, const FVElementGeometry< poreNetworkIndex > &fvGeometry, const typename FVElementGeometry< poreNetworkIndex >::SubControlVolume &scv, const ElementVolumeVariables< poreNetworkIndex > &elemVolVars) const
Returns the mass flux across the coupling boundary.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:236
const auto & couplingStencil(Dune::index_constant< freeFlowMomentumIndex > domainI, const Element< freeFlowMomentumIndex > &elementI, const SubControlVolume< freeFlowMomentumIndex > &scvI, Dune::index_constant< j > domainJ) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:469
static constexpr auto freeFlowMassIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:185
typename ParentType::template SubCouplingManager< i, j > SubCouplingManager
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:182
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.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:330
const Problem< i > & problem(Dune::index_constant< i > domainI) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:412
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 volum...
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:345
NumEqVector< freeFlowMomentumIndex > momentumCouplingCondition(Dune::index_constant< freeFlowMomentumIndex > domainI, Dune::index_constant< poreNetworkIndex > domainJ, const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const typename FVElementGeometry< freeFlowMomentumIndex >::SubControlVolumeFace &scvf, const ElementVolumeVariables< freeFlowMomentumIndex > &elemVolVars) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:279
Scalar coupledPoreInscribedRadius(const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const typename FVElementGeometry< freeFlowMomentumIndex >::SubControlVolumeFace &scvf) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:295
auto faceVelocity(const Element< freeFlowMassIndex > &element, const SubControlVolumeFace< freeFlowMassIndex > &scvf) const
Returns the velocity at a given sub control volume face.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:403
auto interfaceThroatVelocity(const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const typename FVElementGeometry< freeFlowMomentumIndex >::SubControlVolumeFace &scvf) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:314
static constexpr auto poreNetworkIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:186
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.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:436
auto massCouplingCondition(Dune::index_constant< freeFlowMassIndex > domainI, Dune::index_constant< poreNetworkIndex > domainJ, const FVElementGeometry< freeFlowMassIndex > &fvGeometry, const typename FVElementGeometry< freeFlowMassIndex >::SubControlVolumeFace &scvf, const ElementVolumeVariables< freeFlowMassIndex > &elemVolVars) const
Returns the mass flux across the coupling boundary.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:262
Coupling manager that combines an arbitrary number of binary coupling manager (coupling two domains e...
Definition: multibinarycouplingmanager.hh:50
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.
Definition: multibinarycouplingmanager.hh:203
Coupling mapper for staggered free-flow and pore-network models.
Definition: boundary/freeflowporenetwork/couplingmapper.hh:42
Defines all properties used in Dumux.
Coupling conditions specialized for different discretization schemes.
typename Detail::FreeFlowCouplingManagerSelector< Traits >::type FreeFlowCouplingManager
The interface of the coupling manager for free flow systems.
Definition: multidomain/freeflow/couplingmanager.hh:47
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition: propertysystem.hh:296
Freeflow coupling managers (Navier-Stokes mass-momentum coupling)
constexpr auto coupledDomains(Dune::index_constant< i > domainI)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:64
constexpr auto globalToLocalDomainIndices(Dune::index_constant< i >, Dune::index_constant< j >)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:75
static constexpr auto freeFlowMassIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:35
static constexpr auto freeFlowMomentumIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:34
static constexpr auto freeFlowMomentumToPoreNetworkIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:40
static constexpr auto noCouplingIdx
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:42
static constexpr auto poreNetworkIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:36
static constexpr auto freeFlowMassToFreeFlowMomentumIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:39
constexpr auto makeCouplingManagerMap()
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:44
static constexpr auto freeFlowMassToPoreNetworkIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:41
Definition: adapt.hh:17
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:108
Dumux::FreeFlowCouplingManager< FreeFlowTraits > FreeFlowCouplingManager
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:125
typename MDTraits::template SubDomain< id >::TypeTag SubDomainTypeTag
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:110
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:87
static constexpr auto globalToLocal(Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:94
static constexpr auto managerMap()
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:88
static constexpr auto coupledDomains(Dune::index_constant< i > domainI)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:100
Definition: multidomain/traits.hh:134