In the case where the sample size is larger than the system dimension, StaticSVD::computeSVD now performs the transposed SVD.
test_StaticSVD now checks a couple of google test routines, and is included in the ci test.
Minor capability updates
lib/utils/mpi_utils.h have frequently-used MPI-support functions
split_dimension, get_global_offsets
Matrix now can distribute or gather itself among MPI processes, through its member function Matrix::distribute and Matrix::gather.
Minor fixes on StaticSVD / RandomizedSVD
This is related to the issue #223 . This update may have a potential impact on the previous implementation.
The notation here refers to a svd operation A = U * S * V^T with the snapshot matrix A of size (m, n) and p number of svd modes.
So far the size of d_basis_right is set to (p, n), which corresponds to the size of V^T. However, the actual content of d_basis_right in fact corresponds to V, not V^T, so its size should be (n, p). This is fixed in StaticSVD::computeSVD and RandomizedSVD::computeSVD.
Per discussion in #223 , RandomizedSVD::computeSVD always keeps d_basis distributed and d_basis_right not distributed, whether transposed or not. If smaller subspace dimension is used, then d_basis is distributed according to its own size.
StaticSVD
supports the transposed SVD operationStaticSVD::computeSVD
now performs the transposed SVD.test_StaticSVD
now checks a couple of google test routines, and is included in the ci test.Minor capability updates
lib/utils/mpi_utils.h
have frequently-used MPI-support functionssplit_dimension
,get_global_offsets
Matrix
now can distribute or gather itself among MPI processes, through its member functionMatrix::distribute
andMatrix::gather
.Minor fixes on
StaticSVD
/RandomizedSVD
This is related to the issue #223 . This update may have a potential impact on the previous implementation.
The notation here refers to a svd operation
A = U * S * V^T
with the snapshot matrixA
of size(m, n)
andp
number of svd modes.d_basis_right
is set to(p, n)
, which corresponds to the size ofV^T
. However, the actual content ofd_basis_right
in fact corresponds toV
, notV^T
, so its size should be(n, p)
. This is fixed inStaticSVD::computeSVD
andRandomizedSVD::computeSVD
.RandomizedSVD::computeSVD
always keepsd_basis
distributed andd_basis_right
not distributed, whether transposed or not. If smaller subspace dimension is used, then d_basis is distributed according to its own size.Minor update on Docker container
astyle
added