A multi-precision Hari-Zimmermann complex GSVD.
A part of the supplementary material for the paper doi:10.1137/19M1277813 (arXiv:1907.08560 [math.NA]).
A recent 64-bit Linux (e.g., CentOS 7.9 with devtoolset-8) or macOS (e.g., Big Sur) is needed.
Then, clone and build JACSD in a directory parallel to this one.
Run make help to see the options:
cd src
make helpIntel C/C++ and Fortran compilers (version 19.1+/2020+) are recommended.
GNU Fortran 9 and newer are not supported!
Please take a look here for the explanation regarding the MAX and MIN intrinsics.
Currently, only GNU Fortran 8 is fully supported with COMPILER=gnu.
On RHEL/CentOS 7 it is provided by, e.g., devtoolset-8.
To run the executable, say, e.g.
OMP_NUM_THREADS=T OMP_PLACES=C /path/to/hzl1sa.exe FN M N JSTRAT NSWPwhere T is the number of threads, C is the thread placement (e.g., CORES), FN is the file name prefix (without an extension) containing the input data, M and N are the number of rows and columns, respectively, JSTRAT is a parallel Jacobi strategy to employ (e.g., 4 for mmstep), and NSWP is the maximal number of sweeps allowed (30 should suffice in many cases).
Data should be contained in FN.Y, FN.W, and FN.J binary files.
The first two are Fortran-array-order files of KIND_FILE element kind, where the first one stores the matrix F and the second one the matrix G, and both matrices are complex and expected to have M rows and N columns.
The third file contains the diagonal of the matrix J as a vector of 8-byte integers.
The output comprises FN.YU, FN.WV, FN.Z, for the complex matrices U, V (both M x N), and Z (N x N); FN.SY, FN.SW, FN.SS, for the real vectors \Sigma_F, \Sigma_G, and \Sigma; and FN.EY, FN.EW, FN.E, for the real vectors \Lambda_F, \Lambda_G, and \Lambda, respectively, where all vectors are of length N.
This work has been supported in part by Croatian Science Foundation under the project IP-2014-09-3670 (MFBDA).