Skip to content
Snippets Groups Projects

rewritten mesh creator to support more general creation

Merged Praetorius, Simon requested to merge feature/mesh_creator into master
All threads resolved!
1 file
+ 26
4
Compare changes
  • Side-by-side
  • Inline
+ 26
4
@@ -109,8 +109,7 @@ namespace AMDiS
auto ext = fn.extension();
if (ext == ".msh") {
Dune::GmshReader<Grid> reader;
return std::unique_ptr<Grid>{reader.read(filename)};
return read_gmsh_file<Grid>(filename, Dune::PriorityTag<42>{});
}
else if (ext == ".1d" || ext == ".2d" || ext == ".3d" || ext == ".amc") {
return read_alberta_file<Grid>(filename, Dune::PriorityTag<42>{});
@@ -124,6 +123,29 @@ namespace AMDiS
}
}
template <class GridType>
using SupportsGmshReader = decltype(std::declval<Dune::GridFactory<GridType>>().insertBoundarySegment(
std::declval<std::vector<unsigned int>>(),
std::declval<std::shared_ptr<Dune::BoundarySegment<GridType::dimension, GridType::dimensionworld> >>()) );
// use GmshReader if GridFactory supports insertBoundarySegments
template <class GridType = Grid,
REQUIRES(Dune::Std::is_detected<SupportsGmshReader, GridType>::value)>
static std::unique_ptr<GridType> read_gmsh_file(std::string const& filename, Dune::PriorityTag<2>)
{
Dune::GmshReader<GridType> reader;
return std::unique_ptr<GridType>{reader.read(filename)};
}
// fallback if GmshReader cannot be used
template <class GridType = Grid>
static std::unique_ptr<GridType> read_gmsh_file(std::string const& filename, Dune::PriorityTag<0>)
{
error_exit("Gmsh reader not supported for this grid type!");
return {};
}
// read from Alberta file
#if HAVE_ALBERTA
template <class GridType>
@@ -133,7 +155,7 @@ namespace AMDiS
template <class GridType = Grid,
REQUIRES(GridType::dimensionworld == WORLDDIM),
REQUIRES(Dune::Std::is_detected<IsAlbertaGrid, GridType>::value)>
static std::unique_ptr<Grid> read_alberta_file(std::string const& filename, Dune::PriorityTag<3>)
static std::unique_ptr<GridType> read_alberta_file(std::string const& filename, Dune::PriorityTag<3>)
{
return std::make_unique<GridType>(filename);
}
@@ -141,7 +163,7 @@ namespace AMDiS
// use a gridfactory and the generic AlbertaReader
template <class GridType = Grid,
REQUIRES(GridType::dimensionworld == WORLDDIM)>
static std::unique_ptr<Grid> read_alberta_file(std::string const& filename, Dune::PriorityTag<2>)
static std::unique_ptr<GridType> read_alberta_file(std::string const& filename, Dune::PriorityTag<2>)
{
Dune::GridFactory<GridType> factory;
Dune::AlbertaReader<GridType> reader;
Loading