12#ifndef DUMUX_IO_GRID_PORENETWORK_SUBGRID_DATA_HH 
   13#define DUMUX_IO_GRID_PORENETWORK_SUBGRID_DATA_HH 
   25template<
class HostGr
id, 
class SubGr
id>
 
   28    static constexpr int dim = SubGrid::dimension;
 
   29    static constexpr int dimWorld = SubGrid::dimensionworld;
 
   30    using Intersection = 
typename SubGrid::LeafIntersection;
 
   31    using Element = 
typename SubGrid::template Codim<0>::Entity;
 
   32    using Vertex = 
typename SubGrid::template Codim<dim>::Entity;
 
   33    using GridView = 
typename SubGrid::LeafGridView;
 
   34    using GlobalPosition = 
typename Element::Geometry::GlobalCoordinate;
 
   41    , hostGridData_(hostGridData)
 
 
   48    const std::vector<double>& 
parameters(
const Vertex& vertex)
 const 
   49    { 
return hostGridData_->parameters(vertex.impl().hostEntity()); }
 
 
   54    const std::vector<double>& 
parameters(
const Element& element)
 const 
   55    { 
return hostGridData_->parameters(element.impl().hostEntity()); }
 
 
   60    auto getParameter(
const Element& element, 
const std::string& param)
 const 
   61    { 
return hostGridData_->getParameter(element.impl().hostEntity(), param); }
 
 
   66    auto getParameter(
const Vertex& vertex, 
const std::string& param)
 const 
   67    { 
return hostGridData_->getParameter(vertex.impl().hostEntity(), param); }
 
 
   72    template <
class Gr
idImp, 
class IntersectionImp>
 
   73    const Dune::DGFBoundaryParameter::type& 
parameters(
const Dune::Intersection<GridImp, IntersectionImp>& intersection)
 const 
   74    { 
return hostGridData_->parameters(intersection); }
 
 
   82    { 
return hostGridData_->throatLabel(element.impl().hostEntity()); }
 
 
   90    { 
return hostGridData_->boundaryFaceMarkerAtPos(pos); }
 
 
   97        const auto gridView = subGrid_.leafGridView();
 
   99        std::vector<SmallLocalIndex>  coordinationNumbers(gridView.size(dim), 0);
 
  101        for (
const auto &element : elements(gridView))
 
  103            for (SmallLocalIndex vIdxLocal = 0; vIdxLocal < 2; ++vIdxLocal)
 
  105                const auto vIdxGlobal = gridView.indexSet().subIndex(element, vIdxLocal, dim);
 
  106                coordinationNumbers[vIdxGlobal] += 1;
 
  110        if (std::any_of(coordinationNumbers.begin(), coordinationNumbers.end(), [](
auto i){ return i == 0; }))
 
  111            DUNE_THROW(Dune::InvalidStateException, 
"One of the pores is not connected to another pore. SanitizeGrid will not help in this case. Check your grid file");
 
  113        return coordinationNumbers;
 
 
  120    { 
return hostGridData_->parameterIndex(paramName); }
 
 
  127    { 
return hostGridData_->paramGroup(); }
 
 
  133    { 
return hostGridData_->gridHasElementParameter(param); }
 
 
  139    { 
return hostGridData_->gridHasVertexParameter(param); }
 
 
  145    { 
return hostGridData_->vertexParameterNames() ; }
 
 
  151    { 
return hostGridData_->elementParameterNames() ; }
 
 
  154    const SubGrid& subGrid_;
 
  155    std::shared_ptr<const GridData<HostGrid>> hostGridData_;
 
 
Class for grid data attached to dgf or gmsh grid files.
Definition porenetwork/griddata.hh:44
auto getParameter(const Element &element, const std::string ¶m) const
Returns the value of an element parameter.
Definition subgriddata.hh:60
std::vector< SmallLocalIndex > getCoordinationNumbers() const
Returns the coordination numbers for all pore bodies.
Definition subgriddata.hh:95
int parameterIndex(const std::string ¶mName) const
Return the index for a given parameter name.
Definition subgriddata.hh:119
SubGridData(const SubGrid &subGrid, std::shared_ptr< const GridData< HostGrid > > hostGridData)
Definition subgriddata.hh:38
bool gridHasElementParameter(const std::string ¶m) const
Return if a given element parameter is provided by the grid.
Definition subgriddata.hh:132
const std::string & paramGroup() const
Return the parameter group.
Definition subgriddata.hh:126
const std::vector< double > & parameters(const Element &element) const
Call the parameters function of the DGF grid pointer if available for element data.
Definition subgriddata.hh:54
auto throatLabel(const Element &element) const
Computes and returns the label of a given throat.
Definition subgriddata.hh:81
const std::vector< std::string > & vertexParameterNames() const
Returns the names of the vertex parameters.
Definition subgriddata.hh:144
const std::vector< double > & parameters(const Vertex &vertex) const
Call the parameters function of the DGF grid pointer if available for vertex data.
Definition subgriddata.hh:48
auto getParameter(const Vertex &vertex, const std::string ¶m) const
Returns the value of an vertex parameter.
Definition subgriddata.hh:66
bool gridHasVertexParameter(const std::string ¶m) const
Return if a given vertex parameter is provided by the grid.
Definition subgriddata.hh:138
const Dune::DGFBoundaryParameter::type & parameters(const Dune::Intersection< GridImp, IntersectionImp > &intersection) const
Call the parameters function of the DGF grid pointer if available.
Definition subgriddata.hh:73
const std::vector< std::string > & elementParameterNames() const
Returns the names of the element parameters.
Definition subgriddata.hh:150
int boundaryFaceMarkerAtPos(const GlobalPosition &pos) const
Returns the boundary face marker index at given position.
Definition subgriddata.hh:89
Definition discretization/porenetwork/fvelementgeometry.hh:24
Class for grid data attached to dgf or gmsh grid files.
std::uint_least8_t SmallLocalIndex
Definition indextraits.hh:29