Commit 33b3c90d authored by Santiago Ospina's avatar Santiago Ospina

Modified the traits system such that is more flexible to receive other models

Signed-off-by: default avatarSantiago Ospina <saospina@hugo.iwr.uni-heidelberg.de>
parent f3feacd5
......@@ -5,6 +5,7 @@
#endif
#include <dune/dorie/dorie.hh> // System and DUNE Headers
//===============================================================
// Main program with grid setup
//===============================================================
......@@ -21,32 +22,24 @@
* \see Dune::Dorie::FlowSource Class handling Source Term query functions
*/
namespace Dune{
namespace Dorie{
/// Resolve the second (default) template parameter of YaspGrid
template<int dim>
using YaspGrid = Dune::YaspGrid<dim>;
}
}
template<typename Traits>
using Sim = Dune::Dorie::Simulation<Traits>;
using Sim = Dune::Dorie::RichardsSimulation<Traits>;
template<int dim, int order>
using Simplex = Dune::Dorie::BaseTraits<Dune::UGGrid,
Dune::GeometryType::BasicType::simplex,dim,order,true,false>;
using Simplex = Dune::Dorie::RichardsSimulationTraits<Dune::Dorie::BaseTraits<Dune::UGGrid<dim>,
Dune::GeometryType::BasicType::simplex,true,false>,order>;
template<int dim, int order>
using SimplexAdaptive = Dune::Dorie::BaseTraits<Dune::UGGrid,
Dune::GeometryType::BasicType::simplex,dim,order,true,true>;
using SimplexAdaptive = Dune::Dorie::RichardsSimulationTraits<Dune::Dorie::BaseTraits<Dune::UGGrid<dim>,
Dune::GeometryType::BasicType::simplex,true,true>,order>;
template<int dim, int order>
using Cube = Dune::Dorie::BaseTraits<Dune::Dorie::YaspGrid,
Dune::GeometryType::BasicType::cube,dim,order,true,false>;
using Cube = Dune::Dorie::RichardsSimulationTraits<Dune::Dorie::BaseTraits<Dune::YaspGrid<dim>,
Dune::GeometryType::BasicType::cube,true,false>,order>;
template<int dim, int order>
using CubeAdaptive = Dune::Dorie::BaseTraits<Dune::UGGrid,
Dune::GeometryType::BasicType::cube,dim,order,true,true>;
using CubeAdaptive = Dune::Dorie::RichardsSimulationTraits<Dune::Dorie::BaseTraits<Dune::UGGrid<dim>,
Dune::GeometryType::BasicType::cube,true,true>,order>;
/// Main Program Function: Initialize parameter file reader, build grid and call Richards Solver.
/** As simplex and rectangular grids demand different FiniteElementMaps, the program calls different functions for these tasks.
......
......@@ -4,12 +4,9 @@
namespace Dune{
namespace Dorie{
template<int dim>
using YaspGrid = Dune::YaspGrid<dim>;
using Geo = Dune::GeometryType::BasicType;
}
}
#endif // DUNE_DORIE_IMPL_HH
#endif // DUNE_DORIE_IMPL_HH
\ No newline at end of file
......@@ -4,14 +4,14 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<UGGrid,Geo::cube,2,1,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,2,1,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,2,1,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::cube,true,true>,1>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::simplex,true,true>,1>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::simplex,true,false>,1>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,14 +4,14 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<UGGrid,Geo::cube,2,2,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,2,2,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,2,2,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::cube,true,true>,2>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::simplex,true,true>,2>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::simplex,true,false>,2>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,14 +4,14 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<UGGrid,Geo::cube,2,3,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,2,3,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,2,3,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::cube,true,true>,3>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::simplex,true,true>,3>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<2>,Geo::simplex,true,false>,3>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,14 +4,14 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<UGGrid,Geo::cube,3,1,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,3,1,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,3,1,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::cube,true,true>,1>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::simplex,true,true>,1>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::simplex,true,false>,1>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,14 +4,14 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<UGGrid,Geo::cube,3,2,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,3,2,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,3,2,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::cube,true,true>,2>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::simplex,true,true>,2>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::simplex,true,false>,2>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
} // namespace Dune
......@@ -4,14 +4,14 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<UGGrid,Geo::cube,3,3,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,3,3,true,true>>;
template class Simulation<BaseTraits<UGGrid,Geo::simplex,3,3,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::cube,true,true>,3>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::simplex,true,true>,3>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<UGGrid<3>,Geo::simplex,true,false>,3>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,12 +4,12 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<YaspGrid,Geo::cube,2,1,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<YaspGrid<2>,Geo::cube,true,false>,1>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,12 +4,12 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<YaspGrid,Geo::cube,2,2,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<YaspGrid<2>,Geo::cube,true,false>,2>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,12 +4,12 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<YaspGrid,Geo::cube,2,3,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<YaspGrid<2>,Geo::cube,true,false>,3>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,12 +4,12 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<YaspGrid,Geo::cube,3,1,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<YaspGrid<3>,Geo::cube,true,false>,1>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,12 +4,12 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<YaspGrid,Geo::cube,3,2,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<YaspGrid<3>,Geo::cube,true,false>,2>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -4,12 +4,12 @@
#include <dune/dorie/dorie.hh>
#include <dune/dorie/impl/impl.hh>
#include <dune/dorie/interface/simulation.cc>
#include <dune/dorie/interface/richards_simulation.cc>
namespace Dune{
namespace Dorie{
template class Simulation<BaseTraits<YaspGrid,Geo::cube,3,3,true,false>>;
template class RichardsSimulation<RichardsSimulationTraits<BaseTraits<YaspGrid<3>,Geo::cube,true,false>,3>>;
} // namespace Dorie
} // namespace Dune
\ No newline at end of file
......@@ -5,6 +5,7 @@
#include <dune/dorie/interface/adaptivity.hh>
#include <dune/dorie/interface/output.hh>
#include <dune/dorie/interface/simulation.hh>
#include <dune/dorie/interface/richards_simulation.hh>
#include <dune/dorie/interface/knofu.hh>
#endif // DUNE_DORIE_INTERFACE_HH
......@@ -5,7 +5,7 @@ namespace Dune{
namespace Dorie{
/// Adaptivity base class. Does nothing.
template<typename Traits, typename GFS, typename Param, typename Boundary, typename U>
template<typename Traits, typename GFS, typename Param, typename Boundary, typename U, int order>
class AdaptivityHandlerBase
{
private:
......@@ -28,11 +28,11 @@ template<typename Traits,
typename GFS,
typename Param,
typename Boundary,
typename U>
class AdaptivityHandler : public AdaptivityHandlerBase<Traits,GFS,Param,Boundary,U>
typename U,
int order>
class AdaptivityHandler : public AdaptivityHandlerBase<Traits,GFS,Param,Boundary,U,order>
{
private:
static constexpr int order = Traits::fem_order;
using RF = typename Traits::RF;
using Grid = typename Traits::Grid;
using GV = typename Traits::GV;
......@@ -71,7 +71,7 @@ public:
* \param grid Grid to adapt (reference is not saved)
*/
AdaptivityHandler (Dune::ParameterTree& _inifile, Grid& grid)
: AdaptivityHandlerBase<Traits,GFS,Param,Boundary,U>(),
: AdaptivityHandlerBase<Traits,GFS,Param,Boundary,U,order>(),
inifile(_inifile),
maxLevel(inifile.get<int>("adaptivity.maxLevel")),
minLevel(inifile.get<int>("adaptivity.minLevel")),
......@@ -229,14 +229,14 @@ public:
* The constexpr boolean adapt_grid in Dune::Dorie::BaseTraits will
* define which create() function is enabled at compile time.
*/
template<typename Traits, typename GFS, typename Param, typename Boundary, typename U>
template<typename Traits, typename GFS, typename Param, typename Boundary, typename U, int order>
struct AdaptivityHandlerFactory
{
private:
static constexpr bool enabled = Traits::adapt_grid;
using Grid = typename Traits::Grid;
using AHB = AdaptivityHandlerBase<Traits,GFS,Param,Boundary,U>;
using AHB = AdaptivityHandlerBase<Traits,GFS,Param,Boundary,U,order>;
Dune::ParameterTree& inifile;
Grid& grid;
......@@ -270,7 +270,7 @@ public:
std::is_same<Grid,Dune::UGGrid<3>>::value,
"Adaptivity is only implemented for UGGrid!");
std::unique_ptr<AHB> p;
p = std::make_unique<AdaptivityHandler<Traits,GFS,Param,Boundary,U>>(inifile,grid);
p = std::make_unique<AdaptivityHandler<Traits,GFS,Param,Boundary,U,order>>(inifile,grid);
return p;
}
};
......
......@@ -64,13 +64,13 @@ public:
};
template<typename Traits>
class KnoFuInterface : public Simulation<Traits>
class KnoFuInterface : public RichardsSimulation<Traits>
{
protected:
using RF = typename Traits::RF;
using Grid = typename Traits::Grid;
using Base = Simulation<Traits>;
using Base = RichardsSimulation<Traits>;
using Parameters = typename Base::Parameters;
/// Interface uses GV on constant level
......@@ -99,7 +99,7 @@ public:
using SolutionContainer = typename KFU::Container;
KnoFuInterface (Dune::MPIHelper& _helper, std::shared_ptr<Grid> _grid, Dune::ParameterTree& _inifile)
: Simulation<Traits>(_helper,_grid,_inifile),
: RichardsSimulation<Traits>(_helper,_grid,_inifile),
kfgv(_grid->levelGridView(_inifile.get<int>("grid.initialLevel"))),
kfgfs(KFGFSHelper::create(kfgv)),
kfu(kfgfs,0.0)
......
#include "simulation.hh"
#include "richards_simulation.hh"
namespace Dune{
namespace Dorie{
template<typename Traits>
Simulation<Traits>::Simulation (Dune::MPIHelper& _helper, std::shared_ptr<Grid> _grid, Dune::ParameterTree& _inifile) :
RichardsSimulation<Traits>::RichardsSimulation (Dune::MPIHelper& _helper, std::shared_ptr<Grid> _grid, Dune::ParameterTree& _inifile) :
helper(_helper), grid(_grid), inifile(_inifile), gv(grid->leafGridView()),
mbe_slop(estimate_mbe_entries<typename MBE::size_type>(Traits::dim,Traits::GridGeometryType)),
mbe_tlop(1),
......@@ -69,7 +69,7 @@ Simulation<Traits>::Simulation (Dune::MPIHelper& _helper, std::shared_ptr<Grid>
}
template<typename Traits>
void Simulation<Traits>::operator_setup ()
void RichardsSimulation<Traits>::operator_setup ()
{
Dune::PDELab::constraints(*this->gfs,*this->cc,false);
// --- Grid Operators ---
......@@ -115,7 +115,7 @@ void Simulation<Traits>::operator_setup ()
}
template<typename Traits>
bool Simulation<Traits>::compute_time_step ()
bool RichardsSimulation<Traits>::compute_time_step ()
{
const RF t = controller->getTime();
const RF dt = controller->getDT();
......@@ -153,7 +153,7 @@ bool Simulation<Traits>::compute_time_step ()
}
template<typename Traits>
void Simulation<Traits>::run ()
void RichardsSimulation<Traits>::run ()
{
const auto t_start = controller->getTime();
output->write_vtk_output(t_start);
......
#ifndef DUNE_DORIE_SIMULATION_HH
#define DUNE_DORIE_SIMULATION_HH
#ifndef DUNE_DORIE_RICHARDS_SIMULATION_HH
#define DUNE_DORIE_RICHARDS_SIMULATION_HH
#include "simulation.hh"
#include "util.hh"
#include "../solver/util_interpolator.hh"
#include "../solver/param_base.hh"
#include "../solver/param_factory.hh"
#include "../solver/richards_initial.hh"
#include "../solver/richards_boundary.hh"
#include "../solver/richards_source.hh"
#include "../solver/operator_DG.hh"
#include "../solver/util_controller.hh"
namespace Dune{
namespace Dorie{
/// Basic Simulation class providing objects and functions for computing the solution
template<typename Traits>
class Simulation
/*-------------------------------------------------------------------------*//**
* @brief Traits for the class RichardsSimulation. In particular, this
* class extends BaseTraits to be used for the DG implementation of
* the Richards simulation
*
* @tparam BaseTraits Traits defining domain and range field properties of
* the simulation.
* @tparam order Order of the polynomial degree used for the basis
* functions in the DG method
*/
template<class BaseTraits, int order>
struct RichardsSimulationTraits : public BaseTraits
{
protected:
static constexpr int dim = Traits::dim;
static constexpr int order = Traits::fem_order;
using RF = typename Traits::RF;
using Grid = typename Traits::Grid;
using GV = typename Traits::GV;
static constexpr int dim = BaseTraits::dim;
static constexpr int fem_order = order;
using RF = typename BaseTraits::RF;
using Grid = typename BaseTraits::Grid;
using GV = typename BaseTraits::GV;
/// GFS Helper
using GFSHelper = Dune::Dorie::GridFunctionSpaceHelper<GV,RF,Traits::fem_order,Traits::GridGeometryType>;
using GFSHelper = Dune::Dorie::GridFunctionSpaceHelper<GV,RF,fem_order,BaseTraits::GridGeometryType>;
/// Problem GFS
using GFS = typename GFSHelper::Type;
/// GFS Constraints Container
......@@ -25,7 +44,7 @@ protected:
/// LSGFS Helper
using LSGFSHelper = Dune::Dorie::LinearSolverGridFunctionSpaceHelper<GV,RF,Traits::GridGeometryType>;
using LSGFSHelper = Dune::Dorie::LinearSolverGridFunctionSpaceHelper<GV,RF,BaseTraits::GridGeometryType>;
/// Linear solver GFS
using LSGFS = typename LSGFSHelper::Type;
/// LSGFS Constraints Container
......@@ -33,23 +52,23 @@ protected:
// -- DORiE Class Definitions -- //
/// Parameter Interpolator
using Interpolator = Dune::Dorie::InterpolatorBase<Traits,Traits::dim>;
using Interpolator = Dune::Dorie::InterpolatorBase<BaseTraits,BaseTraits::dim>;
/// Factory class for Interpolator
using InterpolatorFactory = Dune::Dorie::InterpolatorFactory<Traits,Traits::dim>;
using InterpolatorFactory = Dune::Dorie::InterpolatorFactory<BaseTraits,BaseTraits::dim>;
/// Class handling soil parameters
using Parameters = Dune::Dorie::ParameterizationBase<Traits,Interpolator>;
using Parameters = Dune::Dorie::ParameterizationBase<BaseTraits,Interpolator>;
/// Factory class for Parmeter class
using ParameterizationFactory = Dune::Dorie::ParameterizationFactory<Traits,Interpolator>;
using ParameterizationFactory = Dune::Dorie::ParameterizationFactory<BaseTraits,Interpolator>;
/// Class defining boundary conditions
using FlowBoundary = Dune::Dorie::FlowBoundary<Traits>;
using FlowBoundary = Dune::Dorie::FlowBoundary<BaseTraits>;
/// Class defining source terms
using FlowSource = Dune::Dorie::FlowSource<Traits,Parameters>;
using FlowSource = Dune::Dorie::FlowSource<BaseTraits,Parameters>;
/// Class defining the initial condition
using FlowInitial = Dune::Dorie::FlowInitial<Traits,Parameters>;
using FlowInitial = Dune::Dorie::FlowInitial<BaseTraits,Parameters>;
/// Local spatial operator
using SLOP = Dune::Dorie::Operator::RichardsDGSpatialOperator<Traits,Parameters,FlowBoundary,FlowSource,typename GFSHelper::FEM,false>;
using SLOP = Dune::Dorie::Operator::RichardsDGSpatialOperator<BaseTraits,Parameters,FlowBoundary,FlowSource,typename GFSHelper::FEM,false>;
/// Local temporal operator
using TLOP = Dune::Dorie::Operator::RichardsDGTemporalOperator<Traits,Parameters,typename GFSHelper::FEM,false>;
using TLOP = Dune::Dorie::Operator::RichardsDGTemporalOperator<BaseTraits,Parameters,typename GFSHelper::FEM,false>;
/// Time controller
using CalculationController = Dune::Dorie::CalculationController<RF,FlowBoundary>;
......@@ -76,13 +95,106 @@ protected:
// -- Utility Class Definitions -- //
/// VTK Output writer base class
using OutputWriter = Dune::Dorie::OutputWriterBase<Traits>;
using OutputWriter = Dune::Dorie::OutputWriterBase<BaseTraits>;
/// Factory for creating the output writer
using OutputWriterFactory = Dune::Dorie::OutputWriterFactory<Traits,GFS,Parameters,U>;
using OutputWriterFactory = Dune::Dorie::OutputWriterFactory<BaseTraits,GFS,Parameters,U>;
/// Grid Adaptivity Handler base class
using AdaptivityHandler = Dune::Dorie::AdaptivityHandlerBase<Traits,GFS,Parameters,FlowBoundary,U>;
using AdaptivityHandler = Dune::Dorie::AdaptivityHandlerBase<BaseTraits,GFS,Parameters,FlowBoundary,U,order>;
/// Factory for creating the AdaptivityHandler
using AdaptivityHandlerFactory = Dune::Dorie::AdaptivityHandlerFactory<Traits,GFS,Parameters,FlowBoundary,U>;
using AdaptivityHandlerFactory = Dune::Dorie::AdaptivityHandlerFactory<BaseTraits,GFS,Parameters,FlowBoundary,U,order>;
};
/*-------------------------------------------------------------------------*//**
* @brief Class for Richards simulation. This class manages the simulation
* for the richards equation. It can perform time-steps and print
* the solution
*
* @tparam RichardsSimulationTraits Traits containing the type definitions
* which this class will use.
*/
template<typename RichardsSimulationTraits>
class RichardsSimulation // : public SimulationBase
{
public:
using Traits = RichardsSimulationTraits;
private:
static constexpr int dim = Traits::dim;
static constexpr int order = Traits::fem_order;
using RF = typename Traits::RF;
using Grid = typename Traits::Grid;
using GV = typename Traits::GV;
/// GFS Helper
using GFSHelper = typename Traits::GFSHelper;
/// Problem GFS
using GFS = typename Traits::GFS;
/// GFS Constraints Container
using CC = typename Traits::CC;
/// LSGFS Helper
using LSGFSHelper = typename Traits::LSGFSHelper;
/// Linear solver GFS
using LSGFS = typename Traits::LSGFS;
/// LSGFS Constraints Container
using LSCC = typename Traits::LSCC;
// -- DORiE Class Definitions -- //
/// Parameter Interpolator
using Interpolator = typename Traits::Interpolator;
/// Factory class for Interpolator
using InterpolatorFactory = typename Traits::InterpolatorFactory;
/// Class handling soil parameters
using Parameters = typename Traits::Parameters;
/// Factory class for Parmeter class
using ParameterizationFactory = typename Traits::ParameterizationFactory;
/// Class defining boundary conditions
using FlowBoundary = typename Traits::FlowBoundary;
/// Class defining source terms
using FlowSource = typename Traits::FlowSource;
/// Class defining the initial condition
using FlowInitial = typename Traits::FlowInitial;
/// Local spatial operator
using SLOP = typename Traits::SLOP;
/// Local temporal operator
using TLOP = typename Traits::TLOP;
/// Time controller
using CalculationController = typename Traits::CalculationController;
// -- DUNE Class Defintions -- //
/// Matrix backend type
using MBE = typename Traits::MBE;
/// Grid operator for spatial LOP
using GO0 = typename Traits::GO0;
/// Grid operator for temporal LOP
using GO1 = typename Traits::GO1;
/// One step grid operator for merging both GOs
using IGO = typename Traits::IGO;
/// Solution vector type
using U = typename Traits::U;
/// Linear solver types
using LS = typename Traits::LS;
/// Non-linear solver types
using PDESOLVER = typename Traits::PDESOLVER;
/// Time stepping scheme
using TimeStepScheme = typename Traits::TimeStepScheme;
/// Methods computing the time step
using OSM = typename Traits::OSM;
// -- Utility Class Definitions -- //
/// VTK Output writer base class