diff --git a/exercises/solution/exercise-grids/main.cc b/exercises/solution/exercise-grids/main.cc index 2810e5b593d6767e688e13193aded231e103070b..ad6f8f834657bfa6d0ef994a70a6b741c0fcad94 100644 --- a/exercises/solution/exercise-grids/main.cc +++ b/exercises/solution/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/solution/exercise-grids/problem.hh b/exercises/solution/exercise-grids/problem.hh index b1b2fe2e48d84126e56c0875cfbf20bf93a643c9..3e0635ba2d6c12015bc1104ad44b374afdaa0e4c 100644 --- a/exercises/solution/exercise-grids/problem.hh +++ b/exercises/solution/exercise-grids/problem.hh @@ -19,70 +19,17 @@ /*! * \file * - * \brief The two-phase porousmediumflow problem for exercise Grids + * \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: Task 2: Replace the above Grid Property definition with a more flexible grid (Use Dune::TensorProductCoordinates) -template<class TypeTag> -struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<double, 2> >; }; - -// TODO: 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) -// template<class TypeTag> -// struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::ALUGrid<2, 2, Dune::cube, Dune::nonconforming>; }; - -// TODO: 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) -// template<class TypeTag> -// struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::ALUGrid<2, 2, Dune::simplex, Dune::nonconforming>; }; - -// 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/solution/exercise-grids/properties.hh b/exercises/solution/exercise-grids/properties.hh new file mode 100644 index 0000000000000000000000000000000000000000..17872d5ca6752d8b4ff83a5092d2c1581e8845af --- /dev/null +++ b/exercises/solution/exercise-grids/properties.hh @@ -0,0 +1,82 @@ +// -*- 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 two-phase porousmediumflow 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: Task 2: Replace the above Grid Property definition with a more flexible grid (Use Dune::TensorProductCoordinates) +template<class TypeTag> +struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<double, 2> >; }; + +// TODO: 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) +// template<class TypeTag> +// struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::ALUGrid<2, 2, Dune::cube, Dune::nonconforming>; }; + +// TODO: 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) +// template<class TypeTag> +// struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::ALUGrid<2, 2, Dune::simplex, Dune::nonconforming>; }; + +// 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