diff --git a/test/porousmediumflow/1p/sequential/test_diffusion.cc b/test/porousmediumflow/1p/sequential/test_diffusion.cc index 6682b64e968121bc38c7c5aad05a176466f529f9..91b1fc0d379afabeae9ee50959fa0f40784d9b88 100644 --- a/test/porousmediumflow/1p/sequential/test_diffusion.cc +++ b/test/porousmediumflow/1p/sequential/test_diffusion.cc @@ -27,7 +27,6 @@ #include <dune/common/exceptions.hh> #include <dune/common/parallel/mpihelper.hh> -#include <dune/grid/utility/structuredgridfactory.hh> #include "test_diffusionproblem.hh" #include "resultevaluation.hh" @@ -35,6 +34,7 @@ //////////////////////// // the main function //////////////////////// + void usage(const char *progname) { std::cout << "usage: " << progname << " #refine [delta]\n"; @@ -45,10 +45,6 @@ int main(int argc, char** argv) { try { typedef TTAG(FVVelocity2PTestProblem) TypeTag; - typedef GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef GET_PROP_TYPE(TypeTag, Grid) Grid; - static const int dim = Grid::dimension; - typedef Dune::FieldVector<Scalar, dim> GlobalPosition; // initialize MPI, finalize is done automatically on exit Dune::MPIHelper::instance(argc, argv); @@ -69,15 +65,10 @@ int main(int argc, char** argv) //////////////////////////////////////////////////////////// // create the grid //////////////////////////////////////////////////////////// - std::array<unsigned int, dim> cellRes; - cellRes.fill(1); - GlobalPosition lowerLeft(0.0); - GlobalPosition upperRight(1.0); - static std::shared_ptr<Grid> grid - = Dune::StructuredGridFactory<Grid>::createCubeGrid(lowerLeft, - upperRight, - cellRes); - grid->globalRefine(numRefine); + using GridCreator = GET_PROP_TYPE(TypeTag, GridCreator); + GridCreator::createGrid(); + auto& grid = GridCreator::grid(); + grid.globalRefine(numRefine); //////////////////////////////////////////////////////////// // instantiate and run the concrete problem @@ -86,7 +77,7 @@ int main(int argc, char** argv) bool consecutiveNumbering = true; typedef GET_PROP_TYPE(TTAG(FVVelocity2PTestProblem), Problem) FVProblem; - FVProblem fvProblem(grid->leafGridView(), delta); + FVProblem fvProblem(grid.leafGridView(), delta); fvProblem.setName("fvdiffusion"); timer.reset(); fvProblem.init(); @@ -94,27 +85,27 @@ int main(int argc, char** argv) double fvTime = timer.elapsed(); fvProblem.writeOutput(); Dumux::ResultEvaluation fvResult; - fvResult.evaluate(grid->leafGridView(), fvProblem, consecutiveNumbering); + fvResult.evaluate(grid.leafGridView(), fvProblem, consecutiveNumbering); typedef GET_PROP_TYPE(TTAG(FVMPFAOVelocity2PTestProblem), Problem) MPFAOProblem; - MPFAOProblem mpfaProblem(grid->leafGridView(), delta); + MPFAOProblem mpfaProblem(grid.leafGridView(), delta); mpfaProblem.setName("fvmpfaodiffusion"); timer.reset(); mpfaProblem.init(); double mpfaTime = timer.elapsed(); mpfaProblem.writeOutput(); Dumux::ResultEvaluation mpfaResult; - mpfaResult.evaluate(grid->leafGridView(), mpfaProblem, consecutiveNumbering); + mpfaResult.evaluate(grid.leafGridView(), mpfaProblem, consecutiveNumbering); typedef GET_PROP_TYPE(TTAG(MimeticPressure2PTestProblem), Problem) MimeticProblem; - MimeticProblem mimeticProblem(grid->leafGridView(), delta); + MimeticProblem mimeticProblem(grid.leafGridView(), delta); mimeticProblem.setName("mimeticdiffusion"); timer.reset(); mimeticProblem.init(); double mimeticTime = timer.elapsed(); mimeticProblem.writeOutput(); Dumux::ResultEvaluation mimeticResult; - mimeticResult.evaluate(grid->leafGridView(), mimeticProblem, consecutiveNumbering); + mimeticResult.evaluate(grid.leafGridView(), mimeticProblem, consecutiveNumbering); std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield); std::cout.precision(2); diff --git a/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh b/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh index abb04a49e18e9d158fdecbb46c08fcb6ac2270c2..8164b9a80badc3c8183435100acd81d97a1851f5 100644 --- a/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh +++ b/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh @@ -25,6 +25,7 @@ #define DUMUX_TEST_2P_PROBLEM_HH #include <dune/grid/yaspgrid.hh> +#include <dune/grid/utility/structuredgridfactory.hh> #include <dumux/material/components/unit.hh> @@ -38,6 +39,34 @@ namespace Dumux { + +// A simple unit sqare grid creator +template <class Grid> +class UnitCubeGridCreator +{ +public: + static Grid& grid() + { + return *gridPtr(); + } + + static void createGrid() + { + std::array<unsigned int, Grid::dimension> cellRes; + cellRes.fill(1); + using GlobalPosition = Dune::FieldVector<typename Grid::ctype, Grid::dimension>; + GlobalPosition lowerLeft(0.0); + GlobalPosition upperRight(1.0); + gridPtr() = Dune::StructuredGridFactory<Grid>::createCubeGrid(lowerLeft, upperRight, cellRes); + } +private: + static std::shared_ptr<Grid> &gridPtr() + { + static std::shared_ptr<Grid> gridPtr_; + return gridPtr_; + } +}; + /*! * \ingroup IMPETtests */ @@ -56,6 +85,9 @@ SET_TYPE_PROP(FVVelocity2PTestProblem, Problem, Dumux::TestDiffusionProblem<Type // Set the grid type SET_TYPE_PROP(FVVelocity2PTestProblem, Grid, Dune::YaspGrid<2>); +SET_TYPE_PROP(FVVelocity2PTestProblem, GridCreator, + Dumux::UnitCubeGridCreator<typename GET_PROP_TYPE(TypeTag, Grid)>); + // Set the wetting phase SET_PROP(FVVelocity2PTestProblem, WettingPhase) { @@ -87,6 +119,9 @@ SET_TYPE_PROP(FVMPFAOVelocity2PTestProblem, Problem, Dumux::TestDiffusionProblem // Set the grid type SET_TYPE_PROP(FVMPFAOVelocity2PTestProblem, Grid, Dune::YaspGrid<2>); +SET_TYPE_PROP(FVMPFAOVelocity2PTestProblem, GridCreator, + Dumux::UnitCubeGridCreator<typename GET_PROP_TYPE(TypeTag, Grid)>); + // Set the wetting phase SET_PROP(FVMPFAOVelocity2PTestProblem, WettingPhase) { @@ -115,6 +150,10 @@ SET_TYPE_PROP(MimeticPressure2PTestProblem, Problem, Dumux::TestDiffusionProblem // Set the grid type SET_TYPE_PROP(MimeticPressure2PTestProblem, Grid, Dune::YaspGrid<2>); +SET_TYPE_PROP(MimeticPressure2PTestProblem, GridCreator, + Dumux::UnitCubeGridCreator<typename GET_PROP_TYPE(TypeTag, Grid)>); + + // Set the wetting phase SET_PROP(MimeticPressure2PTestProblem, WettingPhase) {