From 12eebf7afd6b4706020f84e15a118364868d7a6a Mon Sep 17 00:00:00 2001 From: Simon Praetorius <simon.praetorius@tu-dresden.de> Date: Fri, 24 Aug 2018 18:33:35 +0200 Subject: [PATCH] restructuring of structureddatacollector --- dune/vtk/datacollectors/spdatacollector.hh | 10 ++++- .../datacollectors/structureddatacollector.hh | 13 ++++++ dune/vtk/datacollectors/yaspdatacollector.hh | 9 ++++ dune/vtk/vtkimagedatawriter.hh | 2 +- dune/vtk/vtkstructuredgridwriter.hh | 3 +- src/structuredgridwriter.cc | 43 ++----------------- 6 files changed, 38 insertions(+), 42 deletions(-) diff --git a/dune/vtk/datacollectors/spdatacollector.hh b/dune/vtk/datacollectors/spdatacollector.hh index 1428385..f70cf55 100644 --- a/dune/vtk/datacollectors/spdatacollector.hh +++ b/dune/vtk/datacollectors/spdatacollector.hh @@ -97,6 +97,14 @@ private: std::vector<std::size_t> indexMap_; }; -#endif +namespace Impl +{ + template<class GridView, class ct, int dim, template< int > class Ref, class Comm> + struct StructuredDataCollector<GridView, SPGrid<ct,dim,Ref,Comm>> + { + using type = SPDataCollector<GridView>; + }; +} +#endif // HAVE_DUNE_SPGRID }} // end namespace Dune::experimental diff --git a/dune/vtk/datacollectors/structureddatacollector.hh b/dune/vtk/datacollectors/structureddatacollector.hh index 667696f..7dc7316 100644 --- a/dune/vtk/datacollectors/structureddatacollector.hh +++ b/dune/vtk/datacollectors/structureddatacollector.hh @@ -4,6 +4,19 @@ namespace Dune { namespace experimental { + +namespace Impl +{ + // Should be specialized for concrete structured grid + template <class GridView, class Grid> + struct StructuredDataCollector; +} + +template <class GridView> +using StructuredDataCollector = typename Impl::StructuredDataCollector<GridView, typename GridView::Grid>::type; + + +/// The Interface for structured data-collectors template <class GridView, class Derived> class StructuredDataCollectorInterface : public DataCollectorInterface<GridView, Derived> diff --git a/dune/vtk/datacollectors/yaspdatacollector.hh b/dune/vtk/datacollectors/yaspdatacollector.hh index e557941..3a87772 100644 --- a/dune/vtk/datacollectors/yaspdatacollector.hh +++ b/dune/vtk/datacollectors/yaspdatacollector.hh @@ -121,4 +121,13 @@ private: int level_; }; +namespace Impl +{ + template<class GridView, int dim, class Coordinates> + struct StructuredDataCollector<GridView, YaspGrid<dim,Coordinates>> + { + using type = YaspDataCollector<GridView>; + }; +} + }} // end namespace Dune::experimental diff --git a/dune/vtk/vtkimagedatawriter.hh b/dune/vtk/vtkimagedatawriter.hh index 55a1df5..b1e4345 100644 --- a/dune/vtk/vtkimagedatawriter.hh +++ b/dune/vtk/vtkimagedatawriter.hh @@ -14,7 +14,7 @@ namespace Dune { namespace experimental { /// File-Writer for VTK .vtu files - template <class GridView, class DataCollector> + template <class GridView, class DataCollector = StructuredDataCollector<GridView>> class VtkImageDataWriter : public VtkWriter<GridView, DataCollector> { diff --git a/dune/vtk/vtkstructuredgridwriter.hh b/dune/vtk/vtkstructuredgridwriter.hh index a3c3b68..8c3aaa2 100644 --- a/dune/vtk/vtkstructuredgridwriter.hh +++ b/dune/vtk/vtkstructuredgridwriter.hh @@ -9,11 +9,12 @@ #include "vtkfunction.hh" #include "vtktypes.hh" #include "vtkwriter.hh" +#include "datacollectors/structureddatacollector.hh" namespace Dune { namespace experimental { /// File-Writer for VTK .vtu files - template <class GridView, class DataCollector> + template <class GridView, class DataCollector = StructuredDataCollector<GridView>> class VtkStructuredGridWriter : public VtkWriter<GridView, DataCollector> { diff --git a/src/structuredgridwriter.cc b/src/structuredgridwriter.cc index 48afc46..b52d6db 100644 --- a/src/structuredgridwriter.cc +++ b/src/structuredgridwriter.cc @@ -29,63 +29,26 @@ using namespace Dune; using namespace Dune::experimental; using namespace Dune::Functions; -namespace Impl_ -{ - template <class GridView, class Grid> - struct StructuredDataCollector; - -#if HAVE_DUNE_SPGRID - template<class GridView, class ct, int dim, template< int > class Ref, class Comm> - struct StructuredDataCollector<GridView, SPGrid<ct,dim,Ref,Comm>> - { - using type = SPDataCollector<GridView>; - }; -#endif - - template<class GridView, int dim, class Coordinates> - struct StructuredDataCollector<GridView, YaspGrid<dim,Coordinates>> - { - using type = YaspDataCollector<GridView>; - }; -} - -template <class GridView> -using StructuredDataCollector = typename Impl_::StructuredDataCollector<GridView, typename GridView::Grid>::type; - - template <int dim> using int_ = std::integral_constant<int,dim>; template <class GridView> void write(std::string prefix, GridView const& gridView) { - using namespace BasisFactory; - auto basis = makeBasis(gridView, lagrange<1>()); - - std::vector<double> p1function(basis.dimension()); - interpolate(basis, p1function, [](auto const& x) { - return 100*x[0] + 10*x[1] + 1*x[2]; - }); - - auto fct1 = makeDiscreteGlobalBasisFunction<double>(basis, p1function); auto fct2 = makeAnalyticGridViewFunction([](auto const& x) { return std::sin(10*x[0])*std::cos(10*x[1])+std::sin(10*x[2]); }, gridView); { - using Writer = VtkStructuredGridWriter<GridView, StructuredDataCollector<GridView>>; + using Writer = VtkStructuredGridWriter<GridView>; Writer vtkWriter(gridView); - vtkWriter.addPointData(fct1, "p1"); - vtkWriter.addCellData(fct1, "p0"); vtkWriter.addPointData(fct2, "analytic"); vtkWriter.write(prefix + "sg_ascii_float32.vts", Vtk::ASCII); } { - using Writer = VtkImageDataWriter<GridView, StructuredDataCollector<GridView>>; + using Writer = VtkImageDataWriter<GridView>; Writer vtkWriter(gridView); - vtkWriter.addPointData(fct1, "p1"); - vtkWriter.addCellData(fct1, "p0"); vtkWriter.addPointData(fct2, "analytic"); vtkWriter.write(prefix + "id_ascii_float32.vti", Vtk::ASCII); } @@ -98,6 +61,7 @@ void write_yaspgrid(std::integral_constant<int,dim>) FieldVector<double,dim> upperRight; upperRight = 1.0; auto numElements = filledArray<dim,int>(8); GridType grid(upperRight,numElements,0,0); + grid.globalRefine(1); write("yasp_" + std::to_string(dim) + "d_", grid.leafGridView()); } @@ -110,6 +74,7 @@ void write_spgrid(std::integral_constant<int,dim>) FieldVector<double,dim> upperRight; upperRight = 1.0; auto numElements = filledArray<dim,int>(8); GridType grid(SPDomain<double,dim>::unitCube(),numElements); + grid.globalRefine(1); write("sp_" + std::to_string(dim) + "d_", grid.leafGridView()); #endif -- GitLab