What this MR does / why does DuMux need it: A lot of users seem to solve radially symmetric problems. Many use the cake grid manager. However, cake grids are not very easy to use, not efficient (because it's always one or two dimensions more than you need), and -- most importantly -- not exact for radially-symmetric problems. Actually cake grids should only be used for cake shaped domains but for non-uniform boundary conditions. However, even for these cases it is questionable why this would be better that e.g. an unstructured grid with gmsh, since cake grids have quite bad cell aspect ratios.
This MR helps to implement "real" radially symmetric problems.
How does it work: This implements wrappers for scvs and scvf that turn them into radially symmetric counterparts by overloading the volume() and area() functions. We support three modes:
disc (annulus): A 1d grid is extruded into an annulus or disc In the case of a disc (inner pos: 0) the inner scvf.area() is 0!
ball (shell): A 1d grid is extruded into a spherical shell or a ball In the case of a ball the inner scvf.area() is 0!
toroid: A 2d grid is extruded into a toroid In the case that on grid side is aligned with the axis the inner scvf.area() for all inner scvfs is 0! The grid points all have to be >= 0! We also support unstructured grids and random convex shapes.
How to use it in application code: you have to modify the traits passed into the grid geometry class, as shown in the test.
Special notes for your reviewer: Once this is merged, we could implement an "example" demonstrating this feature. For example a comparison to an analytic solution.