#include "config.h" #include #include #include #include #include #include #include #include #include "Tests.hpp" using namespace AMDiS; using namespace Dune::Functions::BasisFactory; template void test_dofvector(B const& basis, DOFVector& vec) { AMDIS_TEST( vec.size() == basis.dimension() ); vec.compress(); vec = T(0); vec[0] = T(1); #if HAVE_MTL || HAVE_ISTL auto m0 = std::min_element(std::begin(vec.vector()), std::end(vec.vector())); auto m1 = std::max_element(std::begin(vec.vector()), std::end(vec.vector())); AMDIS_TEST( *m0 == T(0) ); AMDIS_TEST( *m1 == T(1) ); #endif // DOFVector models the concept of a VectorBackend in Dune::Functions static_assert(Dune::models, decltype(vec)>(), ""); } int main(int argc, char** argv) { Dune::MPIHelper::instance(argc, argv); // create grid Dune::FieldVector L; L = 1.0; auto s = Dune::filledArray<2>(1); Dune::YaspGrid<2> grid(L, s); auto const& gridView = grid.leafGridView(); // create basis auto basis = makeBasis(gridView, composite(power<2>(lagrange<2>(), flatInterleaved()), lagrange<1>(), flatLexicographic())); using Basis = decltype(basis); { DOFVector vec1(basis); test_dofvector(basis, vec1); DOFVector vec2(basis); test_dofvector(basis, vec2); auto vec3 = makeDOFVector(basis); test_dofvector(basis, vec3); auto vec4 = makeDOFVector(basis); test_dofvector(basis, vec4); #if DUNE_HAVE_CXX_CLASS_TEMPLATE_ARGUMENT_DEDUCTION DOFVector vec5(basis); test_dofvector(basis, vec5); #endif } // test GridTransferManager registration { DOFVector vec1(basis); test_dofvector(basis, vec1); for (auto const& e : elements(gridView)) grid.mark(1, e); GridTransferManager::adapt(grid); AMDIS_TEST_EQ(vec1.size(), basis.dimension()); } report_errors(); }