* 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.
This matches the names of the functions in mm:: and also more closely
matches their use in the rest of mfem.
Also removed the template parameter for mm::free since it is not needed.
It is possible in the future to add equivalents of new and delete to the
mm class (with different names since those are keywords) in case it is
desirable to call the constructor and destructor.
In class ParMesh:
* Introduced internal struct's Vert3 and Vert4 holding 3 and 4
integers, respectively.
* Replaced 'shared_faces' with two separate arrays 'shared_trias'
and 'shared_quads' with types Array<Vert3> and Array<Vert4>,
respectively.
* Removed the arrays 'stria_lface', 'squad_lface', 'stria_sface',
'squad_sface', and 'sface_stype'.
* Restore the array 'sface_lface' used previously. Shared face
indices are shred triangle / quad indices offset by 0 / "number
of shared triangles", respectively.
* Made the two RefineGroups methods protected.
* Added two new protected methods: UniformRefineGroups2D and
UniformRefineGroups3D. These two methods simplify the
implementations of almost all uniform-refinement methods in
the class.
* Fixed a bug in ReorderTetMesh that was causing ex8p to fail with
fichera-mixed.mesh.
* Updated the implementations of all ParMesh methods as necessary
due to the above changes.
In class Triangle, add a static method MarkEdge that works on a
given array of 3 indices.
In class Array, add a method CopyTo - implemented using std::copy.
solutions. Restore the NURBS meshes in the data directory to use their
original format.
Add a new FiniteElementSpace format for writing variable-order spaces,
currently implemented for NURBS spaces only. Move the reading of FE
space input in a new method: FiniteElementSpace::Load. Add new default
constructor for FiniteElementSpace that should be used with the Load
method.
Add a bunch of const qualifiers in NURBSExtension and NURBSPatchMap.
Extended the method Mesh::DegreeElevate to make it easier to work with
variable-order NURBS meshes.
In class Array, add copy constructors and copy assignment operators.
Add a number of FIXME comments.
general/globals.[ch].
Renamed class WrappedOStream to OutStream and use a different
implementation in order to support the case when the OutStream is passed
as a parameter of type std::ostream.
In class MPI_Session, added an MPI_Comm parameter to both constructors,
with a default value of MPI_COMM_WORLD.
Hide the global variable MFEM_COMM_WORLD and allow access (read and
write) with global functions: GetGlobalMPI_Comm() and
SetGlobalMPI_Comm() - in the future, we may want to perform some tasks
when changing the "global" MPI communicator.
In mfem_error(), use GetGlobalMPI_Comm() instead of MPI_COMM_WORLD.
Minor formatting changes and #include reordering.
In class BlockArray:
* Move the capability to delete elements into the derived class HashTable.
* Rename the methods New() to Append().
* Rename 'Iterator' -> 'iterator' and 'ConstIterator' -> 'const_iterator' and
updated implementation.
* Add methods begin(), cbegin(), end(), cend().
* In the destructor, call the destructors for all entries.
In class HashTable:
* Add methods: Size(), NumIds(), NumFreeIds(); rename Exists() -> IdExists().
* Overload the inherited iterators to skip unused/free elements.
* Add methods: begin(), cbegin(), end(), cend().
In class NCMesh:
* Add support for deleting entries stored in the 'elements' BlockArray.
* The unused/free entries of 'elements' are marked by setting the data member
'parent' to -2.
* Add method NCMesh::PrintStats().
Based on commits by Jakub Cerveny:
Reverted inline-quad.mesh
make style
Testing code in ex1 and ex9p
Mesh vertices are not calculated by NCMesh when Nodes != NULL.
Optimized NCMesh::element_vertex, the table is now empty for conforming
meshes.
WIP reducing size of NCMesh element-vertex table.
Optimization in NCMesh::FaceSplitType, fewer hash table lookups.
Fixed ParNCMesh::CalcFaceOrientations
Fixed face neighbor vertices.
Fixed Element::parent after loading NCMesh.
Fixed derefinement.
Fixed NeighborExpand (needed by Rebalance).
More ParNCMesh fixes.
Fixed neighbor calculation.
WIP more fixes in ParNCMesh.
WIP fixing ParNCMesh for new NCMesh structs
NCMesh loading works again.
Removed NCMesh::GetMidEdgeNodeSimple
Fixed face management (creation/deletion), broken earlier by new structs.
Removed NCMesh::Vertex, NCMesh::Edge. We are down to ~290 bytes / element in uniform mesh.
Removed NCMesh::Vertex::pos, fixed some bugs.
WIP removing NCMesh::Vertex::pos
Fixed bug introduced by data structure changes.
Removed member NCMesh::Edge::attribute
Finished converting NCMesh to new data structures.
WIP changing the NCMesh data structures, everything is a bit of a mess.
BlockArray is now a base of HashTable
WIP: modified HashTable methods for the new pointer-less data, improved
BlockArray.
WIP updating HashTable for a new underlying storage (BlockArray)
Added class BlockArray, a generic block allocator/array.
Updated memory usage calculations in NCMesh.