diff --git a/dune/stuff/functions/random_ellipsoids_function.hh b/dune/stuff/functions/random_ellipsoids_function.hh new file mode 100644 index 0000000000000000000000000000000000000000..d36ef9123428763e0d328c518b34851c7e3926ac --- /dev/null +++ b/dune/stuff/functions/random_ellipsoids_function.hh @@ -0,0 +1,305 @@ +// This file is part of the dune-stuff project: +// https://github.com/wwu-numerik/dune-stuff/ +// Copyright holders: Rene Milk, Felix Schindler +// License: BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause) + +#ifndef DUNE_STUFF_FUNCTION_RandomEllipsoidsFunction_HH +#define DUNE_STUFF_FUNCTION_RandomEllipsoidsFunction_HH + +#include <vector> +#include <cmath> +#include <memory> + +#include <dune/common/exceptions.hh> + +#include <dune/stuff/common/configuration.hh> +#include <dune/stuff/common/debug.hh> +#include <dune/stuff/common/fvector.hh> +#include <dune/stuff/common/random.hh> +#include <dune/stuff/grid/information.hh> + +#include "interfaces.hh" + +namespace Dune { +namespace Stuff { +namespace Functions { + +template <size_t dim, class CoordType = double> +struct Ellipsoid +{ + typedef DSC::FieldVector<CoordType, dim> DomainType; + DomainType center; + DomainType radii; + + bool contains(DomainType point) const + { + const auto shifted = point - center; + double sum = 0; + for (auto ii : DSC::valueRange(dim)) { + const auto pii = shifted[ii]; + sum += std::pow(pii, 2) / std::pow(radii[ii], 2); + } + return DSC::FloatCmp::le(sum, 1.); + } + bool intersects_cube(DomainType ll, DomainType ur) const + { + DUNE_THROW(NotImplemented, ""); + } +}; + +template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim, + size_t rangeDimCols = 1> +class RandomEllipsoidsFunction + : public LocalizableFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> +{ +protected: + typedef LocalizableFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> + BaseType; + typedef RandomEllipsoidsFunction<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> + ThisType; + +public: + typedef typename BaseType::EntityType EntityType; + typedef typename BaseType::LocalfunctionType LocalfunctionType; + + typedef typename BaseType::DomainFieldType DomainFieldType; + static const size_t dimDomain = BaseType::dimDomain; + + typedef typename BaseType::RangeFieldType RangeFieldType; + typedef typename BaseType::RangeType RangeType; + typedef Ellipsoid<dimDomain, DomainFieldType> EllipsoidType; + class Localfunction + : public LocalfunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> + { + typedef LocalfunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> + BaseType; + + public: + typedef typename BaseType::EntityType EntityType; + + typedef typename BaseType::DomainType DomainType; + typedef typename BaseType::RangeFieldType RangeFieldType; + typedef typename BaseType::RangeType RangeType; + typedef typename BaseType::JacobianRangeType JacobianRangeType; + + Localfunction(const EntityType& ent, const RangeType value, std::vector<EllipsoidType>&& local_ellipsoids) + : BaseType(ent) + , geometry_(ent.geometry()) + , value_(value) + , local_ellipsoids_(local_ellipsoids) + { + // DSC_LOG_DEBUG_0 << "create local LF Ellips with " << local_ellipsoids_.size() << " instances\n"; + } + + Localfunction(const Localfunction& /*other*/) = delete; + + Localfunction& operator=(const Localfunction& /*other*/) = delete; + + virtual size_t order() const override + { + return 8; + } + + virtual void evaluate(const DomainType& xx_local, RangeType& ret) const override + { + assert(this->is_a_valid_point(xx)); + const auto xx_global = geometry_.global(xx_local); + for (const auto& ellipsoid : local_ellipsoids_) { + if (ellipsoid.contains(xx_global)) { + ret = value_; + // DSC_LOG_DEBUG_0 << "ell INSIDE " << ellipsoid.center << " with xx " << xx_global << "\n"; + return; + } + } + ret = 0; + } + + virtual void jacobian(const DomainType& UNUSED_UNLESS_DEBUG(xx), JacobianRangeType& ret) const override + { + assert(this->is_a_valid_point(xx)); + ret *= RangeFieldType(0); + } + + private: + const typename EntityImp::Geometry geometry_; + const RangeType value_; + const std::vector<EllipsoidType> local_ellipsoids_; + }; // class Localfunction + +public: + static const bool available = true; + + static std::string static_id() + { + return BaseType::static_id() + ".RandomEllipsoidsFunction"; + } + + static Common::Configuration default_config(const std::string sub_name = "") + { + Common::Configuration config; + config["lower_left"] = "[0.0 0.0 0.0]"; + config["upper_right"] = "[1.0 1.0 1.0]"; + config["name"] = static_id(); + if (sub_name.empty()) + return config; + else { + Common::Configuration tmp; + tmp.add(config, sub_name); + return tmp; + } + } // ... default_config(...) + + static std::unique_ptr<ThisType> create(const Common::Configuration config = default_config(), + const std::string sub_name = static_id()) + { + // get correct config + const Common::Configuration cfg = config.has_sub(sub_name) ? config.sub(sub_name) : config; + const Common::Configuration default_cfg = default_config(); + DUNE_THROW(NotImplemented, ""); + } // ... create(...) + + RandomEllipsoidsFunction(const Common::FieldVector<DomainFieldType, dimDomain>& lowerLeft, + const Common::FieldVector<DomainFieldType, dimDomain>& upperRight, + const Stuff::Common::Configuration& ellipsoid_cfg, const std::string nm = static_id()) + : lowerLeft_(lowerLeft) + , upperRight_(upperRight) + , name_(nm) + , ellipsoid_cfg_(ellipsoid_cfg) + { + typedef unsigned long UL; + const UL level_0_count = ellipsoid_cfg.get("ellipsoids.count", 10); + const UL max_depth = ellipsoid_cfg.get("ellipsoids.recursion_depth", 1); + const UL children = ellipsoid_cfg.get<UL>("ellipsoids.children", 3u); //, DSC::ValidateLess<UL>(0)); + const UL total_count = level_0_count + level_0_count * std::pow(children, max_depth + 1); + ellipsoids_.resize(level_0_count); + ellipsoids_.reserve(total_count); + const auto seed = DomainFieldType(ellipsoid_cfg.get("ellipsoids.seed", 0)); + const auto min_radius = ellipsoid_cfg.get("ellipsoids.min_radius", 0.01); + const auto max_radius = ellipsoid_cfg.get("ellipsoids.max_radius", 0.02); + const auto child_displacement = ellipsoid_cfg.get("ellipsoids.max_child_displacement", max_radius); + typedef DSC::DefaultRNG<DomainFieldType> RNG; + RNG center_rng(0, 1, seed); + RNG radii_rng(min_radius, max_radius, seed); + RNG dist_rng(min_radius, child_displacement, seed); + RNG sign_rng(-1, 1, seed); + + const auto parent_range = DSC::valueRange(0ul, level_0_count); + for (auto ii : parent_range) { + std::generate( + ellipsoids_[ii].center.begin(), ellipsoids_[ii].center.end(), [¢er_rng]() { return center_rng(); }); + std::generate(ellipsoids_[ii].radii.begin(), ellipsoids_[ii].radii.end(), [&radii_rng]() { return radii_rng(); }); + } + + std::function<void(UL, const EllipsoidType&)> recurse_add = [&](UL current_level, const EllipsoidType& parent) { + if (current_level > max_depth) + return; + for (const auto unused_counter : DSC::valueRange(children)) { + EllipsoidType child = parent; + const double scale = std::pow(ellipsoid_cfg.get("ellipsoids.recursion_scale", 0.5), current_level); + const auto displace = [&](DomainFieldType& coord) { + const auto disp = dist_rng() * DSC::sign(sign_rng()); + coord += disp; + DSC_LOG_DEBUG_0 << disp << ";"; + }; + std::for_each(child.center.begin(), child.center.end(), displace); + std::generate(child.radii.begin(), child.radii.end(), [&radii_rng, scale]() { return radii_rng() * scale; }); + ellipsoids_.push_back(child); + recurse_add(current_level + 1, child); + } + }; + + for (auto ii : parent_range) { + recurse_add(0, ellipsoids_[ii]); + } + DSC_LOG_DEBUG_0 << "generated " << ellipsoids_.size() << " of " << total_count << "\n"; + to_file(*DSC::make_ofstream("ellipsoids.txt")); + } + + RandomEllipsoidsFunction(const ThisType& other) = default; + + ThisType& operator=(const ThisType& other) = delete; + + ThisType& operator=(ThisType&& source) = delete; + + virtual std::string type() const override + { + return BaseType::static_id() + ".RandomEllipsoidsFunction"; + } + + virtual std::string name() const override + { + return name_; + } + + void to_file(std::ostream& out) const + { + boost::format line("%d|%g;%g|%g;%g\n"); + size_t id = 0; + for (const auto& ellipsoid : ellipsoids_) { + const auto str = + (line % id % ellipsoid.center[0] % ellipsoid.center[1] % ellipsoid.radii[0] % ellipsoid.radii[1]).str(); + out << str; + } + out.flush(); + } + +private: + std::tuple<typename EllipsoidType::DomainType, typename EllipsoidType::DomainType> + bounding_box(const EntityType& entity) const + { + typename EllipsoidType::DomainType ll, ur; + typedef Dune::Stuff::Common::MinMaxAvg<DomainFieldType> MinMaxAvgType; + std::array<MinMaxAvgType, dimDomain> coord_limits; + const auto& geo = entity.geometry(); + for (auto i : DSC::valueRange(geo.corners())) { + const auto& corner(geo.corner(i)); + for (size_t k = 0; k < dimDomain; ++k) + coord_limits[k](corner[k]); + } + for (auto ii : DSC::valueRange(dimDomain)) { + ll[ii] = coord_limits[ii].min(); + ur[ii] = coord_limits[ii].max(); + + return std::make_pair(std::move(ll), std::move(ur)); + } + } + +public: + virtual std::unique_ptr<LocalfunctionType> local_function(const EntityType& entity) const override + { + const auto local_value = DomainFieldType(ellipsoid_cfg_.get("ellipsoids.local_value", 1.)); + // decide on the subdomain the center of the entity belongs to + const auto max_radius = ellipsoid_cfg_.get("ellipsoids.max_radius", 0.04); + typename EllipsoidType::DomainType ll, ur; + std::tie(ll, ur) = bounding_box(entity); + std::for_each(ll.begin(), ll.end(), [&max_radius](DomainFieldType& lc) { lc -= 1.1 * max_radius; }); + std::for_each(ur.begin(), ur.end(), [&max_radius](DomainFieldType& uc) { uc += 1.1 * max_radius; }); + std::vector<EllipsoidType> local_ellipsoids; + for (const auto& ellipsoid : ellipsoids_) { + bool inside = true; + for (auto ii : DSC::valueRange(dimDomain)) { + inside = inside && DSC::FloatCmp::ge(ellipsoid.center[ii], ll[ii]); + inside = inside && DSC::FloatCmp::le(ellipsoid.center[ii], ur[ii]); + } + if (inside) { + local_ellipsoids.push_back(ellipsoid); + } + } + std::vector<EllipsoidType> tmp = ellipsoids_; + return std::unique_ptr<Localfunction>(new Localfunction(entity, local_value, std::move(tmp))); + } // ... local_function(...) + +private: + const Common::FieldVector<DomainFieldType, dimDomain> lowerLeft_; + const Common::FieldVector<DomainFieldType, dimDomain> upperRight_; + const std::string name_; + const Stuff::Common::Configuration ellipsoid_cfg_; + std::vector<EllipsoidType> ellipsoids_; +}; // class RandomEllipsoidsFunction + + +} // namespace Functions +} // namespace Stuff +} // namespace Dune + +#endif // DUNE_STUFF_FUNCTION_RandomEllipsoidsFunction_HH diff --git a/dune/stuff/functions/spe10model2.hh b/dune/stuff/functions/spe10model2.hh new file mode 100644 index 0000000000000000000000000000000000000000..e30a6b36a4dbdce36e64776bc3d79dd30ff41ed5 --- /dev/null +++ b/dune/stuff/functions/spe10model2.hh @@ -0,0 +1,127 @@ +// This file is part of the dune-stuff project: +// https://github.com/wwu-numerik/dune-stuff/ +// Copyright holders: Rene Milk, Felix Schindler +// License: BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause) + +#ifndef DUNE_STUFF_FUNCTIONS_SPE10MODEL2_HH +#define DUNE_STUFF_FUNCTIONS_SPE10MODEL2_HH + +#include <iostream> +#include <memory> + +#include <dune/stuff/common/exceptions.hh> +#include <dune/stuff/common/configuration.hh> +#include <dune/stuff/common/color.hh> +#include <dune/stuff/common/string.hh> +#include <dune/stuff/common/fvector.hh> +#include <dune/stuff/common/type_utils.hh> +#include <dune/stuff/functions/global.hh> + +namespace Dune { +namespace Stuff { +namespace Functions { +namespace Spe10 { + +/** + * Grid originally had LL (0,0,0) to UR (365.76, 670.56, 51.816) corners + * + */ +template <class EntityImp, class DomainFieldImp, size_t dim_domain, class RangeFieldImp, size_t r, size_t rC> +class Model2 : public Stuff::GlobalFunctionInterface<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC> +{ + static_assert(r == rC, ""); + static_assert(dim_domain == rC, ""); + static_assert(dim_domain == 3, ""); + typedef Stuff::GlobalFunctionInterface<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC> BaseType; + +public: + Model2(std::string data_filename = "perm_case2a.dat", + DSC::FieldVector<double, dim_domain> upper_right = default_upper_right) + : deltas_{{upper_right[0] / num_elements[0], upper_right[1] / num_elements[1], upper_right[2] / num_elements[2]}} + , permeability_(nullptr) + , permMatrix_(0.0) + , filename_(data_filename) + { + readPermeability(); + } + + static const DSC::FieldVector<double, dim_domain> default_upper_right; + // unsigned int mandated by CubeGrid provider + static const DSC::FieldVector<unsigned int, dim_domain> num_elements; + + virtual ~Model2() + { + delete permeability_; + permeability_ = nullptr; + } + + //! currently used in gdt assembler + virtual void evaluate(const typename BaseType::DomainType& x, + typename BaseType::RangeType& diffusion) const final override + { + + if (!permeability_) { + DSC_LOG_ERROR_0 << "The SPE10-permeability data file could not be opened. This file does\n" + << "not come with the dune-multiscale repository due to file size. To download it\n" + << "execute\n" + << "wget http://www.spe.org/web/csp/datasets/por_perm_case2a.zip\n" + << "unzip the file and move the file 'spe_perm.dat' to\n" + << "dune-multiscale/dune/multiscale/problems/spe10_permeability.dat!\n"; + DUNE_THROW(IOError, "Data file for Groundwaterflow permeability could not be opened!"); + } + + // 3 is the maximum space dimension + for (size_t dim = 0; dim < dim_domain; ++dim) + permIntervalls_[dim] = std::min(unsigned(std::floor(x[dim] / deltas_[dim])), num_elements[dim] - 1); + + const int offset = permIntervalls_[0] + permIntervalls_[1] * num_elements[0] + + permIntervalls_[2] * num_elements[1] * num_elements[0]; + for (size_t dim = 0; dim < dim_domain; ++dim) { + const auto idx = offset + dim * 1122000; + diffusion[dim][dim] = permeability_[idx]; + } + } + + virtual size_t order() const + { + return 0u; + } + +private: + void readPermeability() + { + std::ifstream file(filename_); + double val; + if (!file) { // file couldn't be opened + return; + } + file >> val; + int counter = 0; + permeability_ = new double[3366000]; + while (!file.eof()) { + // keep reading until end-of-file + permeability_[counter++] = val; + file >> val; // sets EOF flag if no value found + } + file.close(); + } + + std::array<double, dim_domain> deltas_; + double* permeability_; //! TODO automatic memory + mutable typename BaseType::DomainType permIntervalls_; + mutable Dune::FieldMatrix<double, BaseType::DomainType::dimension, BaseType::DomainType::dimension> permMatrix_; + const std::string filename_; +}; + +template <class EntityImp, class DomainFieldImp, size_t dim_domain, class RangeFieldImp, size_t r, size_t rC> +const DSC::FieldVector<unsigned int, dim_domain> + Model2<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC>::num_elements{{60, 220, 85}}; +template <class EntityImp, class DomainFieldImp, size_t dim_domain, class RangeFieldImp, size_t r, size_t rC> +const DSC::FieldVector<double, dim_domain> + Model2<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC>::default_upper_right{{1, 3.667, 1.417}}; +} // namespace Spe10 +} // namespace Functions +} // namespace Stuff +} // namespace Dune + +#endif // DUNE_STUFF_FUNCTIONS_SPE10MODEL2_HH diff --git a/dune/stuff/test/functions_spe10.cc b/dune/stuff/test/functions_spe10.cc new file mode 100644 index 0000000000000000000000000000000000000000..d70f56740078d326c0b7f15a6f0c2e980a479a5c --- /dev/null +++ b/dune/stuff/test/functions_spe10.cc @@ -0,0 +1,163 @@ +// This file is part of the dune-stuff project: +// https://github.com/wwu-numerik/dune-stuff +// Copyright holders: Rene Milk, Felix Schindler +// License: BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause) + +#include "main.hxx" + +#include <memory> + +#include <dune/common/exceptions.hh> + +#include <dune/stuff/functions/interfaces.hh> +#include <dune/stuff/functions/spe10.hh> +#include <dune/stuff/functions/spe10model2.hh> + +// we need this nasty code generation because the testing::Types< ... > only accepts 50 arguments +// and all combinations of functions and entities and dimensions and fieldtypes would be way too much +#define TEST_STRUCT_GENERATOR(ftype, etype) \ + template <class Spe10Model2FunctionType> \ + struct ftype##etype##Test : public ::testing::Test \ + { \ + typedef typename Spe10Model2FunctionType::EntityType EntityType; \ + typedef typename Spe10Model2FunctionType::LocalfunctionType LocalfunctionType; \ + typedef typename Spe10Model2FunctionType::DomainFieldType DomainFieldType; \ + static const size_t dimDomain = Spe10Model2FunctionType::dimDomain; \ + typedef typename Spe10Model2FunctionType::DomainType DomainType; \ + typedef typename Spe10Model2FunctionType::RangeFieldType RangeFieldType; \ + static const size_t dimRange = Spe10Model2FunctionType::dimRange; \ + static const size_t dimRangeCols = Spe10Model2FunctionType::dimRangeCols; \ + typedef typename Spe10Model2FunctionType::RangeType RangeType; \ + typedef typename Spe10Model2FunctionType::JacobianRangeType JacobianRangeType; \ + \ + void check() const \ + { \ + const Spe10Model2FunctionType zero; \ + } \ + }; +// TEST_STRUCT_GENERATOR + + +#if HAVE_DUNE_GRID + +//# include <dune/grid/sgrid.hh> + +// typedef Dune::SGrid< 1, 1 >::Codim< 0 >::Entity DuneSGrid1dEntityType; +// typedef Dune::SGrid< 2, 2 >::Codim< 0 >::Entity DuneSGrid2dEntityType; +// typedef Dune::SGrid< 3, 3 >::Codim< 0 >::Entity DuneSGrid3dEntityType; + +// typedef testing::Types< Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 1, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 1, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 1, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 2, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 2, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 2, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 3, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 3, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid1dEntityType, double, 1, double, 3, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 1, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 1, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 1, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 2, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 2, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 2, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 3, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 3, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid2dEntityType, double, 2, double, 3, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 1, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 1, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 1, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 2, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 2, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 2, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 3, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 3, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneSGrid3dEntityType, double, 3, double, 3, 3 > +// > Spe10Model2FunctionSGridEntityTypes; + +// TEST_STRUCT_GENERATOR(Spe10Model2FunctionTest, SGridEntity) +// TYPED_TEST_CASE(Spe10Model2FunctionTestSGridEntityTest, Spe10Model2FunctionSGridEntityTypes); +// TYPED_TEST(Spe10Model2FunctionTestSGridEntityTest, provides_required_methods) { +// this->check(); +//} + +#include <dune/grid/yaspgrid.hh> + +typedef Dune::YaspGrid<3>::Codim<0>::Entity DuneYaspGrid3dEntityType; + +typedef testing::Types<Dune::Stuff::Functions::Spe10::Model2<DuneYaspGrid3dEntityType, double, 3, double, 3, 3>> + Spe10Model2FunctionYaspGridEntityTypes; + +TEST_STRUCT_GENERATOR(Spe10Model2FunctionTest, YaspGridEntity) +TYPED_TEST_CASE(Spe10Model2FunctionTestYaspGridEntityTest, Spe10Model2FunctionYaspGridEntityTypes); +TYPED_TEST(Spe10Model2FunctionTestYaspGridEntityTest, provides_required_methods) +{ + this->check(); +} + +//# if HAVE_ALUGRID +//# include <dune/stuff/common/disable_warnings.hh> +//# include <dune/grid/alugrid.hh> +//# include <dune/stuff/common/reenable_warnings.hh> + +// typedef Dune::ALUGrid< 2, 2, Dune::simplex, Dune::nonconforming >::Codim< 0 >::Entity DuneAluSimplexGrid2dEntityType; +// typedef Dune::ALUGrid< 3, 3, Dune::simplex, Dune::nonconforming >::Codim< 0 >::Entity DuneAluSimplexGrid3dEntityType; +// typedef Dune::ALUGrid< 3, 3, Dune::cube, Dune::nonconforming >::Codim< 0 >::Entity DuneAluCubeGrid3dEntityType; + +// typedef testing::Types< Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 1, +// 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 1, 2 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 1, 3 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 2, 1 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 2, 2 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 2, 3 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 3, 1 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 3, 2 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid2dEntityType, double, 2, double, 3, 3 +// > + +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 1, 1 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 1, 2 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 1, 3 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 2, 1 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 2, 2 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 2, 3 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 3, 1 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 3, 2 +// > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluSimplexGrid3dEntityType, double, 3, double, 3, 3 +// > + +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 1, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 1, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 1, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 2, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 2, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 2, 3 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 3, 1 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 3, 2 > +// , Dune::Stuff::Functions::Spe10::Model2< DuneAluCubeGrid3dEntityType, double, 3, double, 3, 3 > +// > Spe10Model2FunctionAluGridEntityTypes; + +// TEST_STRUCT_GENERATOR(Spe10Model2FunctionTest, AluGridEntity) +// TYPED_TEST_CASE(Spe10Model2FunctionTestAluGridEntityTest, Spe10Model2FunctionAluGridEntityTypes); +// TYPED_TEST(Spe10Model2FunctionTestAluGridEntityTest, provides_required_methods) { +// this->check(); +//} + +//# endif // HAVE_ALUGRID +#endif // HAVE_DUNE_GRID