# Dune-CurvedSurfaceGrid - A Dune module for surface parametrization

This Dune module provides a meta-grid for wrapping other grid implementations and providing

a curved geometry on each element, parametrized by a [Dune-CurvedGeometry](https://gitlab.mn.tu-dresden.de/spraetor/dune-curvedgeometry)

class.

A metagrid-module for dune which uses a surface-mesh (triangles in a 3D-world) as host-grid and treats the elements as curved triangles with Lagrange interpolatory vertices of orders 1 to 5.

\ No newline at end of file

For an overview about the CurvedSurfaceGrid and the CurvedGeometry, see also the presentation

[Dune-CurvedSurfaceGrid - A Dune module for surface parametrization](http://www.math.tu-dresden.de/~spraetor/dune-curvedsurfacegrid).

## Initial Example

(See [example1.cc](https://gitlab.mn.tu-dresden.de/iwr/dune-curvedsurfacegrid/-/blob/master/src/example1.cc))

// 3. Wrap the reference grid to build a curved grid

CurvedSurfaceGridgrid{*refGrid,sphereGF};

```

At first, we have to create a reference grid that acts as a parametrization domain for the

target curved grid. In the example, we use [Dune-FoamGrid](https://gitlab.dune-project.org/extensions/dune-foamgrid)

and read a piece-wise flat grid from a GMsh file [`sphere.msh`](https://gitlab.mn.tu-dresden.de/iwr/dune-curvedsurfacegrid/-/blob/master/doc/grids/sphere.msh).

In a second step, we describe the parametrization of the curved surface by a closest-point

projection to the sphere with radius 1. This projection is given by a callable `sphere` and

the wrapped into a grid-function by a call to `analyticDiscreteFunction`. This grid-function

wrapper associated the lambda-expression with a grid and a polynomial order for the local

interpolation of the projection into a Lagrange basis. This interpolation allows to obtain

values and derivatives of the geometry mapping.

Finally, the reference grid and the parametrization together build the curved grid. This

meta-grid `CurvedSurfaceGrid` implements the Dune grid interface and can thus be used as

replacement for, e.g., the reference grid.

## Two Different Geometry Mappings

The [Dune-CurvedGeometry](https://gitlab.mn.tu-dresden.de/spraetor/dune-curvedgeometry) module

provides two different geometry implementations that differ in the input and in the

representation of the parametrization.

### Parametrized-Geometry

The first one, `ParametrizedGeometry`, provides a geometry that locally interpolates a given

projection function into a (Lagrange) basis on the reference element. This requires from the

projection mapping just that it allows to map local coordinates in the reference element to

global coordinates on the surface.

The `CurvedSurfaceGrid` constructs on request of the element geometry a LocalFiniteElement

of Lagrange basis functions for the internal parametrization of the geometry. The `ParametrizedGeometry`

is constructed, if the grid gets a polynomial order `k > 0`.