13#ifndef DUMUX_MULTIDOMAIN_EMBEDDED_COUPLINGMANAGER_1D3D_LINE_HH
14#define DUMUX_MULTIDOMAIN_EMBEDDED_COUPLINGMANAGER_1D3D_LINE_HH
28 static std::string
name() {
return "line"; }
35template<
class MDTraits,
class CouplingMode>
36class Embedded1d3dCouplingManager;
46template<
class MDTraits>
47class Embedded1d3dCouplingManager<MDTraits, Embedded1d3dCouplingMode::Line>
48:
public EmbeddedCouplingManagerBase<MDTraits, Embedded1d3dCouplingManager<MDTraits, Embedded1d3dCouplingMode::Line>>
50 using ThisType = Embedded1d3dCouplingManager<MDTraits, Embedded1d3dCouplingMode::Line>;
51 using ParentType = EmbeddedCouplingManagerBase<MDTraits, ThisType>;
53 using Scalar =
typename MDTraits::Scalar;
54 using SolutionVector =
typename MDTraits::SolutionVector;
56 static constexpr auto bulkIdx =
typename MDTraits::template SubDomain<0>::Index();
57 static constexpr auto lowDimIdx =
typename MDTraits::template SubDomain<1>::Index();
60 template<std::
size_t id>
using SubDomainTypeTag =
typename MDTraits::template SubDomain<id>::TypeTag;
61 template<std::
size_t id>
using Problem = GetPropType<SubDomainTypeTag<id>, Properties::Problem>;
62 template<std::
size_t id>
using GridGeometry = GetPropType<SubDomainTypeTag<id>, Properties::GridGeometry>;
63 template<std::
size_t id>
using GridView =
typename GridGeometry<id>::GridView;
64 template<std::
size_t id>
using Element =
typename GridView<id>::template Codim<0>::Entity;
65 template<std::
size_t id>
using GridIndex =
typename IndexTraits<GridView<id>>::GridIndex;
68 static constexpr Embedded1d3dCouplingMode::Line couplingMode{};
70 using ParentType::ParentType;
72 void init(std::shared_ptr<Problem<bulkIdx>> bulkProblem,
73 std::shared_ptr<Problem<lowDimIdx>> lowDimProblem,
74 const SolutionVector& curSol)
76 ParentType::init(bulkProblem, lowDimProblem, curSol);
77 computeLowDimVolumeFractions();
81 void computeLowDimVolumeFractions()
84 lowDimVolumeInBulkElement_.resize(this->gridView(bulkIdx).size(0));
86 const auto& lowDimGridGeometry = this->problem(lowDimIdx).gridGeometry();
87 const auto& bulkGridGeometry = this->problem(bulkIdx).gridGeometry();
90 for (
const auto& is : intersections(this->glue()))
93 const auto& inside = is.targetEntity(0);
94 const auto intersectionGeometry = is.geometry();
95 const auto lowDimElementIdx = lowDimGridGeometry.elementMapper().index(inside);
98 const auto radius = this->problem(lowDimIdx).spatialParams().radius(lowDimElementIdx);
99 for (
int outsideIdx = 0; outsideIdx < is.numDomainNeighbors(); ++outsideIdx)
101 const auto& outside = is.domainEntity(outsideIdx);
102 const auto bulkElementIdx = bulkGridGeometry.elementMapper().index(outside);
103 lowDimVolumeInBulkElement_[bulkElementIdx] += intersectionGeometry.volume()*M_PI*radius*radius;
114 Scalar radius(std::size_t
id)
const
116 const auto& data = this->pointSourceData()[id];
117 return this->problem(lowDimIdx).spatialParams().radius(data.lowDimElementIdx());
122 Scalar lowDimVolume(
const Element<bulkIdx>& element)
const
124 const auto eIdx = this->problem(bulkIdx).gridGeometry().elementMapper().index(element);
125 return lowDimVolumeInBulkElement_[eIdx];
130 Scalar lowDimVolumeFraction(
const Element<bulkIdx>& element)
const
132 const auto totalVolume =
element.geometry().volume();
133 return lowDimVolume(element) / totalVolume;
140 std::vector<Scalar> lowDimVolumeInBulkElement_;
144template<
class MDTraits>
146:
public std::true_type {};
Manages the coupling between bulk elements and lower dimensional elements Point sources on each integ...
Definition couplingmanager1d3d.hh:24
Defines all properties used in Dumux.
Coupling manager for low-dimensional domains embedded in the bulk domain. Point sources on each integ...
Definition couplingmanager1d3d_average.hh:34
constexpr Line line
Definition couplingmanager1d3d_line.hh:31
Type trait that is specialized for coupling manager supporting multithreaded assembly.
Definition multistagemultidomainfvassembler.hh:78
Definition couplingmanager1d3d_line.hh:27
static std::string name()
Definition couplingmanager1d3d_line.hh:28
Helper class to create (named and comparable) tagged types Tags any given type. The tagged type is eq...
Definition tag.hh:30
Helper class to create (named and comparable) tagged types.