ufz/ogs — pull request #344 by rinkk (2014-03-05 11:51:32+00:00)
Title: New collapse nodes / Subdivide mesh elements

This PR reimplements the functionality from @TomFischer 's MeshCoarsener class.
If a mesh is given to the new MeshRevision class, you can:
* find out which nodes should be collapsed (and return the overall number)
* actually collapse nodes
* restructure elements affected by the node collapse
* restructure elements with nonplanar faces

I added the following deformations:
* ```Tri->Line```
* ```Quad->2 Tri```, ```Quad->Tri```, ```Quad->Line```
* ```Tet->Tri```, ```Tet->Line```
* ```Hex->Prism+Pyramid```, ```Hex->Prism```, ```Hex->6 Tets```, ```Hex->4 Tets```, ```Hex->2 Tets```, ```Hex->Tet```, ```Hex->Quad```, ```Hex->Tri```, ```Hex->Line```
* ```Pyramid->2 Tets```, ```Pyramid->Tet```, ```Pyramid->Quad```, ```Pyramid->Tri```, ```Pyramid->Line```
* ```Prism->3 Tets```, ```Prism->2 Tets```, ```Prism->Tet```, ```Prism->Quad```, ```Prism->Tri```, Prism->Line```

For each deformation you can give the minimum number of dimensions to consider, i.e. if a prism should be reduced with ```min_elem_dim = 3```, the algorithm will not try to form a Tri, Quad or Line.

All element reductions (that I can think of) have been tested, I added a number of tests.

What is currently missing is the modification of elements that are neighbours of reduced elements. This is the case for Hexes or Prisms that have been subdivided into Tets. I am aware of the issue and basically know what to do, but I wanted to create this PR now because it is pretty long as it is. I would like to know if you think it's basically alright so far.

Follow-up pull requests would
* remove the MeshCoarsener class + all ```reviseElement()``` methods from the element classes
* add the mentioned missing functionality for adjusting neighbouring elements (for this we need to discuss issue #220 again)