Skip to content
Snippets Groups Projects
hermitetest.cc 3.57 KiB
Newer Older
Porrmann, Maik's avatar
Porrmann, Maik committed

// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
#include <config.h>

#include <iostream>

#include <dune/common/exceptions.hh>
#include <dune/common/parallel/mpihelper.hh>

#include <dune/grid/yaspgrid.hh>
#include <dune/grid/uggrid.hh>

#include <dune/grid/io/file/gmshreader.hh>
Porrmann, Maik's avatar
Porrmann, Maik committed
#include <dune/grid/onedgrid.hh>
#include <dune/grid/io/file/vtk/subsamplingvtkwriter.hh>
#include <dune/grid/utility/structuredgridfactory.hh>
Porrmann, Maik's avatar
Porrmann, Maik committed
#include <dune/functions/functionspacebases/lagrangebasis.hh>
#include <dune/functions/functionspacebases/hermitebasis.hh>
Porrmann, Maik's avatar
Porrmann, Maik committed
// #include <dune/alugrid/grid.hh>
#include <dune/grid/albertagrid.hh>
Porrmann, Maik's avatar
Porrmann, Maik committed
#include <dune/functions/functionspacebases/test/basistest.hh>
#include <dune/functions/gridfunctions/discreteglobalbasisfunction.hh>

// #include <dune/functions/functionspacebases/test/enablec1continuitycheck.hh>

Porrmann, Maik's avatar
Porrmann, Maik committed
using namespace Dune;
using namespace Dune::Functions;

Porrmann, Maik's avatar
Porrmann, Maik committed
int main(int argc, char *argv[])
Porrmann, Maik's avatar
Porrmann, Maik committed
{
  Dune::MPIHelper::instance(argc, argv);

  Dune::TestSuite test_1d("1d"), test_2d("2d"), test_3d("3d");
Porrmann, Maik's avatar
Porrmann, Maik committed

  using namespace Dune::Functions::BasisFactory;

Porrmann, Maik's avatar
Porrmann, Maik committed
  { // 1d
    std::cout << "Hermite test in 1d" << std::endl;
Porrmann, Maik's avatar
Porrmann, Maik committed
    std::unique_ptr<OneDGrid> grid = StructuredGridFactory<OneDGrid>::createSimplexGrid({0.}, {1.}, {10});
Porrmann, Maik's avatar
Porrmann, Maik committed

    auto gridView = grid->levelGridView(0);

Porrmann, Maik's avatar
Porrmann, Maik committed
    {
      auto basis = makeBasis(gridView, hermite());
      test_1d.subTest(checkBasis(basis, EnableContinuityCheck(), EnableDifferentiabilityCheck(), EnableVertexDifferentiabilityCheck()));
Porrmann, Maik's avatar
Porrmann, Maik committed

  { //2d
    std::cout << "Hermite test in 2d" << std::endl;

    auto grid = StructuredGridFactory<UGGrid<2>>::createSimplexGrid(
Porrmann, Maik's avatar
Porrmann, Maik committed
        {0., 0.}, {1., 1.}, {{10, 10}});
    // using Reader = GmshReader<Grid>;
    // std::unique_ptr<Grid> grid(Reader::read("gridfile.msh"));

    // auto gridFactory = GridFactory<Grid>();
    // gridFactory.insertVertex({0.,0.});
    // gridFactory.insertVertex({1., 0.});
    // gridFactory.insertVertex({1., 1.});
    // gridFactory.insertVertex({0., 1.});

    // gridFactory.insertElement(GeometryTypes::simplex(2),{0,1,2});
    // gridFactory.insertElement(GeometryTypes::simplex(2),{0,2,3});

    // auto grid = gridFactory.createGrid();

Porrmann, Maik's avatar
Porrmann, Maik committed
    auto gridView = grid->leafGridView();
Porrmann, Maik's avatar
Porrmann, Maik committed
    std::cout << "Grid has " << gridView.size(0) << " elementes and " << gridView.size(1) << " facettes and " << gridView.size(2) << " vertices" << std::endl;
    // using GridView = decltype(gridView);
Porrmann, Maik's avatar
Porrmann, Maik committed
    {
      using namespace Dune::Functions::BasisFactory;
      auto basis = makeBasis(gridView, hermite());
Porrmann, Maik's avatar
Porrmann, Maik committed
      std::cout << "Basis has " << basis.size() << " Dofs" << std::endl;
      test_2d.subTest(checkBasis(basis, EnableContinuityCheck(), EnableVertexDifferentiabilityCheck()));
Porrmann, Maik's avatar
Porrmann, Maik committed
    }
  }
  { // 3d
    std::cout << "Hermite test in 3d" << std::endl;

    auto grid = StructuredGridFactory<UGGrid<3>>::createSimplexGrid({0., 0., 0.}, {1., 1., 1.},
                                                                    {{3, 3, 3}});

    auto gridView = grid->leafGridView();
    std::cout << "Grid has " << gridView.size(0) << " elementes and " << gridView.size(1)
              << " facettes and " << gridView.size(2) << " edges and " << gridView.size(3)
              << " vertices " << std::endl;
    {
      using namespace Dune::Functions::BasisFactory;
      auto basis = makeBasis(gridView, hermite());
      std::cout << "Basis has " << basis.size() << " Dofs" << std::endl;

      test_3d.subTest(
          checkBasis(basis, EnableContinuityCheck(), EnableVertexDifferentiabilityCheck()));
    }
  }

  return test_1d.exit() + test_2d.exit() + test_3d.exit();
Porrmann, Maik's avatar
Porrmann, Maik committed
}