diff --git a/dumux/io/gridcreator.hh b/dumux/io/gridcreator.hh index 548d8913a37f24a3daed285e41f69c4352d74ef5..8c6cf946ad06f88f4fab3a5e3e51d488597f36ad 100644 --- a/dumux/io/gridcreator.hh +++ b/dumux/io/gridcreator.hh @@ -300,14 +300,13 @@ protected: catch (Dumux::ParameterException &e) { } // make the grid - Dune::StructuredGridFactory<Grid> factory; if (cellType == CellType::Cube) { - gridPtr() = factory.createCubeGrid(lowerLeft, upperRight, cells); + gridPtr() = Dune::StructuredGridFactory<Grid>::createCubeGrid(lowerLeft, upperRight, cells); } if (cellType == CellType::Simplex) { - gridPtr() = factory.createSimplexGrid(lowerLeft, upperRight, cells); + gridPtr() = Dune::StructuredGridFactory<Grid>::createSimplexGrid(lowerLeft, upperRight, cells); } } @@ -411,6 +410,7 @@ class GridCreatorImpl<TypeTag, Dune::YaspGrid<dim, Dune::EquidistantCoordinates< public: typedef typename Dune::YaspGrid<dim, Dune::EquidistantCoordinates<ct, dim> > Grid; typedef GridCreatorBase<TypeTag, Grid> ParentType; + enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; /*! * \brief Make the grid. This is implemented by specializations of this method. @@ -445,10 +445,18 @@ public: try { periodic = GET_RUNTIME_PARAM_FROM_GROUP_CSTRING(TypeTag, BitSet, GET_PROP_VALUE(TypeTag, GridParameterGroup).c_str(), Periodic);} catch (Dumux::ParameterException &e) { } - int overlap = 1; + // the default is dependent on the discretization: + // our box models only work with overlap 0 + // our cc models only work with overlap > 0 + int overlap = isBox ? 0 : 1; try { overlap = GET_RUNTIME_PARAM_FROM_GROUP_CSTRING(TypeTag, int, GET_PROP_VALUE(TypeTag, GridParameterGroup).c_str(), Overlap);} catch (Dumux::ParameterException &e) { } + if (isBox && overlap != 0) + DUNE_THROW(Dune::NotImplemented, "Parallel overlapping grids for box models."); + if (!isBox && overlap < 1) + DUNE_THROW(Dune::NotImplemented, "Parallel non-overlapping grids for cc models."); + bool default_lb = false; CellArray partitioning; try { partitioning = GET_RUNTIME_PARAM_FROM_GROUP_CSTRING(TypeTag, CellArray, GET_PROP_VALUE(TypeTag, GridParameterGroup).c_str(), Partitioning);} @@ -511,6 +519,7 @@ class GridCreatorImpl<TypeTag, Dune::YaspGrid<dim, Dune::EquidistantOffsetCoordi public: typedef typename Dune::YaspGrid<dim, Dune::EquidistantOffsetCoordinates<ct, dim> > Grid; typedef GridCreatorBase<TypeTag, Grid> ParentType; + enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; /*! * \brief Make the grid. This is implemented by specializations of this method. @@ -537,10 +546,18 @@ public: try { periodic = GET_RUNTIME_PARAM_FROM_GROUP_CSTRING(TypeTag, BitSet, GET_PROP_VALUE(TypeTag, GridParameterGroup).c_str(), Periodic);} catch (Dumux::ParameterException &e) { } - int overlap = 1; + // the default is dependent on the discretization: + // our box models only work with overlap 0 + // our cc models only work with overlap > 0 + int overlap = isBox ? 0 : 1; try { overlap = GET_RUNTIME_PARAM_FROM_GROUP_CSTRING(TypeTag, int, GET_PROP_VALUE(TypeTag, GridParameterGroup).c_str(), Overlap);} catch (Dumux::ParameterException &e) { } + if (isBox && overlap != 0) + DUNE_THROW(Dune::NotImplemented, "Parallel overlapping grids for box models."); + if (!isBox && overlap < 1) + DUNE_THROW(Dune::NotImplemented, "Parallel non-overlapping grids for cc models."); + bool default_lb = false; CellArray partitioning; try { partitioning = GET_RUNTIME_PARAM_FROM_GROUP_CSTRING(TypeTag, CellArray, GET_PROP_VALUE(TypeTag, GridParameterGroup).c_str(), Partitioning);} @@ -615,6 +632,7 @@ class GridCreatorImpl<TypeTag, Dune::YaspGrid<dim, Dune::TensorProductCoordinate public: typedef typename Dune::YaspGrid<dim, Dune::TensorProductCoordinates<ct, dim> > Grid; typedef GridCreatorBase<TypeTag, Grid> ParentType; + enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; /*! * \brief Make the grid. This is implemented by specializations of this method. @@ -668,10 +686,18 @@ public: try { periodic = GET_RUNTIME_PARAM_FROM_GROUP_CSTRING(TypeTag, BitSet, GET_PROP_VALUE(TypeTag, GridParameterGroup).c_str(), Periodic);} catch (Dumux::ParameterException &e) { } - int overlap = 1; + // the default is dependent on the discretization: + // our box models only work with overlap 0 + // our cc models only work with overlap > 0 + int overlap = isBox ? 0 : 1; try { overlap = GET_RUNTIME_PARAM_FROM_GROUP_CSTRING(TypeTag, int, GET_PROP_VALUE(TypeTag, GridParameterGroup).c_str(), Overlap);} catch (Dumux::ParameterException &e) { } + if (isBox && overlap != 0) + DUNE_THROW(Dune::NotImplemented, "Parallel overlapping grids for box models."); + if (!isBox && overlap < 1) + DUNE_THROW(Dune::NotImplemented, "Parallel non-overlapping grids for cc models."); + bool default_lb = false; typedef std::array<int, dim> CellArray; CellArray partitioning;