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.