Tpetra: DistObject: Added filterEmptyProcesses method.

For now, the method is an empty stub.  Once implemented, it will do
the following:

1. Identify processes which contain zero elements
   (in the Map returned by getMap()).

2. Create a new communicator that only contains the processes with a
   nonzero number of elements.  This will always be a distinct
   communicator and will be created using MPI_Comm_split.

3. Free data, if necessary, on those processes with a zero number of
   elements.  Exclude those processes from the steps that follow.

4. Recreate any Map(s) that the DistObject might have.  A MultiVector
   will only have its (row) Map.  A CrsMatrix will have four Maps: row,
   column, domain, and range.  For some objects, this step may also
   include recreating Import or Export objects.  The resulting Maps
   will all have the new communicator.

5. Return the DistObject's new Map, which after return is the same Map
   (identically the same object) which would be returned by getMap().

MueLu will use this method to avoid communication over all processes in
MPI_COMM_WORLD at coarse levels of the multigrid hierarchy, when most of
the processes own no data.
Merge branch 'master' into Tpetra-DistObject-filterElements
Tpetra: Map: Added removeEmptyProcesses method.

This method returns a new Map with a distinct communicator from the
original Map's communicator.  The new communicator only contains those
processes in the original communicator that own a nonzero number of
elements in the original Map.  The method leaves the original Map and
communicator unchanged.

This commit also fixes syntax errors in the following commit:

3f4c3b9d9aee4a28b50c6daea0998f6f21c16f8e

I am not able to revert that commit because of an intervening merge.
This commit also changes DistObject's new method from
filterEmptyProcesses to removeEmptyProcesses.  Thanks to Chris Siefert
for suggesting a name.
Tpetra: Map: Added unit test (that passes) for removeEmptyProcesses().
Tpetra: Map: Added more tests for removeEmptyProcesses().  All pass.
Tpetra: Map: Added replaceCommWithSubset method.

Our goal is to be able to replace the communicator in a CrsGraph or
CrsMatrix with a subset communicator, that only contains the processes
with a nonzero number of rows.  We have already implemented and tested
removing processes that have zero rows from a Map.  That works fine for
the row Map of the graph or matrix, but the domain, range, and column
Maps may differ from the row Map.  In fact, processes which have zero
rows in the row Map may have a nonzero number of entries in any of these
Maps.  Thus, we need a way to replace a Map's communicator with a
general subset communicator, without the assumption that the excluded
processes have no entries.

The replaceCommWithSubset method implements this functionality.  As with
removeEmptyProcesses, replaceCommWithSubset also leaves the original Map
and communicator unchanged; it returns a new Map with the new given
communicator (that presumably comes from a Map returned by
replaceCommWithSubset).
Tpetra: DistObject: Renamed removeEmptyProcesses; added nonmember fns.

This commit renames removeEmptyProcesses to removeEmptyProcessesInPlace.
This should help avoid confusion with Map's removeEmptyProcesses method,
which (unlike removeEmptyProcessesInPlace) does _not_ modify in place.

This commit also adds removeEmptyProcessesInPlace nonmember functions
for DistObject.  Users are meant to call these nonmember functions
instead of the (not public) member functions of the same name of
DistObject.  The nonmember functions take an RCP<DistObject>& (nonconst
RCP reference), which gets invalided (set to null) on excluded
processes.  This prevents a "zombie" DistObject being left behind for
users to clean up, as long as the reference count of the RCP on input is
one.  (We could throw if it's not one, but that would require another
all-reduce over the original communicator, since different processes
might have different reference counts.)
Tpetra: Implemented removeEmptyProcessesInPlace for MV, graph, & matrix.

This commit adds implementations of DistObject's
removeEmptyProcessesInPlace to MultiVector, CrsGraph, and CrsMatrix.
The method replaces the object's Map (row Map in the case of CrsGraph
and CrsMatrix) with a new Map, from which processes with zero entries
have been removed.

Users may access this functionality through the nonmember functions
removeEmptyProcessesInPlace that take a DistObject, and defer to the
subclass' implementation of the removeEmptyProcessesInPlace method.
Tpetra: Map: Improved public documentation of new methods.
Tpetra: Map: Added test for replaceCommWithSubset.  It passes.

This commit adds a test for the new feature added in commit
b84e698921548e574a4c7c4653007e4895fa85d0.
Merge branch 'master' into Tpetra-DistObject-filterElements
Tpetra: Fixed public documentation of new methods.
IOSS: formatting changes

(From Sierra)
IOSS: Eliminate a vector initialization; use push_back

(From Sierra)
IOSS: Clean up issues in heartbeat output

(From Sierra)

Build/Test Cases Summary
Enabled Packages: SEACASIoss
Disabled Packages: Panzer,PyTrilinos
Enabled all Forward Packages
0) MPI_DEBUG => Skipped configure, build, test due to no enabled packages! => Does not affect push readiness! (-1.00 min)
1) SERIAL_RELEASE => Skipped configure, build, test due to no enabled packages! => Does not affect push readiness! (-1.00 min)
2) MPI_DEBUG_SS => passed: passed=21,notpassed=0 (24.06 min)
3) SERIAL_RELEASE_SS => passed: passed=22,notpassed=0 (26.85 min)
Other local commits for this build/test group: 140653a, be0e4df
Piro: Made member function name more explicit

Having an abstract base class to mimick a functional interface (i.e.
expose operator()) brings little benefit since the objects that
implement the interface cannot be handled by value.

The change affects mostly implementation details so clients should not
be affected.
Stokhos: Fix issue caused by backwards compatibility changes in epetra

The changes to fix a backwards compatibility issue in Epetra caused an ambiguous
call in a Stokhos test. The issue was the test was passing in a size_t type when
epetra was expecting an int or long long. To solve this the size_t variables
were cast to ints.

Build/Test Cases Summary
Enabled Packages: Stokhos
Enabled all Forward Packages
0) MPI_DEBUG => Skipped configure, build, test due to no enabled packages! => Does not affect push readiness! (-1.00 min)
1) SERIAL_RELEASE => Skipped configure, build, test due to no enabled packages! => Does not affect push readiness! (-1.00 min)
2) MPI_DEBUG_SS => passed: passed=58,notpassed=0 (21.15 min)
3) SERIAL_RELEASE_SS => passed: passed=58,notpassed=0 (17.85 min)
Stokhos:  Some work on tree representation of lexicographic basis/Cijk.

This generates a block Cijk tensor.  The hope is this would improve the
performance of sparse mat-vec's by eliminating the sparse indexing.  So
far this hasn't turned out to be the case because the blocks are just
too small.  So far I have only implemented a host version of the
multiply.
MueLu: added shortcut of not constructing filtered matrix if threshold = 0

Generally, user can specify using FilteredAMatrix in the XML file for,
say, SaPFactory. The problem was that the filtered factory had no way of
knowing whether we actually do any filtering, so it _always_ constructed
a filtered matrix. Now, I propagate that knowledge, and if we don't use
any filtering, the filtered matrix factory just uses original matrix.
Sacado:  Adding Sacado::Traits specializations for Stokhos scalar types.

These were missing, causing problems when trying to use Promote<> with
any of the scalar types when an expression was an argument.  I also
added a unit test for these and the other traits specializations.