FLAPWxHZ

September 22, 2025 · View on GitHub

The Hari-Zimmermann complex generalized hyperbolic SVD and EVD.

A part of the supplementary material for the paper doi:10.1137/19M1277813 (arXiv:1907.08560 [math.NA]).

Building

Prerequisites

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.

Make options

Run make as follows:

cd src
make [COMPILER=x64x|x200|gnu|nvidia] [MARCH=...] [NDEBUG=0|1|2|3|...|g] [all|clean|help]

where COMPILER should be set for the Intel C/C++ and Fortran compilers to x64x for Xeons, or to x200 for Xeon Phi KNLs, respectively.

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.

Here, NDEBUG should be set to the desired optimization level (3 is a sensible choice). If unset, the predefined debug-mode build options will be used.

For example, make COMPILER=x200 NDEBUG=3 clean all will trigger a full, release-mode rebuild for the KNLs.

Execution

Command line

In the examples below, TPC stands for threads-per-core. If the hyperthreading is not desired, it should be set to 1.

FN is the input and output file name prefix (without an extension).

Phase 0

/path/to/phase0.exe input.bin FN

Phase 0 is a data conversion phase from a custom data format to a set of plain binary files.

Phase 1

OMP_NUM_THREADS=T OMP_PLACES=CORES OMP_PROC_BIND=SPREAD,CLOSE /path/to/phase1.exe FN L a G TPC

L, a, and G are the problem-specific parameters.

Phase 2

OMP_NUM_THREADS=T OMP_PLACES=CORES OMP_PROC_BIND=SPREAD,CLOSE /path/to/phase2.exe FN M N TPC

Phase 3

OMP_NUM_THREADS=T OMP_PLACES=CORES OMP_PROC_BIND=SPREAD,CLOSE /path/to/phase3.exe FN M N TPC JSTRAT1 NSWP1 JSTRAT2 NSWP2

JSTRAT1 is the inner, and JSTRAT2 the outer Jacobi strategy.

JSTRAT1 can be 2 for cycwor or 4 for mmstep (recommended).

JSTRAT2 can be 3 for cycwor (recommended if a particular number of threads is supported) or 5 for mmstep.

NSWP1 (1 for block-oriented) and NSWP2 (30 should suffice in most cases) are the maximal numbers of the inner and of the outer sweeps allowed, respectively.

Phase 4

OMP_NUM_THREADS=T OMP_PLACES=CORES OMP_PROC_BIND=SPREAD,CLOSE /path/to/phase4.exe FN N TPC

Data format

All data is stored in the Fortran array order.

An example of data format of the test cases:

file namedata typerowscolumns
FN.XCOMPLEX(8)2*L*aG
FN.TCOMPLEX(8)2*L2*L
FN.UREAL(8)L*a1
FN.YYCOMPLEX(8)2*L*aG
FN.WWCOMPLEX(8)2*L*aG
FN.JJINTEGER(8)2*L*a1
FN.YCOMPLEX(8)GG
FN.WCOMPLEX(8)GG
FN.JINTEGER(8)G1
FN.PINTEGER(8)G1
FN.OINTEGER(8)G1
FN.YUCOMPLEX(8)GG
FN.WVCOMPLEX(8)GG
FN.ZCOMPLEX(8)GG
FN.EYREAL(8)G1
FN.EWREAL(8)G1
FN.EREAL(8)G1
FN.SYREAL(8)G1
FN.SWREAL(8)G1
FN.SSREAL(8)G1
FN.ZZCOMPLEX(8)GG

Phase 0

Outputs FN.X, FN.T, FN.U.

Phase 1

Input: FN.X, FN.T, FN.U.

Output: FN.YY, FN.WW, FN.JJ.

Phase 2

Input: FN.YY, FN.WW, FN.JJ.

Output: FN.Y, FN.W, FN.J, FN.P, FN.O.

Phase 3

Input: FN.Y, FN.W, FN.J.

Output: FN.YU, FN.WV, FN.Z; FN.EY, FN.EW, FN.E; FN.SY, FN.SW, FN.SS.

Phase 4

Input: FN.Z.

Output: FN.ZZ.

This work has been supported in part by Croatian Science Foundation under the project IP-2014-09-3670 (MFBDA).