Improved point-cell and cell-point topology methods
Goal
The goal of this change is to reduce the runtime of the pointCells()
and cellPoints()
methods in the primitiveMesh
class, which calculate the point-to-cell and cell-to-point addressing, respectively.
Proposed Change
The pointCells()
currently calculates the topology using the private method calcPointCells()
, which utilizes the method labels()
in the cell
class. This method introduces significant overhead and reduces performance. The cellPoints()
method currently calls the pointCell()
method and inverts the result.
The proposed solution implements the cellPoints()
method directly using a more efficient algorithm that makes use of the bitset
data class to mark points that have already been found. Then, the pointCells()
method is implemented by calling cellPoints()
and inverting the result. As can be seen below, our implementation improves performance in all cases, even if the user only wants the point-cell topology.
Results
The speedup values were calculated by running both the current version and the new version on structured cube meshes of varying sizes. It can be seen that the speedup remains constant among all the different mesh sizes.
In the testing, the meshes began without either one of the topologies present. Then 3 different cases were tested:
- The user wants only point-cell topology
- Speedup = 1.4x
- The user wants only cell-point topology
- Speedup = 2.4x
- The user wants both topologies
- Speedup = 1.7x