diff --git a/exercises/exercise-grids/main.cc b/exercises/exercise-grids/main.cc index adf41083d8b9e61a7d43eeb6d2297de820c2a096..ee8c938827550623d8fe1c361ffd5a6014437309 100644 --- a/exercises/exercise-grids/main.cc +++ b/exercises/exercise-grids/main.cc @@ -47,8 +47,8 @@ #include <dumux/io/vtkoutputmodule.hh> #include <dumux/io/grid/gridmanager.hh> -// The problem file, where setup-specific boundary and initial conditions are defined. -#include "problem.hh" +// The properties file, where the compile time options are defined. +#include "properties.hh" //////////////////////// // the main function diff --git a/exercises/exercise-grids/problem.hh b/exercises/exercise-grids/problem.hh index 97b71b77cf824b6b3824fc15dff29418800ecc68..759d2fa8a315c18799d4ddd5bcd1de11a05d5e2d 100644 --- a/exercises/exercise-grids/problem.hh +++ b/exercises/exercise-grids/problem.hh @@ -19,67 +19,17 @@ /*! * \file * - * \brief The two-phase porousmediumflow problem for exercise-runtimeparams + * \brief The two-phase porousmediumflow problem for exercise-grids */ #ifndef DUMUX_EXGRIDS_INJECTION_PROBLEM_2P_HH #define DUMUX_EXGRIDS_INJECTION_PROBLEM_2P_HH -#include <dune/grid/yaspgrid.hh> - -#include <dumux/discretization/cctpfa.hh> -#include <dumux/porousmediumflow/2p/model.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/material/fluidsystems/h2on2.hh> - -#include "spatialparams.hh" +#include <dumux/common/properties.hh> namespace Dumux { -// forward declare problem -template <class TypeTag> -class InjectionProblem2P; - -namespace Properties { -// define the TypeTag for this problem with a cell-centered two-point flux approximation spatial discretization. -// Create new type tags -namespace TTag { -struct Injection2p { using InheritsFrom = std::tuple<TwoP>; }; -struct Injection2pCC { using InheritsFrom = std::tuple<Injection2p, CCTpfaModel>; }; -} // end namespace TTag - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::YaspGrid<2>; }; -// TODO: dumux-course-task 2 -//Replace the above Grid Property definition with a more flexible grid (Use Dune::TensorProductCoordinates) - -// TODO: dumux-course-task 4 -// Replace the above Grid Property definition to read in a external structured grid via a .msh file (Use Dune::ALUGrid and Dune:cube) - -// TODO: dumux-course-task 5 -// Replace the above Grid Property definition to read in a external unstructured grid via a .msh file (Use Dune::ALUGrid and Dune::simplex) - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::Injection2p> { using type = InjectionProblem2P<TypeTag>; }; - -// Set the spatial parameters -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::Injection2p> -{ -private: - using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; -public: - using type = InjectionSpatialParams<FVGridGeometry, Scalar>; -}; - -// Set fluid configuration -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::Injection2p> { using type = FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>, FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/ true>>; }; -} // end namespace Properties - /*! * \ingroup TwoPModel * \ingroup ImplicitTestProblems diff --git a/exercises/exercise-grids/properties.hh b/exercises/exercise-grids/properties.hh new file mode 100644 index 0000000000000000000000000000000000000000..81227d89e2c6c84eb2903033244ac2e2a88cf170 --- /dev/null +++ b/exercises/exercise-grids/properties.hh @@ -0,0 +1,80 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief The properties file for exercise-grids + */ + +#ifndef DUMUX_EX_GRIDS_PROPERTIES_HH +#define DUMUX_EX_GRIDS_PROPERTIES_HH + +#include <dune/grid/yaspgrid.hh> + +#include <dumux/discretization/cctpfa.hh> +#include <dumux/porousmediumflow/2p/model.hh> +#include <dumux/material/fluidsystems/h2on2.hh> + +#include "spatialparams.hh" +// The problem file, where setup-specific boundary and initial conditions are defined. +#include "problem.hh" + +namespace Dumux::Properties { + +// define the TypeTag for this problem with a cell-centered two-point flux approximation spatial discretization. +// Create new type tags +namespace TTag { +struct Injection2p { using InheritsFrom = std::tuple<TwoP>; }; +struct Injection2pCC { using InheritsFrom = std::tuple<Injection2p, CCTpfaModel>; }; +} // end namespace TTag + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::YaspGrid<2>; }; +// TODO: dumux-course-task 2 +//Replace the above Grid Property definition with a more flexible grid (Use Dune::TensorProductCoordinates) + +// TODO: dumux-course-task 4 +// Replace the above Grid Property definition to read in a external structured grid via a .msh file (Use Dune::ALUGrid and Dune:cube) + +// TODO: dumux-course-task 5 +// Replace the above Grid Property definition to read in a external unstructured grid via a .msh file (Use Dune::ALUGrid and Dune::simplex) + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::Injection2p> { using type = InjectionProblem2P<TypeTag>; }; + +// Set the spatial parameters +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2p> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; + +// Set fluid configuration +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::Injection2p> { using type = FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>, FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/ true>>; }; + +} // end namespace Dumux::Properties + +#endif