Commit a740e783 authored by Lukas Riedel's avatar Lukas Riedel

Merge branch 'sospinar/dorie-feature/simulation-traits' into 'master'

Simulation Traits

See #73

See merge request !65
parents c013eeb5 1e1b98b0
......@@ -10,6 +10,11 @@
* Rebuilds of the DUNE environment Docker image are now triggered by setting the
CI variable `REBUILD_BASE_IMAGE` to a non-empty value. Previously, the
builds in stage `setup` where triggered by any manual pipeline run.
* `Simulation` is renamed `RichardsSimulation` and moved to
[richards_simulation.hh](dune/dorie/interface/richards_simulation.hh).
* `RichardsSimulation` now has its own `RichardsSimulationTraits` derived from
`BaseTraits`, which defines all its member types. `BaseTraits` now have
reduced content and are intended to be shared between models/simulations.
### Fixed
* Removed VTK output from `dorie_mass_conservation` executable, which would
......@@ -26,25 +31,25 @@
### Added
* DORiE now employs a `SubsamplingVTKWriter` for higher output precision.
Subsampling levels are controlled via the new key `output.subsamplingLevel`.
* Automatic deployment of `devel` and stable DORiE Docker Images to Docker Hub
* Automatic update of the DUNE environment Docker Image for `master` builds
* CI pipeline now also compiles a Debug build with the LLVM Clang compiler
* Automatic deployment of `devel` and stable DORiE Docker Images to Docker Hub.
* Automatic update of the DUNE environment Docker Image for `master` builds.
* CI pipeline now also compiles a Debug build with the LLVM Clang compiler.
* Add `.gitattributes` for `CHANGELOG.md` to reduce merge conflicts with
`merge=union`
`merge=union`.
* Public API definition in documentation.
### Changed
* Update code base to DUNE v2.6
* Update code base to *DUNE v2.6*.
* Raise software requirements to versions available on Ubuntu 18.04 LTS
(Bionic Beaver)
* Switch VTK output from conforming to non-conforming
(Bionic Beaver).
* Switch VTK output from conforming to non-conforming.
* Use `multicore` build tag only for `test:parallel` build because the current
GitLab Runner cannot handle the load
GitLab Runner cannot handle the load.
* Use the `OVLP_AMG_4_DG` linear solver for all computations, including
sequential ones. This significantly improves performance for large problems.
* Change compilation order which reduces RAM usage when compiling in parallel.
* Decentralization of the header system so that in most of the header files are
independent of each other
independent of each other.
### Deprecated
* `output.subsamplingLevel` is optional and defaults to 0 if not given
......@@ -64,4 +69,4 @@
## 1.0.0 (2018-03-28)
First stable version
\ No newline at end of file
First stable version.
\ No newline at end of file
......@@ -16,11 +16,12 @@
#include <dune/grid/yaspgrid.hh>
#include <dune/grid/uggrid.hh>
#include "interface/simulation.hh"
#include "interface/richards_simulation.hh"
#include "solver/util_grid_creator.hh"
// #include <dune/dorie/dorie.hh> // System and DUNE Headers
//===============================================================
// Main program with grid setup
//===============================================================
......@@ -37,32 +38,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.
......
......@@ -7,12 +7,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
......@@ -3,14 +3,14 @@
#endif
#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
......@@ -3,14 +3,14 @@
#endif
#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
......@@ -3,14 +3,14 @@
#endif
#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
......@@ -3,14 +3,14 @@
#endif
#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
......@@ -3,14 +3,14 @@
#endif
#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
......@@ -3,14 +3,14 @@
#endif
#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
......@@ -3,12 +3,12 @@
#endif
#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
......@@ -3,12 +3,12 @@
#endif
#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
......@@ -3,12 +3,12 @@
#endif
#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
......@@ -3,12 +3,12 @@
#endif
#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
......@@ -3,12 +3,12 @@
#endif
#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
......@@ -3,12 +3,12 @@
#endif
#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
......@@ -22,7 +22,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:
......@@ -45,11 +45,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;
......@@ -88,7 +88,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")),
......@@ -246,14 +246,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;
......@@ -287,7 +287,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);
......
......@@ -183,11 +183,10 @@ public:
};
/// Traits struct defining basic types based on grid an geometry
template< template<int> class GridType, Dune::GeometryType::BasicType GeometryType, int dimension, int order , bool output, bool adaptivity>
template<class GridType, Dune::GeometryType::BasicType GeometryType, bool output, bool adaptivity>
struct BaseTraits
{
static constexpr int dim = dimension;
static constexpr int fem_order = order;
static constexpr int dim = GridType::dimension;
static constexpr bool write_output = output;
static constexpr bool adapt_grid = adaptivity;
static constexpr Dune::GeometryType::BasicType GridGeometryType = GeometryType;
......@@ -201,7 +200,7 @@ struct BaseTraits
using Index = unsigned int;
using IndexArray = Dune::FieldVector<Index,dim>;
using Grid = GridType<dim>;
using Grid = GridType;
using DomainField = typename Grid::ctype;
using DF = DomainField;
using Domain = Dune::FieldVector<DF,dim>;
......
......@@ -24,9 +24,7 @@
#include <dune/pdelab/localoperator/defaultimp.hh>
#include <dune/pdelab/finiteelement/localbasiscache.hh>
#include <dune/dorie/interface/simulation.hh>
#include <dune/dorie/interface/simulation.cc>
#include "../interface/richards_simulation.cc"
#include "../solver/util_typedefs.hh"
#include "../solver/util_grid_creator.hh"
#include "../solver/richards_boundary.hh"
......@@ -178,20 +176,20 @@ public:
/// Derived Simulation for testing mass conservation. Assumes
template <typename Traits>
class TestSimulation : public Simulation<Traits>
class TestSimulation : public RichardsSimulation<Traits>
{
protected:
// fetch typedefs from base class
using Sim = Simulation<Traits>;
using GV = typename Sim::GV;
using RF = typename Sim::RF;
using GFS = typename Sim::GFS;
using MBE = typename Sim::MBE;
using Grid = typename Sim::Grid;
using U = typename Sim::U;
using Sim = RichardsSimulation<Traits>;
using GV = typename Traits::GV;
using RF = typename Traits::RF;
using GFS = typename Traits::GFS;
using MBE = typename Traits::MBE;
using Grid = typename Traits::Grid;
using U = typename Traits::U;
using Parameters = typename Sim::Parameters;
using FlowBoundary = typename Sim::FlowBoundary;
using Parameters = typename Traits::Parameters;
using FlowBoundary = typename Traits::FlowBoundary;
/// Error Function Space Helper
using ERRGFSHelper = Dune::Dorie::LinearSolverGridFunctionSpaceHelper<GV, RF, Traits::GridGeometryType>;
......@@ -216,7 +214,7 @@ public:
Dune::MPIHelper &_helper,
std::shared_ptr<Grid> _grid,
Dune::ParameterTree &_inifile)
: Simulation<Traits>(_helper, _grid, _inifile)
: RichardsSimulation<Traits>(_helper, _grid, _inifile)
{ }
/// Compute the water flux into a certain domain
......
......@@ -15,29 +15,22 @@
#include <dune/dorie/test/test-mass-conservation.hh>
namespace Dune{
namespace Dorie{
/// Resolve the second (default) template parameter of YaspGrid
template<int dim>
using YaspGrid = Dune::YaspGrid<dim>;
}
}
template<int dim, int order>
using Simplex = Dune::Dorie::BaseTraits<Dune::UGGrid,
Dune::GeometryType::BasicType::simplex,dim,order,false,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,false,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,false,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,false,true>;
using CubeAdaptive = Dune::Dorie::RichardsSimulationTraits<Dune::Dorie::BaseTraits<Dune::UGGrid<dim>,
Dune::GeometryType::BasicType::cube,true,true>,order>;
int main (int argc, char** argv)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment