Skip to content
Snippets Groups Projects
example1.cc 1.29 KiB
Newer Older
  • Learn to ignore specific revisions
  • Praetorius, Simon's avatar
    Praetorius, Simon committed
    /**
     * Example 1
     * =========
     * In this example show how to construct a curved grid from a reference grid. In the concrete
     * setup we start with a 2d structured grid and make a torus parametrization. The resulting
     * curved grid in then written to a VTK file by using a subsampling VTK writer.
     **/
    
    #ifdef HAVE_CONFIG_H
    # include "config.h"
    #endif
    
    #include <bitset>
    #include <cmath>
    
    
    #include <dune/common/parallel/mpihelper.hh>
    
    #include <dune/curvedgrid/curvedgrid.hh>
    
    Praetorius, Simon's avatar
    Praetorius, Simon committed
    #include <dune/grid/yaspgrid.hh>
    #include <dune/grid/io/file/vtk.hh>
    
    
    using namespace Dune;
    
    int main(int argc, char** argv)
    {
      MPIHelper::instance(argc, argv);
    
    
    Praetorius, Simon's avatar
    Praetorius, Simon committed
      // 1. Construct a (periodic) reference grid [0,2pi]x[0,2pi]
      Dune::YaspGrid<2> refGrid{ {2.0*M_PI, 2.0*M_PI}, {8, 16}, std::bitset<2>("11") };
    
    
      // 2. Define the geometry mapping
    
    Praetorius, Simon's avatar
    Praetorius, Simon committed
      auto torus = [r1=2.0,r2=1.0](FieldVector<double,2> const& u) -> FieldVector<double,3> {
        return {
          (r1 + r2*std::cos(u[0])) * std::cos(u[1]),
          (r1 + r2*std::cos(u[0])) * std::sin(u[1]),
                r2*std::sin(u[0])
        };
      };
    
      // 3. Wrap the reference grid to build a curved grid, with Lagrange elements of order 3
      CurvedGrid grid{refGrid, torus, 3};
    
    Praetorius, Simon's avatar
    Praetorius, Simon committed
      // 4. Write grid to vtu file
      SubsamplingVTKWriter writer{grid.leafGridView(), refinementIntervals(3)};
      writer.write("torus");