Skip to content
Snippets Groups Projects
Commit 2a3fca2d authored by Kilian Weishaupt's avatar Kilian Weishaupt
Browse files

Merge branch 'fix/test-diffusion' into 'master'

[fix][1p][test][sequential] Use a simple unit cube grid creator

The MPFA interaction volumes store ElementSeeds. In other to
restore entities from seed they need the grid which they obtain
from the GridCreator. Thus having a GridCreator singleton class
is mandatory for the MPFA models.

See merge request !116
parents 8541d0b1 148d9674
No related branches found
No related tags found
1 merge request!116[fix][1p][test][sequential] Use a simple unit cube grid creator
......@@ -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);
......
......@@ -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)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment