Manifold id step0

This is the first backward compatible version of the manifold id branch. Four methods were added to a class named Manifold<dim,spacedim>, which contains a subset of the  Boundary<dim,spacedim> methods. Boundary<dim,spacedim> is now derived from FlatManifold<dim,spacedim>. This fixes issue #27.

The new methods are:

get_new_point_on_cell
get_new_point_on_hex
get_new_point
project_to_manifold

all functions get_new_point_on_* are now made such that by default they call get_new_point, which in turns query project_to_manifold with the averaged point.

This sounds a little intricate, but it is a way to keep backward compatibility while starting with the new idea about manifolds (seen as collection of points with a metric), where by default the new point is created by averaging the surrounding points, and projecting back the result to the manifold.

Simple implementations can implement the

Manifold::project_to_manifold

function, and everything should work out of the box. More complex implementations should implement

Manifold::get_new_point

New implementations should not need to go behyond this. 

ManifoldChart<dim,spacedim,chartdim> is a special implementation in which push_forward and pull_back mechanisms are used to determine the location of new points. All surrounding points are pulled_back, then averaged, and the result is pushed_forward. This is a standard concept in continuum mechanics, and it is the standard way in which geometry points are computed in isogeometric analysis. 

The old Boundary class is still kept around. It is still used for normals to surfaces. This concept it typical of codimension one manifolds, and it is therefore not embedded in the Manifold class itself, but left to the derived class Boundary<dim,spacedim>.


in contexts like this, you make z be a reference to R[2] but because you don't use z right away the compiler will ask itself if, possible, R[2] might be a location that could be modified by the call to atan2 and will probably conclude that it can't tell and that it can no longer make the assumption that z==R[2] after the atan2 statement. For single scalars like z (and x,y above), I think the better approach is therefore to just copy them and not make them references unless you specifically want the two variables to always alias even in cases where you modify R.