First attempt at sanitising chunking.

The rationale is to keep the old behaviour if possible, so we just add a if-
else after the chunk sizes are first calculated and change those sizes that
need to be changed. [There is also a zeroing of the 6-element arrays in the
beginning of the function because we multiply them together to find the various
sizes and at least Cray seems to have random numbers in the stack when
entering the function, causing the sizes to be crazy.]

We first check if the average vector size exceeds 4 GiB and if it does, simply
use as few chunks as possible, splitting along slowest varying axis first and
if that is not enough, splitting the next axis, too etc. The patch *can* split
the fastest varying dimension, too, but that seems overkill: it would mean
that da_grid_x*dof > 4 GiB, which seems unlikely. It cannot split dof.

If the average Vec size is <= 4 GiB, but total Vec size is > 4 GiB, there is a
simple logic: first see if <local_z_size>*<global_y_size>*<global_x_size>*dof
is smaller than "target size". Target size comes from your formula earlier in
this thread. If that is so, use that, if not, then just use the local Vec size
as the chunk size. This could be improved by having an intermediate size
solution, too, but this solution gives *my* tests decent performance across
several global sizes, so it does not seem to be too bad. Now, the performance
we get is just ~3 GiB/s, using 36 OSTs on a lustre. Using one OST we get ~200
MiB/s, so the scaling is not that bad: we get half of 36*200 MiB/s, so we think
the performance is limited by the OSTs, not MPI-IO or HDF5 or chunking. Tests
with bigger systems would of course be needed to determine whether this
solution works for truly huge files, too: the biggest we tried are just over 50
GiB.
Some minor fixes in comments, changed some float divisions to integer divisions and added error checking.
PCKACZMARZ: Added a basic Kaczmarz row-projection smoother as a PC
PCKACZMARZ: Added symmetric application option.
tao: fix memory leak in pde_constrained lcl
tao: remove function cast warning
tao: fix rosenbrock1f_1 example
tao: fix bad comment
converted PetscLogView() to behave more like all the other viewers
it will dispatch to the various specific viewers and formats rather
than having seperate functionsfor each format like before
remove unneeded PetscLogView_Python(); pull common code into PetscLogView()
git_version: switch to useing 'git describe'
Merge branch 'balay/add-docs-typo-email' into next
nightlybuilds add valgrind supression file
Merge branch 'balay/fix-valgrind-nightlybuild' into next
DMPlex: Bug fix for hybrid tet refinement
- The orientation that we get for hybrid faces depends on both the edge and face orientation
- This happens because we are not attaching hybrid faces in an order dependent on the cap face orientation. Maybe we should.
DMPlex: Bug fix for hybrid tet refinement
- The new edges for hybrid faces do not depend on the cap face orientation
- This happens because we are not attaching hybrid faces in an order dependent on the cap face orientation. Maybe we should.
Merge branch 'knepley/fix-hybrid-tet-refinement' into next

* knepley/fix-hybrid-tet-refinement:
  DMPlex: Bug fix for hybrid tet refinement - The new edges for hybrid faces do not depend on the cap face orientation - This happens because we are not attaching hybrid faces in an order dependent on the cap face orientation. Maybe we should.
  DMPlex: Bug fix for hybrid tet refinement - The orientation that we get for hybrid faces depends on both the edge and face orientation - This happens because we are not attaching hybrid faces in an order dependent on the cap face orientation. Maybe we should.
Sys: Added missing header
- The C++ Saga continues
Merge branch 'knepley/remove-petscsyshh' into next

* knepley/remove-petscsyshh:
  Sys: Added missing header - The C++ Saga continues
Doc: Added blocksize argument to VecCreateSeqWithArray()
Reported-by: Torquil Macdonald Sørensen <torquil@gmail.com>