24#ifndef DUMUX_IO_GRID_MANAGER_SP_HH
25#define DUMUX_IO_GRID_MANAGER_SP_HH
29#include <dune/grid/spgrid.hh>
30#include <dune/grid/spgrid/dgfparser.hh>
33#ifndef DUMUX_IO_GRID_MANAGER_BASE_HH
49template<
class ct,
int dim,
template<
int >
class Ref,
class Comm>
50class GridManager<
Dune::SPGrid<ct, dim, Ref, Comm>>
51:
public GridManagerBase<Dune::SPGrid<ct, dim, Ref, Comm>>
55 using ParentType = GridManagerBase<Grid>;
60 void init(
const std::string& paramGroup =
"")
62 const auto overlap = getParamFromGroup<int>(paramGroup,
"Grid.Overlap", 1);
64 DUNE_THROW(Dune::NotImplemented,
"dune-spgrid does currently not support zero overlap!");
69 ParentType::makeGridFromDgfFile(getParamFromGroup<std::string>(paramGroup,
"Grid.File"));
70 ParentType::maybeRefineGrid(paramGroup);
71 ParentType::loadBalance();
77 using GlobalPosition = Dune::FieldVector<ct, dim>;
78 const auto lowerLeft = getParamFromGroup<GlobalPosition>(paramGroup,
"Grid.LowerLeft", GlobalPosition(0.0));
79 const auto upperRight = getParamFromGroup<GlobalPosition>(paramGroup,
"Grid.UpperRight");
81 using IntArray = std::array<int, dim>;
82 IntArray cells; cells.fill(1);
83 cells = getParamFromGroup<IntArray>(paramGroup,
"Grid.Cells", cells);
85 const auto periodic = getParamFromGroup<std::bitset<dim>>(paramGroup,
"Grid.Periodic", std::bitset<dim>{});
86 IntArray spOverlap; spOverlap.fill(overlap);
88 using Domain =
typename Grid::Domain;
89 std::vector< typename Domain::Cube > cubes;
90 cubes.push_back(
typename Domain::Cube( lowerLeft, upperRight ) );
91 Domain domain( cubes,
typename Domain::Topology(
static_cast<unsigned int>(periodic.to_ulong()) ) );
92 ParentType::gridPtr() = std::make_shared<Grid>( domain, cells, spOverlap );
93 ParentType::maybeRefineGrid(paramGroup);
94 ParentType::loadBalance();
98 const auto prefix = paramGroup.empty() ? paramGroup : paramGroup +
".";
99 DUNE_THROW(ParameterException,
"Please supply a grid file in " << prefix <<
"Grid.File or " << prefix <<
"Grid.UpperRight/Cells.");
Provides a grid manager for all supported grid managers with input file interfaces....
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:177
Definition: common/pdesolver.hh:36
Definition: momentum/velocitygradients.hh:38
Grid Grid
Definition: gridmanager_base.hh:69
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:75