From 14c0271f4c29453c43e4f1e6886bc3c41ff984bb Mon Sep 17 00:00:00 2001 From: Yue Wang <yue.wang@iws.uni-stuttgart.de> Date: Sat, 27 Feb 2021 00:03:20 +0100 Subject: [PATCH] [test][1p] Separate properties into their own header --- .../1p/compressible/instationary/main.cc | 5 +- .../1p/compressible/instationary/problem.hh | 66 +--------- .../compressible/instationary/properties.hh | 88 +++++++++++++ .../1p/compressible/stationary/main.cc | 2 +- .../1p/compressible/stationary/problem.hh | 68 +--------- .../1p/compressible/stationary/properties.hh | 86 +++++++++++++ .../analyticsolution/properties.hh | 4 + .../1p/convergence/discretesolution/main.cc | 2 +- .../convergence/discretesolution/problem.hh | 106 +++++----------- .../discretesolution/properties.hh | 84 +++++++++++++ .../1p/convergence/discretesolution/solver.hh | 2 +- test/porousmediumflow/1p/fracture2d3d/main.cc | 2 +- .../1p/fracture2d3d/problem.hh | 64 +--------- .../1p/fracture2d3d/properties.hh | 91 ++++++++++++++ .../1p/incompressible/main.cc | 3 +- .../1p/incompressible/problem.hh | 85 +------------ .../1p/incompressible/properties.hh | 108 ++++++++++++++++ .../1p/internaldirichlet/problem.hh | 20 +-- .../1p/internaldirichlet/properties.hh | 46 +++++++ test/porousmediumflow/1p/isothermal/main.cc | 2 +- .../porousmediumflow/1p/isothermal/problem.hh | 67 +--------- .../1p/isothermal/properties.hh | 93 ++++++++++++++ test/porousmediumflow/1p/network1d3d/main.cc | 2 +- .../1p/network1d3d/problem.hh | 89 +------------ .../1p/network1d3d/properties.hh | 119 ++++++++++++++++++ .../porousmediumflow/1p/nonisothermal/main.cc | 4 +- .../1p/nonisothermal/problem_conduction.hh | 55 +------- .../1p/nonisothermal/problem_convection.hh | 54 +------- .../1p/nonisothermal/properties_conduction.hh | 82 ++++++++++++ .../1p/nonisothermal/properties_convection.hh | 83 ++++++++++++ test/porousmediumflow/1p/periodicbc/main.cc | 2 +- .../porousmediumflow/1p/periodicbc/problem.hh | 66 +--------- .../1p/periodicbc/properties.hh | 91 ++++++++++++++ .../1p/pointsources/timedependent/main.cc | 2 +- .../1p/pointsources/timedependent/problem.hh | 18 --- .../pointsources/timedependent/properties.hh | 47 +++++++ .../1p/pointsources/timeindependent/main.cc | 2 +- .../pointsources/timeindependent/problem.hh | 54 +------- .../timeindependent/properties.hh | 81 ++++++++++++ 39 files changed, 1181 insertions(+), 764 deletions(-) create mode 100644 test/porousmediumflow/1p/compressible/instationary/properties.hh create mode 100644 test/porousmediumflow/1p/compressible/stationary/properties.hh create mode 100644 test/porousmediumflow/1p/convergence/discretesolution/properties.hh create mode 100644 test/porousmediumflow/1p/fracture2d3d/properties.hh create mode 100644 test/porousmediumflow/1p/incompressible/properties.hh create mode 100644 test/porousmediumflow/1p/internaldirichlet/properties.hh create mode 100644 test/porousmediumflow/1p/isothermal/properties.hh create mode 100644 test/porousmediumflow/1p/network1d3d/properties.hh create mode 100644 test/porousmediumflow/1p/nonisothermal/properties_conduction.hh create mode 100644 test/porousmediumflow/1p/nonisothermal/properties_convection.hh create mode 100644 test/porousmediumflow/1p/periodicbc/properties.hh create mode 100644 test/porousmediumflow/1p/pointsources/timedependent/properties.hh create mode 100644 test/porousmediumflow/1p/pointsources/timeindependent/properties.hh diff --git a/test/porousmediumflow/1p/compressible/instationary/main.cc b/test/porousmediumflow/1p/compressible/instationary/main.cc index 509e4eb9fa..d9b60a4b39 100644 --- a/test/porousmediumflow/1p/compressible/instationary/main.cc +++ b/test/porousmediumflow/1p/compressible/instationary/main.cc @@ -23,9 +23,6 @@ */ #include <config.h> - -#include "problem.hh" - #include <ctime> #include <iostream> @@ -48,6 +45,8 @@ #include <dumux/io/vtkoutputmodule.hh> #include <dumux/io/grid/gridmanager.hh> +#include "properties.hh" + int main(int argc, char** argv) { using namespace Dumux; diff --git a/test/porousmediumflow/1p/compressible/instationary/problem.hh b/test/porousmediumflow/1p/compressible/instationary/problem.hh index 2477aa5cc9..561252815b 100644 --- a/test/porousmediumflow/1p/compressible/instationary/problem.hh +++ b/test/porousmediumflow/1p/compressible/instationary/problem.hh @@ -25,73 +25,15 @@ #ifndef DUMUX_COMPRESSIBLE_ONEP_TEST_PROBLEM_HH #define DUMUX_COMPRESSIBLE_ONEP_TEST_PROBLEM_HH -#include <dune/grid/yaspgrid.hh> - -#include <dumux/material/components/h2o.hh> -#include <dumux/material/components/tabulatedcomponent.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> #include <dumux/common/boundarytypes.hh> - -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> -#include <dumux/discretization/box.hh> - #include <dumux/porousmediumflow/problem.hh> -#include <dumux/porousmediumflow/1p/model.hh> - -#include "spatialparams.hh" +#include <dumux/material/components/h2o.hh> +#include <dumux/material/components/tabulatedcomponent.hh> namespace Dumux { -// forward declarations -template<class TypeTag> class OnePTestProblem; - -namespace Properties { -// create the type tag nodes -// Create new type tags -namespace TTag { -struct OnePCompressible { using InheritsFrom = std::tuple<OneP>; }; -struct OnePCompressibleTpfa { using InheritsFrom = std::tuple<OnePCompressible, CCTpfaModel>; }; -struct OnePCompressibleMpfa { using InheritsFrom = std::tuple<OnePCompressible, CCMpfaModel>; }; -struct OnePCompressibleBox { using InheritsFrom = std::tuple<OnePCompressible, BoxModel>; }; -} // end namespace TTag - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePCompressible> { using type = Dune::YaspGrid<2>; }; - -// Set the problem type -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePCompressible> { using type = OnePTestProblem<TypeTag>; }; - -// set the spatial params -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePCompressible> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = OnePTestSpatialParams<GridGeometry, Scalar>; -}; - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePCompressible> -{ -private: - using Scalar = GetPropType<TypeTag, Properties::Scalar>; -public: - using type = FluidSystems::OnePLiquid<Scalar, Components::TabulatedComponent<Components::H2O<Scalar>>>; -}; - -// Disable caching (for testing purposes) -template<class TypeTag> -struct EnableGridVolumeVariablesCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; -template<class TypeTag> -struct EnableGridFluxVariablesCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; -template<class TypeTag> -struct EnableGridGeometryCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; -} // end namespace Properties - /*! * \ingroup OnePTests * \brief Test problem for the compressible one-phase model. diff --git a/test/porousmediumflow/1p/compressible/instationary/properties.hh b/test/porousmediumflow/1p/compressible/instationary/properties.hh new file mode 100644 index 0000000000..c3e71c6a9b --- /dev/null +++ b/test/porousmediumflow/1p/compressible/instationary/properties.hh @@ -0,0 +1,88 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief The properties for the incompressible test + */ + +#ifndef DUMUX_COMPRESSIBLE_ONEP_TEST_PROPERTIES_HH +#define DUMUX_COMPRESSIBLE_ONEP_TEST_PROPERTIES_HH + +#include <dune/grid/yaspgrid.hh> + + +#include <dumux/material/fluidsystems/1pliquid.hh> + +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> +#include <dumux/discretization/box.hh> + +#include <dumux/porousmediumflow/1p/model.hh> + +#include "problem.hh" +#include "spatialparams.hh" + +namespace Dumux::Properties { +// create the type tag nodes +// Create new type tags +namespace TTag { +struct OnePCompressible { using InheritsFrom = std::tuple<OneP>; }; +struct OnePCompressibleTpfa { using InheritsFrom = std::tuple<OnePCompressible, CCTpfaModel>; }; +struct OnePCompressibleMpfa { using InheritsFrom = std::tuple<OnePCompressible, CCMpfaModel>; }; +struct OnePCompressibleBox { using InheritsFrom = std::tuple<OnePCompressible, BoxModel>; }; +} // end namespace TTag + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePCompressible> { using type = Dune::YaspGrid<2>; }; + +// Set the problem type +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePCompressible> { using type = OnePTestProblem<TypeTag>; }; + +// set the spatial params +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePCompressible> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = OnePTestSpatialParams<GridGeometry, Scalar>; +}; + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePCompressible> +{ +private: + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = FluidSystems::OnePLiquid<Scalar, Components::TabulatedComponent<Components::H2O<Scalar>>>; +}; + +// Disable caching (for testing purposes) +template<class TypeTag> +struct EnableGridVolumeVariablesCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; +template<class TypeTag> +struct EnableGridFluxVariablesCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; +template<class TypeTag> +struct EnableGridGeometryCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; +} + +#endif \ No newline at end of file diff --git a/test/porousmediumflow/1p/compressible/stationary/main.cc b/test/porousmediumflow/1p/compressible/stationary/main.cc index 26566d80be..947fa53ad3 100644 --- a/test/porousmediumflow/1p/compressible/stationary/main.cc +++ b/test/porousmediumflow/1p/compressible/stationary/main.cc @@ -24,7 +24,7 @@ #include <config.h> -#include "problem.hh" +#include "properties.hh" #include <ctime> #include <iostream> diff --git a/test/porousmediumflow/1p/compressible/stationary/problem.hh b/test/porousmediumflow/1p/compressible/stationary/problem.hh index 2477aa5cc9..b777963f3a 100644 --- a/test/porousmediumflow/1p/compressible/stationary/problem.hh +++ b/test/porousmediumflow/1p/compressible/stationary/problem.hh @@ -25,72 +25,16 @@ #ifndef DUMUX_COMPRESSIBLE_ONEP_TEST_PROBLEM_HH #define DUMUX_COMPRESSIBLE_ONEP_TEST_PROBLEM_HH -#include <dune/grid/yaspgrid.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/boundarytypes.hh> #include <dumux/material/components/h2o.hh> #include <dumux/material/components/tabulatedcomponent.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> - -#include <dumux/common/boundarytypes.hh> - -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> -#include <dumux/discretization/box.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/porousmediumflow/1p/model.hh> - -#include "spatialparams.hh" - -namespace Dumux { -// forward declarations -template<class TypeTag> class OnePTestProblem; - -namespace Properties { -// create the type tag nodes -// Create new type tags -namespace TTag { -struct OnePCompressible { using InheritsFrom = std::tuple<OneP>; }; -struct OnePCompressibleTpfa { using InheritsFrom = std::tuple<OnePCompressible, CCTpfaModel>; }; -struct OnePCompressibleMpfa { using InheritsFrom = std::tuple<OnePCompressible, CCMpfaModel>; }; -struct OnePCompressibleBox { using InheritsFrom = std::tuple<OnePCompressible, BoxModel>; }; -} // end namespace TTag - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePCompressible> { using type = Dune::YaspGrid<2>; }; - -// Set the problem type -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePCompressible> { using type = OnePTestProblem<TypeTag>; }; - -// set the spatial params -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePCompressible> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = OnePTestSpatialParams<GridGeometry, Scalar>; -}; -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePCompressible> -{ -private: - using Scalar = GetPropType<TypeTag, Properties::Scalar>; -public: - using type = FluidSystems::OnePLiquid<Scalar, Components::TabulatedComponent<Components::H2O<Scalar>>>; -}; - -// Disable caching (for testing purposes) -template<class TypeTag> -struct EnableGridVolumeVariablesCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; -template<class TypeTag> -struct EnableGridFluxVariablesCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; -template<class TypeTag> -struct EnableGridGeometryCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; -} // end namespace Properties +namespace Dumux{ /*! * \ingroup OnePTests @@ -116,8 +60,8 @@ public: OnePTestProblem(std::shared_ptr<const GridGeometry> gridGeometry) : ParentType(gridGeometry) { - Components::TabulatedComponent<Components::H2O<Scalar>>::init(272.15, 294.15, 10, - 1.0e4, 1.0e6, 200); + Components::TabulatedComponent<Components::H2O<Scalar>> + ::init(272.15, 294.15, 10, 1.0e4, 1.0e6, 200); } /*! diff --git a/test/porousmediumflow/1p/compressible/stationary/properties.hh b/test/porousmediumflow/1p/compressible/stationary/properties.hh new file mode 100644 index 0000000000..a5419cf66e --- /dev/null +++ b/test/porousmediumflow/1p/compressible/stationary/properties.hh @@ -0,0 +1,86 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief The properties for the incompressible test + */ + +#ifndef DUMUX_COMPRESSIBLE_ONEP_TEST_PROPERTIES_HH +#define DUMUX_COMPRESSIBLE_ONEP_TEST_PROPERTIES_HH + +#include <dune/grid/yaspgrid.hh> + +#include <dumux/material/fluidsystems/1pliquid.hh> + +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> +#include <dumux/discretization/box.hh> + +#include <dumux/porousmediumflow/1p/model.hh> + +#include "problem.hh" +#include "spatialparams.hh" + +namespace Dumux::Properties { +// create the type tag nodes +// Create new type tags +namespace TTag { +struct OnePCompressible { using InheritsFrom = std::tuple<OneP>; }; +struct OnePCompressibleTpfa { using InheritsFrom = std::tuple<OnePCompressible, CCTpfaModel>; }; +struct OnePCompressibleMpfa { using InheritsFrom = std::tuple<OnePCompressible, CCMpfaModel>; }; +struct OnePCompressibleBox { using InheritsFrom = std::tuple<OnePCompressible, BoxModel>; }; +} // end namespace TTag + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePCompressible> { using type = Dune::YaspGrid<2>; }; + +// Set the problem type +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePCompressible> { using type = OnePTestProblem<TypeTag>; }; + +// set the spatial params +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePCompressible> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = OnePTestSpatialParams<GridGeometry, Scalar>; +}; + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePCompressible> +{ +private: + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = FluidSystems::OnePLiquid<Scalar, Components::TabulatedComponent<Components::H2O<Scalar>>>; +}; + +// Disable caching (for testing purposes) +template<class TypeTag> +struct EnableGridVolumeVariablesCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; +template<class TypeTag> +struct EnableGridFluxVariablesCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; +template<class TypeTag> +struct EnableGridGeometryCache<TypeTag, TTag::OnePCompressible> { static constexpr bool value = false; }; +} +#endif diff --git a/test/porousmediumflow/1p/convergence/analyticsolution/properties.hh b/test/porousmediumflow/1p/convergence/analyticsolution/properties.hh index c72ed92748..46048a9b9d 100644 --- a/test/porousmediumflow/1p/convergence/analyticsolution/properties.hh +++ b/test/porousmediumflow/1p/convergence/analyticsolution/properties.hh @@ -40,6 +40,10 @@ #include "spatialparams.hh" #include "problem.hh" +#ifndef GRIDTYPE +#define GRIDTYPE Dune::YaspGrid<2> +#endif + namespace Dumux::Properties { // Create new type tags diff --git a/test/porousmediumflow/1p/convergence/discretesolution/main.cc b/test/porousmediumflow/1p/convergence/discretesolution/main.cc index a1e8344c32..0205eedb68 100644 --- a/test/porousmediumflow/1p/convergence/discretesolution/main.cc +++ b/test/porousmediumflow/1p/convergence/discretesolution/main.cc @@ -5,7 +5,7 @@ * * * 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 * + * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * diff --git a/test/porousmediumflow/1p/convergence/discretesolution/problem.hh b/test/porousmediumflow/1p/convergence/discretesolution/problem.hh index cd2a157519..f51d671aaf 100644 --- a/test/porousmediumflow/1p/convergence/discretesolution/problem.hh +++ b/test/porousmediumflow/1p/convergence/discretesolution/problem.hh @@ -25,74 +25,22 @@ #define DUMUX_INCOMPRESSIBLE_ONEP_CONVERGENCETEST_PROBLEM_HH #include <cmath> -#include <dune/grid/yaspgrid.hh> -#include <dune/geometry/quadraturerules.hh> -#include <dumux/common/boundarytypes.hh> +#include <dune/geometry/quadraturerules.hh> -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> -#include <dumux/discretization/box.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/boundarytypes.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/porousmediumflow/1p/model.hh> -#include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> - -#include <dumux/material/components/constant.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> - -#include "spatialparams.hh" namespace Dumux { -// forward declarations -template<class TypeTag> class OnePTestProblem; - -namespace Properties { - -// create the type tag nodes -namespace TTag { -struct OnePIncompressible { using InheritsFrom = std::tuple<OneP>; }; -struct OnePIncompressibleTpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCTpfaModel>; }; -struct OnePIncompressibleMpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCMpfaModel>; }; -struct OnePIncompressibleBox { using InheritsFrom = std::tuple<OnePIncompressible, BoxModel>; }; -} // end namespace TTag - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePIncompressible> { using type = Dune::YaspGrid<2>; }; - -// Set the problem type -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePIncompressible> { using type = OnePTestProblem<TypeTag>; }; - -// set the spatial params -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePIncompressible> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = OnePTestSpatialParams<GridGeometry, Scalar>; -}; - -// use the incompressible local residual (provides analytic jacobian) -template<class TypeTag> -struct LocalResidual<TypeTag, TTag::OnePIncompressible> { using type = OnePIncompressibleLocalResidual<TypeTag>; }; - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePIncompressible> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::OnePLiquid<Scalar, Components::Constant<0, Scalar> >; -}; - -} // end namespace Properties /*! * \ingroup OnePTests * \brief problem setup for the convergence test */ -template<class TypeTag> +template <class TypeTag> class OnePTestProblem : public PorousMediumFlowProblem<TypeTag> { using ParentType = PorousMediumFlowProblem<TypeTag>; @@ -123,7 +71,7 @@ public: * used for which equation on a given boundary control volume. * \param globalPos The position of the center of the finite volume */ - BoundaryTypes boundaryTypesAtPos(const GlobalPosition& globalPos) const + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const { BoundaryTypes values; values.setAllDirichlet(); @@ -134,8 +82,10 @@ public: * \brief Evaluates the boundary conditions for a Dirichlet control volume. * \param globalPos The center of the finite volume for which it is to be set. */ - PrimaryVariables dirichletAtPos(const GlobalPosition& globalPos) const - { return exact(globalPos); } + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + return exact(globalPos); + } /*! * \brief Evaluates the source term within a sub-control volume. @@ -144,18 +94,18 @@ public: * \param elemVolVars The element volume variables * \param scv The sub-control volume for which the source term is evaluated */ - template<class ElementVolumeVariables> - NumEqVector source(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const SubControlVolume& scv) const + template <class ElementVolumeVariables> + NumEqVector source(const Element &element, + const FVElementGeometry &fvGeometry, + const ElementVolumeVariables &elemVolVars, + const SubControlVolume &scv) const { static const auto order = getParam<Scalar>("Problem.SourceIntegrationOrder"); static const auto periodLength = getParam<Scalar>("Problem.ExactSolPeriodLength"); - const auto& k = this->spatialParams().permeabilityAtPos(scv.center()); + const auto &k = this->spatialParams().permeabilityAtPos(scv.center()); - using std::sin; using std::cos; + using std::sin; const auto eg = element.geometry(); const auto rule = Dune::QuadratureRules<Scalar, GridView::dimension>::rule(eg.type(), order); @@ -167,14 +117,14 @@ public: const auto x = p[0]; const auto y = p[1]; - const auto preFactor = -1.0*periodLength*periodLength*M_PI*M_PI; - const auto preFactorArg = periodLength*M_PI; - const auto sineTerm = sin(preFactorArg*x); - const auto cosTerm = cos(preFactorArg*y); - const auto secondDeriv = preFactor*sineTerm*cosTerm; + const auto preFactor = -1.0 * periodLength * periodLength * M_PI * M_PI; + const auto preFactorArg = periodLength * M_PI; + const auto sineTerm = sin(preFactorArg * x); + const auto cosTerm = cos(preFactorArg * y); + const auto secondDeriv = preFactor * sineTerm * cosTerm; // derivative in x and y are identical - source -= 2.0*k*secondDeriv*qp.weight()*eg.integrationElement(qp.position()); + source -= 2.0 * k * secondDeriv * qp.weight() * eg.integrationElement(qp.position()); } source /= eg.volume(); @@ -185,7 +135,9 @@ public: * \brief Returns the temperature \f$\mathrm{[K]}\f$ for an isothermal problem. */ Scalar temperature() const - { return 283.15; } + { + return 283.15; + } /*! * \brief Returns the exact solution at a position. @@ -196,12 +148,12 @@ public: const auto x = globalPos[0]; const auto y = globalPos[1]; - using std::sin; using std::cos; + using std::sin; static const auto periodLength = getParam<Scalar>("Problem.ExactSolPeriodLength"); - const auto preFactorArg = periodLength*M_PI; - const auto u = sin(preFactorArg*x)*cos(preFactorArg*y); + const auto preFactorArg = periodLength * M_PI; + const auto u = sin(preFactorArg * x) * cos(preFactorArg * y); return PrimaryVariables(u); } diff --git a/test/porousmediumflow/1p/convergence/discretesolution/properties.hh b/test/porousmediumflow/1p/convergence/discretesolution/properties.hh new file mode 100644 index 0000000000..d833179586 --- /dev/null +++ b/test/porousmediumflow/1p/convergence/discretesolution/properties.hh @@ -0,0 +1,84 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief The properties & problem setup for the convergence test + */ +#ifndef DUMUX_INCOMPRESSIBLE_ONEP_CONVERGENCETEST_PROPERTIES_HH +#define DUMUX_INCOMPRESSIBLE_ONEP_CONVERGENCETEST_PROPERTIES_HH + +#include <cmath> +#include <dune/grid/yaspgrid.hh> + + +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> +#include <dumux/discretization/box.hh> + +#include <dumux/porousmediumflow/1p/model.hh> +#include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> + +#include <dumux/material/components/constant.hh> +#include <dumux/material/fluidsystems/1pliquid.hh> + +#include "problem.hh" +#include "spatialparams.hh" + +namespace Dumux::Properties { + +// create the type tag nodes +namespace TTag { +struct OnePIncompressible { using InheritsFrom = std::tuple<OneP>; }; +struct OnePIncompressibleTpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCTpfaModel>; }; +struct OnePIncompressibleMpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCMpfaModel>; }; +struct OnePIncompressibleBox { using InheritsFrom = std::tuple<OnePIncompressible, BoxModel>; }; +} // end namespace TTag + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePIncompressible> { using type = Dune::YaspGrid<2>; }; + +// Set the problem type +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePIncompressible> { using type = OnePTestProblem<TypeTag>; }; + +// set the spatial params +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePIncompressible> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = OnePTestSpatialParams<GridGeometry, Scalar>; +}; + +// use the incompressible local residual (provides analytic jacobian) +template<class TypeTag> +struct LocalResidual<TypeTag, TTag::OnePIncompressible> { using type = OnePIncompressibleLocalResidual<TypeTag>; }; + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePIncompressible> +{ + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = FluidSystems::OnePLiquid<Scalar, Components::Constant<0, Scalar> >; +}; + +} +#endif diff --git a/test/porousmediumflow/1p/convergence/discretesolution/solver.hh b/test/porousmediumflow/1p/convergence/discretesolution/solver.hh index 38608680a0..51ce8280a2 100644 --- a/test/porousmediumflow/1p/convergence/discretesolution/solver.hh +++ b/test/porousmediumflow/1p/convergence/discretesolution/solver.hh @@ -42,7 +42,7 @@ #include <dumux/assembly/fvassembler.hh> #include <dumux/assembly/diffmethod.hh> -#include "problem.hh" +#include "properties.hh" // return type of solveRefinementLevel() // stores the grid geometry and the produced solution diff --git a/test/porousmediumflow/1p/fracture2d3d/main.cc b/test/porousmediumflow/1p/fracture2d3d/main.cc index 8e8d1e13e0..afed760585 100644 --- a/test/porousmediumflow/1p/fracture2d3d/main.cc +++ b/test/porousmediumflow/1p/fracture2d3d/main.cc @@ -32,7 +32,7 @@ #include <dune/grid/io/file/vtk.hh> #include <dune/istl/io.hh> -#include "problem.hh" +#include "properties.hh" #include <dumux/common/properties.hh> #include <dumux/common/parameters.hh> diff --git a/test/porousmediumflow/1p/fracture2d3d/problem.hh b/test/porousmediumflow/1p/fracture2d3d/problem.hh index 51d2673f95..114bb47a5e 100644 --- a/test/porousmediumflow/1p/fracture2d3d/problem.hh +++ b/test/porousmediumflow/1p/fracture2d3d/problem.hh @@ -27,72 +27,14 @@ #ifndef DUMUX_ONEP_FRACTURE_TEST_PROBLEM_HH #define DUMUX_ONEP_FRACTURE_TEST_PROBLEM_HH -#if HAVE_DUNE_FOAMGRID -#include <dune/foamgrid/foamgrid.hh> -#endif +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> -#include <dumux/material/components/simpleh2o.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> -#include <dumux/porousmediumflow/1p/model.hh> -#include <dumux/porousmediumflow/problem.hh> #include <dumux/common/boundarytypes.hh> - -#include <dumux/discretization/box.hh> -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> - -#include "spatialparams.hh" +#include <dumux/porousmediumflow/problem.hh> namespace Dumux { -template <class TypeTag> -class FractureProblem; - -namespace Properties { -// Create new type tags -namespace TTag { -struct Fracture { using InheritsFrom = std::tuple<OneP>; }; -struct FractureBox { using InheritsFrom = std::tuple<Fracture, BoxModel>; }; -struct FractureCCTpfa { using InheritsFrom = std::tuple<Fracture, CCTpfaModel>; }; -struct FractureCCMpfa { using InheritsFrom = std::tuple<Fracture, CCMpfaModel>; }; -} // end namespace TTag - -//! Enable caching (more memory, but faster runtime) -template<class TypeTag> -struct EnableGridGeometryCache<TypeTag, TTag::Fracture> { static constexpr bool value = true; }; -template<class TypeTag> -struct EnableGridVolumeVariablesCache<TypeTag, TTag::Fracture> { static constexpr bool value = true; }; -template<class TypeTag> -struct EnableGridFluxVariablesCache<TypeTag, TTag::Fracture> { static constexpr bool value = true; }; - -//! The grid type -#if HAVE_DUNE_FOAMGRID -template<class TypeTag> -struct Grid<TypeTag, TTag::Fracture> { using type = Dune::FoamGrid<2, 3>; }; -#endif - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::Fracture> { using type = Dumux::FractureProblem<TypeTag>; }; - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::Fracture> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; -}; -// Set the spatial parameters -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::Fracture> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FractureSpatialParams<GridGeometry, Scalar>; -}; - -} // end namespace Properties - /*! * \ingroup OnePTests * \brief A discrete fracture network embedded in an impermeable matrix. diff --git a/test/porousmediumflow/1p/fracture2d3d/properties.hh b/test/porousmediumflow/1p/fracture2d3d/properties.hh new file mode 100644 index 0000000000..a6536aaebd --- /dev/null +++ b/test/porousmediumflow/1p/fracture2d3d/properties.hh @@ -0,0 +1,91 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief A discrete fracture network embedded in an impermeable matrix. + * + * The fracture is a 2D network embedded in 3D. + */ + +#ifndef DUMUX_ONEP_FRACTURE_TEST_PROPERTIES_HH +#define DUMUX_ONEP_FRACTURE_TEST_PROPERTIES_HH + +#if HAVE_DUNE_FOAMGRID +#include <dune/foamgrid/foamgrid.hh> +#endif + +#include <dumux/material/components/simpleh2o.hh> +#include <dumux/material/fluidsystems/1pliquid.hh> + +#include <dumux/porousmediumflow/1p/model.hh> + +#include <dumux/discretization/box.hh> +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> + +#include "problem.hh" +#include "spatialparams.hh" + +namespace Dumux::Properties { +// Create new type tags +namespace TTag { +struct Fracture { using InheritsFrom = std::tuple<OneP>; }; +struct FractureBox { using InheritsFrom = std::tuple<Fracture, BoxModel>; }; +struct FractureCCTpfa { using InheritsFrom = std::tuple<Fracture, CCTpfaModel>; }; +struct FractureCCMpfa { using InheritsFrom = std::tuple<Fracture, CCMpfaModel>; }; +} // end namespace TTag + +//! Enable caching (more memory, but faster runtime) +template<class TypeTag> +struct EnableGridGeometryCache<TypeTag, TTag::Fracture> { static constexpr bool value = true; }; +template<class TypeTag> +struct EnableGridVolumeVariablesCache<TypeTag, TTag::Fracture> { static constexpr bool value = true; }; +template<class TypeTag> +struct EnableGridFluxVariablesCache<TypeTag, TTag::Fracture> { static constexpr bool value = true; }; + +//! The grid type +#if HAVE_DUNE_FOAMGRID +template<class TypeTag> +struct Grid<TypeTag, TTag::Fracture> { using type = Dune::FoamGrid<2, 3>; }; +#endif + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::Fracture> { using type = Dumux::FractureProblem<TypeTag>; }; + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::Fracture> +{ + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; +}; +// Set the spatial parameters +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Fracture> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = FractureSpatialParams<GridGeometry, Scalar>; +}; + +} // end namespace Dumux::Properties + +#endif diff --git a/test/porousmediumflow/1p/incompressible/main.cc b/test/porousmediumflow/1p/incompressible/main.cc index 4f3818bcb7..3f8e191a6c 100644 --- a/test/porousmediumflow/1p/incompressible/main.cc +++ b/test/porousmediumflow/1p/incompressible/main.cc @@ -48,8 +48,9 @@ #include <dumux/assembly/fvassembler.hh> +#include "properties.hh" #include "problem.hh" -#include "../internaldirichlet/problem.hh" +#include "../internaldirichlet/properties.hh" //! Function to write out the scv-wise velocities (overload for mpfa) template<class GridGeometry, class GridVariables, class Sol, diff --git a/test/porousmediumflow/1p/incompressible/problem.hh b/test/porousmediumflow/1p/incompressible/problem.hh index ffdd06e237..5a8992178d 100644 --- a/test/porousmediumflow/1p/incompressible/problem.hh +++ b/test/porousmediumflow/1p/incompressible/problem.hh @@ -25,91 +25,12 @@ #ifndef DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_HH #define DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_HH -#if HAVE_UG -#include <dune/grid/uggrid.hh> -#endif -#include <dune/grid/yaspgrid.hh> -#if HAVE_QUADMATH -#include <dune/common/quadmath.hh> -#endif -#include <dumux/common/boundarytypes.hh> -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> -#include <dumux/discretization/box.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/boundarytypes.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/porousmediumflow/1p/model.hh> -#include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> - -#include <dumux/material/components/simpleh2o.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> - -#include "spatialparams.hh" - -#ifndef GRIDTYPE // default to yasp grid if not provided by CMake -#define GRIDTYPE Dune::YaspGrid<2> -#endif - namespace Dumux { -// forward declarations -template<class TypeTag> class OnePTestProblem; - -namespace Properties { -// Create new type tags -namespace TTag { -struct OnePIncompressible { using InheritsFrom = std::tuple<OneP>; }; -struct OnePIncompressibleTpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCTpfaModel>; }; -struct OnePIncompressibleMpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCMpfaModel>; }; -struct OnePIncompressibleBox { using InheritsFrom = std::tuple<OnePIncompressible, BoxModel>; }; -} // end namespace TTag - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePIncompressible> { using type = GRIDTYPE; }; - -// Set the problem type -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePIncompressible> { using type = OnePTestProblem<TypeTag>; }; - -// set the spatial params -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePIncompressible> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = OnePTestSpatialParams<GridGeometry, Scalar>; -}; - -// use the incompressible local residual (provides analytic jacobian) -template<class TypeTag> -struct LocalResidual<TypeTag, TTag::OnePIncompressible> { using type = OnePIncompressibleLocalResidual<TypeTag>; }; - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePIncompressible> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; -}; - -// Enable caching -template<class TypeTag> -struct EnableGridVolumeVariablesCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; -template<class TypeTag> -struct EnableGridFluxVariablesCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; -template<class TypeTag> -struct EnableGridGeometryCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; - -// define a TypeTag for a quad precision test -#if HAVE_QUADMATH -namespace TTag { -struct OnePIncompressibleTpfaQuad { using InheritsFrom = std::tuple<OnePIncompressibleTpfa>; }; -} // end namespace TTag -template<class TypeTag> -struct Scalar<TypeTag, TTag::OnePIncompressibleTpfaQuad> { using type = Dune::Float128; }; -#endif -} // end namespace Properties - /*! * \ingroup OnePTests * \brief Test problem for the incompressible one-phase model diff --git a/test/porousmediumflow/1p/incompressible/properties.hh b/test/porousmediumflow/1p/incompressible/properties.hh new file mode 100644 index 0000000000..d333cff6fa --- /dev/null +++ b/test/porousmediumflow/1p/incompressible/properties.hh @@ -0,0 +1,108 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief The properties for the incompressible test + */ + +#ifndef DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_PROPERTIES_HH +#define DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_PROPERTIES_HH + +#if HAVE_UG +#include <dune/grid/uggrid.hh> +#endif +#include <dune/grid/yaspgrid.hh> +#if HAVE_QUADMATH +#include <dune/common/quadmath.hh> +#endif +#include <dumux/common/boundarytypes.hh> +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> +#include <dumux/discretization/box.hh> + +#include <dumux/porousmediumflow/1p/model.hh> +#include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> + +#include <dumux/material/components/simpleh2o.hh> +#include <dumux/material/fluidsystems/1pliquid.hh> + +#include "problem.hh" +#include "spatialparams.hh" + +#ifndef GRIDTYPE // default to yasp grid if not provided by CMake +#define GRIDTYPE Dune::YaspGrid<2> +#endif + +namespace Dumux::Properties { +// Create new type tags +namespace TTag { +struct OnePIncompressible { using InheritsFrom = std::tuple<OneP>; }; +struct OnePIncompressibleTpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCTpfaModel>; }; +struct OnePIncompressibleMpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCMpfaModel>; }; +struct OnePIncompressibleBox { using InheritsFrom = std::tuple<OnePIncompressible, BoxModel>; }; +} // end namespace TTag + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePIncompressible> { using type = GRIDTYPE; }; + +// Set the problem type +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePIncompressible> { using type = OnePTestProblem<TypeTag>; }; + +// set the spatial params +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePIncompressible> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = OnePTestSpatialParams<GridGeometry, Scalar>; +}; + +// use the incompressible local residual (provides analytic jacobian) +template<class TypeTag> +struct LocalResidual<TypeTag, TTag::OnePIncompressible> { using type = OnePIncompressibleLocalResidual<TypeTag>; }; + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePIncompressible> +{ + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; +}; + +// Enable caching +template<class TypeTag> +struct EnableGridVolumeVariablesCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; +template<class TypeTag> +struct EnableGridFluxVariablesCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; +template<class TypeTag> +struct EnableGridGeometryCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; + +// define a TypeTag for a quad precision test +#if HAVE_QUADMATH +namespace TTag { +struct OnePIncompressibleTpfaQuad { using InheritsFrom = std::tuple<OnePIncompressibleTpfa>; }; +} // end namespace TTag +template<class TypeTag> +struct Scalar<TypeTag, TTag::OnePIncompressibleTpfaQuad> { using type = Dune::Float128; }; +#endif +} +#endif diff --git a/test/porousmediumflow/1p/internaldirichlet/problem.hh b/test/porousmediumflow/1p/internaldirichlet/problem.hh index 5d925402e6..fa973da804 100644 --- a/test/porousmediumflow/1p/internaldirichlet/problem.hh +++ b/test/porousmediumflow/1p/internaldirichlet/problem.hh @@ -25,29 +25,11 @@ #ifndef DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_INTERNAL_DIRICHLET_HH #define DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_INTERNAL_DIRICHLET_HH -#include <bitset> #include <dumux/common/boundarytypes.hh> + #include <test/porousmediumflow/1p/incompressible/problem.hh> namespace Dumux { -// forward declarations -template<class TypeTag> class OnePTestProblemInternalDirichlet; - -namespace Properties { -// Create new type tags -namespace TTag { -struct OnePInternalDirichlet {}; -struct OnePInternalDirichletTpfa { using InheritsFrom = std::tuple<OnePInternalDirichlet, OnePIncompressibleTpfa>; }; -struct OnePInternalDirichletBox { using InheritsFrom = std::tuple<OnePInternalDirichlet, OnePIncompressibleBox>; }; -} // end namespace TTag - -// Set the problem type -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePInternalDirichlet> -{ using type = OnePTestProblemInternalDirichlet<TypeTag>; }; - -} // end namespace Properties - /*! * \ingroup OnePTests * \brief A test for internal Dirichlet constraints diff --git a/test/porousmediumflow/1p/internaldirichlet/properties.hh b/test/porousmediumflow/1p/internaldirichlet/properties.hh new file mode 100644 index 0000000000..7f2468b294 --- /dev/null +++ b/test/porousmediumflow/1p/internaldirichlet/properties.hh @@ -0,0 +1,46 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief A test for internal Dirichlet constraints + */ + +#ifndef DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_INTERNAL_DIRICHLET_PROPERTIES_HH +#define DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_INTERNAL_DIRICHLET_PROPERTIES_HH + +#include <test/porousmediumflow/1p/incompressible/properties.hh> +#include "problem.hh" + +namespace Dumux::Properties { +// Create new type tags +namespace TTag { +struct OnePInternalDirichlet {}; +struct OnePInternalDirichletTpfa { using InheritsFrom = std::tuple<OnePInternalDirichlet, OnePIncompressibleTpfa>; }; +struct OnePInternalDirichletBox { using InheritsFrom = std::tuple<OnePInternalDirichlet, OnePIncompressibleBox>; }; +} // end namespace TTag + +// Set the problem type +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePInternalDirichlet> +{ using type = OnePTestProblemInternalDirichlet<TypeTag>; }; + +} // end namespace Dumux::Properties + +#endif diff --git a/test/porousmediumflow/1p/isothermal/main.cc b/test/porousmediumflow/1p/isothermal/main.cc index 53eae1f381..70f8f1c5e6 100644 --- a/test/porousmediumflow/1p/isothermal/main.cc +++ b/test/porousmediumflow/1p/isothermal/main.cc @@ -32,7 +32,7 @@ #include <dune/grid/io/file/vtk.hh> #include <dune/istl/io.hh> -#include "problem.hh" +#include "properties.hh" #include <dumux/common/properties.hh> #include <dumux/common/parameters.hh> diff --git a/test/porousmediumflow/1p/isothermal/problem.hh b/test/porousmediumflow/1p/isothermal/problem.hh index e011bd383e..0295789b71 100644 --- a/test/porousmediumflow/1p/isothermal/problem.hh +++ b/test/porousmediumflow/1p/isothermal/problem.hh @@ -25,76 +25,13 @@ #ifndef DUMUX_1PTEST_PROBLEM_HH #define DUMUX_1PTEST_PROBLEM_HH - -#include <dune/grid/yaspgrid.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> #include <dumux/common/boundarytypes.hh> - -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> -#include <dumux/discretization/box.hh> -#include <dumux/porousmediumflow/1p/model.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/material/components/simpleh2o.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> - -#include "spatialparams.hh" - -#if FORCHHEIMER -#include <dumux/flux/forchheimerslaw.hh> -#endif - namespace Dumux { -template <class TypeTag> -class OnePTestProblem; - -namespace Properties { - -// Create new type tags -namespace TTag { -struct OnePTest { using InheritsFrom = std::tuple<OneP>; }; -struct OnePTestBox { using InheritsFrom = std::tuple<BoxModel, OnePTest>; }; -struct OnePTestCCTpfa { using InheritsFrom = std::tuple<CCTpfaModel, OnePTest>; }; -struct OnePTestCCMpfa { using InheritsFrom = std::tuple<CCMpfaModel, OnePTest>; }; -} // end namespace TTag - -// Specialize the fluid system type for this type tag -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePTest> -{ - using Scalar = GetPropType<TypeTag, Scalar>; - using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; -}; - -// Specialize the grid type for this type tag -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePTest> -{ using type = Dune::YaspGrid<2>; }; - -// Specialize the problem type for this type tag -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePTest> -{ using type = OnePTestProblem<TypeTag>; }; - -// Specialize the spatial params type for this type tag -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePTest> -{ - using GridGeometry = GetPropType<TypeTag, GridGeometry>; - using Scalar = GetPropType<TypeTag, Scalar>; - using type = OnePTestSpatialParams<GridGeometry, Scalar>; -}; - -#ifdef FORCHHEIMER -// Specialize the advection type for this type tag -template<class TypeTag> -struct AdvectionType<TypeTag, TTag::OnePTest> -{ using type = ForchheimersLaw<TypeTag>; }; -#endif - -} // end namespace Properties - /*! * \ingroup OnePTests * \brief Test problem for the one-phase model: diff --git a/test/porousmediumflow/1p/isothermal/properties.hh b/test/porousmediumflow/1p/isothermal/properties.hh new file mode 100644 index 0000000000..64c9d189ce --- /dev/null +++ b/test/porousmediumflow/1p/isothermal/properties.hh @@ -0,0 +1,93 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief A test problem for the one-phase model: + * water is flowing from bottom to top through and around a low permeable lens. + */ + +#ifndef DUMUX_1PTEST_PROBLEM_PROPERTIES_HH +#define DUMUX_1PTEST_PROBLEM_PROPERTIES_HH + +#include <dune/grid/yaspgrid.hh> + +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> +#include <dumux/discretization/box.hh> + +#include <dumux/porousmediumflow/1p/model.hh> + +#include <dumux/material/components/simpleh2o.hh> +#include <dumux/material/fluidsystems/1pliquid.hh> + +#include "problem.hh" +#include "spatialparams.hh" + +#if FORCHHEIMER +#include <dumux/flux/forchheimerslaw.hh> +#endif + +namespace Dumux::Properties { + +// Create new type tags +namespace TTag { +struct OnePTest { using InheritsFrom = std::tuple<OneP>; }; +struct OnePTestBox { using InheritsFrom = std::tuple<BoxModel, OnePTest>; }; +struct OnePTestCCTpfa { using InheritsFrom = std::tuple<CCTpfaModel, OnePTest>; }; +struct OnePTestCCMpfa { using InheritsFrom = std::tuple<CCMpfaModel, OnePTest>; }; +} // end namespace TTag + +// Specialize the fluid system type for this type tag +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePTest> +{ + using Scalar = GetPropType<TypeTag, Scalar>; + using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; +}; + +// Specialize the grid type for this type tag +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePTest> +{ using type = Dune::YaspGrid<2>; }; + +// Specialize the problem type for this type tag +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePTest> +{ using type = OnePTestProblem<TypeTag>; }; + +// Specialize the spatial params type for this type tag +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePTest> +{ + using GridGeometry = GetPropType<TypeTag, GridGeometry>; + using Scalar = GetPropType<TypeTag, Scalar>; + using type = OnePTestSpatialParams<GridGeometry, Scalar>; +}; + +#ifdef FORCHHEIMER +// Specialize the advection type for this type tag +template<class TypeTag> +struct AdvectionType<TypeTag, TTag::OnePTest> +{ using type = ForchheimersLaw<TypeTag>; }; +#endif + +} // end namespace Dumux::Properties + +#endif diff --git a/test/porousmediumflow/1p/network1d3d/main.cc b/test/porousmediumflow/1p/network1d3d/main.cc index c82ffbe05f..f0f9d5a25c 100644 --- a/test/porousmediumflow/1p/network1d3d/main.cc +++ b/test/porousmediumflow/1p/network1d3d/main.cc @@ -32,7 +32,7 @@ #include <dune/grid/io/file/vtk.hh> #include <dune/istl/io.hh> -#include "problem.hh" +#include "properties.hh" #include <dumux/common/properties.hh> #include <dumux/common/parameters.hh> diff --git a/test/porousmediumflow/1p/network1d3d/problem.hh b/test/porousmediumflow/1p/network1d3d/problem.hh index 8f096b1525..9859ab9734 100644 --- a/test/porousmediumflow/1p/network1d3d/problem.hh +++ b/test/porousmediumflow/1p/network1d3d/problem.hh @@ -26,101 +26,18 @@ #ifndef DUMUX_ONEP_TUBES_TEST_PROBLEM_HH #define DUMUX_ONEP_TUBES_TEST_PROBLEM_HH -#include <dune/localfunctions/lagrange/pqkfactory.hh> #include <dune/geometry/quadraturerules.hh> -#include <dune/geometry/type.hh> - -#if HAVE_DUNE_FOAMGRID -#include <dune/foamgrid/foamgrid.hh> -#endif +#include <dune/localfunctions/lagrange/pqkfactory.hh> -#include <dumux/common/reorderingdofmapper.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> #include <dumux/common/boundarytypes.hh> -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/box.hh> -#include <dumux/discretization/method.hh> #include <dumux/discretization/elementsolution.hh> -#include <dumux/porousmediumflow/1p/model.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/material/components/constant.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> - -#include "spatialparams.hh" namespace Dumux { -template <class TypeTag> -class TubesTestProblem; - -namespace Properties { - -// Create new type tags -namespace TTag { -struct TubesTest { using InheritsFrom = std::tuple<OneP>; }; -struct TubesTestCCTpfa { using InheritsFrom = std::tuple<TubesTest, CCTpfaModel>; }; -struct TubesTestBox { using InheritsFrom = std::tuple<TubesTest, BoxModel>; }; -} // end namespace TTag - -// Set the grid type -#if HAVE_DUNE_FOAMGRID -template<class TypeTag> -struct Grid<TypeTag, TTag::TubesTest> { using type = Dune::FoamGrid<1, 3>; }; -#endif - -// if we have pt scotch use the reordering dof mapper to optimally sort the dofs (cc) -template<class TypeTag> -struct GridGeometry<TypeTag, TTag::TubesTestCCTpfa> -{ -private: - static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>(); - using GridView = typename GetPropType<TypeTag, Properties::Grid>::LeafGridView; - - using ElementMapper = ReorderingDofMapper<GridView>; - using VertexMapper = Dune::MultipleCodimMultipleGeomTypeMapper<GridView>; - using MapperTraits = DefaultMapperTraits<GridView, ElementMapper, VertexMapper>; -public: - using type = CCTpfaFVGridGeometry<GridView, enableCache, CCTpfaDefaultGridGeometryTraits<GridView, MapperTraits>>; -}; - -// if we have pt scotch use the reordering dof mapper to optimally sort the dofs (box) -template<class TypeTag> -struct GridGeometry<TypeTag, TTag::TubesTestBox> -{ -private: - static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>(); - using GridView = typename GetPropType<TypeTag, Properties::Grid>::LeafGridView; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - - using ElementMapper = Dune::MultipleCodimMultipleGeomTypeMapper<GridView>; - using VertexMapper = ReorderingDofMapper<GridView>; - using MapperTraits = DefaultMapperTraits<GridView, ElementMapper, VertexMapper>; -public: - using type = BoxFVGridGeometry<Scalar, GridView, enableCache, BoxDefaultGridGeometryTraits<GridView, MapperTraits>>; -}; - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::TubesTest> { using type = TubesTestProblem<TypeTag>; }; - -// Set the spatial parameters -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::TubesTest> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = TubesTestSpatialParams<GridGeometry, Scalar>; -}; - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::TubesTest> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::OnePLiquid<Scalar, Components::Constant<1, Scalar> >; -}; -} // end namespace Properties - /*! * \ingroup OnePTests * \brief A test problem for the 1p model: A pipe system with circular cross-section diff --git a/test/porousmediumflow/1p/network1d3d/properties.hh b/test/porousmediumflow/1p/network1d3d/properties.hh new file mode 100644 index 0000000000..3f45ecd368 --- /dev/null +++ b/test/porousmediumflow/1p/network1d3d/properties.hh @@ -0,0 +1,119 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief A test problem for the 1p model. A pipe system with circular cross-section + * and a branching point embedded in a three-dimensional world + */ + +#ifndef DUMUX_ONEP_TUBES_TEST_PROBLEM_PROPERTIES_HH +#define DUMUX_ONEP_TUBES_TEST_PROBLEM_PROPERTIES_HH + + +#include <dune/geometry/type.hh> + +#if HAVE_DUNE_FOAMGRID +#include <dune/foamgrid/foamgrid.hh> +#endif + +#include <dumux/common/reorderingdofmapper.hh> + +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/box.hh> +#include <dumux/discretization/method.hh> + + +#include <dumux/porousmediumflow/1p/model.hh> + +#include <dumux/material/components/constant.hh> +#include <dumux/material/fluidsystems/1pliquid.hh> + +#include "problem.hh" +#include "spatialparams.hh" + +namespace Dumux::Properties { + +// Create new type tags +namespace TTag { +struct TubesTest { using InheritsFrom = std::tuple<OneP>; }; +struct TubesTestCCTpfa { using InheritsFrom = std::tuple<TubesTest, CCTpfaModel>; }; +struct TubesTestBox { using InheritsFrom = std::tuple<TubesTest, BoxModel>; }; +} // end namespace TTag + +// Set the grid type +#if HAVE_DUNE_FOAMGRID +template<class TypeTag> +struct Grid<TypeTag, TTag::TubesTest> { using type = Dune::FoamGrid<1, 3>; }; +#endif + +// if we have pt scotch use the reordering dof mapper to optimally sort the dofs (cc) +template<class TypeTag> +struct GridGeometry<TypeTag, TTag::TubesTestCCTpfa> +{ +private: + static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>(); + using GridView = typename GetPropType<TypeTag, Properties::Grid>::LeafGridView; + + using ElementMapper = ReorderingDofMapper<GridView>; + using VertexMapper = Dune::MultipleCodimMultipleGeomTypeMapper<GridView>; + using MapperTraits = DefaultMapperTraits<GridView, ElementMapper, VertexMapper>; +public: + using type = CCTpfaFVGridGeometry<GridView, enableCache, CCTpfaDefaultGridGeometryTraits<GridView, MapperTraits>>; +}; + +// if we have pt scotch use the reordering dof mapper to optimally sort the dofs (box) +template<class TypeTag> +struct GridGeometry<TypeTag, TTag::TubesTestBox> +{ +private: + static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>(); + using GridView = typename GetPropType<TypeTag, Properties::Grid>::LeafGridView; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + + using ElementMapper = Dune::MultipleCodimMultipleGeomTypeMapper<GridView>; + using VertexMapper = ReorderingDofMapper<GridView>; + using MapperTraits = DefaultMapperTraits<GridView, ElementMapper, VertexMapper>; +public: + using type = BoxFVGridGeometry<Scalar, GridView, enableCache, BoxDefaultGridGeometryTraits<GridView, MapperTraits>>; +}; + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::TubesTest> { using type = TubesTestProblem<TypeTag>; }; + +// Set the spatial parameters +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::TubesTest> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = TubesTestSpatialParams<GridGeometry, Scalar>; +}; + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::TubesTest> +{ + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = FluidSystems::OnePLiquid<Scalar, Components::Constant<1, Scalar> >; +}; +} // end namespace Dumux::Properties + +#endif diff --git a/test/porousmediumflow/1p/nonisothermal/main.cc b/test/porousmediumflow/1p/nonisothermal/main.cc index c1569a4c94..a60a35b3ac 100644 --- a/test/porousmediumflow/1p/nonisothermal/main.cc +++ b/test/porousmediumflow/1p/nonisothermal/main.cc @@ -32,8 +32,8 @@ #include <dune/grid/io/file/vtk.hh> #include <dune/istl/io.hh> -#include "problem_conduction.hh" -#include "problem_convection.hh" +#include "properties_conduction.hh" +#include "properties_convection.hh" #include <dumux/common/properties.hh> #include <dumux/common/parameters.hh> diff --git a/test/porousmediumflow/1p/nonisothermal/problem_conduction.hh b/test/porousmediumflow/1p/nonisothermal/problem_conduction.hh index b233b5bab3..dccf141048 100644 --- a/test/porousmediumflow/1p/nonisothermal/problem_conduction.hh +++ b/test/porousmediumflow/1p/nonisothermal/problem_conduction.hh @@ -28,63 +28,16 @@ #define DUMUX_1PNI_CONDUCTION_PROBLEM_HH #include <cmath> -#include <dune/grid/yaspgrid.hh> -#include <dumux/common/boundarytypes.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> -#include <dumux/discretization/elementsolution.hh> -#include <dumux/discretization/box.hh> -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> -#include <dumux/discretization/box.hh> -#include <dumux/porousmediumflow/1p/model.hh> +#include <dumux/common/boundarytypes.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/material/components/h2o.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> -#include <dumux/material/fluidmatrixinteractions/1p/thermalconductivityaverage.hh> - -#include "spatialparams.hh" +#include <dumux/material/components/h2o.hh> namespace Dumux { -template <class TypeTag> -class OnePNIConductionProblem; - -namespace Properties { -// Create new type tags -namespace TTag { -struct OnePNIConduction { using InheritsFrom = std::tuple<OnePNI>; }; -struct OnePNIConductionBox { using InheritsFrom = std::tuple<OnePNIConduction, BoxModel>; }; -struct OnePNIConductionCCTpfa { using InheritsFrom = std::tuple<OnePNIConduction, CCTpfaModel>; }; -struct OnePNIConductionCCMpfa { using InheritsFrom = std::tuple<OnePNIConduction, CCMpfaModel>; }; -} // end namespace TTag - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePNIConduction> { using type = Dune::YaspGrid<2>; }; - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePNIConduction> { using type = OnePNIConductionProblem<TypeTag>; }; - -// Set the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePNIConduction> -{ - using type = FluidSystems::OnePLiquid<GetPropType<TypeTag, Properties::Scalar>, - Components::H2O<GetPropType<TypeTag, Properties::Scalar>> >; -}; - -// Set the spatial parameters -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePNIConduction> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = OnePNISpatialParams<GridGeometry, Scalar>; -}; -} - /*! * \ingroup OnePTests * \brief Test for the OnePModel in combination with the NI model for a conduction problem. diff --git a/test/porousmediumflow/1p/nonisothermal/problem_convection.hh b/test/porousmediumflow/1p/nonisothermal/problem_convection.hh index 0bfd075707..e63db68855 100644 --- a/test/porousmediumflow/1p/nonisothermal/problem_convection.hh +++ b/test/porousmediumflow/1p/nonisothermal/problem_convection.hh @@ -29,62 +29,16 @@ #define DUMUX_1PNI_CONVECTION_PROBLEM_HH #include <cmath> -#include <dune/grid/yaspgrid.hh> -#include <dumux/common/boundarytypes.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> -#include <dumux/discretization/elementsolution.hh> -#include <dumux/discretization/box.hh> -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> -#include <dumux/porousmediumflow/1p/model.hh> +#include <dumux/common/boundarytypes.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/material/components/h2o.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> -#include <dumux/material/fluidmatrixinteractions/1p/thermalconductivityaverage.hh> -#include "spatialparams.hh" +#include <dumux/material/components/h2o.hh> namespace Dumux { -template <class TypeTag> -class OnePNIConvectionProblem; - -namespace Properties { - -// Create new type tags -namespace TTag { -struct OnePNIConvection { using InheritsFrom = std::tuple<OnePNI>; }; -struct OnePNIConvectionBox { using InheritsFrom = std::tuple<OnePNIConvection, BoxModel>; }; -struct OnePNIConvectionCCTpfa { using InheritsFrom = std::tuple<OnePNIConvection, CCTpfaModel>; }; -struct OnePNIConvectionCCMpfa { using InheritsFrom = std::tuple<OnePNIConvection, CCMpfaModel>; }; -} // end namespace TTag - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePNIConvection> { using type = Dune::YaspGrid<1>; }; - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePNIConvection> { using type = OnePNIConvectionProblem<TypeTag>; }; - -// Set the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePNIConvection> -{ - using type = FluidSystems::OnePLiquid<GetPropType<TypeTag, Properties::Scalar>, - Components::H2O<GetPropType<TypeTag, Properties::Scalar>> >; -}; - -// Set the spatial parameters -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePNIConvection> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = OnePNISpatialParams<GridGeometry, Scalar>; -}; -} // end namespace Properties - /*! * \ingroup OnePTests * \brief Test for the OnePModel in combination with the NI model for a convection problem. diff --git a/test/porousmediumflow/1p/nonisothermal/properties_conduction.hh b/test/porousmediumflow/1p/nonisothermal/properties_conduction.hh new file mode 100644 index 0000000000..d982262833 --- /dev/null +++ b/test/porousmediumflow/1p/nonisothermal/properties_conduction.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 3 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 + * \ingroup OnePTests + * \brief Test for the OnePModel in combination with the NI model for a conduction problem. + * + * The simulation domain is a tube with an elevated temperature on the left hand side. + */ + +#ifndef DUMUX_1PNI_CONDUCTION_PROBLEM_PROPERTIES_HH +#define DUMUX_1PNI_CONDUCTION_PROBLEM_PROPERTIES_HH + +#include <cmath> +#include <dune/grid/yaspgrid.hh> + +#include <dumux/discretization/elementsolution.hh> +#include <dumux/discretization/box.hh> +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> +#include <dumux/discretization/box.hh> + +#include <dumux/porousmediumflow/1p/model.hh> + +#include <dumux/material/fluidsystems/1pliquid.hh> +#include <dumux/material/fluidmatrixinteractions/1p/thermalconductivityaverage.hh> + +#include "problem_conduction.hh" +#include "spatialparams.hh" + +namespace Dumux::Properties { +// Create new type tags +namespace TTag { +struct OnePNIConduction { using InheritsFrom = std::tuple<OnePNI>; }; +struct OnePNIConductionBox { using InheritsFrom = std::tuple<OnePNIConduction, BoxModel>; }; +struct OnePNIConductionCCTpfa { using InheritsFrom = std::tuple<OnePNIConduction, CCTpfaModel>; }; +struct OnePNIConductionCCMpfa { using InheritsFrom = std::tuple<OnePNIConduction, CCMpfaModel>; }; +} // end namespace TTag + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePNIConduction> { using type = Dune::YaspGrid<2>; }; + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePNIConduction> { using type = OnePNIConductionProblem<TypeTag>; }; + +// Set the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePNIConduction> +{ + using type = FluidSystems::OnePLiquid<GetPropType<TypeTag, Properties::Scalar>, + Components::H2O<GetPropType<TypeTag, Properties::Scalar>> >; +}; + +// Set the spatial parameters +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePNIConduction> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = OnePNISpatialParams<GridGeometry, Scalar>; +}; +} // end namespace Dumux + +#endif diff --git a/test/porousmediumflow/1p/nonisothermal/properties_convection.hh b/test/porousmediumflow/1p/nonisothermal/properties_convection.hh new file mode 100644 index 0000000000..b0aa62911c --- /dev/null +++ b/test/porousmediumflow/1p/nonisothermal/properties_convection.hh @@ -0,0 +1,83 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief Test for the OnePModel in combination with the NI model for a convection problem. + * + * The simulation domain is a tube where water with an elevated temperature is injected + * at a constant rate on the left hand side. + */ + +#ifndef DUMUX_1PNI_CONVECTION_PROBLEM_PROPERTIES_HH +#define DUMUX_1PNI_CONVECTION_PROBLEM_PROPERTIES_HH + +#include <cmath> +#include <dune/grid/yaspgrid.hh> + +#include <dumux/discretization/elementsolution.hh> +#include <dumux/discretization/box.hh> +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> + +#include <dumux/porousmediumflow/1p/model.hh> + +#include <dumux/material/fluidsystems/1pliquid.hh> +#include <dumux/material/fluidmatrixinteractions/1p/thermalconductivityaverage.hh> + +#include "problem_convection.hh" +#include "spatialparams.hh" + +namespace Dumux::Properties { + +// Create new type tags +namespace TTag { +struct OnePNIConvection { using InheritsFrom = std::tuple<OnePNI>; }; +struct OnePNIConvectionBox { using InheritsFrom = std::tuple<OnePNIConvection, BoxModel>; }; +struct OnePNIConvectionCCTpfa { using InheritsFrom = std::tuple<OnePNIConvection, CCTpfaModel>; }; +struct OnePNIConvectionCCMpfa { using InheritsFrom = std::tuple<OnePNIConvection, CCMpfaModel>; }; +} // end namespace TTag + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePNIConvection> { using type = Dune::YaspGrid<1>; }; + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePNIConvection> { using type = OnePNIConvectionProblem<TypeTag>; }; + +// Set the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePNIConvection> +{ + using type = FluidSystems::OnePLiquid<GetPropType<TypeTag, Properties::Scalar>, + Components::H2O<GetPropType<TypeTag, Properties::Scalar>> >; +}; + +// Set the spatial parameters +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePNIConvection> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = OnePNISpatialParams<GridGeometry, Scalar>; +}; +} // end namespace Dumux::Properties + +#endif diff --git a/test/porousmediumflow/1p/periodicbc/main.cc b/test/porousmediumflow/1p/periodicbc/main.cc index 9a420da9df..5eff6fc9bf 100644 --- a/test/porousmediumflow/1p/periodicbc/main.cc +++ b/test/porousmediumflow/1p/periodicbc/main.cc @@ -43,7 +43,7 @@ #include <dumux/assembly/fvassembler.hh> -#include "problem.hh" +#include "properties.hh" int main(int argc, char** argv) { diff --git a/test/porousmediumflow/1p/periodicbc/problem.hh b/test/porousmediumflow/1p/periodicbc/problem.hh index c2a434613d..3314322229 100644 --- a/test/porousmediumflow/1p/periodicbc/problem.hh +++ b/test/porousmediumflow/1p/periodicbc/problem.hh @@ -25,77 +25,15 @@ #ifndef DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_HH #define DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_HH -#if HAVE_DUNE_SPGRID -#include <dune/grid/spgrid.hh> -#endif - -#include <dumux/common/boundarytypes.hh> -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/ccmpfa.hh> -#include <dumux/discretization/box.hh> - -#include <dumux/porousmediumflow/problem.hh> -#include <dumux/porousmediumflow/1p/model.hh> -#include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> - -#include <dumux/material/components/simpleh2o.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> - -#include "spatialparams.hh" #ifndef FVGEOMCACHING #define FVGEOMCACHING 0 #endif -namespace Dumux { -// forward declarations -template<class TypeTag> class OnePTestProblem; - -namespace Properties { -// create the type tag nodes -// Create new type tags -namespace TTag { -struct OnePIncompressible { using InheritsFrom = std::tuple<OneP>; }; -struct OnePIncompressibleTpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCTpfaModel>; }; -struct OnePIncompressibleMpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCMpfaModel>; }; -struct OnePIncompressibleBox { using InheritsFrom = std::tuple<OnePIncompressible, BoxModel>; }; -} // end namespace TTag - -// Set the grid type -#if HAVE_DUNE_SPGRID -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePIncompressible> { using type = Dune::SPGrid<double, 2>; }; -#endif - -// Set the problem type -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePIncompressible> { using type = OnePTestProblem<TypeTag>; }; - -// set the spatial params -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePIncompressible> { using type = OnePTestSpatialParams<TypeTag>; }; - -// use the incompressible local residual (provides analytic jacobian) -template<class TypeTag> -struct LocalResidual<TypeTag, TTag::OnePIncompressible> { using type = OnePIncompressibleLocalResidual<TypeTag>; }; - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePIncompressible> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; -}; +#include <dumux/porousmediumflow/problem.hh> -// Enable caching -template<class TypeTag> -struct EnableGridVolumeVariablesCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; -template<class TypeTag> -struct EnableGridFluxVariablesCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; -template<class TypeTag> -struct EnableGridGeometryCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = FVGEOMCACHING; }; -} // end namespace Properties +namespace Dumux { /*! * \ingroup OnePTests diff --git a/test/porousmediumflow/1p/periodicbc/properties.hh b/test/porousmediumflow/1p/periodicbc/properties.hh new file mode 100644 index 0000000000..596adee974 --- /dev/null +++ b/test/porousmediumflow/1p/periodicbc/properties.hh @@ -0,0 +1,91 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief The properties for the incompressible test + */ + +#ifndef DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_PROPERTIES_HH +#define DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_PROPERTIES_HH + +#if HAVE_DUNE_SPGRID +#include <dune/grid/spgrid.hh> +#endif + +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/ccmpfa.hh> +#include <dumux/discretization/box.hh> + +#include <dumux/porousmediumflow/1p/model.hh> +#include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> + +#include <dumux/material/components/simpleh2o.hh> +#include <dumux/material/fluidsystems/1pliquid.hh> + +#include "problem.hh" +#include "spatialparams.hh" + +#ifndef FVGEOMCACHING +#define FVGEOMCACHING 0 +#endif + +namespace Dumux::Properties { +namespace TTag { +struct OnePIncompressible { using InheritsFrom = std::tuple<OneP>; }; +struct OnePIncompressibleTpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCTpfaModel>; }; +struct OnePIncompressibleMpfa { using InheritsFrom = std::tuple<OnePIncompressible, CCMpfaModel>; }; +struct OnePIncompressibleBox { using InheritsFrom = std::tuple<OnePIncompressible, BoxModel>; }; +} // end namespace TTag + +// Set the grid type +#if HAVE_DUNE_SPGRID +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePIncompressible> { using type = Dune::SPGrid<double, 2>; }; +#endif + +// Set the problem type +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePIncompressible> { using type = OnePTestProblem<TypeTag>; }; + +// set the spatial params +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePIncompressible> { using type = OnePTestSpatialParams<TypeTag>; }; + +// use the incompressible local residual (provides analytic jacobian) +template<class TypeTag> +struct LocalResidual<TypeTag, TTag::OnePIncompressible> { using type = OnePIncompressibleLocalResidual<TypeTag>; }; + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePIncompressible> +{ + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; +}; + +// Enable caching +template<class TypeTag> +struct EnableGridVolumeVariablesCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; +template<class TypeTag> +struct EnableGridFluxVariablesCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = false; }; +template<class TypeTag> +struct EnableGridGeometryCache<TypeTag, TTag::OnePIncompressible> { static constexpr bool value = FVGEOMCACHING; }; +} // end namespace Dumux::Properties +#endif diff --git a/test/porousmediumflow/1p/pointsources/timedependent/main.cc b/test/porousmediumflow/1p/pointsources/timedependent/main.cc index d6c388f43e..3426e6fb00 100644 --- a/test/porousmediumflow/1p/pointsources/timedependent/main.cc +++ b/test/porousmediumflow/1p/pointsources/timedependent/main.cc @@ -32,7 +32,7 @@ #include <dune/grid/io/file/vtk.hh> #include <dune/istl/io.hh> -#include "problem.hh" +#include "properties.hh" #include <dumux/common/properties.hh> #include <dumux/common/parameters.hh> diff --git a/test/porousmediumflow/1p/pointsources/timedependent/problem.hh b/test/porousmediumflow/1p/pointsources/timedependent/problem.hh index 724055ef6a..4e66184c4c 100644 --- a/test/porousmediumflow/1p/pointsources/timedependent/problem.hh +++ b/test/porousmediumflow/1p/pointsources/timedependent/problem.hh @@ -29,24 +29,6 @@ #include "../timeindependent/problem.hh" namespace Dumux { -template <class TypeTag> -class OnePSingularityProblemTimeDependent; - -namespace Properties { -// Create new type tags -namespace TTag { -struct OnePSingularityTimeDependentCCTpfa { using InheritsFrom = std::tuple<OnePSingularityCCTpfa>; }; -} // end namespace TTag - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePSingularityTimeDependentCCTpfa> { using type = OnePSingularityProblemTimeDependent<TypeTag>; }; - -// point source -template<class TypeTag> -struct PointSource<TypeTag, TTag::OnePSingularityTimeDependentCCTpfa> { using type = SolDependentPointSource<TypeTag>; }; -} - /*! * \ingroup OnePTests * \brief Test problem for the one-phase model: diff --git a/test/porousmediumflow/1p/pointsources/timedependent/properties.hh b/test/porousmediumflow/1p/pointsources/timedependent/properties.hh new file mode 100644 index 0000000000..9456ce8046 --- /dev/null +++ b/test/porousmediumflow/1p/pointsources/timedependent/properties.hh @@ -0,0 +1,47 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief A test problem for the one-phase model: + * Water is injected in one single point in the middle of the domain. + */ + +#ifndef DUMUX_1P_SINGULARITY_TIME_DEP_PROBLEM_PROPERTIES_HH +#define DUMUX_1P_SINGULARITY_TIME_DEP_PROBLEM_PROPERTIES_HH + +#include "../timeindependent/properties.hh" +#include "problem.hh" + +namespace Dumux::Properties { +// Create new type tags +namespace TTag { +struct OnePSingularityTimeDependentCCTpfa { using InheritsFrom = std::tuple<OnePSingularityCCTpfa>; }; +} // end namespace TTag + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePSingularityTimeDependentCCTpfa> { using type = OnePSingularityProblemTimeDependent<TypeTag>; }; + +// point source +template<class TypeTag> +struct PointSource<TypeTag, TTag::OnePSingularityTimeDependentCCTpfa> { using type = SolDependentPointSource<TypeTag>; }; +} // end namespace Dumux::Properties + +#endif diff --git a/test/porousmediumflow/1p/pointsources/timeindependent/main.cc b/test/porousmediumflow/1p/pointsources/timeindependent/main.cc index ed1c0563a7..6f4e0b8aca 100644 --- a/test/porousmediumflow/1p/pointsources/timeindependent/main.cc +++ b/test/porousmediumflow/1p/pointsources/timeindependent/main.cc @@ -32,7 +32,7 @@ #include <dune/grid/io/file/vtk.hh> #include <dune/istl/io.hh> -#include "problem.hh" +#include "properties.hh" #include <dumux/common/properties.hh> #include <dumux/common/parameters.hh> diff --git a/test/porousmediumflow/1p/pointsources/timeindependent/problem.hh b/test/porousmediumflow/1p/pointsources/timeindependent/problem.hh index 24a79d327f..651181f968 100644 --- a/test/porousmediumflow/1p/pointsources/timeindependent/problem.hh +++ b/test/porousmediumflow/1p/pointsources/timeindependent/problem.hh @@ -24,63 +24,13 @@ */ #ifndef DUMUX_1P_SINGULARITY_PROBLEM_HH #define DUMUX_1P_SINGULARITY_PROBLEM_HH - -#if HAVE_UG -#include <dune/grid/uggrid.hh> -#endif -#include <dune/grid/yaspgrid.hh> +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> #include <dumux/common/boundarytypes.hh> - -#include <dumux/discretization/cctpfa.hh> -#include <dumux/discretization/box.hh> -#include <dumux/porousmediumflow/1p/model.hh> #include <dumux/porousmediumflow/problem.hh> -#include <dumux/material/components/simpleh2o.hh> -#include <dumux/material/fluidsystems/1pliquid.hh> -#include <dumux/material/spatialparams/fv1pconstant.hh> - -#ifndef GRIDTYPE // default to yasp grid if not provided by CMake -#define GRIDTYPE Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> > -#endif namespace Dumux { -template <class TypeTag> -class OnePSingularityProblem; - -namespace Properties { -// Create new type tags -namespace TTag { -struct OnePSingularity { using InheritsFrom = std::tuple<OneP>; }; -struct OnePSingularityBox { using InheritsFrom = std::tuple<OnePSingularity, BoxModel>; }; -struct OnePSingularityCCTpfa { using InheritsFrom = std::tuple<OnePSingularity, CCTpfaModel>; }; -} // end namespace TTag - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::OnePSingularity> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; -}; - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::OnePSingularity> { using type = GRIDTYPE; }; - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::OnePSingularity> { using type = OnePSingularityProblem<TypeTag> ; }; - -// Set the spatial parameters -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::OnePSingularity> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FVSpatialParamsOnePConstant<GridGeometry, Scalar>; -}; -} // end namespace Dumux /*! * \ingroup OnePTests diff --git a/test/porousmediumflow/1p/pointsources/timeindependent/properties.hh b/test/porousmediumflow/1p/pointsources/timeindependent/properties.hh new file mode 100644 index 0000000000..efd3e803b7 --- /dev/null +++ b/test/porousmediumflow/1p/pointsources/timeindependent/properties.hh @@ -0,0 +1,81 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief A test problem for the one-phase model: + * Water is injected in one single point in the middle of the domain. + */ +#ifndef DUMUX_1P_SINGULARITY_PROBLEM_PROPERTIES_HH +#define DUMUX_1P_SINGULARITY_PROBLEM_PROPERTIES_HH + +#if HAVE_UG +#include <dune/grid/uggrid.hh> +#endif +#include <dune/grid/yaspgrid.hh> + +#include <dumux/discretization/cctpfa.hh> +#include <dumux/discretization/box.hh> +#include <dumux/porousmediumflow/1p/model.hh> + +#include <dumux/material/components/simpleh2o.hh> +#include <dumux/material/fluidsystems/1pliquid.hh> +#include <dumux/material/spatialparams/fv1pconstant.hh> + +#ifndef GRIDTYPE // default to yasp grid if not provided by CMake +#define GRIDTYPE Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> > +#endif + +#include "problem.hh" +namespace Dumux::Properties { +// Create new type tags +namespace TTag { +struct OnePSingularity { using InheritsFrom = std::tuple<OneP>; }; +struct OnePSingularityBox { using InheritsFrom = std::tuple<OnePSingularity, BoxModel>; }; +struct OnePSingularityCCTpfa { using InheritsFrom = std::tuple<OnePSingularity, CCTpfaModel>; }; +} // end namespace TTag + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePSingularity> +{ + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; +}; + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePSingularity> { using type = GRIDTYPE; }; + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePSingularity> { using type = OnePSingularityProblem<TypeTag> ; }; + +// Set the spatial parameters +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePSingularity> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = FVSpatialParamsOnePConstant<GridGeometry, Scalar>; +}; + +} // end namespace Dumux + +#endif -- GitLab