3.5-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
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 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
25#ifndef DUMUX_MULTIDOMAIN_BOUNDARY_FREEFLOW_PORENETWORK_COUPLINGMANAGER_HH
26#define DUMUX_MULTIDOMAIN_BOUNDARY_FREEFLOW_PORENETWORK_COUPLINGMANAGER_HH
27
28#include <utility>
29#include <memory>
30
31#include <dune/common/indices.hh>
37
38#include "couplingconditions.hh"
39#include "couplingmapper.hh"
40
41namespace Dumux {
42
43namespace FreeFlowPoreNetworkDetail {
44
45// global subdomain indices
46static constexpr auto freeFlowMomentumIndex = Dune::index_constant<0>();
47static constexpr auto freeFlowMassIndex = Dune::index_constant<1>();
48static constexpr auto poreNetworkIndex = Dune::index_constant<2>();
49
50// coupling indices
51static constexpr auto freeFlowMassToFreeFlowMomentumIndex = Dune::index_constant<0>();
52static constexpr auto freeFlowMomentumToPoreNetworkIndex = Dune::index_constant<1>();
53static constexpr auto freeFlowMassToPoreNetworkIndex = Dune::index_constant<2>();
54static constexpr auto noCouplingIdx = Dune::index_constant<99>();
55
56constexpr auto makeCouplingManagerMap()
57{
58 auto map = std::array<std::array<std::size_t, 3>, 3>{};
59
60 // free flow (momentum-mass)
63
64 // free flow momentum - porous medium
67
68 // free flow mass - porous medium
71
72 return map;
73}
74
75template<std::size_t i>
76constexpr auto coupledDomains(Dune::index_constant<i> domainI)
77{
78 if constexpr (i == freeFlowMomentumIndex)
79 return std::make_tuple(freeFlowMassIndex, poreNetworkIndex);
80 else if constexpr (i == freeFlowMassIndex)
81 return std::make_tuple(freeFlowMomentumIndex, poreNetworkIndex);
82 else // i == poreNetworkIndex
83 return std::make_tuple(freeFlowMomentumIndex, freeFlowMassIndex);
84}
85
86template<std::size_t i, std::size_t j>
87constexpr auto globalToLocalDomainIndices(Dune::index_constant<i>, Dune::index_constant<j>)
88{
89 static_assert(i <= 2 && j <= 2);
90 static_assert(i != j);
91
92 if constexpr (i < j)
93 return std::pair<Dune::index_constant<0>, Dune::index_constant<1>>{};
94 else
95 return std::pair<Dune::index_constant<1>, Dune::index_constant<0>>{};
96}
97
99{
100 static constexpr auto managerMap()
101 {
103 }
104
105 template<std::size_t i, std::size_t j>
106 static constexpr auto globalToLocal(Dune::index_constant<i> domainI, Dune::index_constant<j> domainJ)
107 {
109 }
110
111 template<std::size_t i>
112 static constexpr auto coupledDomains(Dune::index_constant<i> domainI)
113 {
115 }
116};
117
118template<class MDTraits>
120{
121 template<std::size_t id>
122 using SubDomainTypeTag = typename MDTraits::template SubDomain<id>::TypeTag;
123
126 >;
127
130 >;
131
134 >;
135
142};
143
144} // end namespace Detail
145
150template<class MDTraits>
153 MDTraits,
154 FreeFlowPoreNetworkDetail::CouplingMaps,
155 typename FreeFlowPoreNetworkDetail::CouplingManagers<MDTraits>::FreeFlowCouplingManager,
156 typename FreeFlowPoreNetworkDetail::CouplingManagers<MDTraits>::FreeFlowMomentumPoreNetworkCouplingManager,
157 typename FreeFlowPoreNetworkDetail::CouplingManagers<MDTraits>::FreeFlowMassPoreNetworkCouplingManager
158>
159{
161 MDTraits,
166 >;
167
169
170 using Scalar = typename MDTraits::Scalar;
171
172 // the sub domain type tags
173 template<std::size_t id>
174 using SubDomainTypeTag = typename MDTraits::template SubDomain<id>::TypeTag;
175
176 template<std::size_t id> using Problem = GetPropType<SubDomainTypeTag<id>, Properties::Problem>;
177 template<std::size_t id> using GridGeometry = GetPropType<SubDomainTypeTag<id>, Properties::GridGeometry>;
178 template<std::size_t id> using FVElementGeometry = typename GridGeometry<id>::LocalView;
179 template<std::size_t id> using SubControlVolumeFace = typename FVElementGeometry<id>::SubControlVolumeFace;
180 template<std::size_t id> using SubControlVolume = typename FVElementGeometry<id>::SubControlVolume;
181 template<std::size_t id> using ElementVolumeVariables = typename GetPropType<SubDomainTypeTag<id>, Properties::GridVolumeVariables>::LocalView;
182 template<std::size_t id> using NumEqVector = typename Problem<id>::Traits::NumEqVector;
183
184 template<std::size_t id> using GridView = typename GridGeometry<id>::GridView;
185 template<std::size_t id> using Element = typename GridView<id>::template Codim<0>::Entity;
186 using SolutionVector = typename MDTraits::SolutionVector;
187
190
191public:
192
193 template<std::size_t i, std::size_t j>
194 using SubCouplingManager = typename ParentType::template SubCouplingManager<i, j>;
195
199
200public:
201 using ParentType::ParentType;
202
203 template<class GridVarsTuple>
204 void init(std::shared_ptr<Problem<freeFlowMomentumIndex>> freeFlowMomentumProblem,
205 std::shared_ptr<Problem<freeFlowMassIndex>> freeFlowMassProblem,
206 std::shared_ptr<Problem<poreNetworkIndex>> poreNetworkProblem,
207 GridVarsTuple&& gridVarsTuple,
208 const SolutionVector& curSol)
209 {
210 this->updateSolution(curSol); // generic coupling manager stores tuple of shared_ptr
211
212 auto couplingMapper = std::make_shared<CouplingMapper>();
213 couplingMapper->update(freeFlowMomentumProblem->gridGeometry(),
214 freeFlowMassProblem->gridGeometry(),
215 poreNetworkProblem->gridGeometry()
216 );
217
218 // initialize the binary sub coupling managers
220 std::get<0>(ffSolVecTuple) = std::get<freeFlowMomentumIndex>(this->curSol());
221 std::get<1>(ffSolVecTuple) = std::get<freeFlowMassIndex>(this->curSol());
223 freeFlowMomentumProblem, freeFlowMassProblem,
224 std::make_tuple(std::get<freeFlowMomentumIndex>(gridVarsTuple), std::get<freeFlowMassIndex>(gridVarsTuple)),
225 ffSolVecTuple
226 );
227
229 std::get<0>(ffMassPmSolVecTuple) = std::get<freeFlowMassIndex>(this->curSol());
230 std::get<1>(ffMassPmSolVecTuple) = std::get<poreNetworkIndex>(this->curSol());
232 freeFlowMassProblem, poreNetworkProblem, couplingMapper, ffMassPmSolVecTuple
233 );
234
236 std::get<0>(ffMomentumPmSolVecTuple) = std::get<freeFlowMomentumIndex>(this->curSol());
237 std::get<1>(ffMomentumPmSolVecTuple) = std::get<poreNetworkIndex>(this->curSol());
239 freeFlowMomentumProblem, poreNetworkProblem,
240 std::make_tuple(std::get<freeFlowMomentumIndex>(gridVarsTuple), std::get<poreNetworkIndex>(gridVarsTuple)),
241 couplingMapper, ffMomentumPmSolVecTuple
242 );
243 }
244
248 auto massCouplingCondition(Dune::index_constant<poreNetworkIndex> domainI, Dune::index_constant<freeFlowMassIndex> domainJ,
249 const FVElementGeometry<poreNetworkIndex>& fvGeometry,
250 const typename FVElementGeometry<poreNetworkIndex>::SubControlVolume& scv,
251 const ElementVolumeVariables<poreNetworkIndex>& elemVolVars) const
252 {
253
254 const auto& couplingContext = this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj) -> const auto& {
255 return cm.couplingContext(ii, fvGeometry, scv);
256 });
257
258 const auto& freeFlowMassGridGeometry = this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj) -> const auto& {
259 return cm.problem(jj).gridGeometry();
260 });
261
262 for (auto& c : couplingContext)
263 {
264 const auto& freeFlowElement = freeFlowMassGridGeometry.element(c.scv.elementIndex());
265 c.velocity = this->subCouplingManager(freeFlowMomentumIndex, freeFlowMassIndex).faceVelocity(freeFlowElement, c.scvf);
266 }
267
268 return CouplingConditions::massCouplingCondition(domainI, domainJ, fvGeometry, scv, elemVolVars, couplingContext);
269 }
270
274 auto massCouplingCondition(Dune::index_constant<freeFlowMassIndex> domainI, Dune::index_constant<poreNetworkIndex> domainJ,
275 const FVElementGeometry<freeFlowMassIndex>& fvGeometry,
276 const typename FVElementGeometry<freeFlowMassIndex>::SubControlVolumeFace& scvf,
277 const ElementVolumeVariables<freeFlowMassIndex>& elemVolVars) const
278 {
279
280 const auto& couplingContext = this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj) -> const auto& {
281 return cm.couplingContext(ii, fvGeometry, scvf);
282 });
283
284 couplingContext.velocity = this->subCouplingManager(freeFlowMomentumIndex, freeFlowMassIndex).faceVelocity(fvGeometry.element(), scvf);
285 return CouplingConditions::massCouplingCondition(domainI, domainJ, fvGeometry, scvf, elemVolVars, couplingContext);
286 }
287
290
291 NumEqVector<freeFlowMomentumIndex> momentumCouplingCondition(Dune::index_constant<freeFlowMomentumIndex> domainI,
292 Dune::index_constant<poreNetworkIndex> domainJ,
293 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
294 const typename FVElementGeometry<freeFlowMomentumIndex>::SubControlVolumeFace& scvf,
295 const ElementVolumeVariables<freeFlowMomentumIndex>& elemVolVars) const
296 {
297 if (scvf.isLateral())
298 return NumEqVector<freeFlowMomentumIndex>(0.0);
299
300 const auto& context = this->subCouplingManager(freeFlowMomentumIndex, poreNetworkIndex).couplingContext(
301 fvGeometry, scvf
302 );
303
304 return CouplingConditions::momentumCouplingCondition(fvGeometry, scvf, elemVolVars, context);
305 }
306
307 Scalar coupledPoreInscribedRadius(const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
308 const typename FVElementGeometry<freeFlowMomentumIndex>::SubControlVolumeFace& scvf) const
309 {
310 const auto& context = this->subCouplingManager(freeFlowMomentumIndex, poreNetworkIndex).couplingContext(
311 fvGeometry, scvf
312 );
313
314 const auto& pnmScv = [&]
315 {
316 for (const auto& scv : scvs(context.fvGeometry))
317 if (scv.dofIndex() == context.poreNetworkDofIdx)
318 return scv;
319
320 DUNE_THROW(Dune::InvalidStateException, "No scv found");
321 }();
322
323 return context.elemVolVars[pnmScv].poreInscribedRadius();
324 }
325
326 auto interfaceThroatVelocity(const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
327 const typename FVElementGeometry<freeFlowMomentumIndex>::SubControlVolumeFace& scvf) const
328 {
329 const auto& context = this->subCouplingManager(freeFlowMomentumIndex, poreNetworkIndex).couplingContext(
330 fvGeometry, scvf
331 );
332
333 return CouplingConditions::interfaceThroatVelocity(fvGeometry, scvf, context);
334 }
335
336 // //////////////////////// Conditions for FreeFlowMomentum - FreeFlowMass coupling //////////
337 // ///////////////////////////////////////////////////////////////////////////////////////////
338
342 Scalar pressure(const Element<freeFlowMomentumIndex>& element,
343 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
344 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf) const
345 {
347 element, fvGeometry, scvf
348 );
349 }
350
357 Scalar cellPressure(const Element<freeFlowMomentumIndex>& element,
358 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf) const
359 {
361 element, scvf
362 );
363 }
364
368 Scalar density(const Element<freeFlowMomentumIndex>& element,
369 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
370 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf,
371 const bool considerPreviousTimeStep = false) const
372 {
374 element, fvGeometry, scvf, considerPreviousTimeStep
375 );
376 }
377
378 auto insideAndOutsideDensity(const Element<freeFlowMomentumIndex>& element,
379 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
380 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf,
381 const bool considerPreviousTimeStep = false) const
382 {
383 return this->subCouplingManager(freeFlowMomentumIndex, freeFlowMassIndex).insideAndOutsideDensity(
384 element, fvGeometry, scvf, considerPreviousTimeStep
385 );
386 }
387
391 Scalar density(const Element<freeFlowMomentumIndex>& element,
392 const SubControlVolume<freeFlowMomentumIndex>& scv,
393 const bool considerPreviousTimeStep = false) const
394 {
396 element, scv, considerPreviousTimeStep
397 );
398 }
399
403 Scalar effectiveViscosity(const Element<freeFlowMomentumIndex>& element,
404 const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry,
405 const SubControlVolumeFace<freeFlowMomentumIndex>& scvf) const
406 {
407 return this->subCouplingManager(freeFlowMomentumIndex, freeFlowMassIndex).effectiveViscosity(
408 element, fvGeometry, scvf
409 );
410 }
411
415 auto faceVelocity(const Element<freeFlowMassIndex>& element,
416 const SubControlVolumeFace<freeFlowMassIndex>& scvf) const
417 {
419 element, scvf
420 );
421 }
422
423 template<std::size_t i>
424 const Problem<i>& problem(Dune::index_constant<i> domainI) const
425 {
426 return this->subApply(domainI, [&](const auto& cm, auto&& ii) -> const auto& {
427 return cm.problem(ii);
428 });
429 }
430
431 template<std::size_t i, std::size_t j>
432 bool isCoupled(Dune::index_constant<i> domainI,
433 Dune::index_constant<j> domainJ,
434 const SubControlVolumeFace<i>& scvf) const
435 {
436 return this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj){
437 return cm.isCoupled(ii, scvf);
438 });
439 }
440
447 template<std::size_t i, std::size_t j>
448 bool isCoupled(Dune::index_constant<i> domainI,
449 Dune::index_constant<j> domainJ,
450 const SubControlVolume<i>& scv) const
451 {
452 return this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj){
453 return cm.isCoupled(ii, scv);
454 });
455 }
456
457 // /*!
458 // * \brief Returns whether a given scvf is coupled to the other domain
459 // */
460 // bool isCoupledLateralScvf(Dune::index_constant<freeFlowMomentumIndex> domainI,
461 // Dune::index_constant<poreNetworkIndex> domainJ,
462 // const SubControlVolumeFace<freeFlowMomentumIndex>& scvf) const
463 // {
464 // return this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj){
465 // return cm.isCoupledLateralScvf(ii, scvf);
466 // });
467 // }
468
469
480 template<std::size_t j>
481 const auto& couplingStencil(Dune::index_constant<freeFlowMomentumIndex> domainI,
482 const Element<freeFlowMomentumIndex>& elementI,
483 const SubControlVolume<freeFlowMomentumIndex>& scvI,
484 Dune::index_constant<j> domainJ) const
485 {
486 static_assert(freeFlowMomentumIndex != j);
487 return this->subApply(domainI, domainJ, [&](const auto& cm, auto&& ii, auto&& jj) -> const auto& {
488 return cm.couplingStencil(ii, elementI, scvI, jj);
489 });
490 }
491};
492
493} // end namespace Dumux
494
495#endif
Definition: adapt.hh:29
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property
Definition: propertysystem.hh:150
constexpr auto coupledDomains(Dune::index_constant< i > domainI)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:76
constexpr auto globalToLocalDomainIndices(Dune::index_constant< i >, Dune::index_constant< j >)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:87
static constexpr auto freeFlowMassIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:47
static constexpr auto freeFlowMomentumIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:46
static constexpr auto freeFlowMomentumToPoreNetworkIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:52
static constexpr auto noCouplingIdx
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:54
static constexpr auto poreNetworkIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:48
static constexpr auto freeFlowMassToFreeFlowMomentumIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:51
constexpr auto makeCouplingManagerMap()
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:56
static constexpr auto freeFlowMassToPoreNetworkIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:53
Property to specify the type of a problem which has to be solved.
Definition: common/properties.hh:57
Definition: common/properties.hh:102
The type for a global container for the volume variables.
Definition: common/properties.hh:109
Definition: freeflowporenetwork/couplingconditions.hh:43
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:99
static constexpr auto globalToLocal(Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:106
static constexpr auto managerMap()
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:100
static constexpr auto coupledDomains(Dune::index_constant< i > domainI)
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:112
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:120
typename MDTraits::template SubDomain< id >::TypeTag SubDomainTypeTag
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:122
Coupling manager for coupling freeflow and pore-network models.
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:159
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:378
bool isCoupled(Dune::index_constant< i > domainI, Dune::index_constant< j > domainJ, const SubControlVolumeFace< i > &scvf) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:432
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:204
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:391
static constexpr auto freeFlowMomentumIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:196
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:368
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:403
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:248
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:481
static constexpr auto freeFlowMassIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:197
typename ParentType::template SubCouplingManager< i, j > SubCouplingManager
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:194
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:342
const Problem< i > & problem(Dune::index_constant< i > domainI) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:424
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:357
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:291
Scalar coupledPoreInscribedRadius(const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const typename FVElementGeometry< freeFlowMomentumIndex >::SubControlVolumeFace &scvf) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:307
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:415
auto interfaceThroatVelocity(const FVElementGeometry< freeFlowMomentumIndex > &fvGeometry, const typename FVElementGeometry< freeFlowMomentumIndex >::SubControlVolumeFace &scvf) const
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:326
static constexpr auto poreNetworkIndex
Definition: multidomain/boundary/freeflowporenetwork/couplingmanager.hh:198
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:448
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:274
Coupling mapper for staggered free-flow and pore-network models.
Definition: boundary/freeflowporenetwork/couplingmapper.hh:54
Coupling manager for free-flow mass and pore-network models.
Definition: multidomain/boundary/freeflowporenetwork/ffmassporenetwork/couplingmanager.hh:47
Coupling manager for free-flow momentum and pore-network models.
Definition: multidomain/boundary/freeflowporenetwork/ffmomentumporenetwork/couplingmanager.hh:47
Coupling manager that combines an arbitrary number of binary coupling manager (coupling two domains e...
Definition: multibinarycouplingmanager.hh:62
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:215
The interface of the coupling manager for free flow systems.
Definition: multidomain/staggeredfreeflow/couplingmanager.hh:53
Definition: multidomain/traits.hh:141
Declares all properties used in Dumux.
The interface of the coupling manager for multi domain problems.