Newer
Older
/**
* 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>
#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);
// 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") };
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};
// 4. Write grid to vtu file
SubsamplingVTKWriter writer{grid.leafGridView(), refinementIntervals(3)};
writer.write("torus");