HypreParVector, HypreParMatrix, and HypreSmoother with GPU backends.
Add 2 versions of a new method: Vector::MakeRef -- one that takes
a Vector and an offset and another that takes a Vector, an offset
and a new size.
Add some simple debugging tools:
* Add a new output "trace" stream: mfem::trc. By default, the output
of mfem::trc goes to std::cout; the new function mfem::OpenTraceFile()
can be used to redirect the output of mfem::trc to a file called
'mfem-trace-<pid>' where <pid> is the process id. Note that this
function can be called from a debugger.
* In class Vector, add a new method Vector::PrintTrace() that prints a
Vector to the mfem::trc stream -- this method can be called from a
debugger, unlike Vector::Print with mfem::trc as argument (at least
in gdb this did not work).
* In class Memory<T>, add 2 new methods: PrintFlags() and
CompareHostAndDevice() which are explicitly instantiated for T=int
and T=double, so that they can be called inside a debugger for
these two types.
* The parameter of Vector::UseDevice(bool) no longer has a default value. All
the calls to UseDevice() in operator.cpp bilinearform_ext.cpp gridfunc.?pp and
linearform.?pp have been replaced with UseDevice(true).
* Added shortcuts for the device flags of the Memory objects inside the Vector
and Array classes:
bool Array::UseDevice()
bool Vector::UseDevice()
* The internal device flag in Memory::FlagMask is now called USE_DEVICE (it was
previously called EXEC_FLAG). The accessor function for this flag have been
renamed:
bool Memory::GetExecFlag() -> bool Memory::UseDevice()
void Memory::SetExecFlag(bool) -> void Memory::UseDevice(bool)
* Further renamed:
Memory::SyncWith -> Memory::Sync
Memory::SyncAliasToBase -> Memory::SyncAlias
Memory::SyncAliasToBase_ -> Memory::SyncAlias_
* Replaced FIXME with TODO in general/mem_manager.cpp
and transfers.
The Memory class is now used by some MFEM classes (like Array and
Vector) which can be used on the Device. Such classes now provide
methods to access the underlying Memory object, e.g. GetMemory.
Updated ex1/ex1p and ex6/ex6p to not need to enable/disable the
Device at specific points -- the Device is now enabled just at the
start. Also, the same examples can now run on Device (e.g. -d cuda)
without the partial assembly option (-pa) -- full assembly will
be still done on CPU but the sparse matrix action and vector
operations will be done using the Device.
Reverted changes in class DenseMatrix related to using the Device.
At this point, DenseMatrix operations are only used for small matrices
and using the Device in this case is not a good option.
* Add methods BuildTranspose() and ResetTranspose() that control
the use of the internal transpose matrix, At.
* The method AddMultTranspose() will always use At, if it is built.
If At is not build and the Device is enabled, an error will be
generated pointing to BuildTranspose().
* Introduce separate non-const and const versions of the methods
GetI(), GetJ(), and GetData().
* Made the method ActualWidth() const.
* Some edits in the documentation, the code formatting, and the
error messages.
In the method BilinearForm::FormLinearSystem(), call the method
SparseMatrix::BuildTranspose() for the nonconforming prolongation
matrix, when necessary.