3.1-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
gridmanager_oned.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*****************************************************************************
4 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
24#ifndef DUMUX_IO_GRID_MANAGER_ONED_HH
25#define DUMUX_IO_GRID_MANAGER_ONED_HH
26
27#include <dune/grid/onedgrid.hh>
28#include <dune/grid/io/file/dgfparser/dgfoned.hh>
29
30#ifndef DUMUX_IO_GRID_MANAGER_BASE_HH
32#endif
33
34namespace Dumux {
35
49template<>
50class GridManager<Dune::OneDGrid>
51: public GridManagerBase<Dune::OneDGrid>
52{
53public:
54 using Grid = Dune::OneDGrid;
56
60 void init(const std::string& modelParamGroup = "")
61 {
62
63 // try to create it from a DGF or msh file in GridParameterGroup.File
64 if (hasParamInGroup(modelParamGroup, "Grid.File"))
65 {
66 ParentType::makeGridFromDgfFile(getParamFromGroup<std::string>(modelParamGroup, "Grid.File"));
67 postProcessing_(modelParamGroup);
68 return;
69 }
70
71 // Look for the necessary keys to construct from the input file
72 else if (hasParamInGroup(modelParamGroup, "Grid.RightBoundary"))
73 {
74 // The required parameters
75 using CoordinateType = typename Grid::ctype;
76 const auto leftBoundary = getParamFromGroup<CoordinateType>(modelParamGroup, "Grid.LeftBoundary", 0.0);
77 const auto rightBoundary = getParamFromGroup<CoordinateType>(modelParamGroup, "Grid.RightBoundary");
78 const int cells = getParamFromGroup<int>(modelParamGroup, "Grid.Cells", 1);
79
80 ParentType::gridPtr() = std::make_shared<Grid>(cells, leftBoundary, rightBoundary);
81 postProcessing_(modelParamGroup);
82 return;
83 }
84
85 // Look for the necessary keys to construct from the input file with just a coordinates vector
86 else if (hasParamInGroup(modelParamGroup, "Grid.Coordinates"))
87 {
88 const auto coordinates = getParamFromGroup<std::vector<typename Grid::ctype>>(modelParamGroup, "Grid.Coordinates");
89 ParentType::gridPtr() = std::make_shared<Grid>(coordinates);
90 postProcessing_(modelParamGroup);
91 }
92
93 // Didn't find a way to construct the grid
94 else
95 {
96 const auto prefix = modelParamGroup == "" ? modelParamGroup : modelParamGroup + ".";
97 DUNE_THROW(ParameterException, "Please supply one of the parameters "
98 << prefix + "Grid.RightBoundary"
99 << ", or " << prefix + "Grid.Coordinates"
100 << ", or a grid file in " << prefix + "Grid.File");
101 }
102 }
103
107 void loadBalance() {}
108
109private:
113 void postProcessing_(const std::string& modelParamGroup)
114 {
115 // Set refinement type
116 const auto refType = getParamFromGroup<std::string>(modelParamGroup, "Grid.RefinementType", "Local");
117 if (refType == "Local")
118 ParentType::grid().setRefinementType(Dune::OneDGrid::RefinementType::LOCAL);
119 else if (refType == "Copy")
120 ParentType::grid().setRefinementType(Dune::OneDGrid::RefinementType::COPY);
121 else
122 DUNE_THROW(Dune::IOError, "OneGrid only supports 'Local' or 'Copy' as refinment type. Not '"<< refType<<"'!");
123
124 // Check if should refine the grid
125 ParentType::maybeRefineGrid(modelParamGroup);
126 loadBalance();
127 }
128};
129
130} // end namespace Dumux
131
132#endif
Provides a grid manager for all supported grid managers with input file interfaces....
bool hasParamInGroup(const std::string &paramGroup, const std::string &param)
Check whether a key exists in the parameter tree with a model group prefix.
Definition: parameters.hh:454
make the local view function available whenever we use the grid geometry
Definition: adapt.hh:29
Definition: common/properties/model.hh:34
Exception thrown if a run-time parameter is not specified correctly.
Definition: exceptions.hh:60
The grid manager (this is the class used by the user) for all supported grid managers that constructs...
Definition: gridmanager_base.hh:312
The grid manager base interface (public) and methods common to most grid manager specializations (pro...
Definition: gridmanager_base.hh:65
void loadBalance()
Call loadBalance() function of the grid.
Definition: gridmanager_base.hh:95
void init(const std::string &modelParamGroup="")
Make the grid. This is implemented by specializations of this method.
Definition: gridmanager_oned.hh:60
void loadBalance()
Call loadBalance() function of the grid. OneDGrid is not parallel an thus cannot communicate.
Definition: gridmanager_oned.hh:107
Dune::OneDGrid Grid
Definition: gridmanager_oned.hh:54