diff --git a/dune/gdt/discretefunction/default.hh b/dune/gdt/discretefunction/default.hh index c9c0c56b959d6e2a0ca2de976525f493befb0b5a..8aa4ebe290e48290016967e0d8cc4e28aa9a5a71 100644 --- a/dune/gdt/discretefunction/default.hh +++ b/dune/gdt/discretefunction/default.hh @@ -110,6 +110,11 @@ struct static_for_loop<last_factor_index, last_factor_index> } }; +template <bool /*is_product_space*/> +struct ChooseVisualize +{ +}; + } // namespace internal @@ -196,8 +201,7 @@ public: * \brief Visualizes the function using Dune::Stuff::LocalizableFunctionInterface::visualize on the grid view * associated with the space. * \sa Dune::Stuff::LocalizableFunctionInterface::visualize - * \note Subsampling is disabled for Finite Volume functions and enabled by default for functions of order higher - * than one. + * \note Subsampling is enabled by default for functions of order greater than one. */ void visualize(const std::string filename, const bool subsampling = (SpaceType::polOrder > 1), const VTK::OutputType vtk_output_type = VTK::appendedraw) const @@ -209,7 +213,12 @@ public: const bool subsampling = (SpaceType::polOrder > 1), const VTK::OutputType vtk_output_type = VTK::appendedraw) const { - redirect_visualize(space(), filename_prefix, filename_suffix, subsampling, vtk_output_type); + redirect_visualize(space(), + filename_prefix, + filename_suffix, + subsampling, + vtk_output_type, + internal::ChooseVisualize<is_product_space<SpaceType>::value>()); } template <size_t ii> @@ -230,16 +239,16 @@ protected: template <class S, size_t d, size_t r, size_t rC> void redirect_visualize(const SpaceInterface<S, d, r, rC>& space, const std::string filename_prefix, const std::string filename_suffix, const bool subsampling, - const VTK::OutputType vtk_output_type) const + const VTK::OutputType vtk_output_type, const internal::ChooseVisualize<false>&) const { BaseType::template visualize<typename SpaceType::GridViewType>( space.grid_view(), filename_prefix + filename_suffix, subsampling, vtk_output_type); } // ... redirect_visualize(...) template <class S, size_t d, size_t r, size_t rC> - void redirect_visualize(const ProductSpaceInterface<S, d, r, rC>& /*space*/, const std::string filename_prefix, + void redirect_visualize(const SpaceInterface<S, d, r, rC>& /*space*/, const std::string filename_prefix, const std::string filename_suffix, const bool subsampling, - const VTK::OutputType vtk_output_type) const + const VTK::OutputType vtk_output_type, const internal::ChooseVisualize<true>&) const { internal::static_for_loop<0, ProductSpaceInterface<S, d, r, rC>::num_factors>::visualize( filename_prefix, filename_suffix, subsampling, vtk_output_type, *this); diff --git a/dune/gdt/playground/spaces/dg/pdelabproduct.hh b/dune/gdt/playground/spaces/dg/pdelabproduct.hh index 0388c4cb010876e60f4723a38297076511dd1ee1..2be6ebb2995a8c9335f75a58dc45bdb8500bfb5e 100644 --- a/dune/gdt/playground/spaces/dg/pdelabproduct.hh +++ b/dune/gdt/playground/spaces/dg/pdelabproduct.hh @@ -66,17 +66,20 @@ public: template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim> class PdelabBasedProduct<GridViewImp, polynomialOrder, RangeFieldImp, rangeDim, 1> - : public Dune::GDT::ProductSpaceInterface<internal::PdelabBasedProductTraits<GridViewImp, polynomialOrder, + : public Dune::GDT::SpaceInterface<internal::PdelabBasedProductTraits<GridViewImp, polynomialOrder, RangeFieldImp, + rangeDim, 1>, + GridViewImp::dimension, rangeDim, 1>, + public Dune::GDT::ProductSpaceInterface<internal::PdelabBasedProductTraits<GridViewImp, polynomialOrder, RangeFieldImp, rangeDim, 1>, GridViewImp::dimension, rangeDim, 1> { typedef PdelabBasedProduct<GridViewImp, polynomialOrder, RangeFieldImp, rangeDim, 1> ThisType; - typedef typename Dune::GDT::ProductSpaceInterface<internal::PdelabBasedProductTraits<GridViewImp, polynomialOrder, - RangeFieldImp, rangeDim, 1>, - GridViewImp::dimension, rangeDim, 1> BaseType; + typedef typename Dune::GDT::SpaceInterface<internal::PdelabBasedProductTraits<GridViewImp, polynomialOrder, + RangeFieldImp, rangeDim, 1>, + GridViewImp::dimension, rangeDim, 1> BaseType; public: - using typename BaseType::Traits; + typedef typename internal::PdelabBasedProductTraits<GridViewImp, polynomialOrder, RangeFieldImp, rangeDim, 1> Traits; using typename BaseType::GridViewType; using typename BaseType::EntityType; using typename BaseType::BaseFunctionSetType; diff --git a/dune/gdt/spaces/fv/defaultproduct.hh b/dune/gdt/spaces/fv/defaultproduct.hh index 82e78da761b3002de11b0d06f716fd74ecb86264..c3cb7cdc67c21eac225dade1bae6cad2def90a0f 100644 --- a/dune/gdt/spaces/fv/defaultproduct.hh +++ b/dune/gdt/spaces/fv/defaultproduct.hh @@ -53,13 +53,15 @@ public: template <class GridViewImp, class RangeFieldImp, size_t rangeDim> class DefaultProduct<GridViewImp, RangeFieldImp, rangeDim, 1> - : public Dune::GDT::Spaces::ProductFVInterface<internal::DefaultProductTraits<GridViewImp, RangeFieldImp, rangeDim, + : public Dune::GDT::Spaces::FVInterface<internal::DefaultProductTraits<GridViewImp, RangeFieldImp, rangeDim, 1>, + GridViewImp::dimension, rangeDim, 1>, + public Dune::GDT::Spaces::ProductFVInterface<internal::DefaultProductTraits<GridViewImp, RangeFieldImp, rangeDim, 1>, GridViewImp::dimension, rangeDim, 1> { typedef DefaultProduct<GridViewImp, RangeFieldImp, rangeDim, 1> ThisType; - typedef Dune::GDT::Spaces::ProductFVInterface<internal::DefaultProductTraits<GridViewImp, RangeFieldImp, rangeDim, 1>, - GridViewImp::dimension, rangeDim, 1> BaseType; + typedef Dune::GDT::Spaces::FVInterface<internal::DefaultProductTraits<GridViewImp, RangeFieldImp, rangeDim, 1>, + GridViewImp::dimension, rangeDim, 1> BaseType; typedef Default<GridViewImp, RangeFieldImp, rangeDim, 1> DefaultFVSpaceType; public: @@ -88,7 +90,7 @@ public: // These methods are required by ProductSpaceInterface template <size_t ii> - const FactorSpaceType factor() const + const FactorSpaceType& factor() const { return factor_space_; } diff --git a/dune/gdt/spaces/fv/interface.hh b/dune/gdt/spaces/fv/interface.hh index d5d654680f1b66f5d4ede4df7b93345d55e26635..f85417b0173e0af50b7499d5239073245560c34e 100644 --- a/dune/gdt/spaces/fv/interface.hh +++ b/dune/gdt/spaces/fv/interface.hh @@ -47,12 +47,6 @@ public: template <class ImpTraits, size_t domainDim, size_t rangeDim, size_t rangeDimCols = 1> class ProductFVInterface : public ProductSpaceInterface<ImpTraits, domainDim, rangeDim, rangeDimCols> { - typedef ProductSpaceInterface<ImpTraits, domainDim, rangeDim, rangeDimCols> BaseType; - -public: - using typename BaseType::RangeFieldType; - using BaseType::compute_pattern; - using BaseType::local_constraints; }; // class ProductFVInterface