25#ifndef DUMUX_MULTIDOMAIN_EMBEDDED_COUPLINGMANAGER_1D3D_LINE_HH
26#define DUMUX_MULTIDOMAIN_EMBEDDED_COUPLINGMANAGER_1D3D_LINE_HH
38namespace Embedded1d3dCouplingMode {
40 static std::string
name() {
return "line"; }
47template<
class MDTraits,
class CouplingMode>
48class Embedded1d3dCouplingManager;
58template<
class MDTraits>
65 using Scalar =
typename MDTraits::Scalar;
66 using SolutionVector =
typename MDTraits::SolutionVector;
68 static constexpr auto bulkIdx =
typename MDTraits::template SubDomain<0>::Index();
69 static constexpr auto lowDimIdx =
typename MDTraits::template SubDomain<1>::Index();
72 template<std::
size_t id>
using SubDomainTypeTag =
typename MDTraits::template SubDomain<id>::TypeTag;
75 template<std::
size_t id>
using GridView =
typename GridGeometry<id>::GridView;
76 template<std::
size_t id>
using Element =
typename GridView<id>::template Codim<0>::Entity;
82 using ParentType::ParentType;
84 void init(std::shared_ptr<Problem<bulkIdx>> bulkProblem,
85 std::shared_ptr<Problem<lowDimIdx>> lowDimProblem,
86 const SolutionVector& curSol)
88 ParentType::init(bulkProblem, lowDimProblem, curSol);
89 computeLowDimVolumeFractions();
96 lowDimVolumeInBulkElement_.resize(this->gridView(bulkIdx).size(0));
98 const auto& lowDimGridGeometry = this->problem(lowDimIdx).gridGeometry();
99 const auto& bulkGridGeometry = this->problem(bulkIdx).gridGeometry();
102 for (
const auto& is : intersections(this->glue()))
105 const auto& inside = is.targetEntity(0);
106 const auto intersectionGeometry = is.geometry();
107 const auto lowDimElementIdx = lowDimGridGeometry.elementMapper().index(inside);
110 const auto radius = this->problem(lowDimIdx).spatialParams().radius(lowDimElementIdx);
111 for (
int outsideIdx = 0; outsideIdx < is.numDomainNeighbors(); ++outsideIdx)
113 const auto& outside = is.domainEntity(outsideIdx);
114 const auto bulkElementIdx = bulkGridGeometry.elementMapper().index(outside);
115 lowDimVolumeInBulkElement_[bulkElementIdx] += intersectionGeometry.volume()*M_PI*radius*radius;
128 const auto& data = this->pointSourceData()[id];
129 return this->problem(lowDimIdx).spatialParams().radius(data.lowDimElementIdx());
136 const auto eIdx = this->problem(bulkIdx).gridGeometry().elementMapper().index(element);
137 return lowDimVolumeInBulkElement_[eIdx];
144 const auto totalVolume = element.geometry().volume();
145 return lowDimVolume(element) / totalVolume;
152 std::vector<Scalar> lowDimVolumeInBulkElement_;
156template<
class MDTraits>
158:
public std::true_type {};
Coupling manager for low-dimensional domains embedded in the bulk domain. Point sources on each integ...
Helper class to create (named and comparable) tagged types.
Defines the index types used for grid and local indices.
Adaption of the non-isothermal two-phase two-component flow model to problems with CO2.
Definition: adapt.hh:29
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition: propertysystem.hh:180
constexpr Line line
Definition: couplingmanager1d3d_line.hh:43
Structure to define the index types used for grid and local indices.
Definition: indextraits.hh:38
Property to specify the type of a problem which has to be solved.
Definition: common/properties.hh:55
Definition: common/properties.hh:100
Helper class to create (named and comparable) tagged types Tags any given type. The tagged type is eq...
Definition: tag.hh:42
Manages the coupling between bulk elements and lower dimensional elements Point sources on each integ...
Definition: couplingmanager1d3d.hh:36
Definition: couplingmanager1d3d_line.hh:39
static std::string name()
Definition: couplingmanager1d3d_line.hh:40
Manages the coupling between bulk elements and lower dimensional elements Point sources on each integ...
Definition: couplingmanager1d3d_line.hh:61
Scalar lowDimVolume(const Element< bulkIdx > &element) const
The volume the lower dimensional domain occupies in the bulk domain element.
Definition: couplingmanager1d3d_line.hh:134
void computeLowDimVolumeFractions()
Compute the low dim volume fraction in the bulk domain cells.
Definition: couplingmanager1d3d_line.hh:93
Scalar radius(std::size_t id) const
Methods to be accessed by the subproblems.
Definition: couplingmanager1d3d_line.hh:126
void init(std::shared_ptr< Problem< bulkIdx > > bulkProblem, std::shared_ptr< Problem< lowDimIdx > > lowDimProblem, const SolutionVector &curSol)
Definition: couplingmanager1d3d_line.hh:84
Scalar lowDimVolumeFraction(const Element< bulkIdx > &element) const
The volume fraction the lower dimensional domain occupies in the bulk domain element.
Definition: couplingmanager1d3d_line.hh:142
Manages the coupling between bulk elements and lower dimensional elements Point sources on each integ...
Definition: couplingmanagerbase.hh:83
trait that is specialized for coupling manager supporting multithreaded assembly
Definition: multidomain/fvassembler.hh:85
Declares all properties used in Dumux.