Line | Branch | Exec | Source |
---|---|---|---|
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-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder | ||
5 | // SPDX-License-Identifier: GPL-3.0-or-later | ||
6 | // | ||
7 | /*! | ||
8 | * \file | ||
9 | * \ingroup MultiDomain | ||
10 | * \ingroup Assembly | ||
11 | * \brief Subdomain-specific views on multidomain assemblers. | ||
12 | */ | ||
13 | #ifndef DUMUX_MULTIDOMAIN_ASSEMBLER_VIEW_HH | ||
14 | #define DUMUX_MULTIDOMAIN_ASSEMBLER_VIEW_HH | ||
15 | |||
16 | #include <dune/common/hybridutilities.hh> | ||
17 | #include <dune/common/std/type_traits.hh> | ||
18 | |||
19 | namespace Dumux { | ||
20 | |||
21 | /*! | ||
22 | * \ingroup MultiDomain | ||
23 | * \ingroup Assembly | ||
24 | * \brief Subdomain-specific view on a multidomain assembler. | ||
25 | * Allows retrieval of sub-domain specific objects w/o passing a domain id. | ||
26 | * \todo This is not necessarily fv-specifiv (could be in other header). | ||
27 | * \todo Can we get rid of some of the interfaces? | ||
28 | */ | ||
29 | template<typename MDAssembler, std::size_t domainId> | ||
30 | class MultiDomainAssemblerSubDomainView | ||
31 | { | ||
32 | static constexpr Dune::index_constant<domainId> myId{}; | ||
33 | |||
34 | template<class A> | ||
35 | using HasStaticIsImplicitCheck = decltype(A::isImplicit()); | ||
36 | |||
37 | template<class A> | ||
38 | static constexpr bool hasStaticIsImplicit = Dune::Std::is_detected<HasStaticIsImplicitCheck, A>::value; | ||
39 | |||
40 | public: | ||
41 | using CouplingManager = typename MDAssembler::CouplingManager; | ||
42 | using SolutionVector = typename MDAssembler::SolutionVector; | ||
43 | |||
44 | 39027620 | MultiDomainAssemblerSubDomainView(MDAssembler& assembler, Dune::index_constant<domainId>) | |
45 |
1/2✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
|
39027620 | : assembler_{assembler} |
46 | {} | ||
47 | |||
48 | template<std::size_t i> | ||
49 |
6/12✓ Branch 1 taken 7667643 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24470694 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1627320 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 150616 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 163489 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2892000 times.
✗ Branch 17 not taken.
|
38759495 | auto localResidual(Dune::index_constant<i> id) const { return assembler_.localResidual(id); } |
50 | auto localResidual() const { return assembler_.localResidual(myId); } | ||
51 | |||
52 | template<std::size_t i> | ||
53 |
49/53✓ Branch 0 taken 531289 times.
✓ Branch 1 taken 52191572 times.
✓ Branch 2 taken 14896 times.
✓ Branch 3 taken 10609997 times.
✓ Branch 4 taken 6908877 times.
✓ Branch 5 taken 6827966 times.
✓ Branch 6 taken 1632828 times.
✓ Branch 7 taken 61550597 times.
✓ Branch 9 taken 8575587 times.
✓ Branch 10 taken 42 times.
✓ Branch 12 taken 5507660 times.
✓ Branch 13 taken 1658726 times.
✓ Branch 15 taken 20538027 times.
✓ Branch 16 taken 46 times.
✓ Branch 18 taken 10030772 times.
✓ Branch 19 taken 15 times.
✓ Branch 21 taken 1308542 times.
✓ Branch 22 taken 16 times.
✓ Branch 24 taken 712274 times.
✓ Branch 25 taken 858511 times.
✓ Branch 29 taken 3094066 times.
✓ Branch 30 taken 119 times.
✓ Branch 32 taken 15 times.
✓ Branch 33 taken 5 times.
✓ Branch 11 taken 2769786 times.
✓ Branch 14 taken 325729 times.
✓ Branch 20 taken 4290222 times.
✓ Branch 23 taken 325729 times.
✓ Branch 17 taken 71 times.
✓ Branch 26 taken 5711491 times.
✓ Branch 27 taken 929333 times.
✓ Branch 28 taken 712454 times.
✓ Branch 31 taken 1203230 times.
✓ Branch 8 taken 102 times.
✓ Branch 36 taken 4 times.
✓ Branch 37 taken 413043 times.
✓ Branch 39 taken 3 times.
✓ Branch 40 taken 413045 times.
✓ Branch 34 taken 3 times.
✓ Branch 41 taken 2 times.
✓ Branch 43 taken 4 times.
✓ Branch 44 taken 1 times.
✓ Branch 35 taken 15 times.
✓ Branch 38 taken 16 times.
✓ Branch 42 taken 1 times.
✓ Branch 45 taken 1 times.
✓ Branch 47 taken 1 times.
✗ Branch 48 not taken.
✗ Branch 46 not taken.
✓ Branch 50 taken 1 times.
✗ Branch 51 not taken.
✓ Branch 53 taken 1 times.
✗ Branch 54 not taken.
|
697927768 | const auto& problem(Dune::index_constant<i> id) const { return assembler_.problem(id); } |
54 | const auto& problem() const { return assembler_.problem(myId); } | ||
55 | |||
56 | template<std::size_t i> | ||
57 |
4/8✓ Branch 1 taken 7667055 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 25284622 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 962929 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2892000 times.
✗ Branch 11 not taken.
|
38594339 | const auto& gridGeometry(Dune::index_constant<i> id) const { return assembler_.gridGeometry(id); } |
58 | const auto& gridGeometry() const { return assembler_.gridGeometry(myId); } | ||
59 | |||
60 | template<std::size_t i> | ||
61 |
8/16✓ Branch 1 taken 7667307 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24734224 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 871842 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1524056 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100012 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100264 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 105781 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1928000 times.
✗ Branch 23 not taken.
|
41595597 | const auto& gridVariables(Dune::index_constant<i> id) const { return assembler_.gridVariables(id); } |
62 | const auto& gridVariables() const { return assembler_.gridVariables(myId); } | ||
63 | |||
64 |
5/9✓ Branch 3 taken 264000 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 100000 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 100000 times.
✗ Branch 10 not taken.
✗ Branch 2 not taken.
✓ Branch 5 taken 100000 times.
✓ Branch 8 taken 617000 times.
|
5845089 | const auto& prevSol() const { return assembler_.prevSol(); } |
65 |
17/20✓ Branch 0 taken 62725127 times.
✓ Branch 1 taken 18147401 times.
✓ Branch 2 taken 181957574 times.
✓ Branch 3 taken 31482039 times.
✓ Branch 4 taken 3557360 times.
✓ Branch 5 taken 6206731 times.
✓ Branch 6 taken 33405966 times.
✓ Branch 7 taken 20454957 times.
✓ Branch 8 taken 2907828 times.
✓ Branch 9 taken 11873984 times.
✓ Branch 10 taken 2919655 times.
✓ Branch 11 taken 32259 times.
✓ Branch 12 taken 371200 times.
✓ Branch 13 taken 150000 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2892000 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 100000 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1928000 times.
|
383925970 | bool isStationaryProblem() const { return assembler_.isStationaryProblem(); } |
66 | |||
67 | template<class A = MDAssembler, typename std::enable_if_t<hasStaticIsImplicit<A>, int> = 0> | ||
68 | static constexpr bool isImplicit() { return MDAssembler::isImplicit(); } | ||
69 | |||
70 | template<class A = MDAssembler, typename std::enable_if_t<!hasStaticIsImplicit<A>, int> = 0> | ||
71 |
4/8✗ Branch 1 not taken.
✓ Branch 2 taken 3456 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 3456 times.
✓ Branch 7 taken 165888 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13824 times.
✗ Branch 11 not taken.
|
203008 | bool isImplicit() const { return assembler_.isImplicit(); } |
72 | |||
73 | private: | ||
74 | MDAssembler& assembler_; | ||
75 | }; | ||
76 | |||
77 | } // end namespace Dumux | ||
78 | |||
79 | #endif | ||
80 |