13#ifndef DUMUX_IO_GRID_MANAGER_BASE_HH 
   14#define DUMUX_IO_GRID_MANAGER_BASE_HH 
   21#include <dune/common/exceptions.hh> 
   22#include <dune/common/classname.hh> 
   23#include <dune/common/parallel/communication.hh> 
   24#include <dune/common/parallel/mpihelper.hh> 
   25#include <dune/grid/io/file/dgfparser/dgfparser.hh> 
   26#include <dune/grid/io/file/gmshreader.hh> 
   27#include <dune/grid/common/gridfactory.hh> 
   28#include <dune/grid/utility/structuredgridfactory.hh> 
   53template <
class Gr
idType>
 
   63    void init(
const std::string& modelParamGroup = 
"")
 
   66            "The header with the GridManager specialization for your grid type is not included " 
   67            "or no specialization has been implemented!" 
   68            " In case of the latter, consider providing your own GridManager." 
 
   99        if (Dune::MPIHelper::instance().size() > 1)
 
  113                auto dh = 
gridData_->createGmshDataHandle();
 
  114                gridPtr()->loadBalance(dh.interface());
 
  115                gridPtr()->communicate(dh.interface(), Dune::InteriorBorder_All_Interface, Dune::ForwardCommunication);
 
  122                auto dh = 
gridData_->createVtkDataHandle();
 
  123                gridPtr()->loadBalance(dh.interface());
 
  124                gridPtr()->communicate(dh.interface(), Dune::InteriorBorder_All_Interface, Dune::ForwardCommunication);
 
 
  139            DUNE_THROW(Dune::IOError, 
"No grid data available");
 
 
  160            DUNE_THROW(Dune::InvalidStateException, 
"You are using DGF. To get the grid pointer use method dgfGridPtr()!");
 
 
  171            DUNE_THROW(Dune::InvalidStateException, 
"The DGF grid pointer is only available if the grid was constructed with a DGF file!");
 
 
  179        std::size_t i = fileName.rfind(
'.', fileName.length());
 
  180        if (i != std::string::npos)
 
  182            return(fileName.substr(i+1, fileName.length() - i));
 
  186            DUNE_THROW(Dune::IOError, 
"Please provide and extension for your grid file ('"<< fileName << 
"')!");
 
 
  198                          const std::string& modelParamGroup)
 
  202        if (extension != 
"dgf" && extension != 
"msh" && extension != 
"vtu" && extension != 
"vtp")
 
  203            DUNE_THROW(Dune::IOError, 
"Grid type " << Dune::className<Grid>() << 
" doesn't support grid files with extension: *."<< extension);
 
  206        if (extension == 
"dgf")
 
  209            dgfGridPtr() = Dune::GridPtr<Grid>(fileName.c_str(), Dune::MPIHelper::getCommunicator());
 
  214        else if (extension == 
"msh")
 
  224                std::vector<int> boundaryMarkers, elementMarkers;
 
  225                auto gridFactory = std::make_unique<Dune::GridFactory<Grid>>();
 
  227                Dune::GmshReader<Grid>::read(*gridFactory, fileName, boundaryMarkers, elementMarkers, verbose, boundarySegments);
 
  228                gridPtr() = std::shared_ptr<Grid>(gridFactory->createGrid());
 
  229                gridData_ = std::make_shared<GridData>(
gridPtr_, std::move(gridFactory), std::move(elementMarkers), std::move(boundaryMarkers));
 
  233                auto gridFactory = std::make_unique<Dune::GridFactory<Grid>>();
 
  234                Dune::GmshReader<Grid>::read(*gridFactory, fileName, verbose, boundarySegments);
 
  235                gridPtr() = std::shared_ptr<Grid>(gridFactory->createGrid());
 
  240        else if (extension == 
"vtu" || extension == 
"vtp")
 
  242            if (Dune::MPIHelper::getCommunication().size() > 1)
 
  243                DUNE_THROW(Dune::NotImplemented, 
"Reading grids in parallel from VTK file formats is currently not supported!");
 
  247            auto gridFactory = std::make_unique<Dune::GridFactory<Grid>>();
 
  249            gridPtr() = vtkReader.
readGrid(*gridFactory, cellData, pointData, verbose);
 
  250            gridData_ = std::make_shared<GridData>(
gridPtr_, std::move(gridFactory), std::move(cellData), std::move(pointData));
 
 
  261        if(extension != 
"dgf")
 
  262            DUNE_THROW(Dune::IOError, 
"Grid type " << Dune::className<Grid>() << 
" only supports DGF (*.dgf) but the specified filename has extension: *."<< extension);
 
  265        dgfGridPtr() = Dune::GridPtr<Grid>(fileName.c_str(), Dune::MPIHelper::getCommunicator());
 
 
  277    template <
int dim, 
int dimworld>
 
  279                            const std::string& modelParamGroup)
 
  281        using GlobalPosition = Dune::FieldVector<typename Grid::ctype, dimworld>;
 
  285        using CellArray = std::array<unsigned int, dim>;
 
  286        CellArray cells; cells.fill(1);
 
  292            gridPtr() = Dune::StructuredGridFactory<Grid>::createCubeGrid(lowerLeft, upperRight, cells);
 
  296            gridPtr() = Dune::StructuredGridFactory<Grid>::createSimplexGrid(lowerLeft, upperRight, cells);
 
  300            DUNE_THROW(Dune::GridError, 
"Unknown cell type for making structured grid! Choose Cube or Simplex.");
 
 
 
Class for grid data attached to dgf or gmsh grid files.
Definition griddata.hh:55
The grid manager base interface (public) and methods common to most grid manager specializations (pro...
Definition gridmanager_base.hh:55
std::shared_ptr< GridData > getGridData() const
Get an owning pointer to grid data associated with the grid.
Definition gridmanager_base.hh:136
GridType Grid
Definition gridmanager_base.hh:57
Dune::GridPtr< Grid > dgfGridPtr_
Definition gridmanager_base.hh:330
const Grid & grid() const
Returns a const reference to the grid.
Definition gridmanager_base.hh:86
void maybeRefineGrid(const std::string &modelParamGroup)
Refines a grid after construction if GridParameterGroup.Refinement is set in the input file.
Definition gridmanager_base.hh:307
bool enableVtkData_
Definition gridmanager_base.hh:327
void makeGridFromFile(const std::string &fileName, const std::string &modelParamGroup)
Makes a grid from a file. We currently support.
Definition gridmanager_base.hh:197
void makeStructuredGrid(CellType cellType, const std::string &modelParamGroup)
Makes a structured cube grid using the structured grid factory.
Definition gridmanager_base.hh:278
Dune::GridPtr< Grid > & dgfGridPtr()
Returns a reference to the DGF grid pointer (Dune::GridPtr<Grid>).
Definition gridmanager_base.hh:166
bool hasGridData() const
Check whether there is data associated with the grid.
Definition gridmanager_base.hh:147
std::shared_ptr< Grid > gridPtr_
Definition gridmanager_base.hh:329
Grid & grid()
Returns a reference to the grid.
Definition gridmanager_base.hh:75
std::shared_ptr< GridData > gridData_
Definition gridmanager_base.hh:332
void makeGridFromDgfFile(const std::string &fileName)
Makes a grid from a DGF file. This is used by grid managers that only support DGF.
Definition gridmanager_base.hh:257
bool enableGmshDomainMarkers_
Definition gridmanager_base.hh:322
void loadBalance()
Call loadBalance() function of the grid.
Definition gridmanager_base.hh:97
Dumux::GridData< Grid > GridData
Definition gridmanager_base.hh:58
CellType
The cell types for structured grids.
Definition gridmanager_base.hh:272
@ Simplex
Definition gridmanager_base.hh:272
@ Cube
Definition gridmanager_base.hh:272
std::shared_ptr< Grid > & gridPtr()
Returns a reference to the grid pointer (std::shared_ptr<Grid>)
Definition gridmanager_base.hh:155
void init(const std::string &modelParamGroup="")
Make the grid. Implement this method in the specialization of this class for a grid type.
Definition gridmanager_base.hh:63
bool enableDgfGridPointer_
Definition gridmanager_base.hh:317
std::string getFileExtension(const std::string &fileName) const
Returns the filename extension of a given filename.
Definition gridmanager_base.hh:177
The grid manager (this is the class used by the user) for all supported grid managers that constructs...
Definition gridmanager_base.hh:336
A vtk file reader using tinyxml2 as xml backend.
Definition vtkreader.hh:269
std::unordered_map< std::string, std::vector< double > > Data
the cell / point data type for point data read from a grid file
Definition vtkreader.hh:277
std::unique_ptr< Grid > readGrid(bool verbose=false) const
Read a grid from a vtk/vtu/vtp file, ignoring cell and point data.
Definition vtkreader.hh:350
Class for grid data attached to dgf or gmsh grid files.
T getParamFromGroup(Args &&... args)
A free function to get a parameter from the parameter tree singleton with a model group.
Definition parameters.hh:149
bool hasParamInGroup(const std::string ¶mGroup, const std::string ¶m)
Check whether a key exists in the parameter tree with a model group prefix.
Definition parameters.hh:165
The available discretization methods in Dumux.
The infrastructure to retrieve run-time parameters from Dune::ParameterTrees.
Template which always yields a false value.
Definition common/typetraits/typetraits.hh:24
A vtk file reader using tinyxml2 as xml backend.