libROM
libROM copied to clipboard
Add members and methods denoting comm ownership for Matrix and Vector methods
Specifically, add the following to each class T, where T is a CAROM::Vector or CAROM::Matrix, a CAROM::Vector is treated as a single column matrix, and none of the functions below should be templated:
- [ ] a private
MPI_Comm d_commmember - [ ] initialize that member in the constructor of each object
- [ ] include a
MPI_Comm getComm() constgetter method - [ ] a free function of the form
std::vector<int> GetDimensionOnEachProcess(T &input), that returns the number of rows of the object on each process - [ ] a free function of the form
std::vector<int> GetRowSpanOnEachProcess(T &input), whereTis aCAROM::MatrixorCAROM::Vectorthat returns the range of row indices of the object on each process. Letstd::vector<int> resultbe the value returned by this function. The following postconditions should be satisfied: (1)result.size()should be one plus the number of processes ond_comm, and (2) if a disjoint contiguous index span ofinputresides on each process such that index 0 is owned by process 0, and the lowest index owned by each process is an increasing sequence when ordered by increasing process number, then processpcontains rowsresult[p]throughresult[p + 1] - 1 - [ ] a free function of the form
int GetProcessContainingRow(T &input, int row)such that ifint resultis returned by this function, then rowrowis on process numberresult
These utility functions come up frequently in implementing linear algebraic operations. I suspect that if data objects are associated with communicators, the operations like matrix decompositions will not need to have communicators associated with them.