From 83cecb3bc9aa1a5e040ba6681fc767ddd84f2693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Tue, 16 Jul 2024 14:05:37 +0200 Subject: [PATCH 01/22] Update *.dat files for correct reading --- examples/MB03BZ.dat | 16 ++++++++-------- examples/MB03FZ.dat | 4 ++-- examples/MB03LZ.dat | 4 ++-- examples/MB03XZ.dat | 8 ++++---- examples/MB04AZ.dat | 4 ++-- examples/MB04BZ.dat | 4 ++-- examples/MB04DZ.dat | 2 +- examples/MB4DLZ.dat | 16 ++++++++-------- examples/MB4DPZ.dat | 16 ++++++++-------- examples/TMB03LD.f | 2 ++ make_Unix.inc | 10 +++++----- 11 files changed, 44 insertions(+), 42 deletions(-) diff --git a/examples/MB03BZ.dat b/examples/MB03BZ.dat index d2b7b86..94d9c22 100644 --- a/examples/MB03BZ.dat +++ b/examples/MB03BZ.dat @@ -3,13 +3,13 @@ MB03BZ EXAMPLE PROGRAM DATA 1 -1 1 (0.8637,0.9326) (0.8819,0.4850) (0.5920,0.8826) (0.8991,0.9040) (0.6994,0.8588) (0.9527,0.2672) (0.5087,0.0621) (0.9653,0.5715) - 0 (0.1561,0.1898) (0.9514,0.9266) (0.6582,0.3102) - 0 0 (0.8649,0.1265) (0.1701,0.0013) + (0.0,0.0) (0.1561,0.1898) (0.9514,0.9266) (0.6582,0.3102) + (0.0,0.0) (0.0,0.0) (0.8649,0.1265) (0.1701,0.0013) (0.5113,0.7375) (0.6869,0.7692) (0.7812,0.1467) (0.7216,0.9498) - 0 (0.1319,0.9137) (0.5879,0.0201) (0.9834,0.0549) - 0 0 (0.7711,0.2422) (0.9468,0.3280) - 0 0 0 (0.2219,0.3971) + (0.0,0.0) (0.1319,0.9137) (0.5879,0.0201) (0.9834,0.0549) + (0.0,0.0) (0.0,0.0) (0.7711,0.2422) (0.9468,0.3280) + (0.0,0.0) (0.0,0.0) (0.0,0.0) (0.2219,0.3971) (0.0158,0.4042) (0.0082,0.2033) (0.1028,0.9913) (0.6954,0.1987) - 0 (0.5066,0.4587) (0.1060,0.6949) (0.5402,0.0970) - 0 0 (0.4494,0.3700) (0.8492,0.4882) - 0 0 0 (0.2110,0.5824) + (0.0,0.0) (0.5066,0.4587) (0.1060,0.6949) (0.5402,0.0970) + (0.0,0.0) (0.0,0.0) (0.4494,0.3700) (0.8492,0.4882) + (0.0,0.0) (0.0,0.0) (0.0,0.0) (0.2110,0.5824) diff --git a/examples/MB03FZ.dat b/examples/MB03FZ.dat index 55a7bc9..666277d 100644 --- a/examples/MB03FZ.dat +++ b/examples/MB03FZ.dat @@ -6,5 +6,5 @@ MB03FZ EXAMPLE PROGRAM DATA (0.0539,0.7931) (0.0408,0.2654) (0.9912,0.0989) (0.0991,0.6585) (0.0547,0.8726) (0.4008,0.8722) (0.7423,0.6166) (0.2631,0.5872) - 0.8740 0.3697 (0.9178,0.6418) - (0.7748,0.5358) 0.1652 0.2441 + (0.8740,0.0) (0.3697,0.0) (0.9178,0.6418) + (0.7748,0.5358) (0.1652,0.0) (0.2441,0.0) diff --git a/examples/MB03LZ.dat b/examples/MB03LZ.dat index 9db9fe4..d5260f7 100644 --- a/examples/MB03LZ.dat +++ b/examples/MB03LZ.dat @@ -6,5 +6,5 @@ MB03LZ EXAMPLE PROGRAM DATA (0.9840,0.3394) (0,0.9203) (0,0.7378) (0.2691,0.4177) (0.5478,0.3014) (0.4228,0.9830) (0.9427,0.7010) - 0.6663 0.6981 (0.1781,0.8818) - (0.5391,0.1711) 0.6665 0.1280 + (0.6663,0.0) (0.6981,0.0) (0.1781,0.8818) + (0.5391,0.1711) (0.6665,0.0) (0.1280,0.0) diff --git a/examples/MB03XZ.dat b/examples/MB03XZ.dat index 5e063ca..05db0d3 100644 --- a/examples/MB03XZ.dat +++ b/examples/MB03XZ.dat @@ -4,7 +4,7 @@ MB03XZ EXAMPLE PROGRAM DATA (0.9057,0.9157) (0.0975,0.0357) (0.9648,0.7577) (0.4853,0.1711) (0.1269,0.7922) (0.2784,0.8491) (0.1576,0.7431) (0.8002,0.7060) (0.9133,0.9594) (0.5468,0.9339) (0.9705,0.3922) (0.1418,0.0318) - 0.2769 0.6948 (0.4387,0.7513) (0.1869,0.8909) (0.7094,0.1493) - (0.0462,0.1626) 0.3171 0.3816 (0.4898,0.9593) (0.7547,0.2575) - (0.0971,0.1190) (0.9502,0.5853) 0.7655 0.4456 (0.2760,0.8407) - (0.8235,0.4984) (0.0344,0.2238) (0.7952,0.6991) 0.6463 0.6797 + (0.2769,0.0) (0.6948,0.0) (0.4387,0.7513) (0.1869,0.8909) (0.7094,0.1493) + (0.0462,0.1626) (0.3171,0.0) (0.3816,0.0) (0.4898,0.9593) (0.7547,0.2575) + (0.0971,0.1190) (0.9502,0.5853) (0.7655,0.0) (0.4456,0.0) (0.2760,0.8407) + (0.8235,0.4984) (0.0344,0.2238) (0.7952,0.6991) (0.6463,0.0) (0.6797,0.0) diff --git a/examples/MB04AZ.dat b/examples/MB04AZ.dat index 0b3adc2..8a937ad 100644 --- a/examples/MB04AZ.dat +++ b/examples/MB04AZ.dat @@ -6,5 +6,5 @@ MB04AZ EXAMPLE PROGRAM DATA (0.9037,0.2399) (0.1978,0.1679) (0.4799,0.4710) (0.8594,0.0714) (0.5216,0.7224) (0.8181,0.6596) (0.0967,0.1498) (0.8175,0.5185) - 0.9729 0.8003 (0.4323,0.8313) - (0.6489,0.1331) 0.4537 0.8253 + (0.9729,0.0) (0.8003,0.0) (0.4323,0.8313) + (0.6489,0.1331) (0.4537,0.0) (0.8253,0.0) diff --git a/examples/MB04BZ.dat b/examples/MB04BZ.dat index 97dffaa..e785d32 100644 --- a/examples/MB04BZ.dat +++ b/examples/MB04BZ.dat @@ -6,5 +6,5 @@ MB04BZ EXAMPLE PROGRAM DATA (0.9840,0.3394) (0,0.9203) (0,0.7378) (0.2691,0.4177) (0.5478,0.3014) (0.4228,0.9830) (0.9427,0.7010) - 0.6663 0.6981 (0.1781,0.8818) - (0.5391,0.1711) 0.6665 0.1280 + (0.6663,0.0) (0.6981,0.0) (0.1781,0.8818) + (0.5391,0.1711) (0.6665,0.0) (0.1280,0.0) diff --git a/examples/MB04DZ.dat b/examples/MB04DZ.dat index 4223c0c..97ba4d7 100644 --- a/examples/MB04DZ.dat +++ b/examples/MB04DZ.dat @@ -11,4 +11,4 @@ MB04DZ EXAMPLE PROGRAM DATA (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (.0444,0) (0,0) (0,0) (.1957,0) (0,0) (.8144,0) (0,0) (0,0) (0,0) (.3652,0) (0,0) (.9121,0) - (.9023,0) (0,0) (0,0) (0,0) (0,0) (0,0) 1.0945,0) + (.9023,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1.0945,0) diff --git a/examples/MB4DLZ.dat b/examples/MB4DLZ.dat index fd194a9..d82ac8a 100644 --- a/examples/MB4DLZ.dat +++ b/examples/MB4DLZ.dat @@ -1,11 +1,11 @@ MB4DLZ EXAMPLE PROGRAM DATA 4 B -3 - (1,0.5) 0 -1e-12 0 - 0 (-2,-1) 0 0 - 1 (-1,-0.5) (-1,0.5) 0 - (-1,0.5) -1 0 (2,-1) - (1,0.5) 0 0 0 - 0 (1,0.5) 0 0 - 0 0 (1,-0.5) 0 - 0 0 0 (1,-0.5) + (1,0.5) (0.0,0.0) (-1e-12,0.0) (0.0,0.0) + (0.0,0.0) (-2,-1) (0.0,0.0) (0.0,0.0) + (1.0,0.0) (-1,-0.5) (-1,0.5) (0.0,0.0) + (-1,0.5) (-1,0.0) (0.0,0.0) (2,-1) + (1,0.5) (0.0,0.0) (0.0,0.0) (0.0,0.0) + (0.0,0.0) (1,0.5) (0.0,0.0) (0.0,0.0) + (0.0,0.0) (0.0,0.0) (1,-0.5) (0.0,0.0) + (0.0,0.0) (0.0,0.0) (0.0,0.0) (1,-0.5) diff --git a/examples/MB4DPZ.dat b/examples/MB4DPZ.dat index 5a9464a..8985a0d 100644 --- a/examples/MB4DPZ.dat +++ b/examples/MB4DPZ.dat @@ -1,10 +1,10 @@ MB4DPZ EXAMPLE PROGRAM DATA 2 B -3 - (1,0.5) 0 - 0 (1,0.5) - 0 0 0 - 0 0 0 - (1,0.5) 0 - 0 (-2,-1) - 1 -1.e-12 0 - (-1,0.5) -1 0 + (1,0.5) (0.0,0.0) + (0.0,0.0) (1,0.5) + (0.0,0.0) (0.0,0.0) (0.0,0.0) + (0.0,0.0) (0.0,0.0) (0.0,0.0) + (1,0.5) (0.0,0.0) + (0.0,0.0) (-2,-1) + (1,0.0) (-1.e-12,0.0) (0.0,0.0) + (-1,0.5) (-1,0.0) (0.0,0.0) diff --git a/examples/TMB03LD.f b/examples/TMB03LD.f index b20b14a..ffc0fa7 100644 --- a/examples/TMB03LD.f +++ b/examples/TMB03LD.f @@ -25,9 +25,11 @@ $ BETA( NMAX/2 ), DE( LDDE, NMAX/2+1 ), $ DWORK( LDWORK ), FG( LDFG, NMAX/2+1 ), $ Q( LDQ, 2*NMAX ) + LOGICAL LSAME * * .. External Subroutines .. EXTERNAL MB03LD + EXTERNAL LSAME * * .. Intrinsic Functions .. INTRINSIC MAX diff --git a/make_Unix.inc b/make_Unix.inc index 0139fc1..7a52a1e 100644 --- a/make_Unix.inc +++ b/make_Unix.inc @@ -14,12 +14,12 @@ SHELL = /bin/sh # the compiler options desired when NO OPTIMIZATION is selected. # FORTRAN = gfortran -OPTS = -O2 -fPIC -fdefault-integer-8 -OPTS_NOOPT = -O0 +OPTS = -O2 -fPIC -g +OPTS_NOOPT = -O0 -g # Define LDFLAGS to the desired linker options for your machine. # -LOADER = $(FORTRAN) +LOADER = $(FORTRAN) LDFLAGS = # The archiver and the flag(s) to use when building an archive @@ -36,7 +36,7 @@ LOADOPTS = $(SLICOTLIB) $(LPKAUXLIB) $(LAPACKLIB) $(BLASLIB) # machine-specific, optimized BLAS library should be used whenever # possible.) # -BLASLIB = ../libs/blas.a -LAPACKLIB = ../libs/lapack.a +BLASLIB = -lopenblas +LAPACKLIB = -lopenblas LPKAUXLIB = ../lpkaux.a SLICOTLIB = ../slicot.a From ff85cc0a74572ebf342e3030267b5013422756d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Tue, 16 Jul 2024 13:08:26 +0200 Subject: [PATCH 02/22] Add CMake Building System --- .gitignore | 2 + CMakeLists.txt | 108 +++++++++++ cmake/FortranCompilerSettings.cmake | 243 +++++++++++++++++++++++++ cmake/OutOfSource.cmake | 5 + examples/CMakeLists.txt | 273 ++++++++++++++++++++++++++++ examples/{ => data}/AB01MD.dat | 0 examples/{ => data}/AB01ND.dat | 0 examples/{ => data}/AB01OD.dat | 0 examples/{ => data}/AB04MD.dat | 0 examples/{ => data}/AB05MD.dat | 0 examples/{ => data}/AB05ND.dat | 0 examples/{ => data}/AB05OD.dat | 0 examples/{ => data}/AB05PD.dat | 0 examples/{ => data}/AB05QD.dat | 0 examples/{ => data}/AB05RD.dat | 0 examples/{ => data}/AB07MD.dat | 0 examples/{ => data}/AB07ND.dat | 0 examples/{ => data}/AB08ND.dat | 0 examples/{ => data}/AB08NW.dat | 0 examples/{ => data}/AB08NZ.dat | 0 examples/{ => data}/AB09AD.dat | 0 examples/{ => data}/AB09BD.dat | 0 examples/{ => data}/AB09CD.dat | 0 examples/{ => data}/AB09DD.dat | 0 examples/{ => data}/AB09ED.dat | 0 examples/{ => data}/AB09FD.dat | 0 examples/{ => data}/AB09GD.dat | 0 examples/{ => data}/AB09HD.dat | 0 examples/{ => data}/AB09ID.dat | 0 examples/{ => data}/AB09JD.dat | 0 examples/{ => data}/AB09KD.dat | 0 examples/{ => data}/AB09MD.dat | 0 examples/{ => data}/AB09ND.dat | 0 examples/{ => data}/AB13AD.dat | 0 examples/{ => data}/AB13BD.dat | 0 examples/{ => data}/AB13CD.dat | 0 examples/{ => data}/AB13DD.dat | 0 examples/{ => data}/AB13ED.dat | 0 examples/{ => data}/AB13FD.dat | 0 examples/{ => data}/AB13ID.dat | 0 examples/{ => data}/AB13MD.dat | 0 examples/{ => data}/AG08BD.dat | 0 examples/{ => data}/AG08BZ.dat | 0 examples/{ => data}/BB01AD.dat | 0 examples/{ => data}/BB02AD.dat | 0 examples/{ => data}/BB03AD.dat | 0 examples/{ => data}/BB04AD.dat | 0 examples/{ => data}/BD01AD.dat | 0 examples/{ => data}/BD02AD.dat | 0 examples/{ => data}/DE01OD.dat | 0 examples/{ => data}/DE01PD.dat | 0 examples/{ => data}/DF01MD.dat | 0 examples/{ => data}/DG01MD.dat | 0 examples/{ => data}/DG01ND.dat | 0 examples/{ => data}/DG01OD.dat | 0 examples/{ => data}/DK01MD.dat | 0 examples/{ => data}/FB01QD.dat | 0 examples/{ => data}/FB01RD.dat | 0 examples/{ => data}/FB01SD.dat | 0 examples/{ => data}/FB01TD.dat | 0 examples/{ => data}/FB01VD.dat | 0 examples/{ => data}/FD01AD.dat | 0 examples/{ => data}/IB01AD.dat | 0 examples/{ => data}/IB01BD.dat | 0 examples/{ => data}/IB01CD.dat | 0 examples/{ => data}/IB03AD.dat | 0 examples/{ => data}/IB03BD.dat | 0 examples/{ => data}/MB01TD.dat | 0 examples/{ => data}/MB02CD.dat | 0 examples/{ => data}/MB02DD.dat | 0 examples/{ => data}/MB02ED.dat | 0 examples/{ => data}/MB02FD.dat | 0 examples/{ => data}/MB02GD.dat | 0 examples/{ => data}/MB02HD.dat | 0 examples/{ => data}/MB02ID.dat | 0 examples/{ => data}/MB02JD.dat | 0 examples/{ => data}/MB02JX.dat | 0 examples/{ => data}/MB02KD.dat | 0 examples/{ => data}/MB02MD.dat | 0 examples/{ => data}/MB02ND.dat | 0 examples/{ => data}/MB02QD.dat | 0 examples/{ => data}/MB02SD.dat | 0 examples/{ => data}/MB02VD.dat | 0 examples/{ => data}/MB03BD.dat | 0 examples/{ => data}/MB03BZ.dat | 0 examples/{ => data}/MB03FZ.dat | 0 examples/{ => data}/MB03KD.dat | 0 examples/{ => data}/MB03LD.dat | 0 examples/{ => data}/MB03LF.dat | 0 examples/{ => data}/MB03LZ.dat | 0 examples/{ => data}/MB03MD.dat | 0 examples/{ => data}/MB03ND.dat | 0 examples/{ => data}/MB03OD.dat | 0 examples/{ => data}/MB03PD.dat | 0 examples/{ => data}/MB03QD.dat | 0 examples/{ => data}/MB03QG.dat | 0 examples/{ => data}/MB03RD.dat | 0 examples/{ => data}/MB03SD.dat | 0 examples/{ => data}/MB03TD.dat | 0 examples/{ => data}/MB03UD.dat | 0 examples/{ => data}/MB03VD.dat | 0 examples/{ => data}/MB03WD.dat | 0 examples/{ => data}/MB03XD.dat | 0 examples/{ => data}/MB03XP.dat | 0 examples/{ => data}/MB03XZ.dat | 0 examples/{ => data}/MB03ZD.dat | 0 examples/{ => data}/MB04AD.dat | 0 examples/{ => data}/MB04AZ.dat | 0 examples/{ => data}/MB04BD.dat | 0 examples/{ => data}/MB04BZ.dat | 0 examples/{ => data}/MB04DD.dat | 0 examples/{ => data}/MB04DL.dat | 0 examples/{ => data}/MB04DP.dat | 0 examples/{ => data}/MB04DS.dat | 0 examples/{ => data}/MB04DY.dat | 0 examples/{ => data}/MB04DZ.dat | 0 examples/{ => data}/MB04ED.dat | 0 examples/{ => data}/MB04FD.dat | 0 examples/{ => data}/MB04GD.dat | 0 examples/{ => data}/MB04MD.dat | 0 examples/{ => data}/MB04OD.dat | 0 examples/{ => data}/MB04PB.dat | 0 examples/{ => data}/MB04PU.dat | 0 examples/{ => data}/MB04TB.dat | 0 examples/{ => data}/MB04TS.dat | 0 examples/{ => data}/MB04UD.dat | 0 examples/{ => data}/MB04VD.dat | 0 examples/{ => data}/MB04XD.dat | 0 examples/{ => data}/MB04YD.dat | 0 examples/{ => data}/MB04ZD.dat | 0 examples/{ => data}/MB05MD.dat | 0 examples/{ => data}/MB05ND.dat | 0 examples/{ => data}/MB05OD.dat | 0 examples/{ => data}/MB4DLZ.dat | 0 examples/{ => data}/MB4DPZ.dat | 0 examples/{ => data}/MC01MD.dat | 0 examples/{ => data}/MC01ND.dat | 0 examples/{ => data}/MC01OD.dat | 0 examples/{ => data}/MC01PD.dat | 0 examples/{ => data}/MC01QD.dat | 0 examples/{ => data}/MC01RD.dat | 0 examples/{ => data}/MC01SD.dat | 0 examples/{ => data}/MC01TD.dat | 0 examples/{ => data}/MC01VD.dat | 0 examples/{ => data}/MC01WD.dat | 0 examples/{ => data}/MC01XD.dat | 0 examples/{ => data}/MC03MD.dat | 0 examples/{ => data}/MC03ND.dat | 0 examples/{ => data}/MD03AD.dat | 0 examples/{ => data}/MD03BD.dat | 0 examples/{ => data}/SB01BD.dat | 0 examples/{ => data}/SB01DD.dat | 0 examples/{ => data}/SB01MD.dat | 0 examples/{ => data}/SB02MD.dat | 0 examples/{ => data}/SB02ND.dat | 0 examples/{ => data}/SB02OD.dat | 0 examples/{ => data}/SB02PD.dat | 0 examples/{ => data}/SB02QD.dat | 0 examples/{ => data}/SB02RD.dat | 0 examples/{ => data}/SB02SD.dat | 0 examples/{ => data}/SB03MD.dat | 0 examples/{ => data}/SB03OD.dat | 0 examples/{ => data}/SB03QD.dat | 0 examples/{ => data}/SB03SD.dat | 0 examples/{ => data}/SB03TD.dat | 0 examples/{ => data}/SB03UD.dat | 0 examples/{ => data}/SB04MD.dat | 0 examples/{ => data}/SB04ND.dat | 0 examples/{ => data}/SB04OD.dat | 0 examples/{ => data}/SB04PD.dat | 0 examples/{ => data}/SB04QD.dat | 0 examples/{ => data}/SB04RD.dat | 0 examples/{ => data}/SB06ND.dat | 0 examples/{ => data}/SB08CD.dat | 0 examples/{ => data}/SB08DD.dat | 0 examples/{ => data}/SB08ED.dat | 0 examples/{ => data}/SB08FD.dat | 0 examples/{ => data}/SB08MD.dat | 0 examples/{ => data}/SB08ND.dat | 0 examples/{ => data}/SB09MD.dat | 0 examples/{ => data}/SB10DD.dat | 0 examples/{ => data}/SB10ED.dat | 0 examples/{ => data}/SB10FD.dat | 0 examples/{ => data}/SB10HD.dat | 0 examples/{ => data}/SB10ID.dat | 0 examples/{ => data}/SB10KD.dat | 0 examples/{ => data}/SB10ZD.dat | 0 examples/{ => data}/SB16AD.dat | 0 examples/{ => data}/SB16BD.dat | 0 examples/{ => data}/SB16CD.dat | 0 examples/{ => data}/SG02AD.dat | 0 examples/{ => data}/SG02ND.dat | 0 examples/{ => data}/SG03AD.dat | 0 examples/{ => data}/SG03BD.dat | 0 examples/{ => data}/TB01ID.dat | 0 examples/{ => data}/TB01IZ.dat | 0 examples/{ => data}/TB01KD.dat | 0 examples/{ => data}/TB01LD.dat | 0 examples/{ => data}/TB01MD.dat | 0 examples/{ => data}/TB01ND.dat | 0 examples/{ => data}/TB01PD.dat | 0 examples/{ => data}/TB01PX.dat | 0 examples/{ => data}/TB01TD.dat | 0 examples/{ => data}/TB01UD.dat | 0 examples/{ => data}/TB01UY.dat | 0 examples/{ => data}/TB01WD.dat | 0 examples/{ => data}/TB01WX.dat | 0 examples/{ => data}/TB01ZD.dat | 0 examples/{ => data}/TB03AD.dat | 0 examples/{ => data}/TB04AD.dat | 0 examples/{ => data}/TB04BD.dat | 0 examples/{ => data}/TB04CD.dat | 0 examples/{ => data}/TB05AD.dat | 0 examples/{ => data}/TC01OD.dat | 0 examples/{ => data}/TC04AD.dat | 0 examples/{ => data}/TC05AD.dat | 0 examples/{ => data}/TD03AD.dat | 0 examples/{ => data}/TD04AD.dat | 0 examples/{ => data}/TD05AD.dat | 0 examples/{ => data}/TF01MD.dat | 0 examples/{ => data}/TF01ND.dat | 0 examples/{ => data}/TF01OD.dat | 0 examples/{ => data}/TF01PD.dat | 0 examples/{ => data}/TF01QD.dat | 0 examples/{ => data}/TF01RD.dat | 0 examples/{ => data}/TG01AD.dat | 0 examples/{ => data}/TG01AZ.dat | 0 examples/{ => data}/TG01CD.dat | 0 examples/{ => data}/TG01DD.dat | 0 examples/{ => data}/TG01ED.dat | 0 examples/{ => data}/TG01FD.dat | 0 examples/{ => data}/TG01FZ.dat | 0 examples/{ => data}/TG01GD.dat | 0 examples/{ => data}/TG01HD.dat | 0 examples/{ => data}/TG01ID.dat | 0 examples/{ => data}/TG01JD.dat | 0 examples/{ => data}/TG01JY.dat | 0 examples/{ => data}/TG01LD.dat | 0 examples/{ => data}/TG01MD.dat | 0 examples/{ => data}/TG01ND.dat | 0 examples/{ => data}/TG01PD.dat | 0 examples/{ => data}/TG01QD.dat | 0 examples/{ => data}/UD01BD.dat | 0 examples/{ => data}/UD01CD.dat | 0 examples/{ => data}/UD01DD.dat | 0 examples/{ => data}/UD01MD.dat | 0 examples/{ => data}/UD01ND.dat | 0 examples/{ => results}/AB01MD.res | 0 examples/{ => results}/AB01ND.res | 0 examples/{ => results}/AB01OD.res | 0 examples/{ => results}/AB04MD.res | 0 examples/{ => results}/AB05MD.res | 0 examples/{ => results}/AB05ND.res | 0 examples/{ => results}/AB05OD.res | 0 examples/{ => results}/AB05PD.res | 0 examples/{ => results}/AB05QD.res | 0 examples/{ => results}/AB05RD.res | 0 examples/{ => results}/AB07MD.res | 0 examples/{ => results}/AB07ND.res | 0 examples/{ => results}/AB08ND.res | 0 examples/{ => results}/AB08NW.res | 0 examples/{ => results}/AB08NZ.res | 0 examples/{ => results}/AB09AD.res | 0 examples/{ => results}/AB09BD.res | 0 examples/{ => results}/AB09CD.res | 0 examples/{ => results}/AB09DD.res | 0 examples/{ => results}/AB09ED.res | 0 examples/{ => results}/AB09FD.res | 0 examples/{ => results}/AB09GD.res | 0 examples/{ => results}/AB09HD.res | 0 examples/{ => results}/AB09ID.res | 0 examples/{ => results}/AB09JD.res | 0 examples/{ => results}/AB09KD.res | 0 examples/{ => results}/AB09MD.res | 0 examples/{ => results}/AB09ND.res | 0 examples/{ => results}/AB13AD.res | 0 examples/{ => results}/AB13BD.res | 0 examples/{ => results}/AB13CD.res | 0 examples/{ => results}/AB13DD.res | 0 examples/{ => results}/AB13ED.res | 0 examples/{ => results}/AB13FD.res | 0 examples/{ => results}/AB13ID.res | 0 examples/{ => results}/AB13MD.res | 0 examples/{ => results}/AG08BD.res | 0 examples/{ => results}/AG08BZ.res | 0 examples/{ => results}/BB01AD.res | 0 examples/{ => results}/BB02AD.res | 0 examples/{ => results}/BB03AD.res | 0 examples/{ => results}/BB04AD.res | 0 examples/{ => results}/BD01AD.res | 0 examples/{ => results}/BD02AD.res | 0 examples/{ => results}/DE01OD.res | 0 examples/{ => results}/DE01PD.res | 0 examples/{ => results}/DF01MD.res | 0 examples/{ => results}/DG01MD.res | 0 examples/{ => results}/DG01ND.res | 0 examples/{ => results}/DG01OD.res | 0 examples/{ => results}/DK01MD.res | 0 examples/{ => results}/FB01QD.res | 0 examples/{ => results}/FB01RD.res | 0 examples/{ => results}/FB01SD.res | 0 examples/{ => results}/FB01TD.res | 0 examples/{ => results}/FB01VD.res | 0 examples/{ => results}/FD01AD.res | 0 examples/{ => results}/IB01AD.res | 0 examples/{ => results}/IB01BD.res | 0 examples/{ => results}/IB01CD.res | 0 examples/{ => results}/IB03AD.res | 0 examples/{ => results}/IB03BD.res | 0 examples/{ => results}/MB01TD.res | 0 examples/{ => results}/MB02CD.res | 0 examples/{ => results}/MB02DD.res | 0 examples/{ => results}/MB02ED.res | 0 examples/{ => results}/MB02FD.res | 0 examples/{ => results}/MB02GD.res | 0 examples/{ => results}/MB02HD.res | 0 examples/{ => results}/MB02ID.res | 0 examples/{ => results}/MB02JD.res | 0 examples/{ => results}/MB02JX.res | 0 examples/{ => results}/MB02KD.res | 0 examples/{ => results}/MB02MD.res | 0 examples/{ => results}/MB02ND.res | 0 examples/{ => results}/MB02QD.res | 0 examples/{ => results}/MB02SD.res | 0 examples/{ => results}/MB02VD.res | 0 examples/{ => results}/MB03BD.res | 0 examples/{ => results}/MB03BZ.res | 0 examples/{ => results}/MB03FZ.res | 0 examples/{ => results}/MB03KD.res | 0 examples/{ => results}/MB03LD.res | 0 examples/{ => results}/MB03LF.res | 0 examples/{ => results}/MB03LZ.res | 0 examples/{ => results}/MB03MD.res | 0 examples/{ => results}/MB03ND.res | 0 examples/{ => results}/MB03OD.res | 0 examples/{ => results}/MB03PD.res | 0 examples/{ => results}/MB03QD.res | 0 examples/{ => results}/MB03QG.res | 0 examples/{ => results}/MB03RD.res | 0 examples/{ => results}/MB03SD.res | 0 examples/{ => results}/MB03TD.res | 0 examples/{ => results}/MB03UD.res | 0 examples/{ => results}/MB03VD.res | 0 examples/{ => results}/MB03WD.res | 0 examples/{ => results}/MB03XD.res | 0 examples/{ => results}/MB03XP.res | 0 examples/{ => results}/MB03XZ.res | 0 examples/{ => results}/MB03ZD.res | 0 examples/{ => results}/MB04AD.res | 0 examples/{ => results}/MB04AZ.res | 0 examples/{ => results}/MB04BD.res | 0 examples/{ => results}/MB04BZ.res | 0 examples/{ => results}/MB04DD.res | 0 examples/{ => results}/MB04DL.res | 0 examples/{ => results}/MB04DP.res | 0 examples/{ => results}/MB04DS.res | 0 examples/{ => results}/MB04DY.res | 0 examples/{ => results}/MB04DZ.res | 0 examples/{ => results}/MB04ED.res | 0 examples/{ => results}/MB04FD.res | 0 examples/{ => results}/MB04GD.res | 0 examples/{ => results}/MB04MD.res | 0 examples/{ => results}/MB04OD.res | 0 examples/{ => results}/MB04PB.res | 0 examples/{ => results}/MB04PU.res | 0 examples/{ => results}/MB04TB.res | 0 examples/{ => results}/MB04TS.res | 0 examples/{ => results}/MB04UD.res | 0 examples/{ => results}/MB04VD.res | 0 examples/{ => results}/MB04XD.res | 0 examples/{ => results}/MB04YD.res | 0 examples/{ => results}/MB04ZD.res | 0 examples/{ => results}/MB05MD.res | 0 examples/{ => results}/MB05ND.res | 0 examples/{ => results}/MB05OD.res | 0 examples/{ => results}/MB4DLZ.res | 0 examples/{ => results}/MB4DPZ.res | 0 examples/{ => results}/MC01MD.res | 0 examples/{ => results}/MC01ND.res | 0 examples/{ => results}/MC01OD.res | 0 examples/{ => results}/MC01PD.res | 0 examples/{ => results}/MC01QD.res | 0 examples/{ => results}/MC01RD.res | 0 examples/{ => results}/MC01SD.res | 0 examples/{ => results}/MC01TD.res | 0 examples/{ => results}/MC01VD.res | 0 examples/{ => results}/MC01WD.res | 0 examples/{ => results}/MC01XD.res | 0 examples/{ => results}/MC03MD.res | 0 examples/{ => results}/MC03ND.res | 0 examples/{ => results}/MD03AD.res | 0 examples/{ => results}/MD03BD.res | 0 examples/{ => results}/SB01BD.res | 0 examples/{ => results}/SB01DD.res | 0 examples/{ => results}/SB01MD.res | 0 examples/{ => results}/SB02MD.res | 0 examples/{ => results}/SB02ND.res | 0 examples/{ => results}/SB02OD.res | 0 examples/{ => results}/SB02PD.res | 0 examples/{ => results}/SB02QD.res | 0 examples/{ => results}/SB02RD.res | 0 examples/{ => results}/SB02SD.res | 0 examples/{ => results}/SB03MD.res | 0 examples/{ => results}/SB03OD.res | 0 examples/{ => results}/SB03QD.res | 0 examples/{ => results}/SB03SD.res | 0 examples/{ => results}/SB03TD.res | 0 examples/{ => results}/SB03UD.res | 0 examples/{ => results}/SB04MD.res | 0 examples/{ => results}/SB04ND.res | 0 examples/{ => results}/SB04OD.res | 0 examples/{ => results}/SB04PD.res | 0 examples/{ => results}/SB04QD.res | 0 examples/{ => results}/SB04RD.res | 0 examples/{ => results}/SB06ND.res | 0 examples/{ => results}/SB08CD.res | 0 examples/{ => results}/SB08DD.res | 0 examples/{ => results}/SB08ED.res | 0 examples/{ => results}/SB08FD.res | 0 examples/{ => results}/SB08MD.res | 0 examples/{ => results}/SB08ND.res | 0 examples/{ => results}/SB09MD.res | 0 examples/{ => results}/SB10DD.res | 0 examples/{ => results}/SB10ED.res | 0 examples/{ => results}/SB10FD.res | 0 examples/{ => results}/SB10HD.res | 0 examples/{ => results}/SB10ID.res | 0 examples/{ => results}/SB10KD.res | 0 examples/{ => results}/SB10ZD.res | 0 examples/{ => results}/SB16AD.res | 0 examples/{ => results}/SB16BD.res | 0 examples/{ => results}/SB16CD.res | 0 examples/{ => results}/SG02AD.res | 0 examples/{ => results}/SG02ND.res | 0 examples/{ => results}/SG03AD.res | 0 examples/{ => results}/SG03BD.res | 0 examples/{ => results}/TB01ID.res | 0 examples/{ => results}/TB01IZ.res | 0 examples/{ => results}/TB01KD.res | 0 examples/{ => results}/TB01LD.res | 0 examples/{ => results}/TB01MD.res | 0 examples/{ => results}/TB01ND.res | 0 examples/{ => results}/TB01PD.res | 0 examples/{ => results}/TB01PX.res | 0 examples/{ => results}/TB01TD.res | 0 examples/{ => results}/TB01UD.res | 0 examples/{ => results}/TB01UY.res | 0 examples/{ => results}/TB01WD.res | 0 examples/{ => results}/TB01WX.res | 0 examples/{ => results}/TB01ZD.res | 0 examples/{ => results}/TB03AD.res | 0 examples/{ => results}/TB04AD.res | 0 examples/{ => results}/TB04BD.res | 0 examples/{ => results}/TB04CD.res | 0 examples/{ => results}/TB05AD.res | 0 examples/{ => results}/TC01OD.res | 0 examples/{ => results}/TC04AD.res | 0 examples/{ => results}/TC05AD.res | 0 examples/{ => results}/TD03AD.res | 0 examples/{ => results}/TD04AD.res | 0 examples/{ => results}/TD05AD.res | 0 examples/{ => results}/TF01MD.res | 0 examples/{ => results}/TF01ND.res | 0 examples/{ => results}/TF01OD.res | 0 examples/{ => results}/TF01PD.res | 0 examples/{ => results}/TF01QD.res | 0 examples/{ => results}/TF01RD.res | 0 examples/{ => results}/TG01AD.res | 0 examples/{ => results}/TG01AZ.res | 0 examples/{ => results}/TG01CD.res | 0 examples/{ => results}/TG01DD.res | 0 examples/{ => results}/TG01ED.res | 0 examples/{ => results}/TG01FD.res | 0 examples/{ => results}/TG01FZ.res | 0 examples/{ => results}/TG01GD.res | 0 examples/{ => results}/TG01HD.res | 0 examples/{ => results}/TG01ID.res | 0 examples/{ => results}/TG01JD.res | 0 examples/{ => results}/TG01JY.res | 0 examples/{ => results}/TG01LD.res | 0 examples/{ => results}/TG01MD.res | 0 examples/{ => results}/TG01ND.res | 0 examples/{ => results}/TG01PD.res | 0 examples/{ => results}/TG01QD.res | 0 examples/{ => results}/UD01BD.res | 0 examples/{ => results}/UD01CD.res | 0 examples/{ => results}/UD01DD.res | 0 examples/{ => results}/UD01MD.res | 0 examples/{ => results}/UD01ND.res | 0 examples/runtest.cmake | 40 ++++ src/CMakeLists.txt | 111 +++++++++++ 491 files changed, 782 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 cmake/FortranCompilerSettings.cmake create mode 100644 cmake/OutOfSource.cmake create mode 100644 examples/CMakeLists.txt rename examples/{ => data}/AB01MD.dat (100%) rename examples/{ => data}/AB01ND.dat (100%) rename examples/{ => data}/AB01OD.dat (100%) rename examples/{ => data}/AB04MD.dat (100%) rename examples/{ => data}/AB05MD.dat (100%) rename examples/{ => data}/AB05ND.dat (100%) rename examples/{ => data}/AB05OD.dat (100%) rename examples/{ => data}/AB05PD.dat (100%) rename examples/{ => data}/AB05QD.dat (100%) rename examples/{ => data}/AB05RD.dat (100%) rename examples/{ => data}/AB07MD.dat (100%) rename examples/{ => data}/AB07ND.dat (100%) rename examples/{ => data}/AB08ND.dat (100%) rename examples/{ => data}/AB08NW.dat (100%) rename examples/{ => data}/AB08NZ.dat (100%) rename examples/{ => data}/AB09AD.dat (100%) rename examples/{ => data}/AB09BD.dat (100%) rename examples/{ => data}/AB09CD.dat (100%) rename examples/{ => data}/AB09DD.dat (100%) rename examples/{ => data}/AB09ED.dat (100%) rename examples/{ => data}/AB09FD.dat (100%) rename examples/{ => data}/AB09GD.dat (100%) rename examples/{ => data}/AB09HD.dat (100%) rename examples/{ => data}/AB09ID.dat (100%) rename examples/{ => data}/AB09JD.dat (100%) rename examples/{ => data}/AB09KD.dat (100%) rename examples/{ => data}/AB09MD.dat (100%) rename examples/{ => data}/AB09ND.dat (100%) rename examples/{ => data}/AB13AD.dat (100%) rename examples/{ => data}/AB13BD.dat (100%) rename examples/{ => data}/AB13CD.dat (100%) rename examples/{ => data}/AB13DD.dat (100%) rename examples/{ => data}/AB13ED.dat (100%) rename examples/{ => data}/AB13FD.dat (100%) rename examples/{ => data}/AB13ID.dat (100%) rename examples/{ => data}/AB13MD.dat (100%) rename examples/{ => data}/AG08BD.dat (100%) rename examples/{ => data}/AG08BZ.dat (100%) rename examples/{ => data}/BB01AD.dat (100%) rename examples/{ => data}/BB02AD.dat (100%) rename examples/{ => data}/BB03AD.dat (100%) rename examples/{ => data}/BB04AD.dat (100%) rename examples/{ => data}/BD01AD.dat (100%) rename examples/{ => data}/BD02AD.dat (100%) rename examples/{ => data}/DE01OD.dat (100%) rename examples/{ => data}/DE01PD.dat (100%) rename examples/{ => data}/DF01MD.dat (100%) rename examples/{ => data}/DG01MD.dat (100%) rename examples/{ => data}/DG01ND.dat (100%) rename examples/{ => data}/DG01OD.dat (100%) rename examples/{ => data}/DK01MD.dat (100%) rename examples/{ => data}/FB01QD.dat (100%) rename examples/{ => data}/FB01RD.dat (100%) rename examples/{ => data}/FB01SD.dat (100%) rename examples/{ => data}/FB01TD.dat (100%) rename examples/{ => data}/FB01VD.dat (100%) rename examples/{ => data}/FD01AD.dat (100%) rename examples/{ => data}/IB01AD.dat (100%) rename examples/{ => data}/IB01BD.dat (100%) rename examples/{ => data}/IB01CD.dat (100%) rename examples/{ => data}/IB03AD.dat (100%) rename examples/{ => data}/IB03BD.dat (100%) rename examples/{ => data}/MB01TD.dat (100%) rename examples/{ => data}/MB02CD.dat (100%) rename examples/{ => data}/MB02DD.dat (100%) rename examples/{ => data}/MB02ED.dat (100%) rename examples/{ => data}/MB02FD.dat (100%) rename examples/{ => data}/MB02GD.dat (100%) rename examples/{ => data}/MB02HD.dat (100%) rename examples/{ => data}/MB02ID.dat (100%) rename examples/{ => data}/MB02JD.dat (100%) rename examples/{ => data}/MB02JX.dat (100%) rename examples/{ => data}/MB02KD.dat (100%) rename examples/{ => data}/MB02MD.dat (100%) rename examples/{ => data}/MB02ND.dat (100%) rename examples/{ => data}/MB02QD.dat (100%) rename examples/{ => data}/MB02SD.dat (100%) rename examples/{ => data}/MB02VD.dat (100%) rename examples/{ => data}/MB03BD.dat (100%) rename examples/{ => data}/MB03BZ.dat (100%) rename examples/{ => data}/MB03FZ.dat (100%) rename examples/{ => data}/MB03KD.dat (100%) rename examples/{ => data}/MB03LD.dat (100%) rename examples/{ => data}/MB03LF.dat (100%) rename examples/{ => data}/MB03LZ.dat (100%) rename examples/{ => data}/MB03MD.dat (100%) rename examples/{ => data}/MB03ND.dat (100%) rename examples/{ => data}/MB03OD.dat (100%) rename examples/{ => data}/MB03PD.dat (100%) rename examples/{ => data}/MB03QD.dat (100%) rename examples/{ => data}/MB03QG.dat (100%) rename examples/{ => data}/MB03RD.dat (100%) rename examples/{ => data}/MB03SD.dat (100%) rename examples/{ => data}/MB03TD.dat (100%) rename examples/{ => data}/MB03UD.dat (100%) rename examples/{ => data}/MB03VD.dat (100%) rename examples/{ => data}/MB03WD.dat (100%) rename examples/{ => data}/MB03XD.dat (100%) rename examples/{ => data}/MB03XP.dat (100%) rename examples/{ => data}/MB03XZ.dat (100%) rename examples/{ => data}/MB03ZD.dat (100%) rename examples/{ => data}/MB04AD.dat (100%) rename examples/{ => data}/MB04AZ.dat (100%) rename examples/{ => data}/MB04BD.dat (100%) rename examples/{ => data}/MB04BZ.dat (100%) rename examples/{ => data}/MB04DD.dat (100%) rename examples/{ => data}/MB04DL.dat (100%) rename examples/{ => data}/MB04DP.dat (100%) rename examples/{ => data}/MB04DS.dat (100%) rename examples/{ => data}/MB04DY.dat (100%) rename examples/{ => data}/MB04DZ.dat (100%) rename examples/{ => data}/MB04ED.dat (100%) rename examples/{ => data}/MB04FD.dat (100%) rename examples/{ => data}/MB04GD.dat (100%) rename examples/{ => data}/MB04MD.dat (100%) rename examples/{ => data}/MB04OD.dat (100%) rename examples/{ => data}/MB04PB.dat (100%) rename examples/{ => data}/MB04PU.dat (100%) rename examples/{ => data}/MB04TB.dat (100%) rename examples/{ => data}/MB04TS.dat (100%) rename examples/{ => data}/MB04UD.dat (100%) rename examples/{ => data}/MB04VD.dat (100%) rename examples/{ => data}/MB04XD.dat (100%) rename examples/{ => data}/MB04YD.dat (100%) rename examples/{ => data}/MB04ZD.dat (100%) rename examples/{ => data}/MB05MD.dat (100%) rename examples/{ => data}/MB05ND.dat (100%) rename examples/{ => data}/MB05OD.dat (100%) rename examples/{ => data}/MB4DLZ.dat (100%) rename examples/{ => data}/MB4DPZ.dat (100%) rename examples/{ => data}/MC01MD.dat (100%) rename examples/{ => data}/MC01ND.dat (100%) rename examples/{ => data}/MC01OD.dat (100%) rename examples/{ => data}/MC01PD.dat (100%) rename examples/{ => data}/MC01QD.dat (100%) rename examples/{ => data}/MC01RD.dat (100%) rename examples/{ => data}/MC01SD.dat (100%) rename examples/{ => data}/MC01TD.dat (100%) rename examples/{ => data}/MC01VD.dat (100%) rename examples/{ => data}/MC01WD.dat (100%) rename examples/{ => data}/MC01XD.dat (100%) rename examples/{ => data}/MC03MD.dat (100%) rename examples/{ => data}/MC03ND.dat (100%) rename examples/{ => data}/MD03AD.dat (100%) rename examples/{ => data}/MD03BD.dat (100%) rename examples/{ => data}/SB01BD.dat (100%) rename examples/{ => data}/SB01DD.dat (100%) rename examples/{ => data}/SB01MD.dat (100%) rename examples/{ => data}/SB02MD.dat (100%) rename examples/{ => data}/SB02ND.dat (100%) rename examples/{ => data}/SB02OD.dat (100%) rename examples/{ => data}/SB02PD.dat (100%) rename examples/{ => data}/SB02QD.dat (100%) rename examples/{ => data}/SB02RD.dat (100%) rename examples/{ => data}/SB02SD.dat (100%) rename examples/{ => data}/SB03MD.dat (100%) rename examples/{ => data}/SB03OD.dat (100%) rename examples/{ => data}/SB03QD.dat (100%) rename examples/{ => data}/SB03SD.dat (100%) rename examples/{ => data}/SB03TD.dat (100%) rename examples/{ => data}/SB03UD.dat (100%) rename examples/{ => data}/SB04MD.dat (100%) rename examples/{ => data}/SB04ND.dat (100%) rename examples/{ => data}/SB04OD.dat (100%) rename examples/{ => data}/SB04PD.dat (100%) rename examples/{ => data}/SB04QD.dat (100%) rename examples/{ => data}/SB04RD.dat (100%) rename examples/{ => data}/SB06ND.dat (100%) rename examples/{ => data}/SB08CD.dat (100%) rename examples/{ => data}/SB08DD.dat (100%) rename examples/{ => data}/SB08ED.dat (100%) rename examples/{ => data}/SB08FD.dat (100%) rename examples/{ => data}/SB08MD.dat (100%) rename examples/{ => data}/SB08ND.dat (100%) rename examples/{ => data}/SB09MD.dat (100%) rename examples/{ => data}/SB10DD.dat (100%) rename examples/{ => data}/SB10ED.dat (100%) rename examples/{ => data}/SB10FD.dat (100%) rename examples/{ => data}/SB10HD.dat (100%) rename examples/{ => data}/SB10ID.dat (100%) rename examples/{ => data}/SB10KD.dat (100%) rename examples/{ => data}/SB10ZD.dat (100%) rename examples/{ => data}/SB16AD.dat (100%) rename examples/{ => data}/SB16BD.dat (100%) rename examples/{ => data}/SB16CD.dat (100%) rename examples/{ => data}/SG02AD.dat (100%) rename examples/{ => data}/SG02ND.dat (100%) rename examples/{ => data}/SG03AD.dat (100%) rename examples/{ => data}/SG03BD.dat (100%) rename examples/{ => data}/TB01ID.dat (100%) rename examples/{ => data}/TB01IZ.dat (100%) rename examples/{ => data}/TB01KD.dat (100%) rename examples/{ => data}/TB01LD.dat (100%) rename examples/{ => data}/TB01MD.dat (100%) rename examples/{ => data}/TB01ND.dat (100%) rename examples/{ => data}/TB01PD.dat (100%) rename examples/{ => data}/TB01PX.dat (100%) rename examples/{ => data}/TB01TD.dat (100%) rename examples/{ => data}/TB01UD.dat (100%) rename examples/{ => data}/TB01UY.dat (100%) rename examples/{ => data}/TB01WD.dat (100%) rename examples/{ => data}/TB01WX.dat (100%) rename examples/{ => data}/TB01ZD.dat (100%) rename examples/{ => data}/TB03AD.dat (100%) rename examples/{ => data}/TB04AD.dat (100%) rename examples/{ => data}/TB04BD.dat (100%) rename examples/{ => data}/TB04CD.dat (100%) rename examples/{ => data}/TB05AD.dat (100%) rename examples/{ => data}/TC01OD.dat (100%) rename examples/{ => data}/TC04AD.dat (100%) rename examples/{ => data}/TC05AD.dat (100%) rename examples/{ => data}/TD03AD.dat (100%) rename examples/{ => data}/TD04AD.dat (100%) rename examples/{ => data}/TD05AD.dat (100%) rename examples/{ => data}/TF01MD.dat (100%) rename examples/{ => data}/TF01ND.dat (100%) rename examples/{ => data}/TF01OD.dat (100%) rename examples/{ => data}/TF01PD.dat (100%) rename examples/{ => data}/TF01QD.dat (100%) rename examples/{ => data}/TF01RD.dat (100%) rename examples/{ => data}/TG01AD.dat (100%) rename examples/{ => data}/TG01AZ.dat (100%) rename examples/{ => data}/TG01CD.dat (100%) rename examples/{ => data}/TG01DD.dat (100%) rename examples/{ => data}/TG01ED.dat (100%) rename examples/{ => data}/TG01FD.dat (100%) rename examples/{ => data}/TG01FZ.dat (100%) rename examples/{ => data}/TG01GD.dat (100%) rename examples/{ => data}/TG01HD.dat (100%) rename examples/{ => data}/TG01ID.dat (100%) rename examples/{ => data}/TG01JD.dat (100%) rename examples/{ => data}/TG01JY.dat (100%) rename examples/{ => data}/TG01LD.dat (100%) rename examples/{ => data}/TG01MD.dat (100%) rename examples/{ => data}/TG01ND.dat (100%) rename examples/{ => data}/TG01PD.dat (100%) rename examples/{ => data}/TG01QD.dat (100%) rename examples/{ => data}/UD01BD.dat (100%) rename examples/{ => data}/UD01CD.dat (100%) rename examples/{ => data}/UD01DD.dat (100%) rename examples/{ => data}/UD01MD.dat (100%) rename examples/{ => data}/UD01ND.dat (100%) rename examples/{ => results}/AB01MD.res (100%) rename examples/{ => results}/AB01ND.res (100%) rename examples/{ => results}/AB01OD.res (100%) rename examples/{ => results}/AB04MD.res (100%) rename examples/{ => results}/AB05MD.res (100%) rename examples/{ => results}/AB05ND.res (100%) rename examples/{ => results}/AB05OD.res (100%) rename examples/{ => results}/AB05PD.res (100%) rename examples/{ => results}/AB05QD.res (100%) rename examples/{ => results}/AB05RD.res (100%) rename examples/{ => results}/AB07MD.res (100%) rename examples/{ => results}/AB07ND.res (100%) rename examples/{ => results}/AB08ND.res (100%) rename examples/{ => results}/AB08NW.res (100%) rename examples/{ => results}/AB08NZ.res (100%) rename examples/{ => results}/AB09AD.res (100%) rename examples/{ => results}/AB09BD.res (100%) rename examples/{ => results}/AB09CD.res (100%) rename examples/{ => results}/AB09DD.res (100%) rename examples/{ => results}/AB09ED.res (100%) rename examples/{ => results}/AB09FD.res (100%) rename examples/{ => results}/AB09GD.res (100%) rename examples/{ => results}/AB09HD.res (100%) rename examples/{ => results}/AB09ID.res (100%) rename examples/{ => results}/AB09JD.res (100%) rename examples/{ => results}/AB09KD.res (100%) rename examples/{ => results}/AB09MD.res (100%) rename examples/{ => results}/AB09ND.res (100%) rename examples/{ => results}/AB13AD.res (100%) rename examples/{ => results}/AB13BD.res (100%) rename examples/{ => results}/AB13CD.res (100%) rename examples/{ => results}/AB13DD.res (100%) rename examples/{ => results}/AB13ED.res (100%) rename examples/{ => results}/AB13FD.res (100%) rename examples/{ => results}/AB13ID.res (100%) rename examples/{ => results}/AB13MD.res (100%) rename examples/{ => results}/AG08BD.res (100%) rename examples/{ => results}/AG08BZ.res (100%) rename examples/{ => results}/BB01AD.res (100%) rename examples/{ => results}/BB02AD.res (100%) rename examples/{ => results}/BB03AD.res (100%) rename examples/{ => results}/BB04AD.res (100%) rename examples/{ => results}/BD01AD.res (100%) rename examples/{ => results}/BD02AD.res (100%) rename examples/{ => results}/DE01OD.res (100%) rename examples/{ => results}/DE01PD.res (100%) rename examples/{ => results}/DF01MD.res (100%) rename examples/{ => results}/DG01MD.res (100%) rename examples/{ => results}/DG01ND.res (100%) rename examples/{ => results}/DG01OD.res (100%) rename examples/{ => results}/DK01MD.res (100%) rename examples/{ => results}/FB01QD.res (100%) rename examples/{ => results}/FB01RD.res (100%) rename examples/{ => results}/FB01SD.res (100%) rename examples/{ => results}/FB01TD.res (100%) rename examples/{ => results}/FB01VD.res (100%) rename examples/{ => results}/FD01AD.res (100%) rename examples/{ => results}/IB01AD.res (100%) rename examples/{ => results}/IB01BD.res (100%) rename examples/{ => results}/IB01CD.res (100%) rename examples/{ => results}/IB03AD.res (100%) rename examples/{ => results}/IB03BD.res (100%) rename examples/{ => results}/MB01TD.res (100%) rename examples/{ => results}/MB02CD.res (100%) rename examples/{ => results}/MB02DD.res (100%) rename examples/{ => results}/MB02ED.res (100%) rename examples/{ => results}/MB02FD.res (100%) rename examples/{ => results}/MB02GD.res (100%) rename examples/{ => results}/MB02HD.res (100%) rename examples/{ => results}/MB02ID.res (100%) rename examples/{ => results}/MB02JD.res (100%) rename examples/{ => results}/MB02JX.res (100%) rename examples/{ => results}/MB02KD.res (100%) rename examples/{ => results}/MB02MD.res (100%) rename examples/{ => results}/MB02ND.res (100%) rename examples/{ => results}/MB02QD.res (100%) rename examples/{ => results}/MB02SD.res (100%) rename examples/{ => results}/MB02VD.res (100%) rename examples/{ => results}/MB03BD.res (100%) rename examples/{ => results}/MB03BZ.res (100%) rename examples/{ => results}/MB03FZ.res (100%) rename examples/{ => results}/MB03KD.res (100%) rename examples/{ => results}/MB03LD.res (100%) rename examples/{ => results}/MB03LF.res (100%) rename examples/{ => results}/MB03LZ.res (100%) rename examples/{ => results}/MB03MD.res (100%) rename examples/{ => results}/MB03ND.res (100%) rename examples/{ => results}/MB03OD.res (100%) rename examples/{ => results}/MB03PD.res (100%) rename examples/{ => results}/MB03QD.res (100%) rename examples/{ => results}/MB03QG.res (100%) rename examples/{ => results}/MB03RD.res (100%) rename examples/{ => results}/MB03SD.res (100%) rename examples/{ => results}/MB03TD.res (100%) rename examples/{ => results}/MB03UD.res (100%) rename examples/{ => results}/MB03VD.res (100%) rename examples/{ => results}/MB03WD.res (100%) rename examples/{ => results}/MB03XD.res (100%) rename examples/{ => results}/MB03XP.res (100%) rename examples/{ => results}/MB03XZ.res (100%) rename examples/{ => results}/MB03ZD.res (100%) rename examples/{ => results}/MB04AD.res (100%) rename examples/{ => results}/MB04AZ.res (100%) rename examples/{ => results}/MB04BD.res (100%) rename examples/{ => results}/MB04BZ.res (100%) rename examples/{ => results}/MB04DD.res (100%) rename examples/{ => results}/MB04DL.res (100%) rename examples/{ => results}/MB04DP.res (100%) rename examples/{ => results}/MB04DS.res (100%) rename examples/{ => results}/MB04DY.res (100%) rename examples/{ => results}/MB04DZ.res (100%) rename examples/{ => results}/MB04ED.res (100%) rename examples/{ => results}/MB04FD.res (100%) rename examples/{ => results}/MB04GD.res (100%) rename examples/{ => results}/MB04MD.res (100%) rename examples/{ => results}/MB04OD.res (100%) rename examples/{ => results}/MB04PB.res (100%) rename examples/{ => results}/MB04PU.res (100%) rename examples/{ => results}/MB04TB.res (100%) rename examples/{ => results}/MB04TS.res (100%) rename examples/{ => results}/MB04UD.res (100%) rename examples/{ => results}/MB04VD.res (100%) rename examples/{ => results}/MB04XD.res (100%) rename examples/{ => results}/MB04YD.res (100%) rename examples/{ => results}/MB04ZD.res (100%) rename examples/{ => results}/MB05MD.res (100%) rename examples/{ => results}/MB05ND.res (100%) rename examples/{ => results}/MB05OD.res (100%) rename examples/{ => results}/MB4DLZ.res (100%) rename examples/{ => results}/MB4DPZ.res (100%) rename examples/{ => results}/MC01MD.res (100%) rename examples/{ => results}/MC01ND.res (100%) rename examples/{ => results}/MC01OD.res (100%) rename examples/{ => results}/MC01PD.res (100%) rename examples/{ => results}/MC01QD.res (100%) rename examples/{ => results}/MC01RD.res (100%) rename examples/{ => results}/MC01SD.res (100%) rename examples/{ => results}/MC01TD.res (100%) rename examples/{ => results}/MC01VD.res (100%) rename examples/{ => results}/MC01WD.res (100%) rename examples/{ => results}/MC01XD.res (100%) rename examples/{ => results}/MC03MD.res (100%) rename examples/{ => results}/MC03ND.res (100%) rename examples/{ => results}/MD03AD.res (100%) rename examples/{ => results}/MD03BD.res (100%) rename examples/{ => results}/SB01BD.res (100%) rename examples/{ => results}/SB01DD.res (100%) rename examples/{ => results}/SB01MD.res (100%) rename examples/{ => results}/SB02MD.res (100%) rename examples/{ => results}/SB02ND.res (100%) rename examples/{ => results}/SB02OD.res (100%) rename examples/{ => results}/SB02PD.res (100%) rename examples/{ => results}/SB02QD.res (100%) rename examples/{ => results}/SB02RD.res (100%) rename examples/{ => results}/SB02SD.res (100%) rename examples/{ => results}/SB03MD.res (100%) rename examples/{ => results}/SB03OD.res (100%) rename examples/{ => results}/SB03QD.res (100%) rename examples/{ => results}/SB03SD.res (100%) rename examples/{ => results}/SB03TD.res (100%) rename examples/{ => results}/SB03UD.res (100%) rename examples/{ => results}/SB04MD.res (100%) rename examples/{ => results}/SB04ND.res (100%) rename examples/{ => results}/SB04OD.res (100%) rename examples/{ => results}/SB04PD.res (100%) rename examples/{ => results}/SB04QD.res (100%) rename examples/{ => results}/SB04RD.res (100%) rename examples/{ => results}/SB06ND.res (100%) rename examples/{ => results}/SB08CD.res (100%) rename examples/{ => results}/SB08DD.res (100%) rename examples/{ => results}/SB08ED.res (100%) rename examples/{ => results}/SB08FD.res (100%) rename examples/{ => results}/SB08MD.res (100%) rename examples/{ => results}/SB08ND.res (100%) rename examples/{ => results}/SB09MD.res (100%) rename examples/{ => results}/SB10DD.res (100%) rename examples/{ => results}/SB10ED.res (100%) rename examples/{ => results}/SB10FD.res (100%) rename examples/{ => results}/SB10HD.res (100%) rename examples/{ => results}/SB10ID.res (100%) rename examples/{ => results}/SB10KD.res (100%) rename examples/{ => results}/SB10ZD.res (100%) rename examples/{ => results}/SB16AD.res (100%) rename examples/{ => results}/SB16BD.res (100%) rename examples/{ => results}/SB16CD.res (100%) rename examples/{ => results}/SG02AD.res (100%) rename examples/{ => results}/SG02ND.res (100%) rename examples/{ => results}/SG03AD.res (100%) rename examples/{ => results}/SG03BD.res (100%) rename examples/{ => results}/TB01ID.res (100%) rename examples/{ => results}/TB01IZ.res (100%) rename examples/{ => results}/TB01KD.res (100%) rename examples/{ => results}/TB01LD.res (100%) rename examples/{ => results}/TB01MD.res (100%) rename examples/{ => results}/TB01ND.res (100%) rename examples/{ => results}/TB01PD.res (100%) rename examples/{ => results}/TB01PX.res (100%) rename examples/{ => results}/TB01TD.res (100%) rename examples/{ => results}/TB01UD.res (100%) rename examples/{ => results}/TB01UY.res (100%) rename examples/{ => results}/TB01WD.res (100%) rename examples/{ => results}/TB01WX.res (100%) rename examples/{ => results}/TB01ZD.res (100%) rename examples/{ => results}/TB03AD.res (100%) rename examples/{ => results}/TB04AD.res (100%) rename examples/{ => results}/TB04BD.res (100%) rename examples/{ => results}/TB04CD.res (100%) rename examples/{ => results}/TB05AD.res (100%) rename examples/{ => results}/TC01OD.res (100%) rename examples/{ => results}/TC04AD.res (100%) rename examples/{ => results}/TC05AD.res (100%) rename examples/{ => results}/TD03AD.res (100%) rename examples/{ => results}/TD04AD.res (100%) rename examples/{ => results}/TD05AD.res (100%) rename examples/{ => results}/TF01MD.res (100%) rename examples/{ => results}/TF01ND.res (100%) rename examples/{ => results}/TF01OD.res (100%) rename examples/{ => results}/TF01PD.res (100%) rename examples/{ => results}/TF01QD.res (100%) rename examples/{ => results}/TF01RD.res (100%) rename examples/{ => results}/TG01AD.res (100%) rename examples/{ => results}/TG01AZ.res (100%) rename examples/{ => results}/TG01CD.res (100%) rename examples/{ => results}/TG01DD.res (100%) rename examples/{ => results}/TG01ED.res (100%) rename examples/{ => results}/TG01FD.res (100%) rename examples/{ => results}/TG01FZ.res (100%) rename examples/{ => results}/TG01GD.res (100%) rename examples/{ => results}/TG01HD.res (100%) rename examples/{ => results}/TG01ID.res (100%) rename examples/{ => results}/TG01JD.res (100%) rename examples/{ => results}/TG01JY.res (100%) rename examples/{ => results}/TG01LD.res (100%) rename examples/{ => results}/TG01MD.res (100%) rename examples/{ => results}/TG01ND.res (100%) rename examples/{ => results}/TG01PD.res (100%) rename examples/{ => results}/TG01QD.res (100%) rename examples/{ => results}/UD01BD.res (100%) rename examples/{ => results}/UD01CD.res (100%) rename examples/{ => results}/UD01DD.res (100%) rename examples/{ => results}/UD01MD.res (100%) rename examples/{ => results}/UD01ND.res (100%) create mode 100644 examples/runtest.cmake create mode 100644 src/CMakeLists.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bdad2c9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.swp +build*/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d12b82d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,108 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.15.0) +CMAKE_POLICY(SET CMP0048 NEW) +PROJECT(SLICOT VERSION 5.0.0 LANGUAGES C Fortran) +# Add addtional CMAKE Paths. +LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") + +INCLUDE(OutOfSource) + +# Options +OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON) +OPTION(DEBUG "Enable Debug Symbol generation" OFF) +OPTION(TESTING "Enabled Tests" ON) + +# Enable PIC code by default +SET(CMAKE_POSITION_INDEPENDENT_CODE TRUE) + +# Select the Proper Build Type. +IF ( DEBUG STREQUAL ON ) + SET (CMAKE_BUILD_TYPE "Debug") + ADD_DEFINITIONS(-DDEBUG) +ENDIF() + +IF(NOT CMAKE_BUILD_TYPE) + SET (CMAKE_BUILD_TYPE "Release") +ENDIF() + +IF (TESTING) + ENABLE_TESTING() +ENDIF() + +# Configure the Build + +INCLUDE(FortranCompilerSettings) +INCLUDE(GNUInstallDirs) + +# IBM XLF Compilation +IF( CMAKE_Fortran_COMPILER_ID STREQUAL "XL") + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qfixed -qnosave") +ENDIF() + + +IF(INTEGER8) + MESSAGE(STATUS "8-Byte Integer (ILP64) build.") + IF(${CMAKE_VERSION} VERSION_LESS "3.22.0") + MESSAGE(WARNING "8-Byte Integer (ILP64) build requires CMake 3.22 or newer to work properly.") + ENDIF() + SET(BLA_SIZEOF_INTEGER 8) +ELSE() + SET(BLA_SIZEOF_INTEGER 4) +ENDIF() + +FIND_PACKAGE(BLAS REQUIRED) +MESSAGE(STATUS "Found BLAS Library: ${BLA_VENDOR} (${BLAS_LIBRARIES})") +FIND_PACKAGE(LAPACK REQUIRED) +MESSAGE(STATUS "Found LAPACK Library: ${BLA_VENDOR} (${LAPACK_LIBRARIES})") + +# Compatability with CMAKE < 3.18 +if(NOT TARGET BLAS::BLAS) + add_library(BLAS::BLAS IMPORTED INTERFACE) + set_property(BLAS::BLAS PROPERTY INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES}) + set_property(BLAS::BLAS PROPERTY INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS}) +endif() +if(NOT TARGET LAPACK::LAPACK) + add_library(LAPACK::LAPACK IMPORTED INTERFACE) + set_property(LAPACK::LAPACK PROPERTY INTERFACE_LINK_LIBRARIES ${LAPACK_LIBRARIES}) + set_property(LAPACK::LAPACK PROPERTY INTERFACE_LINK_OPTIONS ${LAPACK_LINKER_FLAGS}) +endif() + + + + +ADD_SUBDIRECTORY(src) +ADD_SUBDIRECTORY(examples) +# ADD_SUBDIRECTORY(test) +# +# INCLUDE(CMakePackageConfigHelpers) +# WRITE_BASIC_PACKAGE_VERSION_FILE( +# qrupdateConfigVersion.cmake +# VERSION ${PROJECT_VERSION} +# COMPATIBILITY AnyNewerVersion +# ) +# INSTALL(EXPORT qrupdatetargets +# FILE qrupdateTargets.cmake +# NAMESPACE qrupdate:: +# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/qrupdate +# ) +# +# CONFIGURE_FILE(qrupdate-config.cmake.in qrupdate-config.cmake @ONLY) +# INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/qrupdate-config.cmake" +# "${CMAKE_CURRENT_BINARY_DIR}/qrupdateConfigVersion.cmake" +# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/qrupdate +# ) +# +# CONFIGURE_FILE(qrupdate.pc.in qrupdate.pc @ONLY) +# INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/qrupdate.pc" +# DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +# +# MESSAGE(STATUS "------------ Build Information --------------") +# MESSAGE(STATUS "CMAKE_Fortran_FLAGS: ${CMAKE_Fortran_FLAGS}") +# MESSAGE(STATUS "CMAKE_Fortran_FLAGS_DEBUG: ${CMAKE_Fortran_FLAGS_DEBUG}") +# MESSAGE(STATUS "CMAKE_Fortran_FLAGS_RELEASE: ${CMAKE_Fortran_FLAGS_RELEASE}") +# MESSAGE(STATUS "BLAS Libraries: ${BLAS_LIBRARIES}") +# MESSAGE(STATUS "LAPACK Libraries: ${LAPACK_LIBRARIES}") +# MESSAGE(STATUS "Build Type: ${CMAKE_BUILD_TYPE}") +# MESSAGE(STATUS "Debug: ${DEBUG}") +# MESSAGE(STATUS "Shared Libs: ${BUILD_SHARED_LIBS}") +# MESSAGE(STATUS "---------------------------------------------") +# diff --git a/cmake/FortranCompilerSettings.cmake b/cmake/FortranCompilerSettings.cmake new file mode 100644 index 0000000..8b801fe --- /dev/null +++ b/cmake/FortranCompilerSettings.cmake @@ -0,0 +1,243 @@ +IF (CMAKE_Fortran_COMPILER_LOADED) + + OPTION(FORTRAN_BOUND_CHECK "Enable the Fortran bound checker" OFF) + OPTION(FORTRAN_SANITIZE "Enable the Fortran sanitizer" OFF) + + IF(NOT "${HOSTOPT}" STREQUAL "") + IF(NOT (HOSTOPT STREQUAL OFF OR HOSTOPT STREQUAL ON)) + STRING(SUBSTRING "${HOSTOPT}" 0 1 FIRST_CHAR) + IF( "${FIRST_CHAR}" STREQUAL "/" ) + MESSAGE(STATUS "Load user supplied Host Optimizations for Fortran -- ${HOSTOPT}") + INCLUDE(${HOSTOPT}) + ELSE() + MESSAGE(STATUS "Load user supplied Host Optimizations for Fortran -- ${CMAKE_BINARY_DIR}/${HOSTOPT}") + INCLUDE(${CMAKE_BINARY_DIR}/${HOSTOPT}) + ENDIF() + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${HOSTOPT_Fortran}" CACHE INTERNAL "") + ENDIF() + ENDIF() + + # INCLUDE(CheckFortranCompilerFlag_meta) + INCLUDE(CheckFortranCompilerFlag) + + + FUNCTION(ADD_FORTRAN_COMPILER_FLAG VAR FLAGNAME ) + IF(DEFINED CACHE{FORTRAN_${FLAGNAME}_WORK}) + RETURN() + ENDIF() + SET(_SAVE ${CMAKE_REQUIRED_QUIET}) + UNSET(_WORKS CACHE) + SET(CMAKE_REQUIRED_QUIET TRUE) + CHECK_FORTRAN_COMPILER_FLAG("${FLAGNAME}" _WORKS) + SET(FORTRAN_${FLAGNAME}_WORK ${_WORKS} CACHE INTERNAL "Fortran Compiler supports ${FLAGNAME}") + + IF ( _WORKS) + SET(${VAR} "${${VAR}} ${FLAGNAME}" CACHE INTERNAL "" ) + MESSAGE(STATUS "Fortran compiler supports ${FLAGNAME}") + ELSE() + MESSAGE(STATUS "Fortran compiler does not support ${FLAGNAME}") + ENDIF() + SET(CMAKE_REQUIRED_QUIET ${_SAVE}) + ENDFUNCTION() + + IF(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") + # GNU + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-frecursive") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fPIC") + + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") + + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wimplicit-procedure") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wall") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wunused") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Warray-temporaries") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-fbacktrace") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wshadow") + + IF(DEBUGOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") + ENDIF() + + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fcheck=bounds") + ENDIF() + + IF ( FORTRAN_SANITIZE STREQUAL ON OR SANITIZE STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fcheck=all") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=undefined") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=address") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=leak") + ENDIF() + + IF(INTEGER8 STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fdefault-integer-8") + ENDIF() + + IF(HOSTOPT STREQUAL ON) + IF (CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mcpu=native") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mtune=native") + ELSE () + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-march=native") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mtune=native") + ENDIF() + ENDIF() + + LIST(APPEND LIBRARIES "gfortran") + + SET(I8FLAG "-fdefault-integer-8") + + ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "Flang") + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fPIC -Mrecursive" CACHE INTERNAL "") + SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -O3" CACHE INTERNAL "") + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -Wimplicit-procedure -Wall -Wunused -Warray-temporaries -fbacktrace -Wshadow" CACHE INTERNAL "") + + IF(DEBUGOPT STREQUAL ON) + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -O3" CACHE INTERNAL "") + ELSE() + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -O0" CACHE INTERNAL "") + ENDIF() + + IF(INTEGER8 STREQUAL ON) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-integer-8" CACHE INTERNAL "") + ENDIF() + + IF(HOSTOPT STREQUAL ON) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -march=native -mtune=native" CACHE INTERNAL "") + ENDIF() + + SET(I8FLAG "-fdefault-integer-8") + + ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" OR CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM") + # Intel + IF (WIN32) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /recursive /heap-arrays:64" CACHE INTERNAL "") + SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} /O3 /Qunroll" CACHE INTERNAL "") + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} /warn all /Zi /warn nointerfaces /traceback /debug all" CACHE INTERNAL "") + + IF(DEBUGOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/O3") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/O0") + ENDIF() + + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /check bounds" CACHE INTERNAL "") + ENDIF() + + IF(HOSTOPT STREQUAL ON) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /QxHost" CACHE INTERNAL "") + ENDIF() + + IF(INTEGER8 STREQUAL ON) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /4I8" CACHE INTERNAL "") + ENDIF() + + LIST(APPEND LIBRARIES "ifcore") + + SET(I8FLAG "/4I8") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-recursive") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fpic") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-heap-arrays 64") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-unroll") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-warn all") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-g") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-warn nointerfaces") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-traceback") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-debug all") + + IF(DEBUGOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") + ENDIF() + + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-check bounds") + ENDIF() + + IF(INTEGER8 STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-i8") + ENDIF() + + IF(HOSTOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-xHost") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-flto") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-ipo") + ENDIF() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qopt-report=3") + + LIST(APPEND LIBRARIES "ifcore") + + SET(I8FLAG "-i8") + ENDIF() + + ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC" OR CMAKE_Fortran_COMPILER_ID STREQUAL "PGI") + # Nvidia HPC SDK (nvfortran) or PGI + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fpic -Mrecursive -Mnoipa" CACHE INTERNAL "") + SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -O3" CACHE INTERNAL "") + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -Minfo=all" CACHE INTERNAL "") + + IF(DEBUGOPT STREQUAL ON) + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -gopt -O3" CACHE INTERNAL "") + ELSE() + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -g -O0" CACHE INTERNAL "") + ENDIF() + + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mbounds" CACHE INTERNAL "") + ENDIF() + + IF(INTEGER8 STREQUAL ON) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -i8" CACHE INTERNAL "") + ENDIF() + + IF(HOSTOPT STREQUAL ON) + SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fast -tp=native" CACHE INTERNAL "") + IF (DEBUGOPT STREQUAL ON) + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fast -tp=native" CACHE INTERNAL "") + ENDIF() + ENDIF() + + SET(I8FLAG "-i8") + + ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "XL") + # IBM XL + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qpic -qstrict=ieeefp -qnosave -qxlf77=nopersistent -qalias=std -qnoipa -qmaxmem=32768" CACHE INTERNAL "") + SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -qessl -qhot=level=2 -qreport -qlistfmt=html=all" CACHE INTERNAL "") + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -qsigtrap -g9" CACHE INTERNAL "") + + IF(HOSTOPT STREQUAL ON) + SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -O5 -qtune=auto -qarch=auto" CACHE INTERNAL "") + ELSE() + SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -O3" CACHE INTERNAL "") + ENDIF() + + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qcheck=all" CACHE INTERNAL "") + ENDIF() + + IF(DEBUGOPT STREQUAL ON) + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -O2" CACHE INTERNAL "") + ELSE() + SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -O0" CACHE INTERNAL "") + ENDIF() + + STRING(REPLACE "-qhalt=e" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") + + IF(INTEGER8 STREQUAL ON) + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qintsize=8" CACHE INTERNAL "") + ENDIF() + + IF(OPENMP_FOUND) + LIST(REMOVE_ITEM CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "xlomp_ser") + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}" CACHE INTERNAL "") + ENDIF() + SET(I8FLAG "-qintsize=8") + ENDIF() + +ENDIF() # Compiler loaded diff --git a/cmake/OutOfSource.cmake b/cmake/OutOfSource.cmake new file mode 100644 index 0000000..e47f3ba --- /dev/null +++ b/cmake/OutOfSource.cmake @@ -0,0 +1,5 @@ +### Require out-of-source builds +file(TO_CMAKE_PATH "${PROJECT_BINARY_DIR}/CMakeLists.txt" LOC_PATH) +if(EXISTS "${LOC_PATH}") + message(FATAL_ERROR "You cannot build in a source directory (or any directory with a CMakeLists.txt file). Please make a build subdirectory. Feel free to remove CMakeCache.txt and CMakeFiles.") +endif() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt new file mode 100644 index 0000000..31d2fca --- /dev/null +++ b/examples/CMakeLists.txt @@ -0,0 +1,273 @@ +macro(add_slicot_test name src) + get_filename_component(baseNAME ${src} NAME_WE) + string(SUBSTRING ${baseNAME} 1 -1 baseNAME) + set(TEST_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/data/${baseNAME}.dat") + set(TEST_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${baseNAME}.exa") + + + # if(EXISTS "${TEST_INPUT}") + # MESSAGE(STATUS "Test Input ${TEST_INPUT} exists") + # else() + # MESSAGE(STATUS "Test Input ${TEST_INPUT} does not exist") + # endif() + add_executable(${name} ${src}) + target_link_libraries(${name} SLICOT::slicot) + if(EXISTS "${TEST_INPUT}") + add_test(NAME test-${baseNAME} COMMAND "${CMAKE_COMMAND}" + -DTEST=$ + -DINPUT=${TEST_INPUT} + -DOUTPUT=${TEST_OUTPUT} + -DINTDIR=${CMAKE_CFG_INTDIR} + -P "${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake") + else() + add_test(NAME test-${name} COMMAND "${CMAKE_COMMAND}" + -DTEST=$ + -DOUTPUT=${TEST_OUTPUT} + -DINTDIR=${CMAKE_CFG_INTDIR} + -P "${LAPACK_SOURCE_DIR}/TESTING/runtest.cmake") + endif() +endmacro() + + +add_slicot_test(ab01md TAB01MD.f) +add_slicot_test(ab01nd TAB01ND.f) +add_slicot_test(ab01od TAB01OD.f) +add_slicot_test(ab04md TAB04MD.f) +add_slicot_test(ab05md TAB05MD.f) +add_slicot_test(ab05nd TAB05ND.f) +add_slicot_test(ab05od TAB05OD.f) +add_slicot_test(ab05pd TAB05PD.f) +add_slicot_test(ab05qd TAB05QD.f) +add_slicot_test(ab05rd TAB05RD.f) +add_slicot_test(ab07md TAB07MD.f) +add_slicot_test(ab07nd TAB07ND.f) +add_slicot_test(ab08nd TAB08ND.f) +add_slicot_test(ab08nw TAB08NW.f) +add_slicot_test(ab08nz TAB08NZ.f) +add_slicot_test(ab09ad TAB09AD.f) +add_slicot_test(ab09bd TAB09BD.f) +add_slicot_test(ab09cd TAB09CD.f) +add_slicot_test(ab09dd TAB09DD.f) +add_slicot_test(ab09ed TAB09ED.f) +add_slicot_test(ab09fd TAB09FD.f) +add_slicot_test(ab09gd TAB09GD.f) +add_slicot_test(ab09hd TAB09HD.f) +add_slicot_test(ab09id TAB09ID.f) +add_slicot_test(ab09jd TAB09JD.f) +add_slicot_test(ab09kd TAB09KD.f) +add_slicot_test(ab09md TAB09MD.f) +add_slicot_test(ab09nd TAB09ND.f) +add_slicot_test(ab13ad TAB13AD.f) +add_slicot_test(ab13bd TAB13BD.f) +add_slicot_test(ab13cd TAB13CD.f) +add_slicot_test(ab13dd TAB13DD.f) +add_slicot_test(ab13ed TAB13ED.f) +add_slicot_test(ab13fd TAB13FD.f) +add_slicot_test(ab13id TAB13ID.f) +add_slicot_test(ab13md TAB13MD.f) +add_slicot_test(ag08bd TAG08BD.f) +add_slicot_test(ag08bz TAG08BZ.f) +add_slicot_test(bb01ad TBB01AD.f) +add_slicot_test(bb02ad TBB02AD.f) +add_slicot_test(bb03ad TBB03AD.f) +add_slicot_test(bb04ad TBB04AD.f) +add_slicot_test(bd01ad TBD01AD.f) +add_slicot_test(bd02ad TBD02AD.f) +add_slicot_test(de01od TDE01OD.f) +add_slicot_test(de01pd TDE01PD.f) +add_slicot_test(df01md TDF01MD.f) +add_slicot_test(dg01md TDG01MD.f) +add_slicot_test(dg01nd TDG01ND.f) +add_slicot_test(dg01od TDG01OD.f) +add_slicot_test(dk01md TDK01MD.f) +add_slicot_test(fb01qd TFB01QD.f) +add_slicot_test(fb01rd TFB01RD.f) +add_slicot_test(fb01sd TFB01SD.f) +add_slicot_test(fb01td TFB01TD.f) +add_slicot_test(fb01vd TFB01VD.f) +add_slicot_test(fd01ad TFD01AD.f) +add_slicot_test(ib01ad TIB01AD.f) +add_slicot_test(ib01bd TIB01BD.f) +add_slicot_test(ib01cd TIB01CD.f) +add_slicot_test(ib03ad TIB03AD.f) +add_slicot_test(ib03bd TIB03BD.f) +add_slicot_test(mb01td TMB01TD.f) +add_slicot_test(mb02cd TMB02CD.f) +add_slicot_test(mb02dd TMB02DD.f) +add_slicot_test(mb02ed TMB02ED.f) +add_slicot_test(mb02fd TMB02FD.f) +add_slicot_test(mb02gd TMB02GD.f) +add_slicot_test(mb02hd TMB02HD.f) +add_slicot_test(mb02id TMB02ID.f) +add_slicot_test(mb02jd TMB02JD.f) +add_slicot_test(mb02jx TMB02JX.f) +add_slicot_test(mb02kd TMB02KD.f) +add_slicot_test(mb02md TMB02MD.f) +add_slicot_test(mb02nd TMB02ND.f) +add_slicot_test(mb02qd TMB02QD.f) +add_slicot_test(mb02sd TMB02SD.f) +add_slicot_test(mb02vd TMB02VD.f) +add_slicot_test(mb03bd TMB03BD.f) +add_slicot_test(mb03bz TMB03BZ.f) +add_slicot_test(mb03fz TMB03FZ.f) +add_slicot_test(mb03kd TMB03KD.f) +add_slicot_test(mb03ld TMB03LD.f) +add_slicot_test(mb03lf TMB03LF.f) +add_slicot_test(mb03lz TMB03LZ.f) +add_slicot_test(mb03md TMB03MD.f) +add_slicot_test(mb03nd TMB03ND.f) +add_slicot_test(mb03od TMB03OD.f) +add_slicot_test(mb03pd TMB03PD.f) +add_slicot_test(mb03qd TMB03QD.f) +add_slicot_test(mb03qg TMB03QG.f) +add_slicot_test(mb03rd TMB03RD.f) +add_slicot_test(mb03sd TMB03SD.f) +add_slicot_test(mb03td TMB03TD.f) +add_slicot_test(mb03ud TMB03UD.f) +add_slicot_test(mb03vd TMB03VD.f) +add_slicot_test(mb03wd TMB03WD.f) +add_slicot_test(mb03xd TMB03XD.f) +add_slicot_test(mb03xp TMB03XP.f) +add_slicot_test(mb03xz TMB03XZ.f) +add_slicot_test(mb03zd TMB03ZD.f) +add_slicot_test(mb04ad TMB04AD.f) +add_slicot_test(mb04az TMB04AZ.f) +add_slicot_test(mb04bd TMB04BD.f) +add_slicot_test(mb04bz TMB04BZ.f) +add_slicot_test(mb04dd TMB04DD.f) +add_slicot_test(mb04dl TMB04DL.f) +add_slicot_test(mb04dp TMB04DP.f) +add_slicot_test(mb04ds TMB04DS.f) +add_slicot_test(mb04dy TMB04DY.f) +add_slicot_test(mb04dz TMB04DZ.f) +add_slicot_test(mb04ed TMB04ED.f) +add_slicot_test(mb04fd TMB04FD.f) +add_slicot_test(mb04gd TMB04GD.f) +add_slicot_test(mb04md TMB04MD.f) +add_slicot_test(mb04od TMB04OD.f) +add_slicot_test(mb04pb TMB04PB.f) +add_slicot_test(mb04pu TMB04PU.f) +add_slicot_test(mb04tb TMB04TB.f) +add_slicot_test(mb04ts TMB04TS.f) +add_slicot_test(mb04ud TMB04UD.f) +add_slicot_test(mb04vd TMB04VD.f) +add_slicot_test(mb04xd TMB04XD.f) +add_slicot_test(mb04yd TMB04YD.f) +add_slicot_test(mb04zd TMB04ZD.f) +add_slicot_test(mb05md TMB05MD.f) +add_slicot_test(mb05nd TMB05ND.f) +add_slicot_test(mb05od TMB05OD.f) +add_slicot_test(mb4dlz TMB4DLZ.f) +add_slicot_test(mb4dpz TMB4DPZ.f) +add_slicot_test(mc01md TMC01MD.f) +add_slicot_test(mc01nd TMC01ND.f) +add_slicot_test(mc01od TMC01OD.f) +add_slicot_test(mc01pd TMC01PD.f) +add_slicot_test(mc01qd TMC01QD.f) +add_slicot_test(mc01rd TMC01RD.f) +add_slicot_test(mc01sd TMC01SD.f) +add_slicot_test(mc01td TMC01TD.f) +add_slicot_test(mc01vd TMC01VD.f) +add_slicot_test(mc01wd TMC01WD.f) +add_slicot_test(mc01xd TMC01XD.f) +add_slicot_test(mc03md TMC03MD.f) +add_slicot_test(mc03nd TMC03ND.f) +add_slicot_test(md03ad TMD03AD.f) +add_slicot_test(md03bd TMD03BD.f) +add_slicot_test(sb01bd TSB01BD.f) +add_slicot_test(sb01dd TSB01DD.f) +add_slicot_test(sb01md TSB01MD.f) +add_slicot_test(sb02md TSB02MD.f) +add_slicot_test(sb02nd TSB02ND.f) +add_slicot_test(sb02od TSB02OD.f) +add_slicot_test(sb02pd TSB02PD.f) +add_slicot_test(sb02qd TSB02QD.f) +add_slicot_test(sb02rd TSB02RD.f) +add_slicot_test(sb02sd TSB02SD.f) +add_slicot_test(sb03md TSB03MD.f) +add_slicot_test(sb03od TSB03OD.f) +add_slicot_test(sb03qd TSB03QD.f) +add_slicot_test(sb03sd TSB03SD.f) +add_slicot_test(sb03td TSB03TD.f) +add_slicot_test(sb03ud TSB03UD.f) +add_slicot_test(sb04md TSB04MD.f) +add_slicot_test(sb04nd TSB04ND.f) +add_slicot_test(sb04od TSB04OD.f) +add_slicot_test(sb04pd TSB04PD.f) +add_slicot_test(sb04qd TSB04QD.f) +add_slicot_test(sb04rd TSB04RD.f) +add_slicot_test(sb06nd TSB06ND.f) +add_slicot_test(sb08cd TSB08CD.f) +add_slicot_test(sb08dd TSB08DD.f) +add_slicot_test(sb08ed TSB08ED.f) +add_slicot_test(sb08fd TSB08FD.f) +add_slicot_test(sb08md TSB08MD.f) +add_slicot_test(sb08nd TSB08ND.f) +add_slicot_test(sb09md TSB09MD.f) +add_slicot_test(sb10dd TSB10DD.f) +add_slicot_test(sb10ed TSB10ED.f) +add_slicot_test(sb10fd TSB10FD.f) +add_slicot_test(sb10hd TSB10HD.f) +add_slicot_test(sb10id TSB10ID.f) +add_slicot_test(sb10kd TSB10KD.f) +add_slicot_test(sb10zd TSB10ZD.f) +add_slicot_test(sb16ad TSB16AD.f) +add_slicot_test(sb16bd TSB16BD.f) +add_slicot_test(sb16cd TSB16CD.f) +add_slicot_test(sg02ad TSG02AD.f) +add_slicot_test(sg02nd TSG02ND.f) +add_slicot_test(sg03ad TSG03AD.f) +add_slicot_test(sg03bd TSG03BD.f) +add_slicot_test(tb01id TTB01ID.f) +add_slicot_test(tb01iz TTB01IZ.f) +add_slicot_test(tb01kd TTB01KD.f) +add_slicot_test(tb01ld TTB01LD.f) +add_slicot_test(tb01md TTB01MD.f) +add_slicot_test(tb01nd TTB01ND.f) +add_slicot_test(tb01pd TTB01PD.f) +add_slicot_test(tb01px TTB01PX.f) +add_slicot_test(tb01td TTB01TD.f) +add_slicot_test(tb01ud TTB01UD.f) +add_slicot_test(tb01uy TTB01UY.f) +add_slicot_test(tb01wd TTB01WD.f) +add_slicot_test(tb01wx TTB01WX.f) +add_slicot_test(tb01zd TTB01ZD.f) +add_slicot_test(tb03ad TTB03AD.f) +add_slicot_test(tb04ad TTB04AD.f) +add_slicot_test(tb04bd TTB04BD.f) +add_slicot_test(tb04cd TTB04CD.f) +add_slicot_test(tb05ad TTB05AD.f) +add_slicot_test(tc01od TTC01OD.f) +add_slicot_test(tc04ad TTC04AD.f) +add_slicot_test(tc05ad TTC05AD.f) +add_slicot_test(td03ad TTD03AD.f) +add_slicot_test(td04ad TTD04AD.f) +add_slicot_test(td05ad TTD05AD.f) +add_slicot_test(tf01md TTF01MD.f) +add_slicot_test(tf01nd TTF01ND.f) +add_slicot_test(tf01od TTF01OD.f) +add_slicot_test(tf01pd TTF01PD.f) +add_slicot_test(tf01qd TTF01QD.f) +add_slicot_test(tf01rd TTF01RD.f) +add_slicot_test(tg01ad TTG01AD.f) +add_slicot_test(tg01az TTG01AZ.f) +add_slicot_test(tg01cd TTG01CD.f) +add_slicot_test(tg01dd TTG01DD.f) +add_slicot_test(tg01ed TTG01ED.f) +add_slicot_test(tg01fd TTG01FD.f) +add_slicot_test(tg01fz TTG01FZ.f) +add_slicot_test(tg01gd TTG01GD.f) +add_slicot_test(tg01hd TTG01HD.f) +add_slicot_test(tg01id TTG01ID.f) +add_slicot_test(tg01jd TTG01JD.f) +add_slicot_test(tg01jy TTG01JY.f) +add_slicot_test(tg01ld TTG01LD.f) +add_slicot_test(tg01md TTG01MD.f) +add_slicot_test(tg01nd TTG01ND.f) +add_slicot_test(tg01pd TTG01PD.f) +add_slicot_test(tg01qd TTG01QD.f) +add_slicot_test(ud01bd TUD01BD.f) +add_slicot_test(ud01cd TUD01CD.f) +add_slicot_test(ud01dd TUD01DD.f) +add_slicot_test(ud01md TUD01MD.f) +add_slicot_test(ud01nd TUD01ND.f) diff --git a/examples/AB01MD.dat b/examples/data/AB01MD.dat similarity index 100% rename from examples/AB01MD.dat rename to examples/data/AB01MD.dat diff --git a/examples/AB01ND.dat b/examples/data/AB01ND.dat similarity index 100% rename from examples/AB01ND.dat rename to examples/data/AB01ND.dat diff --git a/examples/AB01OD.dat b/examples/data/AB01OD.dat similarity index 100% rename from examples/AB01OD.dat rename to examples/data/AB01OD.dat diff --git a/examples/AB04MD.dat b/examples/data/AB04MD.dat similarity index 100% rename from examples/AB04MD.dat rename to examples/data/AB04MD.dat diff --git a/examples/AB05MD.dat b/examples/data/AB05MD.dat similarity index 100% rename from examples/AB05MD.dat rename to examples/data/AB05MD.dat diff --git a/examples/AB05ND.dat b/examples/data/AB05ND.dat similarity index 100% rename from examples/AB05ND.dat rename to examples/data/AB05ND.dat diff --git a/examples/AB05OD.dat b/examples/data/AB05OD.dat similarity index 100% rename from examples/AB05OD.dat rename to examples/data/AB05OD.dat diff --git a/examples/AB05PD.dat b/examples/data/AB05PD.dat similarity index 100% rename from examples/AB05PD.dat rename to examples/data/AB05PD.dat diff --git a/examples/AB05QD.dat b/examples/data/AB05QD.dat similarity index 100% rename from examples/AB05QD.dat rename to examples/data/AB05QD.dat diff --git a/examples/AB05RD.dat b/examples/data/AB05RD.dat similarity index 100% rename from examples/AB05RD.dat rename to examples/data/AB05RD.dat diff --git a/examples/AB07MD.dat b/examples/data/AB07MD.dat similarity index 100% rename from examples/AB07MD.dat rename to examples/data/AB07MD.dat diff --git a/examples/AB07ND.dat b/examples/data/AB07ND.dat similarity index 100% rename from examples/AB07ND.dat rename to examples/data/AB07ND.dat diff --git a/examples/AB08ND.dat b/examples/data/AB08ND.dat similarity index 100% rename from examples/AB08ND.dat rename to examples/data/AB08ND.dat diff --git a/examples/AB08NW.dat b/examples/data/AB08NW.dat similarity index 100% rename from examples/AB08NW.dat rename to examples/data/AB08NW.dat diff --git a/examples/AB08NZ.dat b/examples/data/AB08NZ.dat similarity index 100% rename from examples/AB08NZ.dat rename to examples/data/AB08NZ.dat diff --git a/examples/AB09AD.dat b/examples/data/AB09AD.dat similarity index 100% rename from examples/AB09AD.dat rename to examples/data/AB09AD.dat diff --git a/examples/AB09BD.dat b/examples/data/AB09BD.dat similarity index 100% rename from examples/AB09BD.dat rename to examples/data/AB09BD.dat diff --git a/examples/AB09CD.dat b/examples/data/AB09CD.dat similarity index 100% rename from examples/AB09CD.dat rename to examples/data/AB09CD.dat diff --git a/examples/AB09DD.dat b/examples/data/AB09DD.dat similarity index 100% rename from examples/AB09DD.dat rename to examples/data/AB09DD.dat diff --git a/examples/AB09ED.dat b/examples/data/AB09ED.dat similarity index 100% rename from examples/AB09ED.dat rename to examples/data/AB09ED.dat diff --git a/examples/AB09FD.dat b/examples/data/AB09FD.dat similarity index 100% rename from examples/AB09FD.dat rename to examples/data/AB09FD.dat diff --git a/examples/AB09GD.dat b/examples/data/AB09GD.dat similarity index 100% rename from examples/AB09GD.dat rename to examples/data/AB09GD.dat diff --git a/examples/AB09HD.dat b/examples/data/AB09HD.dat similarity index 100% rename from examples/AB09HD.dat rename to examples/data/AB09HD.dat diff --git a/examples/AB09ID.dat b/examples/data/AB09ID.dat similarity index 100% rename from examples/AB09ID.dat rename to examples/data/AB09ID.dat diff --git a/examples/AB09JD.dat b/examples/data/AB09JD.dat similarity index 100% rename from examples/AB09JD.dat rename to examples/data/AB09JD.dat diff --git a/examples/AB09KD.dat b/examples/data/AB09KD.dat similarity index 100% rename from examples/AB09KD.dat rename to examples/data/AB09KD.dat diff --git a/examples/AB09MD.dat b/examples/data/AB09MD.dat similarity index 100% rename from examples/AB09MD.dat rename to examples/data/AB09MD.dat diff --git a/examples/AB09ND.dat b/examples/data/AB09ND.dat similarity index 100% rename from examples/AB09ND.dat rename to examples/data/AB09ND.dat diff --git a/examples/AB13AD.dat b/examples/data/AB13AD.dat similarity index 100% rename from examples/AB13AD.dat rename to examples/data/AB13AD.dat diff --git a/examples/AB13BD.dat b/examples/data/AB13BD.dat similarity index 100% rename from examples/AB13BD.dat rename to examples/data/AB13BD.dat diff --git a/examples/AB13CD.dat b/examples/data/AB13CD.dat similarity index 100% rename from examples/AB13CD.dat rename to examples/data/AB13CD.dat diff --git a/examples/AB13DD.dat b/examples/data/AB13DD.dat similarity index 100% rename from examples/AB13DD.dat rename to examples/data/AB13DD.dat diff --git a/examples/AB13ED.dat b/examples/data/AB13ED.dat similarity index 100% rename from examples/AB13ED.dat rename to examples/data/AB13ED.dat diff --git a/examples/AB13FD.dat b/examples/data/AB13FD.dat similarity index 100% rename from examples/AB13FD.dat rename to examples/data/AB13FD.dat diff --git a/examples/AB13ID.dat b/examples/data/AB13ID.dat similarity index 100% rename from examples/AB13ID.dat rename to examples/data/AB13ID.dat diff --git a/examples/AB13MD.dat b/examples/data/AB13MD.dat similarity index 100% rename from examples/AB13MD.dat rename to examples/data/AB13MD.dat diff --git a/examples/AG08BD.dat b/examples/data/AG08BD.dat similarity index 100% rename from examples/AG08BD.dat rename to examples/data/AG08BD.dat diff --git a/examples/AG08BZ.dat b/examples/data/AG08BZ.dat similarity index 100% rename from examples/AG08BZ.dat rename to examples/data/AG08BZ.dat diff --git a/examples/BB01AD.dat b/examples/data/BB01AD.dat similarity index 100% rename from examples/BB01AD.dat rename to examples/data/BB01AD.dat diff --git a/examples/BB02AD.dat b/examples/data/BB02AD.dat similarity index 100% rename from examples/BB02AD.dat rename to examples/data/BB02AD.dat diff --git a/examples/BB03AD.dat b/examples/data/BB03AD.dat similarity index 100% rename from examples/BB03AD.dat rename to examples/data/BB03AD.dat diff --git a/examples/BB04AD.dat b/examples/data/BB04AD.dat similarity index 100% rename from examples/BB04AD.dat rename to examples/data/BB04AD.dat diff --git a/examples/BD01AD.dat b/examples/data/BD01AD.dat similarity index 100% rename from examples/BD01AD.dat rename to examples/data/BD01AD.dat diff --git a/examples/BD02AD.dat b/examples/data/BD02AD.dat similarity index 100% rename from examples/BD02AD.dat rename to examples/data/BD02AD.dat diff --git a/examples/DE01OD.dat b/examples/data/DE01OD.dat similarity index 100% rename from examples/DE01OD.dat rename to examples/data/DE01OD.dat diff --git a/examples/DE01PD.dat b/examples/data/DE01PD.dat similarity index 100% rename from examples/DE01PD.dat rename to examples/data/DE01PD.dat diff --git a/examples/DF01MD.dat b/examples/data/DF01MD.dat similarity index 100% rename from examples/DF01MD.dat rename to examples/data/DF01MD.dat diff --git a/examples/DG01MD.dat b/examples/data/DG01MD.dat similarity index 100% rename from examples/DG01MD.dat rename to examples/data/DG01MD.dat diff --git a/examples/DG01ND.dat b/examples/data/DG01ND.dat similarity index 100% rename from examples/DG01ND.dat rename to examples/data/DG01ND.dat diff --git a/examples/DG01OD.dat b/examples/data/DG01OD.dat similarity index 100% rename from examples/DG01OD.dat rename to examples/data/DG01OD.dat diff --git a/examples/DK01MD.dat b/examples/data/DK01MD.dat similarity index 100% rename from examples/DK01MD.dat rename to examples/data/DK01MD.dat diff --git a/examples/FB01QD.dat b/examples/data/FB01QD.dat similarity index 100% rename from examples/FB01QD.dat rename to examples/data/FB01QD.dat diff --git a/examples/FB01RD.dat b/examples/data/FB01RD.dat similarity index 100% rename from examples/FB01RD.dat rename to examples/data/FB01RD.dat diff --git a/examples/FB01SD.dat b/examples/data/FB01SD.dat similarity index 100% rename from examples/FB01SD.dat rename to examples/data/FB01SD.dat diff --git a/examples/FB01TD.dat b/examples/data/FB01TD.dat similarity index 100% rename from examples/FB01TD.dat rename to examples/data/FB01TD.dat diff --git a/examples/FB01VD.dat b/examples/data/FB01VD.dat similarity index 100% rename from examples/FB01VD.dat rename to examples/data/FB01VD.dat diff --git a/examples/FD01AD.dat b/examples/data/FD01AD.dat similarity index 100% rename from examples/FD01AD.dat rename to examples/data/FD01AD.dat diff --git a/examples/IB01AD.dat b/examples/data/IB01AD.dat similarity index 100% rename from examples/IB01AD.dat rename to examples/data/IB01AD.dat diff --git a/examples/IB01BD.dat b/examples/data/IB01BD.dat similarity index 100% rename from examples/IB01BD.dat rename to examples/data/IB01BD.dat diff --git a/examples/IB01CD.dat b/examples/data/IB01CD.dat similarity index 100% rename from examples/IB01CD.dat rename to examples/data/IB01CD.dat diff --git a/examples/IB03AD.dat b/examples/data/IB03AD.dat similarity index 100% rename from examples/IB03AD.dat rename to examples/data/IB03AD.dat diff --git a/examples/IB03BD.dat b/examples/data/IB03BD.dat similarity index 100% rename from examples/IB03BD.dat rename to examples/data/IB03BD.dat diff --git a/examples/MB01TD.dat b/examples/data/MB01TD.dat similarity index 100% rename from examples/MB01TD.dat rename to examples/data/MB01TD.dat diff --git a/examples/MB02CD.dat b/examples/data/MB02CD.dat similarity index 100% rename from examples/MB02CD.dat rename to examples/data/MB02CD.dat diff --git a/examples/MB02DD.dat b/examples/data/MB02DD.dat similarity index 100% rename from examples/MB02DD.dat rename to examples/data/MB02DD.dat diff --git a/examples/MB02ED.dat b/examples/data/MB02ED.dat similarity index 100% rename from examples/MB02ED.dat rename to examples/data/MB02ED.dat diff --git a/examples/MB02FD.dat b/examples/data/MB02FD.dat similarity index 100% rename from examples/MB02FD.dat rename to examples/data/MB02FD.dat diff --git a/examples/MB02GD.dat b/examples/data/MB02GD.dat similarity index 100% rename from examples/MB02GD.dat rename to examples/data/MB02GD.dat diff --git a/examples/MB02HD.dat b/examples/data/MB02HD.dat similarity index 100% rename from examples/MB02HD.dat rename to examples/data/MB02HD.dat diff --git a/examples/MB02ID.dat b/examples/data/MB02ID.dat similarity index 100% rename from examples/MB02ID.dat rename to examples/data/MB02ID.dat diff --git a/examples/MB02JD.dat b/examples/data/MB02JD.dat similarity index 100% rename from examples/MB02JD.dat rename to examples/data/MB02JD.dat diff --git a/examples/MB02JX.dat b/examples/data/MB02JX.dat similarity index 100% rename from examples/MB02JX.dat rename to examples/data/MB02JX.dat diff --git a/examples/MB02KD.dat b/examples/data/MB02KD.dat similarity index 100% rename from examples/MB02KD.dat rename to examples/data/MB02KD.dat diff --git a/examples/MB02MD.dat b/examples/data/MB02MD.dat similarity index 100% rename from examples/MB02MD.dat rename to examples/data/MB02MD.dat diff --git a/examples/MB02ND.dat b/examples/data/MB02ND.dat similarity index 100% rename from examples/MB02ND.dat rename to examples/data/MB02ND.dat diff --git a/examples/MB02QD.dat b/examples/data/MB02QD.dat similarity index 100% rename from examples/MB02QD.dat rename to examples/data/MB02QD.dat diff --git a/examples/MB02SD.dat b/examples/data/MB02SD.dat similarity index 100% rename from examples/MB02SD.dat rename to examples/data/MB02SD.dat diff --git a/examples/MB02VD.dat b/examples/data/MB02VD.dat similarity index 100% rename from examples/MB02VD.dat rename to examples/data/MB02VD.dat diff --git a/examples/MB03BD.dat b/examples/data/MB03BD.dat similarity index 100% rename from examples/MB03BD.dat rename to examples/data/MB03BD.dat diff --git a/examples/MB03BZ.dat b/examples/data/MB03BZ.dat similarity index 100% rename from examples/MB03BZ.dat rename to examples/data/MB03BZ.dat diff --git a/examples/MB03FZ.dat b/examples/data/MB03FZ.dat similarity index 100% rename from examples/MB03FZ.dat rename to examples/data/MB03FZ.dat diff --git a/examples/MB03KD.dat b/examples/data/MB03KD.dat similarity index 100% rename from examples/MB03KD.dat rename to examples/data/MB03KD.dat diff --git a/examples/MB03LD.dat b/examples/data/MB03LD.dat similarity index 100% rename from examples/MB03LD.dat rename to examples/data/MB03LD.dat diff --git a/examples/MB03LF.dat b/examples/data/MB03LF.dat similarity index 100% rename from examples/MB03LF.dat rename to examples/data/MB03LF.dat diff --git a/examples/MB03LZ.dat b/examples/data/MB03LZ.dat similarity index 100% rename from examples/MB03LZ.dat rename to examples/data/MB03LZ.dat diff --git a/examples/MB03MD.dat b/examples/data/MB03MD.dat similarity index 100% rename from examples/MB03MD.dat rename to examples/data/MB03MD.dat diff --git a/examples/MB03ND.dat b/examples/data/MB03ND.dat similarity index 100% rename from examples/MB03ND.dat rename to examples/data/MB03ND.dat diff --git a/examples/MB03OD.dat b/examples/data/MB03OD.dat similarity index 100% rename from examples/MB03OD.dat rename to examples/data/MB03OD.dat diff --git a/examples/MB03PD.dat b/examples/data/MB03PD.dat similarity index 100% rename from examples/MB03PD.dat rename to examples/data/MB03PD.dat diff --git a/examples/MB03QD.dat b/examples/data/MB03QD.dat similarity index 100% rename from examples/MB03QD.dat rename to examples/data/MB03QD.dat diff --git a/examples/MB03QG.dat b/examples/data/MB03QG.dat similarity index 100% rename from examples/MB03QG.dat rename to examples/data/MB03QG.dat diff --git a/examples/MB03RD.dat b/examples/data/MB03RD.dat similarity index 100% rename from examples/MB03RD.dat rename to examples/data/MB03RD.dat diff --git a/examples/MB03SD.dat b/examples/data/MB03SD.dat similarity index 100% rename from examples/MB03SD.dat rename to examples/data/MB03SD.dat diff --git a/examples/MB03TD.dat b/examples/data/MB03TD.dat similarity index 100% rename from examples/MB03TD.dat rename to examples/data/MB03TD.dat diff --git a/examples/MB03UD.dat b/examples/data/MB03UD.dat similarity index 100% rename from examples/MB03UD.dat rename to examples/data/MB03UD.dat diff --git a/examples/MB03VD.dat b/examples/data/MB03VD.dat similarity index 100% rename from examples/MB03VD.dat rename to examples/data/MB03VD.dat diff --git a/examples/MB03WD.dat b/examples/data/MB03WD.dat similarity index 100% rename from examples/MB03WD.dat rename to examples/data/MB03WD.dat diff --git a/examples/MB03XD.dat b/examples/data/MB03XD.dat similarity index 100% rename from examples/MB03XD.dat rename to examples/data/MB03XD.dat diff --git a/examples/MB03XP.dat b/examples/data/MB03XP.dat similarity index 100% rename from examples/MB03XP.dat rename to examples/data/MB03XP.dat diff --git a/examples/MB03XZ.dat b/examples/data/MB03XZ.dat similarity index 100% rename from examples/MB03XZ.dat rename to examples/data/MB03XZ.dat diff --git a/examples/MB03ZD.dat b/examples/data/MB03ZD.dat similarity index 100% rename from examples/MB03ZD.dat rename to examples/data/MB03ZD.dat diff --git a/examples/MB04AD.dat b/examples/data/MB04AD.dat similarity index 100% rename from examples/MB04AD.dat rename to examples/data/MB04AD.dat diff --git a/examples/MB04AZ.dat b/examples/data/MB04AZ.dat similarity index 100% rename from examples/MB04AZ.dat rename to examples/data/MB04AZ.dat diff --git a/examples/MB04BD.dat b/examples/data/MB04BD.dat similarity index 100% rename from examples/MB04BD.dat rename to examples/data/MB04BD.dat diff --git a/examples/MB04BZ.dat b/examples/data/MB04BZ.dat similarity index 100% rename from examples/MB04BZ.dat rename to examples/data/MB04BZ.dat diff --git a/examples/MB04DD.dat b/examples/data/MB04DD.dat similarity index 100% rename from examples/MB04DD.dat rename to examples/data/MB04DD.dat diff --git a/examples/MB04DL.dat b/examples/data/MB04DL.dat similarity index 100% rename from examples/MB04DL.dat rename to examples/data/MB04DL.dat diff --git a/examples/MB04DP.dat b/examples/data/MB04DP.dat similarity index 100% rename from examples/MB04DP.dat rename to examples/data/MB04DP.dat diff --git a/examples/MB04DS.dat b/examples/data/MB04DS.dat similarity index 100% rename from examples/MB04DS.dat rename to examples/data/MB04DS.dat diff --git a/examples/MB04DY.dat b/examples/data/MB04DY.dat similarity index 100% rename from examples/MB04DY.dat rename to examples/data/MB04DY.dat diff --git a/examples/MB04DZ.dat b/examples/data/MB04DZ.dat similarity index 100% rename from examples/MB04DZ.dat rename to examples/data/MB04DZ.dat diff --git a/examples/MB04ED.dat b/examples/data/MB04ED.dat similarity index 100% rename from examples/MB04ED.dat rename to examples/data/MB04ED.dat diff --git a/examples/MB04FD.dat b/examples/data/MB04FD.dat similarity index 100% rename from examples/MB04FD.dat rename to examples/data/MB04FD.dat diff --git a/examples/MB04GD.dat b/examples/data/MB04GD.dat similarity index 100% rename from examples/MB04GD.dat rename to examples/data/MB04GD.dat diff --git a/examples/MB04MD.dat b/examples/data/MB04MD.dat similarity index 100% rename from examples/MB04MD.dat rename to examples/data/MB04MD.dat diff --git a/examples/MB04OD.dat b/examples/data/MB04OD.dat similarity index 100% rename from examples/MB04OD.dat rename to examples/data/MB04OD.dat diff --git a/examples/MB04PB.dat b/examples/data/MB04PB.dat similarity index 100% rename from examples/MB04PB.dat rename to examples/data/MB04PB.dat diff --git a/examples/MB04PU.dat b/examples/data/MB04PU.dat similarity index 100% rename from examples/MB04PU.dat rename to examples/data/MB04PU.dat diff --git a/examples/MB04TB.dat b/examples/data/MB04TB.dat similarity index 100% rename from examples/MB04TB.dat rename to examples/data/MB04TB.dat diff --git a/examples/MB04TS.dat b/examples/data/MB04TS.dat similarity index 100% rename from examples/MB04TS.dat rename to examples/data/MB04TS.dat diff --git a/examples/MB04UD.dat b/examples/data/MB04UD.dat similarity index 100% rename from examples/MB04UD.dat rename to examples/data/MB04UD.dat diff --git a/examples/MB04VD.dat b/examples/data/MB04VD.dat similarity index 100% rename from examples/MB04VD.dat rename to examples/data/MB04VD.dat diff --git a/examples/MB04XD.dat b/examples/data/MB04XD.dat similarity index 100% rename from examples/MB04XD.dat rename to examples/data/MB04XD.dat diff --git a/examples/MB04YD.dat b/examples/data/MB04YD.dat similarity index 100% rename from examples/MB04YD.dat rename to examples/data/MB04YD.dat diff --git a/examples/MB04ZD.dat b/examples/data/MB04ZD.dat similarity index 100% rename from examples/MB04ZD.dat rename to examples/data/MB04ZD.dat diff --git a/examples/MB05MD.dat b/examples/data/MB05MD.dat similarity index 100% rename from examples/MB05MD.dat rename to examples/data/MB05MD.dat diff --git a/examples/MB05ND.dat b/examples/data/MB05ND.dat similarity index 100% rename from examples/MB05ND.dat rename to examples/data/MB05ND.dat diff --git a/examples/MB05OD.dat b/examples/data/MB05OD.dat similarity index 100% rename from examples/MB05OD.dat rename to examples/data/MB05OD.dat diff --git a/examples/MB4DLZ.dat b/examples/data/MB4DLZ.dat similarity index 100% rename from examples/MB4DLZ.dat rename to examples/data/MB4DLZ.dat diff --git a/examples/MB4DPZ.dat b/examples/data/MB4DPZ.dat similarity index 100% rename from examples/MB4DPZ.dat rename to examples/data/MB4DPZ.dat diff --git a/examples/MC01MD.dat b/examples/data/MC01MD.dat similarity index 100% rename from examples/MC01MD.dat rename to examples/data/MC01MD.dat diff --git a/examples/MC01ND.dat b/examples/data/MC01ND.dat similarity index 100% rename from examples/MC01ND.dat rename to examples/data/MC01ND.dat diff --git a/examples/MC01OD.dat b/examples/data/MC01OD.dat similarity index 100% rename from examples/MC01OD.dat rename to examples/data/MC01OD.dat diff --git a/examples/MC01PD.dat b/examples/data/MC01PD.dat similarity index 100% rename from examples/MC01PD.dat rename to examples/data/MC01PD.dat diff --git a/examples/MC01QD.dat b/examples/data/MC01QD.dat similarity index 100% rename from examples/MC01QD.dat rename to examples/data/MC01QD.dat diff --git a/examples/MC01RD.dat b/examples/data/MC01RD.dat similarity index 100% rename from examples/MC01RD.dat rename to examples/data/MC01RD.dat diff --git a/examples/MC01SD.dat b/examples/data/MC01SD.dat similarity index 100% rename from examples/MC01SD.dat rename to examples/data/MC01SD.dat diff --git a/examples/MC01TD.dat b/examples/data/MC01TD.dat similarity index 100% rename from examples/MC01TD.dat rename to examples/data/MC01TD.dat diff --git a/examples/MC01VD.dat b/examples/data/MC01VD.dat similarity index 100% rename from examples/MC01VD.dat rename to examples/data/MC01VD.dat diff --git a/examples/MC01WD.dat b/examples/data/MC01WD.dat similarity index 100% rename from examples/MC01WD.dat rename to examples/data/MC01WD.dat diff --git a/examples/MC01XD.dat b/examples/data/MC01XD.dat similarity index 100% rename from examples/MC01XD.dat rename to examples/data/MC01XD.dat diff --git a/examples/MC03MD.dat b/examples/data/MC03MD.dat similarity index 100% rename from examples/MC03MD.dat rename to examples/data/MC03MD.dat diff --git a/examples/MC03ND.dat b/examples/data/MC03ND.dat similarity index 100% rename from examples/MC03ND.dat rename to examples/data/MC03ND.dat diff --git a/examples/MD03AD.dat b/examples/data/MD03AD.dat similarity index 100% rename from examples/MD03AD.dat rename to examples/data/MD03AD.dat diff --git a/examples/MD03BD.dat b/examples/data/MD03BD.dat similarity index 100% rename from examples/MD03BD.dat rename to examples/data/MD03BD.dat diff --git a/examples/SB01BD.dat b/examples/data/SB01BD.dat similarity index 100% rename from examples/SB01BD.dat rename to examples/data/SB01BD.dat diff --git a/examples/SB01DD.dat b/examples/data/SB01DD.dat similarity index 100% rename from examples/SB01DD.dat rename to examples/data/SB01DD.dat diff --git a/examples/SB01MD.dat b/examples/data/SB01MD.dat similarity index 100% rename from examples/SB01MD.dat rename to examples/data/SB01MD.dat diff --git a/examples/SB02MD.dat b/examples/data/SB02MD.dat similarity index 100% rename from examples/SB02MD.dat rename to examples/data/SB02MD.dat diff --git a/examples/SB02ND.dat b/examples/data/SB02ND.dat similarity index 100% rename from examples/SB02ND.dat rename to examples/data/SB02ND.dat diff --git a/examples/SB02OD.dat b/examples/data/SB02OD.dat similarity index 100% rename from examples/SB02OD.dat rename to examples/data/SB02OD.dat diff --git a/examples/SB02PD.dat b/examples/data/SB02PD.dat similarity index 100% rename from examples/SB02PD.dat rename to examples/data/SB02PD.dat diff --git a/examples/SB02QD.dat b/examples/data/SB02QD.dat similarity index 100% rename from examples/SB02QD.dat rename to examples/data/SB02QD.dat diff --git a/examples/SB02RD.dat b/examples/data/SB02RD.dat similarity index 100% rename from examples/SB02RD.dat rename to examples/data/SB02RD.dat diff --git a/examples/SB02SD.dat b/examples/data/SB02SD.dat similarity index 100% rename from examples/SB02SD.dat rename to examples/data/SB02SD.dat diff --git a/examples/SB03MD.dat b/examples/data/SB03MD.dat similarity index 100% rename from examples/SB03MD.dat rename to examples/data/SB03MD.dat diff --git a/examples/SB03OD.dat b/examples/data/SB03OD.dat similarity index 100% rename from examples/SB03OD.dat rename to examples/data/SB03OD.dat diff --git a/examples/SB03QD.dat b/examples/data/SB03QD.dat similarity index 100% rename from examples/SB03QD.dat rename to examples/data/SB03QD.dat diff --git a/examples/SB03SD.dat b/examples/data/SB03SD.dat similarity index 100% rename from examples/SB03SD.dat rename to examples/data/SB03SD.dat diff --git a/examples/SB03TD.dat b/examples/data/SB03TD.dat similarity index 100% rename from examples/SB03TD.dat rename to examples/data/SB03TD.dat diff --git a/examples/SB03UD.dat b/examples/data/SB03UD.dat similarity index 100% rename from examples/SB03UD.dat rename to examples/data/SB03UD.dat diff --git a/examples/SB04MD.dat b/examples/data/SB04MD.dat similarity index 100% rename from examples/SB04MD.dat rename to examples/data/SB04MD.dat diff --git a/examples/SB04ND.dat b/examples/data/SB04ND.dat similarity index 100% rename from examples/SB04ND.dat rename to examples/data/SB04ND.dat diff --git a/examples/SB04OD.dat b/examples/data/SB04OD.dat similarity index 100% rename from examples/SB04OD.dat rename to examples/data/SB04OD.dat diff --git a/examples/SB04PD.dat b/examples/data/SB04PD.dat similarity index 100% rename from examples/SB04PD.dat rename to examples/data/SB04PD.dat diff --git a/examples/SB04QD.dat b/examples/data/SB04QD.dat similarity index 100% rename from examples/SB04QD.dat rename to examples/data/SB04QD.dat diff --git a/examples/SB04RD.dat b/examples/data/SB04RD.dat similarity index 100% rename from examples/SB04RD.dat rename to examples/data/SB04RD.dat diff --git a/examples/SB06ND.dat b/examples/data/SB06ND.dat similarity index 100% rename from examples/SB06ND.dat rename to examples/data/SB06ND.dat diff --git a/examples/SB08CD.dat b/examples/data/SB08CD.dat similarity index 100% rename from examples/SB08CD.dat rename to examples/data/SB08CD.dat diff --git a/examples/SB08DD.dat b/examples/data/SB08DD.dat similarity index 100% rename from examples/SB08DD.dat rename to examples/data/SB08DD.dat diff --git a/examples/SB08ED.dat b/examples/data/SB08ED.dat similarity index 100% rename from examples/SB08ED.dat rename to examples/data/SB08ED.dat diff --git a/examples/SB08FD.dat b/examples/data/SB08FD.dat similarity index 100% rename from examples/SB08FD.dat rename to examples/data/SB08FD.dat diff --git a/examples/SB08MD.dat b/examples/data/SB08MD.dat similarity index 100% rename from examples/SB08MD.dat rename to examples/data/SB08MD.dat diff --git a/examples/SB08ND.dat b/examples/data/SB08ND.dat similarity index 100% rename from examples/SB08ND.dat rename to examples/data/SB08ND.dat diff --git a/examples/SB09MD.dat b/examples/data/SB09MD.dat similarity index 100% rename from examples/SB09MD.dat rename to examples/data/SB09MD.dat diff --git a/examples/SB10DD.dat b/examples/data/SB10DD.dat similarity index 100% rename from examples/SB10DD.dat rename to examples/data/SB10DD.dat diff --git a/examples/SB10ED.dat b/examples/data/SB10ED.dat similarity index 100% rename from examples/SB10ED.dat rename to examples/data/SB10ED.dat diff --git a/examples/SB10FD.dat b/examples/data/SB10FD.dat similarity index 100% rename from examples/SB10FD.dat rename to examples/data/SB10FD.dat diff --git a/examples/SB10HD.dat b/examples/data/SB10HD.dat similarity index 100% rename from examples/SB10HD.dat rename to examples/data/SB10HD.dat diff --git a/examples/SB10ID.dat b/examples/data/SB10ID.dat similarity index 100% rename from examples/SB10ID.dat rename to examples/data/SB10ID.dat diff --git a/examples/SB10KD.dat b/examples/data/SB10KD.dat similarity index 100% rename from examples/SB10KD.dat rename to examples/data/SB10KD.dat diff --git a/examples/SB10ZD.dat b/examples/data/SB10ZD.dat similarity index 100% rename from examples/SB10ZD.dat rename to examples/data/SB10ZD.dat diff --git a/examples/SB16AD.dat b/examples/data/SB16AD.dat similarity index 100% rename from examples/SB16AD.dat rename to examples/data/SB16AD.dat diff --git a/examples/SB16BD.dat b/examples/data/SB16BD.dat similarity index 100% rename from examples/SB16BD.dat rename to examples/data/SB16BD.dat diff --git a/examples/SB16CD.dat b/examples/data/SB16CD.dat similarity index 100% rename from examples/SB16CD.dat rename to examples/data/SB16CD.dat diff --git a/examples/SG02AD.dat b/examples/data/SG02AD.dat similarity index 100% rename from examples/SG02AD.dat rename to examples/data/SG02AD.dat diff --git a/examples/SG02ND.dat b/examples/data/SG02ND.dat similarity index 100% rename from examples/SG02ND.dat rename to examples/data/SG02ND.dat diff --git a/examples/SG03AD.dat b/examples/data/SG03AD.dat similarity index 100% rename from examples/SG03AD.dat rename to examples/data/SG03AD.dat diff --git a/examples/SG03BD.dat b/examples/data/SG03BD.dat similarity index 100% rename from examples/SG03BD.dat rename to examples/data/SG03BD.dat diff --git a/examples/TB01ID.dat b/examples/data/TB01ID.dat similarity index 100% rename from examples/TB01ID.dat rename to examples/data/TB01ID.dat diff --git a/examples/TB01IZ.dat b/examples/data/TB01IZ.dat similarity index 100% rename from examples/TB01IZ.dat rename to examples/data/TB01IZ.dat diff --git a/examples/TB01KD.dat b/examples/data/TB01KD.dat similarity index 100% rename from examples/TB01KD.dat rename to examples/data/TB01KD.dat diff --git a/examples/TB01LD.dat b/examples/data/TB01LD.dat similarity index 100% rename from examples/TB01LD.dat rename to examples/data/TB01LD.dat diff --git a/examples/TB01MD.dat b/examples/data/TB01MD.dat similarity index 100% rename from examples/TB01MD.dat rename to examples/data/TB01MD.dat diff --git a/examples/TB01ND.dat b/examples/data/TB01ND.dat similarity index 100% rename from examples/TB01ND.dat rename to examples/data/TB01ND.dat diff --git a/examples/TB01PD.dat b/examples/data/TB01PD.dat similarity index 100% rename from examples/TB01PD.dat rename to examples/data/TB01PD.dat diff --git a/examples/TB01PX.dat b/examples/data/TB01PX.dat similarity index 100% rename from examples/TB01PX.dat rename to examples/data/TB01PX.dat diff --git a/examples/TB01TD.dat b/examples/data/TB01TD.dat similarity index 100% rename from examples/TB01TD.dat rename to examples/data/TB01TD.dat diff --git a/examples/TB01UD.dat b/examples/data/TB01UD.dat similarity index 100% rename from examples/TB01UD.dat rename to examples/data/TB01UD.dat diff --git a/examples/TB01UY.dat b/examples/data/TB01UY.dat similarity index 100% rename from examples/TB01UY.dat rename to examples/data/TB01UY.dat diff --git a/examples/TB01WD.dat b/examples/data/TB01WD.dat similarity index 100% rename from examples/TB01WD.dat rename to examples/data/TB01WD.dat diff --git a/examples/TB01WX.dat b/examples/data/TB01WX.dat similarity index 100% rename from examples/TB01WX.dat rename to examples/data/TB01WX.dat diff --git a/examples/TB01ZD.dat b/examples/data/TB01ZD.dat similarity index 100% rename from examples/TB01ZD.dat rename to examples/data/TB01ZD.dat diff --git a/examples/TB03AD.dat b/examples/data/TB03AD.dat similarity index 100% rename from examples/TB03AD.dat rename to examples/data/TB03AD.dat diff --git a/examples/TB04AD.dat b/examples/data/TB04AD.dat similarity index 100% rename from examples/TB04AD.dat rename to examples/data/TB04AD.dat diff --git a/examples/TB04BD.dat b/examples/data/TB04BD.dat similarity index 100% rename from examples/TB04BD.dat rename to examples/data/TB04BD.dat diff --git a/examples/TB04CD.dat b/examples/data/TB04CD.dat similarity index 100% rename from examples/TB04CD.dat rename to examples/data/TB04CD.dat diff --git a/examples/TB05AD.dat b/examples/data/TB05AD.dat similarity index 100% rename from examples/TB05AD.dat rename to examples/data/TB05AD.dat diff --git a/examples/TC01OD.dat b/examples/data/TC01OD.dat similarity index 100% rename from examples/TC01OD.dat rename to examples/data/TC01OD.dat diff --git a/examples/TC04AD.dat b/examples/data/TC04AD.dat similarity index 100% rename from examples/TC04AD.dat rename to examples/data/TC04AD.dat diff --git a/examples/TC05AD.dat b/examples/data/TC05AD.dat similarity index 100% rename from examples/TC05AD.dat rename to examples/data/TC05AD.dat diff --git a/examples/TD03AD.dat b/examples/data/TD03AD.dat similarity index 100% rename from examples/TD03AD.dat rename to examples/data/TD03AD.dat diff --git a/examples/TD04AD.dat b/examples/data/TD04AD.dat similarity index 100% rename from examples/TD04AD.dat rename to examples/data/TD04AD.dat diff --git a/examples/TD05AD.dat b/examples/data/TD05AD.dat similarity index 100% rename from examples/TD05AD.dat rename to examples/data/TD05AD.dat diff --git a/examples/TF01MD.dat b/examples/data/TF01MD.dat similarity index 100% rename from examples/TF01MD.dat rename to examples/data/TF01MD.dat diff --git a/examples/TF01ND.dat b/examples/data/TF01ND.dat similarity index 100% rename from examples/TF01ND.dat rename to examples/data/TF01ND.dat diff --git a/examples/TF01OD.dat b/examples/data/TF01OD.dat similarity index 100% rename from examples/TF01OD.dat rename to examples/data/TF01OD.dat diff --git a/examples/TF01PD.dat b/examples/data/TF01PD.dat similarity index 100% rename from examples/TF01PD.dat rename to examples/data/TF01PD.dat diff --git a/examples/TF01QD.dat b/examples/data/TF01QD.dat similarity index 100% rename from examples/TF01QD.dat rename to examples/data/TF01QD.dat diff --git a/examples/TF01RD.dat b/examples/data/TF01RD.dat similarity index 100% rename from examples/TF01RD.dat rename to examples/data/TF01RD.dat diff --git a/examples/TG01AD.dat b/examples/data/TG01AD.dat similarity index 100% rename from examples/TG01AD.dat rename to examples/data/TG01AD.dat diff --git a/examples/TG01AZ.dat b/examples/data/TG01AZ.dat similarity index 100% rename from examples/TG01AZ.dat rename to examples/data/TG01AZ.dat diff --git a/examples/TG01CD.dat b/examples/data/TG01CD.dat similarity index 100% rename from examples/TG01CD.dat rename to examples/data/TG01CD.dat diff --git a/examples/TG01DD.dat b/examples/data/TG01DD.dat similarity index 100% rename from examples/TG01DD.dat rename to examples/data/TG01DD.dat diff --git a/examples/TG01ED.dat b/examples/data/TG01ED.dat similarity index 100% rename from examples/TG01ED.dat rename to examples/data/TG01ED.dat diff --git a/examples/TG01FD.dat b/examples/data/TG01FD.dat similarity index 100% rename from examples/TG01FD.dat rename to examples/data/TG01FD.dat diff --git a/examples/TG01FZ.dat b/examples/data/TG01FZ.dat similarity index 100% rename from examples/TG01FZ.dat rename to examples/data/TG01FZ.dat diff --git a/examples/TG01GD.dat b/examples/data/TG01GD.dat similarity index 100% rename from examples/TG01GD.dat rename to examples/data/TG01GD.dat diff --git a/examples/TG01HD.dat b/examples/data/TG01HD.dat similarity index 100% rename from examples/TG01HD.dat rename to examples/data/TG01HD.dat diff --git a/examples/TG01ID.dat b/examples/data/TG01ID.dat similarity index 100% rename from examples/TG01ID.dat rename to examples/data/TG01ID.dat diff --git a/examples/TG01JD.dat b/examples/data/TG01JD.dat similarity index 100% rename from examples/TG01JD.dat rename to examples/data/TG01JD.dat diff --git a/examples/TG01JY.dat b/examples/data/TG01JY.dat similarity index 100% rename from examples/TG01JY.dat rename to examples/data/TG01JY.dat diff --git a/examples/TG01LD.dat b/examples/data/TG01LD.dat similarity index 100% rename from examples/TG01LD.dat rename to examples/data/TG01LD.dat diff --git a/examples/TG01MD.dat b/examples/data/TG01MD.dat similarity index 100% rename from examples/TG01MD.dat rename to examples/data/TG01MD.dat diff --git a/examples/TG01ND.dat b/examples/data/TG01ND.dat similarity index 100% rename from examples/TG01ND.dat rename to examples/data/TG01ND.dat diff --git a/examples/TG01PD.dat b/examples/data/TG01PD.dat similarity index 100% rename from examples/TG01PD.dat rename to examples/data/TG01PD.dat diff --git a/examples/TG01QD.dat b/examples/data/TG01QD.dat similarity index 100% rename from examples/TG01QD.dat rename to examples/data/TG01QD.dat diff --git a/examples/UD01BD.dat b/examples/data/UD01BD.dat similarity index 100% rename from examples/UD01BD.dat rename to examples/data/UD01BD.dat diff --git a/examples/UD01CD.dat b/examples/data/UD01CD.dat similarity index 100% rename from examples/UD01CD.dat rename to examples/data/UD01CD.dat diff --git a/examples/UD01DD.dat b/examples/data/UD01DD.dat similarity index 100% rename from examples/UD01DD.dat rename to examples/data/UD01DD.dat diff --git a/examples/UD01MD.dat b/examples/data/UD01MD.dat similarity index 100% rename from examples/UD01MD.dat rename to examples/data/UD01MD.dat diff --git a/examples/UD01ND.dat b/examples/data/UD01ND.dat similarity index 100% rename from examples/UD01ND.dat rename to examples/data/UD01ND.dat diff --git a/examples/AB01MD.res b/examples/results/AB01MD.res similarity index 100% rename from examples/AB01MD.res rename to examples/results/AB01MD.res diff --git a/examples/AB01ND.res b/examples/results/AB01ND.res similarity index 100% rename from examples/AB01ND.res rename to examples/results/AB01ND.res diff --git a/examples/AB01OD.res b/examples/results/AB01OD.res similarity index 100% rename from examples/AB01OD.res rename to examples/results/AB01OD.res diff --git a/examples/AB04MD.res b/examples/results/AB04MD.res similarity index 100% rename from examples/AB04MD.res rename to examples/results/AB04MD.res diff --git a/examples/AB05MD.res b/examples/results/AB05MD.res similarity index 100% rename from examples/AB05MD.res rename to examples/results/AB05MD.res diff --git a/examples/AB05ND.res b/examples/results/AB05ND.res similarity index 100% rename from examples/AB05ND.res rename to examples/results/AB05ND.res diff --git a/examples/AB05OD.res b/examples/results/AB05OD.res similarity index 100% rename from examples/AB05OD.res rename to examples/results/AB05OD.res diff --git a/examples/AB05PD.res b/examples/results/AB05PD.res similarity index 100% rename from examples/AB05PD.res rename to examples/results/AB05PD.res diff --git a/examples/AB05QD.res b/examples/results/AB05QD.res similarity index 100% rename from examples/AB05QD.res rename to examples/results/AB05QD.res diff --git a/examples/AB05RD.res b/examples/results/AB05RD.res similarity index 100% rename from examples/AB05RD.res rename to examples/results/AB05RD.res diff --git a/examples/AB07MD.res b/examples/results/AB07MD.res similarity index 100% rename from examples/AB07MD.res rename to examples/results/AB07MD.res diff --git a/examples/AB07ND.res b/examples/results/AB07ND.res similarity index 100% rename from examples/AB07ND.res rename to examples/results/AB07ND.res diff --git a/examples/AB08ND.res b/examples/results/AB08ND.res similarity index 100% rename from examples/AB08ND.res rename to examples/results/AB08ND.res diff --git a/examples/AB08NW.res b/examples/results/AB08NW.res similarity index 100% rename from examples/AB08NW.res rename to examples/results/AB08NW.res diff --git a/examples/AB08NZ.res b/examples/results/AB08NZ.res similarity index 100% rename from examples/AB08NZ.res rename to examples/results/AB08NZ.res diff --git a/examples/AB09AD.res b/examples/results/AB09AD.res similarity index 100% rename from examples/AB09AD.res rename to examples/results/AB09AD.res diff --git a/examples/AB09BD.res b/examples/results/AB09BD.res similarity index 100% rename from examples/AB09BD.res rename to examples/results/AB09BD.res diff --git a/examples/AB09CD.res b/examples/results/AB09CD.res similarity index 100% rename from examples/AB09CD.res rename to examples/results/AB09CD.res diff --git a/examples/AB09DD.res b/examples/results/AB09DD.res similarity index 100% rename from examples/AB09DD.res rename to examples/results/AB09DD.res diff --git a/examples/AB09ED.res b/examples/results/AB09ED.res similarity index 100% rename from examples/AB09ED.res rename to examples/results/AB09ED.res diff --git a/examples/AB09FD.res b/examples/results/AB09FD.res similarity index 100% rename from examples/AB09FD.res rename to examples/results/AB09FD.res diff --git a/examples/AB09GD.res b/examples/results/AB09GD.res similarity index 100% rename from examples/AB09GD.res rename to examples/results/AB09GD.res diff --git a/examples/AB09HD.res b/examples/results/AB09HD.res similarity index 100% rename from examples/AB09HD.res rename to examples/results/AB09HD.res diff --git a/examples/AB09ID.res b/examples/results/AB09ID.res similarity index 100% rename from examples/AB09ID.res rename to examples/results/AB09ID.res diff --git a/examples/AB09JD.res b/examples/results/AB09JD.res similarity index 100% rename from examples/AB09JD.res rename to examples/results/AB09JD.res diff --git a/examples/AB09KD.res b/examples/results/AB09KD.res similarity index 100% rename from examples/AB09KD.res rename to examples/results/AB09KD.res diff --git a/examples/AB09MD.res b/examples/results/AB09MD.res similarity index 100% rename from examples/AB09MD.res rename to examples/results/AB09MD.res diff --git a/examples/AB09ND.res b/examples/results/AB09ND.res similarity index 100% rename from examples/AB09ND.res rename to examples/results/AB09ND.res diff --git a/examples/AB13AD.res b/examples/results/AB13AD.res similarity index 100% rename from examples/AB13AD.res rename to examples/results/AB13AD.res diff --git a/examples/AB13BD.res b/examples/results/AB13BD.res similarity index 100% rename from examples/AB13BD.res rename to examples/results/AB13BD.res diff --git a/examples/AB13CD.res b/examples/results/AB13CD.res similarity index 100% rename from examples/AB13CD.res rename to examples/results/AB13CD.res diff --git a/examples/AB13DD.res b/examples/results/AB13DD.res similarity index 100% rename from examples/AB13DD.res rename to examples/results/AB13DD.res diff --git a/examples/AB13ED.res b/examples/results/AB13ED.res similarity index 100% rename from examples/AB13ED.res rename to examples/results/AB13ED.res diff --git a/examples/AB13FD.res b/examples/results/AB13FD.res similarity index 100% rename from examples/AB13FD.res rename to examples/results/AB13FD.res diff --git a/examples/AB13ID.res b/examples/results/AB13ID.res similarity index 100% rename from examples/AB13ID.res rename to examples/results/AB13ID.res diff --git a/examples/AB13MD.res b/examples/results/AB13MD.res similarity index 100% rename from examples/AB13MD.res rename to examples/results/AB13MD.res diff --git a/examples/AG08BD.res b/examples/results/AG08BD.res similarity index 100% rename from examples/AG08BD.res rename to examples/results/AG08BD.res diff --git a/examples/AG08BZ.res b/examples/results/AG08BZ.res similarity index 100% rename from examples/AG08BZ.res rename to examples/results/AG08BZ.res diff --git a/examples/BB01AD.res b/examples/results/BB01AD.res similarity index 100% rename from examples/BB01AD.res rename to examples/results/BB01AD.res diff --git a/examples/BB02AD.res b/examples/results/BB02AD.res similarity index 100% rename from examples/BB02AD.res rename to examples/results/BB02AD.res diff --git a/examples/BB03AD.res b/examples/results/BB03AD.res similarity index 100% rename from examples/BB03AD.res rename to examples/results/BB03AD.res diff --git a/examples/BB04AD.res b/examples/results/BB04AD.res similarity index 100% rename from examples/BB04AD.res rename to examples/results/BB04AD.res diff --git a/examples/BD01AD.res b/examples/results/BD01AD.res similarity index 100% rename from examples/BD01AD.res rename to examples/results/BD01AD.res diff --git a/examples/BD02AD.res b/examples/results/BD02AD.res similarity index 100% rename from examples/BD02AD.res rename to examples/results/BD02AD.res diff --git a/examples/DE01OD.res b/examples/results/DE01OD.res similarity index 100% rename from examples/DE01OD.res rename to examples/results/DE01OD.res diff --git a/examples/DE01PD.res b/examples/results/DE01PD.res similarity index 100% rename from examples/DE01PD.res rename to examples/results/DE01PD.res diff --git a/examples/DF01MD.res b/examples/results/DF01MD.res similarity index 100% rename from examples/DF01MD.res rename to examples/results/DF01MD.res diff --git a/examples/DG01MD.res b/examples/results/DG01MD.res similarity index 100% rename from examples/DG01MD.res rename to examples/results/DG01MD.res diff --git a/examples/DG01ND.res b/examples/results/DG01ND.res similarity index 100% rename from examples/DG01ND.res rename to examples/results/DG01ND.res diff --git a/examples/DG01OD.res b/examples/results/DG01OD.res similarity index 100% rename from examples/DG01OD.res rename to examples/results/DG01OD.res diff --git a/examples/DK01MD.res b/examples/results/DK01MD.res similarity index 100% rename from examples/DK01MD.res rename to examples/results/DK01MD.res diff --git a/examples/FB01QD.res b/examples/results/FB01QD.res similarity index 100% rename from examples/FB01QD.res rename to examples/results/FB01QD.res diff --git a/examples/FB01RD.res b/examples/results/FB01RD.res similarity index 100% rename from examples/FB01RD.res rename to examples/results/FB01RD.res diff --git a/examples/FB01SD.res b/examples/results/FB01SD.res similarity index 100% rename from examples/FB01SD.res rename to examples/results/FB01SD.res diff --git a/examples/FB01TD.res b/examples/results/FB01TD.res similarity index 100% rename from examples/FB01TD.res rename to examples/results/FB01TD.res diff --git a/examples/FB01VD.res b/examples/results/FB01VD.res similarity index 100% rename from examples/FB01VD.res rename to examples/results/FB01VD.res diff --git a/examples/FD01AD.res b/examples/results/FD01AD.res similarity index 100% rename from examples/FD01AD.res rename to examples/results/FD01AD.res diff --git a/examples/IB01AD.res b/examples/results/IB01AD.res similarity index 100% rename from examples/IB01AD.res rename to examples/results/IB01AD.res diff --git a/examples/IB01BD.res b/examples/results/IB01BD.res similarity index 100% rename from examples/IB01BD.res rename to examples/results/IB01BD.res diff --git a/examples/IB01CD.res b/examples/results/IB01CD.res similarity index 100% rename from examples/IB01CD.res rename to examples/results/IB01CD.res diff --git a/examples/IB03AD.res b/examples/results/IB03AD.res similarity index 100% rename from examples/IB03AD.res rename to examples/results/IB03AD.res diff --git a/examples/IB03BD.res b/examples/results/IB03BD.res similarity index 100% rename from examples/IB03BD.res rename to examples/results/IB03BD.res diff --git a/examples/MB01TD.res b/examples/results/MB01TD.res similarity index 100% rename from examples/MB01TD.res rename to examples/results/MB01TD.res diff --git a/examples/MB02CD.res b/examples/results/MB02CD.res similarity index 100% rename from examples/MB02CD.res rename to examples/results/MB02CD.res diff --git a/examples/MB02DD.res b/examples/results/MB02DD.res similarity index 100% rename from examples/MB02DD.res rename to examples/results/MB02DD.res diff --git a/examples/MB02ED.res b/examples/results/MB02ED.res similarity index 100% rename from examples/MB02ED.res rename to examples/results/MB02ED.res diff --git a/examples/MB02FD.res b/examples/results/MB02FD.res similarity index 100% rename from examples/MB02FD.res rename to examples/results/MB02FD.res diff --git a/examples/MB02GD.res b/examples/results/MB02GD.res similarity index 100% rename from examples/MB02GD.res rename to examples/results/MB02GD.res diff --git a/examples/MB02HD.res b/examples/results/MB02HD.res similarity index 100% rename from examples/MB02HD.res rename to examples/results/MB02HD.res diff --git a/examples/MB02ID.res b/examples/results/MB02ID.res similarity index 100% rename from examples/MB02ID.res rename to examples/results/MB02ID.res diff --git a/examples/MB02JD.res b/examples/results/MB02JD.res similarity index 100% rename from examples/MB02JD.res rename to examples/results/MB02JD.res diff --git a/examples/MB02JX.res b/examples/results/MB02JX.res similarity index 100% rename from examples/MB02JX.res rename to examples/results/MB02JX.res diff --git a/examples/MB02KD.res b/examples/results/MB02KD.res similarity index 100% rename from examples/MB02KD.res rename to examples/results/MB02KD.res diff --git a/examples/MB02MD.res b/examples/results/MB02MD.res similarity index 100% rename from examples/MB02MD.res rename to examples/results/MB02MD.res diff --git a/examples/MB02ND.res b/examples/results/MB02ND.res similarity index 100% rename from examples/MB02ND.res rename to examples/results/MB02ND.res diff --git a/examples/MB02QD.res b/examples/results/MB02QD.res similarity index 100% rename from examples/MB02QD.res rename to examples/results/MB02QD.res diff --git a/examples/MB02SD.res b/examples/results/MB02SD.res similarity index 100% rename from examples/MB02SD.res rename to examples/results/MB02SD.res diff --git a/examples/MB02VD.res b/examples/results/MB02VD.res similarity index 100% rename from examples/MB02VD.res rename to examples/results/MB02VD.res diff --git a/examples/MB03BD.res b/examples/results/MB03BD.res similarity index 100% rename from examples/MB03BD.res rename to examples/results/MB03BD.res diff --git a/examples/MB03BZ.res b/examples/results/MB03BZ.res similarity index 100% rename from examples/MB03BZ.res rename to examples/results/MB03BZ.res diff --git a/examples/MB03FZ.res b/examples/results/MB03FZ.res similarity index 100% rename from examples/MB03FZ.res rename to examples/results/MB03FZ.res diff --git a/examples/MB03KD.res b/examples/results/MB03KD.res similarity index 100% rename from examples/MB03KD.res rename to examples/results/MB03KD.res diff --git a/examples/MB03LD.res b/examples/results/MB03LD.res similarity index 100% rename from examples/MB03LD.res rename to examples/results/MB03LD.res diff --git a/examples/MB03LF.res b/examples/results/MB03LF.res similarity index 100% rename from examples/MB03LF.res rename to examples/results/MB03LF.res diff --git a/examples/MB03LZ.res b/examples/results/MB03LZ.res similarity index 100% rename from examples/MB03LZ.res rename to examples/results/MB03LZ.res diff --git a/examples/MB03MD.res b/examples/results/MB03MD.res similarity index 100% rename from examples/MB03MD.res rename to examples/results/MB03MD.res diff --git a/examples/MB03ND.res b/examples/results/MB03ND.res similarity index 100% rename from examples/MB03ND.res rename to examples/results/MB03ND.res diff --git a/examples/MB03OD.res b/examples/results/MB03OD.res similarity index 100% rename from examples/MB03OD.res rename to examples/results/MB03OD.res diff --git a/examples/MB03PD.res b/examples/results/MB03PD.res similarity index 100% rename from examples/MB03PD.res rename to examples/results/MB03PD.res diff --git a/examples/MB03QD.res b/examples/results/MB03QD.res similarity index 100% rename from examples/MB03QD.res rename to examples/results/MB03QD.res diff --git a/examples/MB03QG.res b/examples/results/MB03QG.res similarity index 100% rename from examples/MB03QG.res rename to examples/results/MB03QG.res diff --git a/examples/MB03RD.res b/examples/results/MB03RD.res similarity index 100% rename from examples/MB03RD.res rename to examples/results/MB03RD.res diff --git a/examples/MB03SD.res b/examples/results/MB03SD.res similarity index 100% rename from examples/MB03SD.res rename to examples/results/MB03SD.res diff --git a/examples/MB03TD.res b/examples/results/MB03TD.res similarity index 100% rename from examples/MB03TD.res rename to examples/results/MB03TD.res diff --git a/examples/MB03UD.res b/examples/results/MB03UD.res similarity index 100% rename from examples/MB03UD.res rename to examples/results/MB03UD.res diff --git a/examples/MB03VD.res b/examples/results/MB03VD.res similarity index 100% rename from examples/MB03VD.res rename to examples/results/MB03VD.res diff --git a/examples/MB03WD.res b/examples/results/MB03WD.res similarity index 100% rename from examples/MB03WD.res rename to examples/results/MB03WD.res diff --git a/examples/MB03XD.res b/examples/results/MB03XD.res similarity index 100% rename from examples/MB03XD.res rename to examples/results/MB03XD.res diff --git a/examples/MB03XP.res b/examples/results/MB03XP.res similarity index 100% rename from examples/MB03XP.res rename to examples/results/MB03XP.res diff --git a/examples/MB03XZ.res b/examples/results/MB03XZ.res similarity index 100% rename from examples/MB03XZ.res rename to examples/results/MB03XZ.res diff --git a/examples/MB03ZD.res b/examples/results/MB03ZD.res similarity index 100% rename from examples/MB03ZD.res rename to examples/results/MB03ZD.res diff --git a/examples/MB04AD.res b/examples/results/MB04AD.res similarity index 100% rename from examples/MB04AD.res rename to examples/results/MB04AD.res diff --git a/examples/MB04AZ.res b/examples/results/MB04AZ.res similarity index 100% rename from examples/MB04AZ.res rename to examples/results/MB04AZ.res diff --git a/examples/MB04BD.res b/examples/results/MB04BD.res similarity index 100% rename from examples/MB04BD.res rename to examples/results/MB04BD.res diff --git a/examples/MB04BZ.res b/examples/results/MB04BZ.res similarity index 100% rename from examples/MB04BZ.res rename to examples/results/MB04BZ.res diff --git a/examples/MB04DD.res b/examples/results/MB04DD.res similarity index 100% rename from examples/MB04DD.res rename to examples/results/MB04DD.res diff --git a/examples/MB04DL.res b/examples/results/MB04DL.res similarity index 100% rename from examples/MB04DL.res rename to examples/results/MB04DL.res diff --git a/examples/MB04DP.res b/examples/results/MB04DP.res similarity index 100% rename from examples/MB04DP.res rename to examples/results/MB04DP.res diff --git a/examples/MB04DS.res b/examples/results/MB04DS.res similarity index 100% rename from examples/MB04DS.res rename to examples/results/MB04DS.res diff --git a/examples/MB04DY.res b/examples/results/MB04DY.res similarity index 100% rename from examples/MB04DY.res rename to examples/results/MB04DY.res diff --git a/examples/MB04DZ.res b/examples/results/MB04DZ.res similarity index 100% rename from examples/MB04DZ.res rename to examples/results/MB04DZ.res diff --git a/examples/MB04ED.res b/examples/results/MB04ED.res similarity index 100% rename from examples/MB04ED.res rename to examples/results/MB04ED.res diff --git a/examples/MB04FD.res b/examples/results/MB04FD.res similarity index 100% rename from examples/MB04FD.res rename to examples/results/MB04FD.res diff --git a/examples/MB04GD.res b/examples/results/MB04GD.res similarity index 100% rename from examples/MB04GD.res rename to examples/results/MB04GD.res diff --git a/examples/MB04MD.res b/examples/results/MB04MD.res similarity index 100% rename from examples/MB04MD.res rename to examples/results/MB04MD.res diff --git a/examples/MB04OD.res b/examples/results/MB04OD.res similarity index 100% rename from examples/MB04OD.res rename to examples/results/MB04OD.res diff --git a/examples/MB04PB.res b/examples/results/MB04PB.res similarity index 100% rename from examples/MB04PB.res rename to examples/results/MB04PB.res diff --git a/examples/MB04PU.res b/examples/results/MB04PU.res similarity index 100% rename from examples/MB04PU.res rename to examples/results/MB04PU.res diff --git a/examples/MB04TB.res b/examples/results/MB04TB.res similarity index 100% rename from examples/MB04TB.res rename to examples/results/MB04TB.res diff --git a/examples/MB04TS.res b/examples/results/MB04TS.res similarity index 100% rename from examples/MB04TS.res rename to examples/results/MB04TS.res diff --git a/examples/MB04UD.res b/examples/results/MB04UD.res similarity index 100% rename from examples/MB04UD.res rename to examples/results/MB04UD.res diff --git a/examples/MB04VD.res b/examples/results/MB04VD.res similarity index 100% rename from examples/MB04VD.res rename to examples/results/MB04VD.res diff --git a/examples/MB04XD.res b/examples/results/MB04XD.res similarity index 100% rename from examples/MB04XD.res rename to examples/results/MB04XD.res diff --git a/examples/MB04YD.res b/examples/results/MB04YD.res similarity index 100% rename from examples/MB04YD.res rename to examples/results/MB04YD.res diff --git a/examples/MB04ZD.res b/examples/results/MB04ZD.res similarity index 100% rename from examples/MB04ZD.res rename to examples/results/MB04ZD.res diff --git a/examples/MB05MD.res b/examples/results/MB05MD.res similarity index 100% rename from examples/MB05MD.res rename to examples/results/MB05MD.res diff --git a/examples/MB05ND.res b/examples/results/MB05ND.res similarity index 100% rename from examples/MB05ND.res rename to examples/results/MB05ND.res diff --git a/examples/MB05OD.res b/examples/results/MB05OD.res similarity index 100% rename from examples/MB05OD.res rename to examples/results/MB05OD.res diff --git a/examples/MB4DLZ.res b/examples/results/MB4DLZ.res similarity index 100% rename from examples/MB4DLZ.res rename to examples/results/MB4DLZ.res diff --git a/examples/MB4DPZ.res b/examples/results/MB4DPZ.res similarity index 100% rename from examples/MB4DPZ.res rename to examples/results/MB4DPZ.res diff --git a/examples/MC01MD.res b/examples/results/MC01MD.res similarity index 100% rename from examples/MC01MD.res rename to examples/results/MC01MD.res diff --git a/examples/MC01ND.res b/examples/results/MC01ND.res similarity index 100% rename from examples/MC01ND.res rename to examples/results/MC01ND.res diff --git a/examples/MC01OD.res b/examples/results/MC01OD.res similarity index 100% rename from examples/MC01OD.res rename to examples/results/MC01OD.res diff --git a/examples/MC01PD.res b/examples/results/MC01PD.res similarity index 100% rename from examples/MC01PD.res rename to examples/results/MC01PD.res diff --git a/examples/MC01QD.res b/examples/results/MC01QD.res similarity index 100% rename from examples/MC01QD.res rename to examples/results/MC01QD.res diff --git a/examples/MC01RD.res b/examples/results/MC01RD.res similarity index 100% rename from examples/MC01RD.res rename to examples/results/MC01RD.res diff --git a/examples/MC01SD.res b/examples/results/MC01SD.res similarity index 100% rename from examples/MC01SD.res rename to examples/results/MC01SD.res diff --git a/examples/MC01TD.res b/examples/results/MC01TD.res similarity index 100% rename from examples/MC01TD.res rename to examples/results/MC01TD.res diff --git a/examples/MC01VD.res b/examples/results/MC01VD.res similarity index 100% rename from examples/MC01VD.res rename to examples/results/MC01VD.res diff --git a/examples/MC01WD.res b/examples/results/MC01WD.res similarity index 100% rename from examples/MC01WD.res rename to examples/results/MC01WD.res diff --git a/examples/MC01XD.res b/examples/results/MC01XD.res similarity index 100% rename from examples/MC01XD.res rename to examples/results/MC01XD.res diff --git a/examples/MC03MD.res b/examples/results/MC03MD.res similarity index 100% rename from examples/MC03MD.res rename to examples/results/MC03MD.res diff --git a/examples/MC03ND.res b/examples/results/MC03ND.res similarity index 100% rename from examples/MC03ND.res rename to examples/results/MC03ND.res diff --git a/examples/MD03AD.res b/examples/results/MD03AD.res similarity index 100% rename from examples/MD03AD.res rename to examples/results/MD03AD.res diff --git a/examples/MD03BD.res b/examples/results/MD03BD.res similarity index 100% rename from examples/MD03BD.res rename to examples/results/MD03BD.res diff --git a/examples/SB01BD.res b/examples/results/SB01BD.res similarity index 100% rename from examples/SB01BD.res rename to examples/results/SB01BD.res diff --git a/examples/SB01DD.res b/examples/results/SB01DD.res similarity index 100% rename from examples/SB01DD.res rename to examples/results/SB01DD.res diff --git a/examples/SB01MD.res b/examples/results/SB01MD.res similarity index 100% rename from examples/SB01MD.res rename to examples/results/SB01MD.res diff --git a/examples/SB02MD.res b/examples/results/SB02MD.res similarity index 100% rename from examples/SB02MD.res rename to examples/results/SB02MD.res diff --git a/examples/SB02ND.res b/examples/results/SB02ND.res similarity index 100% rename from examples/SB02ND.res rename to examples/results/SB02ND.res diff --git a/examples/SB02OD.res b/examples/results/SB02OD.res similarity index 100% rename from examples/SB02OD.res rename to examples/results/SB02OD.res diff --git a/examples/SB02PD.res b/examples/results/SB02PD.res similarity index 100% rename from examples/SB02PD.res rename to examples/results/SB02PD.res diff --git a/examples/SB02QD.res b/examples/results/SB02QD.res similarity index 100% rename from examples/SB02QD.res rename to examples/results/SB02QD.res diff --git a/examples/SB02RD.res b/examples/results/SB02RD.res similarity index 100% rename from examples/SB02RD.res rename to examples/results/SB02RD.res diff --git a/examples/SB02SD.res b/examples/results/SB02SD.res similarity index 100% rename from examples/SB02SD.res rename to examples/results/SB02SD.res diff --git a/examples/SB03MD.res b/examples/results/SB03MD.res similarity index 100% rename from examples/SB03MD.res rename to examples/results/SB03MD.res diff --git a/examples/SB03OD.res b/examples/results/SB03OD.res similarity index 100% rename from examples/SB03OD.res rename to examples/results/SB03OD.res diff --git a/examples/SB03QD.res b/examples/results/SB03QD.res similarity index 100% rename from examples/SB03QD.res rename to examples/results/SB03QD.res diff --git a/examples/SB03SD.res b/examples/results/SB03SD.res similarity index 100% rename from examples/SB03SD.res rename to examples/results/SB03SD.res diff --git a/examples/SB03TD.res b/examples/results/SB03TD.res similarity index 100% rename from examples/SB03TD.res rename to examples/results/SB03TD.res diff --git a/examples/SB03UD.res b/examples/results/SB03UD.res similarity index 100% rename from examples/SB03UD.res rename to examples/results/SB03UD.res diff --git a/examples/SB04MD.res b/examples/results/SB04MD.res similarity index 100% rename from examples/SB04MD.res rename to examples/results/SB04MD.res diff --git a/examples/SB04ND.res b/examples/results/SB04ND.res similarity index 100% rename from examples/SB04ND.res rename to examples/results/SB04ND.res diff --git a/examples/SB04OD.res b/examples/results/SB04OD.res similarity index 100% rename from examples/SB04OD.res rename to examples/results/SB04OD.res diff --git a/examples/SB04PD.res b/examples/results/SB04PD.res similarity index 100% rename from examples/SB04PD.res rename to examples/results/SB04PD.res diff --git a/examples/SB04QD.res b/examples/results/SB04QD.res similarity index 100% rename from examples/SB04QD.res rename to examples/results/SB04QD.res diff --git a/examples/SB04RD.res b/examples/results/SB04RD.res similarity index 100% rename from examples/SB04RD.res rename to examples/results/SB04RD.res diff --git a/examples/SB06ND.res b/examples/results/SB06ND.res similarity index 100% rename from examples/SB06ND.res rename to examples/results/SB06ND.res diff --git a/examples/SB08CD.res b/examples/results/SB08CD.res similarity index 100% rename from examples/SB08CD.res rename to examples/results/SB08CD.res diff --git a/examples/SB08DD.res b/examples/results/SB08DD.res similarity index 100% rename from examples/SB08DD.res rename to examples/results/SB08DD.res diff --git a/examples/SB08ED.res b/examples/results/SB08ED.res similarity index 100% rename from examples/SB08ED.res rename to examples/results/SB08ED.res diff --git a/examples/SB08FD.res b/examples/results/SB08FD.res similarity index 100% rename from examples/SB08FD.res rename to examples/results/SB08FD.res diff --git a/examples/SB08MD.res b/examples/results/SB08MD.res similarity index 100% rename from examples/SB08MD.res rename to examples/results/SB08MD.res diff --git a/examples/SB08ND.res b/examples/results/SB08ND.res similarity index 100% rename from examples/SB08ND.res rename to examples/results/SB08ND.res diff --git a/examples/SB09MD.res b/examples/results/SB09MD.res similarity index 100% rename from examples/SB09MD.res rename to examples/results/SB09MD.res diff --git a/examples/SB10DD.res b/examples/results/SB10DD.res similarity index 100% rename from examples/SB10DD.res rename to examples/results/SB10DD.res diff --git a/examples/SB10ED.res b/examples/results/SB10ED.res similarity index 100% rename from examples/SB10ED.res rename to examples/results/SB10ED.res diff --git a/examples/SB10FD.res b/examples/results/SB10FD.res similarity index 100% rename from examples/SB10FD.res rename to examples/results/SB10FD.res diff --git a/examples/SB10HD.res b/examples/results/SB10HD.res similarity index 100% rename from examples/SB10HD.res rename to examples/results/SB10HD.res diff --git a/examples/SB10ID.res b/examples/results/SB10ID.res similarity index 100% rename from examples/SB10ID.res rename to examples/results/SB10ID.res diff --git a/examples/SB10KD.res b/examples/results/SB10KD.res similarity index 100% rename from examples/SB10KD.res rename to examples/results/SB10KD.res diff --git a/examples/SB10ZD.res b/examples/results/SB10ZD.res similarity index 100% rename from examples/SB10ZD.res rename to examples/results/SB10ZD.res diff --git a/examples/SB16AD.res b/examples/results/SB16AD.res similarity index 100% rename from examples/SB16AD.res rename to examples/results/SB16AD.res diff --git a/examples/SB16BD.res b/examples/results/SB16BD.res similarity index 100% rename from examples/SB16BD.res rename to examples/results/SB16BD.res diff --git a/examples/SB16CD.res b/examples/results/SB16CD.res similarity index 100% rename from examples/SB16CD.res rename to examples/results/SB16CD.res diff --git a/examples/SG02AD.res b/examples/results/SG02AD.res similarity index 100% rename from examples/SG02AD.res rename to examples/results/SG02AD.res diff --git a/examples/SG02ND.res b/examples/results/SG02ND.res similarity index 100% rename from examples/SG02ND.res rename to examples/results/SG02ND.res diff --git a/examples/SG03AD.res b/examples/results/SG03AD.res similarity index 100% rename from examples/SG03AD.res rename to examples/results/SG03AD.res diff --git a/examples/SG03BD.res b/examples/results/SG03BD.res similarity index 100% rename from examples/SG03BD.res rename to examples/results/SG03BD.res diff --git a/examples/TB01ID.res b/examples/results/TB01ID.res similarity index 100% rename from examples/TB01ID.res rename to examples/results/TB01ID.res diff --git a/examples/TB01IZ.res b/examples/results/TB01IZ.res similarity index 100% rename from examples/TB01IZ.res rename to examples/results/TB01IZ.res diff --git a/examples/TB01KD.res b/examples/results/TB01KD.res similarity index 100% rename from examples/TB01KD.res rename to examples/results/TB01KD.res diff --git a/examples/TB01LD.res b/examples/results/TB01LD.res similarity index 100% rename from examples/TB01LD.res rename to examples/results/TB01LD.res diff --git a/examples/TB01MD.res b/examples/results/TB01MD.res similarity index 100% rename from examples/TB01MD.res rename to examples/results/TB01MD.res diff --git a/examples/TB01ND.res b/examples/results/TB01ND.res similarity index 100% rename from examples/TB01ND.res rename to examples/results/TB01ND.res diff --git a/examples/TB01PD.res b/examples/results/TB01PD.res similarity index 100% rename from examples/TB01PD.res rename to examples/results/TB01PD.res diff --git a/examples/TB01PX.res b/examples/results/TB01PX.res similarity index 100% rename from examples/TB01PX.res rename to examples/results/TB01PX.res diff --git a/examples/TB01TD.res b/examples/results/TB01TD.res similarity index 100% rename from examples/TB01TD.res rename to examples/results/TB01TD.res diff --git a/examples/TB01UD.res b/examples/results/TB01UD.res similarity index 100% rename from examples/TB01UD.res rename to examples/results/TB01UD.res diff --git a/examples/TB01UY.res b/examples/results/TB01UY.res similarity index 100% rename from examples/TB01UY.res rename to examples/results/TB01UY.res diff --git a/examples/TB01WD.res b/examples/results/TB01WD.res similarity index 100% rename from examples/TB01WD.res rename to examples/results/TB01WD.res diff --git a/examples/TB01WX.res b/examples/results/TB01WX.res similarity index 100% rename from examples/TB01WX.res rename to examples/results/TB01WX.res diff --git a/examples/TB01ZD.res b/examples/results/TB01ZD.res similarity index 100% rename from examples/TB01ZD.res rename to examples/results/TB01ZD.res diff --git a/examples/TB03AD.res b/examples/results/TB03AD.res similarity index 100% rename from examples/TB03AD.res rename to examples/results/TB03AD.res diff --git a/examples/TB04AD.res b/examples/results/TB04AD.res similarity index 100% rename from examples/TB04AD.res rename to examples/results/TB04AD.res diff --git a/examples/TB04BD.res b/examples/results/TB04BD.res similarity index 100% rename from examples/TB04BD.res rename to examples/results/TB04BD.res diff --git a/examples/TB04CD.res b/examples/results/TB04CD.res similarity index 100% rename from examples/TB04CD.res rename to examples/results/TB04CD.res diff --git a/examples/TB05AD.res b/examples/results/TB05AD.res similarity index 100% rename from examples/TB05AD.res rename to examples/results/TB05AD.res diff --git a/examples/TC01OD.res b/examples/results/TC01OD.res similarity index 100% rename from examples/TC01OD.res rename to examples/results/TC01OD.res diff --git a/examples/TC04AD.res b/examples/results/TC04AD.res similarity index 100% rename from examples/TC04AD.res rename to examples/results/TC04AD.res diff --git a/examples/TC05AD.res b/examples/results/TC05AD.res similarity index 100% rename from examples/TC05AD.res rename to examples/results/TC05AD.res diff --git a/examples/TD03AD.res b/examples/results/TD03AD.res similarity index 100% rename from examples/TD03AD.res rename to examples/results/TD03AD.res diff --git a/examples/TD04AD.res b/examples/results/TD04AD.res similarity index 100% rename from examples/TD04AD.res rename to examples/results/TD04AD.res diff --git a/examples/TD05AD.res b/examples/results/TD05AD.res similarity index 100% rename from examples/TD05AD.res rename to examples/results/TD05AD.res diff --git a/examples/TF01MD.res b/examples/results/TF01MD.res similarity index 100% rename from examples/TF01MD.res rename to examples/results/TF01MD.res diff --git a/examples/TF01ND.res b/examples/results/TF01ND.res similarity index 100% rename from examples/TF01ND.res rename to examples/results/TF01ND.res diff --git a/examples/TF01OD.res b/examples/results/TF01OD.res similarity index 100% rename from examples/TF01OD.res rename to examples/results/TF01OD.res diff --git a/examples/TF01PD.res b/examples/results/TF01PD.res similarity index 100% rename from examples/TF01PD.res rename to examples/results/TF01PD.res diff --git a/examples/TF01QD.res b/examples/results/TF01QD.res similarity index 100% rename from examples/TF01QD.res rename to examples/results/TF01QD.res diff --git a/examples/TF01RD.res b/examples/results/TF01RD.res similarity index 100% rename from examples/TF01RD.res rename to examples/results/TF01RD.res diff --git a/examples/TG01AD.res b/examples/results/TG01AD.res similarity index 100% rename from examples/TG01AD.res rename to examples/results/TG01AD.res diff --git a/examples/TG01AZ.res b/examples/results/TG01AZ.res similarity index 100% rename from examples/TG01AZ.res rename to examples/results/TG01AZ.res diff --git a/examples/TG01CD.res b/examples/results/TG01CD.res similarity index 100% rename from examples/TG01CD.res rename to examples/results/TG01CD.res diff --git a/examples/TG01DD.res b/examples/results/TG01DD.res similarity index 100% rename from examples/TG01DD.res rename to examples/results/TG01DD.res diff --git a/examples/TG01ED.res b/examples/results/TG01ED.res similarity index 100% rename from examples/TG01ED.res rename to examples/results/TG01ED.res diff --git a/examples/TG01FD.res b/examples/results/TG01FD.res similarity index 100% rename from examples/TG01FD.res rename to examples/results/TG01FD.res diff --git a/examples/TG01FZ.res b/examples/results/TG01FZ.res similarity index 100% rename from examples/TG01FZ.res rename to examples/results/TG01FZ.res diff --git a/examples/TG01GD.res b/examples/results/TG01GD.res similarity index 100% rename from examples/TG01GD.res rename to examples/results/TG01GD.res diff --git a/examples/TG01HD.res b/examples/results/TG01HD.res similarity index 100% rename from examples/TG01HD.res rename to examples/results/TG01HD.res diff --git a/examples/TG01ID.res b/examples/results/TG01ID.res similarity index 100% rename from examples/TG01ID.res rename to examples/results/TG01ID.res diff --git a/examples/TG01JD.res b/examples/results/TG01JD.res similarity index 100% rename from examples/TG01JD.res rename to examples/results/TG01JD.res diff --git a/examples/TG01JY.res b/examples/results/TG01JY.res similarity index 100% rename from examples/TG01JY.res rename to examples/results/TG01JY.res diff --git a/examples/TG01LD.res b/examples/results/TG01LD.res similarity index 100% rename from examples/TG01LD.res rename to examples/results/TG01LD.res diff --git a/examples/TG01MD.res b/examples/results/TG01MD.res similarity index 100% rename from examples/TG01MD.res rename to examples/results/TG01MD.res diff --git a/examples/TG01ND.res b/examples/results/TG01ND.res similarity index 100% rename from examples/TG01ND.res rename to examples/results/TG01ND.res diff --git a/examples/TG01PD.res b/examples/results/TG01PD.res similarity index 100% rename from examples/TG01PD.res rename to examples/results/TG01PD.res diff --git a/examples/TG01QD.res b/examples/results/TG01QD.res similarity index 100% rename from examples/TG01QD.res rename to examples/results/TG01QD.res diff --git a/examples/UD01BD.res b/examples/results/UD01BD.res similarity index 100% rename from examples/UD01BD.res rename to examples/results/UD01BD.res diff --git a/examples/UD01CD.res b/examples/results/UD01CD.res similarity index 100% rename from examples/UD01CD.res rename to examples/results/UD01CD.res diff --git a/examples/UD01DD.res b/examples/results/UD01DD.res similarity index 100% rename from examples/UD01DD.res rename to examples/results/UD01DD.res diff --git a/examples/UD01MD.res b/examples/results/UD01MD.res similarity index 100% rename from examples/UD01MD.res rename to examples/results/UD01MD.res diff --git a/examples/UD01ND.res b/examples/results/UD01ND.res similarity index 100% rename from examples/UD01ND.res rename to examples/results/UD01ND.res diff --git a/examples/runtest.cmake b/examples/runtest.cmake new file mode 100644 index 0000000..b0bdb61 --- /dev/null +++ b/examples/runtest.cmake @@ -0,0 +1,40 @@ +# Helper Script of input/output redirection. + +# Replace INTDIR with the value of $ENV{CMAKE_CONFIG_TYPE} that is set +# by ctest when -C Debug|Releaes|etc is given, and INDIR is passed +# in from the main cmake run and is the variable that is used +# by the build system to specify the build directory +if(NOT "${INTDIR}" STREQUAL ".") + set(TEST_ORIG "${TEST}") + string(REPLACE "${INTDIR}" "$ENV{CMAKE_CONFIG_TYPE}" TEST "${TEST}") + if("$ENV{CMAKE_CONFIG_TYPE}" STREQUAL "") + if(NOT EXISTS "${TEST}") + message("Warning: CMAKE_CONFIG_TYPE not defined did you forget the -C option for ctest?") + message(FATAL_ERROR "Could not find test executable: ${TEST_ORIG}") + endif() + endif() +endif() +set(ARGS ) +if(DEFINED OUTPUT) + set(ARGS OUTPUT_FILE "${OUTPUT}" ERROR_FILE "${OUTPUT}.err") +endif() +if(DEFINED INPUT) + list(APPEND ARGS INPUT_FILE "${INPUT}") +endif() +message("Running: ${TEST}") +message("ARGS= ${ARGS}") +execute_process(COMMAND "${TEST}" + ${ARGS} + RESULT_VARIABLE RET) +if(DEFINED OUTPUT) + file(READ "${OUTPUT}" TEST_OUTPUT) + file(READ "${OUTPUT}.err" TEST_ERROR) + message("Test OUTPUT:\n${TEST_OUTPUT}") + message("Test ERROR:\n${TEST_ERROR}") +endif() + +# if the test does not return 0, then fail it +if(NOT ${RET} EQUAL 0) + message(FATAL_ERROR "Test ${TEST} returned ${RET}") +endif() +message( "Test ${TEST} returned ${RET}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..63e16f5 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,111 @@ +SET(SOURCES + AB01MD.f AB01ND.f AB01OD.f AB04MD.f AB05MD.f AB05ND.f AB05OD.f + AB05PD.f AB05QD.f AB05RD.f AB05SD.f AB07MD.f AB07ND.f AB08MD.f + AB08MZ.f AB08ND.f AB08NW.f AB08NX.f AB08NY.f AB08NZ.f AB09AD.f + AB09AX.f AB09BD.f AB09BX.f AB09CD.f AB09CX.f AB09DD.f AB09ED.f + AB09FD.f AB09GD.f AB09HD.f AB09HX.f AB09HY.f AB09ID.f AB09IX.f + AB09IY.f AB09JD.f AB09JV.f AB09JW.f AB09JX.f AB09KD.f AB09KX.f + AB09MD.f AB09ND.f AB13AD.f AB13AX.f AB13BD.f AB13CD.f AB13DD.f + AB13DX.f AB13ED.f AB13FD.f AB13HD.f AB13ID.f AB13MD.f AB8NXZ.f + AG07BD.f AG08BD.f AG08BY.f AG08BZ.f AG8BYZ.f + + BB01AD.f BB02AD.f BB03AD.f BB04AD.f BD01AD.f BD02AD.f + + DE01OD.f DE01PD.f DF01MD.f DG01MD.f DG01ND.f DG01NY.f DG01OD.f + DK01MD.f + + FB01QD.f FB01RD.f FB01SD.f FB01TD.f FB01VD.f FD01AD.f + + IB01AD.f IB01BD.f IB01CD.f IB01MD.f IB01MY.f IB01ND.f IB01OD.f + IB01OY.f IB01PD.f IB01PX.f IB01PY.f IB01QD.f IB01RD.f IB03AD.f + IB03BD.f + + MA01AD.f MA01BD.f MA01BZ.f MA01CD.f MA01DD.f MA01DZ.f MA02AD.f MA02AZ.f + MA02BD.f MA02BZ.f MA02CD.f MA02CZ.f MA02DD.f MA02ED.f MA02ES.f MA02EZ.f + MA02FD.f MA02GD.f MA02GZ.f MA02HD.f MA02HZ.f MA02ID.f MA02IZ.f MA02JD.f + MA02JZ.f MA02MD.f MA02MZ.f MA02NZ.f MA02OD.f MA02OZ.f MA02PD.f MA02PZ.f + MA02RD.f MA02SD.f MB01KD.f MB01LD.f MB01MD.f MB01ND.f MB01OC.f MB01OD.f + MB01OE.f MB01OH.f MB01OO.f MB01OS.f MB01OT.f MB01PD.f MB01QD.f MB01RB.f + MB01RD.f MB01RH.f MB01RT.f MB01RU.f MB01RW.f MB01RX.f MB01RY.f MB01SD.f + MB01SS.f MB01TD.f MB01UD.f MB01UW.f MB01UX.f MB01UY.f MB01UZ.f MB01VD.f + MB01WD.f MB01XD.f MB01XY.f MB01YD.f MB01ZD.f MB02CD.f MB02CU.f MB02CV.f + MB02CX.f MB02CY.f MB02DD.f MB02ED.f MB02FD.f MB02GD.f MB02HD.f MB02ID.f + MB02JD.f MB02JX.f MB02KD.f MB02MD.f MB02ND.f MB02NY.f MB02OD.f MB02PD.f + MB02QD.f MB02QY.f MB02RD.f MB02RZ.f MB02SD.f MB02SZ.f MB02TD.f MB02TZ.f + MB02UD.f MB02UU.f MB02UV.f MB02UW.f MB02VD.f MB02WD.f MB02XD.f MB02YD.f + MB03AB.f MB03AD.f MB03AE.f MB03AF.f MB03AG.f MB03AH.f MB03AI.f MB03BA.f + MB03BB.f MB03BC.f MB03BD.f MB03BE.f MB03BF.f MB03BG.f MB03BZ.f MB03CD.f + MB03CZ.f MB03DD.f MB03DZ.f MB03ED.f MB03FD.f MB03FZ.f MB03GD.f MB03GZ.f + MB03HD.f MB03HZ.f MB03ID.f MB03IZ.f MB03JD.f MB03JP.f MB03JZ.f MB03KA.f + MB03KB.f MB03KC.f MB03KD.f MB03KE.f MB03LD.f MB03LF.f MB03LP.f MB03LZ.f + MB03MD.f MB03MY.f MB03ND.f MB03NY.f MB03OD.f MB03OY.f MB03PD.f MB03PY.f + MB03QD.f MB03QG.f MB03QV.f MB03QW.f MB03QX.f MB03QY.f MB03RD.f MB03RW.f + MB03RX.f MB03RY.f MB03RZ.f MB03SD.f MB03TD.f MB03TS.f MB03UD.f MB03VD.f + MB03VW.f MB03VY.f MB03WA.f MB03WD.f MB03WX.f MB03XD.f MB03XP.f MB03XS.f + MB03XU.f MB03XZ.f MB03YA.f MB03YD.f MB03YT.f MB03ZA.f MB03ZD.f MB04AD.f + MB04AZ.f MB04BD.f MB04BP.f MB04BZ.f MB04CD.f MB04DB.f MB04DD.f MB04DI.f + MB04DL.f MB04DP.f MB04DS.f MB04DY.f MB04DZ.f MB04ED.f MB04FD.f MB04FP.f + MB04GD.f MB04HD.f MB04ID.f MB04IY.f MB04IZ.f MB04JD.f MB04KD.f MB04LD.f + MB04MD.f MB04ND.f MB04NY.f MB04OD.f MB04OW.f MB04OX.f MB04OY.f MB04PA.f + MB04PB.f MB04PU.f MB04PY.f MB04QB.f MB04QC.f MB04QF.f MB04QS.f MB04QU.f + MB04RB.f MB04RD.f MB04RS.f MB04RT.f MB04RU.f MB04RV.f MB04RW.f MB04RZ.f + MB04SU.f MB04TB.f MB04TS.f MB04TT.f MB04TU.f MB04TV.f MB04TW.f MB04TX.f + MB04TY.f MB04UD.f MB04VD.f MB04VX.f MB04WD.f MB04WP.f MB04WR.f MB04WU.f + MB04XD.f MB04XY.f MB04YD.f MB04YW.f MB04ZD.f MB05MD.f MB05MY.f MB05ND.f + MB05OD.f MB05OY.f MB3JZP.f MB3LZP.f MB3OYZ.f MB3PYZ.f MB4DBZ.f MB4DLZ.f + MB4DPZ.f MC01MD.f MC01ND.f MC01OD.f MC01PD.f MC01PY.f MC01QD.f MC01RD.f + MC01SD.f MC01SW.f MC01SX.f MC01SY.f MC01TD.f MC01VD.f MC01WD.f MC01XD.f + MC03MD.f MC03ND.f MC03NX.f MC03NY.f MD03AD.f MD03BA.f MD03BB.f MD03BD.f + MD03BF.f MD03BX.f + + MD03BY.f NF01AD.f NF01AY.f NF01BA.f NF01BB.f NF01BD.f NF01BE.f NF01BF.f + NF01BP.f NF01BQ.f NF01BR.f NF01BS.f NF01BU.f NF01BV.f NF01BW.f NF01BX.f + NF01BY.f + + SB01BD.f SB01BX.f SB01BY.f SB01DD.f SB01FY.f SB01MD.f SB02CX.f SB02MD.f + SB02MR.f SB02MS.f SB02MT.f SB02MU.f SB02MV.f SB02MW.f SB02MX.f SB02ND.f + SB02OD.f SB02OU.f SB02OV.f SB02OW.f SB02OX.f SB02OY.f SB02PD.f SB02QD.f + SB02RD.f SB02RU.f SB02SD.f SB03MD.f SB03MU.f SB03MV.f SB03MW.f SB03MX.f + SB03MY.f SB03OD.f SB03OR.f SB03OS.f SB03OT.f SB03OU.f SB03OV.f SB03OY.f + SB03OZ.f SB03PD.f SB03QD.f SB03QX.f SB03QY.f SB03RD.f SB03SD.f SB03SX.f + SB03SY.f SB03TD.f SB03UD.f SB04MD.f SB04MR.f SB04MU.f SB04MW.f SB04MY.f + SB04ND.f SB04NV.f SB04NW.f SB04NX.f SB04NY.f SB04OD.f SB04OW.f SB04PD.f + SB04PX.f SB04PY.f SB04QD.f SB04QR.f SB04QU.f SB04QY.f SB04RD.f SB04RV.f + SB04RW.f SB04RX.f SB04RY.f SB06ND.f SB08CD.f SB08DD.f SB08ED.f SB08FD.f + SB08GD.f SB08HD.f SB08MD.f SB08MY.f SB08ND.f SB08NY.f SB09MD.f SB10AD.f + SB10DD.f SB10ED.f SB10FD.f SB10HD.f SB10ID.f SB10JD.f SB10KD.f SB10LD.f + SB10MD.f SB10PD.f SB10QD.f SB10RD.f SB10SD.f SB10TD.f SB10UD.f SB10VD.f + SB10WD.f SB10YD.f SB10ZD.f SB10ZP.f SB16AD.f SB16AY.f SB16BD.f SB16CD.f + SB16CY.f SG02AD.f SG02CV.f SG02CW.f SG02CX.f SG02ND.f SG03AD.f SG03AX.f + SG03AY.f SG03BD.f SG03BR.f SG03BS.f SG03BT.f SG03BU.f SG03BV.f SG03BW.f + SG03BX.f SG03BY.f SG03BZ.f TB01ID.f TB01IZ.f TB01KD.f TB01KX.f TB01LD.f + + TB01MD.f TB01ND.f TB01PD.f TB01PX.f TB01TD.f TB01TY.f TB01UD.f TB01UX.f + TB01UY.f TB01VD.f TB01VY.f TB01WD.f TB01WX.f TB01XD.f TB01XZ.f TB01YD.f + TB01ZD.f TB03AD.f TB03AY.f TB04AD.f TB04AY.f TB04BD.f TB04BV.f TB04BW.f + TB04BX.f TB04CD.f TB05AD.f TC01OD.f TC04AD.f TC05AD.f TD03AD.f TD03AY.f + TD04AD.f TD05AD.f TF01MD.f TF01MX.f TF01MY.f TF01ND.f TF01OD.f TF01PD.f + TF01QD.f TF01RD.f TG01AD.f TG01AZ.f TG01BD.f TG01CD.f TG01DD.f TG01ED.f + TG01FD.f TG01FZ.f TG01GD.f TG01HD.f TG01HU.f TG01HX.f TG01HY.f TG01ID.f + TG01JD.f TG01JY.f TG01KD.f TG01KZ.f TG01LD.f TG01LY.f TG01MD.f TG01ND.f + TG01NX.f TG01OA.f TG01OB.f TG01OD.f TG01OZ.f TG01PD.f TG01QD.f TG01WD.f + + UD01BD.f UD01CD.f UD01DD.f UD01MD.f UD01MZ.f UD01ND.f UE01MD.f + + delctg.f select.f zelctg.f + ) + +ADD_LIBRARY(slicot ${SOURCES}) +TARGET_LINK_LIBRARIES(slicot LAPACK::LAPACK BLAS::BLAS) +SET_PROPERTY(TARGET slicot PROPERTY VERSION ${PROJECT_VERSION}) +SET_PROPERTY(TARGET slicot PROPERTY SOVERSION ${PROJECT_VERSION_MAJOR}) + +ADD_LIBRARY(SLICOT::slicot ALIAS slicot) + +INSTALL(TARGETS slicot + EXPORT slicot_targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + From 993949d44066e6cf3fd334e14fe9fc3b3ca03b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Tue, 16 Jul 2024 14:08:14 +0200 Subject: [PATCH 03/22] Fix incorrect input files --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index bdad2c9..1f81a2f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ *.swp build*/ +*.obj +*.o +*.a +*.lib From 00b6bbc0f6209ecb37f3c2e8a0fff8a23044c297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Tue, 16 Jul 2024 15:15:17 +0200 Subject: [PATCH 04/22] Fix out of stack. --- examples/TMB02DD.f | 6 +++--- examples/TMB04TB.f | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/TMB02DD.f b/examples/TMB02DD.f index b8f0d1b..fc8c718 100644 --- a/examples/TMB02DD.f +++ b/examples/TMB02DD.f @@ -4,7 +4,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER KMAX, MMAX, NMAX - PARAMETER ( KMAX = 20, MMAX = 20, NMAX = 20 ) + PARAMETER ( KMAX = 12, MMAX = 12, NMAX = 12 ) INTEGER LCS, LDG, LDL, LDR, LDT, LDWORK PARAMETER ( LDG = KMAX*( MMAX + NMAX ), $ LDL = KMAX*( MMAX + NMAX ), @@ -32,7 +32,7 @@ EXTERNAL DLACPY, MB02CD, MB02DD * * .. Executable Statements .. - WRITE ( NOUT, FMT = 99999 ) + WRITE ( *, FMT = 99999 ) * Skip the heading in the data file and read the data. READ ( NIN, FMT = '()' ) READ ( NIN, FMT = * ) N, K, M, JOB, TYPET @@ -136,7 +136,7 @@ END IF STOP * -99999 FORMAT ( ' MB02DD EXAMPLE PROGRAM RESULTS',/1X) +99999 FORMAT ( ' MB02DD EXAMPLE PROGRAM RESULTS' ) 99998 FORMAT ( ' INFO on exit from MB02CD = ',I2) 99997 FORMAT ( ' INFO on exit from MB02DD = ',I2) 99996 FORMAT ( ' The Cholesky factor is ') diff --git a/examples/TMB04TB.f b/examples/TMB04TB.f index a536893..3b70283 100644 --- a/examples/TMB04TB.f +++ b/examples/TMB04TB.f @@ -6,7 +6,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER NBMAX, NMAX - PARAMETER ( NBMAX = 64, NMAX = 421 ) + PARAMETER ( NBMAX = 64, NMAX = 30 ) INTEGER LDA, LDB, LDG, LDQ, LDRES, LDU1, LDU2, LDV1, $ LDV2, LDWORK PARAMETER ( LDA = NMAX, LDB = NMAX, LDG = NMAX, LDQ = NMAX, From 1d20fc5fde86553184536330e9cae808922ee300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Thu, 24 Apr 2025 11:05:09 +0200 Subject: [PATCH 05/22] Add remaining CMake stuff --- CMakeLists.txt | 69 ++- SLICOTConfig.cmake.in | 8 + examples/CMakeLists.txt | 484 +++++++++--------- examples/cmake-how-to-example/CMakeLists.txt | 7 + examples/cmake-how-to-example/TAB01MD.f | 69 +++ examples/makefile | 490 +++++++++--------- examples/makefile_Unix | 500 +++++++++---------- slicot.pc.in | 10 + 8 files changed, 865 insertions(+), 772 deletions(-) create mode 100644 SLICOTConfig.cmake.in create mode 100644 examples/cmake-how-to-example/CMakeLists.txt create mode 100644 examples/cmake-how-to-example/TAB01MD.f create mode 100644 slicot.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index d12b82d..699b958 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,38 +71,37 @@ endif() ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(examples) -# ADD_SUBDIRECTORY(test) -# -# INCLUDE(CMakePackageConfigHelpers) -# WRITE_BASIC_PACKAGE_VERSION_FILE( -# qrupdateConfigVersion.cmake -# VERSION ${PROJECT_VERSION} -# COMPATIBILITY AnyNewerVersion -# ) -# INSTALL(EXPORT qrupdatetargets -# FILE qrupdateTargets.cmake -# NAMESPACE qrupdate:: -# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/qrupdate -# ) -# -# CONFIGURE_FILE(qrupdate-config.cmake.in qrupdate-config.cmake @ONLY) -# INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/qrupdate-config.cmake" -# "${CMAKE_CURRENT_BINARY_DIR}/qrupdateConfigVersion.cmake" -# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/qrupdate -# ) -# -# CONFIGURE_FILE(qrupdate.pc.in qrupdate.pc @ONLY) -# INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/qrupdate.pc" -# DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") -# -# MESSAGE(STATUS "------------ Build Information --------------") -# MESSAGE(STATUS "CMAKE_Fortran_FLAGS: ${CMAKE_Fortran_FLAGS}") -# MESSAGE(STATUS "CMAKE_Fortran_FLAGS_DEBUG: ${CMAKE_Fortran_FLAGS_DEBUG}") -# MESSAGE(STATUS "CMAKE_Fortran_FLAGS_RELEASE: ${CMAKE_Fortran_FLAGS_RELEASE}") -# MESSAGE(STATUS "BLAS Libraries: ${BLAS_LIBRARIES}") -# MESSAGE(STATUS "LAPACK Libraries: ${LAPACK_LIBRARIES}") -# MESSAGE(STATUS "Build Type: ${CMAKE_BUILD_TYPE}") -# MESSAGE(STATUS "Debug: ${DEBUG}") -# MESSAGE(STATUS "Shared Libs: ${BUILD_SHARED_LIBS}") -# MESSAGE(STATUS "---------------------------------------------") -# + +INCLUDE(CMakePackageConfigHelpers) +WRITE_BASIC_PACKAGE_VERSION_FILE( + SLICOTConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion + ) +INSTALL(EXPORT slicot_targets + FILE SLICOTTargets.cmake + NAMESPACE SLICOT:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SLICOT +) + +CONFIGURE_FILE(SLICOTConfig.cmake.in SLICOTConfig.cmake @ONLY) +INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/SLICOTConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/SLICOTConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SLICOT + ) + +CONFIGURE_FILE(slicot.pc.in slicot.pc @ONLY) +INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/slicot.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + +MESSAGE(STATUS "------------ Build Information --------------") +MESSAGE(STATUS "CMAKE_Fortran_FLAGS: ${CMAKE_Fortran_FLAGS}") +MESSAGE(STATUS "CMAKE_Fortran_FLAGS_DEBUG: ${CMAKE_Fortran_FLAGS_DEBUG}") +MESSAGE(STATUS "CMAKE_Fortran_FLAGS_RELEASE: ${CMAKE_Fortran_FLAGS_RELEASE}") +MESSAGE(STATUS "BLAS Libraries: ${BLAS_LIBRARIES}") +MESSAGE(STATUS "LAPACK Libraries: ${LAPACK_LIBRARIES}") +MESSAGE(STATUS "Build Type: ${CMAKE_BUILD_TYPE}") +MESSAGE(STATUS "Debug: ${DEBUG}") +MESSAGE(STATUS "Shared Libs: ${BUILD_SHARED_LIBS}") +MESSAGE(STATUS "---------------------------------------------") + diff --git a/SLICOTConfig.cmake.in b/SLICOTConfig.cmake.in new file mode 100644 index 0000000..243f93a --- /dev/null +++ b/SLICOTConfig.cmake.in @@ -0,0 +1,8 @@ +include(CMakeFindDependencyMacro) + +# Same syntax as find_package +find_dependency(BLAS REQUIRED) +find_dependency(LAPACK REQUIRED) + +# Add the targets file +include("${CMAKE_CURRENT_LIST_DIR}/SLICOTTargets.cmake") diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 31d2fca..6274ea6 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -29,245 +29,245 @@ macro(add_slicot_test name src) endmacro() -add_slicot_test(ab01md TAB01MD.f) -add_slicot_test(ab01nd TAB01ND.f) -add_slicot_test(ab01od TAB01OD.f) -add_slicot_test(ab04md TAB04MD.f) -add_slicot_test(ab05md TAB05MD.f) -add_slicot_test(ab05nd TAB05ND.f) -add_slicot_test(ab05od TAB05OD.f) -add_slicot_test(ab05pd TAB05PD.f) -add_slicot_test(ab05qd TAB05QD.f) -add_slicot_test(ab05rd TAB05RD.f) -add_slicot_test(ab07md TAB07MD.f) -add_slicot_test(ab07nd TAB07ND.f) -add_slicot_test(ab08nd TAB08ND.f) -add_slicot_test(ab08nw TAB08NW.f) -add_slicot_test(ab08nz TAB08NZ.f) -add_slicot_test(ab09ad TAB09AD.f) -add_slicot_test(ab09bd TAB09BD.f) -add_slicot_test(ab09cd TAB09CD.f) -add_slicot_test(ab09dd TAB09DD.f) -add_slicot_test(ab09ed TAB09ED.f) -add_slicot_test(ab09fd TAB09FD.f) -add_slicot_test(ab09gd TAB09GD.f) -add_slicot_test(ab09hd TAB09HD.f) -add_slicot_test(ab09id TAB09ID.f) -add_slicot_test(ab09jd TAB09JD.f) -add_slicot_test(ab09kd TAB09KD.f) -add_slicot_test(ab09md TAB09MD.f) -add_slicot_test(ab09nd TAB09ND.f) -add_slicot_test(ab13ad TAB13AD.f) -add_slicot_test(ab13bd TAB13BD.f) -add_slicot_test(ab13cd TAB13CD.f) -add_slicot_test(ab13dd TAB13DD.f) -add_slicot_test(ab13ed TAB13ED.f) -add_slicot_test(ab13fd TAB13FD.f) -add_slicot_test(ab13id TAB13ID.f) -add_slicot_test(ab13md TAB13MD.f) -add_slicot_test(ag08bd TAG08BD.f) -add_slicot_test(ag08bz TAG08BZ.f) -add_slicot_test(bb01ad TBB01AD.f) -add_slicot_test(bb02ad TBB02AD.f) -add_slicot_test(bb03ad TBB03AD.f) -add_slicot_test(bb04ad TBB04AD.f) -add_slicot_test(bd01ad TBD01AD.f) -add_slicot_test(bd02ad TBD02AD.f) -add_slicot_test(de01od TDE01OD.f) -add_slicot_test(de01pd TDE01PD.f) -add_slicot_test(df01md TDF01MD.f) -add_slicot_test(dg01md TDG01MD.f) -add_slicot_test(dg01nd TDG01ND.f) -add_slicot_test(dg01od TDG01OD.f) -add_slicot_test(dk01md TDK01MD.f) -add_slicot_test(fb01qd TFB01QD.f) -add_slicot_test(fb01rd TFB01RD.f) -add_slicot_test(fb01sd TFB01SD.f) -add_slicot_test(fb01td TFB01TD.f) -add_slicot_test(fb01vd TFB01VD.f) -add_slicot_test(fd01ad TFD01AD.f) -add_slicot_test(ib01ad TIB01AD.f) -add_slicot_test(ib01bd TIB01BD.f) -add_slicot_test(ib01cd TIB01CD.f) -add_slicot_test(ib03ad TIB03AD.f) -add_slicot_test(ib03bd TIB03BD.f) -add_slicot_test(mb01td TMB01TD.f) -add_slicot_test(mb02cd TMB02CD.f) -add_slicot_test(mb02dd TMB02DD.f) -add_slicot_test(mb02ed TMB02ED.f) -add_slicot_test(mb02fd TMB02FD.f) -add_slicot_test(mb02gd TMB02GD.f) -add_slicot_test(mb02hd TMB02HD.f) -add_slicot_test(mb02id TMB02ID.f) -add_slicot_test(mb02jd TMB02JD.f) -add_slicot_test(mb02jx TMB02JX.f) -add_slicot_test(mb02kd TMB02KD.f) -add_slicot_test(mb02md TMB02MD.f) -add_slicot_test(mb02nd TMB02ND.f) -add_slicot_test(mb02qd TMB02QD.f) -add_slicot_test(mb02sd TMB02SD.f) -add_slicot_test(mb02vd TMB02VD.f) -add_slicot_test(mb03bd TMB03BD.f) -add_slicot_test(mb03bz TMB03BZ.f) -add_slicot_test(mb03fz TMB03FZ.f) -add_slicot_test(mb03kd TMB03KD.f) -add_slicot_test(mb03ld TMB03LD.f) -add_slicot_test(mb03lf TMB03LF.f) -add_slicot_test(mb03lz TMB03LZ.f) -add_slicot_test(mb03md TMB03MD.f) -add_slicot_test(mb03nd TMB03ND.f) -add_slicot_test(mb03od TMB03OD.f) -add_slicot_test(mb03pd TMB03PD.f) -add_slicot_test(mb03qd TMB03QD.f) -add_slicot_test(mb03qg TMB03QG.f) -add_slicot_test(mb03rd TMB03RD.f) -add_slicot_test(mb03sd TMB03SD.f) -add_slicot_test(mb03td TMB03TD.f) -add_slicot_test(mb03ud TMB03UD.f) -add_slicot_test(mb03vd TMB03VD.f) -add_slicot_test(mb03wd TMB03WD.f) -add_slicot_test(mb03xd TMB03XD.f) -add_slicot_test(mb03xp TMB03XP.f) -add_slicot_test(mb03xz TMB03XZ.f) -add_slicot_test(mb03zd TMB03ZD.f) -add_slicot_test(mb04ad TMB04AD.f) -add_slicot_test(mb04az TMB04AZ.f) -add_slicot_test(mb04bd TMB04BD.f) -add_slicot_test(mb04bz TMB04BZ.f) -add_slicot_test(mb04dd TMB04DD.f) -add_slicot_test(mb04dl TMB04DL.f) -add_slicot_test(mb04dp TMB04DP.f) -add_slicot_test(mb04ds TMB04DS.f) -add_slicot_test(mb04dy TMB04DY.f) -add_slicot_test(mb04dz TMB04DZ.f) -add_slicot_test(mb04ed TMB04ED.f) -add_slicot_test(mb04fd TMB04FD.f) -add_slicot_test(mb04gd TMB04GD.f) -add_slicot_test(mb04md TMB04MD.f) -add_slicot_test(mb04od TMB04OD.f) -add_slicot_test(mb04pb TMB04PB.f) -add_slicot_test(mb04pu TMB04PU.f) -add_slicot_test(mb04tb TMB04TB.f) -add_slicot_test(mb04ts TMB04TS.f) -add_slicot_test(mb04ud TMB04UD.f) -add_slicot_test(mb04vd TMB04VD.f) -add_slicot_test(mb04xd TMB04XD.f) -add_slicot_test(mb04yd TMB04YD.f) -add_slicot_test(mb04zd TMB04ZD.f) -add_slicot_test(mb05md TMB05MD.f) -add_slicot_test(mb05nd TMB05ND.f) -add_slicot_test(mb05od TMB05OD.f) -add_slicot_test(mb4dlz TMB4DLZ.f) -add_slicot_test(mb4dpz TMB4DPZ.f) -add_slicot_test(mc01md TMC01MD.f) -add_slicot_test(mc01nd TMC01ND.f) -add_slicot_test(mc01od TMC01OD.f) -add_slicot_test(mc01pd TMC01PD.f) -add_slicot_test(mc01qd TMC01QD.f) -add_slicot_test(mc01rd TMC01RD.f) -add_slicot_test(mc01sd TMC01SD.f) -add_slicot_test(mc01td TMC01TD.f) -add_slicot_test(mc01vd TMC01VD.f) -add_slicot_test(mc01wd TMC01WD.f) -add_slicot_test(mc01xd TMC01XD.f) -add_slicot_test(mc03md TMC03MD.f) -add_slicot_test(mc03nd TMC03ND.f) -add_slicot_test(md03ad TMD03AD.f) -add_slicot_test(md03bd TMD03BD.f) -add_slicot_test(sb01bd TSB01BD.f) -add_slicot_test(sb01dd TSB01DD.f) -add_slicot_test(sb01md TSB01MD.f) -add_slicot_test(sb02md TSB02MD.f) -add_slicot_test(sb02nd TSB02ND.f) -add_slicot_test(sb02od TSB02OD.f) -add_slicot_test(sb02pd TSB02PD.f) -add_slicot_test(sb02qd TSB02QD.f) -add_slicot_test(sb02rd TSB02RD.f) -add_slicot_test(sb02sd TSB02SD.f) -add_slicot_test(sb03md TSB03MD.f) -add_slicot_test(sb03od TSB03OD.f) -add_slicot_test(sb03qd TSB03QD.f) -add_slicot_test(sb03sd TSB03SD.f) -add_slicot_test(sb03td TSB03TD.f) -add_slicot_test(sb03ud TSB03UD.f) -add_slicot_test(sb04md TSB04MD.f) -add_slicot_test(sb04nd TSB04ND.f) -add_slicot_test(sb04od TSB04OD.f) -add_slicot_test(sb04pd TSB04PD.f) -add_slicot_test(sb04qd TSB04QD.f) -add_slicot_test(sb04rd TSB04RD.f) -add_slicot_test(sb06nd TSB06ND.f) -add_slicot_test(sb08cd TSB08CD.f) -add_slicot_test(sb08dd TSB08DD.f) -add_slicot_test(sb08ed TSB08ED.f) -add_slicot_test(sb08fd TSB08FD.f) -add_slicot_test(sb08md TSB08MD.f) -add_slicot_test(sb08nd TSB08ND.f) -add_slicot_test(sb09md TSB09MD.f) -add_slicot_test(sb10dd TSB10DD.f) -add_slicot_test(sb10ed TSB10ED.f) -add_slicot_test(sb10fd TSB10FD.f) -add_slicot_test(sb10hd TSB10HD.f) -add_slicot_test(sb10id TSB10ID.f) -add_slicot_test(sb10kd TSB10KD.f) -add_slicot_test(sb10zd TSB10ZD.f) -add_slicot_test(sb16ad TSB16AD.f) -add_slicot_test(sb16bd TSB16BD.f) -add_slicot_test(sb16cd TSB16CD.f) -add_slicot_test(sg02ad TSG02AD.f) -add_slicot_test(sg02nd TSG02ND.f) -add_slicot_test(sg03ad TSG03AD.f) -add_slicot_test(sg03bd TSG03BD.f) -add_slicot_test(tb01id TTB01ID.f) -add_slicot_test(tb01iz TTB01IZ.f) -add_slicot_test(tb01kd TTB01KD.f) -add_slicot_test(tb01ld TTB01LD.f) -add_slicot_test(tb01md TTB01MD.f) -add_slicot_test(tb01nd TTB01ND.f) -add_slicot_test(tb01pd TTB01PD.f) -add_slicot_test(tb01px TTB01PX.f) -add_slicot_test(tb01td TTB01TD.f) -add_slicot_test(tb01ud TTB01UD.f) -add_slicot_test(tb01uy TTB01UY.f) -add_slicot_test(tb01wd TTB01WD.f) -add_slicot_test(tb01wx TTB01WX.f) -add_slicot_test(tb01zd TTB01ZD.f) -add_slicot_test(tb03ad TTB03AD.f) -add_slicot_test(tb04ad TTB04AD.f) -add_slicot_test(tb04bd TTB04BD.f) -add_slicot_test(tb04cd TTB04CD.f) -add_slicot_test(tb05ad TTB05AD.f) -add_slicot_test(tc01od TTC01OD.f) -add_slicot_test(tc04ad TTC04AD.f) -add_slicot_test(tc05ad TTC05AD.f) -add_slicot_test(td03ad TTD03AD.f) -add_slicot_test(td04ad TTD04AD.f) -add_slicot_test(td05ad TTD05AD.f) -add_slicot_test(tf01md TTF01MD.f) -add_slicot_test(tf01nd TTF01ND.f) -add_slicot_test(tf01od TTF01OD.f) -add_slicot_test(tf01pd TTF01PD.f) -add_slicot_test(tf01qd TTF01QD.f) -add_slicot_test(tf01rd TTF01RD.f) -add_slicot_test(tg01ad TTG01AD.f) -add_slicot_test(tg01az TTG01AZ.f) -add_slicot_test(tg01cd TTG01CD.f) -add_slicot_test(tg01dd TTG01DD.f) -add_slicot_test(tg01ed TTG01ED.f) -add_slicot_test(tg01fd TTG01FD.f) -add_slicot_test(tg01fz TTG01FZ.f) -add_slicot_test(tg01gd TTG01GD.f) -add_slicot_test(tg01hd TTG01HD.f) -add_slicot_test(tg01id TTG01ID.f) -add_slicot_test(tg01jd TTG01JD.f) -add_slicot_test(tg01jy TTG01JY.f) -add_slicot_test(tg01ld TTG01LD.f) -add_slicot_test(tg01md TTG01MD.f) -add_slicot_test(tg01nd TTG01ND.f) -add_slicot_test(tg01pd TTG01PD.f) -add_slicot_test(tg01qd TTG01QD.f) -add_slicot_test(ud01bd TUD01BD.f) -add_slicot_test(ud01cd TUD01CD.f) -add_slicot_test(ud01dd TUD01DD.f) -add_slicot_test(ud01md TUD01MD.f) -add_slicot_test(ud01nd TUD01ND.f) +add_slicot_test(TAB01MD TAB01MD.f) +add_slicot_test(TAB01ND TAB01ND.f) +add_slicot_test(TAB01OD TAB01OD.f) +add_slicot_test(TAB04MD TAB04MD.f) +add_slicot_test(TAB05MD TAB05MD.f) +add_slicot_test(TAB05ND TAB05ND.f) +add_slicot_test(TAB05OD TAB05OD.f) +add_slicot_test(TAB05PD TAB05PD.f) +add_slicot_test(TAB05QD TAB05QD.f) +add_slicot_test(TAB05RD TAB05RD.f) +add_slicot_test(TAB07MD TAB07MD.f) +add_slicot_test(TAB07ND TAB07ND.f) +add_slicot_test(TAB08ND TAB08ND.f) +add_slicot_test(TAB08NW TAB08NW.f) +add_slicot_test(TAB08NZ TAB08NZ.f) +add_slicot_test(TAB09AD TAB09AD.f) +add_slicot_test(TAB09BD TAB09BD.f) +add_slicot_test(TAB09CD TAB09CD.f) +add_slicot_test(TAB09DD TAB09DD.f) +add_slicot_test(TAB09ED TAB09ED.f) +add_slicot_test(TAB09FD TAB09FD.f) +add_slicot_test(TAB09GD TAB09GD.f) +add_slicot_test(TAB09HD TAB09HD.f) +add_slicot_test(TAB09ID TAB09ID.f) +add_slicot_test(TAB09JD TAB09JD.f) +add_slicot_test(TAB09KD TAB09KD.f) +add_slicot_test(TAB09MD TAB09MD.f) +add_slicot_test(TAB09ND TAB09ND.f) +add_slicot_test(TAB13AD TAB13AD.f) +add_slicot_test(TAB13BD TAB13BD.f) +add_slicot_test(TAB13CD TAB13CD.f) +add_slicot_test(TAB13DD TAB13DD.f) +add_slicot_test(TAB13ED TAB13ED.f) +add_slicot_test(TAB13FD TAB13FD.f) +add_slicot_test(TAB13ID TAB13ID.f) +add_slicot_test(TAB13MD TAB13MD.f) +add_slicot_test(TAG08BD TAG08BD.f) +add_slicot_test(TAG08BZ TAG08BZ.f) +add_slicot_test(TBB01AD TBB01AD.f) +add_slicot_test(TBB02AD TBB02AD.f) +add_slicot_test(TBB03AD TBB03AD.f) +add_slicot_test(TBB04AD TBB04AD.f) +add_slicot_test(TBD01AD TBD01AD.f) +add_slicot_test(TBD02AD TBD02AD.f) +add_slicot_test(TDE01OD TDE01OD.f) +add_slicot_test(TDE01PD TDE01PD.f) +add_slicot_test(TDF01MD TDF01MD.f) +add_slicot_test(TDG01MD TDG01MD.f) +add_slicot_test(TDG01ND TDG01ND.f) +add_slicot_test(TDG01OD TDG01OD.f) +add_slicot_test(TDK01MD TDK01MD.f) +add_slicot_test(TFB01QD TFB01QD.f) +add_slicot_test(TFB01RD TFB01RD.f) +add_slicot_test(TFB01SD TFB01SD.f) +add_slicot_test(TFB01TD TFB01TD.f) +add_slicot_test(TFB01VD TFB01VD.f) +add_slicot_test(TFD01AD TFD01AD.f) +add_slicot_test(TIB01AD TIB01AD.f) +add_slicot_test(TIB01BD TIB01BD.f) +add_slicot_test(TIB01CD TIB01CD.f) +add_slicot_test(TIB03AD TIB03AD.f) +add_slicot_test(TIB03BD TIB03BD.f) +add_slicot_test(TMB01TD TMB01TD.f) +add_slicot_test(TMB02CD TMB02CD.f) +add_slicot_test(TMB02DD TMB02DD.f) +add_slicot_test(TMB02ED TMB02ED.f) +add_slicot_test(TMB02FD TMB02FD.f) +add_slicot_test(TMB02GD TMB02GD.f) +add_slicot_test(TMB02HD TMB02HD.f) +add_slicot_test(TMB02ID TMB02ID.f) +add_slicot_test(TMB02JD TMB02JD.f) +add_slicot_test(TMB02JX TMB02JX.f) +add_slicot_test(TMB02KD TMB02KD.f) +add_slicot_test(TMB02MD TMB02MD.f) +add_slicot_test(TMB02ND TMB02ND.f) +add_slicot_test(TMB02QD TMB02QD.f) +add_slicot_test(TMB02SD TMB02SD.f) +add_slicot_test(TMB02VD TMB02VD.f) +add_slicot_test(TMB03BD TMB03BD.f) +add_slicot_test(TMB03BZ TMB03BZ.f) +add_slicot_test(TMB03FZ TMB03FZ.f) +add_slicot_test(TMB03KD TMB03KD.f) +add_slicot_test(TMB03LD TMB03LD.f) +add_slicot_test(TMB03LF TMB03LF.f) +add_slicot_test(TMB03LZ TMB03LZ.f) +add_slicot_test(TMB03MD TMB03MD.f) +add_slicot_test(TMB03ND TMB03ND.f) +add_slicot_test(TMB03OD TMB03OD.f) +add_slicot_test(TMB03PD TMB03PD.f) +add_slicot_test(TMB03QD TMB03QD.f) +add_slicot_test(TMB03QG TMB03QG.f) +add_slicot_test(TMB03RD TMB03RD.f) +add_slicot_test(TMB03SD TMB03SD.f) +add_slicot_test(TMB03TD TMB03TD.f) +add_slicot_test(TMB03UD TMB03UD.f) +add_slicot_test(TMB03VD TMB03VD.f) +add_slicot_test(TMB03WD TMB03WD.f) +add_slicot_test(TMB03XD TMB03XD.f) +add_slicot_test(TMB03XP TMB03XP.f) +add_slicot_test(TMB03XZ TMB03XZ.f) +add_slicot_test(TMB03ZD TMB03ZD.f) +add_slicot_test(TMB04AD TMB04AD.f) +add_slicot_test(TMB04AZ TMB04AZ.f) +add_slicot_test(TMB04BD TMB04BD.f) +add_slicot_test(TMB04BZ TMB04BZ.f) +add_slicot_test(TMB04DD TMB04DD.f) +add_slicot_test(TMB04DL TMB04DL.f) +add_slicot_test(TMB04DP TMB04DP.f) +add_slicot_test(TMB04DS TMB04DS.f) +add_slicot_test(TMB04DY TMB04DY.f) +add_slicot_test(TMB04DZ TMB04DZ.f) +add_slicot_test(TMB04ED TMB04ED.f) +add_slicot_test(TMB04FD TMB04FD.f) +add_slicot_test(TMB04GD TMB04GD.f) +add_slicot_test(TMB04MD TMB04MD.f) +add_slicot_test(TMB04OD TMB04OD.f) +add_slicot_test(TMB04PB TMB04PB.f) +add_slicot_test(TMB04PU TMB04PU.f) +add_slicot_test(TMB04TB TMB04TB.f) +add_slicot_test(TMB04TS TMB04TS.f) +add_slicot_test(TMB04UD TMB04UD.f) +add_slicot_test(TMB04VD TMB04VD.f) +add_slicot_test(TMB04XD TMB04XD.f) +add_slicot_test(TMB04YD TMB04YD.f) +add_slicot_test(TMB04ZD TMB04ZD.f) +add_slicot_test(TMB05MD TMB05MD.f) +add_slicot_test(TMB05ND TMB05ND.f) +add_slicot_test(TMB05OD TMB05OD.f) +add_slicot_test(TMB4DLZ TMB4DLZ.f) +add_slicot_test(TMB4DPZ TMB4DPZ.f) +add_slicot_test(TMC01MD TMC01MD.f) +add_slicot_test(TMC01ND TMC01ND.f) +add_slicot_test(TMC01OD TMC01OD.f) +add_slicot_test(TMC01PD TMC01PD.f) +add_slicot_test(TMC01QD TMC01QD.f) +add_slicot_test(TMC01RD TMC01RD.f) +add_slicot_test(TMC01SD TMC01SD.f) +add_slicot_test(TMC01TD TMC01TD.f) +add_slicot_test(TMC01VD TMC01VD.f) +add_slicot_test(TMC01WD TMC01WD.f) +add_slicot_test(TMC01XD TMC01XD.f) +add_slicot_test(TMC03MD TMC03MD.f) +add_slicot_test(TMC03ND TMC03ND.f) +add_slicot_test(TMD03AD TMD03AD.f) +add_slicot_test(TMD03BD TMD03BD.f) +add_slicot_test(TSB01BD TSB01BD.f) +add_slicot_test(TSB01DD TSB01DD.f) +add_slicot_test(TSB01MD TSB01MD.f) +add_slicot_test(TSB02MD TSB02MD.f) +add_slicot_test(TSB02ND TSB02ND.f) +add_slicot_test(TSB02OD TSB02OD.f) +add_slicot_test(TSB02PD TSB02PD.f) +add_slicot_test(TSB02QD TSB02QD.f) +add_slicot_test(TSB02RD TSB02RD.f) +add_slicot_test(TSB02SD TSB02SD.f) +add_slicot_test(TSB03MD TSB03MD.f) +add_slicot_test(TSB03OD TSB03OD.f) +add_slicot_test(TSB03QD TSB03QD.f) +add_slicot_test(TSB03SD TSB03SD.f) +add_slicot_test(TSB03TD TSB03TD.f) +add_slicot_test(TSB03UD TSB03UD.f) +add_slicot_test(TSB04MD TSB04MD.f) +add_slicot_test(TSB04ND TSB04ND.f) +add_slicot_test(TSB04OD TSB04OD.f) +add_slicot_test(TSB04PD TSB04PD.f) +add_slicot_test(TSB04QD TSB04QD.f) +add_slicot_test(TSB04RD TSB04RD.f) +add_slicot_test(TSB06ND TSB06ND.f) +add_slicot_test(TSB08CD TSB08CD.f) +add_slicot_test(TSB08DD TSB08DD.f) +add_slicot_test(TSB08ED TSB08ED.f) +add_slicot_test(TSB08FD TSB08FD.f) +add_slicot_test(TSB08MD TSB08MD.f) +add_slicot_test(TSB08ND TSB08ND.f) +add_slicot_test(TSB09MD TSB09MD.f) +add_slicot_test(TSB10DD TSB10DD.f) +add_slicot_test(TSB10ED TSB10ED.f) +add_slicot_test(TSB10FD TSB10FD.f) +add_slicot_test(TSB10HD TSB10HD.f) +add_slicot_test(TSB10ID TSB10ID.f) +add_slicot_test(TSB10KD TSB10KD.f) +add_slicot_test(TSB10ZD TSB10ZD.f) +add_slicot_test(TSB16AD TSB16AD.f) +add_slicot_test(TSB16BD TSB16BD.f) +add_slicot_test(TSB16CD TSB16CD.f) +add_slicot_test(TSG02AD TSG02AD.f) +add_slicot_test(TSG02ND TSG02ND.f) +add_slicot_test(TSG03AD TSG03AD.f) +add_slicot_test(TSG03BD TSG03BD.f) +add_slicot_test(TTB01ID TTB01ID.f) +add_slicot_test(TTB01IZ TTB01IZ.f) +add_slicot_test(TTB01KD TTB01KD.f) +add_slicot_test(TTB01LD TTB01LD.f) +add_slicot_test(TTB01MD TTB01MD.f) +add_slicot_test(TTB01ND TTB01ND.f) +add_slicot_test(TTB01PD TTB01PD.f) +add_slicot_test(TTB01PX TTB01PX.f) +add_slicot_test(TTB01TD TTB01TD.f) +add_slicot_test(TTB01UD TTB01UD.f) +add_slicot_test(TTB01UY TTB01UY.f) +add_slicot_test(TTB01WD TTB01WD.f) +add_slicot_test(TTB01WX TTB01WX.f) +add_slicot_test(TTB01ZD TTB01ZD.f) +add_slicot_test(TTB03AD TTB03AD.f) +add_slicot_test(TTB04AD TTB04AD.f) +add_slicot_test(TTB04BD TTB04BD.f) +add_slicot_test(TTB04CD TTB04CD.f) +add_slicot_test(TTB05AD TTB05AD.f) +add_slicot_test(TTC01OD TTC01OD.f) +add_slicot_test(TTC04AD TTC04AD.f) +add_slicot_test(TTC05AD TTC05AD.f) +add_slicot_test(TTD03AD TTD03AD.f) +add_slicot_test(TTD04AD TTD04AD.f) +add_slicot_test(TTD05AD TTD05AD.f) +add_slicot_test(TTF01MD TTF01MD.f) +add_slicot_test(TTF01ND TTF01ND.f) +add_slicot_test(TTF01OD TTF01OD.f) +add_slicot_test(TTF01PD TTF01PD.f) +add_slicot_test(TTF01QD TTF01QD.f) +add_slicot_test(TTF01RD TTF01RD.f) +add_slicot_test(TTG01AD TTG01AD.f) +add_slicot_test(TTG01AZ TTG01AZ.f) +add_slicot_test(TTG01CD TTG01CD.f) +add_slicot_test(TTG01DD TTG01DD.f) +add_slicot_test(TTG01ED TTG01ED.f) +add_slicot_test(TTG01FD TTG01FD.f) +add_slicot_test(TTG01FZ TTG01FZ.f) +add_slicot_test(TTG01GD TTG01GD.f) +add_slicot_test(TTG01HD TTG01HD.f) +add_slicot_test(TTG01ID TTG01ID.f) +add_slicot_test(TTG01JD TTG01JD.f) +add_slicot_test(TTG01JY TTG01JY.f) +add_slicot_test(TTG01LD TTG01LD.f) +add_slicot_test(TTG01MD TTG01MD.f) +add_slicot_test(TTG01ND TTG01ND.f) +add_slicot_test(TTG01PD TTG01PD.f) +add_slicot_test(TTG01QD TTG01QD.f) +add_slicot_test(TUD01BD TUD01BD.f) +add_slicot_test(TUD01CD TUD01CD.f) +add_slicot_test(TUD01DD TUD01DD.f) +add_slicot_test(TUD01MD TUD01MD.f) +add_slicot_test(TUD01ND TUD01ND.f) diff --git a/examples/cmake-how-to-example/CMakeLists.txt b/examples/cmake-how-to-example/CMakeLists.txt new file mode 100644 index 0000000..bb9efc1 --- /dev/null +++ b/examples/cmake-how-to-example/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.15) +PROJECT(SLICOTTEST LANGUAGES C Fortran) + +FIND_PACKAGE(SLICOT REQUIRED) + +ADD_EXECUTABLE(TAB01MD TAB01MD.f) +TARGET_LINK_LIBRARIES(TAB01MD SLICOT::slicot) diff --git a/examples/cmake-how-to-example/TAB01MD.f b/examples/cmake-how-to-example/TAB01MD.f new file mode 100644 index 0000000..0c34522 --- /dev/null +++ b/examples/cmake-how-to-example/TAB01MD.f @@ -0,0 +1,69 @@ +* AB01MD EXAMPLE PROGRAM TEXT +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NMAX + PARAMETER ( NMAX = 20 ) + INTEGER LDA, LDZ + PARAMETER ( LDA = NMAX, LDZ = NMAX ) + INTEGER LDWORK + PARAMETER ( LDWORK = NMAX ) +* .. Local Scalars .. + DOUBLE PRECISION TOL + INTEGER I, INFO, J, N, NCONT + CHARACTER*1 JOBZ +* .. Local Arrays .. + DOUBLE PRECISION A(LDA,NMAX), B(NMAX), DWORK(LDWORK), TAU(NMAX), + $ Z(LDZ,NMAX) +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. External Subroutines .. + EXTERNAL AB01MD, DORGQR +* .. Executable Statements .. +* + WRITE ( NOUT, FMT = 99999 ) +* Skip the heading in the data file and read in the data. + READ ( NIN, FMT = '()' ) + READ ( NIN, FMT = * ) N, TOL, JOBZ + IF ( N.LE.0 .OR. N.GT.NMAX ) THEN + WRITE ( NOUT, FMT = 99993 ) N + ELSE + READ ( NIN, FMT = * ) ( ( A(I,J), J = 1,N ), I = 1,N ) + READ ( NIN, FMT = * ) ( B(I), I = 1,N ) +* Find a controllable realization for the given system. + CALL AB01MD( JOBZ, N, A, LDA, B, NCONT, Z, LDZ, TAU, TOL, + $ DWORK, LDWORK, INFO ) +* + IF ( INFO.NE.0 ) THEN + WRITE ( NOUT, FMT = 99998 ) INFO + ELSE + WRITE ( NOUT, FMT = 99997 ) NCONT + DO 20 I = 1, NCONT + WRITE ( NOUT, FMT = 99994 ) ( A(I,J), J = 1,NCONT ) + 20 CONTINUE + WRITE ( NOUT, FMT = 99996 ) ( B(I), I = 1,NCONT ) + IF ( LSAME( JOBZ, 'F' ) ) + $ CALL DORGQR( N, N, N, Z, LDZ, TAU, DWORK, LDWORK, INFO ) + IF ( LSAME( JOBZ, 'F' ).OR.LSAME( JOBZ, 'I' ) ) THEN + WRITE ( NOUT, FMT = 99995 ) + DO 40 I = 1, N + WRITE ( NOUT, FMT = 99994 ) ( Z(I,J), J = 1,N ) + 40 CONTINUE + END IF + END IF + END IF + STOP +* +99999 FORMAT (' AB01MD EXAMPLE PROGRAM RESULTS',/1X) +99998 FORMAT (' INFO on exit from AB01MD = ',I2) +99997 FORMAT (' The order of the controllable state-space representati', + $ 'on = ',I2,//' The state dynamics matrix A of a controlla', + $ 'ble realization is ') +99996 FORMAT (/' The input/state vector B of a controllable realizatio', + $ 'n is ',/(1X,F8.4)) +99995 FORMAT (/' The similarity transformation matrix Z is ') +99994 FORMAT (20(1X,F8.4)) +99993 FORMAT (/' N is out of range.',/' N = ',I5) + END diff --git a/examples/makefile b/examples/makefile index 11f97a0..8e13787 100644 --- a/examples/makefile +++ b/examples/makefile @@ -1,6 +1,6 @@ #################################################################### # SLICOT examples makefile # -# Makefile for generating and running SLICOT Library example # +# Makefile for generating and running SLICOT Library example # # programs on Windows platforms. # # SLICOT, Release 5.8 .\slicot\examples\makefile # # Vasile Sima # @@ -10,7 +10,7 @@ # June 8, 2015, Jan. 2017, Dec. 2022. # #################################################################### # -# This makefile compiles, links, and runs the example programs for +# This makefile compiles, links, and runs the example programs for # the SLICOT Library on Windows platforms. # # Most example programs are written for double precision. @@ -19,7 +19,7 @@ # The executable files are created in the current directory level. # The files with the results have the extension .exa, and are also # created in the current directory level, so they can automatically be -# compared with the .res files provided in this directory. Note that, +# compared with the .res files provided in this directory. Note that, # for some programs, the signs of some matrix elements could differ; # this does not mean erroneous results. Even the values can differ # for some compilers, when rows and/or columns of the matrix results @@ -81,248 +81,248 @@ all: AB01MD.exa AB01ND.exa AB01OD.exa AB04MD.exa AB05MD.exa AB05ND.exa \ TG01JY.exa TG01LD.exa TG01MD.exa TG01ND.exa TG01PD.exa TG01QD.exa \ UD01BD.exa UD01CD.exa UD01DD.exa UD01MD.exa UD01ND.exa -AB01MD.exa: AB01MD.dat TAB01MD.exe; TAB01MD AB01MD.exa -AB01ND.exa: AB01ND.dat TAB01ND.exe; TAB01ND AB01ND.exa -AB01OD.exa: AB01OD.dat TAB01OD.exe; TAB01OD AB01OD.exa -AB04MD.exa: AB04MD.dat TAB04MD.exe; TAB04MD AB04MD.exa -AB05MD.exa: AB05MD.dat TAB05MD.exe; TAB05MD AB05MD.exa -AB05ND.exa: AB05ND.dat TAB05ND.exe; TAB05ND AB05ND.exa -AB05OD.exa: AB05OD.dat TAB05OD.exe; TAB05OD AB05OD.exa -AB05PD.exa: AB05PD.dat TAB05PD.exe; TAB05PD AB05PD.exa -AB05QD.exa: AB05QD.dat TAB05QD.exe; TAB05QD AB05QD.exa -AB05RD.exa: AB05RD.dat TAB05RD.exe; TAB05RD AB05RD.exa -AB07MD.exa: AB07MD.dat TAB07MD.exe; TAB07MD AB07MD.exa -AB07ND.exa: AB07ND.dat TAB07ND.exe; TAB07ND AB07ND.exa -AB08ND.exa: AB08ND.dat TAB08ND.exe; TAB08ND AB08ND.exa -AB08NW.exa: AB08NW.dat TAB08NW.exe; TAB08NW AB08NW.exa -AB08NZ.exa: AB08NZ.dat TAB08NZ.exe; TAB08NZ AB08NZ.exa -AB09AD.exa: AB09AD.dat TAB09AD.exe; TAB09AD AB09AD.exa -AB09BD.exa: AB09BD.dat TAB09BD.exe; TAB09BD AB09BD.exa -AB09CD.exa: AB09CD.dat TAB09CD.exe; TAB09CD AB09CD.exa -AB09DD.exa: AB09DD.dat TAB09DD.exe; TAB09DD AB09DD.exa -AB09ED.exa: AB09ED.dat TAB09ED.exe; TAB09ED AB09ED.exa -AB09FD.exa: AB09FD.dat TAB09FD.exe; TAB09FD AB09FD.exa -AB09GD.exa: AB09GD.dat TAB09GD.exe; TAB09GD AB09GD.exa -AB09HD.exa: AB09HD.dat TAB09HD.exe; TAB09HD AB09HD.exa -AB09ID.exa: AB09ID.dat TAB09ID.exe; TAB09ID AB09ID.exa -AB09JD.exa: AB09JD.dat TAB09JD.exe; TAB09JD AB09JD.exa -AB09KD.exa: AB09KD.dat TAB09KD.exe; TAB09KD AB09KD.exa -AB09MD.exa: AB09MD.dat TAB09MD.exe; TAB09MD AB09MD.exa -AB09ND.exa: AB09ND.dat TAB09ND.exe; TAB09ND AB09ND.exa -AB13AD.exa: AB13AD.dat TAB13AD.exe; TAB13AD AB13AD.exa -AB13BD.exa: AB13BD.dat TAB13BD.exe; TAB13BD AB13BD.exa -AB13CD.exa: AB13CD.dat TAB13CD.exe; TAB13CD AB13CD.exa -AB13DD.exa: AB13DD.dat TAB13DD.exe; TAB13DD AB13DD.exa -AB13ED.exa: AB13ED.dat TAB13ED.exe; TAB13ED AB13ED.exa -AB13FD.exa: AB13FD.dat TAB13FD.exe; TAB13FD AB13FD.exa -AB13ID.exa: AB13ID.dat TAB13ID.exe; TAB13ID AB13ID.exa -AB13MD.exa: AB13MD.dat TAB13MD.exe; TAB13MD AB13MD.exa -AG08BD.exa: AG08BD.dat TAG08BD.exe; TAG08BD AG08BD.exa -AG08BZ.exa: AG08BZ.dat TAG08BZ.exe; TAG08BZ AG08BZ.exa -BB01AD.exa: BB01AD.dat TBB01AD.exe; TBB01AD BB01AD.exa -BB02AD.exa: BB02AD.dat TBB02AD.exe; TBB02AD BB02AD.exa -BB03AD.exa: BB03AD.dat TBB03AD.exe; TBB03AD BB03AD.exa -BB04AD.exa: BB04AD.dat TBB04AD.exe; TBB04AD BB04AD.exa -BD01AD.exa: BD01AD.dat TBD01AD.exe; TBD01AD BD01AD.exa -BD02AD.exa: BD02AD.dat TBD02AD.exe; TBD02AD BD02AD.exa -DE01OD.exa: DE01OD.dat TDE01OD.exe; TDE01OD DE01OD.exa -DE01PD.exa: DE01PD.dat TDE01PD.exe; TDE01PD DE01PD.exa -DF01MD.exa: DF01MD.dat TDF01MD.exe; TDF01MD DF01MD.exa -DG01MD.exa: DG01MD.dat TDG01MD.exe; TDG01MD DG01MD.exa -DG01ND.exa: DG01ND.dat TDG01ND.exe; TDG01ND DG01ND.exa -DG01OD.exa: DG01OD.dat TDG01OD.exe; TDG01OD DG01OD.exa -DK01MD.exa: DK01MD.dat TDK01MD.exe; TDK01MD DK01MD.exa -FB01QD.exa: FB01QD.dat TFB01QD.exe; TFB01QD FB01QD.exa -FB01RD.exa: FB01RD.dat TFB01RD.exe; TFB01RD FB01RD.exa -FB01SD.exa: FB01SD.dat TFB01SD.exe; TFB01SD FB01SD.exa -FB01TD.exa: FB01TD.dat TFB01TD.exe; TFB01TD FB01TD.exa -FB01VD.exa: FB01VD.dat TFB01VD.exe; TFB01VD FB01VD.exa -FD01AD.exa: FD01AD.dat TFD01AD.exe; TFD01AD FD01AD.exa -IB01AD.exa: IB01AD.dat TIB01AD.exe; TIB01AD IB01AD.exa -IB01BD.exa: IB01BD.dat TIB01BD.exe; TIB01BD IB01BD.exa -IB01CD.exa: IB01CD.dat TIB01CD.exe; TIB01CD IB01CD.exa -IB03AD.exa: IB03AD.dat TIB03AD.exe; TIB03AD IB03AD.exa -IB03BD.exa: IB03BD.dat TIB03BD.exe; TIB03BD IB03BD.exa -MB01TD.exa: MB01TD.dat TMB01TD.exe; TMB01TD MB01TD.exa -MB02CD.exa: MB02CD.dat TMB02CD.exe; TMB02CD MB02CD.exa -MB02DD.exa: MB02DD.dat TMB02DD.exe; TMB02DD MB02DD.exa -MB02ED.exa: MB02ED.dat TMB02ED.exe; TMB02ED MB02ED.exa -MB02FD.exa: MB02FD.dat TMB02FD.exe; TMB02FD MB02FD.exa -MB02GD.exa: MB02GD.dat TMB02GD.exe; TMB02GD MB02GD.exa -MB02HD.exa: MB02HD.dat TMB02HD.exe; TMB02HD MB02HD.exa -MB02ID.exa: MB02ID.dat TMB02ID.exe; TMB02ID MB02ID.exa -MB02JD.exa: MB02JD.dat TMB02JD.exe; TMB02JD MB02JD.exa -MB02JX.exa: MB02JX.dat TMB02JX.exe; TMB02JX MB02JX.exa -MB02KD.exa: MB02KD.dat TMB02KD.exe; TMB02KD MB02KD.exa -MB02MD.exa: MB02MD.dat TMB02MD.exe; TMB02MD MB02MD.exa -MB02ND.exa: MB02ND.dat TMB02ND.exe; TMB02ND MB02ND.exa -MB02QD.exa: MB02QD.dat TMB02QD.exe; TMB02QD MB02QD.exa -MB02SD.exa: MB02SD.dat TMB02SD.exe; TMB02SD MB02SD.exa -MB02VD.exa: MB02VD.dat TMB02VD.exe; TMB02VD MB02VD.exa -MB03BD.exa: MB03BD.dat TMB03BD.exe; TMB03BD MB03BD.exa -MB03BZ.exa: MB03BZ.dat TMB03BZ.exe; TMB03BZ MB03BZ.exa -MB03FZ.exa: MB03FZ.dat TMB03FZ.exe; TMB03FZ MB03FZ.exa -MB03KD.exa: MB03KD.dat TMB03KD.exe; TMB03KD MB03KD.exa -MB03LD.exa: MB03LD.dat TMB03LD.exe; TMB03LD MB03LD.exa -MB03LF.exa: MB03LF.dat TMB03LF.exe; TMB03LF MB03LF.exa -MB03LZ.exa: MB03LZ.dat TMB03LZ.exe; TMB03LZ MB03LZ.exa -MB03MD.exa: MB03MD.dat TMB03MD.exe; TMB03MD MB03MD.exa -MB03ND.exa: MB03ND.dat TMB03ND.exe; TMB03ND MB03ND.exa -MB03OD.exa: MB03OD.dat TMB03OD.exe; TMB03OD MB03OD.exa -MB03PD.exa: MB03PD.dat TMB03PD.exe; TMB03PD MB03PD.exa -MB03QD.exa: MB03QD.dat TMB03QD.exe; TMB03QD MB03QD.exa -MB03QG.exa: MB03QG.dat TMB03QG.exe; TMB03QG MB03QG.exa -MB03RD.exa: MB03RD.dat TMB03RD.exe; TMB03RD MB03RD.exa -MB03SD.exa: MB03SD.dat TMB03SD.exe; TMB03SD MB03SD.exa -MB03TD.exa: MB03TD.dat TMB03TD.exe; TMB03TD MB03TD.exa -MB03UD.exa: MB03UD.dat TMB03UD.exe; TMB03UD MB03UD.exa -MB03VD.exa: MB03VD.dat TMB03VD.exe; TMB03VD MB03VD.exa -MB03WD.exa: MB03WD.dat TMB03WD.exe; TMB03WD MB03WD.exa -MB03XD.exa: MB03XD.dat TMB03XD.exe; TMB03XD MB03XD.exa -MB03XP.exa: MB03XP.dat TMB03XP.exe; TMB03XP MB03XP.exa -MB03XZ.exa: MB03XZ.dat TMB03XZ.exe; TMB03XZ MB03XZ.exa -MB03ZD.exa: MB03ZD.dat TMB03ZD.exe; TMB03ZD MB03ZD.exa -MB04AD.exa: MB04AD.dat TMB04AD.exe; TMB04AD MB04AD.exa -MB04AZ.exa: MB04AZ.dat TMB04AZ.exe; TMB04AZ MB04AZ.exa -MB04BD.exa: MB04BD.dat TMB04BD.exe; TMB04BD MB04BD.exa -MB04BZ.exa: MB04BZ.dat TMB04BZ.exe; TMB04BZ MB04BZ.exa -MB04DD.exa: MB04DD.dat TMB04DD.exe; TMB04DD MB04DD.exa -MB04DL.exa: MB04DL.dat TMB04DL.exe; TMB04DL MB04DL.exa -MB4DLZ.exa: MB4DLZ.dat TMB4DLZ.exe; TMB4DLZ MB4DLZ.exa -MB04DP.exa: MB04DP.dat TMB04DP.exe; TMB04DP MB04DP.exa -MB4DPZ.exa: MB4DPZ.dat TMB4DPZ.exe; TMB4DPZ MB4DPZ.exa -MB04DS.exa: MB04DS.dat TMB04DS.exe; TMB04DS MB04DS.exa -MB04DY.exa: MB04DY.dat TMB04DY.exe; TMB04DY MB04DY.exa -MB04DZ.exa: MB04DZ.dat TMB04DZ.exe; TMB04DZ MB04DZ.exa -MB04ED.exa: MB04ED.dat TMB04ED.exe; TMB04ED MB04ED.exa -MB04FD.exa: MB04FD.dat TMB04FD.exe; TMB04FD MB04FD.exa -MB04GD.exa: MB04GD.dat TMB04GD.exe; TMB04GD MB04GD.exa -MB04MD.exa: MB04MD.dat TMB04MD.exe; TMB04MD MB04MD.exa -MB04OD.exa: MB04OD.dat TMB04OD.exe; TMB04OD MB04OD.exa -MB04PB.exa: MB04PB.dat TMB04PB.exe; TMB04PB MB04PB.exa -MB04PU.exa: MB04PU.dat TMB04PU.exe; TMB04PU MB04PU.exa -MB04TB.exa: MB04TB.dat TMB04TB.exe; TMB04TB MB04TB.exa -MB04TS.exa: MB04TS.dat TMB04TS.exe; TMB04TS MB04TS.exa -MB04UD.exa: MB04UD.dat TMB04UD.exe; TMB04UD MB04UD.exa -MB04VD.exa: MB04VD.dat TMB04VD.exe; TMB04VD MB04VD.exa -MB04XD.exa: MB04XD.dat TMB04XD.exe; TMB04XD MB04XD.exa -MB04YD.exa: MB04YD.dat TMB04YD.exe; TMB04YD MB04YD.exa -MB04ZD.exa: MB04ZD.dat TMB04ZD.exe; TMB04ZD MB04ZD.exa -MB05MD.exa: MB05MD.dat TMB05MD.exe; TMB05MD MB05MD.exa -MB05ND.exa: MB05ND.dat TMB05ND.exe; TMB05ND MB05ND.exa -MB05OD.exa: MB05OD.dat TMB05OD.exe; TMB05OD MB05OD.exa -MC01MD.exa: MC01MD.dat TMC01MD.exe; TMC01MD MC01MD.exa -MC01ND.exa: MC01ND.dat TMC01ND.exe; TMC01ND MC01ND.exa -MC01OD.exa: MC01OD.dat TMC01OD.exe; TMC01OD MC01OD.exa -MC01PD.exa: MC01PD.dat TMC01PD.exe; TMC01PD MC01PD.exa -MC01QD.exa: MC01QD.dat TMC01QD.exe; TMC01QD MC01QD.exa -MC01RD.exa: MC01RD.dat TMC01RD.exe; TMC01RD MC01RD.exa -MC01SD.exa: MC01SD.dat TMC01SD.exe; TMC01SD MC01SD.exa -MC01TD.exa: MC01TD.dat TMC01TD.exe; TMC01TD MC01TD.exa -MC01VD.exa: MC01VD.dat TMC01VD.exe; TMC01VD MC01VD.exa -MC01WD.exa: MC01WD.dat TMC01WD.exe; TMC01WD MC01WD.exa -MC01XD.exa: MC01XD.dat TMC01XD.exe; TMC01XD MC01XD.exa -MC03MD.exa: MC03MD.dat TMC03MD.exe; TMC03MD MC03MD.exa -MC03ND.exa: MC03ND.dat TMC03ND.exe; TMC03ND MC03ND.exa -MD03AD.exa: MD03AD.dat TMD03AD.exe; TMD03AD MD03AD.exa -MD03BD.exa: MD03BD.dat TMD03BD.exe; TMD03BD MD03BD.exa -SB01BD.exa: SB01BD.dat TSB01BD.exe; TSB01BD SB01BD.exa -SB01DD.exa: SB01DD.dat TSB01DD.exe; TSB01DD SB01DD.exa -SB01MD.exa: SB01MD.dat TSB01MD.exe; TSB01MD SB01MD.exa -SB02MD.exa: SB02MD.dat TSB02MD.exe; TSB02MD SB02MD.exa -SB02ND.exa: SB02ND.dat TSB02ND.exe; TSB02ND SB02ND.exa -SB02OD.exa: SB02OD.dat TSB02OD.exe; TSB02OD SB02OD.exa -SB02PD.exa: SB02PD.dat TSB02PD.exe; TSB02PD SB02PD.exa -SB02QD.exa: SB02QD.dat TSB02QD.exe; TSB02QD SB02QD.exa -SB02RD.exa: SB02RD.dat TSB02RD.exe; TSB02RD SB02RD.exa -SB02SD.exa: SB02SD.dat TSB02SD.exe; TSB02SD SB02SD.exa -SB03MD.exa: SB03MD.dat TSB03MD.exe; TSB03MD SB03MD.exa -SB03OD.exa: SB03OD.dat TSB03OD.exe; TSB03OD SB03OD.exa -SB03QD.exa: SB03QD.dat TSB03QD.exe; TSB03QD SB03QD.exa -SB03SD.exa: SB03SD.dat TSB03SD.exe; TSB03SD SB03SD.exa -SB03TD.exa: SB03TD.dat TSB03TD.exe; TSB03TD SB03TD.exa -SB03UD.exa: SB03UD.dat TSB03UD.exe; TSB03UD SB03UD.exa -SB04MD.exa: SB04MD.dat TSB04MD.exe; TSB04MD SB04MD.exa -SB04ND.exa: SB04ND.dat TSB04ND.exe; TSB04ND SB04ND.exa -SB04OD.exa: SB04OD.dat TSB04OD.exe; TSB04OD SB04OD.exa -SB04PD.exa: SB04PD.dat TSB04PD.exe; TSB04PD SB04PD.exa -SB04QD.exa: SB04QD.dat TSB04QD.exe; TSB04QD SB04QD.exa -SB04RD.exa: SB04RD.dat TSB04RD.exe; TSB04RD SB04RD.exa -SB06ND.exa: SB06ND.dat TSB06ND.exe; TSB06ND SB06ND.exa -SB08CD.exa: SB08CD.dat TSB08CD.exe; TSB08CD SB08CD.exa -SB08DD.exa: SB08DD.dat TSB08DD.exe; TSB08DD SB08DD.exa -SB08ED.exa: SB08ED.dat TSB08ED.exe; TSB08ED SB08ED.exa -SB08FD.exa: SB08FD.dat TSB08FD.exe; TSB08FD SB08FD.exa -SB08MD.exa: SB08MD.dat TSB08MD.exe; TSB08MD SB08MD.exa -SB08ND.exa: SB08ND.dat TSB08ND.exe; TSB08ND SB08ND.exa -SB09MD.exa: SB09MD.dat TSB09MD.exe; TSB09MD SB09MD.exa -SB10DD.exa: SB10DD.dat TSB10DD.exe; TSB10DD SB10DD.exa -SB10ED.exa: SB10ED.dat TSB10ED.exe; TSB10ED SB10ED.exa -SB10FD.exa: SB10FD.dat TSB10FD.exe; TSB10FD SB10FD.exa -SB10HD.exa: SB10HD.dat TSB10HD.exe; TSB10HD SB10HD.exa -SB10ID.exa: SB10ID.dat TSB10ID.exe; TSB10ID SB10ID.exa -SB10KD.exa: SB10KD.dat TSB10KD.exe; TSB10KD SB10KD.exa -SB10ZD.exa: SB10ZD.dat TSB10ZD.exe; TSB10ZD SB10ZD.exa -SB16AD.exa: SB16AD.dat TSB16AD.exe; TSB16AD SB16AD.exa -SB16BD.exa: SB16BD.dat TSB16BD.exe; TSB16BD SB16BD.exa -SB16CD.exa: SB16CD.dat TSB16CD.exe; TSB16CD SB16CD.exa -SG02AD.exa: SG02AD.dat TSG02AD.exe; TSG02AD SG02AD.exa -SG02ND.exa: SG02ND.dat TSG02ND.exe; TSG02ND SG02ND.exa -SG03AD.exa: SG03AD.dat TSG03AD.exe; TSG03AD SG03AD.exa -SG03BD.exa: SG03BD.dat TSG03BD.exe; TSG03BD SG03BD.exa -TB01ID.exa: TB01ID.dat TTB01ID.exe; TTB01ID TB01ID.exa -TB01IZ.exa: TB01IZ.dat TTB01IZ.exe; TTB01IZ TB01IZ.exa -TB01KD.exa: TB01KD.dat TTB01KD.exe; TTB01KD TB01KD.exa -TB01LD.exa: TB01LD.dat TTB01LD.exe; TTB01LD TB01LD.exa -TB01MD.exa: TB01MD.dat TTB01MD.exe; TTB01MD TB01MD.exa -TB01ND.exa: TB01ND.dat TTB01ND.exe; TTB01ND TB01ND.exa -TB01PD.exa: TB01PD.dat TTB01PD.exe; TTB01PD TB01PD.exa -TB01PX.exa: TB01PX.dat TTB01PX.exe; TTB01PX TB01PX.exa -TB01TD.exa: TB01TD.dat TTB01TD.exe; TTB01TD TB01TD.exa -TB01UD.exa: TB01UD.dat TTB01UD.exe; TTB01UD TB01UD.exa -TB01UY.exa: TB01UY.dat TTB01UY.exe; TTB01UY TB01UY.exa -TB01WD.exa: TB01WD.dat TTB01WD.exe; TTB01WD TB01WD.exa -TB01WX.exa: TB01WX.dat TTB01WX.exe; TTB01WX TB01WX.exa -TB01ZD.exa: TB01ZD.dat TTB01ZD.exe; TTB01ZD TB01ZD.exa -TB03AD.exa: TB03AD.dat TTB03AD.exe; TTB03AD TB03AD.exa -TB04AD.exa: TB04AD.dat TTB04AD.exe; TTB04AD TB04AD.exa -TB04BD.exa: TB04BD.dat TTB04BD.exe; TTB04BD TB04BD.exa -TB04CD.exa: TB04CD.dat TTB04CD.exe; TTB04CD TB04CD.exa -TB05AD.exa: TB05AD.dat TTB05AD.exe; TTB05AD TB05AD.exa -TC01OD.exa: TC01OD.dat TTC01OD.exe; TTC01OD TC01OD.exa -TC04AD.exa: TC04AD.dat TTC04AD.exe; TTC04AD TC04AD.exa -TC05AD.exa: TC05AD.dat TTC05AD.exe; TTC05AD TC05AD.exa -TD03AD.exa: TD03AD.dat TTD03AD.exe; TTD03AD TD03AD.exa -TD04AD.exa: TD04AD.dat TTD04AD.exe; TTD04AD TD04AD.exa -TD05AD.exa: TD05AD.dat TTD05AD.exe; TTD05AD TD05AD.exa -TF01MD.exa: TF01MD.dat TTF01MD.exe; TTF01MD TF01MD.exa -TF01ND.exa: TF01ND.dat TTF01ND.exe; TTF01ND TF01ND.exa -TF01OD.exa: TF01OD.dat TTF01OD.exe; TTF01OD TF01OD.exa -TF01PD.exa: TF01PD.dat TTF01PD.exe; TTF01PD TF01PD.exa -TF01QD.exa: TF01QD.dat TTF01QD.exe; TTF01QD TF01QD.exa -TF01RD.exa: TF01RD.dat TTF01RD.exe; TTF01RD TF01RD.exa -TG01AD.exa: TG01AD.dat TTG01AD.exe; TTG01AD TG01AD.exa -TG01AZ.exa: TG01AZ.dat TTG01AZ.exe; TTG01AZ TG01AZ.exa -TG01CD.exa: TG01CD.dat TTG01CD.exe; TTG01CD TG01CD.exa -TG01DD.exa: TG01DD.dat TTG01DD.exe; TTG01DD TG01DD.exa -TG01ED.exa: TG01ED.dat TTG01ED.exe; TTG01ED TG01ED.exa -TG01FD.exa: TG01FD.dat TTG01FD.exe; TTG01FD TG01FD.exa -TG01FZ.exa: TG01FZ.dat TTG01FZ.exe; TTG01FZ TG01FZ.exa -TG01GD.exa: TG01GD.dat TTG01GD.exe; TTG01GD TG01GD.exa -TG01HD.exa: TG01HD.dat TTG01HD.exe; TTG01HD TG01HD.exa -TG01ID.exa: TG01ID.dat TTG01ID.exe; TTG01ID TG01ID.exa -TG01JD.exa: TG01JD.dat TTG01JD.exe; TTG01JD TG01JD.exa -TG01JY.exa: TG01JY.dat TTG01JY.exe; TTG01JY TG01JY.exa -TG01LD.exa: TG01LD.dat TTG01LD.exe; TTG01LD TG01LD.exa -TG01MD.exa: TG01MD.dat TTG01MD.exe; TTG01MD TG01MD.exa -TG01ND.exa: TG01ND.dat TTG01ND.exe; TTG01ND TG01ND.exa -TG01PD.exa: TG01PD.dat TTG01PD.exe; TTG01PD TG01PD.exa -TG01QD.exa: TG01QD.dat TTG01QD.exe; TTG01QD TG01QD.exa -UD01BD.exa: UD01BD.dat TUD01BD.exe; TUD01BD UD01BD.exa -UD01CD.exa: UD01CD.dat TUD01CD.exe; TUD01CD UD01CD.exa -UD01DD.exa: UD01DD.dat TUD01DD.exe; TUD01DD UD01DD.exa -UD01MD.exa: UD01MD.dat TUD01MD.exe; TUD01MD UD01MD.exa -UD01ND.exa: UD01ND.dat TUD01ND.exe; TUD01ND UD01ND.exa +AB01MD.exa: data\AB01MD.dat TAB01MD.exe; TAB01MD AB01MD.exa +AB01ND.exa: data\AB01ND.dat TAB01ND.exe; TAB01ND AB01ND.exa +AB01OD.exa: data\AB01OD.dat TAB01OD.exe; TAB01OD AB01OD.exa +AB04MD.exa: data\AB04MD.dat TAB04MD.exe; TAB04MD AB04MD.exa +AB05MD.exa: data\AB05MD.dat TAB05MD.exe; TAB05MD AB05MD.exa +AB05ND.exa: data\AB05ND.dat TAB05ND.exe; TAB05ND AB05ND.exa +AB05OD.exa: data\AB05OD.dat TAB05OD.exe; TAB05OD AB05OD.exa +AB05PD.exa: data\AB05PD.dat TAB05PD.exe; TAB05PD AB05PD.exa +AB05QD.exa: data\AB05QD.dat TAB05QD.exe; TAB05QD AB05QD.exa +AB05RD.exa: data\AB05RD.dat TAB05RD.exe; TAB05RD AB05RD.exa +AB07MD.exa: data\AB07MD.dat TAB07MD.exe; TAB07MD AB07MD.exa +AB07ND.exa: data\AB07ND.dat TAB07ND.exe; TAB07ND AB07ND.exa +AB08ND.exa: data\AB08ND.dat TAB08ND.exe; TAB08ND AB08ND.exa +AB08NW.exa: data\AB08NW.dat TAB08NW.exe; TAB08NW AB08NW.exa +AB08NZ.exa: data\AB08NZ.dat TAB08NZ.exe; TAB08NZ AB08NZ.exa +AB09AD.exa: data\AB09AD.dat TAB09AD.exe; TAB09AD AB09AD.exa +AB09BD.exa: data\AB09BD.dat TAB09BD.exe; TAB09BD AB09BD.exa +AB09CD.exa: data\AB09CD.dat TAB09CD.exe; TAB09CD AB09CD.exa +AB09DD.exa: data\AB09DD.dat TAB09DD.exe; TAB09DD AB09DD.exa +AB09ED.exa: data\AB09ED.dat TAB09ED.exe; TAB09ED AB09ED.exa +AB09FD.exa: data\AB09FD.dat TAB09FD.exe; TAB09FD AB09FD.exa +AB09GD.exa: data\AB09GD.dat TAB09GD.exe; TAB09GD AB09GD.exa +AB09HD.exa: data\AB09HD.dat TAB09HD.exe; TAB09HD AB09HD.exa +AB09ID.exa: data\AB09ID.dat TAB09ID.exe; TAB09ID AB09ID.exa +AB09JD.exa: data\AB09JD.dat TAB09JD.exe; TAB09JD AB09JD.exa +AB09KD.exa: data\AB09KD.dat TAB09KD.exe; TAB09KD AB09KD.exa +AB09MD.exa: data\AB09MD.dat TAB09MD.exe; TAB09MD AB09MD.exa +AB09ND.exa: data\AB09ND.dat TAB09ND.exe; TAB09ND AB09ND.exa +AB13AD.exa: data\AB13AD.dat TAB13AD.exe; TAB13AD AB13AD.exa +AB13BD.exa: data\AB13BD.dat TAB13BD.exe; TAB13BD AB13BD.exa +AB13CD.exa: data\AB13CD.dat TAB13CD.exe; TAB13CD AB13CD.exa +AB13DD.exa: data\AB13DD.dat TAB13DD.exe; TAB13DD AB13DD.exa +AB13ED.exa: data\AB13ED.dat TAB13ED.exe; TAB13ED AB13ED.exa +AB13FD.exa: data\AB13FD.dat TAB13FD.exe; TAB13FD AB13FD.exa +AB13ID.exa: data\AB13ID.dat TAB13ID.exe; TAB13ID AB13ID.exa +AB13MD.exa: data\AB13MD.dat TAB13MD.exe; TAB13MD AB13MD.exa +AG08BD.exa: data\AG08BD.dat TAG08BD.exe; TAG08BD AG08BD.exa +AG08BZ.exa: data\AG08BZ.dat TAG08BZ.exe; TAG08BZ AG08BZ.exa +BB01AD.exa: data\BB01AD.dat TBB01AD.exe; TBB01AD BB01AD.exa +BB02AD.exa: data\BB02AD.dat TBB02AD.exe; TBB02AD BB02AD.exa +BB03AD.exa: data\BB03AD.dat TBB03AD.exe; TBB03AD BB03AD.exa +BB04AD.exa: data\BB04AD.dat TBB04AD.exe; TBB04AD BB04AD.exa +BD01AD.exa: data\BD01AD.dat TBD01AD.exe; TBD01AD BD01AD.exa +BD02AD.exa: data\BD02AD.dat TBD02AD.exe; TBD02AD BD02AD.exa +DE01OD.exa: data\DE01OD.dat TDE01OD.exe; TDE01OD DE01OD.exa +DE01PD.exa: data\DE01PD.dat TDE01PD.exe; TDE01PD DE01PD.exa +DF01MD.exa: data\DF01MD.dat TDF01MD.exe; TDF01MD DF01MD.exa +DG01MD.exa: data\DG01MD.dat TDG01MD.exe; TDG01MD DG01MD.exa +DG01ND.exa: data\DG01ND.dat TDG01ND.exe; TDG01ND DG01ND.exa +DG01OD.exa: data\DG01OD.dat TDG01OD.exe; TDG01OD DG01OD.exa +DK01MD.exa: data\DK01MD.dat TDK01MD.exe; TDK01MD DK01MD.exa +FB01QD.exa: data\FB01QD.dat TFB01QD.exe; TFB01QD FB01QD.exa +FB01RD.exa: data\FB01RD.dat TFB01RD.exe; TFB01RD FB01RD.exa +FB01SD.exa: data\FB01SD.dat TFB01SD.exe; TFB01SD FB01SD.exa +FB01TD.exa: data\FB01TD.dat TFB01TD.exe; TFB01TD FB01TD.exa +FB01VD.exa: data\FB01VD.dat TFB01VD.exe; TFB01VD FB01VD.exa +FD01AD.exa: data\FD01AD.dat TFD01AD.exe; TFD01AD FD01AD.exa +IB01AD.exa: data\IB01AD.dat TIB01AD.exe; TIB01AD IB01AD.exa +IB01BD.exa: data\IB01BD.dat TIB01BD.exe; TIB01BD IB01BD.exa +IB01CD.exa: data\IB01CD.dat TIB01CD.exe; TIB01CD IB01CD.exa +IB03AD.exa: data\IB03AD.dat TIB03AD.exe; TIB03AD IB03AD.exa +IB03BD.exa: data\IB03BD.dat TIB03BD.exe; TIB03BD IB03BD.exa +MB01TD.exa: data\MB01TD.dat TMB01TD.exe; TMB01TD MB01TD.exa +MB02CD.exa: data\MB02CD.dat TMB02CD.exe; TMB02CD MB02CD.exa +MB02DD.exa: data\MB02DD.dat TMB02DD.exe; TMB02DD MB02DD.exa +MB02ED.exa: data\MB02ED.dat TMB02ED.exe; TMB02ED MB02ED.exa +MB02FD.exa: data\MB02FD.dat TMB02FD.exe; TMB02FD MB02FD.exa +MB02GD.exa: data\MB02GD.dat TMB02GD.exe; TMB02GD MB02GD.exa +MB02HD.exa: data\MB02HD.dat TMB02HD.exe; TMB02HD MB02HD.exa +MB02ID.exa: data\MB02ID.dat TMB02ID.exe; TMB02ID MB02ID.exa +MB02JD.exa: data\MB02JD.dat TMB02JD.exe; TMB02JD MB02JD.exa +MB02JX.exa: data\MB02JX.dat TMB02JX.exe; TMB02JX MB02JX.exa +MB02KD.exa: data\MB02KD.dat TMB02KD.exe; TMB02KD MB02KD.exa +MB02MD.exa: data\MB02MD.dat TMB02MD.exe; TMB02MD MB02MD.exa +MB02ND.exa: data\MB02ND.dat TMB02ND.exe; TMB02ND MB02ND.exa +MB02QD.exa: data\MB02QD.dat TMB02QD.exe; TMB02QD MB02QD.exa +MB02SD.exa: data\MB02SD.dat TMB02SD.exe; TMB02SD MB02SD.exa +MB02VD.exa: data\MB02VD.dat TMB02VD.exe; TMB02VD MB02VD.exa +MB03BD.exa: data\MB03BD.dat TMB03BD.exe; TMB03BD MB03BD.exa +MB03BZ.exa: data\MB03BZ.dat TMB03BZ.exe; TMB03BZ MB03BZ.exa +MB03FZ.exa: data\MB03FZ.dat TMB03FZ.exe; TMB03FZ MB03FZ.exa +MB03KD.exa: data\MB03KD.dat TMB03KD.exe; TMB03KD MB03KD.exa +MB03LD.exa: data\MB03LD.dat TMB03LD.exe; TMB03LD MB03LD.exa +MB03LF.exa: data\MB03LF.dat TMB03LF.exe; TMB03LF MB03LF.exa +MB03LZ.exa: data\MB03LZ.dat TMB03LZ.exe; TMB03LZ MB03LZ.exa +MB03MD.exa: data\MB03MD.dat TMB03MD.exe; TMB03MD MB03MD.exa +MB03ND.exa: data\MB03ND.dat TMB03ND.exe; TMB03ND MB03ND.exa +MB03OD.exa: data\MB03OD.dat TMB03OD.exe; TMB03OD MB03OD.exa +MB03PD.exa: data\MB03PD.dat TMB03PD.exe; TMB03PD MB03PD.exa +MB03QD.exa: data\MB03QD.dat TMB03QD.exe; TMB03QD MB03QD.exa +MB03QG.exa: data\MB03QG.dat TMB03QG.exe; TMB03QG MB03QG.exa +MB03RD.exa: data\MB03RD.dat TMB03RD.exe; TMB03RD MB03RD.exa +MB03SD.exa: data\MB03SD.dat TMB03SD.exe; TMB03SD MB03SD.exa +MB03TD.exa: data\MB03TD.dat TMB03TD.exe; TMB03TD MB03TD.exa +MB03UD.exa: data\MB03UD.dat TMB03UD.exe; TMB03UD MB03UD.exa +MB03VD.exa: data\MB03VD.dat TMB03VD.exe; TMB03VD MB03VD.exa +MB03WD.exa: data\MB03WD.dat TMB03WD.exe; TMB03WD MB03WD.exa +MB03XD.exa: data\MB03XD.dat TMB03XD.exe; TMB03XD MB03XD.exa +MB03XP.exa: data\MB03XP.dat TMB03XP.exe; TMB03XP MB03XP.exa +MB03XZ.exa: data\MB03XZ.dat TMB03XZ.exe; TMB03XZ MB03XZ.exa +MB03ZD.exa: data\MB03ZD.dat TMB03ZD.exe; TMB03ZD MB03ZD.exa +MB04AD.exa: data\MB04AD.dat TMB04AD.exe; TMB04AD MB04AD.exa +MB04AZ.exa: data\MB04AZ.dat TMB04AZ.exe; TMB04AZ MB04AZ.exa +MB04BD.exa: data\MB04BD.dat TMB04BD.exe; TMB04BD MB04BD.exa +MB04BZ.exa: data\MB04BZ.dat TMB04BZ.exe; TMB04BZ MB04BZ.exa +MB04DD.exa: data\MB04DD.dat TMB04DD.exe; TMB04DD MB04DD.exa +MB04DL.exa: data\MB04DL.dat TMB04DL.exe; TMB04DL MB04DL.exa +MB4DLZ.exa: data\MB4DLZ.dat TMB4DLZ.exe; TMB4DLZ MB4DLZ.exa +MB04DP.exa: data\MB04DP.dat TMB04DP.exe; TMB04DP MB04DP.exa +MB4DPZ.exa: data\MB4DPZ.dat TMB4DPZ.exe; TMB4DPZ MB4DPZ.exa +MB04DS.exa: data\MB04DS.dat TMB04DS.exe; TMB04DS MB04DS.exa +MB04DY.exa: data\MB04DY.dat TMB04DY.exe; TMB04DY MB04DY.exa +MB04DZ.exa: data\MB04DZ.dat TMB04DZ.exe; TMB04DZ MB04DZ.exa +MB04ED.exa: data\MB04ED.dat TMB04ED.exe; TMB04ED MB04ED.exa +MB04FD.exa: data\MB04FD.dat TMB04FD.exe; TMB04FD MB04FD.exa +MB04GD.exa: data\MB04GD.dat TMB04GD.exe; TMB04GD MB04GD.exa +MB04MD.exa: data\MB04MD.dat TMB04MD.exe; TMB04MD MB04MD.exa +MB04OD.exa: data\MB04OD.dat TMB04OD.exe; TMB04OD MB04OD.exa +MB04PB.exa: data\MB04PB.dat TMB04PB.exe; TMB04PB MB04PB.exa +MB04PU.exa: data\MB04PU.dat TMB04PU.exe; TMB04PU MB04PU.exa +MB04TB.exa: data\MB04TB.dat TMB04TB.exe; TMB04TB MB04TB.exa +MB04TS.exa: data\MB04TS.dat TMB04TS.exe; TMB04TS MB04TS.exa +MB04UD.exa: data\MB04UD.dat TMB04UD.exe; TMB04UD MB04UD.exa +MB04VD.exa: data\MB04VD.dat TMB04VD.exe; TMB04VD MB04VD.exa +MB04XD.exa: data\MB04XD.dat TMB04XD.exe; TMB04XD MB04XD.exa +MB04YD.exa: data\MB04YD.dat TMB04YD.exe; TMB04YD MB04YD.exa +MB04ZD.exa: data\MB04ZD.dat TMB04ZD.exe; TMB04ZD MB04ZD.exa +MB05MD.exa: data\MB05MD.dat TMB05MD.exe; TMB05MD MB05MD.exa +MB05ND.exa: data\MB05ND.dat TMB05ND.exe; TMB05ND MB05ND.exa +MB05OD.exa: data\MB05OD.dat TMB05OD.exe; TMB05OD MB05OD.exa +MC01MD.exa: data\MC01MD.dat TMC01MD.exe; TMC01MD MC01MD.exa +MC01ND.exa: data\MC01ND.dat TMC01ND.exe; TMC01ND MC01ND.exa +MC01OD.exa: data\MC01OD.dat TMC01OD.exe; TMC01OD MC01OD.exa +MC01PD.exa: data\MC01PD.dat TMC01PD.exe; TMC01PD MC01PD.exa +MC01QD.exa: data\MC01QD.dat TMC01QD.exe; TMC01QD MC01QD.exa +MC01RD.exa: data\MC01RD.dat TMC01RD.exe; TMC01RD MC01RD.exa +MC01SD.exa: data\MC01SD.dat TMC01SD.exe; TMC01SD MC01SD.exa +MC01TD.exa: data\MC01TD.dat TMC01TD.exe; TMC01TD MC01TD.exa +MC01VD.exa: data\MC01VD.dat TMC01VD.exe; TMC01VD MC01VD.exa +MC01WD.exa: data\MC01WD.dat TMC01WD.exe; TMC01WD MC01WD.exa +MC01XD.exa: data\MC01XD.dat TMC01XD.exe; TMC01XD MC01XD.exa +MC03MD.exa: data\MC03MD.dat TMC03MD.exe; TMC03MD MC03MD.exa +MC03ND.exa: data\MC03ND.dat TMC03ND.exe; TMC03ND MC03ND.exa +MD03AD.exa: data\MD03AD.dat TMD03AD.exe; TMD03AD MD03AD.exa +MD03BD.exa: data\MD03BD.dat TMD03BD.exe; TMD03BD MD03BD.exa +SB01BD.exa: data\SB01BD.dat TSB01BD.exe; TSB01BD SB01BD.exa +SB01DD.exa: data\SB01DD.dat TSB01DD.exe; TSB01DD SB01DD.exa +SB01MD.exa: data\SB01MD.dat TSB01MD.exe; TSB01MD SB01MD.exa +SB02MD.exa: data\SB02MD.dat TSB02MD.exe; TSB02MD SB02MD.exa +SB02ND.exa: data\SB02ND.dat TSB02ND.exe; TSB02ND SB02ND.exa +SB02OD.exa: data\SB02OD.dat TSB02OD.exe; TSB02OD SB02OD.exa +SB02PD.exa: data\SB02PD.dat TSB02PD.exe; TSB02PD SB02PD.exa +SB02QD.exa: data\SB02QD.dat TSB02QD.exe; TSB02QD SB02QD.exa +SB02RD.exa: data\SB02RD.dat TSB02RD.exe; TSB02RD SB02RD.exa +SB02SD.exa: data\SB02SD.dat TSB02SD.exe; TSB02SD SB02SD.exa +SB03MD.exa: data\SB03MD.dat TSB03MD.exe; TSB03MD SB03MD.exa +SB03OD.exa: data\SB03OD.dat TSB03OD.exe; TSB03OD SB03OD.exa +SB03QD.exa: data\SB03QD.dat TSB03QD.exe; TSB03QD SB03QD.exa +SB03SD.exa: data\SB03SD.dat TSB03SD.exe; TSB03SD SB03SD.exa +SB03TD.exa: data\SB03TD.dat TSB03TD.exe; TSB03TD SB03TD.exa +SB03UD.exa: data\SB03UD.dat TSB03UD.exe; TSB03UD SB03UD.exa +SB04MD.exa: data\SB04MD.dat TSB04MD.exe; TSB04MD SB04MD.exa +SB04ND.exa: data\SB04ND.dat TSB04ND.exe; TSB04ND SB04ND.exa +SB04OD.exa: data\SB04OD.dat TSB04OD.exe; TSB04OD SB04OD.exa +SB04PD.exa: data\SB04PD.dat TSB04PD.exe; TSB04PD SB04PD.exa +SB04QD.exa: data\SB04QD.dat TSB04QD.exe; TSB04QD SB04QD.exa +SB04RD.exa: data\SB04RD.dat TSB04RD.exe; TSB04RD SB04RD.exa +SB06ND.exa: data\SB06ND.dat TSB06ND.exe; TSB06ND SB06ND.exa +SB08CD.exa: data\SB08CD.dat TSB08CD.exe; TSB08CD SB08CD.exa +SB08DD.exa: data\SB08DD.dat TSB08DD.exe; TSB08DD SB08DD.exa +SB08ED.exa: data\SB08ED.dat TSB08ED.exe; TSB08ED SB08ED.exa +SB08FD.exa: data\SB08FD.dat TSB08FD.exe; TSB08FD SB08FD.exa +SB08MD.exa: data\SB08MD.dat TSB08MD.exe; TSB08MD SB08MD.exa +SB08ND.exa: data\SB08ND.dat TSB08ND.exe; TSB08ND SB08ND.exa +SB09MD.exa: data\SB09MD.dat TSB09MD.exe; TSB09MD SB09MD.exa +SB10DD.exa: data\SB10DD.dat TSB10DD.exe; TSB10DD SB10DD.exa +SB10ED.exa: data\SB10ED.dat TSB10ED.exe; TSB10ED SB10ED.exa +SB10FD.exa: data\SB10FD.dat TSB10FD.exe; TSB10FD SB10FD.exa +SB10HD.exa: data\SB10HD.dat TSB10HD.exe; TSB10HD SB10HD.exa +SB10ID.exa: data\SB10ID.dat TSB10ID.exe; TSB10ID SB10ID.exa +SB10KD.exa: data\SB10KD.dat TSB10KD.exe; TSB10KD SB10KD.exa +SB10ZD.exa: data\SB10ZD.dat TSB10ZD.exe; TSB10ZD SB10ZD.exa +SB16AD.exa: data\SB16AD.dat TSB16AD.exe; TSB16AD SB16AD.exa +SB16BD.exa: data\SB16BD.dat TSB16BD.exe; TSB16BD SB16BD.exa +SB16CD.exa: data\SB16CD.dat TSB16CD.exe; TSB16CD SB16CD.exa +SG02AD.exa: data\SG02AD.dat TSG02AD.exe; TSG02AD SG02AD.exa +SG02ND.exa: data\SG02ND.dat TSG02ND.exe; TSG02ND SG02ND.exa +SG03AD.exa: data\SG03AD.dat TSG03AD.exe; TSG03AD SG03AD.exa +SG03BD.exa: data\SG03BD.dat TSG03BD.exe; TSG03BD SG03BD.exa +TB01ID.exa: data\TB01ID.dat TTB01ID.exe; TTB01ID TB01ID.exa +TB01IZ.exa: data\TB01IZ.dat TTB01IZ.exe; TTB01IZ TB01IZ.exa +TB01KD.exa: data\TB01KD.dat TTB01KD.exe; TTB01KD TB01KD.exa +TB01LD.exa: data\TB01LD.dat TTB01LD.exe; TTB01LD TB01LD.exa +TB01MD.exa: data\TB01MD.dat TTB01MD.exe; TTB01MD TB01MD.exa +TB01ND.exa: data\TB01ND.dat TTB01ND.exe; TTB01ND TB01ND.exa +TB01PD.exa: data\TB01PD.dat TTB01PD.exe; TTB01PD TB01PD.exa +TB01PX.exa: data\TB01PX.dat TTB01PX.exe; TTB01PX TB01PX.exa +TB01TD.exa: data\TB01TD.dat TTB01TD.exe; TTB01TD TB01TD.exa +TB01UD.exa: data\TB01UD.dat TTB01UD.exe; TTB01UD TB01UD.exa +TB01UY.exa: data\TB01UY.dat TTB01UY.exe; TTB01UY TB01UY.exa +TB01WD.exa: data\TB01WD.dat TTB01WD.exe; TTB01WD TB01WD.exa +TB01WX.exa: data\TB01WX.dat TTB01WX.exe; TTB01WX TB01WX.exa +TB01ZD.exa: data\TB01ZD.dat TTB01ZD.exe; TTB01ZD TB01ZD.exa +TB03AD.exa: data\TB03AD.dat TTB03AD.exe; TTB03AD TB03AD.exa +TB04AD.exa: data\TB04AD.dat TTB04AD.exe; TTB04AD TB04AD.exa +TB04BD.exa: data\TB04BD.dat TTB04BD.exe; TTB04BD TB04BD.exa +TB04CD.exa: data\TB04CD.dat TTB04CD.exe; TTB04CD TB04CD.exa +TB05AD.exa: data\TB05AD.dat TTB05AD.exe; TTB05AD TB05AD.exa +TC01OD.exa: data\TC01OD.dat TTC01OD.exe; TTC01OD TC01OD.exa +TC04AD.exa: data\TC04AD.dat TTC04AD.exe; TTC04AD TC04AD.exa +TC05AD.exa: data\TC05AD.dat TTC05AD.exe; TTC05AD TC05AD.exa +TD03AD.exa: data\TD03AD.dat TTD03AD.exe; TTD03AD TD03AD.exa +TD04AD.exa: data\TD04AD.dat TTD04AD.exe; TTD04AD TD04AD.exa +TD05AD.exa: data\TD05AD.dat TTD05AD.exe; TTD05AD TD05AD.exa +TF01MD.exa: data\TF01MD.dat TTF01MD.exe; TTF01MD TF01MD.exa +TF01ND.exa: data\TF01ND.dat TTF01ND.exe; TTF01ND TF01ND.exa +TF01OD.exa: data\TF01OD.dat TTF01OD.exe; TTF01OD TF01OD.exa +TF01PD.exa: data\TF01PD.dat TTF01PD.exe; TTF01PD TF01PD.exa +TF01QD.exa: data\TF01QD.dat TTF01QD.exe; TTF01QD TF01QD.exa +TF01RD.exa: data\TF01RD.dat TTF01RD.exe; TTF01RD TF01RD.exa +TG01AD.exa: data\TG01AD.dat TTG01AD.exe; TTG01AD TG01AD.exa +TG01AZ.exa: data\TG01AZ.dat TTG01AZ.exe; TTG01AZ TG01AZ.exa +TG01CD.exa: data\TG01CD.dat TTG01CD.exe; TTG01CD TG01CD.exa +TG01DD.exa: data\TG01DD.dat TTG01DD.exe; TTG01DD TG01DD.exa +TG01ED.exa: data\TG01ED.dat TTG01ED.exe; TTG01ED TG01ED.exa +TG01FD.exa: data\TG01FD.dat TTG01FD.exe; TTG01FD TG01FD.exa +TG01FZ.exa: data\TG01FZ.dat TTG01FZ.exe; TTG01FZ TG01FZ.exa +TG01GD.exa: data\TG01GD.dat TTG01GD.exe; TTG01GD TG01GD.exa +TG01HD.exa: data\TG01HD.dat TTG01HD.exe; TTG01HD TG01HD.exa +TG01ID.exa: data\TG01ID.dat TTG01ID.exe; TTG01ID TG01ID.exa +TG01JD.exa: data\TG01JD.dat TTG01JD.exe; TTG01JD TG01JD.exa +TG01JY.exa: data\TG01JY.dat TTG01JY.exe; TTG01JY TG01JY.exa +TG01LD.exa: data\TG01LD.dat TTG01LD.exe; TTG01LD TG01LD.exa +TG01MD.exa: data\TG01MD.dat TTG01MD.exe; TTG01MD TG01MD.exa +TG01ND.exa: data\TG01ND.dat TTG01ND.exe; TTG01ND TG01ND.exa +TG01PD.exa: data\TG01PD.dat TTG01PD.exe; TTG01PD TG01PD.exa +TG01QD.exa: data\TG01QD.dat TTG01QD.exe; TTG01QD TG01QD.exa +UD01BD.exa: data\UD01BD.dat TUD01BD.exe; TUD01BD UD01BD.exa +UD01CD.exa: data\UD01CD.dat TUD01CD.exe; TUD01CD UD01CD.exa +UD01DD.exa: data\UD01DD.dat TUD01DD.exe; TUD01DD UD01DD.exa +UD01MD.exa: data\UD01MD.dat TUD01MD.exe; TUD01MD UD01MD.exa +UD01ND.exa: data\UD01ND.dat TUD01ND.exe; TUD01ND UD01ND.exa TAB01MD.exe: TAB01MD.obj ; $(LOADER) -exe:TAB01MD TAB01MD.obj $(LOADOPTS) TAB01ND.exe: TAB01ND.obj ; $(LOADER) -exe:TAB01ND TAB01ND.obj $(LOADOPTS) diff --git a/examples/makefile_Unix b/examples/makefile_Unix index 01ad99c..9252a4a 100644 --- a/examples/makefile_Unix +++ b/examples/makefile_Unix @@ -1,6 +1,6 @@ #################################################################### # SLICOT examples makefile # -# Makefile for generating and running SLICOT Library example # +# Makefile for generating and running SLICOT Library example # # programs on Unix-like machines. # # # # SLICOT, Release 5.9 ./slicot/examples/makefile # @@ -10,7 +10,7 @@ # July 16, 2015, Feb. 5, 2017, Dec. 28, 2022, Feb. 2024. # #################################################################### # -# This makefile compiles, links, and runs the example programs for +# This makefile compiles, links, and runs the example programs for # the SLICOT Library on Unix-like machines. # # Most example programs are written for double precision. @@ -19,7 +19,7 @@ # The executable files are created in the current directory level. # The files with the results have the extension .exa, and are also # created in the current directory level, so they can automatically be -# compared with the .res files provided in this directory. Note that, +# compared with the .res files provided in this directory. Note that, # for some programs, the signs of some matrix elements could differ; # this does not mean erroneous results. Even the values can differ # for some compilers, when rows and/or columns of the matrix results @@ -82,250 +82,250 @@ all: AB01MD.exa AB01ND.exa AB01OD.exa AB04MD.exa AB05MD.exa AB05ND.exa \ TF01RD.exa TG01AD.exa TG01AZ.exa TG01CD.exa TG01DD.exa TG01ED.exa \ TG01FD.exa TG01FZ.exa TG01GD.exa TG01HD.exa TG01ID.exa TG01JD.exa \ TG01JY.exa TG01LD.exa TG01MD.exa TG01ND.exa TG01PD.exa TG01QD.exa \ - UD01BD.exa UD01CD.exa UD01DD.exa UD01MD.exa UD01ND.exa + UD01BD.exa UD01CD.exa UD01DD.exa UD01MD.exa UD01ND.exa -AB01MD.exa: AB01MD.dat TAB01MD; ./TAB01MD AB01MD.exa -AB01ND.exa: AB01ND.dat TAB01ND; ./TAB01ND AB01ND.exa -AB01OD.exa: AB01OD.dat TAB01OD; ./TAB01OD AB01OD.exa -AB04MD.exa: AB04MD.dat TAB04MD; ./TAB04MD AB04MD.exa -AB05MD.exa: AB05MD.dat TAB05MD; ./TAB05MD AB05MD.exa -AB05ND.exa: AB05ND.dat TAB05ND; ./TAB05ND AB05ND.exa -AB05OD.exa: AB05OD.dat TAB05OD; ./TAB05OD AB05OD.exa -AB05PD.exa: AB05PD.dat TAB05PD; ./TAB05PD AB05PD.exa -AB05QD.exa: AB05QD.dat TAB05QD; ./TAB05QD AB05QD.exa -AB05RD.exa: AB05RD.dat TAB05RD; ./TAB05RD AB05RD.exa -AB07MD.exa: AB07MD.dat TAB07MD; ./TAB07MD AB07MD.exa -AB07ND.exa: AB07ND.dat TAB07ND; ./TAB07ND AB07ND.exa -AB08ND.exa: AB08ND.dat TAB08ND; ./TAB08ND AB08ND.exa -AB08NW.exa: AB08NW.dat TAB08NW; ./TAB08NW AB08NW.exa -AB08NZ.exa: AB08NZ.dat TAB08NZ; ./TAB08NZ AB08NZ.exa -AB09AD.exa: AB09AD.dat TAB09AD; ./TAB09AD AB09AD.exa -AB09BD.exa: AB09BD.dat TAB09BD; ./TAB09BD AB09BD.exa -AB09CD.exa: AB09CD.dat TAB09CD; ./TAB09CD AB09CD.exa -AB09DD.exa: AB09DD.dat TAB09DD; ./TAB09DD AB09DD.exa -AB09ED.exa: AB09ED.dat TAB09ED; ./TAB09ED AB09ED.exa -AB09FD.exa: AB09FD.dat TAB09FD; ./TAB09FD AB09FD.exa -AB09GD.exa: AB09GD.dat TAB09GD; ./TAB09GD AB09GD.exa -AB09HD.exa: AB09HD.dat TAB09HD; ./TAB09HD AB09HD.exa -AB09ID.exa: AB09ID.dat TAB09ID; ./TAB09ID AB09ID.exa -AB09JD.exa: AB09JD.dat TAB09JD; ./TAB09JD AB09JD.exa -AB09KD.exa: AB09KD.dat TAB09KD; ./TAB09KD AB09KD.exa -AB09MD.exa: AB09MD.dat TAB09MD; ./TAB09MD AB09MD.exa -AB09ND.exa: AB09ND.dat TAB09ND; ./TAB09ND AB09ND.exa -AB13AD.exa: AB13AD.dat TAB13AD; ./TAB13AD AB13AD.exa -AB13BD.exa: AB13BD.dat TAB13BD; ./TAB13BD AB13BD.exa -AB13CD.exa: AB13CD.dat TAB13CD; ./TAB13CD AB13CD.exa -AB13DD.exa: AB13DD.dat TAB13DD; ./TAB13DD AB13DD.exa -AB13ED.exa: AB13ED.dat TAB13ED; ./TAB13ED AB13ED.exa -AB13FD.exa: AB13FD.dat TAB13FD; ./TAB13FD AB13FD.exa -AB13ID.exa: AB13ID.dat TAB13ID; ./TAB13ID AB13ID.exa -AB13MD.exa: AB13MD.dat TAB13MD; ./TAB13MD AB13MD.exa -AG08BD.exa: AG08BD.dat TAG08BD; ./TAG08BD AG08BD.exa -AG08BZ.exa: AG08BZ.dat TAG08BZ; ./TAG08BZ AG08BZ.exa -BB01AD.exa: BB01AD.dat TBB01AD; ./TBB01AD BB01AD.exa -BB02AD.exa: BB02AD.dat TBB02AD; ./TBB02AD BB02AD.exa -BB03AD.exa: BB03AD.dat TBB03AD; ./TBB03AD BB03AD.exa -BB04AD.exa: BB04AD.dat TBB04AD; ./TBB04AD BB04AD.exa -BD01AD.exa: BD01AD.dat TBD01AD; ./TBD01AD BD01AD.exa -BD02AD.exa: BD02AD.dat TBD02AD; ./TBD02AD BD02AD.exa -DE01OD.exa: DE01OD.dat TDE01OD; ./TDE01OD DE01OD.exa -DE01PD.exa: DE01PD.dat TDE01PD; ./TDE01PD DE01PD.exa -DF01MD.exa: DF01MD.dat TDF01MD; ./TDF01MD DF01MD.exa -DG01MD.exa: DG01MD.dat TDG01MD; ./TDG01MD DG01MD.exa -DG01ND.exa: DG01ND.dat TDG01ND; ./TDG01ND DG01ND.exa -DG01OD.exa: DG01OD.dat TDG01OD; ./TDG01OD DG01OD.exa -DK01MD.exa: DK01MD.dat TDK01MD; ./TDK01MD DK01MD.exa -FB01QD.exa: FB01QD.dat TFB01QD; ./TFB01QD FB01QD.exa -FB01RD.exa: FB01RD.dat TFB01RD; ./TFB01RD FB01RD.exa -FB01SD.exa: FB01SD.dat TFB01SD; ./TFB01SD FB01SD.exa -FB01TD.exa: FB01TD.dat TFB01TD; ./TFB01TD FB01TD.exa -FB01VD.exa: FB01VD.dat TFB01VD; ./TFB01VD FB01VD.exa -FD01AD.exa: FD01AD.dat TFD01AD; ./TFD01AD FD01AD.exa -IB01AD.exa: IB01AD.dat TIB01AD; ./TIB01AD IB01AD.exa -IB01BD.exa: IB01BD.dat TIB01BD; ./TIB01BD IB01BD.exa -IB01CD.exa: IB01CD.dat TIB01CD; ./TIB01CD IB01CD.exa -IB03AD.exa: IB03AD.dat TIB03AD; ./TIB03AD IB03AD.exa -IB03BD.exa: IB03BD.dat TIB03BD; ./TIB03BD IB03BD.exa -MB01TD.exa: MB01TD.dat TMB01TD; ./TMB01TD MB01TD.exa -MB02CD.exa: MB02CD.dat TMB02CD; ./TMB02CD MB02CD.exa -MB02DD.exa: MB02DD.dat TMB02DD; ./TMB02DD MB02DD.exa -MB02ED.exa: MB02ED.dat TMB02ED; ./TMB02ED MB02ED.exa -MB02FD.exa: MB02FD.dat TMB02FD; ./TMB02FD MB02FD.exa -MB02GD.exa: MB02GD.dat TMB02GD; ./TMB02GD MB02GD.exa -MB02HD.exa: MB02HD.dat TMB02HD; ./TMB02HD MB02HD.exa -MB02ID.exa: MB02ID.dat TMB02ID; ./TMB02ID MB02ID.exa -MB02JD.exa: MB02JD.dat TMB02JD; ./TMB02JD MB02JD.exa -MB02JX.exa: MB02JX.dat TMB02JX; ./TMB02JX MB02JX.exa -MB02KD.exa: MB02KD.dat TMB02KD; ./TMB02KD MB02KD.exa -MB02MD.exa: MB02MD.dat TMB02MD; ./TMB02MD MB02MD.exa -MB02ND.exa: MB02ND.dat TMB02ND; ./TMB02ND MB02ND.exa -MB02QD.exa: MB02QD.dat TMB02QD; ./TMB02QD MB02QD.exa -MB02SD.exa: MB02SD.dat TMB02SD; ./TMB02SD MB02SD.exa -MB02VD.exa: MB02VD.dat TMB02VD; ./TMB02VD MB02VD.exa -MB03BD.exa: MB03BD.dat TMB03BD; ./TMB03BD MB03BD.exa -MB03BZ.exa: MB03BZ.dat TMB03BZ; ./TMB03BZ MB03BZ.exa -MB03FZ.exa: MB03FZ.dat TMB03FZ; ./TMB03FZ MB03FZ.exa -MB03KD.exa: MB03KD.dat TMB03KD; ./TMB03KD MB03KD.exa -MB03LD.exa: MB03LD.dat TMB03LD; ./TMB03LD MB03LD.exa -MB03LF.exa: MB03LF.dat TMB03LF; ./TMB03LF MB03LF.exa -MB03LZ.exa: MB03LZ.dat TMB03LZ; ./TMB03LZ MB03LZ.exa -MB03MD.exa: MB03MD.dat TMB03MD; ./TMB03MD MB03MD.exa -MB03ND.exa: MB03ND.dat TMB03ND; ./TMB03ND MB03ND.exa -MB03OD.exa: MB03OD.dat TMB03OD; ./TMB03OD MB03OD.exa -MB03PD.exa: MB03PD.dat TMB03PD; ./TMB03PD MB03PD.exa -MB03QD.exa: MB03QD.dat TMB03QD; ./TMB03QD MB03QD.exa -MB03QG.exa: MB03QG.dat TMB03QG; ./TMB03QG MB03QG.exa -MB03RD.exa: MB03RD.dat TMB03RD; ./TMB03RD MB03RD.exa -MB03SD.exa: MB03SD.dat TMB03SD; ./TMB03SD MB03SD.exa -MB03TD.exa: MB03TD.dat TMB03TD; ./TMB03TD MB03TD.exa -MB03UD.exa: MB03UD.dat TMB03UD; ./TMB03UD MB03UD.exa -MB03VD.exa: MB03VD.dat TMB03VD; ./TMB03VD MB03VD.exa -MB03WD.exa: MB03WD.dat TMB03WD; ./TMB03WD MB03WD.exa -MB03XD.exa: MB03XD.dat TMB03XD; ./TMB03XD MB03XD.exa -MB03XP.exa: MB03XP.dat TMB03XP; ./TMB03XP MB03XP.exa -MB03XZ.exa: MB03XZ.dat TMB03XZ; ./TMB03XZ MB03XZ.exa -MB03ZD.exa: MB03ZD.dat TMB03ZD; ./TMB03ZD MB03ZD.exa -MB04AD.exa: MB04AD.dat TMB04AD; ./TMB04AD MB04AD.exa -MB04AZ.exa: MB04AZ.dat TMB04AZ; ./TMB04AZ MB04AZ.exa -MB04BD.exa: MB04BD.dat TMB04BD; ./TMB04BD MB04BD.exa -MB04BZ.exa: MB04BZ.dat TMB04BZ; ./TMB04BZ MB04BZ.exa -MB04DD.exa: MB04DD.dat TMB04DD; ./TMB04DD MB04DD.exa -MB04DL.exa: MB04DL.dat TMB04DL; ./TMB04DL MB04DL.exa -MB4DLZ.exa: MB4DLZ.dat TMB4DLZ; ./TMB4DLZ MB4DLZ.exa -MB04DP.exa: MB04DP.dat TMB04DP; ./TMB04DP MB04DP.exa -MB4DPZ.exa: MB4DPZ.dat TMB4DPZ; ./TMB4DPZ MB4DPZ.exa -MB04DS.exa: MB04DS.dat TMB04DS; ./TMB04DS MB04DS.exa -MB04DY.exa: MB04DY.dat TMB04DY; ./TMB04DY MB04DY.exa -MB04DZ.exa: MB04DZ.dat TMB04DZ; ./TMB04DZ MB04DZ.exa -MB04ED.exa: MB04ED.dat TMB04ED; ./TMB04ED MB04ED.exa -MB04FD.exa: MB04FD.dat TMB04FD; ./TMB04FD MB04FD.exa -MB04GD.exa: MB04GD.dat TMB04GD; ./TMB04GD MB04GD.exa -MB04MD.exa: MB04MD.dat TMB04MD; ./TMB04MD MB04MD.exa -MB04OD.exa: MB04OD.dat TMB04OD; ./TMB04OD MB04OD.exa -MB04PB.exa: MB04PB.dat TMB04PB; ./TMB04PB MB04PB.exa -MB04PU.exa: MB04PU.dat TMB04PU; ./TMB04PU MB04PU.exa -MB04TB.exa: MB04TB.dat TMB04TB; ./TMB04TB MB04TB.exa -MB04TS.exa: MB04TS.dat TMB04TS; ./TMB04TS MB04TS.exa -MB04UD.exa: MB04UD.dat TMB04UD; ./TMB04UD MB04UD.exa -MB04VD.exa: MB04VD.dat TMB04VD; ./TMB04VD MB04VD.exa -MB04XD.exa: MB04XD.dat TMB04XD; ./TMB04XD MB04XD.exa -MB04YD.exa: MB04YD.dat TMB04YD; ./TMB04YD MB04YD.exa -MB04ZD.exa: MB04ZD.dat TMB04ZD; ./TMB04ZD MB04ZD.exa -MB05MD.exa: MB05MD.dat TMB05MD; ./TMB05MD MB05MD.exa -MB05ND.exa: MB05ND.dat TMB05ND; ./TMB05ND MB05ND.exa -MB05OD.exa: MB05OD.dat TMB05OD; ./TMB05OD MB05OD.exa -MC01MD.exa: MC01MD.dat TMC01MD; ./TMC01MD MC01MD.exa -MC01ND.exa: MC01ND.dat TMC01ND; ./TMC01ND MC01ND.exa -MC01OD.exa: MC01OD.dat TMC01OD; ./TMC01OD MC01OD.exa -MC01PD.exa: MC01PD.dat TMC01PD; ./TMC01PD MC01PD.exa -MC01QD.exa: MC01QD.dat TMC01QD; ./TMC01QD MC01QD.exa -MC01RD.exa: MC01RD.dat TMC01RD; ./TMC01RD MC01RD.exa -MC01SD.exa: MC01SD.dat TMC01SD; ./TMC01SD MC01SD.exa -MC01TD.exa: MC01TD.dat TMC01TD; ./TMC01TD MC01TD.exa -MC01VD.exa: MC01VD.dat TMC01VD; ./TMC01VD MC01VD.exa -MC01WD.exa: MC01WD.dat TMC01WD; ./TMC01WD MC01WD.exa -MC01XD.exa: MC01XD.dat TMC01XD; ./TMC01XD MC01XD.exa -MC03MD.exa: MC03MD.dat TMC03MD; ./TMC03MD MC03MD.exa -MC03ND.exa: MC03ND.dat TMC03ND; ./TMC03ND MC03ND.exa -MD03AD.exa: MD03AD.dat TMD03AD; ./TMD03AD MD03AD.exa -MD03BD.exa: MD03BD.dat TMD03BD; ./TMD03BD MD03BD.exa -SB01BD.exa: SB01BD.dat TSB01BD; ./TSB01BD SB01BD.exa -SB01DD.exa: SB01DD.dat TSB01DD; ./TSB01DD SB01DD.exa -SB01MD.exa: SB01MD.dat TSB01MD; ./TSB01MD SB01MD.exa -SB02MD.exa: SB02MD.dat TSB02MD; ./TSB02MD SB02MD.exa -SB02ND.exa: SB02ND.dat TSB02ND; ./TSB02ND SB02ND.exa -SB02OD.exa: SB02OD.dat TSB02OD; ./TSB02OD SB02OD.exa -SB02PD.exa: SB02PD.dat TSB02PD; ./TSB02PD SB02PD.exa -SB02QD.exa: SB02QD.dat TSB02QD; ./TSB02QD SB02QD.exa -SB02RD.exa: SB02RD.dat TSB02RD; ./TSB02RD SB02RD.exa -SB02SD.exa: SB02SD.dat TSB02SD; ./TSB02SD SB02SD.exa -SB03MD.exa: SB03MD.dat TSB03MD; ./TSB03MD SB03MD.exa -SB03OD.exa: SB03OD.dat TSB03OD; ./TSB03OD SB03OD.exa -SB03QD.exa: SB03QD.dat TSB03QD; ./TSB03QD SB03QD.exa -SB03SD.exa: SB03SD.dat TSB03SD; ./TSB03SD SB03SD.exa -SB03TD.exa: SB03TD.dat TSB03TD; ./TSB03TD SB03TD.exa -SB03UD.exa: SB03UD.dat TSB03UD; ./TSB03UD SB03UD.exa -SB04MD.exa: SB04MD.dat TSB04MD; ./TSB04MD SB04MD.exa -SB04ND.exa: SB04ND.dat TSB04ND; ./TSB04ND SB04ND.exa -SB04OD.exa: SB04OD.dat TSB04OD; ./TSB04OD SB04OD.exa -SB04PD.exa: SB04PD.dat TSB04PD; ./TSB04PD SB04PD.exa -SB04QD.exa: SB04QD.dat TSB04QD; ./TSB04QD SB04QD.exa -SB04RD.exa: SB04RD.dat TSB04RD; ./TSB04RD SB04RD.exa -SB06ND.exa: SB06ND.dat TSB06ND; ./TSB06ND SB06ND.exa -SB08CD.exa: SB08CD.dat TSB08CD; ./TSB08CD SB08CD.exa -SB08DD.exa: SB08DD.dat TSB08DD; ./TSB08DD SB08DD.exa -SB08ED.exa: SB08ED.dat TSB08ED; ./TSB08ED SB08ED.exa -SB08FD.exa: SB08FD.dat TSB08FD; ./TSB08FD SB08FD.exa -SB08MD.exa: SB08MD.dat TSB08MD; ./TSB08MD SB08MD.exa -SB08ND.exa: SB08ND.dat TSB08ND; ./TSB08ND SB08ND.exa -SB09MD.exa: SB09MD.dat TSB09MD; ./TSB09MD SB09MD.exa -SB10DD.exa: SB10DD.dat TSB10DD; ./TSB10DD SB10DD.exa -SB10ED.exa: SB10ED.dat TSB10ED; ./TSB10ED SB10ED.exa -SB10FD.exa: SB10FD.dat TSB10FD; ./TSB10FD SB10FD.exa -SB10HD.exa: SB10HD.dat TSB10HD; ./TSB10HD SB10HD.exa -SB10ID.exa: SB10ID.dat TSB10ID; ./TSB10ID SB10ID.exa -SB10KD.exa: SB10KD.dat TSB10KD; ./TSB10KD SB10KD.exa -SB10ZD.exa: SB10ZD.dat TSB10ZD; ./TSB10ZD SB10ZD.exa -SB16AD.exa: SB16AD.dat TSB16AD; ./TSB16AD SB16AD.exa -SB16BD.exa: SB16BD.dat TSB16BD; ./TSB16BD SB16BD.exa -SB16CD.exa: SB16CD.dat TSB16CD; ./TSB16CD SB16CD.exa -SG02AD.exa: SG02AD.dat TSG02AD; ./TSG02AD SG02AD.exa -SG02ND.exa: SG02ND.dat TSG02ND; ./TSG02ND SG02ND.exa -SG03AD.exa: SG03AD.dat TSG03AD; ./TSG03AD SG03AD.exa -SG03BD.exa: SG03BD.dat TSG03BD; ./TSG03BD SG03BD.exa -TB01ID.exa: TB01ID.dat TTB01ID; ./TTB01ID TB01ID.exa -TB01IZ.exa: TB01IZ.dat TTB01IZ; ./TTB01IZ TB01IZ.exa -TB01KD.exa: TB01KD.dat TTB01KD; ./TTB01KD TB01KD.exa -TB01LD.exa: TB01LD.dat TTB01LD; ./TTB01LD TB01LD.exa -TB01MD.exa: TB01MD.dat TTB01MD; ./TTB01MD TB01MD.exa -TB01ND.exa: TB01ND.dat TTB01ND; ./TTB01ND TB01ND.exa -TB01PD.exa: TB01PD.dat TTB01PD; ./TTB01PD TB01PD.exa -TB01PX.exa: TB01PX.dat TTB01PX; ./TTB01PX TB01PX.exa -TB01TD.exa: TB01TD.dat TTB01TD; ./TTB01TD TB01TD.exa -TB01UD.exa: TB01UD.dat TTB01UD; ./TTB01UD TB01UD.exa -TB01UY.exa: TB01UY.dat TTB01UY; ./TTB01UY TB01UY.exa -TB01WD.exa: TB01WD.dat TTB01WD; ./TTB01WD TB01WD.exa -TB01WX.exa: TB01WX.dat TTB01WX; ./TTB01WX TB01WX.exa -TB01ZD.exa: TB01ZD.dat TTB01ZD; ./TTB01ZD TB01ZD.exa -TB03AD.exa: TB03AD.dat TTB03AD; ./TTB03AD TB03AD.exa -TB04AD.exa: TB04AD.dat TTB04AD; ./TTB04AD TB04AD.exa -TB04BD.exa: TB04BD.dat TTB04BD; ./TTB04BD TB04BD.exa -TB04CD.exa: TB04CD.dat TTB04CD; ./TTB04CD TB04CD.exa -TB05AD.exa: TB05AD.dat TTB05AD; ./TTB05AD TB05AD.exa -TC01OD.exa: TC01OD.dat TTC01OD; ./TTC01OD TC01OD.exa -TC04AD.exa: TC04AD.dat TTC04AD; ./TTC04AD TC04AD.exa -TC05AD.exa: TC05AD.dat TTC05AD; ./TTC05AD TC05AD.exa -TD03AD.exa: TD03AD.dat TTD03AD; ./TTD03AD TD03AD.exa -TD04AD.exa: TD04AD.dat TTD04AD; ./TTD04AD TD04AD.exa -TD05AD.exa: TD05AD.dat TTD05AD; ./TTD05AD TD05AD.exa -TF01MD.exa: TF01MD.dat TTF01MD; ./TTF01MD TF01MD.exa -TF01ND.exa: TF01ND.dat TTF01ND; ./TTF01ND TF01ND.exa -TF01OD.exa: TF01OD.dat TTF01OD; ./TTF01OD TF01OD.exa -TF01PD.exa: TF01PD.dat TTF01PD; ./TTF01PD TF01PD.exa -TF01QD.exa: TF01QD.dat TTF01QD; ./TTF01QD TF01QD.exa -TF01RD.exa: TF01RD.dat TTF01RD; ./TTF01RD TF01RD.exa -TG01AD.exa: TG01AD.dat TTG01AD; ./TTG01AD TG01AD.exa -TG01AZ.exa: TG01AZ.dat TTG01AZ; ./TTG01AZ TG01AZ.exa -TG01CD.exa: TG01CD.dat TTG01CD; ./TTG01CD TG01CD.exa -TG01DD.exa: TG01DD.dat TTG01DD; ./TTG01DD TG01DD.exa -TG01ED.exa: TG01ED.dat TTG01ED; ./TTG01ED TG01ED.exa -TG01FD.exa: TG01FD.dat TTG01FD; ./TTG01FD TG01FD.exa -TG01FZ.exa: TG01FZ.dat TTG01FZ; ./TTG01FZ TG01FZ.exa -TG01GD.exa: TG01GD.dat TTG01GD; ./TTG01GD TG01GD.exa -TG01HD.exa: TG01HD.dat TTG01HD; ./TTG01HD TG01HD.exa -TG01ID.exa: TG01ID.dat TTG01ID; ./TTG01ID TG01ID.exa -TG01JD.exa: TG01JD.dat TTG01JD; ./TTG01JD TG01JD.exa -TG01JY.exa: TG01JY.dat TTG01JY; ./TTG01JY TG01JY.exa -TG01LD.exa: TG01LD.dat TTG01LD; ./TTG01LD TG01LD.exa -TG01MD.exa: TG01MD.dat TTG01MD; ./TTG01MD TG01MD.exa -TG01ND.exa: TG01ND.dat TTG01ND; ./TTG01ND TG01ND.exa -TG01PD.exa: TG01PD.dat TTG01PD; ./TTG01PD TG01PD.exa -TG01QD.exa: TG01QD.dat TTG01QD; ./TTG01QD TG01QD.exa -UD01BD.exa: UD01BD.dat TUD01BD; ./TUD01BD UD01BD.exa -UD01CD.exa: UD01CD.dat TUD01CD; ./TUD01CD UD01CD.exa -UD01DD.exa: UD01DD.dat TUD01DD; ./TUD01DD UD01DD.exa -UD01MD.exa: UD01MD.dat TUD01MD; ./TUD01MD UD01MD.exa -UD01ND.exa: UD01ND.dat TUD01ND; ./TUD01ND UD01ND.exa +AB01MD.exa: data/AB01MD.dat TAB01MD; ./TAB01MD AB01MD.exa +AB01ND.exa: data/AB01ND.dat TAB01ND; ./TAB01ND AB01ND.exa +AB01OD.exa: data/AB01OD.dat TAB01OD; ./TAB01OD AB01OD.exa +AB04MD.exa: data/AB04MD.dat TAB04MD; ./TAB04MD AB04MD.exa +AB05MD.exa: data/AB05MD.dat TAB05MD; ./TAB05MD AB05MD.exa +AB05ND.exa: data/AB05ND.dat TAB05ND; ./TAB05ND AB05ND.exa +AB05OD.exa: data/AB05OD.dat TAB05OD; ./TAB05OD AB05OD.exa +AB05PD.exa: data/AB05PD.dat TAB05PD; ./TAB05PD AB05PD.exa +AB05QD.exa: data/AB05QD.dat TAB05QD; ./TAB05QD AB05QD.exa +AB05RD.exa: data/AB05RD.dat TAB05RD; ./TAB05RD AB05RD.exa +AB07MD.exa: data/AB07MD.dat TAB07MD; ./TAB07MD AB07MD.exa +AB07ND.exa: data/AB07ND.dat TAB07ND; ./TAB07ND AB07ND.exa +AB08ND.exa: data/AB08ND.dat TAB08ND; ./TAB08ND AB08ND.exa +AB08NW.exa: data/AB08NW.dat TAB08NW; ./TAB08NW AB08NW.exa +AB08NZ.exa: data/AB08NZ.dat TAB08NZ; ./TAB08NZ AB08NZ.exa +AB09AD.exa: data/AB09AD.dat TAB09AD; ./TAB09AD AB09AD.exa +AB09BD.exa: data/AB09BD.dat TAB09BD; ./TAB09BD AB09BD.exa +AB09CD.exa: data/AB09CD.dat TAB09CD; ./TAB09CD AB09CD.exa +AB09DD.exa: data/AB09DD.dat TAB09DD; ./TAB09DD AB09DD.exa +AB09ED.exa: data/AB09ED.dat TAB09ED; ./TAB09ED AB09ED.exa +AB09FD.exa: data/AB09FD.dat TAB09FD; ./TAB09FD AB09FD.exa +AB09GD.exa: data/AB09GD.dat TAB09GD; ./TAB09GD AB09GD.exa +AB09HD.exa: data/AB09HD.dat TAB09HD; ./TAB09HD AB09HD.exa +AB09ID.exa: data/AB09ID.dat TAB09ID; ./TAB09ID AB09ID.exa +AB09JD.exa: data/AB09JD.dat TAB09JD; ./TAB09JD AB09JD.exa +AB09KD.exa: data/AB09KD.dat TAB09KD; ./TAB09KD AB09KD.exa +AB09MD.exa: data/AB09MD.dat TAB09MD; ./TAB09MD AB09MD.exa +AB09ND.exa: data/AB09ND.dat TAB09ND; ./TAB09ND AB09ND.exa +AB13AD.exa: data/AB13AD.dat TAB13AD; ./TAB13AD AB13AD.exa +AB13BD.exa: data/AB13BD.dat TAB13BD; ./TAB13BD AB13BD.exa +AB13CD.exa: data/AB13CD.dat TAB13CD; ./TAB13CD AB13CD.exa +AB13DD.exa: data/AB13DD.dat TAB13DD; ./TAB13DD AB13DD.exa +AB13ED.exa: data/AB13ED.dat TAB13ED; ./TAB13ED AB13ED.exa +AB13FD.exa: data/AB13FD.dat TAB13FD; ./TAB13FD AB13FD.exa +AB13ID.exa: data/AB13ID.dat TAB13ID; ./TAB13ID AB13ID.exa +AB13MD.exa: data/AB13MD.dat TAB13MD; ./TAB13MD AB13MD.exa +AG08BD.exa: data/AG08BD.dat TAG08BD; ./TAG08BD AG08BD.exa +AG08BZ.exa: data/AG08BZ.dat TAG08BZ; ./TAG08BZ AG08BZ.exa +BB01AD.exa: data/BB01AD.dat TBB01AD; ./TBB01AD BB01AD.exa +BB02AD.exa: data/BB02AD.dat TBB02AD; ./TBB02AD BB02AD.exa +BB03AD.exa: data/BB03AD.dat TBB03AD; ./TBB03AD BB03AD.exa +BB04AD.exa: data/BB04AD.dat TBB04AD; ./TBB04AD BB04AD.exa +BD01AD.exa: data/BD01AD.dat TBD01AD; ./TBD01AD BD01AD.exa +BD02AD.exa: data/BD02AD.dat TBD02AD; ./TBD02AD BD02AD.exa +DE01OD.exa: data/DE01OD.dat TDE01OD; ./TDE01OD DE01OD.exa +DE01PD.exa: data/DE01PD.dat TDE01PD; ./TDE01PD DE01PD.exa +DF01MD.exa: data/DF01MD.dat TDF01MD; ./TDF01MD DF01MD.exa +DG01MD.exa: data/DG01MD.dat TDG01MD; ./TDG01MD DG01MD.exa +DG01ND.exa: data/DG01ND.dat TDG01ND; ./TDG01ND DG01ND.exa +DG01OD.exa: data/DG01OD.dat TDG01OD; ./TDG01OD DG01OD.exa +DK01MD.exa: data/DK01MD.dat TDK01MD; ./TDK01MD DK01MD.exa +FB01QD.exa: data/FB01QD.dat TFB01QD; ./TFB01QD FB01QD.exa +FB01RD.exa: data/FB01RD.dat TFB01RD; ./TFB01RD FB01RD.exa +FB01SD.exa: data/FB01SD.dat TFB01SD; ./TFB01SD FB01SD.exa +FB01TD.exa: data/FB01TD.dat TFB01TD; ./TFB01TD FB01TD.exa +FB01VD.exa: data/FB01VD.dat TFB01VD; ./TFB01VD FB01VD.exa +FD01AD.exa: data/FD01AD.dat TFD01AD; ./TFD01AD FD01AD.exa +IB01AD.exa: data/IB01AD.dat TIB01AD; ./TIB01AD IB01AD.exa +IB01BD.exa: data/IB01BD.dat TIB01BD; ./TIB01BD IB01BD.exa +IB01CD.exa: data/IB01CD.dat TIB01CD; ./TIB01CD IB01CD.exa +IB03AD.exa: data/IB03AD.dat TIB03AD; ./TIB03AD IB03AD.exa +IB03BD.exa: data/IB03BD.dat TIB03BD; ./TIB03BD IB03BD.exa +MB01TD.exa: data/MB01TD.dat TMB01TD; ./TMB01TD MB01TD.exa +MB02CD.exa: data/MB02CD.dat TMB02CD; ./TMB02CD MB02CD.exa +MB02DD.exa: data/MB02DD.dat TMB02DD; ./TMB02DD MB02DD.exa +MB02ED.exa: data/MB02ED.dat TMB02ED; ./TMB02ED MB02ED.exa +MB02FD.exa: data/MB02FD.dat TMB02FD; ./TMB02FD MB02FD.exa +MB02GD.exa: data/MB02GD.dat TMB02GD; ./TMB02GD MB02GD.exa +MB02HD.exa: data/MB02HD.dat TMB02HD; ./TMB02HD MB02HD.exa +MB02ID.exa: data/MB02ID.dat TMB02ID; ./TMB02ID MB02ID.exa +MB02JD.exa: data/MB02JD.dat TMB02JD; ./TMB02JD MB02JD.exa +MB02JX.exa: data/MB02JX.dat TMB02JX; ./TMB02JX MB02JX.exa +MB02KD.exa: data/MB02KD.dat TMB02KD; ./TMB02KD MB02KD.exa +MB02MD.exa: data/MB02MD.dat TMB02MD; ./TMB02MD MB02MD.exa +MB02ND.exa: data/MB02ND.dat TMB02ND; ./TMB02ND MB02ND.exa +MB02QD.exa: data/MB02QD.dat TMB02QD; ./TMB02QD MB02QD.exa +MB02SD.exa: data/MB02SD.dat TMB02SD; ./TMB02SD MB02SD.exa +MB02VD.exa: data/MB02VD.dat TMB02VD; ./TMB02VD MB02VD.exa +MB03BD.exa: data/MB03BD.dat TMB03BD; ./TMB03BD MB03BD.exa +MB03BZ.exa: data/MB03BZ.dat TMB03BZ; ./TMB03BZ MB03BZ.exa +MB03FZ.exa: data/MB03FZ.dat TMB03FZ; ./TMB03FZ MB03FZ.exa +MB03KD.exa: data/MB03KD.dat TMB03KD; ./TMB03KD MB03KD.exa +MB03LD.exa: data/MB03LD.dat TMB03LD; ./TMB03LD MB03LD.exa +MB03LF.exa: data/MB03LF.dat TMB03LF; ./TMB03LF MB03LF.exa +MB03LZ.exa: data/MB03LZ.dat TMB03LZ; ./TMB03LZ MB03LZ.exa +MB03MD.exa: data/MB03MD.dat TMB03MD; ./TMB03MD MB03MD.exa +MB03ND.exa: data/MB03ND.dat TMB03ND; ./TMB03ND MB03ND.exa +MB03OD.exa: data/MB03OD.dat TMB03OD; ./TMB03OD MB03OD.exa +MB03PD.exa: data/MB03PD.dat TMB03PD; ./TMB03PD MB03PD.exa +MB03QD.exa: data/MB03QD.dat TMB03QD; ./TMB03QD MB03QD.exa +MB03QG.exa: data/MB03QG.dat TMB03QG; ./TMB03QG MB03QG.exa +MB03RD.exa: data/MB03RD.dat TMB03RD; ./TMB03RD MB03RD.exa +MB03SD.exa: data/MB03SD.dat TMB03SD; ./TMB03SD MB03SD.exa +MB03TD.exa: data/MB03TD.dat TMB03TD; ./TMB03TD MB03TD.exa +MB03UD.exa: data/MB03UD.dat TMB03UD; ./TMB03UD MB03UD.exa +MB03VD.exa: data/MB03VD.dat TMB03VD; ./TMB03VD MB03VD.exa +MB03WD.exa: data/MB03WD.dat TMB03WD; ./TMB03WD MB03WD.exa +MB03XD.exa: data/MB03XD.dat TMB03XD; ./TMB03XD MB03XD.exa +MB03XP.exa: data/MB03XP.dat TMB03XP; ./TMB03XP MB03XP.exa +MB03XZ.exa: data/MB03XZ.dat TMB03XZ; ./TMB03XZ MB03XZ.exa +MB03ZD.exa: data/MB03ZD.dat TMB03ZD; ./TMB03ZD MB03ZD.exa +MB04AD.exa: data/MB04AD.dat TMB04AD; ./TMB04AD MB04AD.exa +MB04AZ.exa: data/MB04AZ.dat TMB04AZ; ./TMB04AZ MB04AZ.exa +MB04BD.exa: data/MB04BD.dat TMB04BD; ./TMB04BD MB04BD.exa +MB04BZ.exa: data/MB04BZ.dat TMB04BZ; ./TMB04BZ MB04BZ.exa +MB04DD.exa: data/MB04DD.dat TMB04DD; ./TMB04DD MB04DD.exa +MB04DL.exa: data/MB04DL.dat TMB04DL; ./TMB04DL MB04DL.exa +MB4DLZ.exa: data/MB4DLZ.dat TMB4DLZ; ./TMB4DLZ MB4DLZ.exa +MB04DP.exa: data/MB04DP.dat TMB04DP; ./TMB04DP MB04DP.exa +MB4DPZ.exa: data/MB4DPZ.dat TMB4DPZ; ./TMB4DPZ MB4DPZ.exa +MB04DS.exa: data/MB04DS.dat TMB04DS; ./TMB04DS MB04DS.exa +MB04DY.exa: data/MB04DY.dat TMB04DY; ./TMB04DY MB04DY.exa +MB04DZ.exa: data/MB04DZ.dat TMB04DZ; ./TMB04DZ MB04DZ.exa +MB04ED.exa: data/MB04ED.dat TMB04ED; ./TMB04ED MB04ED.exa +MB04FD.exa: data/MB04FD.dat TMB04FD; ./TMB04FD MB04FD.exa +MB04GD.exa: data/MB04GD.dat TMB04GD; ./TMB04GD MB04GD.exa +MB04MD.exa: data/MB04MD.dat TMB04MD; ./TMB04MD MB04MD.exa +MB04OD.exa: data/MB04OD.dat TMB04OD; ./TMB04OD MB04OD.exa +MB04PB.exa: data/MB04PB.dat TMB04PB; ./TMB04PB MB04PB.exa +MB04PU.exa: data/MB04PU.dat TMB04PU; ./TMB04PU MB04PU.exa +MB04TB.exa: data/MB04TB.dat TMB04TB; ./TMB04TB MB04TB.exa +MB04TS.exa: data/MB04TS.dat TMB04TS; ./TMB04TS MB04TS.exa +MB04UD.exa: data/MB04UD.dat TMB04UD; ./TMB04UD MB04UD.exa +MB04VD.exa: data/MB04VD.dat TMB04VD; ./TMB04VD MB04VD.exa +MB04XD.exa: data/MB04XD.dat TMB04XD; ./TMB04XD MB04XD.exa +MB04YD.exa: data/MB04YD.dat TMB04YD; ./TMB04YD MB04YD.exa +MB04ZD.exa: data/MB04ZD.dat TMB04ZD; ./TMB04ZD MB04ZD.exa +MB05MD.exa: data/MB05MD.dat TMB05MD; ./TMB05MD MB05MD.exa +MB05ND.exa: data/MB05ND.dat TMB05ND; ./TMB05ND MB05ND.exa +MB05OD.exa: data/MB05OD.dat TMB05OD; ./TMB05OD MB05OD.exa +MC01MD.exa: data/MC01MD.dat TMC01MD; ./TMC01MD MC01MD.exa +MC01ND.exa: data/MC01ND.dat TMC01ND; ./TMC01ND MC01ND.exa +MC01OD.exa: data/MC01OD.dat TMC01OD; ./TMC01OD MC01OD.exa +MC01PD.exa: data/MC01PD.dat TMC01PD; ./TMC01PD MC01PD.exa +MC01QD.exa: data/MC01QD.dat TMC01QD; ./TMC01QD MC01QD.exa +MC01RD.exa: data/MC01RD.dat TMC01RD; ./TMC01RD MC01RD.exa +MC01SD.exa: data/MC01SD.dat TMC01SD; ./TMC01SD MC01SD.exa +MC01TD.exa: data/MC01TD.dat TMC01TD; ./TMC01TD MC01TD.exa +MC01VD.exa: data/MC01VD.dat TMC01VD; ./TMC01VD MC01VD.exa +MC01WD.exa: data/MC01WD.dat TMC01WD; ./TMC01WD MC01WD.exa +MC01XD.exa: data/MC01XD.dat TMC01XD; ./TMC01XD MC01XD.exa +MC03MD.exa: data/MC03MD.dat TMC03MD; ./TMC03MD MC03MD.exa +MC03ND.exa: data/MC03ND.dat TMC03ND; ./TMC03ND MC03ND.exa +MD03AD.exa: data/MD03AD.dat TMD03AD; ./TMD03AD MD03AD.exa +MD03BD.exa: data/MD03BD.dat TMD03BD; ./TMD03BD MD03BD.exa +SB01BD.exa: data/SB01BD.dat TSB01BD; ./TSB01BD SB01BD.exa +SB01DD.exa: data/SB01DD.dat TSB01DD; ./TSB01DD SB01DD.exa +SB01MD.exa: data/SB01MD.dat TSB01MD; ./TSB01MD SB01MD.exa +SB02MD.exa: data/SB02MD.dat TSB02MD; ./TSB02MD SB02MD.exa +SB02ND.exa: data/SB02ND.dat TSB02ND; ./TSB02ND SB02ND.exa +SB02OD.exa: data/SB02OD.dat TSB02OD; ./TSB02OD SB02OD.exa +SB02PD.exa: data/SB02PD.dat TSB02PD; ./TSB02PD SB02PD.exa +SB02QD.exa: data/SB02QD.dat TSB02QD; ./TSB02QD SB02QD.exa +SB02RD.exa: data/SB02RD.dat TSB02RD; ./TSB02RD SB02RD.exa +SB02SD.exa: data/SB02SD.dat TSB02SD; ./TSB02SD SB02SD.exa +SB03MD.exa: data/SB03MD.dat TSB03MD; ./TSB03MD SB03MD.exa +SB03OD.exa: data/SB03OD.dat TSB03OD; ./TSB03OD SB03OD.exa +SB03QD.exa: data/SB03QD.dat TSB03QD; ./TSB03QD SB03QD.exa +SB03SD.exa: data/SB03SD.dat TSB03SD; ./TSB03SD SB03SD.exa +SB03TD.exa: data/SB03TD.dat TSB03TD; ./TSB03TD SB03TD.exa +SB03UD.exa: data/SB03UD.dat TSB03UD; ./TSB03UD SB03UD.exa +SB04MD.exa: data/SB04MD.dat TSB04MD; ./TSB04MD SB04MD.exa +SB04ND.exa: data/SB04ND.dat TSB04ND; ./TSB04ND SB04ND.exa +SB04OD.exa: data/SB04OD.dat TSB04OD; ./TSB04OD SB04OD.exa +SB04PD.exa: data/SB04PD.dat TSB04PD; ./TSB04PD SB04PD.exa +SB04QD.exa: data/SB04QD.dat TSB04QD; ./TSB04QD SB04QD.exa +SB04RD.exa: data/SB04RD.dat TSB04RD; ./TSB04RD SB04RD.exa +SB06ND.exa: data/SB06ND.dat TSB06ND; ./TSB06ND SB06ND.exa +SB08CD.exa: data/SB08CD.dat TSB08CD; ./TSB08CD SB08CD.exa +SB08DD.exa: data/SB08DD.dat TSB08DD; ./TSB08DD SB08DD.exa +SB08ED.exa: data/SB08ED.dat TSB08ED; ./TSB08ED SB08ED.exa +SB08FD.exa: data/SB08FD.dat TSB08FD; ./TSB08FD SB08FD.exa +SB08MD.exa: data/SB08MD.dat TSB08MD; ./TSB08MD SB08MD.exa +SB08ND.exa: data/SB08ND.dat TSB08ND; ./TSB08ND SB08ND.exa +SB09MD.exa: data/SB09MD.dat TSB09MD; ./TSB09MD SB09MD.exa +SB10DD.exa: data/SB10DD.dat TSB10DD; ./TSB10DD SB10DD.exa +SB10ED.exa: data/SB10ED.dat TSB10ED; ./TSB10ED SB10ED.exa +SB10FD.exa: data/SB10FD.dat TSB10FD; ./TSB10FD SB10FD.exa +SB10HD.exa: data/SB10HD.dat TSB10HD; ./TSB10HD SB10HD.exa +SB10ID.exa: data/SB10ID.dat TSB10ID; ./TSB10ID SB10ID.exa +SB10KD.exa: data/SB10KD.dat TSB10KD; ./TSB10KD SB10KD.exa +SB10ZD.exa: data/SB10ZD.dat TSB10ZD; ./TSB10ZD SB10ZD.exa +SB16AD.exa: data/SB16AD.dat TSB16AD; ./TSB16AD SB16AD.exa +SB16BD.exa: data/SB16BD.dat TSB16BD; ./TSB16BD SB16BD.exa +SB16CD.exa: data/SB16CD.dat TSB16CD; ./TSB16CD SB16CD.exa +SG02AD.exa: data/SG02AD.dat TSG02AD; ./TSG02AD SG02AD.exa +SG02ND.exa: data/SG02ND.dat TSG02ND; ./TSG02ND SG02ND.exa +SG03AD.exa: data/SG03AD.dat TSG03AD; ./TSG03AD SG03AD.exa +SG03BD.exa: data/SG03BD.dat TSG03BD; ./TSG03BD SG03BD.exa +TB01ID.exa: data/TB01ID.dat TTB01ID; ./TTB01ID TB01ID.exa +TB01IZ.exa: data/TB01IZ.dat TTB01IZ; ./TTB01IZ TB01IZ.exa +TB01KD.exa: data/TB01KD.dat TTB01KD; ./TTB01KD TB01KD.exa +TB01LD.exa: data/TB01LD.dat TTB01LD; ./TTB01LD TB01LD.exa +TB01MD.exa: data/TB01MD.dat TTB01MD; ./TTB01MD TB01MD.exa +TB01ND.exa: data/TB01ND.dat TTB01ND; ./TTB01ND TB01ND.exa +TB01PD.exa: data/TB01PD.dat TTB01PD; ./TTB01PD TB01PD.exa +TB01PX.exa: data/TB01PX.dat TTB01PX; ./TTB01PX TB01PX.exa +TB01TD.exa: data/TB01TD.dat TTB01TD; ./TTB01TD TB01TD.exa +TB01UD.exa: data/TB01UD.dat TTB01UD; ./TTB01UD TB01UD.exa +TB01UY.exa: data/TB01UY.dat TTB01UY; ./TTB01UY TB01UY.exa +TB01WD.exa: data/TB01WD.dat TTB01WD; ./TTB01WD TB01WD.exa +TB01WX.exa: data/TB01WX.dat TTB01WX; ./TTB01WX TB01WX.exa +TB01ZD.exa: data/TB01ZD.dat TTB01ZD; ./TTB01ZD TB01ZD.exa +TB03AD.exa: data/TB03AD.dat TTB03AD; ./TTB03AD TB03AD.exa +TB04AD.exa: data/TB04AD.dat TTB04AD; ./TTB04AD TB04AD.exa +TB04BD.exa: data/TB04BD.dat TTB04BD; ./TTB04BD TB04BD.exa +TB04CD.exa: data/TB04CD.dat TTB04CD; ./TTB04CD TB04CD.exa +TB05AD.exa: data/TB05AD.dat TTB05AD; ./TTB05AD TB05AD.exa +TC01OD.exa: data/TC01OD.dat TTC01OD; ./TTC01OD TC01OD.exa +TC04AD.exa: data/TC04AD.dat TTC04AD; ./TTC04AD TC04AD.exa +TC05AD.exa: data/TC05AD.dat TTC05AD; ./TTC05AD TC05AD.exa +TD03AD.exa: data/TD03AD.dat TTD03AD; ./TTD03AD TD03AD.exa +TD04AD.exa: data/TD04AD.dat TTD04AD; ./TTD04AD TD04AD.exa +TD05AD.exa: data/TD05AD.dat TTD05AD; ./TTD05AD TD05AD.exa +TF01MD.exa: data/TF01MD.dat TTF01MD; ./TTF01MD TF01MD.exa +TF01ND.exa: data/TF01ND.dat TTF01ND; ./TTF01ND TF01ND.exa +TF01OD.exa: data/TF01OD.dat TTF01OD; ./TTF01OD TF01OD.exa +TF01PD.exa: data/TF01PD.dat TTF01PD; ./TTF01PD TF01PD.exa +TF01QD.exa: data/TF01QD.dat TTF01QD; ./TTF01QD TF01QD.exa +TF01RD.exa: data/TF01RD.dat TTF01RD; ./TTF01RD TF01RD.exa +TG01AD.exa: data/TG01AD.dat TTG01AD; ./TTG01AD TG01AD.exa +TG01AZ.exa: data/TG01AZ.dat TTG01AZ; ./TTG01AZ TG01AZ.exa +TG01CD.exa: data/TG01CD.dat TTG01CD; ./TTG01CD TG01CD.exa +TG01DD.exa: data/TG01DD.dat TTG01DD; ./TTG01DD TG01DD.exa +TG01ED.exa: data/TG01ED.dat TTG01ED; ./TTG01ED TG01ED.exa +TG01FD.exa: data/TG01FD.dat TTG01FD; ./TTG01FD TG01FD.exa +TG01FZ.exa: data/TG01FZ.dat TTG01FZ; ./TTG01FZ TG01FZ.exa +TG01GD.exa: data/TG01GD.dat TTG01GD; ./TTG01GD TG01GD.exa +TG01HD.exa: data/TG01HD.dat TTG01HD; ./TTG01HD TG01HD.exa +TG01ID.exa: data/TG01ID.dat TTG01ID; ./TTG01ID TG01ID.exa +TG01JD.exa: data/TG01JD.dat TTG01JD; ./TTG01JD TG01JD.exa +TG01JY.exa: data/TG01JY.dat TTG01JY; ./TTG01JY TG01JY.exa +TG01LD.exa: data/TG01LD.dat TTG01LD; ./TTG01LD TG01LD.exa +TG01MD.exa: data/TG01MD.dat TTG01MD; ./TTG01MD TG01MD.exa +TG01ND.exa: data/TG01ND.dat TTG01ND; ./TTG01ND TG01ND.exa +TG01PD.exa: data/TG01PD.dat TTG01PD; ./TTG01PD TG01PD.exa +TG01QD.exa: data/TG01QD.dat TTG01QD; ./TTG01QD TG01QD.exa +UD01BD.exa: data/UD01BD.dat TUD01BD; ./TUD01BD UD01BD.exa +UD01CD.exa: data/UD01CD.dat TUD01CD; ./TUD01CD UD01CD.exa +UD01DD.exa: data/UD01DD.dat TUD01DD; ./TUD01DD UD01DD.exa +UD01MD.exa: data/UD01MD.dat TUD01MD; ./TUD01MD UD01MD.exa +UD01ND.exa: data/UD01ND.dat TUD01ND; ./TUD01ND UD01ND.exa TAB01MD: TAB01MD.o ; $(LOADER) -o TAB01MD TAB01MD.o $(LOADOPTS) TAB01ND: TAB01ND.o ; $(LOADER) -o TAB01ND TAB01ND.o $(LOADOPTS) @@ -570,9 +570,9 @@ TUD01DD: TUD01DD.o ; $(LOADER) -o TUD01DD TUD01DD.o $(LOADOPTS) TUD01MD: TUD01MD.o ; $(LOADER) -o TUD01MD TUD01MD.o $(LOADOPTS) TUD01ND: TUD01ND.o ; $(LOADER) -o TUD01ND TUD01ND.o $(LOADOPTS) -$(TAB01MD): $(FRC) -$(TAB01ND): $(FRC) -$(TAB01OD): $(FRC) +$(TAB01MD): $(FRC) +$(TAB01ND): $(FRC) +$(TAB01OD): $(FRC) $(TAB04MD): $(FRC) $(TAB05MD): $(FRC) $(TAB05ND): $(FRC) @@ -848,7 +848,7 @@ cleanup: TTC04AD TTC05AD TTD03AD TTD04AD TTD05AD TTF01MD TTF01ND TTF01OD TTF01PD TTF01QD \ TTF01RD TTG01AD TTG01AZ TTG01CD TTG01DD TTG01ED TTG01FD TTG01FZ TTG01GD TTG01HD \ TTG01ID TTG01JD TTG01JY TTG01LD TTG01MD TTG01ND TTG01PD TTG01QD \ - TUD01BD TUD01CD TUD01DD TUD01MD TUD01ND + TUD01BD TUD01CD TUD01DD TUD01MD TUD01ND TAB01MD.o: TAB01MD.f ; $(FORTRAN) $(OPTS) -c $< TAB01ND.o: TAB01ND.f ; $(FORTRAN) $(OPTS) -c $< diff --git a/slicot.pc.in b/slicot.pc.in new file mode 100644 index 0000000..687284a --- /dev/null +++ b/slicot.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ + +Name: slicot +Description: The SLICOT library +Version: @PROJECT_VERSION@ +Requires: blas, lapack +Libs: -L${libdir} -lslicot From a0a6f5b59756cf91a730ca4166e69677c0ca3efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Wed, 7 May 2025 11:12:08 +0200 Subject: [PATCH 06/22] Add detection for deprecated LAPACK routines --- .github/workflows/build-msys2.yml | 106 ++++ .github/workflows/build-unix.yml | 205 +++++++ CMakeLists.txt | 121 ++++- CTestCustom.cmake.in | 42 ++ cmake/FindGcov.cmake | 155 ++++++ cmake/Findcodecov.cmake | 202 +++++++ cmake/FortranCompilerSettings.cmake | 400 +++++++------- cmake/GitVersion.cmake | 45 ++ examples/CMakeLists.txt | 33 +- examples/TMB04DL.f | 2 +- examples/TMB4DLZ.f | 2 +- examples/runtest.cmake | 12 +- src/CMakeLists.txt | 35 +- src/MA02ES.f | 2 +- src/TG01JY.f | 4 +- src/lapack_aux/dgegs.f | 538 +++++++++++++++++++ src/lapack_aux/dgegv.f | 765 +++++++++++++++++++++++++++ {src_aux => src/lapack_aux}/dlatzm.f | 0 src/lapack_aux/zgegs.f | 532 +++++++++++++++++++ src/lapack_aux/zgegv.f | 701 ++++++++++++++++++++++++ {src_aux => src/lapack_aux}/zlatzm.f | 2 +- src_aux/makefile | 42 -- src_aux/makefile_Unix | 50 -- src_aux/readme | 5 - 24 files changed, 3687 insertions(+), 314 deletions(-) create mode 100644 .github/workflows/build-msys2.yml create mode 100644 .github/workflows/build-unix.yml create mode 100644 CTestCustom.cmake.in create mode 100644 cmake/FindGcov.cmake create mode 100644 cmake/Findcodecov.cmake create mode 100644 cmake/GitVersion.cmake create mode 100644 src/lapack_aux/dgegs.f create mode 100644 src/lapack_aux/dgegv.f rename {src_aux => src/lapack_aux}/dlatzm.f (100%) create mode 100644 src/lapack_aux/zgegs.f create mode 100644 src/lapack_aux/zgegv.f rename {src_aux => src/lapack_aux}/zlatzm.f (99%) delete mode 100644 src_aux/makefile delete mode 100644 src_aux/makefile_Unix delete mode 100644 src_aux/readme diff --git a/.github/workflows/build-msys2.yml b/.github/workflows/build-msys2.yml new file mode 100644 index 0000000..e05cb7c --- /dev/null +++ b/.github/workflows/build-msys2.yml @@ -0,0 +1,106 @@ +name: Build on Windows + +on: + push: + branches: + - main + - cmake_integration + paths: + - .github/workflows/*.yml + - '**CMakeLists.txt' + - 'cmake/**' + - 'examples/**' + - 'src/**' + - '!**Makefile' + - '!**md' + pull_request: + paths: + - .github/workflows/*.yml + - '**CMakeLists.txt' + - 'cmake/**' + - 'examples/**' + - 'src/**' + - '!**Makefile' + - '!**md' + +permissions: + contents: read + +jobs: + + test-install-release: + runs-on: ${{ matrix.os.runs-on }} + env: + BUILD_TYPE: Release + FFLAGS: ${{ matrix.fflags }} + + + strategy: + fail-fast: false + matrix: + fflags: + - "-fimplicit-none " + - "-fimplicit-none -fopenmp" + os: + # - { icon: '⬛', sys: mingw32, runs-on: 'windows-latest' } + - { icon: '🟦', sys: mingw64, runs-on: 'windows-latest', fortran: 'gcc-fortran' } + - { icon: '🟨', sys: ucrt64, runs-on: 'windows-latest', fortran: 'gcc-fortran' } + - { icon: '🟧', sys: clang64, runs-on: 'windows-latest', fortran: 'flang' } + - { icon: '🟩', sys: clangarm64, runs-on: 'windows-11-arm', fortran: 'flang' } + name: 🚧${{ matrix.os.icon }} ${{ matrix.os.sys }} + defaults: + run: + shell: msys2 {0} + steps: + + - name: '🧰 Checkout SLICOT' + uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: false + + - name: '${{ matrix.os.icon }} Setup MSYS2' + uses: msys2/setup-msys2@v2 + with: + msystem: ${{matrix.os.sys}} + update: true + install: >- + git + make + pacboy: >- + ${{ matrix.os.fortran }} + toolchain:p + cmake:p + ninja:p + lapack:p + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: > + cmake -B build -G Ninja + -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install + -D SLICOT_TESTING:BOOL=ON + -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON + -D CMAKE_EXE_LINKER_FLAGS="-Wl,--stack=2097152" + + + - name: '🚧 Build' + run: | + cmake --build build --config ${{env.BUILD_TYPE}} + + - name: Test with OpenMP + working-directory: ${{github.workspace}}/build + if: ${{ contains( matrix.fflags, 'openmp' ) }} + run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j1 --output-on-failure --timeout 100 + + - name: Test + working-directory: ${{github.workspace}}/build + if: ${{ !contains( matrix.fflags, 'openmp' ) }} + run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 --output-on-failure --timeout 100 + + - name: Install + run: cmake --build build --target install -j2 + +# diff --git a/.github/workflows/build-unix.yml b/.github/workflows/build-unix.yml new file mode 100644 index 0000000..c12700d --- /dev/null +++ b/.github/workflows/build-unix.yml @@ -0,0 +1,205 @@ +name: Build on Unix + +on: + push: + branches: + - main + - cmake_integration + paths: + - .github/workflows/*.yml + - '**CMakeLists.txt' + - 'cmake/**' + - 'examples/**' + - 'src/**' + - '!**Makefile' + - '!**md' + pull_request: + paths: + - .github/workflows/*.yml + - '**CMakeLists.txt' + - 'cmake/**' + - 'examples/**' + - 'src/**' + - '!**Makefile' + - '!**md' + +permissions: + contents: read + +#env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + +defaults: + run: + shell: bash + +jobs: + + test-install-release: + # Use GNU compilers + + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ${{ matrix.os }} + timeout-minutes: 5 + + env: + BUILD_TYPE: Release + FFLAGS: ${{ matrix.fflags }} + + strategy: + fail-fast: true + matrix: + os: [ macos-latest, ubuntu-latest ] + fflags: [ + "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -fimplicit-none -frecursive ", + "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -fimplicit-none -frecursive -fopenmp" ] + # Better flags but not used by now: + # "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all", + # "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all -fopenmp" ] + + steps: + + - name: Checkout SLICOT + uses: actions/checkout@v4.2.2 + + - name: Install ninja-build tool + uses: seanmiddleditch/gha-setup-ninja@v6 + + - name: Install basics (Ubuntu) + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + sudo apt update + sudo apt install -y cmake liblapack-dev libblas-dev + - name: Install basics (MacOS) + if: ${{ matrix.os == 'macos-latest' }} + run: | + brew install lapack + + - name: Use GCC-14 on MacOS + if: ${{ matrix.os == 'macos-latest' }} + run: > + cmake -B build -G Ninja + -D CMAKE_C_COMPILER="gcc-14" + -D CMAKE_Fortran_COMPILER="gfortran-14" + -D USE_FLAT_NAMESPACE:BOOL=ON + -D CMAKE_PREFIX_PATH="/opt/homebrew/opt/lapack" + -D BLA_VENDOR=Generic + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: > + cmake -B build -G Ninja + -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install + -D SLICOT_TESTING:BOOL=ON + -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON + + - name: Build + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: cmake --build build --config ${{env.BUILD_TYPE}} + + - name: Test with OpenMP + working-directory: ${{github.workspace}}/build + if: ${{ contains( matrix.fflags, 'openmp' ) }} + run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j1 --output-on-failure --timeout 100 + + - name: Test + working-directory: ${{github.workspace}}/build + if: ${{ !contains( matrix.fflags, 'openmp' ) }} + run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 --output-on-failure --timeout 100 + + - name: Install + run: cmake --build build --target install -j2 + +# coverage: +# runs-on: ubuntu-latest +# env: +# BUILD_TYPE: Coverage +# FFLAGS: "-fopenmp" +# steps: +# +# - name: Checkout SLICOT +# uses: actions/checkout@v4.2.2 +# +# - name: Install ninja-build tool +# uses: seanmiddleditch/gha-setup-ninja@v6 +# +# - name: Install basics +# run: | +# sudo apt update +# sudo apt install -y cmake liblapack-dev libblas-dev +# +# +# - name: Configure CMake +# # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. +# # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type +# run: > +# cmake -B build -G Ninja +# -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install +# -D SLICOT_BUILD_TESTING:BOOL=ON +# -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON +# +# - name: Install +# run: cmake --build build --target install -j2 +# +# - name: Coverage +# run: | +# echo "Coverage" +# cmake --build build --target coverage +# ctest -C ${{env.BUILD_TYPE}} --schedule-random -j1 --output-on-failure --timeout 100 +# bash <(curl -s https://codecov.io/bash) -X gcov +# +# memory-check: +# runs-on: ubuntu-latest +# env: +# BUILD_TYPE: Debug +# +# steps: +# +# - name: Checkout SLICOT +# uses: actions/checkout@v4.2.2 +# +# - name: Install ninja-build tool +# uses: seanmiddleditch/gha-setup-ninja@v6 +# +# - name: Install APT packages +# run: | +# sudo apt update +# sudo apt install -y cmake valgrind gfortran liblapack-dev libblas-dev +# +# - name: Configure CMake +# run: > +# cmake -B build -G Ninja +# -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} +# -D SLICOT_TESTING:BOOL=ON +# -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON +# +# - name: Build +# run: cmake --build build --config ${{env.BUILD_TYPE}} +# +# - name: Test +# working-directory: ${{github.workspace}}/build +# run: | +# ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 -T memcheck > memcheck.out +# cat memcheck.out +# if tail -n 1 memcheck.out | grep -q "Memory checking results:"; then +# exit 0 +# else +# for f in Testing/Temporary/MemoryChecker.*.log; do +# if tail -n 1 $f | grep -q "ERROR SUMMARY: 0 errors"; then +# tail -n 1 $f +# continue +# else +# echo "Memory check failed in $f" +# cat $f +# exit 1 +# fi +# done +# exit 0 +# fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 699b958..29c0459 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,37 +1,104 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.15.0) CMAKE_POLICY(SET CMP0048 NEW) -PROJECT(SLICOT VERSION 5.0.0 LANGUAGES C Fortran) + + +# Adding C to the list of languages is necessary, such that BLAS +# libraries requiring C libraries as well will work. This for +# example is necessary to run MKL + +PROJECT(SLICOT + VERSION 5.9.0 + LANGUAGES C Fortran) + # Add addtional CMAKE Paths. LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") +# Enforce Out of Source Builds INCLUDE(OutOfSource) -# Options -OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON) -OPTION(DEBUG "Enable Debug Symbol generation" OFF) -OPTION(TESTING "Enabled Tests" ON) +# Compile Options +OPTION(SLICOT_BUILD_SHARED_LIBS "Build shared libraries" ON) +OPTION(SLICOT_DEBUG "Enable Debug Symbol generation" OFF) +OPTION(SLICOT_INTEGER8 "Build with 64-bit integers (ILP64)" OFF) # Add ILP64 option + +# Enable Testing +IF(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + OPTION(SLICOT_TESTING "Build the SLICOT example programs and tests" ON) + IF (SLICOT_TESTING) + INCLUDE(CTest) + ENABLE_TESTING() + ENDIF() +ELSE() + SET(SLICOT_TESTING OFF) +ENDIF() + + + +# Shared libraries +IF (BUILD_SHARED_LIBS) + SET(SLICOT_BUILD_SHARED_LIBS ON) +endif() +IF(SLICOT_BUILD_SHARED_LIBS) + SET(BUILD_SHARED_LIBS ON) +ELSE() + SET(BUILD_SHARED_LIBS OFF) +ENDIF() + +IF (SLICOT_INTEGER8) + SET(INTEGER8 ON) +ELSE() + SET(INTEGER8 OFF) +ENDIF() # Enable PIC code by default SET(CMAKE_POSITION_INDEPENDENT_CODE TRUE) +SET(CMAKE_EXPORT_COMPILE_COMMANDS TRUE) +SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + +# Output directories +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) + +# Configure the Build + +INCLUDE(FortranCompilerSettings) +INCLUDE(GNUInstallDirs) + +# Set a default build type if none was specified +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "Coverage") +endif() # Select the Proper Build Type. -IF ( DEBUG STREQUAL ON ) +IF ( DEBUG STREQUAL ON OR CMAKE_BUILD_TYPE STREQUAL "Debug" ) SET (CMAKE_BUILD_TYPE "Debug") ADD_DEFINITIONS(-DDEBUG) ENDIF() -IF(NOT CMAKE_BUILD_TYPE) - SET (CMAKE_BUILD_TYPE "Release") -ENDIF() -IF (TESTING) - ENABLE_TESTING() -ENDIF() -# Configure the Build +# Coverage +set(_is_coverage_build 0) +set(_msg "Checking if build type is 'Coverage'") +message(STATUS "${_msg}") +if(NOT CMAKE_CONFIGURATION_TYPES) + string(TOLOWER ${CMAKE_BUILD_TYPE} _build_type_lc) + if(${_build_type_lc} STREQUAL "coverage") + set(_is_coverage_build 1) + endif() +endif() +message(STATUS "${_msg}: ${_is_coverage_build}") + +if(_is_coverage_build) + message(STATUS "Adding coverage") + find_package(codecov) +endif() + -INCLUDE(FortranCompilerSettings) -INCLUDE(GNUInstallDirs) # IBM XLF Compilation IF( CMAKE_Fortran_COMPILER_ID STREQUAL "XL") @@ -66,11 +133,20 @@ if(NOT TARGET LAPACK::LAPACK) set_property(LAPACK::LAPACK PROPERTY INTERFACE_LINK_OPTIONS ${LAPACK_LINKER_FLAGS}) endif() +ADD_SUBDIRECTORY(src) +IF(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + ADD_SUBDIRECTORY(examples) +ENDIF() + +# Configure the warning and code coverage suppression file +configure_file( + "${PROJECT_SOURCE_DIR}/CTestCustom.cmake.in" + "${PROJECT_BINARY_DIR}/CTestCustom.cmake" + @ONLY +) -ADD_SUBDIRECTORY(src) -ADD_SUBDIRECTORY(examples) INCLUDE(CMakePackageConfigHelpers) WRITE_BASIC_PACKAGE_VERSION_FILE( @@ -85,16 +161,19 @@ INSTALL(EXPORT slicot_targets ) CONFIGURE_FILE(SLICOTConfig.cmake.in SLICOTConfig.cmake @ONLY) -INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/SLICOTConfig.cmake" +INSTALL(FILES + "${CMAKE_CURRENT_BINARY_DIR}/SLICOTConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/SLICOTConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SLICOT - ) + ) CONFIGURE_FILE(slicot.pc.in slicot.pc @ONLY) -INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/slicot.pc" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +INSTALL(FILES + "${CMAKE_CURRENT_BINARY_DIR}/slicot.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") MESSAGE(STATUS "------------ Build Information --------------") +MESSAGE(STATUS "VERSION: ${PROJECT_VERSION} ${FULL_VERSION}") MESSAGE(STATUS "CMAKE_Fortran_FLAGS: ${CMAKE_Fortran_FLAGS}") MESSAGE(STATUS "CMAKE_Fortran_FLAGS_DEBUG: ${CMAKE_Fortran_FLAGS_DEBUG}") MESSAGE(STATUS "CMAKE_Fortran_FLAGS_RELEASE: ${CMAKE_Fortran_FLAGS_RELEASE}") diff --git a/CTestCustom.cmake.in b/CTestCustom.cmake.in new file mode 100644 index 0000000..085fac2 --- /dev/null +++ b/CTestCustom.cmake.in @@ -0,0 +1,42 @@ +# +# For further details regarding this file, +# see http://www.vtk.org/Wiki/CMake_Testing_With_CTest#Customizing_CTest +# + +set(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE 0) +set(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE 0) +set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS 500) +set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 500) + +# Files to explicitly exclude from code coverage +set(CTEST_CUSTOM_COVERAGE_EXCLUDE + ${CTEST_CUSTOM_COVERAGE_EXCLUDE} +) + +# Warnings to explicitly ignore +set(CTEST_CUSTOM_WARNING_EXCEPTION + ${CTEST_CUSTOM_WARNING_EXCEPTION} + + # Common warning when linking ATLAS built with GNU Fortran 4.1 and building + # with GNU Fortran 4.4. It can be safely ignored. + "libgfortran.*may conflict with libgfortran" + + # Harmless warning often seen on IRIX + "WARNING 84 : .*libm.* is not used for resolving any symbol" + + # Warnings caused by sun compilers when building code to only run on your + # native platform + "xarch=native on this architecture implies -xarch=.*which generates code that does not run" + + # Harmless warnings from the Intel compiler on Windows + "ipo: warning #11010: file format not recognized for .*\\.exe\\.embed\\.manifest\\.res" + "LINK : warning LNK4224: /INCREMENTAL:YES is no longer supported; ignored" + + # Warnings caused by string truncation in the test code. The truncation is + # intentional + "Character string truncated to length 1 on assignment" + + # Warnings caused by NFS build directories have out-of-sync times + "Warning: File .* has modification time .* in the future" +) + diff --git a/cmake/FindGcov.cmake b/cmake/FindGcov.cmake new file mode 100644 index 0000000..3d4c0a2 --- /dev/null +++ b/cmake/FindGcov.cmake @@ -0,0 +1,155 @@ +# This file is part of CMake-codecov. +# +# https://github.com/RWTH-ELP/CMake-codecov +# +# Copyright (c) +# 2015-2016 RWTH Aachen University, Federal Republic of Germany +# +# LICENSE : BSD 3-Clause License +# +# Written by Alexander Haase, alexander.haase@rwth-aachen.de +# Updated by Guillaume Jacquenot, guillaume.jacquenot@gmail.com + +# include required Modules +include(FindPackageHandleStandardArgs) + + +# Search for gcov binary. +set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET}) +set(CMAKE_REQUIRED_QUIET ${codecov_FIND_QUIETLY}) + +get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) +foreach (LANG ${ENABLED_LANGUAGES}) + # Gcov evaluation is dependent on the used compiler. Check gcov support for + # each compiler that is used. If gcov binary was already found for this + # compiler, do not try to find it again. + if(NOT GCOV_${CMAKE_${LANG}_COMPILER_ID}_BIN) + get_filename_component(COMPILER_PATH "${CMAKE_${LANG}_COMPILER}" PATH) + + if("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "GNU") + # Some distributions like OSX (homebrew) ship gcov with the compiler + # version appended as gcov-x. To find this binary we'll build the + # suggested binary name with the compiler version. + string(REGEX MATCH "^[0-9]+" GCC_VERSION + "${CMAKE_${LANG}_COMPILER_VERSION}") + + find_program(GCOV_BIN NAMES gcov-${GCC_VERSION} gcov + HINTS ${COMPILER_PATH}) + + elseif("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "Clang") + # Some distributions like Debian ship llvm-cov with the compiler + # version appended as llvm-cov-x.y. To find this binary we'll build + # the suggested binary name with the compiler version. + string(REGEX MATCH "^[0-9]+.[0-9]+" LLVM_VERSION + "${CMAKE_${LANG}_COMPILER_VERSION}") + + # llvm-cov prior version 3.5 seems to be not working with coverage + # evaluation tools, but these versions are compatible with the gcc + # gcov tool. + if(LLVM_VERSION VERSION_GREATER 3.4) + find_program(LLVM_COV_BIN NAMES "llvm-cov-${LLVM_VERSION}" + "llvm-cov" HINTS ${COMPILER_PATH}) + mark_as_advanced(LLVM_COV_BIN) + + if(LLVM_COV_BIN) + find_program(LLVM_COV_WRAPPER "llvm-cov-wrapper" PATHS + ${CMAKE_MODULE_PATH}) + if(LLVM_COV_WRAPPER) + set(GCOV_BIN "${LLVM_COV_WRAPPER}" CACHE FILEPATH "") + + # set additional parameters + set(GCOV_${CMAKE_${LANG}_COMPILER_ID}_ENV + "LLVM_COV_BIN=${LLVM_COV_BIN}" CACHE STRING + "Environment variables for llvm-cov-wrapper.") + mark_as_advanced(GCOV_${CMAKE_${LANG}_COMPILER_ID}_ENV) + endif() + endif() + endif() + + if(NOT GCOV_BIN) + # Fall back to gcov binary if llvm-cov was not found or is + # incompatible. This is the default on OSX, but may crash on + # recent Linux versions. + find_program(GCOV_BIN gcov HINTS ${COMPILER_PATH}) + endif() + endif() + + + if(GCOV_BIN) + set(GCOV_${CMAKE_${LANG}_COMPILER_ID}_BIN "${GCOV_BIN}" CACHE STRING + "${LANG} gcov binary.") + + if(NOT CMAKE_REQUIRED_QUIET) + message("-- Found gcov evaluation for " + "${CMAKE_${LANG}_COMPILER_ID}: ${GCOV_BIN}") + endif() + + unset(GCOV_BIN CACHE) + endif() + endif() +endforeach () + + +# Add a new global target for all gcov targets. This target could be used to +# generate the gcov files for the whole project instead of calling -gcov +# for each target. +if(NOT TARGET coverage) + add_custom_target(coverage) +endif() + + +# This function will add gcov evaluation for target . Only sources of +# this target will be evaluated and no dependencies will be added. It will call +# Gcov on any source file of once and store the gcov file in the same +# directory. +function (add_gcov_target TNAME) + set(TDIR ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TNAME}.dir) + + # We don't have to check, if the target has support for coverage, thus this + # will be checked by add_coverage_target in Findcoverage.cmake. Instead we + # have to determine which gcov binary to use. + get_target_property(TSOURCES ${TNAME} SOURCES) + set(SOURCES "") + set(TCOMPILER "") + foreach (FILE ${TSOURCES}) + codecov_path_of_source(${FILE} FILE) + if(NOT "${FILE}" STREQUAL "") + codecov_lang_of_source(${FILE} LANG) + if(NOT "${LANG}" STREQUAL "") + list(APPEND SOURCES "${FILE}") + set(TCOMPILER ${CMAKE_${LANG}_COMPILER_ID}) + endif() + endif() + endforeach() + + # If no gcov binary was found, coverage data can't be evaluated. + if(NOT GCOV_${TCOMPILER}_BIN) + message(WARNING "No coverage evaluation binary found for ${TCOMPILER}.") + return() + endif() + + set(GCOV_BIN "${GCOV_${TCOMPILER}_BIN}") + set(GCOV_ENV "${GCOV_${TCOMPILER}_ENV}") + + + set(BUFFER "") + foreach(FILE ${SOURCES}) + get_filename_component(FILE_PATH "${TDIR}/${FILE}" PATH) + + # call gcov + add_custom_command(OUTPUT ${TDIR}/${FILE}.gcov + COMMAND ${GCOV_ENV} ${GCOV_BIN} ${TDIR}/${FILE}.gcno > /dev/null + DEPENDS ${TNAME} ${TDIR}/${FILE}.gcno + WORKING_DIRECTORY ${FILE_PATH} + ) + + list(APPEND BUFFER ${TDIR}/${FILE}.gcov) + endforeach() + + + # add target for gcov evaluation of + add_custom_target(${TNAME}-gcov DEPENDS ${BUFFER}) + + # add evaluation target to the global gcov target. + add_dependencies(coverage ${TNAME}-gcov) +endfunction() diff --git a/cmake/Findcodecov.cmake b/cmake/Findcodecov.cmake new file mode 100644 index 0000000..93db451 --- /dev/null +++ b/cmake/Findcodecov.cmake @@ -0,0 +1,202 @@ +# This file is part of CMake-codecov. +# +# https://github.com/RWTH-ELP/CMake-codecov +# +# Copyright (c) +# 2015-2016 RWTH Aachen University, Federal Republic of Germany +# +# LICENSE : BSD 3-Clause License +# +# Written by Alexander Haase, alexander.haase@rwth-aachen.de +# Updated by Guillaume Jacquenot, guillaume.jacquenot@gmail.com + +set(COVERAGE_FLAG_CANDIDATES + # gcc and clang + "-O0 -g -fprofile-arcs -ftest-coverage" + + # gcc and clang fallback + "-O0 -g --coverage" +) + + +# To avoid error messages about CMP0051, this policy will be set to new. There +# will be no problem, as TARGET_OBJECTS generator expressions will be filtered +# with a regular expression from the sources. +if(POLICY CMP0051) + cmake_policy(SET CMP0051 NEW) +endif() + + +# Add coverage support for target ${TNAME} and register target for coverage +# evaluation. +function(add_coverage TNAME) + foreach (TNAME ${ARGV}) + add_coverage_target(${TNAME}) + endforeach() +endfunction() + + +# Find the required flags foreach language. +set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET}) +set(CMAKE_REQUIRED_QUIET ${codecov_FIND_QUIETLY}) + +get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) +foreach (LANG ${ENABLED_LANGUAGES}) + # Coverage flags are not dependent on language, but the used compiler. So + # instead of searching flags foreach language, search flags foreach compiler + # used. + set(COMPILER ${CMAKE_${LANG}_COMPILER_ID}) + if(NOT COVERAGE_${COMPILER}_FLAGS) + foreach (FLAG ${COVERAGE_FLAG_CANDIDATES}) + if(NOT CMAKE_REQUIRED_QUIET) + message(STATUS "Try ${COMPILER} code coverage flag = [${FLAG}]") + endif() + + set(CMAKE_REQUIRED_FLAGS "${FLAG}") + unset(COVERAGE_FLAG_DETECTED CACHE) + + if(${LANG} STREQUAL "C") + include(CheckCCompilerFlag) + check_c_compiler_flag("${FLAG}" COVERAGE_FLAG_DETECTED) + + elseif(${LANG} STREQUAL "CXX") + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("${FLAG}" COVERAGE_FLAG_DETECTED) + + elseif(${LANG} STREQUAL "Fortran") + # CheckFortranCompilerFlag was introduced in CMake 3.x. To be + # compatible with older Cmake versions, we will check if this + # module is present before we use it. Otherwise we will define + # Fortran coverage support as not available. + include(CheckFortranCompilerFlag OPTIONAL + RESULT_VARIABLE INCLUDED) + if(INCLUDED) + check_fortran_compiler_flag("${FLAG}" + COVERAGE_FLAG_DETECTED) + elseif(NOT CMAKE_REQUIRED_QUIET) + message("-- Performing Test COVERAGE_FLAG_DETECTED") + message("-- Performing Test COVERAGE_FLAG_DETECTED - Failed" + " (Check not supported)") + endif() + endif() + + if(COVERAGE_FLAG_DETECTED) + set(COVERAGE_${COMPILER}_FLAGS "${FLAG}" + CACHE STRING "${COMPILER} flags for code coverage.") + mark_as_advanced(COVERAGE_${COMPILER}_FLAGS) + break() + endif() + endforeach() + endif() +endforeach() + +set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE}) + +# Helper function to get the language of a source file. +function (codecov_lang_of_source FILE RETURN_VAR) + get_filename_component(FILE_EXT "${FILE}" EXT) + string(TOLOWER "${FILE_EXT}" FILE_EXT) + string(SUBSTRING "${FILE_EXT}" 1 -1 FILE_EXT) + + get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) + foreach (LANG ${ENABLED_LANGUAGES}) + list(FIND CMAKE_${LANG}_SOURCE_FILE_EXTENSIONS "${FILE_EXT}" TEMP) + if(NOT ${TEMP} EQUAL -1) + set(${RETURN_VAR} "${LANG}" PARENT_SCOPE) + return() + endif() + endforeach() + + set(${RETURN_VAR} "" PARENT_SCOPE) +endfunction() + +# Helper function to get the relative path of the source file destination path. +# This path is needed by FindGcov and FindLcov cmake files to locate the +# captured data. +function (codecov_path_of_source FILE RETURN_VAR) + string(REGEX MATCH "TARGET_OBJECTS:([^ >]+)" _source ${FILE}) + + # If expression was found, SOURCEFILE is a generator-expression for an + # object library. Currently we found no way to call this function automatic + # for the referenced target, so it must be called in the directory of the + # object library definition. + if(NOT "${_source}" STREQUAL "") + set(${RETURN_VAR} "" PARENT_SCOPE) + return() + endif() + + string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}/" "" FILE "${FILE}") + if(IS_ABSOLUTE ${FILE}) + file(RELATIVE_PATH FILE ${CMAKE_CURRENT_SOURCE_DIR} ${FILE}) + endif() + + # get the right path for file + string(REPLACE ".." "__" PATH "${FILE}") + + set(${RETURN_VAR} "${PATH}" PARENT_SCOPE) +endfunction() + +# Add coverage support for target ${TNAME} and register target for coverage +# evaluation. +function(add_coverage_target TNAME) + # Check if all sources for target use the same compiler. If a target uses + # e.g. C and Fortran mixed and uses different compilers (e.g. clang and + # gfortran) this can trigger huge problems, because different compilers may + # use different implementations for code coverage. + get_target_property(TSOURCES ${TNAME} SOURCES) + set(TARGET_COMPILER "") + set(ADDITIONAL_FILES "") + foreach (FILE ${TSOURCES}) + # If expression was found, FILE is a generator-expression for an object + # library. Object libraries will be ignored. + string(REGEX MATCH "TARGET_OBJECTS:([^ >]+)" _file ${FILE}) + if("${_file}" STREQUAL "") + codecov_lang_of_source(${FILE} LANG) + if(LANG) + list(APPEND TARGET_COMPILER ${CMAKE_${LANG}_COMPILER_ID}) + + list(APPEND ADDITIONAL_FILES "${FILE}.gcno") + list(APPEND ADDITIONAL_FILES "${FILE}.gcda") + endif() + endif() + endforeach () + + list(REMOVE_DUPLICATES TARGET_COMPILER) + list(LENGTH TARGET_COMPILER NUM_COMPILERS) + + if(NUM_COMPILERS GREATER 1) + message(AUTHOR_WARNING "Coverage disabled for target ${TNAME} because " + "it will be compiled by different compilers.") + return() + + elseif((NUM_COMPILERS EQUAL 0) OR + (NOT DEFINED "COVERAGE_${TARGET_COMPILER}_FLAGS")) + message(AUTHOR_WARNING "Coverage disabled for target ${TNAME} " + "because there is no sanitizer available for target sources.") + return() + endif() + + + # enable coverage for target + set_property(TARGET ${TNAME} APPEND_STRING + PROPERTY COMPILE_FLAGS " ${COVERAGE_${TARGET_COMPILER}_FLAGS}") + set_property(TARGET ${TNAME} APPEND_STRING + PROPERTY LINK_FLAGS " ${COVERAGE_${TARGET_COMPILER}_FLAGS}") + + + # Add gcov files generated by compiler to clean target. + set(CLEAN_FILES "") + foreach (FILE ${ADDITIONAL_FILES}) + codecov_path_of_source(${FILE} FILE) + list(APPEND CLEAN_FILES "CMakeFiles/${TNAME}.dir/${FILE}") + endforeach() + + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES + "${CLEAN_FILES}") + + add_gcov_target(${TNAME}) +endfunction() + +# Include modules for parsing the collected data and output it in a readable +# format (like gcov). +find_package(Gcov) diff --git a/cmake/FortranCompilerSettings.cmake b/cmake/FortranCompilerSettings.cmake index 8b801fe..77d2c82 100644 --- a/cmake/FortranCompilerSettings.cmake +++ b/cmake/FortranCompilerSettings.cmake @@ -1,243 +1,279 @@ IF (CMAKE_Fortran_COMPILER_LOADED) - OPTION(FORTRAN_BOUND_CHECK "Enable the Fortran bound checker" OFF) - OPTION(FORTRAN_SANITIZE "Enable the Fortran sanitizer" OFF) - - IF(NOT "${HOSTOPT}" STREQUAL "") - IF(NOT (HOSTOPT STREQUAL OFF OR HOSTOPT STREQUAL ON)) - STRING(SUBSTRING "${HOSTOPT}" 0 1 FIRST_CHAR) - IF( "${FIRST_CHAR}" STREQUAL "/" ) - MESSAGE(STATUS "Load user supplied Host Optimizations for Fortran -- ${HOSTOPT}") - INCLUDE(${HOSTOPT}) - ELSE() - MESSAGE(STATUS "Load user supplied Host Optimizations for Fortran -- ${CMAKE_BINARY_DIR}/${HOSTOPT}") - INCLUDE(${CMAKE_BINARY_DIR}/${HOSTOPT}) - ENDIF() - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${HOSTOPT_Fortran}" CACHE INTERNAL "") +OPTION(FORTRAN_BOUND_CHECK "Enable the Fortran bound checker" OFF) +OPTION(FORTRAN_SANITIZE "Enable the Fortran sanitizer" OFF) + +IF(NOT "${HOSTOPT}" STREQUAL "") + IF(NOT (HOSTOPT STREQUAL OFF OR HOSTOPT STREQUAL ON)) + STRING(SUBSTRING "${HOSTOPT}" 0 1 FIRST_CHAR) + IF( "${FIRST_CHAR}" STREQUAL "/" ) + MESSAGE(STATUS "Load user supplied Host Optimizations for Fortran -- ${HOSTOPT}") + INCLUDE(${HOSTOPT}) + ELSE() + MESSAGE(STATUS "Load user supplied Host Optimizations for Fortran -- ${CMAKE_BINARY_DIR}/${HOSTOPT}") + INCLUDE(${CMAKE_BINARY_DIR}/${HOSTOPT}) ENDIF() + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${HOSTOPT_Fortran}" CACHE INTERNAL "") ENDIF() +ENDIF() - # INCLUDE(CheckFortranCompilerFlag_meta) - INCLUDE(CheckFortranCompilerFlag) +INCLUDE(CheckFortranCompilerFlag) - FUNCTION(ADD_FORTRAN_COMPILER_FLAG VAR FLAGNAME ) - IF(DEFINED CACHE{FORTRAN_${FLAGNAME}_WORK}) - RETURN() - ENDIF() - SET(_SAVE ${CMAKE_REQUIRED_QUIET}) - UNSET(_WORKS CACHE) - SET(CMAKE_REQUIRED_QUIET TRUE) - CHECK_FORTRAN_COMPILER_FLAG("${FLAGNAME}" _WORKS) - SET(FORTRAN_${FLAGNAME}_WORK ${_WORKS} CACHE INTERNAL "Fortran Compiler supports ${FLAGNAME}") - - IF ( _WORKS) - SET(${VAR} "${${VAR}} ${FLAGNAME}" CACHE INTERNAL "" ) - MESSAGE(STATUS "Fortran compiler supports ${FLAGNAME}") +FUNCTION(ADD_FORTRAN_COMPILER_FLAG VAR FLAGNAME) + IF(DEFINED CACHE{FORTRAN_${VAR}_${FLAGNAME}_WORK}) + RETURN() + ENDIF() + SET(_SAVE ${CMAKE_REQUIRED_QUIET}) + UNSET(_WORKS CACHE) + SET(CMAKE_REQUIRED_QUIET TRUE) + CHECK_FORTRAN_COMPILER_FLAG("${FLAGNAME}" _WORKS) + SET(FORTRAN_${VAR}_${FLAGNAME}_WORK ${_WORKS} CACHE INTERNAL "Fortran Compiler supports ${FLAGNAME}") + + IF ( _WORKS) + SET(${VAR} "${${VAR}} ${FLAGNAME}" CACHE INTERNAL "" ) + MESSAGE(STATUS "Fortran compiler supports ${FLAGNAME}") + ELSE() + IF ("${ARGN}" STREQUAL "FORCE") + MESSAGE(FATAL_ERROR "Fortran compiler does not support ${FLAGNAME}") ELSE() MESSAGE(STATUS "Fortran compiler does not support ${FLAGNAME}") ENDIF() - SET(CMAKE_REQUIRED_QUIET ${_SAVE}) - ENDFUNCTION() + ENDIF() + SET(CMAKE_REQUIRED_QUIET ${_SAVE}) +ENDFUNCTION() + +IF(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") + # GNU + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-frecursive") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fPIC") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wimplicit-procedure") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wall") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wunused") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Warray-temporaries") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-fbacktrace") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wshadow") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fallow-argument-mismatch") + + IF(DEBUGOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") + ENDIF() - IF(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - # GNU - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-frecursive") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fPIC") + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fcheck=bounds") + ENDIF() - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") + IF ( FORTRAN_SANITIZE STREQUAL ON OR SANITIZE STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fcheck=all") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=undefined") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=address") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=leak") + ENDIF() - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wimplicit-procedure") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wall") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wunused") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Warray-temporaries") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-fbacktrace") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wshadow") + IF(INTEGER8 STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fdefault-integer-8") + ENDIF() - IF(DEBUGOPT STREQUAL ON) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") - ELSE() - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") + IF(HOSTOPT STREQUAL ON) + IF (CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mcpu=native") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mtune=native") + ELSE () + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-march=native") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mtune=native") ENDIF() + ENDIF() - IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fcheck=bounds") - ENDIF() + LIST(APPEND LIBRARIES "gfortran") - IF ( FORTRAN_SANITIZE STREQUAL ON OR SANITIZE STREQUAL ON) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fcheck=all") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=undefined") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=address") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fsanitize=leak") - ENDIF() + SET(I8FLAG "-fdefault-integer-8") - IF(INTEGER8 STREQUAL ON) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fdefault-integer-8") - ENDIF() +ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "Flang" OR CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fPIC") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-Mrecursive") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wimplicit-procedure") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wall") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wunused") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Warray-temporaries") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-fbacktrace") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wshadow") - IF(HOSTOPT STREQUAL ON) - IF (CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mcpu=native") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mtune=native") - ELSE () - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-march=native") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mtune=native") - ENDIF() - ENDIF() - LIST(APPEND LIBRARIES "gfortran") + IF(DEBUGOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") + ENDIF() + + IF(INTEGER8 STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG (CMAKE_Fortran_FLAGS "-fdefault-integer-8" FORCE) + ENDIF() + + IF(HOSTOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-march=native") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-mtune=native") + ENDIF() + + SET(I8FLAG "-fdefault-integer-8") - SET(I8FLAG "-fdefault-integer-8") +ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" OR CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM") + # Intel + IF (WIN32) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "/recursive") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "/heap-arrary:64") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "/O3") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "/Qunroll") - ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "Flang") - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fPIC -Mrecursive" CACHE INTERNAL "") - SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -O3" CACHE INTERNAL "") - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -Wimplicit-procedure -Wall -Wunused -Warray-temporaries -fbacktrace -Wshadow" CACHE INTERNAL "") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/warn:all") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/Zi") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/warn:nointerfaces") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/traceback") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/debug:all") IF(DEBUGOPT STREQUAL ON) - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -O3" CACHE INTERNAL "") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/O3") ELSE() - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -O0" CACHE INTERNAL "") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/O0") ENDIF() - IF(INTEGER8 STREQUAL ON) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-integer-8" CACHE INTERNAL "") + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "/check bounds") ENDIF() IF(HOSTOPT STREQUAL ON) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -march=native -mtune=native" CACHE INTERNAL "") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "/QxHost") ENDIF() - SET(I8FLAG "-fdefault-integer-8") - - ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" OR CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM") - # Intel - IF (WIN32) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /recursive /heap-arrays:64" CACHE INTERNAL "") - SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} /O3 /Qunroll" CACHE INTERNAL "") - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} /warn all /Zi /warn nointerfaces /traceback /debug all" CACHE INTERNAL "") - - IF(DEBUGOPT STREQUAL ON) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/O3") - ELSE() - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "/O0") - ENDIF() - - IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /check bounds" CACHE INTERNAL "") - ENDIF() - - IF(HOSTOPT STREQUAL ON) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /QxHost" CACHE INTERNAL "") - ENDIF() - - IF(INTEGER8 STREQUAL ON) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /4I8" CACHE INTERNAL "") - ENDIF() + IF(INTEGER8 STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "/4I8" FORCE) + ENDIF() - LIST(APPEND LIBRARIES "ifcore") + LIST(APPEND LIBRARIES "libifcore") - SET(I8FLAG "/4I8") - ELSE() - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-recursive") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fpic") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-heap-arrays 64") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-unroll") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-warn all") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-g") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-warn nointerfaces") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-traceback") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-debug all") - - IF(DEBUGOPT STREQUAL ON) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") - ELSE() - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") - ENDIF() - - IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-check bounds") - ENDIF() - - IF(INTEGER8 STREQUAL ON) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-i8") - ENDIF() - - IF(HOSTOPT STREQUAL ON) - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-xHost") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-flto") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-ipo") - ENDIF() - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qopt-report=3") - - LIST(APPEND LIBRARIES "ifcore") - - SET(I8FLAG "-i8") - ENDIF() + SET(I8FLAG "/4I8") - ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC" OR CMAKE_Fortran_COMPILER_ID STREQUAL "PGI") - # Nvidia HPC SDK (nvfortran) or PGI - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fpic -Mrecursive -Mnoipa" CACHE INTERNAL "") - SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -O3" CACHE INTERNAL "") - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -Minfo=all" CACHE INTERNAL "") + ELSE() # WIN32 + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-recursive") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fpic") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-heap-arrays 64") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-unroll") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-warn all") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-g") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-warn nointerfaces") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-traceback") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-debug all") IF(DEBUGOPT STREQUAL ON) - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -gopt -O3" CACHE INTERNAL "") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") ELSE() - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -g -O0" CACHE INTERNAL "") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") ENDIF() IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mbounds" CACHE INTERNAL "") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-check bounds") ENDIF() IF(INTEGER8 STREQUAL ON) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -i8" CACHE INTERNAL "") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-i8") ENDIF() IF(HOSTOPT STREQUAL ON) - SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fast -tp=native" CACHE INTERNAL "") - IF (DEBUGOPT STREQUAL ON) - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fast -tp=native" CACHE INTERNAL "") - ENDIF() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-xHost") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-flto") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-ipo") ENDIF() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qopt-report=3") + + LIST(APPEND LIBRARIES "ifcore") SET(I8FLAG "-i8") + ENDIF() - ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "XL") - # IBM XL - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qpic -qstrict=ieeefp -qnosave -qxlf77=nopersistent -qalias=std -qnoipa -qmaxmem=32768" CACHE INTERNAL "") - SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -qessl -qhot=level=2 -qreport -qlistfmt=html=all" CACHE INTERNAL "") - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -qsigtrap -g9" CACHE INTERNAL "") +ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC" OR CMAKE_Fortran_COMPILER_ID STREQUAL "PGI") + # Nvidia HPC SDK (nvfortran) or PGI + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fpic") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-Mrecursive") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-Mnoipa") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Minfo=all") + + IF(DEBUGOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-gopt") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-g") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") + ENDIF() - IF(HOSTOPT STREQUAL ON) - SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -O5 -qtune=auto -qarch=auto" CACHE INTERNAL "") - ELSE() - SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -O3" CACHE INTERNAL "") - ENDIF() + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-Mbounds") + ENDIF() - IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qcheck=all" CACHE INTERNAL "") - ENDIF() + IF(INTEGER8 STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-i8" FORCE) + ENDIF() - IF(DEBUGOPT STREQUAL ON) - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -O2" CACHE INTERNAL "") - ELSE() - SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -O0" CACHE INTERNAL "") + IF(HOSTOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-fast") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-tp=native") + + IF (DEBUGOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-fast") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-tp=native") ENDIF() + ENDIF() + + SET(I8FLAG "-i8") + +ELSEIF(CMAKE_Fortran_COMPILER_ID STREQUAL "XL") + # IBM XL + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qpic") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qstrict=ieeefp") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qnosave") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qxlf77=nopersistent") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qalias=std") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qnoipa") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qmaxmem=32768") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-qessl") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-qhot=level=2") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-qreport") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-qlistfmt=html=all") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-qsigtrap") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-g9") + + IF(HOSTOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O5") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-qtune=auto") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-qarch=auto") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") + ENDIF() - STRING(REPLACE "-qhalt=e" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") + IF ( FORTRAN_BOUND_CHECK STREQUAL ON ) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qcheck=all") + ENDIF() - IF(INTEGER8 STREQUAL ON) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qintsize=8" CACHE INTERNAL "") - ENDIF() + IF(DEBUGOPT STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O2") + ELSE() + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O0") + ENDIF() - IF(OPENMP_FOUND) - LIST(REMOVE_ITEM CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "xlomp_ser") - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}" CACHE INTERNAL "") - ENDIF() - SET(I8FLAG "-qintsize=8") + STRING(REPLACE "-qhalt=e" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") + IF(INTEGER8 STREQUAL ON) + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-qintsize=8" FORCE) + ENDIF() + + IF(OPENMP_FOUND) + LIST(REMOVE_ITEM CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "xlomp_ser") + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}" CACHE INTERNAL "") ENDIF() + SET(I8FLAG "-qintsize=8") +ENDIF() ENDIF() # Compiler loaded diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake new file mode 100644 index 0000000..6dd7b0e --- /dev/null +++ b/cmake/GitVersion.cmake @@ -0,0 +1,45 @@ +function(get_version_from_git) + find_package(Git QUIET) + if(NOT Git_FOUND) + return() + endif() + + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --always + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_TAG + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE GIT_RESULT + ) + + if(NOT GIT_RESULT EQUAL 0) + message(WARNING "Failed to get git tag") + return() + endif() + + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short=7 HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_SHORT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + string(REGEX REPLACE "^v" "" CLEAN_TAG "${GIT_TAG}") + if(CLEAN_TAG MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-.*)?$") + + set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1}) + set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE) + set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2}) + set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE) + set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3}) + set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE) + + set(FULL_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}+${GIT_COMMIT_SHORT_HASH}") + set(FULL_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}+${GIT_COMMIT_SHORT_HASH}" PARENT_SCOPE) + set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") + set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" PARENT_SCOPE) + else() + message(WARNING "Tag '${CLEAN_TAG}' does not match semver format") + endif() +endfunction() + diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 6274ea6..90b5a17 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -2,6 +2,7 @@ macro(add_slicot_test name src) get_filename_component(baseNAME ${src} NAME_WE) string(SUBSTRING ${baseNAME} 1 -1 baseNAME) set(TEST_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/data/${baseNAME}.dat") + set(TEST_RESULT "${CMAKE_CURRENT_SOURCE_DIR}/results/${baseNAME}.res") set(TEST_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${baseNAME}.exa") @@ -13,18 +14,38 @@ macro(add_slicot_test name src) add_executable(${name} ${src}) target_link_libraries(${name} SLICOT::slicot) if(EXISTS "${TEST_INPUT}") - add_test(NAME test-${baseNAME} COMMAND "${CMAKE_COMMAND}" - -DTEST=$ - -DINPUT=${TEST_INPUT} - -DOUTPUT=${TEST_OUTPUT} - -DINTDIR=${CMAKE_CFG_INTDIR} - -P "${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake") + if (EXISTS "${TEST_RESULT}") + add_test(NAME test-${baseNAME} COMMAND "${CMAKE_COMMAND}" + -DTEST=$ + -DINPUT=${TEST_INPUT} + -DOUTPUT=${TEST_OUTPUT} + -DRESULT=${TEST_RESULT} + -DINTDIR=${CMAKE_CFG_INTDIR} + -P "${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake") + + set_property(TEST test-${baseNAME} PROPERTY + ATTACHED_FILES "${TEST_INPUT};${TEST_RESULT};${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake") + else() + add_test(NAME test-${baseNAME} COMMAND "${CMAKE_COMMAND}" + -DTEST=$ + -DINPUT=${TEST_INPUT} + -DOUTPUT=${TEST_OUTPUT} + -DINTDIR=${CMAKE_CFG_INTDIR} + -P "${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake") + set_property(TEST test-${baseNAME} PROPERTY + ATTACHED_FILES "${TEST_INPUT};${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake") + + endif() else() add_test(NAME test-${name} COMMAND "${CMAKE_COMMAND}" -DTEST=$ -DOUTPUT=${TEST_OUTPUT} -DINTDIR=${CMAKE_CFG_INTDIR} -P "${LAPACK_SOURCE_DIR}/TESTING/runtest.cmake") + set_property(TEST test-${baseNAME} PROPERTY + ATTACHED_FILES "${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake") + + endif() endmacro() diff --git a/examples/TMB04DL.f b/examples/TMB04DL.f index b3e1b41..6da718c 100644 --- a/examples/TMB04DL.f +++ b/examples/TMB04DL.f @@ -9,7 +9,7 @@ PARAMETER ( LDA = NMAX, LDB = NMAX ) * .. Local Scalars .. CHARACTER*1 JOB - INTEGER I, ILO, INFO, IWARN, J, N + INTEGER I, ILO, IHI, INFO, IWARN, J, N DOUBLE PRECISION THRESH * .. Local Arrays .. DOUBLE PRECISION A(LDA, NMAX), B(LDB, NMAX), DWORK(8*NMAX), diff --git a/examples/TMB4DLZ.f b/examples/TMB4DLZ.f index d5e79fd..df1fb95 100644 --- a/examples/TMB4DLZ.f +++ b/examples/TMB4DLZ.f @@ -9,7 +9,7 @@ PARAMETER ( LDA = NMAX, LDB = NMAX ) * .. Local Scalars .. CHARACTER*1 JOB - INTEGER I, ILO, INFO, IWARN, J, N + INTEGER I, ILO, IHI, INFO, IWARN, J, N DOUBLE PRECISION THRESH * .. Local Arrays .. COMPLEX*16 A(LDA, NMAX ), B( LDB, NMAX ) diff --git a/examples/runtest.cmake b/examples/runtest.cmake index b0bdb61..4c029d8 100644 --- a/examples/runtest.cmake +++ b/examples/runtest.cmake @@ -33,8 +33,18 @@ if(DEFINED OUTPUT) message("Test ERROR:\n${TEST_ERROR}") endif() +# Since sign swaps like +0.0000 or -0.0000 are not detected by this approach, this could not be enabled. +# if (DEFINED RESULT AND DEFINED OUTPUT) +# execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol "${OUTPUT}" "${RESULT}" RESULT_VARIABLE COMPARE_RET) +# message("COMPARE_RET: ${COMPARE_RET}") +# else() +# SET(COMPARE_RET 0) +# endif() +SET(COMPARE_RET 0) + + # if the test does not return 0, then fail it -if(NOT ${RET} EQUAL 0) +if(NOT (${RET} EQUAL 0 AND ${COMPARE_RET} EQUAL 0)) message(FATAL_ERROR "Test ${TEST} returned ${RET}") endif() message( "Test ${TEST} returned ${RET}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 63e16f5..a5958bd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -95,11 +95,44 @@ SET(SOURCES delctg.f select.f zelctg.f ) + +# Check for deprecated LAPACK Symbols +INCLUDE(CheckFortranFunctionExists) + +MACRO(ADD_ROUTINE_IF_REQUIRED ROUTINE VAR SOURCE_FILE) + SET(_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + SET(CMAKE_REQUIRED_LIBRARIES BLAS::BLAS LAPACK::LAPACK) + + Check_Fortran_Function_Exists(${ROUTINE} ${VAR}) + IF (NOT ${VAR}) + MESSAGE(STATUS "Add ${SOURCE_FILE} to library.") + SET(SOURCES ${SOURCES} ${SOURCE_FILE}) + ENDIF() + SET(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES}) +ENDMACRO() + +ADD_ROUTINE_IF_REQUIRED(dgegs HAVE_DGEGS lapack_aux/dgegs.f) +ADD_ROUTINE_IF_REQUIRED(zgegs HAVE_ZGEGS lapack_aux/zgegs.f) +ADD_ROUTINE_IF_REQUIRED(dlatzm HAVE_DLAZTM lapack_aux/dlatzm.f) +ADD_ROUTINE_IF_REQUIRED(zlatzm HAVE_ZLAZTM lapack_aux/zlatzm.f) +ADD_ROUTINE_IF_REQUIRED(dgegv HAVE_DGEGS lapack_aux/dgegv.f) +ADD_ROUTINE_IF_REQUIRED(zgegv HAVE_ZGEGS lapack_aux/zgegv.f) + +# Setup the library. + ADD_LIBRARY(slicot ${SOURCES}) -TARGET_LINK_LIBRARIES(slicot LAPACK::LAPACK BLAS::BLAS) +TARGET_LINK_LIBRARIES(slicot PUBLIC LAPACK::LAPACK BLAS::BLAS) SET_PROPERTY(TARGET slicot PROPERTY VERSION ${PROJECT_VERSION}) SET_PROPERTY(TARGET slicot PROPERTY SOVERSION ${PROJECT_VERSION_MAJOR}) +if(_is_coverage_build) + target_link_libraries(slicot PRIVATE gcov) + add_coverage(slicot) +endif() + + + + ADD_LIBRARY(SLICOT::slicot ALIAS slicot) INSTALL(TARGETS slicot diff --git a/src/MA02ES.f b/src/MA02ES.f index 270465c..0868b9c 100644 --- a/src/MA02ES.f +++ b/src/MA02ES.f @@ -52,7 +52,7 @@ SUBROUTINE MA02ES( UPLO, N, A, LDA ) C .. Array Arguments .. DOUBLE PRECISION A(LDA,*) C .. Local Scalars .. - INTEGER J + INTEGER I, J C .. External Functions .. LOGICAL LSAME EXTERNAL LSAME diff --git a/src/TG01JY.f b/src/TG01JY.f index fc15ff1..edebf88 100644 --- a/src/TG01JY.f +++ b/src/TG01JY.f @@ -336,7 +336,7 @@ SUBROUTINE TG01JY( JOB, SYSTYP, EQUIL, CKSING, RESTOR, N, M, P, A, $ LBE, LBES, LDQ, LDZ, LWA, LWB, LWC, LWE, M1, $ MAXMP, MAXWRK, MINWRK, N1, NB, NBLCK, NC, NN, $ NX, P1 - DOUBLE PRECISION ANORM, ENORM, RCOND, T, TL, TT, TZER + DOUBLE PRECISION ANORM, ENORM, RCOND, T, TL, TT, TZER, THRESH C .. Local Arrays .. LOGICAL BWORK(1) DOUBLE PRECISION DUM(1) @@ -510,7 +510,7 @@ SUBROUTINE TG01JY( JOB, SYSTYP, EQUIL, CKSING, RESTOR, N, M, P, A, IF( THRESH.LT.ZERO ) THEN ANORM = DLANGE( '1-norm', N, N, A, LDA, DWORK ) ENORM = DLANGE( '1-norm', N, N, E, LDE, DWORK ) - THRESH = MAX( ANORM, ENORM, + THRESH = MAX( ANORM, ENORM, $ DLANGE( '1-norm', N, M, B, LDB, DWORK ), $ DLANGE( '1-norm', P, N, C, LDC, DWORK ) )*T END IF diff --git a/src/lapack_aux/dgegs.f b/src/lapack_aux/dgegs.f new file mode 100644 index 0000000..02e9fdc --- /dev/null +++ b/src/lapack_aux/dgegs.f @@ -0,0 +1,538 @@ +*> \brief DGEGS computes the eigenvalues, real Schur form, and, optionally, the left and/or right Schur vectors of a real matrix pair (A,B) +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DGEGS + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DGEGS( JOBVSL, JOBVSR, N, A, LDA, B, LDB, ALPHAR, +* ALPHAI, BETA, VSL, LDVSL, VSR, LDVSR, WORK, +* LWORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER JOBVSL, JOBVSR +* INTEGER INFO, LDA, LDB, LDVSL, LDVSR, LWORK, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), ALPHAI( * ), ALPHAR( * ), +* $ B( LDB, * ), BETA( * ), VSL( LDVSL, * ), +* $ VSR( LDVSR, * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This routine is deprecated and has been replaced by routine DGGES. +*> +*> DGEGS computes the eigenvalues, real Schur form, and, optionally, +*> left and or/right Schur vectors of a real matrix pair (A,B). +*> Given two square matrices A and B, the generalized real Schur +*> factorization has the form +*> +*> A = Q*S*Z**T, B = Q*T*Z**T +*> +*> where Q and Z are orthogonal matrices, T is upper triangular, and S +*> is an upper quasi-triangular matrix with 1-by-1 and 2-by-2 diagonal +*> blocks, the 2-by-2 blocks corresponding to complex conjugate pairs +*> of eigenvalues of (A,B). The columns of Q are the left Schur vectors +*> and the columns of Z are the right Schur vectors. +*> +*> If only the eigenvalues of (A,B) are needed, the driver routine +*> DGEGV should be used instead. See DGEGV for a description of the +*> eigenvalues of the generalized nonsymmetric eigenvalue problem +*> (GNEP). +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] JOBVSL +*> \verbatim +*> JOBVSL is CHARACTER*1 +*> = 'N': do not compute the left Schur vectors; +*> = 'V': compute the left Schur vectors (returned in VSL). +*> \endverbatim +*> +*> \param[in] JOBVSR +*> \verbatim +*> JOBVSR is CHARACTER*1 +*> = 'N': do not compute the right Schur vectors; +*> = 'V': compute the right Schur vectors (returned in VSR). +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrices A, B, VSL, and VSR. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA, N) +*> On entry, the matrix A. +*> On exit, the upper quasi-triangular matrix S from the +*> generalized real Schur factorization. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] B +*> \verbatim +*> B is DOUBLE PRECISION array, dimension (LDB, N) +*> On entry, the matrix B. +*> On exit, the upper triangular matrix T from the generalized +*> real Schur factorization. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of B. LDB >= max(1,N). +*> \endverbatim +*> +*> \param[out] ALPHAR +*> \verbatim +*> ALPHAR is DOUBLE PRECISION array, dimension (N) +*> The real parts of each scalar alpha defining an eigenvalue +*> of GNEP. +*> \endverbatim +*> +*> \param[out] ALPHAI +*> \verbatim +*> ALPHAI is DOUBLE PRECISION array, dimension (N) +*> The imaginary parts of each scalar alpha defining an +*> eigenvalue of GNEP. If ALPHAI(j) is zero, then the j-th +*> eigenvalue is real; if positive, then the j-th and (j+1)-st +*> eigenvalues are a complex conjugate pair, with +*> ALPHAI(j+1) = -ALPHAI(j). +*> \endverbatim +*> +*> \param[out] BETA +*> \verbatim +*> BETA is DOUBLE PRECISION array, dimension (N) +*> The scalars beta that define the eigenvalues of GNEP. +*> Together, the quantities alpha = (ALPHAR(j),ALPHAI(j)) and +*> beta = BETA(j) represent the j-th eigenvalue of the matrix +*> pair (A,B), in one of the forms lambda = alpha/beta or +*> mu = beta/alpha. Since either lambda or mu may overflow, +*> they should not, in general, be computed. +*> \endverbatim +*> +*> \param[out] VSL +*> \verbatim +*> VSL is DOUBLE PRECISION array, dimension (LDVSL,N) +*> If JOBVSL = 'V', the matrix of left Schur vectors Q. +*> Not referenced if JOBVSL = 'N'. +*> \endverbatim +*> +*> \param[in] LDVSL +*> \verbatim +*> LDVSL is INTEGER +*> The leading dimension of the matrix VSL. LDVSL >=1, and +*> if JOBVSL = 'V', LDVSL >= N. +*> \endverbatim +*> +*> \param[out] VSR +*> \verbatim +*> VSR is DOUBLE PRECISION array, dimension (LDVSR,N) +*> If JOBVSR = 'V', the matrix of right Schur vectors Z. +*> Not referenced if JOBVSR = 'N'. +*> \endverbatim +*> +*> \param[in] LDVSR +*> \verbatim +*> LDVSR is INTEGER +*> The leading dimension of the matrix VSR. LDVSR >= 1, and +*> if JOBVSR = 'V', LDVSR >= N. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK >= max(1,4*N). +*> For good performance, LWORK must generally be larger. +*> To compute the optimal value of LWORK, call ILAENV to get +*> blocksizes (for DGEQRF, DORMQR, and DORGQR.) Then compute: +*> NB -- MAX of the blocksizes for DGEQRF, DORMQR, and DORGQR +*> The optimal LWORK is 2*N + N*(NB+1). +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> = 1,...,N: +*> The QZ iteration failed. (A,B) are not in Schur +*> form, but ALPHAR(j), ALPHAI(j), and BETA(j) should +*> be correct for j=INFO+1,...,N. +*> > N: errors that usually indicate LAPACK problems: +*> =N+1: error return from DGGBAL +*> =N+2: error return from DGEQRF +*> =N+3: error return from DORMQR +*> =N+4: error return from DORGQR +*> =N+5: error return from DGGHRD +*> =N+6: error return from DHGEQZ (other than failed +*> iteration) +*> =N+7: error return from DGGBAK (computing VSL) +*> =N+8: error return from DGGBAK (computing VSR) +*> =N+9: error return from DLASCL (various places) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \ingroup doubleGEeigen +* +* ===================================================================== + SUBROUTINE DGEGS( JOBVSL, JOBVSR, N, A, LDA, B, LDB, ALPHAR, + $ ALPHAI, BETA, VSL, LDVSL, VSR, LDVSR, WORK, + $ LWORK, INFO ) +* +* -- LAPACK driver routine -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* +* .. Scalar Arguments .. + CHARACTER JOBVSL, JOBVSR + INTEGER INFO, LDA, LDB, LDVSL, LDVSR, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), ALPHAI( * ), ALPHAR( * ), + $ B( LDB, * ), BETA( * ), VSL( LDVSL, * ), + $ VSR( LDVSR, * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL ILASCL, ILBSCL, ILVSL, ILVSR, LQUERY + INTEGER ICOLS, IHI, IINFO, IJOBVL, IJOBVR, ILEFT, ILO, + $ IRIGHT, IROWS, ITAU, IWORK, LOPT, LWKMIN, + $ LWKOPT, NB, NB1, NB2, NB3 + DOUBLE PRECISION ANRM, ANRMTO, BIGNUM, BNRM, BNRMTO, EPS, + $ SAFMIN, SMLNUM +* .. +* .. External Subroutines .. + EXTERNAL DGEQRF, DGGBAK, DGGBAL, DGGHRD, DHGEQZ, DLACPY, + $ DLASCL, DLASET, DORGQR, DORMQR, XERBLA +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + DOUBLE PRECISION DLAMCH, DLANGE + EXTERNAL LSAME, ILAENV, DLAMCH, DLANGE +* .. +* .. Intrinsic Functions .. + INTRINSIC INT, MAX +* .. +* .. Executable Statements .. +* +* Decode the input arguments +* + IF( LSAME( JOBVSL, 'N' ) ) THEN + IJOBVL = 1 + ILVSL = .FALSE. + ELSE IF( LSAME( JOBVSL, 'V' ) ) THEN + IJOBVL = 2 + ILVSL = .TRUE. + ELSE + IJOBVL = -1 + ILVSL = .FALSE. + END IF +* + IF( LSAME( JOBVSR, 'N' ) ) THEN + IJOBVR = 1 + ILVSR = .FALSE. + ELSE IF( LSAME( JOBVSR, 'V' ) ) THEN + IJOBVR = 2 + ILVSR = .TRUE. + ELSE + IJOBVR = -1 + ILVSR = .FALSE. + END IF +* +* Test the input arguments +* + LWKMIN = MAX( 4*N, 1 ) + LWKOPT = LWKMIN + WORK( 1 ) = LWKOPT + LQUERY = ( LWORK.EQ.-1 ) + INFO = 0 + IF( IJOBVL.LE.0 ) THEN + INFO = -1 + ELSE IF( IJOBVR.LE.0 ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = -7 + ELSE IF( LDVSL.LT.1 .OR. ( ILVSL .AND. LDVSL.LT.N ) ) THEN + INFO = -12 + ELSE IF( LDVSR.LT.1 .OR. ( ILVSR .AND. LDVSR.LT.N ) ) THEN + INFO = -14 + ELSE IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN + INFO = -16 + END IF +* + IF( INFO.EQ.0 ) THEN + NB1 = ILAENV( 1, 'DGEQRF', ' ', N, N, -1, -1 ) + NB2 = ILAENV( 1, 'DORMQR', ' ', N, N, N, -1 ) + NB3 = ILAENV( 1, 'DORGQR', ' ', N, N, N, -1 ) + NB = MAX( NB1, NB2, NB3 ) + LOPT = 2*N + N*( NB+1 ) + WORK( 1 ) = LOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DGEGS ', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* +* Get machine constants +* + EPS = DLAMCH( 'E' )*DLAMCH( 'B' ) + SAFMIN = DLAMCH( 'S' ) + SMLNUM = N*SAFMIN / EPS + BIGNUM = ONE / SMLNUM +* +* Scale A if max element outside range [SMLNUM,BIGNUM] +* + ANRM = DLANGE( 'M', N, N, A, LDA, WORK ) + ILASCL = .FALSE. + IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN + ANRMTO = SMLNUM + ILASCL = .TRUE. + ELSE IF( ANRM.GT.BIGNUM ) THEN + ANRMTO = BIGNUM + ILASCL = .TRUE. + END IF +* + IF( ILASCL ) THEN + CALL DLASCL( 'G', -1, -1, ANRM, ANRMTO, N, N, A, LDA, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + END IF +* +* Scale B if max element outside range [SMLNUM,BIGNUM] +* + BNRM = DLANGE( 'M', N, N, B, LDB, WORK ) + ILBSCL = .FALSE. + IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN + BNRMTO = SMLNUM + ILBSCL = .TRUE. + ELSE IF( BNRM.GT.BIGNUM ) THEN + BNRMTO = BIGNUM + ILBSCL = .TRUE. + END IF +* + IF( ILBSCL ) THEN + CALL DLASCL( 'G', -1, -1, BNRM, BNRMTO, N, N, B, LDB, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + END IF +* +* Permute the matrix to make it more nearly triangular +* Workspace layout: (2*N words -- "work..." not actually used) +* left_permutation, right_permutation, work... +* + ILEFT = 1 + IRIGHT = N + 1 + IWORK = IRIGHT + N + CALL DGGBAL( 'P', N, A, LDA, B, LDB, ILO, IHI, WORK( ILEFT ), + $ WORK( IRIGHT ), WORK( IWORK ), IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 1 + GO TO 10 + END IF +* +* Reduce B to triangular form, and initialize VSL and/or VSR +* Workspace layout: ("work..." must have at least N words) +* left_permutation, right_permutation, tau, work... +* + IROWS = IHI + 1 - ILO + ICOLS = N + 1 - ILO + ITAU = IWORK + IWORK = ITAU + IROWS + CALL DGEQRF( IROWS, ICOLS, B( ILO, ILO ), LDB, WORK( ITAU ), + $ WORK( IWORK ), LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 2 + GO TO 10 + END IF +* + CALL DORMQR( 'L', 'T', IROWS, ICOLS, IROWS, B( ILO, ILO ), LDB, + $ WORK( ITAU ), A( ILO, ILO ), LDA, WORK( IWORK ), + $ LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 3 + GO TO 10 + END IF +* + IF( ILVSL ) THEN + CALL DLASET( 'Full', N, N, ZERO, ONE, VSL, LDVSL ) + CALL DLACPY( 'L', IROWS-1, IROWS-1, B( ILO+1, ILO ), LDB, + $ VSL( ILO+1, ILO ), LDVSL ) + CALL DORGQR( IROWS, IROWS, IROWS, VSL( ILO, ILO ), LDVSL, + $ WORK( ITAU ), WORK( IWORK ), LWORK+1-IWORK, + $ IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 4 + GO TO 10 + END IF + END IF +* + IF( ILVSR ) + $ CALL DLASET( 'Full', N, N, ZERO, ONE, VSR, LDVSR ) +* +* Reduce to generalized Hessenberg form +* + CALL DGGHRD( JOBVSL, JOBVSR, N, ILO, IHI, A, LDA, B, LDB, VSL, + $ LDVSL, VSR, LDVSR, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 5 + GO TO 10 + END IF +* +* Perform QZ algorithm, computing Schur vectors if desired +* Workspace layout: ("work..." must have at least 1 word) +* left_permutation, right_permutation, work... +* + IWORK = ITAU + CALL DHGEQZ( 'S', JOBVSL, JOBVSR, N, ILO, IHI, A, LDA, B, LDB, + $ ALPHAR, ALPHAI, BETA, VSL, LDVSL, VSR, LDVSR, + $ WORK( IWORK ), LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + IF( IINFO.GT.0 .AND. IINFO.LE.N ) THEN + INFO = IINFO + ELSE IF( IINFO.GT.N .AND. IINFO.LE.2*N ) THEN + INFO = IINFO - N + ELSE + INFO = N + 6 + END IF + GO TO 10 + END IF +* +* Apply permutation to VSL and VSR +* + IF( ILVSL ) THEN + CALL DGGBAK( 'P', 'L', N, ILO, IHI, WORK( ILEFT ), + $ WORK( IRIGHT ), N, VSL, LDVSL, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 7 + GO TO 10 + END IF + END IF + IF( ILVSR ) THEN + CALL DGGBAK( 'P', 'R', N, ILO, IHI, WORK( ILEFT ), + $ WORK( IRIGHT ), N, VSR, LDVSR, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 8 + GO TO 10 + END IF + END IF +* +* Undo scaling +* + IF( ILASCL ) THEN + CALL DLASCL( 'H', -1, -1, ANRMTO, ANRM, N, N, A, LDA, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + CALL DLASCL( 'G', -1, -1, ANRMTO, ANRM, N, 1, ALPHAR, N, + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + CALL DLASCL( 'G', -1, -1, ANRMTO, ANRM, N, 1, ALPHAI, N, + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + END IF +* + IF( ILBSCL ) THEN + CALL DLASCL( 'U', -1, -1, BNRMTO, BNRM, N, N, B, LDB, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + CALL DLASCL( 'G', -1, -1, BNRMTO, BNRM, N, 1, BETA, N, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + END IF +* + 10 CONTINUE + WORK( 1 ) = LWKOPT +* + RETURN +* +* End of DGEGS +* + END diff --git a/src/lapack_aux/dgegv.f b/src/lapack_aux/dgegv.f new file mode 100644 index 0000000..8a5fe68 --- /dev/null +++ b/src/lapack_aux/dgegv.f @@ -0,0 +1,765 @@ +*> \brief DGEGV computes the eigenvalues and, optionally, the left and/or right eigenvectors of a real matrix pair (A,B). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> Download DGEGV + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +* +* Definition: +* =========== +* +* SUBROUTINE DGEGV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, ALPHAI, +* BETA, VL, LDVL, VR, LDVR, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER JOBVL, JOBVR +* INTEGER INFO, LDA, LDB, LDVL, LDVR, LWORK, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), ALPHAI( * ), ALPHAR( * ), +* $ B( LDB, * ), BETA( * ), VL( LDVL, * ), +* $ VR( LDVR, * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This routine is deprecated and has been replaced by routine DGGEV. +*> +*> DGEGV computes the eigenvalues and, optionally, the left and/or right +*> eigenvectors of a real matrix pair (A,B). +*> Given two square matrices A and B, +*> the generalized nonsymmetric eigenvalue problem (GNEP) is to find the +*> eigenvalues lambda and corresponding (non-zero) eigenvectors x such +*> that +*> +*> A*x = lambda*B*x. +*> +*> An alternate form is to find the eigenvalues mu and corresponding +*> eigenvectors y such that +*> +*> mu*A*y = B*y. +*> +*> These two forms are equivalent with mu = 1/lambda and x = y if +*> neither lambda nor mu is zero. In order to deal with the case that +*> lambda or mu is zero or small, two values alpha and beta are returned +*> for each eigenvalue, such that lambda = alpha/beta and +*> mu = beta/alpha. +*> +*> The vectors x and y in the above equations are right eigenvectors of +*> the matrix pair (A,B). Vectors u and v satisfying +*> +*> u**H*A = lambda*u**H*B or mu*v**H*A = v**H*B +*> +*> are left eigenvectors of (A,B). +*> +*> Note: this routine performs "full balancing" on A and B +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] JOBVL +*> \verbatim +*> JOBVL is CHARACTER*1 +*> = 'N': do not compute the left generalized eigenvectors; +*> = 'V': compute the left generalized eigenvectors (returned +*> in VL). +*> \endverbatim +*> +*> \param[in] JOBVR +*> \verbatim +*> JOBVR is CHARACTER*1 +*> = 'N': do not compute the right generalized eigenvectors; +*> = 'V': compute the right generalized eigenvectors (returned +*> in VR). +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrices A, B, VL, and VR. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA, N) +*> On entry, the matrix A. +*> If JOBVL = 'V' or JOBVR = 'V', then on exit A +*> contains the real Schur form of A from the generalized Schur +*> factorization of the pair (A,B) after balancing. +*> If no eigenvectors were computed, then only the diagonal +*> blocks from the Schur form will be correct. See DGGHRD and +*> DHGEQZ for details. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] B +*> \verbatim +*> B is DOUBLE PRECISION array, dimension (LDB, N) +*> On entry, the matrix B. +*> If JOBVL = 'V' or JOBVR = 'V', then on exit B contains the +*> upper triangular matrix obtained from B in the generalized +*> Schur factorization of the pair (A,B) after balancing. +*> If no eigenvectors were computed, then only those elements of +*> B corresponding to the diagonal blocks from the Schur form of +*> A will be correct. See DGGHRD and DHGEQZ for details. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of B. LDB >= max(1,N). +*> \endverbatim +*> +*> \param[out] ALPHAR +*> \verbatim +*> ALPHAR is DOUBLE PRECISION array, dimension (N) +*> The real parts of each scalar alpha defining an eigenvalue of +*> GNEP. +*> \endverbatim +*> +*> \param[out] ALPHAI +*> \verbatim +*> ALPHAI is DOUBLE PRECISION array, dimension (N) +*> The imaginary parts of each scalar alpha defining an +*> eigenvalue of GNEP. If ALPHAI(j) is zero, then the j-th +*> eigenvalue is real; if positive, then the j-th and +*> (j+1)-st eigenvalues are a complex conjugate pair, with +*> ALPHAI(j+1) = -ALPHAI(j). +*> \endverbatim +*> +*> \param[out] BETA +*> \verbatim +*> BETA is DOUBLE PRECISION array, dimension (N) +*> The scalars beta that define the eigenvalues of GNEP. +*> +*> Together, the quantities alpha = (ALPHAR(j),ALPHAI(j)) and +*> beta = BETA(j) represent the j-th eigenvalue of the matrix +*> pair (A,B), in one of the forms lambda = alpha/beta or +*> mu = beta/alpha. Since either lambda or mu may overflow, +*> they should not, in general, be computed. +*> \endverbatim +*> +*> \param[out] VL +*> \verbatim +*> VL is DOUBLE PRECISION array, dimension (LDVL,N) +*> If JOBVL = 'V', the left eigenvectors u(j) are stored +*> in the columns of VL, in the same order as their eigenvalues. +*> If the j-th eigenvalue is real, then u(j) = VL(:,j). +*> If the j-th and (j+1)-st eigenvalues form a complex conjugate +*> pair, then +*> u(j) = VL(:,j) + i*VL(:,j+1) +*> and +*> u(j+1) = VL(:,j) - i*VL(:,j+1). +*> +*> Each eigenvector is scaled so that its largest component has +*> abs(real part) + abs(imag. part) = 1, except for eigenvectors +*> corresponding to an eigenvalue with alpha = beta = 0, which +*> are set to zero. +*> Not referenced if JOBVL = 'N'. +*> \endverbatim +*> +*> \param[in] LDVL +*> \verbatim +*> LDVL is INTEGER +*> The leading dimension of the matrix VL. LDVL >= 1, and +*> if JOBVL = 'V', LDVL >= N. +*> \endverbatim +*> +*> \param[out] VR +*> \verbatim +*> VR is DOUBLE PRECISION array, dimension (LDVR,N) +*> If JOBVR = 'V', the right eigenvectors x(j) are stored +*> in the columns of VR, in the same order as their eigenvalues. +*> If the j-th eigenvalue is real, then x(j) = VR(:,j). +*> If the j-th and (j+1)-st eigenvalues form a complex conjugate +*> pair, then +*> x(j) = VR(:,j) + i*VR(:,j+1) +*> and +*> x(j+1) = VR(:,j) - i*VR(:,j+1). +*> +*> Each eigenvector is scaled so that its largest component has +*> abs(real part) + abs(imag. part) = 1, except for eigenvalues +*> corresponding to an eigenvalue with alpha = beta = 0, which +*> are set to zero. +*> Not referenced if JOBVR = 'N'. +*> \endverbatim +*> +*> \param[in] LDVR +*> \verbatim +*> LDVR is INTEGER +*> The leading dimension of the matrix VR. LDVR >= 1, and +*> if JOBVR = 'V', LDVR >= N. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK >= max(1,8*N). +*> For good performance, LWORK must generally be larger. +*> To compute the optimal value of LWORK, call ILAENV to get +*> blocksizes (for DGEQRF, DORMQR, and DORGQR.) Then compute: +*> NB -- MAX of the blocksizes for DGEQRF, DORMQR, and DORGQR; +*> The optimal LWORK is: +*> 2*N + MAX( 6*N, N*(NB+1) ). +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> = 1,...,N: +*> The QZ iteration failed. No eigenvectors have been +*> calculated, but ALPHAR(j), ALPHAI(j), and BETA(j) +*> should be correct for j=INFO+1,...,N. +*> > N: errors that usually indicate LAPACK problems: +*> =N+1: error return from DGGBAL +*> =N+2: error return from DGEQRF +*> =N+3: error return from DORMQR +*> =N+4: error return from DORGQR +*> =N+5: error return from DGGHRD +*> =N+6: error return from DHGEQZ (other than failed +*> iteration) +*> =N+7: error return from DTGEVC +*> =N+8: error return from DGGBAK (computing VL) +*> =N+9: error return from DGGBAK (computing VR) +*> =N+10: error return from DLASCL (various calls) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \ingroup doubleGEeigen +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Balancing +*> --------- +*> +*> This driver calls DGGBAL to both permute and scale rows and columns +*> of A and B. The permutations PL and PR are chosen so that PL*A*PR +*> and PL*B*R will be upper triangular except for the diagonal blocks +*> A(i:j,i:j) and B(i:j,i:j), with i and j as close together as +*> possible. The diagonal scaling matrices DL and DR are chosen so +*> that the pair DL*PL*A*PR*DR, DL*PL*B*PR*DR have elements close to +*> one (except for the elements that start out zero.) +*> +*> After the eigenvalues and eigenvectors of the balanced matrices +*> have been computed, DGGBAK transforms the eigenvectors back to what +*> they would have been (in perfect arithmetic) if they had not been +*> balanced. +*> +*> Contents of A and B on Exit +*> -------- -- - --- - -- ---- +*> +*> If any eigenvectors are computed (either JOBVL='V' or JOBVR='V' or +*> both), then on exit the arrays A and B will contain the real Schur +*> form[*] of the "balanced" versions of A and B. If no eigenvectors +*> are computed, then only the diagonal blocks will be correct. +*> +*> [*] See DHGEQZ, DGEGS, or read the book "Matrix Computations", +*> by Golub & van Loan, pub. by Johns Hopkins U. Press. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DGEGV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, + $ ALPHAI, BETA, VL, LDVL, VR, LDVR, WORK, LWORK, + $ INFO ) +* +* -- LAPACK driver routine -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* +* .. Scalar Arguments .. + CHARACTER JOBVL, JOBVR + INTEGER INFO, LDA, LDB, LDVL, LDVR, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), ALPHAI( * ), ALPHAR( * ), + $ B( LDB, * ), BETA( * ), VL( LDVL, * ), + $ VR( LDVR, * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL ILIMIT, ILV, ILVL, ILVR, LQUERY + CHARACTER CHTEMP + INTEGER ICOLS, IHI, IINFO, IJOBVL, IJOBVR, ILEFT, ILO, + $ IN, IRIGHT, IROWS, ITAU, IWORK, JC, JR, LOPT, + $ LWKMIN, LWKOPT, NB, NB1, NB2, NB3 + DOUBLE PRECISION ABSAI, ABSAR, ABSB, ANRM, ANRM1, ANRM2, BNRM, + $ BNRM1, BNRM2, EPS, ONEPLS, SAFMAX, SAFMIN, + $ SALFAI, SALFAR, SBETA, SCALE, TEMP +* .. +* .. Local Arrays .. + LOGICAL LDUMMA( 1 ) +* .. +* .. External Subroutines .. + EXTERNAL DGEQRF, DGGBAK, DGGBAL, DGGHRD, DHGEQZ, DLACPY, + $ DLASCL, DLASET, DORGQR, DORMQR, DTGEVC, XERBLA +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + DOUBLE PRECISION DLAMCH, DLANGE + EXTERNAL LSAME, ILAENV, DLAMCH, DLANGE +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, INT, MAX +* .. +* .. Executable Statements .. +* +* Decode the input arguments +* + IF( LSAME( JOBVL, 'N' ) ) THEN + IJOBVL = 1 + ILVL = .FALSE. + ELSE IF( LSAME( JOBVL, 'V' ) ) THEN + IJOBVL = 2 + ILVL = .TRUE. + ELSE + IJOBVL = -1 + ILVL = .FALSE. + END IF +* + IF( LSAME( JOBVR, 'N' ) ) THEN + IJOBVR = 1 + ILVR = .FALSE. + ELSE IF( LSAME( JOBVR, 'V' ) ) THEN + IJOBVR = 2 + ILVR = .TRUE. + ELSE + IJOBVR = -1 + ILVR = .FALSE. + END IF + ILV = ILVL .OR. ILVR +* +* Test the input arguments +* + LWKMIN = MAX( 8*N, 1 ) + LWKOPT = LWKMIN + WORK( 1 ) = LWKOPT + LQUERY = ( LWORK.EQ.-1 ) + INFO = 0 + IF( IJOBVL.LE.0 ) THEN + INFO = -1 + ELSE IF( IJOBVR.LE.0 ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = -7 + ELSE IF( LDVL.LT.1 .OR. ( ILVL .AND. LDVL.LT.N ) ) THEN + INFO = -12 + ELSE IF( LDVR.LT.1 .OR. ( ILVR .AND. LDVR.LT.N ) ) THEN + INFO = -14 + ELSE IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN + INFO = -16 + END IF +* + IF( INFO.EQ.0 ) THEN + NB1 = ILAENV( 1, 'DGEQRF', ' ', N, N, -1, -1 ) + NB2 = ILAENV( 1, 'DORMQR', ' ', N, N, N, -1 ) + NB3 = ILAENV( 1, 'DORGQR', ' ', N, N, N, -1 ) + NB = MAX( NB1, NB2, NB3 ) + LOPT = 2*N + MAX( 6*N, N*( NB+1 ) ) + WORK( 1 ) = LOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DGEGV ', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* +* Get machine constants +* + EPS = DLAMCH( 'E' )*DLAMCH( 'B' ) + SAFMIN = DLAMCH( 'S' ) + SAFMIN = SAFMIN + SAFMIN + SAFMAX = ONE / SAFMIN + ONEPLS = ONE + ( 4*EPS ) +* +* Scale A +* + ANRM = DLANGE( 'M', N, N, A, LDA, WORK ) + ANRM1 = ANRM + ANRM2 = ONE + IF( ANRM.LT.ONE ) THEN + IF( SAFMAX*ANRM.LT.ONE ) THEN + ANRM1 = SAFMIN + ANRM2 = SAFMAX*ANRM + END IF + END IF +* + IF( ANRM.GT.ZERO ) THEN + CALL DLASCL( 'G', -1, -1, ANRM, ONE, N, N, A, LDA, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 10 + RETURN + END IF + END IF +* +* Scale B +* + BNRM = DLANGE( 'M', N, N, B, LDB, WORK ) + BNRM1 = BNRM + BNRM2 = ONE + IF( BNRM.LT.ONE ) THEN + IF( SAFMAX*BNRM.LT.ONE ) THEN + BNRM1 = SAFMIN + BNRM2 = SAFMAX*BNRM + END IF + END IF +* + IF( BNRM.GT.ZERO ) THEN + CALL DLASCL( 'G', -1, -1, BNRM, ONE, N, N, B, LDB, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 10 + RETURN + END IF + END IF +* +* Permute the matrix to make it more nearly triangular +* Workspace layout: (8*N words -- "work" requires 6*N words) +* left_permutation, right_permutation, work... +* + ILEFT = 1 + IRIGHT = N + 1 + IWORK = IRIGHT + N + CALL DGGBAL( 'P', N, A, LDA, B, LDB, ILO, IHI, WORK( ILEFT ), + $ WORK( IRIGHT ), WORK( IWORK ), IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 1 + GO TO 120 + END IF +* +* Reduce B to triangular form, and initialize VL and/or VR +* Workspace layout: ("work..." must have at least N words) +* left_permutation, right_permutation, tau, work... +* + IROWS = IHI + 1 - ILO + IF( ILV ) THEN + ICOLS = N + 1 - ILO + ELSE + ICOLS = IROWS + END IF + ITAU = IWORK + IWORK = ITAU + IROWS + CALL DGEQRF( IROWS, ICOLS, B( ILO, ILO ), LDB, WORK( ITAU ), + $ WORK( IWORK ), LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 2 + GO TO 120 + END IF +* + CALL DORMQR( 'L', 'T', IROWS, ICOLS, IROWS, B( ILO, ILO ), LDB, + $ WORK( ITAU ), A( ILO, ILO ), LDA, WORK( IWORK ), + $ LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 3 + GO TO 120 + END IF +* + IF( ILVL ) THEN + CALL DLASET( 'Full', N, N, ZERO, ONE, VL, LDVL ) + CALL DLACPY( 'L', IROWS-1, IROWS-1, B( ILO+1, ILO ), LDB, + $ VL( ILO+1, ILO ), LDVL ) + CALL DORGQR( IROWS, IROWS, IROWS, VL( ILO, ILO ), LDVL, + $ WORK( ITAU ), WORK( IWORK ), LWORK+1-IWORK, + $ IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 4 + GO TO 120 + END IF + END IF +* + IF( ILVR ) + $ CALL DLASET( 'Full', N, N, ZERO, ONE, VR, LDVR ) +* +* Reduce to generalized Hessenberg form +* + IF( ILV ) THEN +* +* Eigenvectors requested -- work on whole matrix. +* + CALL DGGHRD( JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, VL, + $ LDVL, VR, LDVR, IINFO ) + ELSE + CALL DGGHRD( 'N', 'N', IROWS, 1, IROWS, A( ILO, ILO ), LDA, + $ B( ILO, ILO ), LDB, VL, LDVL, VR, LDVR, IINFO ) + END IF + IF( IINFO.NE.0 ) THEN + INFO = N + 5 + GO TO 120 + END IF +* +* Perform QZ algorithm +* Workspace layout: ("work..." must have at least 1 word) +* left_permutation, right_permutation, work... +* + IWORK = ITAU + IF( ILV ) THEN + CHTEMP = 'S' + ELSE + CHTEMP = 'E' + END IF + CALL DHGEQZ( CHTEMP, JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, + $ ALPHAR, ALPHAI, BETA, VL, LDVL, VR, LDVR, + $ WORK( IWORK ), LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + IF( IINFO.GT.0 .AND. IINFO.LE.N ) THEN + INFO = IINFO + ELSE IF( IINFO.GT.N .AND. IINFO.LE.2*N ) THEN + INFO = IINFO - N + ELSE + INFO = N + 6 + END IF + GO TO 120 + END IF +* + IF( ILV ) THEN +* +* Compute Eigenvectors (DTGEVC requires 6*N words of workspace) +* + IF( ILVL ) THEN + IF( ILVR ) THEN + CHTEMP = 'B' + ELSE + CHTEMP = 'L' + END IF + ELSE + CHTEMP = 'R' + END IF +* + CALL DTGEVC( CHTEMP, 'B', LDUMMA, N, A, LDA, B, LDB, VL, LDVL, + $ VR, LDVR, N, IN, WORK( IWORK ), IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 7 + GO TO 120 + END IF +* +* Undo balancing on VL and VR, rescale +* + IF( ILVL ) THEN + CALL DGGBAK( 'P', 'L', N, ILO, IHI, WORK( ILEFT ), + $ WORK( IRIGHT ), N, VL, LDVL, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 8 + GO TO 120 + END IF + DO 50 JC = 1, N + IF( ALPHAI( JC ).LT.ZERO ) + $ GO TO 50 + TEMP = ZERO + IF( ALPHAI( JC ).EQ.ZERO ) THEN + DO 10 JR = 1, N + TEMP = MAX( TEMP, ABS( VL( JR, JC ) ) ) + 10 CONTINUE + ELSE + DO 20 JR = 1, N + TEMP = MAX( TEMP, ABS( VL( JR, JC ) )+ + $ ABS( VL( JR, JC+1 ) ) ) + 20 CONTINUE + END IF + IF( TEMP.LT.SAFMIN ) + $ GO TO 50 + TEMP = ONE / TEMP + IF( ALPHAI( JC ).EQ.ZERO ) THEN + DO 30 JR = 1, N + VL( JR, JC ) = VL( JR, JC )*TEMP + 30 CONTINUE + ELSE + DO 40 JR = 1, N + VL( JR, JC ) = VL( JR, JC )*TEMP + VL( JR, JC+1 ) = VL( JR, JC+1 )*TEMP + 40 CONTINUE + END IF + 50 CONTINUE + END IF + IF( ILVR ) THEN + CALL DGGBAK( 'P', 'R', N, ILO, IHI, WORK( ILEFT ), + $ WORK( IRIGHT ), N, VR, LDVR, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + GO TO 120 + END IF + DO 100 JC = 1, N + IF( ALPHAI( JC ).LT.ZERO ) + $ GO TO 100 + TEMP = ZERO + IF( ALPHAI( JC ).EQ.ZERO ) THEN + DO 60 JR = 1, N + TEMP = MAX( TEMP, ABS( VR( JR, JC ) ) ) + 60 CONTINUE + ELSE + DO 70 JR = 1, N + TEMP = MAX( TEMP, ABS( VR( JR, JC ) )+ + $ ABS( VR( JR, JC+1 ) ) ) + 70 CONTINUE + END IF + IF( TEMP.LT.SAFMIN ) + $ GO TO 100 + TEMP = ONE / TEMP + IF( ALPHAI( JC ).EQ.ZERO ) THEN + DO 80 JR = 1, N + VR( JR, JC ) = VR( JR, JC )*TEMP + 80 CONTINUE + ELSE + DO 90 JR = 1, N + VR( JR, JC ) = VR( JR, JC )*TEMP + VR( JR, JC+1 ) = VR( JR, JC+1 )*TEMP + 90 CONTINUE + END IF + 100 CONTINUE + END IF +* +* End of eigenvector calculation +* + END IF +* +* Undo scaling in alpha, beta +* +* Note: this does not give the alpha and beta for the unscaled +* problem. +* +* Un-scaling is limited to avoid underflow in alpha and beta +* if they are significant. +* + DO 110 JC = 1, N + ABSAR = ABS( ALPHAR( JC ) ) + ABSAI = ABS( ALPHAI( JC ) ) + ABSB = ABS( BETA( JC ) ) + SALFAR = ANRM*ALPHAR( JC ) + SALFAI = ANRM*ALPHAI( JC ) + SBETA = BNRM*BETA( JC ) + ILIMIT = .FALSE. + SCALE = ONE +* +* Check for significant underflow in ALPHAI +* + IF( ABS( SALFAI ).LT.SAFMIN .AND. ABSAI.GE. + $ MAX( SAFMIN, EPS*ABSAR, EPS*ABSB ) ) THEN + ILIMIT = .TRUE. + SCALE = ( ONEPLS*SAFMIN / ANRM1 ) / + $ MAX( ONEPLS*SAFMIN, ANRM2*ABSAI ) +* + ELSE IF( SALFAI.EQ.ZERO ) THEN +* +* If insignificant underflow in ALPHAI, then make the +* conjugate eigenvalue real. +* + IF( ALPHAI( JC ).LT.ZERO .AND. JC.GT.1 ) THEN + ALPHAI( JC-1 ) = ZERO + ELSE IF( ALPHAI( JC ).GT.ZERO .AND. JC.LT.N ) THEN + ALPHAI( JC+1 ) = ZERO + END IF + END IF +* +* Check for significant underflow in ALPHAR +* + IF( ABS( SALFAR ).LT.SAFMIN .AND. ABSAR.GE. + $ MAX( SAFMIN, EPS*ABSAI, EPS*ABSB ) ) THEN + ILIMIT = .TRUE. + SCALE = MAX( SCALE, ( ONEPLS*SAFMIN / ANRM1 ) / + $ MAX( ONEPLS*SAFMIN, ANRM2*ABSAR ) ) + END IF +* +* Check for significant underflow in BETA +* + IF( ABS( SBETA ).LT.SAFMIN .AND. ABSB.GE. + $ MAX( SAFMIN, EPS*ABSAR, EPS*ABSAI ) ) THEN + ILIMIT = .TRUE. + SCALE = MAX( SCALE, ( ONEPLS*SAFMIN / BNRM1 ) / + $ MAX( ONEPLS*SAFMIN, BNRM2*ABSB ) ) + END IF +* +* Check for possible overflow when limiting scaling +* + IF( ILIMIT ) THEN + TEMP = ( SCALE*SAFMIN )*MAX( ABS( SALFAR ), ABS( SALFAI ), + $ ABS( SBETA ) ) + IF( TEMP.GT.ONE ) + $ SCALE = SCALE / TEMP + IF( SCALE.LT.ONE ) + $ ILIMIT = .FALSE. + END IF +* +* Recompute un-scaled ALPHAR, ALPHAI, BETA if necessary. +* + IF( ILIMIT ) THEN + SALFAR = ( SCALE*ALPHAR( JC ) )*ANRM + SALFAI = ( SCALE*ALPHAI( JC ) )*ANRM + SBETA = ( SCALE*BETA( JC ) )*BNRM + END IF + ALPHAR( JC ) = SALFAR + ALPHAI( JC ) = SALFAI + BETA( JC ) = SBETA + 110 CONTINUE +* + 120 CONTINUE + WORK( 1 ) = LWKOPT +* + RETURN +* +* End of DGEGV +* + END diff --git a/src_aux/dlatzm.f b/src/lapack_aux/dlatzm.f similarity index 100% rename from src_aux/dlatzm.f rename to src/lapack_aux/dlatzm.f diff --git a/src/lapack_aux/zgegs.f b/src/lapack_aux/zgegs.f new file mode 100644 index 0000000..67c6175 --- /dev/null +++ b/src/lapack_aux/zgegs.f @@ -0,0 +1,532 @@ +*> \brief ZGEGS computes the eigenvalues, Schur form, and, optionally, the left and or/right Schur vectors of a complex matrix pair (A,B) +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> Download ZGEGS + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +* +* Definition: +* =========== +* +* SUBROUTINE ZGEGS( JOBVSL, JOBVSR, N, A, LDA, B, LDB, ALPHA, BETA, +* VSL, LDVSL, VSR, LDVSR, WORK, LWORK, RWORK, +* INFO ) +* +* .. Scalar Arguments .. +* CHARACTER JOBVSL, JOBVSR +* INTEGER INFO, LDA, LDB, LDVSL, LDVSR, LWORK, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION RWORK( * ) +* COMPLEX*16 A( LDA, * ), ALPHA( * ), B( LDB, * ), +* $ BETA( * ), VSL( LDVSL, * ), VSR( LDVSR, * ), +* $ WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This routine is deprecated and has been replaced by routine ZGGES. +*> +*> ZGEGS computes the eigenvalues, Schur form, and, optionally, the +*> left and or/right Schur vectors of a complex matrix pair (A,B). +*> Given two square matrices A and B, the generalized Schur +*> factorization has the form +*> +*> A = Q*S*Z**H, B = Q*T*Z**H +*> +*> where Q and Z are unitary matrices and S and T are upper triangular. +*> The columns of Q are the left Schur vectors +*> and the columns of Z are the right Schur vectors. +*> +*> If only the eigenvalues of (A,B) are needed, the driver routine +*> ZGEGV should be used instead. See ZGEGV for a description of the +*> eigenvalues of the generalized nonsymmetric eigenvalue problem +*> (GNEP). +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] JOBVSL +*> \verbatim +*> JOBVSL is CHARACTER*1 +*> = 'N': do not compute the left Schur vectors; +*> = 'V': compute the left Schur vectors (returned in VSL). +*> \endverbatim +*> +*> \param[in] JOBVSR +*> \verbatim +*> JOBVSR is CHARACTER*1 +*> = 'N': do not compute the right Schur vectors; +*> = 'V': compute the right Schur vectors (returned in VSR). +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrices A, B, VSL, and VSR. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is COMPLEX*16 array, dimension (LDA, N) +*> On entry, the matrix A. +*> On exit, the upper triangular matrix S from the generalized +*> Schur factorization. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] B +*> \verbatim +*> B is COMPLEX*16 array, dimension (LDB, N) +*> On entry, the matrix B. +*> On exit, the upper triangular matrix T from the generalized +*> Schur factorization. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of B. LDB >= max(1,N). +*> \endverbatim +*> +*> \param[out] ALPHA +*> \verbatim +*> ALPHA is COMPLEX*16 array, dimension (N) +*> The complex scalars alpha that define the eigenvalues of +*> GNEP. ALPHA(j) = S(j,j), the diagonal element of the Schur +*> form of A. +*> \endverbatim +*> +*> \param[out] BETA +*> \verbatim +*> BETA is COMPLEX*16 array, dimension (N) +*> The non-negative real scalars beta that define the +*> eigenvalues of GNEP. BETA(j) = T(j,j), the diagonal element +*> of the triangular factor T. +*> +*> Together, the quantities alpha = ALPHA(j) and beta = BETA(j) +*> represent the j-th eigenvalue of the matrix pair (A,B), in +*> one of the forms lambda = alpha/beta or mu = beta/alpha. +*> Since either lambda or mu may overflow, they should not, +*> in general, be computed. +*> \endverbatim +*> +*> \param[out] VSL +*> \verbatim +*> VSL is COMPLEX*16 array, dimension (LDVSL,N) +*> If JOBVSL = 'V', the matrix of left Schur vectors Q. +*> Not referenced if JOBVSL = 'N'. +*> \endverbatim +*> +*> \param[in] LDVSL +*> \verbatim +*> LDVSL is INTEGER +*> The leading dimension of the matrix VSL. LDVSL >= 1, and +*> if JOBVSL = 'V', LDVSL >= N. +*> \endverbatim +*> +*> \param[out] VSR +*> \verbatim +*> VSR is COMPLEX*16 array, dimension (LDVSR,N) +*> If JOBVSR = 'V', the matrix of right Schur vectors Z. +*> Not referenced if JOBVSR = 'N'. +*> \endverbatim +*> +*> \param[in] LDVSR +*> \verbatim +*> LDVSR is INTEGER +*> The leading dimension of the matrix VSR. LDVSR >= 1, and +*> if JOBVSR = 'V', LDVSR >= N. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK >= max(1,2*N). +*> For good performance, LWORK must generally be larger. +*> To compute the optimal value of LWORK, call ILAENV to get +*> blocksizes (for ZGEQRF, ZUNMQR, and CUNGQR.) Then compute: +*> NB -- MAX of the blocksizes for ZGEQRF, ZUNMQR, and CUNGQR; +*> the optimal LWORK is N*(NB+1). +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] RWORK +*> \verbatim +*> RWORK is DOUBLE PRECISION array, dimension (3*N) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> =1,...,N: +*> The QZ iteration failed. (A,B) are not in Schur +*> form, but ALPHA(j) and BETA(j) should be correct for +*> j=INFO+1,...,N. +*> > N: errors that usually indicate LAPACK problems: +*> =N+1: error return from ZGGBAL +*> =N+2: error return from ZGEQRF +*> =N+3: error return from ZUNMQR +*> =N+4: error return from ZUNGQR +*> =N+5: error return from ZGGHRD +*> =N+6: error return from ZHGEQZ (other than failed +*> iteration) +*> =N+7: error return from ZGGBAK (computing VSL) +*> =N+8: error return from ZGGBAK (computing VSR) +*> =N+9: error return from ZLASCL (various places) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \ingroup complex16GEeigen +* +* ===================================================================== + SUBROUTINE ZGEGS( JOBVSL, JOBVSR, N, A, LDA, B, LDB, ALPHA, + $ BETA, VSL, LDVSL, VSR, LDVSR, WORK, LWORK, + $ RWORK, INFO ) +* +* -- LAPACK driver routine -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* +* .. Scalar Arguments .. + CHARACTER JOBVSL, JOBVSR + INTEGER INFO, LDA, LDB, LDVSL, LDVSR, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION RWORK( * ) + COMPLEX*16 A( LDA, * ), ALPHA( * ), B( LDB, * ), + $ BETA( * ), VSL( LDVSL, * ), VSR( LDVSR, * ), + $ WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) + COMPLEX*16 CZERO, CONE + PARAMETER ( CZERO = ( 0.0D0, 0.0D0 ), + $ CONE = ( 1.0D0, 0.0D0 ) ) +* .. +* .. Local Scalars .. + LOGICAL ILASCL, ILBSCL, ILVSL, ILVSR, LQUERY + INTEGER ICOLS, IHI, IINFO, IJOBVL, IJOBVR, ILEFT, ILO, + $ IRIGHT, IROWS, IRWORK, ITAU, IWORK, LOPT, + $ LWKMIN, LWKOPT, NB, NB1, NB2, NB3 + DOUBLE PRECISION ANRM, ANRMTO, BIGNUM, BNRM, BNRMTO, EPS, + $ SAFMIN, SMLNUM +* .. +* .. External Subroutines .. + EXTERNAL XERBLA, ZGEQRF, ZGGBAK, ZGGBAL, ZGGHRD, ZHGEQZ, + $ ZLACPY, ZLASCL, ZLASET, ZUNGQR, ZUNMQR +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + DOUBLE PRECISION DLAMCH, ZLANGE + EXTERNAL LSAME, ILAENV, DLAMCH, ZLANGE +* .. +* .. Intrinsic Functions .. + INTRINSIC INT, MAX +* .. +* .. Executable Statements .. +* +* Decode the input arguments +* + IF( LSAME( JOBVSL, 'N' ) ) THEN + IJOBVL = 1 + ILVSL = .FALSE. + ELSE IF( LSAME( JOBVSL, 'V' ) ) THEN + IJOBVL = 2 + ILVSL = .TRUE. + ELSE + IJOBVL = -1 + ILVSL = .FALSE. + END IF +* + IF( LSAME( JOBVSR, 'N' ) ) THEN + IJOBVR = 1 + ILVSR = .FALSE. + ELSE IF( LSAME( JOBVSR, 'V' ) ) THEN + IJOBVR = 2 + ILVSR = .TRUE. + ELSE + IJOBVR = -1 + ILVSR = .FALSE. + END IF +* +* Test the input arguments +* + LWKMIN = MAX( 2*N, 1 ) + LWKOPT = LWKMIN + WORK( 1 ) = LWKOPT + LQUERY = ( LWORK.EQ.-1 ) + INFO = 0 + IF( IJOBVL.LE.0 ) THEN + INFO = -1 + ELSE IF( IJOBVR.LE.0 ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = -7 + ELSE IF( LDVSL.LT.1 .OR. ( ILVSL .AND. LDVSL.LT.N ) ) THEN + INFO = -11 + ELSE IF( LDVSR.LT.1 .OR. ( ILVSR .AND. LDVSR.LT.N ) ) THEN + INFO = -13 + ELSE IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN + INFO = -15 + END IF +* + IF( INFO.EQ.0 ) THEN + NB1 = ILAENV( 1, 'ZGEQRF', ' ', N, N, -1, -1 ) + NB2 = ILAENV( 1, 'ZUNMQR', ' ', N, N, N, -1 ) + NB3 = ILAENV( 1, 'ZUNGQR', ' ', N, N, N, -1 ) + NB = MAX( NB1, NB2, NB3 ) + LOPT = N*( NB+1 ) + WORK( 1 ) = LOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'ZGEGS ', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* +* Get machine constants +* + EPS = DLAMCH( 'E' )*DLAMCH( 'B' ) + SAFMIN = DLAMCH( 'S' ) + SMLNUM = N*SAFMIN / EPS + BIGNUM = ONE / SMLNUM +* +* Scale A if max element outside range [SMLNUM,BIGNUM] +* + ANRM = ZLANGE( 'M', N, N, A, LDA, RWORK ) + ILASCL = .FALSE. + IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN + ANRMTO = SMLNUM + ILASCL = .TRUE. + ELSE IF( ANRM.GT.BIGNUM ) THEN + ANRMTO = BIGNUM + ILASCL = .TRUE. + END IF +* + IF( ILASCL ) THEN + CALL ZLASCL( 'G', -1, -1, ANRM, ANRMTO, N, N, A, LDA, + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + END IF +* +* Scale B if max element outside range [SMLNUM,BIGNUM] +* + BNRM = ZLANGE( 'M', N, N, B, LDB, RWORK ) + ILBSCL = .FALSE. + IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN + BNRMTO = SMLNUM + ILBSCL = .TRUE. + ELSE IF( BNRM.GT.BIGNUM ) THEN + BNRMTO = BIGNUM + ILBSCL = .TRUE. + END IF +* + IF( ILBSCL ) THEN + CALL ZLASCL( 'G', -1, -1, BNRM, BNRMTO, N, N, B, LDB, + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + END IF +* +* Permute the matrix to make it more nearly triangular +* + ILEFT = 1 + IRIGHT = N + 1 + IRWORK = IRIGHT + N + IWORK = 1 + CALL ZGGBAL( 'P', N, A, LDA, B, LDB, ILO, IHI, RWORK( ILEFT ), + $ RWORK( IRIGHT ), RWORK( IRWORK ), IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 1 + GO TO 10 + END IF +* +* Reduce B to triangular form, and initialize VSL and/or VSR +* + IROWS = IHI + 1 - ILO + ICOLS = N + 1 - ILO + ITAU = IWORK + IWORK = ITAU + IROWS + CALL ZGEQRF( IROWS, ICOLS, B( ILO, ILO ), LDB, WORK( ITAU ), + $ WORK( IWORK ), LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 2 + GO TO 10 + END IF +* + CALL ZUNMQR( 'L', 'C', IROWS, ICOLS, IROWS, B( ILO, ILO ), LDB, + $ WORK( ITAU ), A( ILO, ILO ), LDA, WORK( IWORK ), + $ LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 3 + GO TO 10 + END IF +* + IF( ILVSL ) THEN + CALL ZLASET( 'Full', N, N, CZERO, CONE, VSL, LDVSL ) + CALL ZLACPY( 'L', IROWS-1, IROWS-1, B( ILO+1, ILO ), LDB, + $ VSL( ILO+1, ILO ), LDVSL ) + CALL ZUNGQR( IROWS, IROWS, IROWS, VSL( ILO, ILO ), LDVSL, + $ WORK( ITAU ), WORK( IWORK ), LWORK+1-IWORK, + $ IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 4 + GO TO 10 + END IF + END IF +* + IF( ILVSR ) + $ CALL ZLASET( 'Full', N, N, CZERO, CONE, VSR, LDVSR ) +* +* Reduce to generalized Hessenberg form +* + CALL ZGGHRD( JOBVSL, JOBVSR, N, ILO, IHI, A, LDA, B, LDB, VSL, + $ LDVSL, VSR, LDVSR, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 5 + GO TO 10 + END IF +* +* Perform QZ algorithm, computing Schur vectors if desired +* + IWORK = ITAU + CALL ZHGEQZ( 'S', JOBVSL, JOBVSR, N, ILO, IHI, A, LDA, B, LDB, + $ ALPHA, BETA, VSL, LDVSL, VSR, LDVSR, WORK( IWORK ), + $ LWORK+1-IWORK, RWORK( IRWORK ), IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + IF( IINFO.GT.0 .AND. IINFO.LE.N ) THEN + INFO = IINFO + ELSE IF( IINFO.GT.N .AND. IINFO.LE.2*N ) THEN + INFO = IINFO - N + ELSE + INFO = N + 6 + END IF + GO TO 10 + END IF +* +* Apply permutation to VSL and VSR +* + IF( ILVSL ) THEN + CALL ZGGBAK( 'P', 'L', N, ILO, IHI, RWORK( ILEFT ), + $ RWORK( IRIGHT ), N, VSL, LDVSL, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 7 + GO TO 10 + END IF + END IF + IF( ILVSR ) THEN + CALL ZGGBAK( 'P', 'R', N, ILO, IHI, RWORK( ILEFT ), + $ RWORK( IRIGHT ), N, VSR, LDVSR, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 8 + GO TO 10 + END IF + END IF +* +* Undo scaling +* + IF( ILASCL ) THEN + CALL ZLASCL( 'U', -1, -1, ANRMTO, ANRM, N, N, A, LDA, + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + CALL ZLASCL( 'G', -1, -1, ANRMTO, ANRM, N, 1, ALPHA, N, + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + END IF +* + IF( ILBSCL ) THEN + CALL ZLASCL( 'U', -1, -1, BNRMTO, BNRM, N, N, B, LDB, + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + CALL ZLASCL( 'G', -1, -1, BNRMTO, BNRM, N, 1, BETA, N, + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + RETURN + END IF + END IF +* + 10 CONTINUE + WORK( 1 ) = LWKOPT +* + RETURN +* +* End of ZGEGS +* + END diff --git a/src/lapack_aux/zgegv.f b/src/lapack_aux/zgegv.f new file mode 100644 index 0000000..b8769f6 --- /dev/null +++ b/src/lapack_aux/zgegv.f @@ -0,0 +1,701 @@ +*> \brief ZGEGV computes the eigenvalues and, optionally, the left and/or right eigenvectors of a complex matrix pair (A,B). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> Download ZGEGV + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +* +* Definition: +* =========== +* +* SUBROUTINE ZGEGV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHA, BETA, +* VL, LDVL, VR, LDVR, WORK, LWORK, RWORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER JOBVL, JOBVR +* INTEGER INFO, LDA, LDB, LDVL, LDVR, LWORK, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION RWORK( * ) +* COMPLEX*16 A( LDA, * ), ALPHA( * ), B( LDB, * ), +* $ BETA( * ), VL( LDVL, * ), VR( LDVR, * ), +* $ WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This routine is deprecated and has been replaced by routine ZGGEV. +*> +*> ZGEGV computes the eigenvalues and, optionally, the left and/or right +*> eigenvectors of a complex matrix pair (A,B). +*> Given two square matrices A and B, +*> the generalized nonsymmetric eigenvalue problem (GNEP) is to find the +*> eigenvalues lambda and corresponding (non-zero) eigenvectors x such +*> that +*> A*x = lambda*B*x. +*> +*> An alternate form is to find the eigenvalues mu and corresponding +*> eigenvectors y such that +*> mu*A*y = B*y. +*> +*> These two forms are equivalent with mu = 1/lambda and x = y if +*> neither lambda nor mu is zero. In order to deal with the case that +*> lambda or mu is zero or small, two values alpha and beta are returned +*> for each eigenvalue, such that lambda = alpha/beta and +*> mu = beta/alpha. +*> +*> The vectors x and y in the above equations are right eigenvectors of +*> the matrix pair (A,B). Vectors u and v satisfying +*> u**H*A = lambda*u**H*B or mu*v**H*A = v**H*B +*> are left eigenvectors of (A,B). +*> +*> Note: this routine performs "full balancing" on A and B +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] JOBVL +*> \verbatim +*> JOBVL is CHARACTER*1 +*> = 'N': do not compute the left generalized eigenvectors; +*> = 'V': compute the left generalized eigenvectors (returned +*> in VL). +*> \endverbatim +*> +*> \param[in] JOBVR +*> \verbatim +*> JOBVR is CHARACTER*1 +*> = 'N': do not compute the right generalized eigenvectors; +*> = 'V': compute the right generalized eigenvectors (returned +*> in VR). +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrices A, B, VL, and VR. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is COMPLEX*16 array, dimension (LDA, N) +*> On entry, the matrix A. +*> If JOBVL = 'V' or JOBVR = 'V', then on exit A +*> contains the Schur form of A from the generalized Schur +*> factorization of the pair (A,B) after balancing. If no +*> eigenvectors were computed, then only the diagonal elements +*> of the Schur form will be correct. See ZGGHRD and ZHGEQZ +*> for details. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] B +*> \verbatim +*> B is COMPLEX*16 array, dimension (LDB, N) +*> On entry, the matrix B. +*> If JOBVL = 'V' or JOBVR = 'V', then on exit B contains the +*> upper triangular matrix obtained from B in the generalized +*> Schur factorization of the pair (A,B) after balancing. +*> If no eigenvectors were computed, then only the diagonal +*> elements of B will be correct. See ZGGHRD and ZHGEQZ for +*> details. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of B. LDB >= max(1,N). +*> \endverbatim +*> +*> \param[out] ALPHA +*> \verbatim +*> ALPHA is COMPLEX*16 array, dimension (N) +*> The complex scalars alpha that define the eigenvalues of +*> GNEP. +*> \endverbatim +*> +*> \param[out] BETA +*> \verbatim +*> BETA is COMPLEX*16 array, dimension (N) +*> The complex scalars beta that define the eigenvalues of GNEP. +*> +*> Together, the quantities alpha = ALPHA(j) and beta = BETA(j) +*> represent the j-th eigenvalue of the matrix pair (A,B), in +*> one of the forms lambda = alpha/beta or mu = beta/alpha. +*> Since either lambda or mu may overflow, they should not, +*> in general, be computed. +*> \endverbatim +*> +*> \param[out] VL +*> \verbatim +*> VL is COMPLEX*16 array, dimension (LDVL,N) +*> If JOBVL = 'V', the left eigenvectors u(j) are stored +*> in the columns of VL, in the same order as their eigenvalues. +*> Each eigenvector is scaled so that its largest component has +*> abs(real part) + abs(imag. part) = 1, except for eigenvectors +*> corresponding to an eigenvalue with alpha = beta = 0, which +*> are set to zero. +*> Not referenced if JOBVL = 'N'. +*> \endverbatim +*> +*> \param[in] LDVL +*> \verbatim +*> LDVL is INTEGER +*> The leading dimension of the matrix VL. LDVL >= 1, and +*> if JOBVL = 'V', LDVL >= N. +*> \endverbatim +*> +*> \param[out] VR +*> \verbatim +*> VR is COMPLEX*16 array, dimension (LDVR,N) +*> If JOBVR = 'V', the right eigenvectors x(j) are stored +*> in the columns of VR, in the same order as their eigenvalues. +*> Each eigenvector is scaled so that its largest component has +*> abs(real part) + abs(imag. part) = 1, except for eigenvectors +*> corresponding to an eigenvalue with alpha = beta = 0, which +*> are set to zero. +*> Not referenced if JOBVR = 'N'. +*> \endverbatim +*> +*> \param[in] LDVR +*> \verbatim +*> LDVR is INTEGER +*> The leading dimension of the matrix VR. LDVR >= 1, and +*> if JOBVR = 'V', LDVR >= N. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK >= max(1,2*N). +*> For good performance, LWORK must generally be larger. +*> To compute the optimal value of LWORK, call ILAENV to get +*> blocksizes (for ZGEQRF, ZUNMQR, and ZUNGQR.) Then compute: +*> NB -- MAX of the blocksizes for ZGEQRF, ZUNMQR, and ZUNGQR; +*> The optimal LWORK is MAX( 2*N, N*(NB+1) ). +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] RWORK +*> \verbatim +*> RWORK is DOUBLE PRECISION array, dimension (8*N) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> =1,...,N: +*> The QZ iteration failed. No eigenvectors have been +*> calculated, but ALPHA(j) and BETA(j) should be +*> correct for j=INFO+1,...,N. +*> > N: errors that usually indicate LAPACK problems: +*> =N+1: error return from ZGGBAL +*> =N+2: error return from ZGEQRF +*> =N+3: error return from ZUNMQR +*> =N+4: error return from ZUNGQR +*> =N+5: error return from ZGGHRD +*> =N+6: error return from ZHGEQZ (other than failed +*> iteration) +*> =N+7: error return from ZTGEVC +*> =N+8: error return from ZGGBAK (computing VL) +*> =N+9: error return from ZGGBAK (computing VR) +*> =N+10: error return from ZLASCL (various calls) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \ingroup complex16GEeigen +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Balancing +*> --------- +*> +*> This driver calls ZGGBAL to both permute and scale rows and columns +*> of A and B. The permutations PL and PR are chosen so that PL*A*PR +*> and PL*B*R will be upper triangular except for the diagonal blocks +*> A(i:j,i:j) and B(i:j,i:j), with i and j as close together as +*> possible. The diagonal scaling matrices DL and DR are chosen so +*> that the pair DL*PL*A*PR*DR, DL*PL*B*PR*DR have elements close to +*> one (except for the elements that start out zero.) +*> +*> After the eigenvalues and eigenvectors of the balanced matrices +*> have been computed, ZGGBAK transforms the eigenvectors back to what +*> they would have been (in perfect arithmetic) if they had not been +*> balanced. +*> +*> Contents of A and B on Exit +*> -------- -- - --- - -- ---- +*> +*> If any eigenvectors are computed (either JOBVL='V' or JOBVR='V' or +*> both), then on exit the arrays A and B will contain the complex Schur +*> form[*] of the "balanced" versions of A and B. If no eigenvectors +*> are computed, then only the diagonal blocks will be correct. +*> +*> [*] In other words, upper triangular form. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE ZGEGV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHA, BETA, + $ VL, LDVL, VR, LDVR, WORK, LWORK, RWORK, INFO ) +* +* -- LAPACK driver routine -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* +* .. Scalar Arguments .. + CHARACTER JOBVL, JOBVR + INTEGER INFO, LDA, LDB, LDVL, LDVR, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION RWORK( * ) + COMPLEX*16 A( LDA, * ), ALPHA( * ), B( LDB, * ), + $ BETA( * ), VL( LDVL, * ), VR( LDVR, * ), + $ WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) + COMPLEX*16 CZERO, CONE + PARAMETER ( CZERO = ( 0.0D0, 0.0D0 ), + $ CONE = ( 1.0D0, 0.0D0 ) ) +* .. +* .. Local Scalars .. + LOGICAL ILIMIT, ILV, ILVL, ILVR, LQUERY + CHARACTER CHTEMP + INTEGER ICOLS, IHI, IINFO, IJOBVL, IJOBVR, ILEFT, ILO, + $ IN, IRIGHT, IROWS, IRWORK, ITAU, IWORK, JC, JR, + $ LOPT, LWKMIN, LWKOPT, NB, NB1, NB2, NB3 + DOUBLE PRECISION ABSAI, ABSAR, ABSB, ANRM, ANRM1, ANRM2, BNRM, + $ BNRM1, BNRM2, EPS, SAFMAX, SAFMIN, SALFAI, + $ SALFAR, SBETA, SCALE, TEMP + COMPLEX*16 X +* .. +* .. Local Arrays .. + LOGICAL LDUMMA( 1 ) +* .. +* .. External Subroutines .. + EXTERNAL XERBLA, ZGEQRF, ZGGBAK, ZGGBAL, ZGGHRD, ZHGEQZ, + $ ZLACPY, ZLASCL, ZLASET, ZTGEVC, ZUNGQR, ZUNMQR +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + DOUBLE PRECISION DLAMCH, ZLANGE + EXTERNAL LSAME, ILAENV, DLAMCH, ZLANGE +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, DBLE, DCMPLX, DIMAG, INT, MAX +* .. +* .. Statement Functions .. + DOUBLE PRECISION ABS1 +* .. +* .. Statement Function definitions .. + ABS1( X ) = ABS( DBLE( X ) ) + ABS( DIMAG( X ) ) +* .. +* .. Executable Statements .. +* +* Decode the input arguments +* + IF( LSAME( JOBVL, 'N' ) ) THEN + IJOBVL = 1 + ILVL = .FALSE. + ELSE IF( LSAME( JOBVL, 'V' ) ) THEN + IJOBVL = 2 + ILVL = .TRUE. + ELSE + IJOBVL = -1 + ILVL = .FALSE. + END IF +* + IF( LSAME( JOBVR, 'N' ) ) THEN + IJOBVR = 1 + ILVR = .FALSE. + ELSE IF( LSAME( JOBVR, 'V' ) ) THEN + IJOBVR = 2 + ILVR = .TRUE. + ELSE + IJOBVR = -1 + ILVR = .FALSE. + END IF + ILV = ILVL .OR. ILVR +* +* Test the input arguments +* + LWKMIN = MAX( 2*N, 1 ) + LWKOPT = LWKMIN + WORK( 1 ) = LWKOPT + LQUERY = ( LWORK.EQ.-1 ) + INFO = 0 + IF( IJOBVL.LE.0 ) THEN + INFO = -1 + ELSE IF( IJOBVR.LE.0 ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = -7 + ELSE IF( LDVL.LT.1 .OR. ( ILVL .AND. LDVL.LT.N ) ) THEN + INFO = -11 + ELSE IF( LDVR.LT.1 .OR. ( ILVR .AND. LDVR.LT.N ) ) THEN + INFO = -13 + ELSE IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN + INFO = -15 + END IF +* + IF( INFO.EQ.0 ) THEN + NB1 = ILAENV( 1, 'ZGEQRF', ' ', N, N, -1, -1 ) + NB2 = ILAENV( 1, 'ZUNMQR', ' ', N, N, N, -1 ) + NB3 = ILAENV( 1, 'ZUNGQR', ' ', N, N, N, -1 ) + NB = MAX( NB1, NB2, NB3 ) + LOPT = MAX( 2*N, N*( NB+1 ) ) + WORK( 1 ) = LOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'ZGEGV ', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* +* Get machine constants +* + EPS = DLAMCH( 'E' )*DLAMCH( 'B' ) + SAFMIN = DLAMCH( 'S' ) + SAFMIN = SAFMIN + SAFMIN + SAFMAX = ONE / SAFMIN +* +* Scale A +* + ANRM = ZLANGE( 'M', N, N, A, LDA, RWORK ) + ANRM1 = ANRM + ANRM2 = ONE + IF( ANRM.LT.ONE ) THEN + IF( SAFMAX*ANRM.LT.ONE ) THEN + ANRM1 = SAFMIN + ANRM2 = SAFMAX*ANRM + END IF + END IF +* + IF( ANRM.GT.ZERO ) THEN + CALL ZLASCL( 'G', -1, -1, ANRM, ONE, N, N, A, LDA, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 10 + RETURN + END IF + END IF +* +* Scale B +* + BNRM = ZLANGE( 'M', N, N, B, LDB, RWORK ) + BNRM1 = BNRM + BNRM2 = ONE + IF( BNRM.LT.ONE ) THEN + IF( SAFMAX*BNRM.LT.ONE ) THEN + BNRM1 = SAFMIN + BNRM2 = SAFMAX*BNRM + END IF + END IF +* + IF( BNRM.GT.ZERO ) THEN + CALL ZLASCL( 'G', -1, -1, BNRM, ONE, N, N, B, LDB, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 10 + RETURN + END IF + END IF +* +* Permute the matrix to make it more nearly triangular +* Also "balance" the matrix. +* + ILEFT = 1 + IRIGHT = N + 1 + IRWORK = IRIGHT + N + CALL ZGGBAL( 'P', N, A, LDA, B, LDB, ILO, IHI, RWORK( ILEFT ), + $ RWORK( IRIGHT ), RWORK( IRWORK ), IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 1 + GO TO 80 + END IF +* +* Reduce B to triangular form, and initialize VL and/or VR +* + IROWS = IHI + 1 - ILO + IF( ILV ) THEN + ICOLS = N + 1 - ILO + ELSE + ICOLS = IROWS + END IF + ITAU = 1 + IWORK = ITAU + IROWS + CALL ZGEQRF( IROWS, ICOLS, B( ILO, ILO ), LDB, WORK( ITAU ), + $ WORK( IWORK ), LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 2 + GO TO 80 + END IF +* + CALL ZUNMQR( 'L', 'C', IROWS, ICOLS, IROWS, B( ILO, ILO ), LDB, + $ WORK( ITAU ), A( ILO, ILO ), LDA, WORK( IWORK ), + $ LWORK+1-IWORK, IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 3 + GO TO 80 + END IF +* + IF( ILVL ) THEN + CALL ZLASET( 'Full', N, N, CZERO, CONE, VL, LDVL ) + CALL ZLACPY( 'L', IROWS-1, IROWS-1, B( ILO+1, ILO ), LDB, + $ VL( ILO+1, ILO ), LDVL ) + CALL ZUNGQR( IROWS, IROWS, IROWS, VL( ILO, ILO ), LDVL, + $ WORK( ITAU ), WORK( IWORK ), LWORK+1-IWORK, + $ IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + INFO = N + 4 + GO TO 80 + END IF + END IF +* + IF( ILVR ) + $ CALL ZLASET( 'Full', N, N, CZERO, CONE, VR, LDVR ) +* +* Reduce to generalized Hessenberg form +* + IF( ILV ) THEN +* +* Eigenvectors requested -- work on whole matrix. +* + CALL ZGGHRD( JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, VL, + $ LDVL, VR, LDVR, IINFO ) + ELSE + CALL ZGGHRD( 'N', 'N', IROWS, 1, IROWS, A( ILO, ILO ), LDA, + $ B( ILO, ILO ), LDB, VL, LDVL, VR, LDVR, IINFO ) + END IF + IF( IINFO.NE.0 ) THEN + INFO = N + 5 + GO TO 80 + END IF +* +* Perform QZ algorithm +* + IWORK = ITAU + IF( ILV ) THEN + CHTEMP = 'S' + ELSE + CHTEMP = 'E' + END IF + CALL ZHGEQZ( CHTEMP, JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, + $ ALPHA, BETA, VL, LDVL, VR, LDVR, WORK( IWORK ), + $ LWORK+1-IWORK, RWORK( IRWORK ), IINFO ) + IF( IINFO.GE.0 ) + $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) + IF( IINFO.NE.0 ) THEN + IF( IINFO.GT.0 .AND. IINFO.LE.N ) THEN + INFO = IINFO + ELSE IF( IINFO.GT.N .AND. IINFO.LE.2*N ) THEN + INFO = IINFO - N + ELSE + INFO = N + 6 + END IF + GO TO 80 + END IF +* + IF( ILV ) THEN +* +* Compute Eigenvectors +* + IF( ILVL ) THEN + IF( ILVR ) THEN + CHTEMP = 'B' + ELSE + CHTEMP = 'L' + END IF + ELSE + CHTEMP = 'R' + END IF +* + CALL ZTGEVC( CHTEMP, 'B', LDUMMA, N, A, LDA, B, LDB, VL, LDVL, + $ VR, LDVR, N, IN, WORK( IWORK ), RWORK( IRWORK ), + $ IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 7 + GO TO 80 + END IF +* +* Undo balancing on VL and VR, rescale +* + IF( ILVL ) THEN + CALL ZGGBAK( 'P', 'L', N, ILO, IHI, RWORK( ILEFT ), + $ RWORK( IRIGHT ), N, VL, LDVL, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 8 + GO TO 80 + END IF + DO 30 JC = 1, N + TEMP = ZERO + DO 10 JR = 1, N + TEMP = MAX( TEMP, ABS1( VL( JR, JC ) ) ) + 10 CONTINUE + IF( TEMP.LT.SAFMIN ) + $ GO TO 30 + TEMP = ONE / TEMP + DO 20 JR = 1, N + VL( JR, JC ) = VL( JR, JC )*TEMP + 20 CONTINUE + 30 CONTINUE + END IF + IF( ILVR ) THEN + CALL ZGGBAK( 'P', 'R', N, ILO, IHI, RWORK( ILEFT ), + $ RWORK( IRIGHT ), N, VR, LDVR, IINFO ) + IF( IINFO.NE.0 ) THEN + INFO = N + 9 + GO TO 80 + END IF + DO 60 JC = 1, N + TEMP = ZERO + DO 40 JR = 1, N + TEMP = MAX( TEMP, ABS1( VR( JR, JC ) ) ) + 40 CONTINUE + IF( TEMP.LT.SAFMIN ) + $ GO TO 60 + TEMP = ONE / TEMP + DO 50 JR = 1, N + VR( JR, JC ) = VR( JR, JC )*TEMP + 50 CONTINUE + 60 CONTINUE + END IF +* +* End of eigenvector calculation +* + END IF +* +* Undo scaling in alpha, beta +* +* Note: this does not give the alpha and beta for the unscaled +* problem. +* +* Un-scaling is limited to avoid underflow in alpha and beta +* if they are significant. +* + DO 70 JC = 1, N + ABSAR = ABS( DBLE( ALPHA( JC ) ) ) + ABSAI = ABS( DIMAG( ALPHA( JC ) ) ) + ABSB = ABS( DBLE( BETA( JC ) ) ) + SALFAR = ANRM*DBLE( ALPHA( JC ) ) + SALFAI = ANRM*DIMAG( ALPHA( JC ) ) + SBETA = BNRM*DBLE( BETA( JC ) ) + ILIMIT = .FALSE. + SCALE = ONE +* +* Check for significant underflow in imaginary part of ALPHA +* + IF( ABS( SALFAI ).LT.SAFMIN .AND. ABSAI.GE. + $ MAX( SAFMIN, EPS*ABSAR, EPS*ABSB ) ) THEN + ILIMIT = .TRUE. + SCALE = ( SAFMIN / ANRM1 ) / MAX( SAFMIN, ANRM2*ABSAI ) + END IF +* +* Check for significant underflow in real part of ALPHA +* + IF( ABS( SALFAR ).LT.SAFMIN .AND. ABSAR.GE. + $ MAX( SAFMIN, EPS*ABSAI, EPS*ABSB ) ) THEN + ILIMIT = .TRUE. + SCALE = MAX( SCALE, ( SAFMIN / ANRM1 ) / + $ MAX( SAFMIN, ANRM2*ABSAR ) ) + END IF +* +* Check for significant underflow in BETA +* + IF( ABS( SBETA ).LT.SAFMIN .AND. ABSB.GE. + $ MAX( SAFMIN, EPS*ABSAR, EPS*ABSAI ) ) THEN + ILIMIT = .TRUE. + SCALE = MAX( SCALE, ( SAFMIN / BNRM1 ) / + $ MAX( SAFMIN, BNRM2*ABSB ) ) + END IF +* +* Check for possible overflow when limiting scaling +* + IF( ILIMIT ) THEN + TEMP = ( SCALE*SAFMIN )*MAX( ABS( SALFAR ), ABS( SALFAI ), + $ ABS( SBETA ) ) + IF( TEMP.GT.ONE ) + $ SCALE = SCALE / TEMP + IF( SCALE.LT.ONE ) + $ ILIMIT = .FALSE. + END IF +* +* Recompute un-scaled ALPHA, BETA if necessary. +* + IF( ILIMIT ) THEN + SALFAR = ( SCALE*DBLE( ALPHA( JC ) ) )*ANRM + SALFAI = ( SCALE*DIMAG( ALPHA( JC ) ) )*ANRM + SBETA = ( SCALE*BETA( JC ) )*BNRM + END IF + ALPHA( JC ) = DCMPLX( SALFAR, SALFAI ) + BETA( JC ) = SBETA + 70 CONTINUE +* + 80 CONTINUE + WORK( 1 ) = LWKOPT +* + RETURN +* +* End of ZGEGV +* + END diff --git a/src_aux/zlatzm.f b/src/lapack_aux/zlatzm.f similarity index 99% rename from src_aux/zlatzm.f rename to src/lapack_aux/zlatzm.f index 8b93c5a..c0986e1 100644 --- a/src_aux/zlatzm.f +++ b/src/lapack_aux/zlatzm.f @@ -145,7 +145,7 @@ *> \author Univ. of Colorado Denver *> \author NAG Ltd. * -*> \ingroup complex16OTHERcomputational +*> \ingroup latzm * * ===================================================================== SUBROUTINE ZLATZM( SIDE, M, N, V, INCV, TAU, C1, C2, LDC, WORK ) diff --git a/src_aux/makefile b/src_aux/makefile deleted file mode 100644 index 0020f79..0000000 --- a/src_aux/makefile +++ /dev/null @@ -1,42 +0,0 @@ -#################################################################### -# Auxiliary routines makefile # -# Makefile for creating/updating auxiliary library object files # -# for SLICOT on Windows platforms. # -# # -# SLICOT, Release 5.8 .\slicot\src_aux\makefile # -# Vasile Sima # -# Jan. 24, 2005. # -# Revised Sep. 26, 2009; Jan. 25, 2010, Jan. 2016, Feb. 2023 # -#################################################################### -# -# This is the makefile to create/update the auxiliary library lpkaux.lib. -# This library contains deprecated LAPACK routines dlatzm and zlatzm. -# -# The command -# nmake -# without any arguments creates or updates the library -# lpkaux.lib -# in the next higher directory level. -# -# To remove the object files after the library is created, enter -# nmake clean -# -####################################################################### - -!include <..\make.inc> - -.SUFFIXES: .f .obj - -DSLSRC = \ - dlatzm.obj zlatzm.obj - -all: double - -double: $(DSLSRC) - $(ARCH) $(ARCHFLAGS):$(LPKAUXLIB) $(DSLSRC) - -clean: - del *.obj - -.f.obj: - $(FORTRAN) $(OPTS) -c $< diff --git a/src_aux/makefile_Unix b/src_aux/makefile_Unix deleted file mode 100644 index a517c53..0000000 --- a/src_aux/makefile_Unix +++ /dev/null @@ -1,50 +0,0 @@ -#################################################################### -# Auxiliary routines makefile # -# Makefile for creating/updating the auxiliary Library object file# -# for SLICOT on Unix platforms. # -# # -# SLICOT, Release 5.9 ./slicot/src_aux/makefile # -# Vasile Sima # -# Jan. 24, 2005. # -# Revised Jan. 9, 2009, Jan. 25, 2010, Jan. 2016, Feb. 2023 # -#################################################################### -# -# This is the makefile to create/update an auxiliary library lpkaux.lib. -# This library contains deprecated LAPACK routines dlatzm and zlatzm. -# -# The command -# make -# without any arguments creates or updates a library called -# lpkaux.a -# in the next higher directory level. -# -# To remove the object files after the library is created, enter -# make clean -# -# On some systems, you can force the source files to be recompiled by -# entering (for example) -# make double FRC=FRC -# -# -####################################################################### - -include ../make_Unix.inc - -DSLSRC = \ - dlatzm.o zlatzm.o - -all: double - -double: $(DSLSRC) - $(ARCH) $(ARCHFLAGS) $(LPKAUXLIB) $(DSLSRC) - -$(DSLSRC): $(FRC) - -FRC: - @FRC=$(FRC) - -clean: - rm -f *.o - -.f.o: - $(FORTRAN) $(OPTS) -c $< diff --git a/src_aux/readme b/src_aux/readme deleted file mode 100644 index 0137741..0000000 --- a/src_aux/readme +++ /dev/null @@ -1,5 +0,0 @@ -SLICOT Library Subdirectory src_aux ------------------------------------ - -SLICOT Library Subdirectory src_aux contains two deprecated auxiliary LAPACK -source files, dlatzm and zlatzm, which are called by few SLICOT routines. From 9d059c2d4fe295987a7f5340239e78f86d2306d0 Mon Sep 17 00:00:00 2001 From: Martin Koehler Date: Fri, 25 Apr 2025 08:53:35 +0200 Subject: [PATCH 07/22] Fix the stack overflow on mingw in the test --- examples/TBD01AD.f | 2 +- examples/TBD02AD.f | 2 +- examples/TIB01AD.f | 2 +- examples/TIB01BD.f | 2 +- examples/TIB01CD.f | 2 +- examples/TMB02CD.f | 2 +- examples/TMB02DD.f | 2 +- examples/TMB02ED.f | 2 +- examples/TMB02GD.f | 2 +- examples/TMB02JX.f | 2 +- examples/TMB03XP.f | 4 ++-- examples/TMB03XZ.f | 4 ++-- examples/TMB03ZD.f | 4 ++-- examples/TMB04TS.f | 2 +- src/CMakeLists.txt | 4 ++-- 15 files changed, 19 insertions(+), 19 deletions(-) diff --git a/examples/TBD01AD.f b/examples/TBD01AD.f index f46329d..9104984 100644 --- a/examples/TBD01AD.f +++ b/examples/TBD01AD.f @@ -4,7 +4,7 @@ INTEGER NIN, NOUT PARAMETER (NIN = 5, NOUT = 6) INTEGER NMAX, MMAX, PMAX - PARAMETER (NMAX = 421, MMAX = 211, PMAX = 211) + PARAMETER (NMAX = 100, MMAX = 100, PMAX = 100) INTEGER LDA, LDB, LDC, LDD, LDE, LDWORK PARAMETER (LDA = NMAX, LDB = NMAX, LDC = PMAX, LDD = PMAX, 1 LDE = NMAX, LDWORK = 4*NMAX) diff --git a/examples/TBD02AD.f b/examples/TBD02AD.f index d820c11..b116b3f 100644 --- a/examples/TBD02AD.f +++ b/examples/TBD02AD.f @@ -4,7 +4,7 @@ INTEGER NIN, NOUT PARAMETER (NIN = 5, NOUT = 6) INTEGER NMAX, MMAX, PMAX - PARAMETER (NMAX = 421, MMAX = 211, PMAX = 211) + PARAMETER (NMAX = 100, MMAX = 100, PMAX = 100) INTEGER LDA, LDB, LDC, LDD, LDE, LDWORK PARAMETER (LDA = NMAX, LDB = NMAX, LDC = PMAX, LDD = PMAX, 1 LDE = NMAX, LDWORK = 1) diff --git a/examples/TIB01AD.f b/examples/TIB01AD.f index befceaf..26cbe73 100644 --- a/examples/TIB01AD.f +++ b/examples/TIB01AD.f @@ -5,7 +5,7 @@ PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER LDR, LDU, LDWORK, LDY, LIWORK, LMAX, MMAX, $ NOBRMX, NSMPMX - PARAMETER ( LMAX = 5, MMAX = 5, NOBRMX = 20, NSMPMX = 2000, + PARAMETER ( LMAX = 5, MMAX = 5, NOBRMX = 20, NSMPMX = 200, $ LDR = MAX( 2*( MMAX + LMAX )*NOBRMX, $ 3*MMAX*NOBRMX ), LDU = NSMPMX, $ LDWORK = MAX( 6*( MMAX + LMAX )*NOBRMX, diff --git a/examples/TIB01BD.f b/examples/TIB01BD.f index d6401c8..0e7feec 100644 --- a/examples/TIB01BD.f +++ b/examples/TIB01BD.f @@ -6,7 +6,7 @@ INTEGER LDA, LDB, LDC, LDD, LDK, LDQ, LDR, LDRY, LDS, $ LDU, LDW1, LDW2, LDW3, LDWORK, LDY, LIWORK, LMAX, $ MMAX, NMAX, NOBRMX, NSMPMX - PARAMETER ( LMAX = 5, MMAX = 5, NOBRMX = 20, NSMPMX = 2000, + PARAMETER ( LMAX = 5, MMAX = 5, NOBRMX = 15, NSMPMX = 1000, $ NMAX = NOBRMX - 1, LDA = NMAX, LDB = NMAX, $ LDC = LMAX, LDD = LMAX, LDK = NMAX, $ LDQ = NMAX, LDRY = LMAX, LDS = NMAX, diff --git a/examples/TIB01CD.f b/examples/TIB01CD.f index f94fc4c..1c28692 100644 --- a/examples/TIB01CD.f +++ b/examples/TIB01CD.f @@ -6,7 +6,7 @@ INTEGER LDA, LDB, LDC, LDD, LDR, LDU, LDV, LDW1, LDW2, $ LDW4, LDW5, LDWORK, LDY, LIWORK, LMAX, MMAX, $ NMAX, NOBRMX, NSMPMX - PARAMETER ( LMAX = 5, MMAX = 5, NOBRMX = 20, NSMPMX = 2000, + PARAMETER ( LMAX = 5, MMAX = 5, NOBRMX = 15, NSMPMX = 1000, $ NMAX = NOBRMX - 1, LDA = NMAX, LDB = NMAX, $ LDC = LMAX, LDD = LMAX, LDV = NMAX, $ LDR = MAX( 2*( MMAX + LMAX )*NOBRMX, diff --git a/examples/TMB02CD.f b/examples/TMB02CD.f index d44e760..a4a7e6d 100644 --- a/examples/TMB02CD.f +++ b/examples/TMB02CD.f @@ -6,7 +6,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER KMAX, NMAX - PARAMETER ( KMAX = 20, NMAX = 20 ) + PARAMETER ( KMAX = 10, NMAX = 10 ) INTEGER LCS, LDG, LDL, LDR, LDT, LDWORK PARAMETER ( LDG = 2*KMAX, LDL = NMAX*KMAX, LDR = NMAX*KMAX, $ LDT = KMAX, LDWORK = ( NMAX - 1 )*KMAX ) diff --git a/examples/TMB02DD.f b/examples/TMB02DD.f index fc8c718..7d01feb 100644 --- a/examples/TMB02DD.f +++ b/examples/TMB02DD.f @@ -4,7 +4,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER KMAX, MMAX, NMAX - PARAMETER ( KMAX = 12, MMAX = 12, NMAX = 12 ) + PARAMETER ( KMAX = 10, MMAX = 10, NMAX = 10 ) INTEGER LCS, LDG, LDL, LDR, LDT, LDWORK PARAMETER ( LDG = KMAX*( MMAX + NMAX ), $ LDL = KMAX*( MMAX + NMAX ), diff --git a/examples/TMB02ED.f b/examples/TMB02ED.f index 2576ee2..1761d84 100644 --- a/examples/TMB02ED.f +++ b/examples/TMB02ED.f @@ -4,7 +4,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER KMAX, NMAX - PARAMETER ( KMAX = 20, NMAX = 20 ) + PARAMETER ( KMAX = 15, NMAX = 15 ) INTEGER LDB, LDT, LDWORK PARAMETER ( LDB = KMAX*NMAX, LDT = KMAX*NMAX, $ LDWORK = NMAX*KMAX*KMAX + ( NMAX+2 )*KMAX ) diff --git a/examples/TMB02GD.f b/examples/TMB02GD.f index efc9f9d..98b9661 100644 --- a/examples/TMB02GD.f +++ b/examples/TMB02GD.f @@ -4,7 +4,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER KMAX, NMAX, NLMAX - PARAMETER ( KMAX = 20, NMAX = 20, NLMAX = 20 ) + PARAMETER ( KMAX = 15, NMAX = 15, NLMAX = 15 ) INTEGER LDRB, LDT, LDWORK PARAMETER ( LDRB = ( NLMAX + 1 )*KMAX, LDT = KMAX*NMAX, $ LDWORK = ( NLMAX + 1 )*KMAX*KMAX + diff --git a/examples/TMB02JX.f b/examples/TMB02JX.f index 7ff7d11..d8fee15 100644 --- a/examples/TMB02JX.f +++ b/examples/TMB02JX.f @@ -4,7 +4,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER KMAX, LMAX, MMAX, NMAX - PARAMETER ( KMAX = 20, LMAX = 20, MMAX = 20, NMAX = 20 ) + PARAMETER ( KMAX = 15, LMAX = 15, MMAX = 15, NMAX = 15 ) INTEGER LDR, LDQ, LDTC, LDTR, LDWORK PARAMETER ( LDR = NMAX*LMAX, LDQ = MMAX*KMAX, $ LDTC = MMAX*KMAX, LDTR = KMAX, diff --git a/examples/TMB03XP.f b/examples/TMB03XP.f index ee6f137..5a1872b 100644 --- a/examples/TMB03XP.f +++ b/examples/TMB03XP.f @@ -6,7 +6,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER NMAX - PARAMETER ( NMAX = 200 ) + PARAMETER ( NMAX = 100 ) INTEGER LDA, LDB, LDQ, LDRES, LDZ, LDWORK PARAMETER ( LDA = NMAX, LDB = NMAX, LDQ = NMAX, $ LDRES = NMAX, LDWORK = NMAX, LDZ = NMAX ) @@ -20,7 +20,7 @@ DOUBLE PRECISION DLANGE EXTERNAL DLANGE * .. External Subroutines .. - EXTERNAL DGEMM, MB03XP + EXTERNAL DGEMM, MB03XP, DLACPY * .. Executable Statements .. WRITE ( NOUT, FMT = 99999 ) * Skip the heading in the data file and read the data. diff --git a/examples/TMB03XZ.f b/examples/TMB03XZ.f index 1a84c7f..24be7c1 100644 --- a/examples/TMB03XZ.f +++ b/examples/TMB03XZ.f @@ -8,7 +8,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER NMAX - PARAMETER ( NMAX = 100 ) + PARAMETER ( NMAX = 50 ) INTEGER LDA, LDAE, LDAS, LDGE, LDQG, LDQGE, LDQGS, LDRES, $ LDU1, LDU2, LDWORK, LZWORK PARAMETER ( LDA = 2*NMAX, LDAE = 2*NMAX, LDAS = NMAX, @@ -36,7 +36,7 @@ EXTERNAL DLAPY2, LSAME, MA02JZ, ZLANGE * .. External Subroutines .. EXTERNAL MA02EZ, MB03XZ, MB04DZ, ZCOPY, ZGEMM, ZLACPY, - $ ZLASET + $ ZLASET, DLACPY * ..Intrinsic Functions.. INTRINSIC DBLE, DCMPLX, DIMAG * .. Executable Statements .. diff --git a/examples/TMB03ZD.f b/examples/TMB03ZD.f index 674d269..7cfc3e5 100644 --- a/examples/TMB03ZD.f +++ b/examples/TMB03ZD.f @@ -6,7 +6,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER NMAX - PARAMETER ( NMAX = 200 ) + PARAMETER ( NMAX = 100 ) INTEGER LDG, LDRES, LDS, LDT, LDU1, LDU2, LDUS, LDUU, $ LDV1, LDV2, LDWORK PARAMETER ( LDG = NMAX, LDRES = 2*NMAX, LDS = NMAX, @@ -29,7 +29,7 @@ LOGICAL LSAME DOUBLE PRECISION DLANGE * .. External Subroutines .. - EXTERNAL MB03ZD + EXTERNAL MB03ZD, DGEMM * .. Executable Statements .. WRITE ( NOUT, FMT = 99999 ) * Skip the heading in the data file and read the data. diff --git a/examples/TMB04TS.f b/examples/TMB04TS.f index b4e709a..f1f46a5 100644 --- a/examples/TMB04TS.f +++ b/examples/TMB04TS.f @@ -6,7 +6,7 @@ INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER NMAX - PARAMETER ( NMAX = 200 ) + PARAMETER ( NMAX = 100 ) INTEGER LDA, LDB, LDG, LDQ, LDRES, LDU1, LDU2, LDV1, $ LDV2, LDWORK PARAMETER ( LDA = NMAX, LDB = NMAX, LDG = NMAX, LDQ = NMAX, diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a5958bd..0bb6d47 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -115,8 +115,8 @@ ADD_ROUTINE_IF_REQUIRED(dgegs HAVE_DGEGS lapack_aux/dgegs.f) ADD_ROUTINE_IF_REQUIRED(zgegs HAVE_ZGEGS lapack_aux/zgegs.f) ADD_ROUTINE_IF_REQUIRED(dlatzm HAVE_DLAZTM lapack_aux/dlatzm.f) ADD_ROUTINE_IF_REQUIRED(zlatzm HAVE_ZLAZTM lapack_aux/zlatzm.f) -ADD_ROUTINE_IF_REQUIRED(dgegv HAVE_DGEGS lapack_aux/dgegv.f) -ADD_ROUTINE_IF_REQUIRED(zgegv HAVE_ZGEGS lapack_aux/zgegv.f) +ADD_ROUTINE_IF_REQUIRED(dgegv HAVE_DGEGV lapack_aux/dgegv.f) +ADD_ROUTINE_IF_REQUIRED(zgegv HAVE_ZGEGV lapack_aux/zgegv.f) # Setup the library. From a2829db3bf376920f9078a758bb3dcf756311fec Mon Sep 17 00:00:00 2001 From: Martin Koehler Date: Fri, 25 Apr 2025 11:09:24 +0200 Subject: [PATCH 08/22] Disable shared libs in FLANG on windows for proper testing --- .github/workflows/build-msys2.yml | 4 ++-- CMakeLists.txt | 20 ++++++-------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build-msys2.yml b/.github/workflows/build-msys2.yml index e05cb7c..bb32899 100644 --- a/.github/workflows/build-msys2.yml +++ b/.github/workflows/build-msys2.yml @@ -1,4 +1,4 @@ -name: Build on Windows +name: Build on Windows with MSYS2 on: push: @@ -82,7 +82,7 @@ jobs: -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install -D SLICOT_TESTING:BOOL=ON - -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON + -D SLICOT_BUILD_SHARED_LIBS:BOOL=OFF -D CMAKE_EXE_LINKER_FLAGS="-Wl,--stack=2097152" diff --git a/CMakeLists.txt b/CMakeLists.txt index 29c0459..21be6b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,6 @@ LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") INCLUDE(OutOfSource) # Compile Options -OPTION(SLICOT_BUILD_SHARED_LIBS "Build shared libraries" ON) OPTION(SLICOT_DEBUG "Enable Debug Symbol generation" OFF) OPTION(SLICOT_INTEGER8 "Build with 64-bit integers (ILP64)" OFF) # Add ILP64 option @@ -35,15 +34,6 @@ ENDIF() # Shared libraries -IF (BUILD_SHARED_LIBS) - SET(SLICOT_BUILD_SHARED_LIBS ON) -endif() -IF(SLICOT_BUILD_SHARED_LIBS) - SET(BUILD_SHARED_LIBS ON) -ELSE() - SET(BUILD_SHARED_LIBS OFF) -ENDIF() - IF (SLICOT_INTEGER8) SET(INTEGER8 ON) ELSE() @@ -56,9 +46,11 @@ SET(CMAKE_EXPORT_COMPILE_COMMANDS TRUE) SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # Output directories -SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) -SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) -SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +IF(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) + SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +ENDIF() # Configure the Build @@ -135,7 +127,7 @@ endif() ADD_SUBDIRECTORY(src) -IF(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) +IF(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR AND SLICOT_TESTING) ADD_SUBDIRECTORY(examples) ENDIF() From 7cc922d1d29d1f9eb63643372c474338f15936c5 Mon Sep 17 00:00:00 2001 From: Martin Koehler Date: Fri, 25 Apr 2025 11:15:35 +0200 Subject: [PATCH 09/22] change building the test on windows with clang --- .github/workflows/build-msys2.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-msys2.yml b/.github/workflows/build-msys2.yml index bb32899..c9f353e 100644 --- a/.github/workflows/build-msys2.yml +++ b/.github/workflows/build-msys2.yml @@ -82,7 +82,7 @@ jobs: -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install -D SLICOT_TESTING:BOOL=ON - -D SLICOT_BUILD_SHARED_LIBS:BOOL=OFF + -D SLICOT_BUILD_SHARED_LIBS:BOOL=${{ matrix.os.fortran == 'flang' && 'OFF' || 'ON' }} -D CMAKE_EXE_LINKER_FLAGS="-Wl,--stack=2097152" From 1eebb46d49921c4430c07734fee849afd3d469ec Mon Sep 17 00:00:00 2001 From: Martin Koehler Date: Fri, 25 Apr 2025 11:24:45 +0200 Subject: [PATCH 10/22] add known issues --- .github/workflows/build-msys2.yml | 2 +- .github/workflows/build-unix.yml | 2 +- CMakeLists.txt | 2 +- KNOWN_ISSUES.md | 28 ++++++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 KNOWN_ISSUES.md diff --git a/.github/workflows/build-msys2.yml b/.github/workflows/build-msys2.yml index c9f353e..627e14a 100644 --- a/.github/workflows/build-msys2.yml +++ b/.github/workflows/build-msys2.yml @@ -82,7 +82,7 @@ jobs: -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install -D SLICOT_TESTING:BOOL=ON - -D SLICOT_BUILD_SHARED_LIBS:BOOL=${{ matrix.os.fortran == 'flang' && 'OFF' || 'ON' }} + -D BUILD_SHARED_LIBS:BOOL=${{ matrix.os.fortran == 'flang' && 'OFF' || 'ON' }} -D CMAKE_EXE_LINKER_FLAGS="-Wl,--stack=2097152" diff --git a/.github/workflows/build-unix.yml b/.github/workflows/build-unix.yml index c12700d..427d5c7 100644 --- a/.github/workflows/build-unix.yml +++ b/.github/workflows/build-unix.yml @@ -96,7 +96,7 @@ jobs: -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install -D SLICOT_TESTING:BOOL=ON - -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON + -D BUILD_SHARED_LIBS:BOOL=ON - name: Build # Execute tests defined by the CMake configuration. diff --git a/CMakeLists.txt b/CMakeLists.txt index 21be6b2..17f9ff9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,7 +172,7 @@ MESSAGE(STATUS "CMAKE_Fortran_FLAGS_RELEASE: ${CMAKE_Fortran_FLAGS_RELEASE}") MESSAGE(STATUS "BLAS Libraries: ${BLAS_LIBRARIES}") MESSAGE(STATUS "LAPACK Libraries: ${LAPACK_LIBRARIES}") MESSAGE(STATUS "Build Type: ${CMAKE_BUILD_TYPE}") -MESSAGE(STATUS "Debug: ${DEBUG}") +MESSAGE(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") MESSAGE(STATUS "Shared Libs: ${BUILD_SHARED_LIBS}") MESSAGE(STATUS "---------------------------------------------") diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md new file mode 100644 index 0000000..cd5cdb4 --- /dev/null +++ b/KNOWN_ISSUES.md @@ -0,0 +1,28 @@ +Known Issues +============ + +Last Updated: April, 25th 2025 + +Failing test with Flang on Windows / MSYS2 +------------------------------------------ + +The tests for the routines + +* `UD01DB` +* `UD01ND` + +fail if SLICOT is compiled using SHARED libraries. In general +these two routines will not work with SLICOT as shared library +under Windows if it is compiled with FLang. + +The behavior was observed using +```shell +$ flang --version +flang version 19.1.7 +Target: x86_64-w64-windows-gnu +Thread model: posix +InstalledDir: C:/msys64/clang64/bin +``` + +The bug is known to LLVM community: https://github.com/llvm/llvm-project/issues/69952 + From 66dbfc07da043fdb029c3df248188312e4a71868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Fri, 25 Apr 2025 12:13:20 +0200 Subject: [PATCH 11/22] Enable coverage again --- .github/workflows/build-unix.yml | 82 +++++++++++++++++--------------- KNOWN_ISSUES.md | 17 +++++-- 2 files changed, 56 insertions(+), 43 deletions(-) diff --git a/.github/workflows/build-unix.yml b/.github/workflows/build-unix.yml index 427d5c7..416cdeb 100644 --- a/.github/workflows/build-unix.yml +++ b/.github/workflows/build-unix.yml @@ -116,45 +116,49 @@ jobs: - name: Install run: cmake --build build --target install -j2 -# coverage: -# runs-on: ubuntu-latest -# env: -# BUILD_TYPE: Coverage -# FFLAGS: "-fopenmp" -# steps: -# -# - name: Checkout SLICOT -# uses: actions/checkout@v4.2.2 -# -# - name: Install ninja-build tool -# uses: seanmiddleditch/gha-setup-ninja@v6 -# -# - name: Install basics -# run: | -# sudo apt update -# sudo apt install -y cmake liblapack-dev libblas-dev -# -# -# - name: Configure CMake -# # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. -# # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type -# run: > -# cmake -B build -G Ninja -# -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install -# -D SLICOT_BUILD_TESTING:BOOL=ON -# -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON -# -# - name: Install -# run: cmake --build build --target install -j2 -# -# - name: Coverage -# run: | -# echo "Coverage" -# cmake --build build --target coverage -# ctest -C ${{env.BUILD_TYPE}} --schedule-random -j1 --output-on-failure --timeout 100 -# bash <(curl -s https://codecov.io/bash) -X gcov -# + coverage: + runs-on: ubuntu-latest + env: + BUILD_TYPE: Coverage + FFLAGS: "-fopenmp" + steps: + + - name: Checkout SLICOT + uses: actions/checkout@v4.2.2 + + - name: Install ninja-build tool + uses: seanmiddleditch/gha-setup-ninja@v6 + + - name: Install basics + run: | + sudo apt update + sudo apt install -y cmake liblapack-dev libblas-dev + + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: > + cmake -B build -G Ninja + -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install + -D SLICOT_BUILD_TESTING:BOOL=ON + -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON + + - name: Build + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: cmake --build build --config ${{env.BUILD_TYPE}} + + - name: Test with OpenMP + working-directory: ${{github.workspace}}/build + run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j1 --output-on-failure --timeout 100 + + - name: Generate HTML Report + uses: threeal/gcovr-action@v1.1.0 + with: + html-out: coverage.html + # memory-check: # runs-on: ubuntu-latest # env: diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md index cd5cdb4..6586c3b 100644 --- a/KNOWN_ISSUES.md +++ b/KNOWN_ISSUES.md @@ -12,17 +12,26 @@ The tests for the routines * `UD01ND` fail if SLICOT is compiled using SHARED libraries. In general -these two routines will not work with SLICOT as shared library -under Windows if it is compiled with FLang. +these two routines will not work with SLICOT as shared library +under Windows if it is compiled with FLang. -The behavior was observed using -```shell +The behavior was observed using +```shell $ flang --version flang version 19.1.7 Target: x86_64-w64-windows-gnu Thread model: posix InstalledDir: C:/msys64/clang64/bin ``` +and +```shell +$ flang --version +flang version 20.1.3 +Target: x86_64-w64-windows-gnu +Thread model: posix +InstalledDir: C:/msys64/clang64/bin +``` + The bug is known to LLVM community: https://github.com/llvm/llvm-project/issues/69952 From 5d970fca822fe1e6eae2891634104b635635483e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Fri, 25 Apr 2025 12:30:24 +0200 Subject: [PATCH 12/22] Update README.md --- README.md | 119 +++++++++++++++++++++--------------------------------- 1 file changed, 46 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index 56ae7f1..1585ebf 100644 --- a/README.md +++ b/README.md @@ -4,76 +4,49 @@ [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://github.com/SLICOT/SLICOT-Reference/blob/main/LICENSE) **SLICOT** - _Subroutine Library In COntrol Theory_ - is a general purpose basic -mathematical library for control theoretical computations. The library -provides tools to perform essential system analysis and synthesis tasks. -The main emphasis in SLICOT is on numerical reliability of implemented -algorithms and the numerical robustness and efficiency of routines. -Providing algorithmic flexibility and the use of rigorous implementation -and documentation standards are other SLICOT features. - -The SLICOT Library is available as standard Fortran 77 code in double -precision. Each user-callable subroutine for control computations is -accompanied by an example program which illustrates the use of the -subroutine and can act as a template for the user's own routines. - -The SLICOT Library is organized by chapters, sections and subsections. -The following chapters are currently included: - -A : Analysis Routines - -B : Benchmark and Test Problems - -D : Data Analysis - -F : Filtering - -I : Identification - -M : Mathematical Routines - -N : Nonlinear Systems - (not yet available, except for some auxiliary routines for Wiener systems) - -S : Synthesis Routines - -T : Transformation Routines - -U : Utility Routines - -SLICOT Library Root Directory contains few, basic files for the SLICOT Library -distribution and generation. When distributed, SLICOT software comes with -several filled-in subdirectories (benchmark_data, doc, examples, src, and src_aux), -and the following files in this root directory: - -- this file, README.md, - -- the contributors to the library and financial support, Contributors.md, - -- the license file, LICENSE, and - -- the main SLICOT Library documentation index, libindex.html. - -After software installation, this directory will also contain the library -files slicot.a and lpkaux.a, or slicot.lib and lpkaux.lib, for Unix or -Windows platforms, respectively. -The library files could then be linked in applications programs, as usual. -Specific examples are contained in the directory examples. -The on-line documentation of the SLICOT user's callable routines is -accessible via the main SLICOT Library documentation index, libindex.html. -This file also contains a link to the documentation of the lower-level, -support routines. - -The SLICOT Library is built on LAPACK (Linear Algebra PACKage) and BLAS -(Basic Linear Algebra Subprograms) collections. Therefore, these -packages should be available on the platform used. - -Basic References: - -1. P. Benner, V. Mehrmann, V. Sima, S. Van Huffel, and A. Varga, - "SLICOT - A Subroutine Library in Systems and Control Theory", - Applied and Computational Control, Signals, and Circuits - (Birkhauser), Vol. 1, Ch. 10, pp. 505-546, 1999. - -2. S. Van Huffel, V. Sima, A. Varga, S. Hammarling, and F. Delebecque, - "Development of High Performance Numerical Software for Control", - IEEE Control Systems Magazine, Vol. 24, Nr. 1, Feb., pp. 60-76, 2004. +mathematical library for control theoretical computations. The library provides +tools to perform essential system analysis and synthesis tasks. The main +emphasis in SLICOT is on numerical reliability of implemented algorithms and +the numerical robustness and efficiency of routines. Providing algorithmic +flexibility and the use of rigorous implementation and documentation standards +are other SLICOT features. + +The SLICOT Library is available as standard Fortran 77 code in double precision. +Each user-callable subroutine for control computations is accompanied by an +example program which illustrates the use of the subroutine and can act as a +template for the user's own routines. + +The SLICOT Library is organized by chapters, sections, and subsections. The +following chapters are currently included: + +- **A**: Analysis Routines +- **B**: Benchmark and Test Problems +- **D**: Data Analysis +- **F**: Filtering +- **I**: Identification +- **M**: Mathematical Routines +- **N**: Nonlinear Systems (not yet available, except for some auxiliary routines for Wiener systems) +- **S**: Synthesis Routines +- **T**: Transformation Routines +- **U**: Utility Routines + +The SLICOT Library Root Directory contains few, basic files for the SLICOT +Library distribution and generation. When distributed, SLICOT software comes +with several filled-in subdirectories (`benchmark_data`, `doc`, `examples`, +and `src`), and the following files in this root directory: + +- this file, `README.md`, +- the install instructions, `INSTALL.md` +- the contributors to the library and financial support, `Contributors.md`, +- the license file, `LICENSE`, and +- the main SLICOT Library documentation index, `libindex.html`. + +The SLICOT Library is built on LAPACK (Linear Algebra PACKage) and +BLAS (Basic Linear Algebra Subprograms) collections. Therefore, these packages +should be available on the platform used. + +**Basic References:** + +1. P. Benner, V. Mehrmann, V. Sima, S. Van Huffel, and A. Varga, "SLICOT - A Subroutine Library in Systems and Control Theory", Applied and Computational Control, Signals, and Circuits (Birkhauser), Vol. 1, Ch. 10, pp. 505-546, 1999. + +2. S. Van Huffel, V. Sima, A. Varga, S. Hammarling, and F. Delebecque, "Development of High Performance Numerical Software for Control", IEEE Control Systems Magazine, Vol. 24, Nr. 1, Feb., pp. 60-76, 2004. From 269a61dc124a4e3a90255a34fe61ec83dfac5fa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Fri, 25 Apr 2025 12:38:33 +0200 Subject: [PATCH 13/22] Update Readmes and Gitlab CI run --- .editorconfig | 37 ++++++++ .gitlab-ci.yml | 80 ++++++++++++++++ .gitlab/docker/almalinux-image/Dockerfile.8 | 11 +++ .gitlab/docker/almalinux-image/Dockerfile.9 | 13 +++ .gitlab/docker/almalinux-image/build.sh | 15 +++ .gitlab/docker/amd-image/Dockerfile.amd5.0 | 43 +++++++++ .gitlab/docker/amd-image/build.sh | 14 +++ .gitlab/docker/build-all.sh | 14 +++ .gitlab/docker/fedora-image/Dockerfile.fc40 | 4 + .gitlab/docker/fedora-image/Dockerfile.fc41 | 5 + .gitlab/docker/fedora-image/Dockerfile.fc42 | 6 ++ .../docker/fedora-image/Dockerfile.fcrawhide | 20 ++++ .gitlab/docker/fedora-image/build.sh | 16 ++++ .gitlab/docker/intel-image/Dockerfile.2021 | 5 + .gitlab/docker/intel-image/Dockerfile.2022 | 5 + .gitlab/docker/intel-image/Dockerfile.2023 | 5 + .gitlab/docker/intel-image/Dockerfile.2024 | 5 + .gitlab/docker/intel-image/Dockerfile.2025 | 5 + .gitlab/docker/intel-image/build.sh | 13 +++ .gitlab/docker/nvidia-image/Dockerfile.21.11 | 5 + .gitlab/docker/nvidia-image/Dockerfile.22.11 | 5 + .gitlab/docker/nvidia-image/Dockerfile.23.11 | 5 + .gitlab/docker/nvidia-image/Dockerfile.24.9 | 5 + .gitlab/docker/nvidia-image/Dockerfile.25.3 | 5 + .gitlab/docker/nvidia-image/build.sh | 14 +++ .gitlab/docker/ubuntu-image/Dockerfile.focal | 7 ++ .gitlab/docker/ubuntu-image/Dockerfile.jammy | 7 ++ .gitlab/docker/ubuntu-image/Dockerfile.noble | 7 ++ .gitlab/docker/ubuntu-image/build.sh | 14 +++ CMakeLists.txt | 11 ++- Contributors.md | 86 ++++++++++++++++- INSTALL.md | 93 +++++++++++++++++++ Installation.md | 31 ------- KNOWN_ISSUES.md | 7 ++ LICENSE | 4 +- README.md | 39 +++++--- ReleaseNotes.md | 78 ++++++++++------ cmake/FortranCompilerSettings.cmake | 9 +- examples/TAB01MD.f | 3 + examples/TAB01ND.f | 3 + examples/TAB01OD.f | 3 + examples/TAB04MD.f | 3 + examples/TAB05MD.f | 3 + examples/TAB05ND.f | 3 + examples/TAB05OD.f | 3 + examples/TAB05PD.f | 3 + examples/TAB05QD.f | 3 + examples/TAB05RD.f | 3 + examples/TAB07MD.f | 3 + examples/TAB07ND.f | 3 + examples/TAB08ND.f | 3 + examples/TAB08NW.f | 3 + examples/TAB08NZ.f | 3 + examples/TAB09AD.f | 3 + examples/TAB09BD.f | 3 + examples/TAB09CD.f | 3 + examples/TAB09DD.f | 3 + examples/TAB09ED.f | 3 + examples/TAB09FD.f | 3 + examples/TAB09GD.f | 3 + examples/TAB09HD.f | 3 + examples/TAB09ID.f | 3 + examples/TAB09JD.f | 3 + examples/TAB09KD.f | 3 + examples/TAB09MD.f | 3 + examples/TAB09ND.f | 3 + examples/TAB13AD.f | 3 + examples/TAB13BD.f | 3 + examples/TAB13CD.f | 3 + examples/TAB13DD.f | 3 + examples/TAB13ED.f | 3 + examples/TAB13FD.f | 3 + examples/TAB13ID.f | 3 + examples/TAB13MD.f | 3 + examples/TAG08BD.f | 3 + examples/TAG08BZ.f | 3 + examples/TBB01AD.f | 3 + examples/TBB02AD.f | 3 + examples/TBB03AD.f | 3 + examples/TBB04AD.f | 3 + examples/TBD01AD.f | 3 + examples/TBD02AD.f | 3 + examples/TDE01OD.f | 3 + examples/TDE01PD.f | 3 + examples/TDF01MD.f | 3 + examples/TDG01MD.f | 3 + examples/TDG01ND.f | 3 + examples/TDG01OD.f | 3 + examples/TDK01MD.f | 3 + examples/TFB01QD.f | 3 + examples/TFB01RD.f | 3 + examples/TFB01SD.f | 3 + examples/TFB01TD.f | 3 + examples/TFB01VD.f | 3 + examples/TFD01AD.f | 3 + examples/TIB01AD.f | 3 + examples/TIB01BD.f | 3 + examples/TIB01CD.f | 3 + examples/TIB03AD.f | 3 + examples/TIB03BD.f | 3 + examples/TMB01TD.f | 3 + examples/TMB02CD.f | 3 + examples/TMB02DD.f | 3 + examples/TMB02ED.f | 3 + examples/TMB02FD.f | 3 + examples/TMB02GD.f | 3 + examples/TMB02HD.f | 3 + examples/TMB02ID.f | 3 + examples/TMB02JD.f | 3 + examples/TMB02JX.f | 3 + examples/TMB02KD.f | 3 + examples/TMB02MD.f | 3 + examples/TMB02ND.f | 3 + examples/TMB02QD.f | 3 + examples/TMB02SD.f | 3 + examples/TMB02VD.f | 3 + examples/TMB03BD.f | 3 + examples/TMB03BZ.f | 3 + examples/TMB03FZ.f | 3 + examples/TMB03KD.f | 3 + examples/TMB03LD.f | 3 + examples/TMB03LF.f | 3 + examples/TMB03LZ.f | 3 + examples/TMB03MD.f | 3 + examples/TMB03ND.f | 3 + examples/TMB03OD.f | 3 + examples/TMB03PD.f | 3 + examples/TMB03QD.f | 3 + examples/TMB03QG.f | 3 + examples/TMB03RD.f | 3 + examples/TMB03SD.f | 3 + examples/TMB03TD.f | 3 + examples/TMB03UD.f | 3 + examples/TMB03VD.f | 3 + examples/TMB03WD.f | 3 + examples/TMB03XD.f | 3 + examples/TMB03XP.f | 3 + examples/TMB03XZ.f | 3 + examples/TMB03ZD.f | 3 + examples/TMB04AD.f | 3 + examples/TMB04AZ.f | 3 + examples/TMB04BD.f | 3 + examples/TMB04BZ.f | 3 + examples/TMB04DD.f | 3 + examples/TMB04DL.f | 3 + examples/TMB04DP.f | 3 + examples/TMB04DS.f | 3 + examples/TMB04DY.f | 3 + examples/TMB04DZ.f | 3 + examples/TMB04ED.f | 3 + examples/TMB04FD.f | 3 + examples/TMB04GD.f | 3 + examples/TMB04MD.f | 3 + examples/TMB04OD.f | 3 + examples/TMB04PB.f | 3 + examples/TMB04PU.f | 3 + examples/TMB04TB.f | 3 + examples/TMB04TS.f | 3 + examples/TMB04UD.f | 3 + examples/TMB04VD.f | 3 + examples/TMB04XD.f | 3 + examples/TMB04YD.f | 3 + examples/TMB04ZD.f | 3 + examples/TMB05MD.f | 3 + examples/TMB05ND.f | 3 + examples/TMB05OD.f | 3 + examples/TMB4DLZ.f | 3 + examples/TMB4DPZ.f | 3 + examples/TMC01MD.f | 3 + examples/TMC01ND.f | 3 + examples/TMC01OD.f | 3 + examples/TMC01PD.f | 3 + examples/TMC01QD.f | 3 + examples/TMC01RD.f | 3 + examples/TMC01SD.f | 3 + examples/TMC01TD.f | 3 + examples/TMC01VD.f | 3 + examples/TMC01WD.f | 3 + examples/TMC01XD.f | 3 + examples/TMC03MD.f | 3 + examples/TMC03ND.f | 3 + examples/TMD03AD.f | 3 + examples/TMD03BD.f | 3 + examples/TSB01BD.f | 3 + examples/TSB01DD.f | 3 + examples/TSB01MD.f | 3 + examples/TSB02MD.f | 3 + examples/TSB02ND.f | 3 + examples/TSB02OD.f | 3 + examples/TSB02PD.f | 3 + examples/TSB02QD.f | 3 + examples/TSB02RD.f | 3 + examples/TSB02SD.f | 3 + examples/TSB03MD.f | 3 + examples/TSB03OD.f | 3 + examples/TSB03QD.f | 3 + examples/TSB03SD.f | 3 + examples/TSB03TD.f | 3 + examples/TSB03UD.f | 3 + examples/TSB04MD.f | 3 + examples/TSB04ND.f | 3 + examples/TSB04OD.f | 3 + examples/TSB04PD.f | 3 + examples/TSB04QD.f | 3 + examples/TSB04RD.f | 3 + examples/TSB06ND.f | 3 + examples/TSB08CD.f | 3 + examples/TSB08DD.f | 3 + examples/TSB08ED.f | 3 + examples/TSB08FD.f | 3 + examples/TSB08MD.f | 3 + examples/TSB08ND.f | 3 + examples/TSB09MD.f | 3 + examples/TSB10DD.f | 3 + examples/TSB10ED.f | 3 + examples/TSB10FD.f | 3 + examples/TSB10HD.f | 3 + examples/TSB10ID.f | 3 + examples/TSB10KD.f | 3 + examples/TSB10ZD.f | 3 + examples/TSB16AD.f | 3 + examples/TSB16BD.f | 3 + examples/TSB16CD.f | 3 + examples/TSG02AD.f | 3 + examples/TSG02ND.f | 3 + examples/TSG03AD.f | 3 + examples/TSG03BD.f | 3 + examples/TTB01ID.f | 3 + examples/TTB01IZ.f | 3 + examples/TTB01KD.f | 3 + examples/TTB01LD.f | 3 + examples/TTB01MD.f | 3 + examples/TTB01ND.f | 3 + examples/TTB01PD.f | 3 + examples/TTB01PX.f | 3 + examples/TTB01TD.f | 3 + examples/TTB01UD.f | 3 + examples/TTB01UY.f | 3 + examples/TTB01WD.f | 3 + examples/TTB01WX.f | 3 + examples/TTB01ZD.f | 3 + examples/TTB03AD.f | 3 + examples/TTB04AD.f | 3 + examples/TTB04BD.f | 3 + examples/TTB04CD.f | 3 + examples/TTB05AD.f | 3 + examples/TTC01OD.f | 3 + examples/TTC04AD.f | 3 + examples/TTC05AD.f | 3 + examples/TTD03AD.f | 3 + examples/TTD04AD.f | 3 + examples/TTD05AD.f | 3 + examples/TTF01MD.f | 3 + examples/TTF01ND.f | 3 + examples/TTF01OD.f | 3 + examples/TTF01PD.f | 3 + examples/TTF01QD.f | 3 + examples/TTF01RD.f | 3 + examples/TTG01AD.f | 3 + examples/TTG01AZ.f | 3 + examples/TTG01CD.f | 3 + examples/TTG01DD.f | 3 + examples/TTG01ED.f | 3 + examples/TTG01FD.f | 3 + examples/TTG01FZ.f | 3 + examples/TTG01GD.f | 3 + examples/TTG01HD.f | 3 + examples/TTG01ID.f | 3 + examples/TTG01JD.f | 3 + examples/TTG01JY.f | 3 + examples/TTG01LD.f | 3 + examples/TTG01MD.f | 3 + examples/TTG01ND.f | 3 + examples/TTG01PD.f | 3 + examples/TTG01QD.f | 3 + examples/TUD01BD.f | 3 + examples/TUD01CD.f | 3 + examples/TUD01DD.f | 3 + examples/TUD01MD.f | 3 + examples/TUD01ND.f | 3 + src/AB01MD.f | 3 + src/AB01ND.f | 3 + src/AB01OD.f | 3 + src/AB04MD.f | 3 + src/AB05MD.f | 3 + src/AB05ND.f | 3 + src/AB05OD.f | 3 + src/AB05PD.f | 3 + src/AB05QD.f | 3 + src/AB05RD.f | 3 + src/AB05SD.f | 3 + src/AB07MD.f | 3 + src/AB07ND.f | 3 + src/AB08MD.f | 3 + src/AB08MZ.f | 3 + src/AB08ND.f | 3 + src/AB08NW.f | 3 + src/AB08NX.f | 3 + src/AB08NY.f | 3 + src/AB08NZ.f | 3 + src/AB09AD.f | 3 + src/AB09AX.f | 3 + src/AB09BD.f | 3 + src/AB09BX.f | 3 + src/AB09CD.f | 3 + src/AB09CX.f | 3 + src/AB09DD.f | 3 + src/AB09ED.f | 3 + src/AB09FD.f | 3 + src/AB09GD.f | 3 + src/AB09HD.f | 3 + src/AB09HX.f | 3 + src/AB09HY.f | 3 + src/AB09ID.f | 3 + src/AB09IX.f | 3 + src/AB09IY.f | 3 + src/AB09JD.f | 3 + src/AB09JV.f | 3 + src/AB09JW.f | 3 + src/AB09JX.f | 3 + src/AB09KD.f | 3 + src/AB09KX.f | 3 + src/AB09MD.f | 3 + src/AB09ND.f | 3 + src/AB13AD.f | 3 + src/AB13AX.f | 3 + src/AB13BD.f | 3 + src/AB13CD.f | 3 + src/AB13DD.f | 3 + src/AB13DX.f | 3 + src/AB13ED.f | 3 + src/AB13FD.f | 3 + src/AB13HD.f | 3 + src/AB13ID.f | 3 + src/AB13MD.f | 3 + src/AB8NXZ.f | 3 + src/AG07BD.f | 3 + src/AG08BD.f | 3 + src/AG08BY.f | 3 + src/AG08BZ.f | 3 + src/AG8BYZ.f | 3 + src/BB01AD.f | 3 + src/BB02AD.f | 3 + src/BB03AD.f | 3 + src/BB04AD.f | 3 + src/BD01AD.f | 3 + src/BD02AD.f | 3 + src/CMakeLists.txt | 2 +- src/DE01OD.f | 3 + src/DE01PD.f | 3 + src/DF01MD.f | 3 + src/DG01MD.f | 3 + src/DG01ND.f | 3 + src/DG01NY.f | 3 + src/DG01OD.f | 3 + src/DK01MD.f | 3 + src/FB01QD.f | 3 + src/FB01RD.f | 3 + src/FB01SD.f | 3 + src/FB01TD.f | 3 + src/FB01VD.f | 3 + src/FD01AD.f | 3 + src/IB01AD.f | 5 +- src/IB01BD.f | 3 + src/IB01CD.f | 3 + src/IB01MD.f | 3 + src/IB01MY.f | 3 + src/IB01ND.f | 3 + src/IB01OD.f | 3 + src/IB01OY.f | 3 + src/IB01PD.f | 3 + src/IB01PX.f | 3 + src/IB01PY.f | 3 + src/IB01QD.f | 3 + src/IB01RD.f | 3 + src/IB03AD.f | 3 + src/IB03BD.f | 3 + src/MA01AD.f | 3 + src/MA01BD.f | 3 + src/MA01BZ.f | 3 + src/MA01CD.f | 3 + src/MA01DD.f | 3 + src/MA01DZ.f | 3 + src/MA02AD.f | 3 + src/MA02AZ.f | 3 + src/MA02BD.f | 3 + src/MA02BZ.f | 3 + src/MA02CD.f | 3 + src/MA02CZ.f | 3 + src/MA02DD.f | 3 + src/MA02ED.f | 3 + src/MA02ES.f | 3 + src/MA02EZ.f | 3 + src/MA02FD.f | 3 + src/MA02GD.f | 3 + src/MA02GZ.f | 3 + src/MA02HD.f | 3 + src/MA02HZ.f | 3 + src/MA02ID.f | 3 + src/MA02IZ.f | 3 + src/MA02JD.f | 3 + src/MA02JZ.f | 3 + src/MA02MD.f | 3 + src/MA02MZ.f | 3 + src/MA02NZ.f | 3 + src/MA02OD.f | 3 + src/MA02OZ.f | 3 + src/MA02PD.f | 3 + src/MA02PZ.f | 3 + src/MA02RD.f | 3 + src/MA02SD.f | 3 + src/MB01KD.f | 3 + src/MB01LD.f | 3 + src/MB01MD.f | 3 + src/MB01ND.f | 3 + src/MB01OC.f | 3 + src/MB01OD.f | 3 + src/MB01OE.f | 3 + src/MB01OH.f | 3 + src/MB01OO.f | 3 + src/MB01OS.f | 3 + src/MB01OT.f | 3 + src/MB01PD.f | 3 + src/MB01QD.f | 3 + src/MB01RB.f | 3 + src/MB01RD.f | 3 + src/MB01RH.f | 3 + src/MB01RT.f | 3 + src/MB01RU.f | 3 + src/MB01RW.f | 3 + src/MB01RX.f | 3 + src/MB01RY.f | 3 + src/MB01SD.f | 3 + src/MB01SS.f | 3 + src/MB01TD.f | 3 + src/MB01UD.f | 3 + src/MB01UW.f | 3 + src/MB01UX.f | 3 + src/MB01UY.f | 3 + src/MB01UZ.f | 3 + src/MB01VD.f | 3 + src/MB01WD.f | 3 + src/MB01XD.f | 3 + src/MB01XY.f | 3 + src/MB01YD.f | 3 + src/MB01ZD.f | 3 + src/MB02CD.f | 3 + src/MB02CU.f | 3 + src/MB02CV.f | 3 + src/MB02CX.f | 3 + src/MB02CY.f | 3 + src/MB02DD.f | 3 + src/MB02ED.f | 3 + src/MB02FD.f | 3 + src/MB02GD.f | 3 + src/MB02HD.f | 3 + src/MB02ID.f | 3 + src/MB02JD.f | 3 + src/MB02JX.f | 3 + src/MB02KD.f | 3 + src/MB02MD.f | 3 + src/MB02ND.f | 3 + src/MB02NY.f | 3 + src/MB02OD.f | 3 + src/MB02PD.f | 3 + src/MB02QD.f | 3 + src/MB02QY.f | 3 + src/MB02RD.f | 3 + src/MB02RZ.f | 3 + src/MB02SD.f | 3 + src/MB02SZ.f | 3 + src/MB02TD.f | 3 + src/MB02TZ.f | 3 + src/MB02UD.f | 3 + src/MB02UU.f | 3 + src/MB02UV.f | 3 + src/MB02UW.f | 3 + src/MB02VD.f | 3 + src/MB02WD.f | 3 + src/MB02XD.f | 3 + src/MB02YD.f | 3 + src/MB03AB.f | 3 + src/MB03AD.f | 3 + src/MB03AE.f | 3 + src/MB03AF.f | 3 + src/MB03AG.f | 3 + src/MB03AH.f | 3 + src/MB03AI.f | 3 + src/MB03BA.f | 3 + src/MB03BB.f | 3 + src/MB03BC.f | 3 + src/MB03BD.f | 3 + src/MB03BE.f | 3 + src/MB03BF.f | 3 + src/MB03BG.f | 3 + src/MB03BZ.f | 3 + src/MB03CD.f | 3 + src/MB03CZ.f | 3 + src/MB03DD.f | 3 + src/MB03DZ.f | 3 + src/MB03ED.f | 3 + src/MB03FD.f | 3 + src/MB03FZ.f | 3 + src/MB03GD.f | 3 + src/MB03GZ.f | 3 + src/MB03HD.f | 3 + src/MB03HZ.f | 3 + src/MB03ID.f | 3 + src/MB03IZ.f | 3 + src/MB03JD.f | 3 + src/MB03JP.f | 3 + src/MB03JZ.f | 3 + src/MB03KA.f | 3 + src/MB03KB.f | 3 + src/MB03KC.f | 3 + src/MB03KD.f | 3 + src/MB03KE.f | 3 + src/MB03LD.f | 3 + src/MB03LF.f | 3 + src/MB03LP.f | 3 + src/MB03LZ.f | 3 + src/MB03MD.f | 3 + src/MB03MY.f | 3 + src/MB03ND.f | 3 + src/MB03NY.f | 3 + src/MB03OD.f | 3 + src/MB03OY.f | 3 + src/MB03PD.f | 3 + src/MB03PY.f | 3 + src/MB03QD.f | 3 + src/MB03QG.f | 3 + src/MB03QV.f | 3 + src/MB03QW.f | 3 + src/MB03QX.f | 3 + src/MB03QY.f | 3 + src/MB03RD.f | 3 + src/MB03RW.f | 3 + src/MB03RX.f | 3 + src/MB03RY.f | 3 + src/MB03RZ.f | 3 + src/MB03SD.f | 3 + src/MB03TD.f | 3 + src/MB03TS.f | 3 + src/MB03UD.f | 3 + src/MB03VD.f | 3 + src/MB03VW.f | 3 + src/MB03VY.f | 3 + src/MB03WA.f | 3 + src/MB03WD.f | 3 + src/MB03WX.f | 3 + src/MB03XD.f | 3 + src/MB03XP.f | 3 + src/MB03XS.f | 3 + src/MB03XU.f | 3 + src/MB03XZ.f | 3 + src/MB03YA.f | 3 + src/MB03YD.f | 3 + src/MB03YT.f | 3 + src/MB03ZA.f | 3 + src/MB03ZD.f | 3 + src/MB04AD.f | 3 + src/MB04AZ.f | 3 + src/MB04BD.f | 3 + src/MB04BP.f | 3 + src/MB04BZ.f | 3 + src/MB04CD.f | 3 + src/MB04DB.f | 3 + src/MB04DD.f | 3 + src/MB04DI.f | 3 + src/MB04DL.f | 3 + src/MB04DP.f | 3 + src/MB04DS.f | 3 + src/MB04DY.f | 3 + src/MB04DZ.f | 3 + src/MB04ED.f | 3 + src/MB04FD.f | 3 + src/MB04FP.f | 3 + src/MB04GD.f | 3 + src/MB04HD.f | 3 + src/MB04ID.f | 3 + src/MB04IY.f | 3 + src/MB04IZ.f | 3 + src/MB04JD.f | 3 + src/MB04KD.f | 3 + src/MB04LD.f | 3 + src/MB04MD.f | 3 + src/MB04ND.f | 3 + src/MB04NY.f | 3 + src/MB04OD.f | 3 + src/MB04OW.f | 3 + src/MB04OX.f | 3 + src/MB04OY.f | 3 + src/MB04PA.f | 3 + src/MB04PB.f | 3 + src/MB04PU.f | 3 + src/MB04PY.f | 3 + src/MB04QB.f | 3 + src/MB04QC.f | 3 + src/MB04QF.f | 3 + src/MB04QS.f | 3 + src/MB04QU.f | 3 + src/MB04RB.f | 3 + src/MB04RD.f | 3 + src/MB04RS.f | 3 + src/MB04RT.f | 3 + src/MB04RU.f | 3 + src/MB04RV.f | 3 + src/MB04RW.f | 3 + src/MB04RZ.f | 3 + src/MB04SU.f | 3 + src/MB04TB.f | 3 + src/MB04TS.f | 3 + src/MB04TT.f | 3 + src/MB04TU.f | 3 + src/MB04TV.f | 3 + src/MB04TW.f | 3 + src/MB04TX.f | 3 + src/MB04TY.f | 3 + src/MB04UD.f | 3 + src/MB04VD.f | 3 + src/MB04VX.f | 3 + src/MB04WD.f | 3 + src/MB04WP.f | 3 + src/MB04WR.f | 3 + src/MB04WU.f | 3 + src/MB04XD.f | 3 + src/MB04XY.f | 3 + src/MB04YD.f | 3 + src/MB04YW.f | 3 + src/MB04ZD.f | 3 + src/MB05MD.f | 3 + src/MB05MY.f | 3 + src/MB05ND.f | 3 + src/MB05OD.f | 3 + src/MB05OY.f | 3 + src/MB3JZP.f | 3 + src/MB3LZP.f | 3 + src/MB3OYZ.f | 3 + src/MB3PYZ.f | 3 + src/MB4DBZ.f | 3 + src/MB4DLZ.f | 3 + src/MB4DPZ.f | 3 + src/MC01MD.f | 3 + src/MC01ND.f | 3 + src/MC01OD.f | 3 + src/MC01PD.f | 3 + src/MC01PY.f | 3 + src/MC01QD.f | 3 + src/MC01RD.f | 3 + src/MC01SD.f | 3 + src/MC01SW.f | 3 + src/MC01SX.f | 3 + src/MC01SY.f | 3 + src/MC01TD.f | 3 + src/MC01VD.f | 3 + src/MC01WD.f | 3 + src/MC01XD.f | 3 + src/MC03MD.f | 3 + src/MC03ND.f | 3 + src/MC03NX.f | 3 + src/MC03NY.f | 3 + src/MD03AD.f | 3 + src/MD03BA.f | 3 + src/MD03BB.f | 3 + src/MD03BD.f | 3 + src/MD03BF.f | 3 + src/MD03BX.f | 3 + src/MD03BY.f | 3 + src/NF01AD.f | 3 + src/NF01AY.f | 3 + src/NF01BA.f | 3 + src/NF01BB.f | 3 + src/NF01BD.f | 3 + src/NF01BE.f | 3 + src/NF01BF.f | 3 + src/NF01BP.f | 3 + src/NF01BQ.f | 3 + src/NF01BR.f | 3 + src/NF01BS.f | 3 + src/NF01BU.f | 3 + src/NF01BV.f | 3 + src/NF01BW.f | 3 + src/NF01BX.f | 3 + src/NF01BY.f | 3 + src/SB01BD.f | 3 + src/SB01BX.f | 3 + src/SB01BY.f | 3 + src/SB01DD.f | 3 + src/SB01FY.f | 3 + src/SB01MD.f | 3 + src/SB02CX.f | 3 + src/SB02MD.f | 3 + src/SB02MR.f | 3 + src/SB02MS.f | 3 + src/SB02MT.f | 3 + src/SB02MU.f | 3 + src/SB02MV.f | 3 + src/SB02MW.f | 3 + src/SB02MX.f | 3 + src/SB02ND.f | 3 + src/SB02OD.f | 3 + src/SB02OU.f | 3 + src/SB02OV.f | 3 + src/SB02OW.f | 3 + src/SB02OX.f | 3 + src/SB02OY.f | 3 + src/SB02PD.f | 3 + src/SB02QD.f | 3 + src/SB02RD.f | 3 + src/SB02RU.f | 3 + src/SB02SD.f | 3 + src/SB03MD.f | 3 + src/SB03MU.f | 3 + src/SB03MV.f | 3 + src/SB03MW.f | 3 + src/SB03MX.f | 3 + src/SB03MY.f | 3 + src/SB03OD.f | 3 + src/SB03OR.f | 3 + src/SB03OS.f | 3 + src/SB03OT.f | 3 + src/SB03OU.f | 3 + src/SB03OV.f | 3 + src/SB03OY.f | 3 + src/SB03OZ.f | 3 + src/SB03PD.f | 3 + src/SB03QD.f | 3 + src/SB03QX.f | 3 + src/SB03QY.f | 3 + src/SB03RD.f | 3 + src/SB03SD.f | 3 + src/SB03SX.f | 3 + src/SB03SY.f | 3 + src/SB03TD.f | 3 + src/SB03UD.f | 3 + src/SB04MD.f | 3 + src/SB04MR.f | 3 + src/SB04MU.f | 3 + src/SB04MW.f | 3 + src/SB04MY.f | 3 + src/SB04ND.f | 3 + src/SB04NV.f | 3 + src/SB04NW.f | 3 + src/SB04NX.f | 3 + src/SB04NY.f | 3 + src/SB04OD.f | 3 + src/SB04OW.f | 3 + src/SB04PD.f | 3 + src/SB04PX.f | 3 + src/SB04PY.f | 3 + src/SB04QD.f | 3 + src/SB04QR.f | 3 + src/SB04QU.f | 3 + src/SB04QY.f | 3 + src/SB04RD.f | 3 + src/SB04RV.f | 3 + src/SB04RW.f | 3 + src/SB04RX.f | 3 + src/SB04RY.f | 3 + src/SB06ND.f | 3 + src/SB08CD.f | 3 + src/SB08DD.f | 3 + src/SB08ED.f | 3 + src/SB08FD.f | 3 + src/SB08GD.f | 3 + src/SB08HD.f | 3 + src/SB08MD.f | 3 + src/SB08MY.f | 3 + src/SB08ND.f | 3 + src/SB08NY.f | 3 + src/SB09MD.f | 3 + src/SB10AD.f | 3 + src/SB10DD.f | 3 + src/SB10ED.f | 3 + src/SB10FD.f | 3 + src/SB10HD.f | 3 + src/SB10ID.f | 3 + src/SB10JD.f | 3 + src/SB10KD.f | 3 + src/SB10LD.f | 3 + src/SB10MD.f | 3 + src/SB10PD.f | 3 + src/SB10QD.f | 3 + src/SB10RD.f | 3 + src/SB10SD.f | 3 + src/SB10TD.f | 3 + src/SB10UD.f | 3 + src/SB10VD.f | 3 + src/SB10WD.f | 3 + src/SB10YD.f | 3 + src/SB10ZD.f | 3 + src/SB10ZP.f | 3 + src/SB16AD.f | 3 + src/SB16AY.f | 3 + src/SB16BD.f | 3 + src/SB16CD.f | 3 + src/SB16CY.f | 3 + src/SG02AD.f | 3 + src/SG02CV.f | 3 + src/SG02CW.f | 3 + src/SG02CX.f | 3 + src/SG02ND.f | 3 + src/SG03AD.f | 3 + src/SG03AX.f | 3 + src/SG03AY.f | 3 + src/SG03BD.f | 3 + src/SG03BR.f | 3 + src/SG03BS.f | 3 + src/SG03BT.f | 3 + src/SG03BU.f | 3 + src/SG03BV.f | 3 + src/SG03BW.f | 3 + src/SG03BX.f | 3 + src/SG03BY.f | 3 + src/SG03BZ.f | 3 + src/TB01ID.f | 3 + src/TB01IZ.f | 3 + src/TB01KD.f | 3 + src/TB01KX.f | 3 + src/TB01LD.f | 3 + src/TB01MD.f | 3 + src/TB01ND.f | 3 + src/TB01PD.f | 3 + src/TB01PX.f | 3 + src/TB01TD.f | 3 + src/TB01TY.f | 3 + src/TB01UD.f | 3 + src/TB01UX.f | 3 + src/TB01UY.f | 3 + src/TB01VD.f | 3 + src/TB01VY.f | 3 + src/TB01WD.f | 3 + src/TB01WX.f | 3 + src/TB01XD.f | 3 + src/TB01XZ.f | 3 + src/TB01YD.f | 3 + src/TB01ZD.f | 3 + src/TB03AD.f | 3 + src/TB03AY.f | 3 + src/TB04AD.f | 3 + src/TB04AY.f | 3 + src/TB04BD.f | 3 + src/TB04BV.f | 3 + src/TB04BW.f | 3 + src/TB04BX.f | 3 + src/TB04CD.f | 3 + src/TB05AD.f | 3 + src/TC01OD.f | 3 + src/TC04AD.f | 3 + src/TC05AD.f | 3 + src/TD03AD.f | 3 + src/TD03AY.f | 3 + src/TD04AD.f | 3 + src/TD05AD.f | 3 + src/TF01MD.f | 3 + src/TF01MX.f | 3 + src/TF01MY.f | 3 + src/TF01ND.f | 3 + src/TF01OD.f | 3 + src/TF01PD.f | 3 + src/TF01QD.f | 3 + src/TF01RD.f | 3 + src/TG01AD.f | 3 + src/TG01AZ.f | 3 + src/TG01BD.f | 3 + src/TG01CD.f | 3 + src/TG01DD.f | 3 + src/TG01ED.f | 3 + src/TG01FD.f | 3 + src/TG01FZ.f | 3 + src/TG01GD.f | 3 + src/TG01HD.f | 3 + src/TG01HU.f | 3 + src/TG01HX.f | 3 + src/TG01HY.f | 3 + src/TG01ID.f | 3 + src/TG01JD.f | 3 + src/TG01JY.f | 3 + src/TG01KD.f | 3 + src/TG01KZ.f | 3 + src/TG01LD.f | 3 + src/TG01LY.f | 3 + src/TG01MD.f | 3 + src/TG01ND.f | 3 + src/TG01NX.f | 3 + src/TG01OA.f | 3 + src/TG01OB.f | 3 + src/TG01OD.f | 3 + src/TG01OZ.f | 3 + src/TG01PD.f | 3 + src/TG01QD.f | 3 + src/TG01WD.f | 3 + src/UD01BD.f | 3 + src/UD01CD.f | 3 + src/UD01DD.f | 3 + src/UD01MD.f | 3 + src/UD01MZ.f | 3 + src/UD01ND.f | 3 + src/UE01MD.f | 3 + src/delctg.f | 3 + src/select.f | 3 + src/zelctg.f | 3 + 902 files changed, 3253 insertions(+), 88 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitlab-ci.yml create mode 100644 .gitlab/docker/almalinux-image/Dockerfile.8 create mode 100644 .gitlab/docker/almalinux-image/Dockerfile.9 create mode 100644 .gitlab/docker/almalinux-image/build.sh create mode 100644 .gitlab/docker/amd-image/Dockerfile.amd5.0 create mode 100644 .gitlab/docker/amd-image/build.sh create mode 100644 .gitlab/docker/build-all.sh create mode 100644 .gitlab/docker/fedora-image/Dockerfile.fc40 create mode 100644 .gitlab/docker/fedora-image/Dockerfile.fc41 create mode 100644 .gitlab/docker/fedora-image/Dockerfile.fc42 create mode 100644 .gitlab/docker/fedora-image/Dockerfile.fcrawhide create mode 100644 .gitlab/docker/fedora-image/build.sh create mode 100644 .gitlab/docker/intel-image/Dockerfile.2021 create mode 100644 .gitlab/docker/intel-image/Dockerfile.2022 create mode 100644 .gitlab/docker/intel-image/Dockerfile.2023 create mode 100644 .gitlab/docker/intel-image/Dockerfile.2024 create mode 100644 .gitlab/docker/intel-image/Dockerfile.2025 create mode 100644 .gitlab/docker/intel-image/build.sh create mode 100644 .gitlab/docker/nvidia-image/Dockerfile.21.11 create mode 100644 .gitlab/docker/nvidia-image/Dockerfile.22.11 create mode 100644 .gitlab/docker/nvidia-image/Dockerfile.23.11 create mode 100644 .gitlab/docker/nvidia-image/Dockerfile.24.9 create mode 100644 .gitlab/docker/nvidia-image/Dockerfile.25.3 create mode 100644 .gitlab/docker/nvidia-image/build.sh create mode 100644 .gitlab/docker/ubuntu-image/Dockerfile.focal create mode 100644 .gitlab/docker/ubuntu-image/Dockerfile.jammy create mode 100644 .gitlab/docker/ubuntu-image/Dockerfile.noble create mode 100644 .gitlab/docker/ubuntu-image/build.sh create mode 100644 INSTALL.md delete mode 100644 Installation.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..b7f250f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,37 @@ +root = true + +[*] +end_of_line = lf +trim_trailing_whitespace = true +charset = utf-8 + +[Makefile] +indent_style = tab + +[*.{c,cpp,h,hpp,f,f90,F,F90}] +indent_style = space +indent_size = 4 +insert_final_newline = true + +[*.{f,F}] +max_line_length = 72 + +[*.{f90,f95,f03,F90,F95,F03}] +max_line_length = 132 + +[*{c,cpp,h,hpp}] +curly_bracket_next_line = true +indent_brace_style = Allman + +[CMakeLists.txt] +indent_style = space +indent_size = 4 + +[*.cmake] +indent_style = space +indent_size = 4 + +[*.{yaml,yml}] +indent_style = space +indent_size = 2 + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..48967a4 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,80 @@ +default: + interruptible: true + +before_script: + - echo "Pipeline Source - ${CI_PIPELINE_SOURCE}" + - git submodule update --init --recursive + +stages: + - build + + +linux: + stage: build + image: ${CI_REGISTRY_IMAGE}/${OS}:${OSVERSION} + needs: [] + parallel: + matrix: + - OS: [ "ubuntu" ] + OSVERSION: [ 'focal', 'jammy'] + - OS: [ "ubuntu" ] + OSVERSION: [ 'noble' ] + INTEGER8: [ 'INTEGER8_ON', 'INTEGER8_OFF' ] + - OS: [ "ubuntu" ] + OSVERSION: [ 'noble' ] + CC: "clang" + FC: "flang-new" + - OS: [ "fedora" ] + OSVERSION: [ '40', '41', '42', 'rawhide' ] + - OS: [ "almalinux" ] + OSVERSION: [ '8', '9' ] + + script: + - export INTEGER8=${INTEGER8##INTEGER8_}; export INTEGER8=${INTEGER8:-OFF}; + - export BLA_VENDOR=${BLA_VENDOR##BLA_VENDOR_}; export BLA_VENDOR=${BLA_VENDOR:-All} + - cmake -S . -B build-dir -DINTEGER8=${INTEGER8} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBLA_VENDOR=${BLA_VENDOR} + - cmake --build build-dir 2>&1 | tee build.log + - cmake --build build-dir --target install + - (cd build-dir; OMP_NUM_THREADS=1 ctest --output-on-failure) + - cat build.log | grep -- \\[-W | sed 's/.*\[//; s/\]//' | sort | uniq -c | sort -nr + +compilers: + stage: build + image: ${CI_REGISTRY_IMAGE}/${OS}:${OSVERSION} + needs: [] + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_BRANCH =~ /^cmake.*/ + tags: + - haswell + parallel: + matrix: + - OS: [ "intel" ] + OSVERSION: [ "2021" ] + CC: "icc" + FC: "ifort" + BLA_VENDOR: [ "BLA_VENDOR_Intel10_64lp" ] + - OS: [ "intel" ] + OSVERSION: [ "2021", "2022", "2023", "2024", "2025" ] + CC: "icx" + FC: "ifx" + BLA_VENDOR: [ "BLA_VENDOR_Intel10_64lp" ] + - OS: [ 'amd' ] + OSVERSION: [ '5.0' ] + CC: 'clang' + FC: 'flang' + BLA_VENDOR: [ 'BLA_VENDOR_AOCL_mt', 'BLA_VENDOR_AOCL'] + BLIS_ARCH_TYPE: 'generic' + - OS: [ 'nvidia' ] + OSVERSION: [ '21.11', '22.11', '23.11', '24.9', '25.3' ] + CC: 'nvc' + FC: 'nvfortran' + BLA_VENDOR: 'BLA_VENDOR_NVHPC' + script: + - export INTEGER8=${INTEGER8##INTEGER8_}; export INTEGER8=${INTEGER8:-OFF}; + - export BLA_VENDOR=${BLA_VENDOR##BLA_VENDOR_}; export BLA_VENDOR=${BLA_VENDOR:-All} + - cmake -S . -B build-dir -DINTEGER8=${INTEGER8} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBLA_VENDOR=${BLA_VENDOR} + - cmake --build build-dir 2>&1 | tee build.log + - cmake --build build-dir --target install + - (cd build-dir; OMP_NUM_THREADS=1 ctest --output-on-failure) + diff --git a/.gitlab/docker/almalinux-image/Dockerfile.8 b/.gitlab/docker/almalinux-image/Dockerfile.8 new file mode 100644 index 0000000..dbf112c --- /dev/null +++ b/.gitlab/docker/almalinux-image/Dockerfile.8 @@ -0,0 +1,11 @@ +FROM almalinux:8 +RUN dnf update -y ; \ + dnf install -y epel-release;\ + dnf install -y dnf-plugins-core ;\ + dnf config-manager --set-enabled powertools + +RUN dnf install -y bash mock git git-core fedora-packager rpmdevtools gcc ; \ + dnf install -y cmake blas-devel lapack-devel; \ + dnf install -y gcc-gfortran + + diff --git a/.gitlab/docker/almalinux-image/Dockerfile.9 b/.gitlab/docker/almalinux-image/Dockerfile.9 new file mode 100644 index 0000000..9a4203e --- /dev/null +++ b/.gitlab/docker/almalinux-image/Dockerfile.9 @@ -0,0 +1,13 @@ +FROM almalinux:9 +RUN dnf update -y ; \ + dnf install -y epel-release; \ + dnf install -y dnf-plugins-core; \ + dnf config-manager --set-enabled crb ;\ + dnf install -y elrepo-release ;\ + dnf install -y almalinux-release-devel + +RUN dnf install -y bash mock git fedora-packager rpmdevtools gcc; \ + dnf install -y cmake flexiblas-devel ;\ + dnf install -y gcc-gfortran + + diff --git a/.gitlab/docker/almalinux-image/build.sh b/.gitlab/docker/almalinux-image/build.sh new file mode 100644 index 0000000..a9ae3e7 --- /dev/null +++ b/.gitlab/docker/almalinux-image/build.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +export CI_REGISTRY_IMAGE=${CI_REGISTRY_IMAGE:-gitlab.mpi-magdeburg.mpg.de/software/slicot} +export IMAGE_NAME=${IMAGE_NAME:-almalinux} +IMAGE_BASE=${CI_REGISTRY_IMAGE}/${IMAGE_NAME} + + +for i in Dockerfile.* +do + echo $i + v=${i#Dockerfile.} + docker build -f "$i" -t ${IMAGE_BASE}:${v} . + docker push ${IMAGE_BASE}:${v} +done + diff --git a/.gitlab/docker/amd-image/Dockerfile.amd5.0 b/.gitlab/docker/amd-image/Dockerfile.amd5.0 new file mode 100644 index 0000000..c4fcf91 --- /dev/null +++ b/.gitlab/docker/amd-image/Dockerfile.amd5.0 @@ -0,0 +1,43 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/aocc-compiler/noble:5.0.0 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential wget +WORKDIR /root +RUN wget -O amdblis-5.0.tar.gz https://github.com/amd/blis/archive/refs/tags/5.0.tar.gz;\ + tar xvf amdblis-5.0.tar.gz ;\ + cd blis-5.0 ;\ + CC=clang FC=flang ./configure --prefix=/usr --enable-aocl-dynamic --enable-cblas --complex-return=intel -t openmp x86_64 ;\ + make -j $(nproc) ;\ + make install; \ + cd /root; \ + rm -rf amd* blis* +RUN wget -O amdblis-5.0.tar.gz https://github.com/amd/blis/archive/refs/tags/5.0.tar.gz;\ + tar xvf amdblis-5.0.tar.gz ;\ + cd blis-5.0 ;\ + CC=clang FC=flang ./configure --prefix=/usr --enable-cblas --complex-return=intel -t none x86_64 ;\ + make -j $(nproc) ;\ + make install; \ + cd /root; \ + rm -rf amd* blis* + +RUN cd /root; wget -O aocl-utils.tar.gz https://github.com/amd/aocl-utils/archive/refs/tags/5.0.tar.gz ;\ + tar xf aocl-utils.tar.gz ;\ + cd aocl-utils-5.0 ;\ + cmake -S . -B build-dir -DCMAKE_INSTALL_PREFIX=/usr ;\ + cmake --build build-dir;\ + cmake --build build-dir --target=install;\ + cd /root;\ + rm -rf aocl* +RUN cd /root; wget -O amdflame-5.0.tar.gz https://github.com/amd/libflame/archive/refs/tags/5.0.tar.gz ;\ + tar xf amdflame-5.0.tar.gz; \ + cd libflame-5.0; \ + CC=clang FC=flang FLIBS="-lflang" cmake -S . -B build -DLIBAOCLUTILS_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/libaoclutils.so \ + -DLIBAOCLUTILS_INCLUDE_PATH=/usr/include/ -DENABLE_AMD_OPT=ON -D ENABLE_BUILTIN_LAPACK2FLAME=ON -DBUILD_SHARED_LIBS=ON \ + -DMULTITHREADING_MODEL=OPENMP -DENABLE_AMD_AOCC_FLAGS=ON \ + -DENABLE_AOCL_BLAS=OFF -DENABLE_EMBED_AOCLUTILS=ON \ + -DCMAKE_INSTALL_PREFIX=/usr ;\ + cmake --build build -j $(nproc) ;\ + cmake --build build --target install ;\ + cd /root;\ + rm -rf amdflame* libflame* + diff --git a/.gitlab/docker/amd-image/build.sh b/.gitlab/docker/amd-image/build.sh new file mode 100644 index 0000000..8f0f03a --- /dev/null +++ b/.gitlab/docker/amd-image/build.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +export CI_REGISTRY_IMAGE=${CI_REGISTRY_IMAGE:-gitlab.mpi-magdeburg.mpg.de/software/slicot} +export IMAGE_NAME=${IMAGE_NAME:-amd} +IMAGE_BASE=${CI_REGISTRY_IMAGE}/${IMAGE_NAME} + +for i in Dockerfile.* +do + echo $i + v=${i#Dockerfile.amd} + docker build -f "$i" -t ${IMAGE_BASE}:${v} . + docker push ${IMAGE_BASE}:${v} +done + diff --git a/.gitlab/docker/build-all.sh b/.gitlab/docker/build-all.sh new file mode 100644 index 0000000..b67e508 --- /dev/null +++ b/.gitlab/docker/build-all.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +ldir=$(pwd) +for i in * +do + if [ ! -d "$i" ]; then + continue + fi + cd "$i" + sh ./build.sh + cd "$ldir" +done + + diff --git a/.gitlab/docker/fedora-image/Dockerfile.fc40 b/.gitlab/docker/fedora-image/Dockerfile.fc40 new file mode 100644 index 0000000..0d5ad47 --- /dev/null +++ b/.gitlab/docker/fedora-image/Dockerfile.fc40 @@ -0,0 +1,4 @@ +FROM fedora:40 +RUN dnf update -y ; \ + dnf install -y bash mock git fedora-packager rpmdevtools gcc gcc-fortran ; \ + dnf install -y cmake flexiblas-devel git diff --git a/.gitlab/docker/fedora-image/Dockerfile.fc41 b/.gitlab/docker/fedora-image/Dockerfile.fc41 new file mode 100644 index 0000000..8bfc6f5 --- /dev/null +++ b/.gitlab/docker/fedora-image/Dockerfile.fc41 @@ -0,0 +1,5 @@ +FROM fedora:41 +RUN dnf update -y ; \ + dnf install -y bash mock git fedora-packager rpmdevtools gcc gcc-fortran ; \ + dnf install -y cmake flexiblas-devel git + diff --git a/.gitlab/docker/fedora-image/Dockerfile.fc42 b/.gitlab/docker/fedora-image/Dockerfile.fc42 new file mode 100644 index 0000000..42b2b31 --- /dev/null +++ b/.gitlab/docker/fedora-image/Dockerfile.fc42 @@ -0,0 +1,6 @@ +FROM fedora:42 +RUN dnf update -y +RUN dnf upgrade -y +RUN dnf install -y bash mock git fedora-packager rpmdevtools gcc gcc-fortran ; \ + dnf install -y cmake flexiblas-devel git + diff --git a/.gitlab/docker/fedora-image/Dockerfile.fcrawhide b/.gitlab/docker/fedora-image/Dockerfile.fcrawhide new file mode 100644 index 0000000..117847d --- /dev/null +++ b/.gitlab/docker/fedora-image/Dockerfile.fcrawhide @@ -0,0 +1,20 @@ +FROM fedora:rawhide + +RUN dnf install -y bash mock git fedora-packager rpmdevtools gcc gcc-fortran ; \ + dnf install -y cmake flexiblas-devel git + +ENV CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' +ENV CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' +ENV FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' +ENV FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' +ENV VALAFLAGS=-g +ENV RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' +ENV LDFLAGS='-Wl,-z,relro -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' +ENV LT_SYS_LIBRARY_PATH=/usr/lib64: +ENV CC=gcc +ENV CXX=g++ +ENV RPM_ARCH=x86_64 +ENV RPM_PACKAGE_RELEASE="" +ENV RPM_PACKAGE_VERSION="" +ENV RPM_PACKAGE_NAME="" + diff --git a/.gitlab/docker/fedora-image/build.sh b/.gitlab/docker/fedora-image/build.sh new file mode 100644 index 0000000..df24833 --- /dev/null +++ b/.gitlab/docker/fedora-image/build.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +export CI_REGISTRY_IMAGE=${CI_REGISTRY_IMAGE:-gitlab.mpi-magdeburg.mpg.de/software/slicot} +export IMAGE_NAME=${IMAGE_NAME:-fedora} +IMAGE_BASE=${CI_REGISTRY_IMAGE}/${IMAGE_NAME} + + +for i in Dockerfile.* +do + echo $i + v=${i#Dockerfile.fc} + echo "Build $v" + docker build -f "$i" -t ${IMAGE_BASE}:${v} . + docker push ${IMAGE_BASE}:${v} +done + diff --git a/.gitlab/docker/intel-image/Dockerfile.2021 b/.gitlab/docker/intel-image/Dockerfile.2021 new file mode 100644 index 0000000..b44f649 --- /dev/null +++ b/.gitlab/docker/intel-image/Dockerfile.2021 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/intel-compiler/noble:2021 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential + diff --git a/.gitlab/docker/intel-image/Dockerfile.2022 b/.gitlab/docker/intel-image/Dockerfile.2022 new file mode 100644 index 0000000..130bc1d --- /dev/null +++ b/.gitlab/docker/intel-image/Dockerfile.2022 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/intel-compiler/noble:2022 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential + diff --git a/.gitlab/docker/intel-image/Dockerfile.2023 b/.gitlab/docker/intel-image/Dockerfile.2023 new file mode 100644 index 0000000..49b153f --- /dev/null +++ b/.gitlab/docker/intel-image/Dockerfile.2023 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/intel-compiler/noble:2023 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential + diff --git a/.gitlab/docker/intel-image/Dockerfile.2024 b/.gitlab/docker/intel-image/Dockerfile.2024 new file mode 100644 index 0000000..6722aeb --- /dev/null +++ b/.gitlab/docker/intel-image/Dockerfile.2024 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/intel-compiler/noble:2024 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential + diff --git a/.gitlab/docker/intel-image/Dockerfile.2025 b/.gitlab/docker/intel-image/Dockerfile.2025 new file mode 100644 index 0000000..15e8f12 --- /dev/null +++ b/.gitlab/docker/intel-image/Dockerfile.2025 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/intel-compiler/noble:2025 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential + diff --git a/.gitlab/docker/intel-image/build.sh b/.gitlab/docker/intel-image/build.sh new file mode 100644 index 0000000..6e17c72 --- /dev/null +++ b/.gitlab/docker/intel-image/build.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +export CI_REGISTRY_IMAGE=${CI_REGISTRY_IMAGE:-gitlab.mpi-magdeburg.mpg.de/software/slicot} +export IMAGE_NAME=${IMAGE_NAME:-intel} +IMAGE_BASE=${CI_REGISTRY_IMAGE}/${IMAGE_NAME} + + +for i in Dockerfile.* +do + echo $i + v=${i#Dockerfile.} + docker build -f "$i" -t ${IMAGE_BASE}:${v} . + docker push ${IMAGE_BASE}:${v} +done diff --git a/.gitlab/docker/nvidia-image/Dockerfile.21.11 b/.gitlab/docker/nvidia-image/Dockerfile.21.11 new file mode 100644 index 0000000..6bb8788 --- /dev/null +++ b/.gitlab/docker/nvidia-image/Dockerfile.21.11 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/nvidia-compiler/jammy:21.11 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential wget + diff --git a/.gitlab/docker/nvidia-image/Dockerfile.22.11 b/.gitlab/docker/nvidia-image/Dockerfile.22.11 new file mode 100644 index 0000000..31ef2fb --- /dev/null +++ b/.gitlab/docker/nvidia-image/Dockerfile.22.11 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/nvidia-compiler/jammy:22.11 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential wget + diff --git a/.gitlab/docker/nvidia-image/Dockerfile.23.11 b/.gitlab/docker/nvidia-image/Dockerfile.23.11 new file mode 100644 index 0000000..d29fcd0 --- /dev/null +++ b/.gitlab/docker/nvidia-image/Dockerfile.23.11 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/nvidia-compiler/jammy:23.11 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential wget + diff --git a/.gitlab/docker/nvidia-image/Dockerfile.24.9 b/.gitlab/docker/nvidia-image/Dockerfile.24.9 new file mode 100644 index 0000000..1c214cc --- /dev/null +++ b/.gitlab/docker/nvidia-image/Dockerfile.24.9 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/nvidia-compiler/noble:24.9 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential wget + diff --git a/.gitlab/docker/nvidia-image/Dockerfile.25.3 b/.gitlab/docker/nvidia-image/Dockerfile.25.3 new file mode 100644 index 0000000..66d6056 --- /dev/null +++ b/.gitlab/docker/nvidia-image/Dockerfile.25.3 @@ -0,0 +1,5 @@ +FROM gitlab.mpi-magdeburg.mpg.de/ci-images/nvidia-compiler/noble:25.3 +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes git cmake build-essential wget + diff --git a/.gitlab/docker/nvidia-image/build.sh b/.gitlab/docker/nvidia-image/build.sh new file mode 100644 index 0000000..1a04793 --- /dev/null +++ b/.gitlab/docker/nvidia-image/build.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +export CI_REGISTRY_IMAGE=${CI_REGISTRY_IMAGE:-gitlab.mpi-magdeburg.mpg.de/software/slicot} +export IMAGE_NAME=${IMAGE_NAME:-nvidia} +IMAGE_BASE=${CI_REGISTRY_IMAGE}/${IMAGE_NAME} + +for i in Dockerfile.* +do + echo $i + v=${i#Dockerfile.} + docker build -f "$i" -t ${IMAGE_BASE}:${v} . + docker push ${IMAGE_BASE}:${v} +done + diff --git a/.gitlab/docker/ubuntu-image/Dockerfile.focal b/.gitlab/docker/ubuntu-image/Dockerfile.focal new file mode 100644 index 0000000..1bb9e9a --- /dev/null +++ b/.gitlab/docker/ubuntu-image/Dockerfile.focal @@ -0,0 +1,7 @@ +FROM ubuntu:focal +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update ; \ + apt install --yes cmake libopenblas-dev git;\ + apt install --yes build-essential;\ + apt install --yes gfortran + diff --git a/.gitlab/docker/ubuntu-image/Dockerfile.jammy b/.gitlab/docker/ubuntu-image/Dockerfile.jammy new file mode 100644 index 0000000..9bb39fe --- /dev/null +++ b/.gitlab/docker/ubuntu-image/Dockerfile.jammy @@ -0,0 +1,7 @@ +FROM ubuntu:jammy +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update ; \ + apt install --yes cmake libopenblas-dev git;\ + apt install --yes build-essential;\ + apt install --yes gfortran + diff --git a/.gitlab/docker/ubuntu-image/Dockerfile.noble b/.gitlab/docker/ubuntu-image/Dockerfile.noble new file mode 100644 index 0000000..85dd17b --- /dev/null +++ b/.gitlab/docker/ubuntu-image/Dockerfile.noble @@ -0,0 +1,7 @@ +FROM ubuntu:noble +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes cmake libopenblas-dev libopenblas64-dev git;\ + apt install --yes build-essential;\ + apt install --yes gfortran clang flang + diff --git a/.gitlab/docker/ubuntu-image/build.sh b/.gitlab/docker/ubuntu-image/build.sh new file mode 100644 index 0000000..1ebe70a --- /dev/null +++ b/.gitlab/docker/ubuntu-image/build.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +export CI_REGISTRY_IMAGE=${CI_REGISTRY_IMAGE:-gitlab.mpi-magdeburg.mpg.de/software/slicot} +export IMAGE_NAME=${IMAGE_NAME:-ubuntu} +IMAGE_BASE=${CI_REGISTRY_IMAGE}/${IMAGE_NAME} + + +for i in Dockerfile.* +do + echo $i + v=${i#Dockerfile.} + docker build -f "$i" -t ${IMAGE_BASE}:${v} . + docker push ${IMAGE_BASE}:${v} +done + diff --git a/CMakeLists.txt b/CMakeLists.txt index 17f9ff9..977a50d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,8 +66,9 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) endif() # Select the Proper Build Type. -IF ( DEBUG STREQUAL ON OR CMAKE_BUILD_TYPE STREQUAL "Debug" ) +IF ( SLICOT_DEBUG STREQUAL ON OR CMAKE_BUILD_TYPE STREQUAL "Debug" ) SET (CMAKE_BUILD_TYPE "Debug") + SET (SLICOT_DEBUG ON) ADD_DEFINITIONS(-DDEBUG) ENDIF() @@ -116,13 +117,13 @@ MESSAGE(STATUS "Found LAPACK Library: ${BLA_VENDOR} (${LAPACK_LIBRARIES})") # Compatability with CMAKE < 3.18 if(NOT TARGET BLAS::BLAS) add_library(BLAS::BLAS IMPORTED INTERFACE) - set_property(BLAS::BLAS PROPERTY INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES}) - set_property(BLAS::BLAS PROPERTY INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS}) + set_property(TARGET BLAS::BLAS PROPERTY INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES}) + set_property(TARGET BLAS::BLAS PROPERTY INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS}) endif() if(NOT TARGET LAPACK::LAPACK) add_library(LAPACK::LAPACK IMPORTED INTERFACE) - set_property(LAPACK::LAPACK PROPERTY INTERFACE_LINK_LIBRARIES ${LAPACK_LIBRARIES}) - set_property(LAPACK::LAPACK PROPERTY INTERFACE_LINK_OPTIONS ${LAPACK_LINKER_FLAGS}) + set_property(TARGET LAPACK::LAPACK PROPERTY INTERFACE_LINK_LIBRARIES ${LAPACK_LIBRARIES}) + set_property(TARGET LAPACK::LAPACK PROPERTY INTERFACE_LINK_OPTIONS ${LAPACK_LINKER_FLAGS}) endif() ADD_SUBDIRECTORY(src) diff --git a/Contributors.md b/Contributors.md index 0534f03..8b8147a 100644 --- a/Contributors.md +++ b/Contributors.md @@ -1,7 +1,85 @@ -Contributors and financial support +Contributors +============ -The development of the SLICOT Library (Subroutine Library In COntrol Theory) owe much to many people. We especially thank all those who have contributed routines to the Library, including E. Barth, Th. Beelen, P. Benner, C. Benson, R. Byers, R. Dekeyser, F. Delebecque, M. Denham, F. Dumortier, A. Emami-Naeini, Da-Wei Gu, A. Geurts, S. Hammarling, G. van den Hurk, B. Kågström, C. Kliman, M. Konstantinov, D. Kressner, A. Laub, A. Markovsky, C. Paige, Th. Penzl, P. Petkov, E. S. Quintana-Orti, G. Quintana-Orti, P.A. Regalia, A. Riedel, R. Schneider, V. Sima, D.M. Sima, S. Steer, F. Svaricek, M. Vanbegin, P. Van Dooren, S. Van Huffel, A. Varga, M. Verhaegen, M. Voigt, L. Westin, H. Willemsen, T. Williams, and H. Xu. +Current Maintainers +------------------- +After the release of SLICOT 5.9.0 the maintainance of SLICOT was handed over to -The precursor of SLICOT was the version derived in the early eighties by the integration of SLICE and SYCOT, as a result of a cooperation between the Numerical Algorithms Group (NAG) from Oxford (UK) and Working Group on Software (WGS) - a Benelux cooperation. This SLICOT version, commercialized by NAG, had two releases, in 1991 and 1993. Later, WGS, NAG, and German Aerospace Center (DLR) in Oberpfaffenhofen, Germany, decided to make SLICOT freely available, and the first public release (Release 3) of SLICOT in 1997 was based entirely on the freeware BLAS and LAPACK subroutines. +* Martin Köhler (@grisuthedragon), MPI Magdeburg +* Jens Saak (@drittelhacker), MPI Magdeburg -SLICOT was developed and maintained by NICONET (Numerics In COntrol NETwork), then later by Niconet e.V. The initial work for library conversion to a public version and further extension was supported by the European Community BRITE-EURAM III Thematic Networks Programme NICONET (project BRRT–CT97-5040, 1997-2002). Further developments were mainly supported by several grants of the German Science Foundation (2004-2009), and by The MathWorks (starting with 2008). All this support is highly acknowledged. +Contributors since Version 5.9.0 +-------------------------------- + + +Contributors until Version 5.9.0 +-------------------------------- + +The development of the SLICOT Library (Subroutine Library In COntrol Theory) +owe much to many people. We especially thank all those who have contributed +routines to the Library, including + + * E. Barth, + * Th. Beelen + * P. Benner + * C. Benson + * R. Byers + * R. Dekeyser + * F. Delebecque + * M. Denham + * F. Dumortier + * A. Emami-Naeini + * Da-Wei Gu + * A. Geurts + * S. Hammarling + * G. van den Hurk + * B. Kågström + * C. Kliman + * M. Konstantinov + * D. Kressner + * A. Laub + * A. Markovsky + * C. Paige + * Th. Penzl + * P. Petkov + * E. S. Quintana-Orti + * G. Quintana-Orti + * P.A. Regalia + * A. Riedel + * R. Schneider + * V. Sima + * D.M. Sima + * S. Steer + * F. Svaricek + * M. Vanbegin + * P. Van Dooren + * S. Van Huffel + * A. Varga + * M. Verhaegen + * M. Voigt + * L. Westin + * H. Willemsen + * T. Williams + * H. Xu. + +The precursor of SLICOT was the version derived in the early eighties by the +integration of SLICE and SYCOT, as a result of a cooperation between the +Numerical Algorithms Group (NAG) from Oxford (UK) and Working Group on Software +(WGS) - a Benelux cooperation. This SLICOT version, commercialized by NAG, had +two releases, in 1991 and 1993. Later, WGS, NAG, and German Aerospace Center +(DLR) in Oberpfaffenhofen, Germany, decided to make SLICOT freely available, +and the first public release (Release 3) of SLICOT in 1997 was based entirely +on the freeware BLAS and LAPACK subroutines. + +Financial Support +----------------- + +SLICOT was developed and maintained by NICONET (Numerics In COntrol NETwork), +then later by Niconet e.V. The initial work for library conversion to a public +version and further extension was supported by the European Community +BRITE-EURAM III Thematic Networks Programme NICONET (project BRRT–CT97-5040, +1997-2002). Further developments were mainly supported by several grants of +the German Science Foundation (2004-2009), and by The MathWorks (starting with +2008). + +All this support is highly acknowledged. diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000..631b3e5 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,93 @@ +SLICOT Software Installation +============================ + +This file describes how to install and update the **SLICOT** Library, and how to run the example programs. + +Requirements +------------ + +In order to build SLICOT you need: + + * a F77 compatible Fortran compiler + * cmake, at least 3.15 or 3.22 for the ILP64 build + * a BLAS/LIBRARY + +The following compilers are tested + + * gcc/gfortran + * clang/flang + * Intel Classic icc/ifort + * Intel LLVM icx/ifx + * Nvidia HPC SDK >= 21.11 + * AMD AOCC 5.0 with AMDBLIS and AMDLIBFLAME + +We support Linux, xBSD, MacOSX (Intel and ARM), Windows with MSYS2. + +For performance reasons, we suggest to use an optimized BLAS implementation +like + + * OpenBLAS, https://www.openblas.net + * BLIS, https://github.com/flame/blis + * Intel oneAPI MKL, https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl.html + * FlexiBLAS, https://www.mpi-magdeburg.mpg.de/projects/flexiblas + +Installation +------------ +SLICOT requires an *out-of-source* build process. That means, the source code +direcotry stays untouched during the build. + +The in order to configure and compile the source, use `cmake`: +```shell +cmake -S . -B build-dir +cmake --build build-dir +``` +after building, SLICOT can be installed via +```shell +cmake --build build-dir --target install +``` + +The test suite is executed using +```shell +ctest --test-dir build-dir +``` + +The following options to cmake are availble: + +| Option | Possible Values | Default Value | Description | +|:-------|:----------------|:--------------|-------------| +|`CMAKE_INSTALL_PREFIX` | valid path | `/usr/local` | Installation path | +|`CMAKE_BUILD_TYPE` | `Debug`, `Release`, `MinSizeRel`, `RelWithDebInfo`, `Coverage` | `Release` | Specify the build type | +|`BUILD_SHARED_LIBS` | `ON`, `OFF` | `OFF` | Build SLICOT as shared library | +|`SLICOT_TESTING` | `ON`, `OFF` | `ON` | Build the examples and the test suite | +|`SLICOT_DEBUG` | `ON`, `OFF` | `OFF` | Enable the debug build, equivalent to `CMAKE_BUILD_TYPE=Debug`| +|`SLICOT_INTEGER8` | `ON`, `OFF` | `OFF` | Enable the ILP64 integer model, i.e. the Fortran `INTEGER` defaults to a 64-bit integer, requires cmake >= 3.22| +|`BLA_VENDOR` | BLAS Vendor Name | empty | Specify the BLAS library to search for, see https://cmake.org/cmake/help/latest/module/FindBLAS.html for details | + +The options are passed as `-DOPTION=VALUE` to cmake. + +Windows +------- + +Regarding Microsoft Windows, we only support the MSYS2 environment at the +moment. In order to build SLICOT, the following packages need to be installed in +advance: + + * cmake + * ninja + * lapack + +Either install the corresponding version package, depending on your compiler, +yourself or use the `pacboy` package from the `pactoys`: + +```shell +pacboy sync gcc-fortran cmake ninja lapack +``` + +The remaining build process works as described above. + + +Issues +------ +A list of known issues can be found in [KNOWN_ISSUSES.md](./KNOWN_ISSUES.md) + + diff --git a/Installation.md b/Installation.md deleted file mode 100644 index b81a5fc..0000000 --- a/Installation.md +++ /dev/null @@ -1,31 +0,0 @@ -# SLICOT Software Installation and Updating - -This file describes how to install and update the **SLICOT** Library, and how to run the example programs. - -The essential source code and documentation for the **SLICOT** software is stored in the **SLICOT** Library root directory, **`slicot`**, and its subdirectories (**`benchmark_data`**, **`doc`**, **`examples`**, **`src`** and **`src_aux`**). - -The object and/or executable files can be built using the information given in this file. **SLICOT** routines make calls to subprograms from the state-of-the-art packages **LAPACK** (Linear Algebra Package) and **BLAS** (Basic Linear Algebra Subprograms). Fortran source code and prebuilt, Fortran-based **LAPACK** and **BLAS** libraries are freely downloadable from https://netlib.org. However, for maximum efficiency it is recommended to use machine-specific, optimized versions whenever possible. - -Template make files are provided to help building the **SLICOT** Library object file, and to link and run the available example programs calling the **SLICOT** Library routines. In order to use these make files on a specific Unix-like or Windows platform, some changes might be needed in the files **`make*.inc`** and **`makefile*`** stored in the **SLICOT** (sub-)directories, **`slicot`**, **`examples`**, **`src`** and **`src_aux`**. The file named **`make.inc`** and the files **`makefile`** have been used on Windows platforms with Intel Fortran compilers. The files named **`make_Unix.inc`** and **`makefile_Unix`** are templates for Unix-like machines, including Linux, with gfortran compiler. Denote by <**slicotroot**> the path to the **`slicot`** directory, which can be, e.g., **`c:\slicot`**, on Windows platforms. (The last (sub)directory name in <**slicotroot**> is **`slicot`**.) - -The changes in **`make*.inc`** might define the specific machine (platform) identifier, the compiler, linker, and archiver flags, and the location and names of the **LAPACK** and **BLAS** libraries, which the program files should be linked to. Some details are given in the **`make*.inc`** files. - -After performing the necessary changes, as suggested in the comments of the make files, the other needed **SLICOT**-related files can be generated automatically with the command - -**`make`** (or **`nmake`**, for Windows platforms) - -issued from the directory **`slicot`** of <**slicotroot**>. - -The first execution of **`(n)make`** will create the following files - - - the **SLICOT** Library object files **`*.o`** (for Unix machines), or **`*.obj`** (for Windows machines), in the subdirectories **`src`** and **`src_aux`** of **`slicot`**; - - the library files **`slicot.a`** and **`lpkaux.a`**, or **`slicot.lib`** and **`lpkaux.lib`**, respectively, in the directory **`slicot`**; the libraries **`lpkaux.a`** or **`lpkaux.lib`** contain the object files for two **LAPACK** deprecated subroutines, **`dlatzm.f`** and **`zlatzm.f`**, which are called by few **SLICOT** routines. - - the example programs object and executable files, in the subdirectory **`examples`**; - - the files **`*.exa`**, with the results computed on the local machine, with the same name as for the files with data (**`*.dat`**) and reference results (**`*.res`**), also in the subdirectory **`examples`**. - -The subsequent executions of **`(n)make`** will update the files if changes have been performed (assuming that the object and executable files have been preserved on their subdirectories). - -The files **`*.exa`**, with the computed results may be compared with the reference results. Several types of differences could be noticed, including possible sign changes for some elements, or even different values in some columns and/or rows of the computed matrices. For instance, the matrices of similarity or equivalence transformations could differ from a platform/compiler to another. This does not usually mean that the computed results are wrong. - -More details for executing other tasks, e.g., cleaning the subdirectories **`src`** and **`examples`**, are given in the files **`makefile* included in directory **`slicot`** and in the subdirectories **`src`** and **`examples`**. - diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md index 6586c3b..26b36fe 100644 --- a/KNOWN_ISSUES.md +++ b/KNOWN_ISSUES.md @@ -35,3 +35,10 @@ InstalledDir: C:/msys64/clang64/bin The bug is known to LLVM community: https://github.com/llvm/llvm-project/issues/69952 +Does not work with IBM ESSL +--------------------------- +On the ppc64le platform, IBM provides the ESSL library for BLAS and LAPACK, but +not all LAPACK symbols are exported by this library and thus SLICOT will not +link against it. The typical workaround would be to used ESSL only as BLAS and +combine it with the NETLIB LAPACK. + diff --git a/LICENSE b/LICENSE index 593987a..092643f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,4 @@ -BSD 3-Clause License - -Copyright (c) 2020, SLICOT +Copyright (c) 1996-2025, The SLICOT Team All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index 1585ebf..79dcf1b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -# SLICOT Library +SLICOT Library +============== + +Version: 5.9.1 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.6463090.svg)](https://doi.org/10.5281/zenodo.6463090) [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://github.com/SLICOT/SLICOT-Reference/blob/main/LICENSE) @@ -30,22 +33,32 @@ following chapters are currently included: - **T**: Transformation Routines - **U**: Utility Routines -The SLICOT Library Root Directory contains few, basic files for the SLICOT -Library distribution and generation. When distributed, SLICOT software comes -with several filled-in subdirectories (`benchmark_data`, `doc`, `examples`, -and `src`), and the following files in this root directory: - -- this file, `README.md`, -- the install instructions, `INSTALL.md` -- the contributors to the library and financial support, `Contributors.md`, -- the license file, `LICENSE`, and -- the main SLICOT Library documentation index, `libindex.html`. - The SLICOT Library is built on LAPACK (Linear Algebra PACKage) and BLAS (Basic Linear Algebra Subprograms) collections. Therefore, these packages should be available on the platform used. -**Basic References:** +License +------- +SLICOT is licensed under the [BSD-3 clause license](./LICENSE). + +Installation +------------ +See [INSTALL.md](./INSTALL.md) + +Release Notes +------------- +See [ReleaseNotes.md](./ReleaseNotes.md) + +Contributors and Financial Support +---------------------------------- +See [Contributors.md](./Contributors.md) + +Documentation +------------- +The documentation is provided as HTML documentation in `libindex.html`. + +Basic References: +----------------- 1. P. Benner, V. Mehrmann, V. Sima, S. Van Huffel, and A. Varga, "SLICOT - A Subroutine Library in Systems and Control Theory", Applied and Computational Control, Signals, and Circuits (Birkhauser), Vol. 1, Ch. 10, pp. 505-546, 1999. diff --git a/ReleaseNotes.md b/ReleaseNotes.md index a096e83..783970d 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,6 +1,26 @@ # SLICOT Library Release Notes -## Version v5.9 +## Version v5.9.1 + +Version 5.9.1 is the first version maintained by M. Köhler and J. Saak. It does +not add any new routines to SLICOT. + +### Improvements + +* The build system now uses CMAKE. The old makefile based system works in parallel +but will be removed in the future with the next minor release. +* CI Runs on Github and Gitlab - See Github #2 + +### Bugfixes + +* Fix: implicit variables are now declared +* Fix: stack overflow in the test suite on Windows +* Fix: Missing LSAME declaration in TMB03LD.f - See Github PR #14 +* Fix: Invalid work space computation in IB01AD - See Github PR #18 +* Fix: Include deprecated LAPACK routines - See Github #24 and #10 + + +## Version v5.9 Version v5.9 of the **SLICOT** Library includes 11 new routines and 9 updated routines, in comparison to Version v5.8 of the library. @@ -8,10 +28,10 @@ Version v5.9 of the **SLICOT** Library includes 11 new routines and 9 updated ro **`AB13HD:`** Computes the L_infinity-norm of a standard or descriptor system using structure-preserving eigenvalue computations. -**`MA01DD:`** Computes an approximate symmetric chordal metric, - +**`MA01DD:`** Computes an approximate symmetric chordal metric, + d = min{ |a - b|, |1/a - 1/b| } - + for two complex numbers `a` and `b`, given by real and imaginary parts. **`MA01DZ:`** Computes an approximate symmetric chordal metric `d` for two, possibly infinite, complex numbers `a` and `b`, given by fractions with non-negative denominators. @@ -44,9 +64,9 @@ using Level 1 and Level 2 BLAS, but aborts the calculations when the absolute va **`AB13ID:`** Placed the lines defining the external subroutines after the lines defining the external functions, to agree to the **SLICOT** standard. Replaced `TOLDEF` by `ZERO` in the `MB03OD` call with `LDWORK = -1`. Changed the tests for checking if the estimated rank might be incorrect. The test for setting the value 1 to `IWARN` has been modified for better significance and `IWARN` parameter description has been updated. The submatrix `R22` has also been set to zero. Used a safeguard against the huge workspace size returned by some implementations of the LAPACK routine `ZGESVD`. Made several cosmetical changes. **`MA02JD:`** Placed the lines defining the external subroutines after the lines defining the external functions, to agree to the **SLICOT** standard. - + **`MA02JZ:`** Placed the lines defining the external subroutines after the lines defining the external functions, to agree to the **SLICOT** standard. - + **`MB02SZ:`** Replaced the references to the `DCABS1` routine, which is not available in some `BLAS` implementations, to equivalent references to a locally defined statement functions. **`MB4DLZ:`** Replaced the references to the `DCABS1` routine, which is not available in some `BLAS` implementations, to equivalent references to a locally defined statement functions. @@ -59,7 +79,7 @@ using Level 1 and Level 2 BLAS, but aborts the calculations when the absolute va **Updated makefile** -The files **`makefile`** and **`makefile_Unix`** in the **`src`** sub-directory have been updated to include the new routines. +The files **`makefile`** and **`makefile_Unix`** in the **`src`** sub-directory have been updated to include the new routines. **New and Updated Documentation Files** @@ -72,7 +92,7 @@ Documentation files have been included for the new routines, and the existing do **`MB01PD:`** Removed `SAVE` statement and variable `FIRST` to get a thread safe version. **`MB03VY:`** Set `A( ILO, ILO, J )` to 1 if `IHI = ILO` in the loop labelled 20. - + **`MB04BD`**: Changed some part of finding the number of infinite eigenvalues (replaced `DE(1,2)` by `DE(1,3)` in the line 495, and replaced `NINF = MAX( I, J )` by `NINF = MAX( I, J )/2` in the line 513). **`MB04BP`**: Changed some part of finding the number of infinite eigenvalues (replaced `DE(1,2)` by `DE(1,3)` in the line 509, and replaced `NINF = MAX( I, J )` by `NINF = MAX( I, J )/2` in the line 527). Called **`MB04BD`** internally, if on entry `INFO = 0` or if `INFO < 0` and `M` is sufficiently small (`M <= NX`, with parameter `NX` set to 250). Updated the documentation file, **`MB04BP.html`**. @@ -89,7 +109,7 @@ Added **`make_Unix.inc`** in **`slicot`** directory and **`makefile_Unix`** in * Added the file **`Installation.txt`** in the **`slicot`** directory. -## Version v5.8 +## Version v5.8 Version v5.8 of the **SLICOT** Library includes 18 new routines and 14 routines with more or few changes in the operational part of the source code, in comparison to Version v5.7 of the library. Moreover, the (comment) lines referring to the version number have been removed in all routines, example programs, and documentation files. @@ -102,9 +122,9 @@ Version v5.8 of the **SLICOT** Library includes 18 new routines and 14 routines **`MB01UZ:`** Computes one of the matrix products `T := alpha*op(T)*A`, or `T := alpha*A*op(T)`, where `alpha` is a scalar, `A` is an `M-by-N` complex matrix, `T` is a complex triangular matrix, and `op(T)` is `T`, or `T'` (the transpose of `T`), or `conj(T')` (the conjugate transpose of `T`). A block-row/column algorithm is used, if possible. The result overwrites the array `T`. **`MB03RW:`** Solves the Sylvester equation `-A*X + X*B = C`, where `A` and `B` are complex `M-by-M` and `N-by-N` matrices, respectively, in Schur form. This routine is intended to be called only by **SLICOT** Library routine `MB03RZ`. For efficiency purposes, the computations are aborted when the absolute value of an element of `X` is greater than a given value `PMAX`. - + **`MB03RZ:`** Reduces an upper triangular complex matrix `A` (Schur form) to a block-diagonal form using well-conditioned non-unitary similarity transformations. The condition numbers of the transformations used for reduction are roughly bounded by `PMAX`, where `PMAX` is a given value. The transformations are optionally postmultiplied in a given matrix `X`. The Schur form is optionally ordered, so that clustered eigenvalues are grouped in the same block. - + **`MB03VW:`** Reduces the general product `A(:,:,1)^S(1) * A(:,:,2)^S(2) * ... * A(:,:,K)^S(K)` to upper Hessenberg-triangular form, where `A` is `N-by-N-by-K` and `S` is the signature array with values 1 or -1 (as exponents). The `H`-th matrix of `A` is reduced to upper Hessenberg form while the other matrices are triangularized. Optionally, all or part of the transformation matrices are accumulated or updated. **`SB03OS:`** Solves for `X = op(U)^H * op(U)` either the stable non-negative definite continuous-time Lyapunov equation @@ -137,36 +157,36 @@ Version v5.8 of the **SLICOT** Library includes 18 new routines and 14 routines H H 2 H A * X * A - E * X * E = - SCALE * B * B, - - or the conjugate transposed equation + + or the conjugate transposed equation H H 2 H A * X * A - E * X * E = - SCALE * B * B , - + respectively, where `A`, `E`, `B`, and `U` are complex `N-by-N` matrices, and `SCALE` is an output scale factor, set less than or equal to 1 to avoid overflow in `X`. The Cholesky factor `U` of the solution is computed without first finding `X`. The pencil `A - lambda * E` must be in complex generalized Schur form (`A` and `E` are upper triangular and the diagonal elements of `E` are non-negative real numbers). Moreover, it must be `d`-stable, i.e., the moduli of its eigenvalues must be less than one. `B` must be an upper triangular matrix with real non-negative entries on its main diagonal. The resulting matrix `U` is upper triangular. The entries on its main diagonal are non-negative. - + **`SG03BT:`** Computes the Cholesky factor `U` of the matrix `X`, `X = op(U)^H * op(U)`, which is the solution of the generalized `c`-stable continuous-time Lyapunov equation H H 2 H A * X * E + E * X * A = - SCALE * B * B, - + or the conjugate transposed equation H H 2 H A * X * E + E * X * A = - SCALE * B * B , - + respectively, where `A`, `E`, `B`, and `U` are complex `N-by-N` matrices, and `SCALE` is an output scale factor, set less than or equal to 1 to avoid overflow in `X`. The Cholesky factor `U` of the solution is computed without first finding `X`. The pencil `A - lambda * E` must be in complex generalized Schur form (`A` and `E` are upper triangular and the diagonal elements of `E` are non-negative real numbers). Moreover, it must be `c`-stable, i.e., its eigenvalues must have negative real parts. `B` must be an upper triangular matrix with real non-negative entries on its main diagonal. The resulting matrix `U` is upper triangular. The entries on its main diagonal are non-negative. - + **`SG03BZ:`** Computes the Cholesky factor `U` of the matrix `X`, `op(U)^H * op(U)`, which is the solution of either the generalized `c`-stable continuous-time Lyapunov equation H H 2 H op(A) * X * op(E) + op(E) * X * op(A) = - SCALE * op(B) * op(B), - + or the generalized `d`-stable discrete-time Lyapunov equation - + H H 2 H op(A) * X * op(A) - op(E) * X * op(E) = - SCALE * op(B) * op(B), - + without first finding `X` and without the need to form the matrix `op(B)^H * op(B)`. `op(K)` is either `K` or `K^H` for `K = A`, `B`, `E`, `U`. `A` and `E` are `N-by-N` matrices, `op(B)` is an `M-by-N` matrix. The resulting matrix `U` is an `N-by-N` upper triangular matrix with non-negative entries on its main diagonal. `SCALE` is an output scale factor set to avoid overflow in `U`. **`TG01KD, TG01KZ:`** Compute for a single-input single-output descriptor system, `(A, E, B, C)`, with `E` upper triangular, a transformed system, `(Q'*A*Z, Q'*E*Z, Q'*B, C*Z)`, via an orthogonal/unitary equivalence transformation, so that `Q'*B` has only the first element nonzero and `Q'*E*Z` remains upper triangular. `TG01KZ` is the complex version. @@ -184,11 +204,11 @@ Version v5.8 of the **SLICOT** Library includes 18 new routines and 14 routines **`MB03RD:`** Replaced `PMAX*PMAX` by `PMAX` in the comments; the `PMAX` value agrees to the condition number for the optimally scaled transformations used. **`MB04BD:`** Made a correction (in comments) of the indices of the `1-by-1` or `2-by-2` quadruple diagonal blocks stored in `DWORK`. Increased `I2X2` by `1` if a `2x2` quadruple of diagonal blocks is found to have real eigenvalues (in order to check them externally). These are stored as `2x2` quadruple blocks in DWORK in that case. Made two corrections of the pointers to the locations in `DWORK` storing the quadruples with unreliable eigenvalues. - + **`SB03OD:`** Many changes have been made to improve the routine, the main ones being summarized below: - Added code segments to control overflow. In essence, two scaling strategies are included. One strategy scales `A` and `B` if the maximum absolute value of their elements are outside a range `[SMLNUM,BIGNUM]`, where `SMLNUM = sqrt( SAFMIN )/EPS`, `BIGNUM = 1/SMLNUM`, `SAFMIN` is the safe minimum, and `EPS` is the machine accuracy. The second strategy, invoked for continuous-time equations, scales `A` and `B` if the maximum absolute values of `A` and `B` differ too much, or their minimum (maximum) is too large (small, respectively); specifically, this scaling is performed if `MN < MX*SMLNUM`, or `MX < SMLNUM`, or `MN > BIGNUM`, where `MN` and `MX` are the minimum and maximum, respectively, of the maximum absolute values of `A` and `B`. Both strategies are effective and ensure the same accuracy of the results, but the second strategy reduces the number of instances when the output scaling factor, `SCALE`, is strictly smaller than `1`. Scaling of `B` is done before computing its initial `QR` or `RQ` factorization if the maximum absolute value of its elements is greater than `1/SAFMIN`; otherwise, it is done after `QR/RQ` factorization. The implementation checks out first the conditions for the second scaling strategy. - The auxiliary routine `SB03OU` is no longer called, and all its computations, and additional ones, are performed by `SB03OD`. Two `QR` or `RQ` factorizations for `B` and `R*Q` or `Q'*R`, respectively (where `R` is the triangular factor of the first factorization) are done only if `M > 7*N/6`; otherwise, a single `QR` or `RQ` factorization is used. - - The new routine `MB01UY` is called by `SB03OD` to compute the product `R*Q` or `Q*R`, overwriting the array containing `R`; as large block-row or block-column operations as possible (depending on the workspace length) are used. + - The new routine `MB01UY` is called by `SB03OD` to compute the product `R*Q` or `Q*R`, overwriting the array containing `R`; as large block-row or block-column operations as possible (depending on the workspace length) are used. - More BLAS 3 `DGEMM` operations are used when updating the given `B` as `B*Q` or `Q'*B`, using again as large block-row or block-column as possible. The previous version used BLAS 2 `DGEMV` calls if the workspace length was smaller than `N*M`. - The eigenvalues of `A` are computed even if `A` is given in the real Schur form, by calling the LAPACK routine `DLANV2`. This way, the stability of `A` can be checked out also for the option `FACT = 'F'`. - The case when `Q` is an identity matrix is detected, to avoid its use in multiplications. @@ -201,7 +221,7 @@ Version v5.8 of the **SLICOT** Library includes 18 new routines and 14 routines **`SB03OY:`** Replaced the definition of `SMIN` in the lines 211-212 by `SMLNUM`. The former definition set `SMIN` to a too large value for equations with elements of big magnitude, and the results were bad. **`SG03BD:`** Many changes have been made to improve the routine, the main ones being summarized below: - - Added code segments to control overflow. In essence, two scaling strategies are included. One strategy scales `A`, `E`, and `B` if the maximum absolute value of their elements are outside a range `[SMLNUM,BIGNUM]`, where `SMLNUM = sqrt( SAFMIN )/EPS`, `BIGNUM = 1/SMLNUM`, `SAFMIN` is the safe minimum, and `EPS` is the machine accuracy. The second strategy scales `A`, `E`, and `B` if the maximum absolute values of `A`, `E`, and `B` differ too much, or if their minimum (maximum) is too large (small, respectively); specifically, this scaling is performed if `MN < MX*SMLNUM`, or `MX < SMLNUM`, or `MN > BIGNUM`, where `MN` and `MX` are the minimum and maximum, respectively, of the maximum absolute values of `A`, `E`, and `B`. Both strategies are effective and ensure the same accuracy of the results, but the second strategy reduces the number of instances when the output scaling factor, `SCALE`, is strictly smaller than `1`. Scaling of `B` is done before computing its initial `QR` or `RQ` factorization if the maximum absolute value of its elements is greater than `1/SAFMIN`; otherwise, it is done after `QR/RQ` factorization. The implementation checks out first the conditions for the second scaling strategy. The scaling factors of `E` may be set equal to those for `A`, to preserve stability in the discrete-time case. + - Added code segments to control overflow. In essence, two scaling strategies are included. One strategy scales `A`, `E`, and `B` if the maximum absolute value of their elements are outside a range `[SMLNUM,BIGNUM]`, where `SMLNUM = sqrt( SAFMIN )/EPS`, `BIGNUM = 1/SMLNUM`, `SAFMIN` is the safe minimum, and `EPS` is the machine accuracy. The second strategy scales `A`, `E`, and `B` if the maximum absolute values of `A`, `E`, and `B` differ too much, or if their minimum (maximum) is too large (small, respectively); specifically, this scaling is performed if `MN < MX*SMLNUM`, or `MX < SMLNUM`, or `MN > BIGNUM`, where `MN` and `MX` are the minimum and maximum, respectively, of the maximum absolute values of `A`, `E`, and `B`. Both strategies are effective and ensure the same accuracy of the results, but the second strategy reduces the number of instances when the output scaling factor, `SCALE`, is strictly smaller than `1`. Scaling of `B` is done before computing its initial `QR` or `RQ` factorization if the maximum absolute value of its elements is greater than `1/SAFMIN`; otherwise, it is done after `QR/RQ` factorization. The implementation checks out first the conditions for the second scaling strategy. The scaling factors of `E` may be set equal to those for `A`, to preserve stability in the discrete-time case. - Modified the sequences for the transformation of the right hand side, to use BLAS 3 `DGEMM` calls (possibly in a loop, if workspace is not large enough). - Used the new routine, `MB01UY`, for transforming the solution back by block-row or block-column operations. The result overwrites the array storing the upper triangular part of the reduced equation solution. - The call of `DGGES` in the sequence to find the optimal workspace is omitted if `A` and `E` are given in generalized Schur form. @@ -212,8 +232,8 @@ Version v5.8 of the **SLICOT** Library includes 18 new routines and 14 routines **`SG03BV:`** Safer computation of the 1-by-1 diagonal blocks of the solution, to avoid overflows for badly scaled equations. Replaced loops of `DSCAL` calls by calls to the LAPACK routine `DLASCL`. Replaced the calls to BLAS 1 routine `DROTG` by calls to the safer LAPACK routine `DLARTG`. -**`SG03BW:`** Replaced the calls to the **SLICOT** routines `MB02UV` and `MB02UU` by calls to the equivalent LAPACK routines `DGETC2` and `DGESC2`, respectively. Replaced loops of `DSCAL` calls by calls to the LAPACK routine `DLASCL`. Replaced some loops of assignment statements by calls to `DCOPY`. - +**`SG03BW:`** Replaced the calls to the **SLICOT** routines `MB02UV` and `MB02UU` by calls to the equivalent LAPACK routines `DGETC2` and `DGESC2`, respectively. Replaced loops of `DSCAL` calls by calls to the LAPACK routine `DLASCL`. Replaced some loops of assignment statements by calls to `DCOPY`. + **`SG03BX:`** The code has practically been rewritten. Although the source code of the new version is somewhat longer than of the previous version, the object code was reduced to about a half of the initial one. - Replaced all `2-by-2` local arrays by the needed scalars, and replaced the calls to the BLAS routines `DGEMM` and `DGEMV` involving these arrays by the necessary scalar operations, made in a compact manner. In particular, all rotations are applied directly, updating only the needed elements. When possible, two rotations are applied at once (from the left and right). Also, only the necessary elements of the matrices M1 and M2 of the reduced equations are now computed. - Replaced the calls to the **SLICOT** routine `SG03BY` by calls to the new, safer routine `SG03BR`. @@ -221,12 +241,12 @@ Version v5.8 of the **SLICOT** Library includes 18 new routines and 14 routines - Safer computation of the `1-by-1` diagonal blocks of the solution, to avoid overflows for badly scaled equations. - Used simpler formulas and computations when numerically appropriate, but more sophisticated ones are invoked when needed. - When `E(1,1)` is not very small for discrete-time equation, an alternative approach is employed for computing the trailing diagonal element of the solution; this approach factors a rank-one Hermitian matrix by solving a special symmetric eigenvalue problem. The eigenvector corresponding to eigenvalue `1` is quickly found. - + **`TB01MD, TB01ND:`** Moved the sequence for initializing `U` before the Quick Return section, to set `U` to identity also for the case `M = 0` or `P = 0`, respectively. **`TB01ND:`** Added the condition `P <= N`, since the observer Hessenberg form is not defined for `P > N`. -## Version v5.7 +## Version v5.7 -This is the first version uploaded to GitHub under a BSD-3-Clause license. +This is the first version uploaded to GitHub under a BSD-3-Clause license. diff --git a/cmake/FortranCompilerSettings.cmake b/cmake/FortranCompilerSettings.cmake index 77d2c82..68937ae 100644 --- a/cmake/FortranCompilerSettings.cmake +++ b/cmake/FortranCompilerSettings.cmake @@ -31,6 +31,13 @@ FUNCTION(ADD_FORTRAN_COMPILER_FLAG VAR FLAGNAME) SET(FORTRAN_${VAR}_${FLAGNAME}_WORK ${_WORKS} CACHE INTERNAL "Fortran Compiler supports ${FLAGNAME}") IF ( _WORKS) + IF ("${VAR}" MATCHES "_RELEASE$") + SET(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "${CMAKE_Fortran_FLAGS_RELWITHDEBINFO} ${FLAGNAME}" CACHE INTERNAL "" ) + ENDIF () + IF ("${VAR}" MATCHES "_DEBUG$" AND NOT "${FLAGNAME}" MATCHES "^-O[0-9s]") + SET(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "${CMAKE_Fortran_FLAGS_RELWITHDEBINFO} ${FLAGNAME}" CACHE INTERNAL "" ) + ENDIF () + SET(${VAR} "${${VAR}} ${FLAGNAME}" CACHE INTERNAL "" ) MESSAGE(STATUS "Fortran compiler supports ${FLAGNAME}") ELSE() @@ -47,6 +54,7 @@ IF(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") # GNU ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-frecursive") ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fPIC") + ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fallow-argument-mismatch") ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_RELEASE "-O3") ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wimplicit-procedure") ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wall") @@ -54,7 +62,6 @@ IF(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Warray-temporaries") ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-fbacktrace") ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-Wshadow") - ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS "-fallow-argument-mismatch") IF(DEBUGOPT STREQUAL ON) ADD_FORTRAN_COMPILER_FLAG(CMAKE_Fortran_FLAGS_DEBUG "-O3") diff --git a/examples/TAB01MD.f b/examples/TAB01MD.f index 0c34522..69d47ce 100644 --- a/examples/TAB01MD.f +++ b/examples/TAB01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB01ND.f b/examples/TAB01ND.f index c042032..f2f8a32 100644 --- a/examples/TAB01ND.f +++ b/examples/TAB01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB01ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB01OD.f b/examples/TAB01OD.f index 9d3d031..01844db 100644 --- a/examples/TAB01OD.f +++ b/examples/TAB01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB01OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB04MD.f b/examples/TAB04MD.f index 87e2296..8eb23ab 100644 --- a/examples/TAB04MD.f +++ b/examples/TAB04MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB04MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB05MD.f b/examples/TAB05MD.f index 6867be7..5e2fbcd 100644 --- a/examples/TAB05MD.f +++ b/examples/TAB05MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB05MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB05ND.f b/examples/TAB05ND.f index 77cd65d..54ab5d2 100644 --- a/examples/TAB05ND.f +++ b/examples/TAB05ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB05ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB05OD.f b/examples/TAB05OD.f index 70c33d5..6b0daea 100644 --- a/examples/TAB05OD.f +++ b/examples/TAB05OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB05OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB05PD.f b/examples/TAB05PD.f index fbe186b..bde5008 100644 --- a/examples/TAB05PD.f +++ b/examples/TAB05PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB05PD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB05QD.f b/examples/TAB05QD.f index e34efce..0bb8202 100644 --- a/examples/TAB05QD.f +++ b/examples/TAB05QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB05QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB05RD.f b/examples/TAB05RD.f index 2766a19..09d5a38 100644 --- a/examples/TAB05RD.f +++ b/examples/TAB05RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB05RD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB07MD.f b/examples/TAB07MD.f index 92e71c9..7f65438 100644 --- a/examples/TAB07MD.f +++ b/examples/TAB07MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB07MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB07ND.f b/examples/TAB07ND.f index 5ab1080..cac7b21 100644 --- a/examples/TAB07ND.f +++ b/examples/TAB07ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB07ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB08ND.f b/examples/TAB08ND.f index d9757c1..0122f68 100644 --- a/examples/TAB08ND.f +++ b/examples/TAB08ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB08ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB08NW.f b/examples/TAB08NW.f index c0ac394..c1a97a9 100644 --- a/examples/TAB08NW.f +++ b/examples/TAB08NW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB08NW EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB08NZ.f b/examples/TAB08NZ.f index 1b10304..310a69e 100644 --- a/examples/TAB08NZ.f +++ b/examples/TAB08NZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB08NZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09AD.f b/examples/TAB09AD.f index 45daaaa..cce298b 100644 --- a/examples/TAB09AD.f +++ b/examples/TAB09AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09BD.f b/examples/TAB09BD.f index 45b96c7..7f97b47 100644 --- a/examples/TAB09BD.f +++ b/examples/TAB09BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09CD.f b/examples/TAB09CD.f index c47e2d1..95a249a 100644 --- a/examples/TAB09CD.f +++ b/examples/TAB09CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09DD.f b/examples/TAB09DD.f index 8917a79..4ca24f9 100644 --- a/examples/TAB09DD.f +++ b/examples/TAB09DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09ED.f b/examples/TAB09ED.f index 9f2d703..379ad06 100644 --- a/examples/TAB09ED.f +++ b/examples/TAB09ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09ED EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09FD.f b/examples/TAB09FD.f index 8dba7fb..14477e7 100644 --- a/examples/TAB09FD.f +++ b/examples/TAB09FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09FD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09GD.f b/examples/TAB09GD.f index cc410be..42f7ef9 100644 --- a/examples/TAB09GD.f +++ b/examples/TAB09GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09GD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09HD.f b/examples/TAB09HD.f index bdd7da1..04e9474 100644 --- a/examples/TAB09HD.f +++ b/examples/TAB09HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09HD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09ID.f b/examples/TAB09ID.f index 313fde2..ac3240d 100644 --- a/examples/TAB09ID.f +++ b/examples/TAB09ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09ID EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09JD.f b/examples/TAB09JD.f index caa4899..0629d4e 100644 --- a/examples/TAB09JD.f +++ b/examples/TAB09JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09JD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09KD.f b/examples/TAB09KD.f index a44d082..fdb00e1 100644 --- a/examples/TAB09KD.f +++ b/examples/TAB09KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09KD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09MD.f b/examples/TAB09MD.f index c699c2e..edfd4aa 100644 --- a/examples/TAB09MD.f +++ b/examples/TAB09MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB09ND.f b/examples/TAB09ND.f index a951a0d..df0069e 100644 --- a/examples/TAB09ND.f +++ b/examples/TAB09ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB09ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB13AD.f b/examples/TAB13AD.f index ef43895..c2ecaf5 100644 --- a/examples/TAB13AD.f +++ b/examples/TAB13AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB13AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB13BD.f b/examples/TAB13BD.f index 8b3ae23..0ac9908 100644 --- a/examples/TAB13BD.f +++ b/examples/TAB13BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB13BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB13CD.f b/examples/TAB13CD.f index 0cf06bd..ab71278 100644 --- a/examples/TAB13CD.f +++ b/examples/TAB13CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB13CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB13DD.f b/examples/TAB13DD.f index f5dab53..95e8831 100644 --- a/examples/TAB13DD.f +++ b/examples/TAB13DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB13DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB13ED.f b/examples/TAB13ED.f index fbac65d..a1b25b4 100644 --- a/examples/TAB13ED.f +++ b/examples/TAB13ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB13ED EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB13FD.f b/examples/TAB13FD.f index 3c34fa7..1fdacc2 100644 --- a/examples/TAB13FD.f +++ b/examples/TAB13FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB13FD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB13ID.f b/examples/TAB13ID.f index 3fb20ee..39c68aa 100644 --- a/examples/TAB13ID.f +++ b/examples/TAB13ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB13ID EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAB13MD.f b/examples/TAB13MD.f index d2075fa..e4c4750 100644 --- a/examples/TAB13MD.f +++ b/examples/TAB13MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AB13MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAG08BD.f b/examples/TAG08BD.f index 3526b57..9f7b831 100644 --- a/examples/TAG08BD.f +++ b/examples/TAG08BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AG08BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TAG08BZ.f b/examples/TAG08BZ.f index b73d03a..26aad5f 100644 --- a/examples/TAG08BZ.f +++ b/examples/TAG08BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * AG08BZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TBB01AD.f b/examples/TBB01AD.f index 5fa212c..a8e94f4 100644 --- a/examples/TBB01AD.f +++ b/examples/TBB01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * BB01AD EXAMPLE PROGRAM TEXT * * diff --git a/examples/TBB02AD.f b/examples/TBB02AD.f index 70cef6b..ba032f5 100644 --- a/examples/TBB02AD.f +++ b/examples/TBB02AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * BB02AD EXAMPLE PROGRAM TEXT * * diff --git a/examples/TBB03AD.f b/examples/TBB03AD.f index 252f473..228674b 100644 --- a/examples/TBB03AD.f +++ b/examples/TBB03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C C BB03AD EXAMPLE PROGRAM TEXT C C .. Parameters .. diff --git a/examples/TBB04AD.f b/examples/TBB04AD.f index 1e7ed72..3a4ee6c 100644 --- a/examples/TBB04AD.f +++ b/examples/TBB04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C C BB04AD EXAMPLE PROGRAM TEXT C C .. Parameters .. diff --git a/examples/TBD01AD.f b/examples/TBD01AD.f index 9104984..5ff791d 100644 --- a/examples/TBD01AD.f +++ b/examples/TBD01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C C BD01AD EXAMPLE PROGRAM TEXT C C .. Parameters .. diff --git a/examples/TBD02AD.f b/examples/TBD02AD.f index b116b3f..041fcfa 100644 --- a/examples/TBD02AD.f +++ b/examples/TBD02AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C C BD02AD EXAMPLE PROGRAM TEXT C C .. Parameters .. diff --git a/examples/TDE01OD.f b/examples/TDE01OD.f index 575b5f5..5ba83e3 100644 --- a/examples/TDE01OD.f +++ b/examples/TDE01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * DE01OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TDE01PD.f b/examples/TDE01PD.f index 5ef3512..c8faf2e 100644 --- a/examples/TDE01PD.f +++ b/examples/TDE01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * DE01PD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TDF01MD.f b/examples/TDF01MD.f index 6aa5119..d57af51 100644 --- a/examples/TDF01MD.f +++ b/examples/TDF01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * DF01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TDG01MD.f b/examples/TDG01MD.f index 097c164..1951897 100644 --- a/examples/TDG01MD.f +++ b/examples/TDG01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * DG01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TDG01ND.f b/examples/TDG01ND.f index c4e69d6..d49ca91 100644 --- a/examples/TDG01ND.f +++ b/examples/TDG01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * DG01ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TDG01OD.f b/examples/TDG01OD.f index e2912d4..2700c18 100644 --- a/examples/TDG01OD.f +++ b/examples/TDG01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * DG01OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TDK01MD.f b/examples/TDK01MD.f index 9893fed..0c83f30 100644 --- a/examples/TDK01MD.f +++ b/examples/TDK01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * DK01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TFB01QD.f b/examples/TFB01QD.f index f41719f..fdc5beb 100644 --- a/examples/TFB01QD.f +++ b/examples/TFB01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * FB01QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TFB01RD.f b/examples/TFB01RD.f index 7914573..9b48c16 100644 --- a/examples/TFB01RD.f +++ b/examples/TFB01RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * FB01RD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TFB01SD.f b/examples/TFB01SD.f index 4854120..3cacee8 100644 --- a/examples/TFB01SD.f +++ b/examples/TFB01SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * FB01SD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TFB01TD.f b/examples/TFB01TD.f index 6b4d251..99f5ac7 100644 --- a/examples/TFB01TD.f +++ b/examples/TFB01TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * FB01TD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TFB01VD.f b/examples/TFB01VD.f index 3cb3ef9..0e39846 100644 --- a/examples/TFB01VD.f +++ b/examples/TFB01VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * FB01VD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TFD01AD.f b/examples/TFD01AD.f index e288cfb..c4ec278 100644 --- a/examples/TFD01AD.f +++ b/examples/TFD01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * FD01AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TIB01AD.f b/examples/TIB01AD.f index 26cbe73..8d9a551 100644 --- a/examples/TIB01AD.f +++ b/examples/TIB01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * IB01AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TIB01BD.f b/examples/TIB01BD.f index 0e7feec..8cac6f4 100644 --- a/examples/TIB01BD.f +++ b/examples/TIB01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * IB01BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TIB01CD.f b/examples/TIB01CD.f index 1c28692..b93ecfe 100644 --- a/examples/TIB01CD.f +++ b/examples/TIB01CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * IB01CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TIB03AD.f b/examples/TIB03AD.f index 7b197ba..e48f793 100644 --- a/examples/TIB03AD.f +++ b/examples/TIB03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * IB03AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TIB03BD.f b/examples/TIB03BD.f index d7f5089..5620238 100644 --- a/examples/TIB03BD.f +++ b/examples/TIB03BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * IB03BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB01TD.f b/examples/TMB01TD.f index cd35cc2..dad680e 100644 --- a/examples/TMB01TD.f +++ b/examples/TMB01TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB01TD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02CD.f b/examples/TMB02CD.f index a4a7e6d..cd173e3 100644 --- a/examples/TMB02CD.f +++ b/examples/TMB02CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02DD.f b/examples/TMB02DD.f index 7d01feb..a08954c 100644 --- a/examples/TMB02DD.f +++ b/examples/TMB02DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02ED.f b/examples/TMB02ED.f index 1761d84..b6fa865 100644 --- a/examples/TMB02ED.f +++ b/examples/TMB02ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02ED EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02FD.f b/examples/TMB02FD.f index 0220d64..50dee3b 100644 --- a/examples/TMB02FD.f +++ b/examples/TMB02FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02FD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02GD.f b/examples/TMB02GD.f index 98b9661..41aaa8c 100644 --- a/examples/TMB02GD.f +++ b/examples/TMB02GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02GD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02HD.f b/examples/TMB02HD.f index f487ace..f1c49e6 100644 --- a/examples/TMB02HD.f +++ b/examples/TMB02HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02HD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02ID.f b/examples/TMB02ID.f index 54b062d..51ad30e 100644 --- a/examples/TMB02ID.f +++ b/examples/TMB02ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02ID EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02JD.f b/examples/TMB02JD.f index 861e00b..638c610 100644 --- a/examples/TMB02JD.f +++ b/examples/TMB02JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02JD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02JX.f b/examples/TMB02JX.f index d8fee15..eea24a9 100644 --- a/examples/TMB02JX.f +++ b/examples/TMB02JX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02JX EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02KD.f b/examples/TMB02KD.f index 931561d..99790df 100644 --- a/examples/TMB02KD.f +++ b/examples/TMB02KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02KD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02MD.f b/examples/TMB02MD.f index 382685c..ca32ac0 100644 --- a/examples/TMB02MD.f +++ b/examples/TMB02MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02ND.f b/examples/TMB02ND.f index 74fe564..c91813e 100644 --- a/examples/TMB02ND.f +++ b/examples/TMB02ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02QD.f b/examples/TMB02QD.f index e4823f0..058aab0 100644 --- a/examples/TMB02QD.f +++ b/examples/TMB02QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02SD.f b/examples/TMB02SD.f index ecf0b90..0b8bd23 100644 --- a/examples/TMB02SD.f +++ b/examples/TMB02SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02SD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB02VD.f b/examples/TMB02VD.f index ca1a020..22527db 100644 --- a/examples/TMB02VD.f +++ b/examples/TMB02VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB02VD EXAMPLE PROGRAM TEXT * INTEGER NIN, NOUT diff --git a/examples/TMB03BD.f b/examples/TMB03BD.f index 6702a31..fda215c 100644 --- a/examples/TMB03BD.f +++ b/examples/TMB03BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03BZ.f b/examples/TMB03BZ.f index b521c7e..fdfd4ae 100644 --- a/examples/TMB03BZ.f +++ b/examples/TMB03BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03BZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03FZ.f b/examples/TMB03FZ.f index 7f98998..8cde2bb 100644 --- a/examples/TMB03FZ.f +++ b/examples/TMB03FZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03FZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03KD.f b/examples/TMB03KD.f index c6b40c2..5d68d82 100644 --- a/examples/TMB03KD.f +++ b/examples/TMB03KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03KD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03LD.f b/examples/TMB03LD.f index ffc0fa7..04034fc 100644 --- a/examples/TMB03LD.f +++ b/examples/TMB03LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03LD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03LF.f b/examples/TMB03LF.f index 817ff14..9977c95 100644 --- a/examples/TMB03LF.f +++ b/examples/TMB03LF.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03LF EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03LZ.f b/examples/TMB03LZ.f index e4da1fc..8ac805d 100644 --- a/examples/TMB03LZ.f +++ b/examples/TMB03LZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03LZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03MD.f b/examples/TMB03MD.f index 4353a82..337704d 100644 --- a/examples/TMB03MD.f +++ b/examples/TMB03MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03ND.f b/examples/TMB03ND.f index fbd454c..9582dbc 100644 --- a/examples/TMB03ND.f +++ b/examples/TMB03ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03OD.f b/examples/TMB03OD.f index aefa015..717a821 100644 --- a/examples/TMB03OD.f +++ b/examples/TMB03OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03PD.f b/examples/TMB03PD.f index 9744041..2fd93d9 100644 --- a/examples/TMB03PD.f +++ b/examples/TMB03PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03PD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03QD.f b/examples/TMB03QD.f index a3cd13a..63ffb84 100644 --- a/examples/TMB03QD.f +++ b/examples/TMB03QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03QG.f b/examples/TMB03QG.f index 72914d1..6611a49 100644 --- a/examples/TMB03QG.f +++ b/examples/TMB03QG.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03QG EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03RD.f b/examples/TMB03RD.f index d16ddd3..97720e7 100644 --- a/examples/TMB03RD.f +++ b/examples/TMB03RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03RD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03SD.f b/examples/TMB03SD.f index 0715c5a..1caec9b 100644 --- a/examples/TMB03SD.f +++ b/examples/TMB03SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03SD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TMB03TD.f b/examples/TMB03TD.f index bea25c5..14153c1 100644 --- a/examples/TMB03TD.f +++ b/examples/TMB03TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03TD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03UD.f b/examples/TMB03UD.f index 38b7175..c18cd37 100644 --- a/examples/TMB03UD.f +++ b/examples/TMB03UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03UD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03VD.f b/examples/TMB03VD.f index cd395fe..420f2a7 100644 --- a/examples/TMB03VD.f +++ b/examples/TMB03VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03VD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03WD.f b/examples/TMB03WD.f index 105e9e1..4709ffb 100644 --- a/examples/TMB03WD.f +++ b/examples/TMB03WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03WD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03XD.f b/examples/TMB03XD.f index 16ba758..060b0a4 100644 --- a/examples/TMB03XD.f +++ b/examples/TMB03XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03XD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03XP.f b/examples/TMB03XP.f index 5a1872b..a60c7a2 100644 --- a/examples/TMB03XP.f +++ b/examples/TMB03XP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03XP EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03XZ.f b/examples/TMB03XZ.f index 24be7c1..61191e4 100644 --- a/examples/TMB03XZ.f +++ b/examples/TMB03XZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03XZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB03ZD.f b/examples/TMB03ZD.f index 7cfc3e5..9651b81 100644 --- a/examples/TMB03ZD.f +++ b/examples/TMB03ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB03ZD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04AD.f b/examples/TMB04AD.f index a829e36..e4fd1be 100644 --- a/examples/TMB04AD.f +++ b/examples/TMB04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04AZ.f b/examples/TMB04AZ.f index 90394ff..15595a1 100644 --- a/examples/TMB04AZ.f +++ b/examples/TMB04AZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04AZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04BD.f b/examples/TMB04BD.f index e1c7c93..8a0f290 100644 --- a/examples/TMB04BD.f +++ b/examples/TMB04BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04BZ.f b/examples/TMB04BZ.f index 55cf056..ec31424 100644 --- a/examples/TMB04BZ.f +++ b/examples/TMB04BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04BZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04DD.f b/examples/TMB04DD.f index 934523a..e843890 100644 --- a/examples/TMB04DD.f +++ b/examples/TMB04DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04DL.f b/examples/TMB04DL.f index 6da718c..eff776f 100644 --- a/examples/TMB04DL.f +++ b/examples/TMB04DL.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04DL EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04DP.f b/examples/TMB04DP.f index a33a46e..16d3fb2 100644 --- a/examples/TMB04DP.f +++ b/examples/TMB04DP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04DP EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04DS.f b/examples/TMB04DS.f index 26826b2..e917450 100644 --- a/examples/TMB04DS.f +++ b/examples/TMB04DS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04DS EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04DY.f b/examples/TMB04DY.f index c310a3d..c8bdc8c 100644 --- a/examples/TMB04DY.f +++ b/examples/TMB04DY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04DY EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TMB04DZ.f b/examples/TMB04DZ.f index efe314e..d76d008 100644 --- a/examples/TMB04DZ.f +++ b/examples/TMB04DZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04DZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04ED.f b/examples/TMB04ED.f index 430080a..96bc6b5 100644 --- a/examples/TMB04ED.f +++ b/examples/TMB04ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04ED EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04FD.f b/examples/TMB04FD.f index cca4549..0138842 100644 --- a/examples/TMB04FD.f +++ b/examples/TMB04FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04FD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04GD.f b/examples/TMB04GD.f index 31db30a..810b3b8 100644 --- a/examples/TMB04GD.f +++ b/examples/TMB04GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04GD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04MD.f b/examples/TMB04MD.f index 8bb4804..0ee7703 100644 --- a/examples/TMB04MD.f +++ b/examples/TMB04MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04MD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TMB04OD.f b/examples/TMB04OD.f index 22d4b87..c56beb9 100644 --- a/examples/TMB04OD.f +++ b/examples/TMB04OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04OD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TMB04PB.f b/examples/TMB04PB.f index dffa8fe..edeb84c 100644 --- a/examples/TMB04PB.f +++ b/examples/TMB04PB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04PB/MB04WP EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04PU.f b/examples/TMB04PU.f index 5b6eb94..57c7029 100644 --- a/examples/TMB04PU.f +++ b/examples/TMB04PU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04PU/MB04WP EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04TB.f b/examples/TMB04TB.f index 3b70283..cd688ed 100644 --- a/examples/TMB04TB.f +++ b/examples/TMB04TB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04TB/MB04WR EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04TS.f b/examples/TMB04TS.f index f1f46a5..71a51c2 100644 --- a/examples/TMB04TS.f +++ b/examples/TMB04TS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04TS/MB04WR EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04UD.f b/examples/TMB04UD.f index 7041323..d90b561 100644 --- a/examples/TMB04UD.f +++ b/examples/TMB04UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04UD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04VD.f b/examples/TMB04VD.f index 8334bfc..f1baf30 100644 --- a/examples/TMB04VD.f +++ b/examples/TMB04VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04VD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04XD.f b/examples/TMB04XD.f index d52854c..7ddcd13 100644 --- a/examples/TMB04XD.f +++ b/examples/TMB04XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04XD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04YD.f b/examples/TMB04YD.f index 81ef47a..897d2a4 100644 --- a/examples/TMB04YD.f +++ b/examples/TMB04YD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04YD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB04ZD.f b/examples/TMB04ZD.f index 3aa6216..e4a4ac9 100644 --- a/examples/TMB04ZD.f +++ b/examples/TMB04ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB04ZD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TMB05MD.f b/examples/TMB05MD.f index 42f7d51..2559a80 100644 --- a/examples/TMB05MD.f +++ b/examples/TMB05MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB05MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB05ND.f b/examples/TMB05ND.f index fba69a3..f0edecf 100644 --- a/examples/TMB05ND.f +++ b/examples/TMB05ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB05ND EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TMB05OD.f b/examples/TMB05OD.f index c913d2e..cf9bf21 100644 --- a/examples/TMB05OD.f +++ b/examples/TMB05OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB05OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB4DLZ.f b/examples/TMB4DLZ.f index df1fb95..9fc00a7 100644 --- a/examples/TMB4DLZ.f +++ b/examples/TMB4DLZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB4DLZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMB4DPZ.f b/examples/TMB4DPZ.f index eed9fc6..8860f7d 100644 --- a/examples/TMB4DPZ.f +++ b/examples/TMB4DPZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MB4DPZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01MD.f b/examples/TMC01MD.f index 29cb18d..e6a9679 100644 --- a/examples/TMC01MD.f +++ b/examples/TMC01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01ND.f b/examples/TMC01ND.f index 81127f4..fdb9a8c 100644 --- a/examples/TMC01ND.f +++ b/examples/TMC01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01OD.f b/examples/TMC01OD.f index 5963d4d..decbaeb 100644 --- a/examples/TMC01OD.f +++ b/examples/TMC01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01PD.f b/examples/TMC01PD.f index 574179b..7fdb5d7 100644 --- a/examples/TMC01PD.f +++ b/examples/TMC01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01PD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01QD.f b/examples/TMC01QD.f index 655cb7b..f80e232 100644 --- a/examples/TMC01QD.f +++ b/examples/TMC01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01RD.f b/examples/TMC01RD.f index 7b86eab..d4e98e9 100644 --- a/examples/TMC01RD.f +++ b/examples/TMC01RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01RD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01SD.f b/examples/TMC01SD.f index 8b3e904..1a8aa75 100644 --- a/examples/TMC01SD.f +++ b/examples/TMC01SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01SD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01TD.f b/examples/TMC01TD.f index 3045348..5008bc8 100644 --- a/examples/TMC01TD.f +++ b/examples/TMC01TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01TD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01VD.f b/examples/TMC01VD.f index 452e007..40735cd 100644 --- a/examples/TMC01VD.f +++ b/examples/TMC01VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01VD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01WD.f b/examples/TMC01WD.f index 0a3aef7..9b30175 100644 --- a/examples/TMC01WD.f +++ b/examples/TMC01WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01WD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC01XD.f b/examples/TMC01XD.f index c72095e..5382726 100644 --- a/examples/TMC01XD.f +++ b/examples/TMC01XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC01XD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TMC03MD.f b/examples/TMC03MD.f index 972620c..6cd0242 100644 --- a/examples/TMC03MD.f +++ b/examples/TMC03MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC03MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMC03ND.f b/examples/TMC03ND.f index 1e9a362..831ae2f 100644 --- a/examples/TMC03ND.f +++ b/examples/TMC03ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MC03ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMD03AD.f b/examples/TMD03AD.f index eae4de0..ead1920 100644 --- a/examples/TMD03AD.f +++ b/examples/TMD03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MD03AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TMD03BD.f b/examples/TMD03BD.f index cb7681f..d5c7d95 100644 --- a/examples/TMD03BD.f +++ b/examples/TMD03BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * MD03BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB01BD.f b/examples/TSB01BD.f index fcdfa39..03d87b7 100644 --- a/examples/TSB01BD.f +++ b/examples/TSB01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB01BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB01DD.f b/examples/TSB01DD.f index e1fbb18..60c5562 100644 --- a/examples/TSB01DD.f +++ b/examples/TSB01DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB01DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB01MD.f b/examples/TSB01MD.f index 610e1c6..8a5cea9 100644 --- a/examples/TSB01MD.f +++ b/examples/TSB01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB02MD.f b/examples/TSB02MD.f index 2cedbda..d2b90b9 100644 --- a/examples/TSB02MD.f +++ b/examples/TSB02MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB02MD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TSB02ND.f b/examples/TSB02ND.f index 03b1a5e..a617bca 100644 --- a/examples/TSB02ND.f +++ b/examples/TSB02ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB02ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB02OD.f b/examples/TSB02OD.f index 0c26e2d..e59922a 100644 --- a/examples/TSB02OD.f +++ b/examples/TSB02OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB02OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB02PD.f b/examples/TSB02PD.f index c00402c..3c04886 100644 --- a/examples/TSB02PD.f +++ b/examples/TSB02PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB02PD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TSB02QD.f b/examples/TSB02QD.f index 7803744..45438a6 100644 --- a/examples/TSB02QD.f +++ b/examples/TSB02QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB02QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB02RD.f b/examples/TSB02RD.f index 75f7a9b..a2d1e4c 100644 --- a/examples/TSB02RD.f +++ b/examples/TSB02RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB02RD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TSB02SD.f b/examples/TSB02SD.f index 142cf89..a5e6594 100644 --- a/examples/TSB02SD.f +++ b/examples/TSB02SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB02SD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB03MD.f b/examples/TSB03MD.f index a6ee983..9c43217 100644 --- a/examples/TSB03MD.f +++ b/examples/TSB03MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB03MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB03OD.f b/examples/TSB03OD.f index b59c854..60907fd 100644 --- a/examples/TSB03OD.f +++ b/examples/TSB03OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB03OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB03QD.f b/examples/TSB03QD.f index d892e0a..5f3b1e9 100644 --- a/examples/TSB03QD.f +++ b/examples/TSB03QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB03QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB03SD.f b/examples/TSB03SD.f index 646d941..3162692 100644 --- a/examples/TSB03SD.f +++ b/examples/TSB03SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB03SD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB03TD.f b/examples/TSB03TD.f index 728f064..9251fec 100644 --- a/examples/TSB03TD.f +++ b/examples/TSB03TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB03TD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB03UD.f b/examples/TSB03UD.f index c1a5f14..db41bfc 100644 --- a/examples/TSB03UD.f +++ b/examples/TSB03UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB03UD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB04MD.f b/examples/TSB04MD.f index 497f852..9249e12 100644 --- a/examples/TSB04MD.f +++ b/examples/TSB04MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB04MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB04ND.f b/examples/TSB04ND.f index 8b1cdd7..2dacdb0 100644 --- a/examples/TSB04ND.f +++ b/examples/TSB04ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB04ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB04OD.f b/examples/TSB04OD.f index 052b2b1..c5eef0a 100644 --- a/examples/TSB04OD.f +++ b/examples/TSB04OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB04OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB04PD.f b/examples/TSB04PD.f index 414a0c0..5fcf82c 100644 --- a/examples/TSB04PD.f +++ b/examples/TSB04PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB04PD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB04QD.f b/examples/TSB04QD.f index 7c4f1a1..0a5de87 100644 --- a/examples/TSB04QD.f +++ b/examples/TSB04QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB04QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB04RD.f b/examples/TSB04RD.f index 7988097..7a080c7 100644 --- a/examples/TSB04RD.f +++ b/examples/TSB04RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB04RD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB06ND.f b/examples/TSB06ND.f index b656b3e..9184f42 100644 --- a/examples/TSB06ND.f +++ b/examples/TSB06ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB06ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB08CD.f b/examples/TSB08CD.f index 2eac393..575da14 100644 --- a/examples/TSB08CD.f +++ b/examples/TSB08CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB08CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB08DD.f b/examples/TSB08DD.f index 9262120..e5aa4b0 100644 --- a/examples/TSB08DD.f +++ b/examples/TSB08DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB08DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB08ED.f b/examples/TSB08ED.f index f65f4e0..5bfb20b 100644 --- a/examples/TSB08ED.f +++ b/examples/TSB08ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB08ED EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB08FD.f b/examples/TSB08FD.f index 8978ec0..f69f614 100644 --- a/examples/TSB08FD.f +++ b/examples/TSB08FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB08FD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB08MD.f b/examples/TSB08MD.f index 0c761b0..8db5372 100644 --- a/examples/TSB08MD.f +++ b/examples/TSB08MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB08MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB08ND.f b/examples/TSB08ND.f index 76c623d..53cf769 100644 --- a/examples/TSB08ND.f +++ b/examples/TSB08ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB08ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB09MD.f b/examples/TSB09MD.f index a640476..6951af2 100644 --- a/examples/TSB09MD.f +++ b/examples/TSB09MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB09MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB10DD.f b/examples/TSB10DD.f index 4ee5428..a108a0c 100644 --- a/examples/TSB10DD.f +++ b/examples/TSB10DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB10DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB10ED.f b/examples/TSB10ED.f index 1accf91..c2f5483 100644 --- a/examples/TSB10ED.f +++ b/examples/TSB10ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB10ED EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB10FD.f b/examples/TSB10FD.f index 221f67f..75badfb 100644 --- a/examples/TSB10FD.f +++ b/examples/TSB10FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB10FD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB10HD.f b/examples/TSB10HD.f index d05201d..6e57306 100644 --- a/examples/TSB10HD.f +++ b/examples/TSB10HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB10HD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB10ID.f b/examples/TSB10ID.f index 536d133..89517e2 100644 --- a/examples/TSB10ID.f +++ b/examples/TSB10ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB10ID EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB10KD.f b/examples/TSB10KD.f index 7fae08f..b9e7465 100644 --- a/examples/TSB10KD.f +++ b/examples/TSB10KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB10KD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB10ZD.f b/examples/TSB10ZD.f index af4c4ea..78e6eb6 100644 --- a/examples/TSB10ZD.f +++ b/examples/TSB10ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB10ZD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB16AD.f b/examples/TSB16AD.f index cbcb280..77c5bc4 100644 --- a/examples/TSB16AD.f +++ b/examples/TSB16AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB16AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB16BD.f b/examples/TSB16BD.f index d628276..4345da2 100644 --- a/examples/TSB16BD.f +++ b/examples/TSB16BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB16BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSB16CD.f b/examples/TSB16CD.f index c0978f5..7c5d753 100644 --- a/examples/TSB16CD.f +++ b/examples/TSB16CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SB16CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSG02AD.f b/examples/TSG02AD.f index eb51778..242ddd8 100644 --- a/examples/TSG02AD.f +++ b/examples/TSG02AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SG02AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSG02ND.f b/examples/TSG02ND.f index d606ba3..69acfdf 100644 --- a/examples/TSG02ND.f +++ b/examples/TSG02ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SG02ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSG03AD.f b/examples/TSG03AD.f index f0408ba..553ee12 100644 --- a/examples/TSG03AD.f +++ b/examples/TSG03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SG03AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TSG03BD.f b/examples/TSG03BD.f index a57d109..5dc3de9 100644 --- a/examples/TSG03BD.f +++ b/examples/TSG03BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * SG03BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01ID.f b/examples/TTB01ID.f index 1225b4e..8c9c28f 100644 --- a/examples/TTB01ID.f +++ b/examples/TTB01ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01ID EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TTB01IZ.f b/examples/TTB01IZ.f index 609e6c0..8461c0d 100644 --- a/examples/TTB01IZ.f +++ b/examples/TTB01IZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01IZ EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TTB01KD.f b/examples/TTB01KD.f index 03fa85c..cbd9c7e 100644 --- a/examples/TTB01KD.f +++ b/examples/TTB01KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01KD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01LD.f b/examples/TTB01LD.f index 98b5cb9..a30f5da 100644 --- a/examples/TTB01LD.f +++ b/examples/TTB01LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01LD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01MD.f b/examples/TTB01MD.f index 71f012a..7990c99 100644 --- a/examples/TTB01MD.f +++ b/examples/TTB01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01ND.f b/examples/TTB01ND.f index 37db52a..2d67c9e 100644 --- a/examples/TTB01ND.f +++ b/examples/TTB01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01PD.f b/examples/TTB01PD.f index e382fed..011869e 100644 --- a/examples/TTB01PD.f +++ b/examples/TTB01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01PD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01PX.f b/examples/TTB01PX.f index 588d9af..51e8511 100644 --- a/examples/TTB01PX.f +++ b/examples/TTB01PX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01PX EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01TD.f b/examples/TTB01TD.f index 8edd85c..700925f 100644 --- a/examples/TTB01TD.f +++ b/examples/TTB01TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01TD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TTB01UD.f b/examples/TTB01UD.f index eec8916..89f3f51 100644 --- a/examples/TTB01UD.f +++ b/examples/TTB01UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01UD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01UY.f b/examples/TTB01UY.f index 16fd749..7292916 100644 --- a/examples/TTB01UY.f +++ b/examples/TTB01UY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01UY EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01WD.f b/examples/TTB01WD.f index c66dd98..c5cd943 100644 --- a/examples/TTB01WD.f +++ b/examples/TTB01WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01WD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01WX.f b/examples/TTB01WX.f index 7b21cad..348e9e5 100644 --- a/examples/TTB01WX.f +++ b/examples/TTB01WX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01WX EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB01ZD.f b/examples/TTB01ZD.f index a2c34c4..f3ab92f 100644 --- a/examples/TTB01ZD.f +++ b/examples/TTB01ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB01ZD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB03AD.f b/examples/TTB03AD.f index 0f74343..610efe3 100644 --- a/examples/TTB03AD.f +++ b/examples/TTB03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB03AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB04AD.f b/examples/TTB04AD.f index 31aaa2c..b5bcdd5 100644 --- a/examples/TTB04AD.f +++ b/examples/TTB04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB04AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB04BD.f b/examples/TTB04BD.f index eaeb491..c279933 100644 --- a/examples/TTB04BD.f +++ b/examples/TTB04BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB04BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB04CD.f b/examples/TTB04CD.f index ea98a50..812d3c0 100644 --- a/examples/TTB04CD.f +++ b/examples/TTB04CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB04CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTB05AD.f b/examples/TTB05AD.f index 8b98f7c..484c71f 100644 --- a/examples/TTB05AD.f +++ b/examples/TTB05AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TB05AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTC01OD.f b/examples/TTC01OD.f index fc3ef1f..3f137d8 100644 --- a/examples/TTC01OD.f +++ b/examples/TTC01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TC01OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTC04AD.f b/examples/TTC04AD.f index f7a886f..145bcb0 100644 --- a/examples/TTC04AD.f +++ b/examples/TTC04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TC04AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTC05AD.f b/examples/TTC05AD.f index 2a5de8b..6453b69 100644 --- a/examples/TTC05AD.f +++ b/examples/TTC05AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TC05AD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TTD03AD.f b/examples/TTD03AD.f index 43d83e4..7eee331 100644 --- a/examples/TTD03AD.f +++ b/examples/TTD03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TD03AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTD04AD.f b/examples/TTD04AD.f index e475d08..1807b72 100644 --- a/examples/TTD04AD.f +++ b/examples/TTD04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TD04AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTD05AD.f b/examples/TTD05AD.f index b412b9d..82c63b1 100644 --- a/examples/TTD05AD.f +++ b/examples/TTD05AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TD05AD EXAMPLE PROGRAM TEXT. * * .. Parameters .. diff --git a/examples/TTF01MD.f b/examples/TTF01MD.f index 79803d8..086ebb8 100644 --- a/examples/TTF01MD.f +++ b/examples/TTF01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TF01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTF01ND.f b/examples/TTF01ND.f index 879f82a..9edab21 100644 --- a/examples/TTF01ND.f +++ b/examples/TTF01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TF01ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTF01OD.f b/examples/TTF01OD.f index 254ff62..8be1196 100644 --- a/examples/TTF01OD.f +++ b/examples/TTF01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TF01OD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTF01PD.f b/examples/TTF01PD.f index f5339e7..b83a21c 100644 --- a/examples/TTF01PD.f +++ b/examples/TTF01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TF01PD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTF01QD.f b/examples/TTF01QD.f index 31747d4..8c23b1b 100644 --- a/examples/TTF01QD.f +++ b/examples/TTF01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TF01QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTF01RD.f b/examples/TTF01RD.f index 3edcdb1..91ecb9b 100644 --- a/examples/TTF01RD.f +++ b/examples/TTF01RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TF01RD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01AD.f b/examples/TTG01AD.f index 39a63a3..4d6305f 100644 --- a/examples/TTG01AD.f +++ b/examples/TTG01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01AD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01AZ.f b/examples/TTG01AZ.f index 2c4daca..1420be8 100644 --- a/examples/TTG01AZ.f +++ b/examples/TTG01AZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01AZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01CD.f b/examples/TTG01CD.f index 40fc177..e2fbbff 100644 --- a/examples/TTG01CD.f +++ b/examples/TTG01CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01DD.f b/examples/TTG01DD.f index beb352e..e78c03b 100644 --- a/examples/TTG01DD.f +++ b/examples/TTG01DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01ED.f b/examples/TTG01ED.f index 2eff3f6..5133282 100644 --- a/examples/TTG01ED.f +++ b/examples/TTG01ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01ED EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01FD.f b/examples/TTG01FD.f index 8506fd3..33e604f 100644 --- a/examples/TTG01FD.f +++ b/examples/TTG01FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01FD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01FZ.f b/examples/TTG01FZ.f index 9cbc442..c09bd98 100644 --- a/examples/TTG01FZ.f +++ b/examples/TTG01FZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01FZ EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01GD.f b/examples/TTG01GD.f index bfe24b7..d94d917 100644 --- a/examples/TTG01GD.f +++ b/examples/TTG01GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01GD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01HD.f b/examples/TTG01HD.f index 326ab92..4aabcf9 100644 --- a/examples/TTG01HD.f +++ b/examples/TTG01HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01HD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01ID.f b/examples/TTG01ID.f index b01e935..30d26f3 100644 --- a/examples/TTG01ID.f +++ b/examples/TTG01ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01ID EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01JD.f b/examples/TTG01JD.f index f04afa6..002ea51 100644 --- a/examples/TTG01JD.f +++ b/examples/TTG01JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01JD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01JY.f b/examples/TTG01JY.f index 7c099b6..2752410 100644 --- a/examples/TTG01JY.f +++ b/examples/TTG01JY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01JY EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01LD.f b/examples/TTG01LD.f index 9215b1b..c96ad06 100644 --- a/examples/TTG01LD.f +++ b/examples/TTG01LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01LD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01MD.f b/examples/TTG01MD.f index 1a633e0..512727b 100644 --- a/examples/TTG01MD.f +++ b/examples/TTG01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01ND.f b/examples/TTG01ND.f index ac2a98c..a3e8756 100644 --- a/examples/TTG01ND.f +++ b/examples/TTG01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01PD.f b/examples/TTG01PD.f index 97b2179..65dd01a 100644 --- a/examples/TTG01PD.f +++ b/examples/TTG01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01PD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TTG01QD.f b/examples/TTG01QD.f index 4299ba7..fc04ff3 100644 --- a/examples/TTG01QD.f +++ b/examples/TTG01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * TG01QD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TUD01BD.f b/examples/TUD01BD.f index 55a7444..8d38e0f 100644 --- a/examples/TUD01BD.f +++ b/examples/TUD01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * UD01BD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TUD01CD.f b/examples/TUD01CD.f index e574bf0..54cee49 100644 --- a/examples/TUD01CD.f +++ b/examples/TUD01CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * UD01CD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TUD01DD.f b/examples/TUD01DD.f index 0cab869..b67e794 100644 --- a/examples/TUD01DD.f +++ b/examples/TUD01DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * UD01DD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TUD01MD.f b/examples/TUD01MD.f index f430dfb..d006b0c 100644 --- a/examples/TUD01MD.f +++ b/examples/TUD01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * UD01MD EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/examples/TUD01ND.f b/examples/TUD01ND.f index 87d1639..521f728 100644 --- a/examples/TUD01ND.f +++ b/examples/TUD01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C * UD01ND EXAMPLE PROGRAM TEXT * * .. Parameters .. diff --git a/src/AB01MD.f b/src/AB01MD.f index 8a5a3af..0230ad5 100644 --- a/src/AB01MD.f +++ b/src/AB01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB01MD( JOBZ, N, A, LDA, B, NCONT, Z, LDZ, TAU, TOL, $ DWORK, LDWORK, INFO ) C diff --git a/src/AB01ND.f b/src/AB01ND.f index 9ba2dc5..6dcd380 100644 --- a/src/AB01ND.f +++ b/src/AB01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB01ND( JOBZ, N, M, A, LDA, B, LDB, NCONT, INDCON, $ NBLK, Z, LDZ, TAU, TOL, IWORK, DWORK, LDWORK, $ INFO ) diff --git a/src/AB01OD.f b/src/AB01OD.f index 7da17ad..820dc03 100644 --- a/src/AB01OD.f +++ b/src/AB01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB01OD( STAGES, JOBU, JOBV, N, M, A, LDA, B, LDB, U, $ LDU, V, LDV, NCONT, INDCON, KSTAIR, TOL, IWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/AB04MD.f b/src/AB04MD.f index 7e3a8fc..bb145bf 100644 --- a/src/AB04MD.f +++ b/src/AB04MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB04MD( TYPE, N, M, P, ALPHA, BETA, A, LDA, B, LDB, C, $ LDC, D, LDD, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/AB05MD.f b/src/AB05MD.f index 0cfa203..660c4cf 100644 --- a/src/AB05MD.f +++ b/src/AB05MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB05MD( UPLO, OVER, N1, M1, P1, N2, P2, A1, LDA1, B1, $ LDB1, C1, LDC1, D1, LDD1, A2, LDA2, B2, LDB2, $ C2, LDC2, D2, LDD2, N, A, LDA, B, LDB, C, LDC, diff --git a/src/AB05ND.f b/src/AB05ND.f index 1a32e81..7921574 100644 --- a/src/AB05ND.f +++ b/src/AB05ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB05ND( OVER, N1, M1, P1, N2, ALPHA, A1, LDA1, B1, $ LDB1, C1, LDC1, D1, LDD1, A2, LDA2, B2, LDB2, $ C2, LDC2, D2, LDD2, N, A, LDA, B, LDB, C, LDC, diff --git a/src/AB05OD.f b/src/AB05OD.f index 96dc27e..27aa0dd 100644 --- a/src/AB05OD.f +++ b/src/AB05OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB05OD( OVER, N1, M1, P1, N2, M2, ALPHA, A1, LDA1, B1, $ LDB1, C1, LDC1, D1, LDD1, A2, LDA2, B2, LDB2, $ C2, LDC2, D2, LDD2, N, M, A, LDA, B, LDB, C, diff --git a/src/AB05PD.f b/src/AB05PD.f index 5373c88..590dd21 100644 --- a/src/AB05PD.f +++ b/src/AB05PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB05PD( OVER, N1, M, P, N2, ALPHA, A1, LDA1, B1, LDB1, $ C1, LDC1, D1, LDD1, A2, LDA2, B2, LDB2, C2, $ LDC2, D2, LDD2, N, A, LDA, B, LDB, C, LDC, D, diff --git a/src/AB05QD.f b/src/AB05QD.f index ef6bd9b..f419632 100644 --- a/src/AB05QD.f +++ b/src/AB05QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB05QD( OVER, N1, M1, P1, N2, M2, P2, A1, LDA1, B1, $ LDB1, C1, LDC1, D1, LDD1, A2, LDA2, B2, LDB2, $ C2, LDC2, D2, LDD2, N, M, P, A, LDA, B, LDB, diff --git a/src/AB05RD.f b/src/AB05RD.f index 4304a47..b514e3e 100644 --- a/src/AB05RD.f +++ b/src/AB05RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB05RD( FBTYPE, JOBD, N, M, P, MV, PZ, ALPHA, BETA, A, $ LDA, B, LDB, C, LDC, D, LDD, F, LDF, K, LDK, $ G, LDG, H, LDH, RCOND, BC, LDBC, CC, LDCC, diff --git a/src/AB05SD.f b/src/AB05SD.f index e61db38..25d73a7 100644 --- a/src/AB05SD.f +++ b/src/AB05SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB05SD( FBTYPE, JOBD, N, M, P, ALPHA, A, LDA, B, LDB, $ C, LDC, D, LDD, F, LDF, RCOND, IWORK, DWORK, $ LDWORK, INFO) diff --git a/src/AB07MD.f b/src/AB07MD.f index 07b1036..d16f4c2 100644 --- a/src/AB07MD.f +++ b/src/AB07MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB07MD( JOBD, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ INFO ) C diff --git a/src/AB07ND.f b/src/AB07ND.f index d73604b..2cb3c24 100644 --- a/src/AB07ND.f +++ b/src/AB07ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB07ND( N, M, A, LDA, B, LDB, C, LDC, D, LDD, RCOND, $ IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/AB08MD.f b/src/AB08MD.f index 717cb5c..f64a3ac 100644 --- a/src/AB08MD.f +++ b/src/AB08MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB08MD( EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ RANK, TOL, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/AB08MZ.f b/src/AB08MZ.f index 02a3bec..3041da3 100644 --- a/src/AB08MZ.f +++ b/src/AB08MZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB08MZ( EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ RANK, TOL, IWORK, DWORK, ZWORK, LZWORK, INFO ) C diff --git a/src/AB08ND.f b/src/AB08ND.f index 806c6fb..bf27575 100644 --- a/src/AB08ND.f +++ b/src/AB08ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB08ND( EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ NU, RANK, DINFZ, NKROR, NKROL, INFZ, KRONR, $ KRONL, AF, LDAF, BF, LDBF, TOL, IWORK, DWORK, diff --git a/src/AB08NW.f b/src/AB08NW.f index 65f8860..025abc7 100644 --- a/src/AB08NW.f +++ b/src/AB08NW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB08NW( EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ NFZ, NRANK, NIZ, DINFZ, NKROR, NINFE, NKROL, $ INFZ, KRONR, INFE, KRONL, E, LDE, TOL, IWORK, diff --git a/src/AB08NX.f b/src/AB08NX.f index 1284d83..d963137 100644 --- a/src/AB08NX.f +++ b/src/AB08NX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB08NX( N, M, P, RO, SIGMA, SVLMAX, ABCD, LDABCD, $ NINFZ, INFZ, KRONL, MU, NU, NKROL, TOL, IWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/AB08NY.f b/src/AB08NY.f index 3c00684..10c9557 100644 --- a/src/AB08NY.f +++ b/src/AB08NY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB08NY( FIRST, N, M, P, SVLMAX, ABCD, LDABCD, NINFZ, $ NR, PR, DINFZ, NKRONL, INFZ, KRONL, TOL, IWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/AB08NZ.f b/src/AB08NZ.f index bbd1d89..40e42ae 100644 --- a/src/AB08NZ.f +++ b/src/AB08NZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB08NZ( EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ NU, RANK, DINFZ, NKROR, NKROL, INFZ, KRONR, $ KRONL, AF, LDAF, BF, LDBF, TOL, IWORK, DWORK, diff --git a/src/AB09AD.f b/src/AB09AD.f index ce729de..8cb02ef 100644 --- a/src/AB09AD.f +++ b/src/AB09AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09AD( DICO, JOB, EQUIL, ORDSEL, N, M, P, NR, A, LDA, $ B, LDB, C, LDC, HSV, TOL, IWORK, DWORK, LDWORK, $ IWARN, INFO ) diff --git a/src/AB09AX.f b/src/AB09AX.f index 0a89848..6770811 100644 --- a/src/AB09AX.f +++ b/src/AB09AX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09AX( DICO, JOB, ORDSEL, N, M, P, NR, A, LDA, B, LDB, $ C, LDC, HSV, T, LDT, TI, LDTI, TOL, IWORK, $ DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB09BD.f b/src/AB09BD.f index cfd4e39..b4df9bb 100644 --- a/src/AB09BD.f +++ b/src/AB09BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09BD( DICO, JOB, EQUIL, ORDSEL, N, M, P, NR, A, LDA, $ B, LDB, C, LDC, D, LDD, HSV, TOL1, TOL2, IWORK, $ DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB09BX.f b/src/AB09BX.f index 376b336..220da7c 100644 --- a/src/AB09BX.f +++ b/src/AB09BX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09BX( DICO, JOB, ORDSEL, N, M, P, NR, A, LDA, B, LDB, $ C, LDC, D, LDD, HSV, T, LDT, TI, LDTI, TOL1, $ TOL2, IWORK, DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB09CD.f b/src/AB09CD.f index edbc69a..0b9c3fc 100644 --- a/src/AB09CD.f +++ b/src/AB09CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09CD( DICO, EQUIL, ORDSEL, N, M, P, NR, A, LDA, B, $ LDB, C, LDC, D, LDD, HSV, TOL1, TOL2, IWORK, $ DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB09CX.f b/src/AB09CX.f index c5d6d73..b7874c0 100644 --- a/src/AB09CX.f +++ b/src/AB09CX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09CX( DICO, ORDSEL, N, M, P, NR, A, LDA, B, LDB, $ C, LDC, D, LDD, HSV, TOL1, TOL2, IWORK, $ DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB09DD.f b/src/AB09DD.f index ca44bdf..203c044 100644 --- a/src/AB09DD.f +++ b/src/AB09DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09DD( DICO, N, M, P, NR, A, LDA, B, LDB, C, LDC, $ D, LDD, RCOND, IWORK, DWORK, INFO ) C diff --git a/src/AB09ED.f b/src/AB09ED.f index 4c607c1..93248d3 100644 --- a/src/AB09ED.f +++ b/src/AB09ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09ED( DICO, EQUIL, ORDSEL, N, M, P, NR, ALPHA, $ A, LDA, B, LDB, C, LDC, D, LDD, NS, HSV, TOL1, $ TOL2, IWORK, DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB09FD.f b/src/AB09FD.f index a330f45..4a8c5c7 100644 --- a/src/AB09FD.f +++ b/src/AB09FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09FD( DICO, JOBCF, FACT, JOBMR, EQUIL, ORDSEL, N, M, $ P, NR, ALPHA, A, LDA, B, LDB, C, LDC, NQ, HSV, $ TOL1, TOL2, IWORK, DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB09GD.f b/src/AB09GD.f index d3fda9a..74fba54 100644 --- a/src/AB09GD.f +++ b/src/AB09GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09GD( DICO, JOBCF, FACT, JOBMR, EQUIL, ORDSEL, N, M, $ P, NR, ALPHA, A, LDA, B, LDB, C, LDC, D, LDD, $ NQ, HSV, TOL1, TOL2, TOL3, IWORK, DWORK, diff --git a/src/AB09HD.f b/src/AB09HD.f index b3dc373..2315bd2 100644 --- a/src/AB09HD.f +++ b/src/AB09HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09HD( DICO, JOB, EQUIL, ORDSEL, N, M, P, NR, ALPHA, $ BETA, A, LDA, B, LDB, C, LDC, D, LDD, NS, HSV, $ TOL1, TOL2, IWORK, DWORK, LDWORK, BWORK, IWARN, diff --git a/src/AB09HX.f b/src/AB09HX.f index 4770fe9..86b323c 100644 --- a/src/AB09HX.f +++ b/src/AB09HX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09HX( DICO, JOB, ORDSEL, N, M, P, NR, A, LDA, B, LDB, $ C, LDC, D, LDD, HSV, T, LDT, TI, LDTI, TOL1, $ TOL2, IWORK, DWORK, LDWORK, BWORK, IWARN, diff --git a/src/AB09HY.f b/src/AB09HY.f index 14ffd8c..fd3f6d8 100644 --- a/src/AB09HY.f +++ b/src/AB09HY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09HY( N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ SCALEC, SCALEO, S, LDS, R, LDR, IWORK, $ DWORK, LDWORK, BWORK, INFO ) diff --git a/src/AB09ID.f b/src/AB09ID.f index 7ba5d13..924e0c9 100644 --- a/src/AB09ID.f +++ b/src/AB09ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09ID( DICO, JOBC, JOBO, JOB, WEIGHT, EQUIL, ORDSEL, $ N, M, P, NV, PV, NW, MW, NR, ALPHA, ALPHAC, $ ALPHAO, A, LDA, B, LDB, C, LDC, D, LDD, diff --git a/src/AB09IX.f b/src/AB09IX.f index 7e022cc..dfbc9b7 100644 --- a/src/AB09IX.f +++ b/src/AB09IX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09IX( DICO, JOB, FACT, ORDSEL, N, M, P, NR, $ SCALEC, SCALEO, A, LDA, B, LDB, C, LDC, D, LDD, $ TI, LDTI, T, LDT, NMINR, HSV, TOL1, TOL2, diff --git a/src/AB09IY.f b/src/AB09IY.f index 6a06c7b..1cbb00b 100644 --- a/src/AB09IY.f +++ b/src/AB09IY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09IY( DICO, JOBC, JOBO, WEIGHT, N, M, P, NV, PV, $ NW, MW, ALPHAC, ALPHAO, A, LDA, B, LDB, C, LDC, $ AV, LDAV, BV, LDBV, CV, LDCV, DV, LDDV, diff --git a/src/AB09JD.f b/src/AB09JD.f index 00247ae..fdc1e43 100644 --- a/src/AB09JD.f +++ b/src/AB09JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09JD( JOBV, JOBW, JOBINV, DICO, EQUIL, ORDSEL, $ N, NV, NW, M, P, NR, ALPHA, A, LDA, B, LDB, $ C, LDC, D, LDD, AV, LDAV, BV, LDBV, diff --git a/src/AB09JV.f b/src/AB09JV.f index af4b260..4d5d5c4 100644 --- a/src/AB09JV.f +++ b/src/AB09JV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09JV( JOB, DICO, JOBEV, STBCHK, N, M, P, NV, PV, $ A, LDA, B, LDB, C, LDC, D, LDD, AV, LDAV, $ EV, LDEV, BV, LDBV, CV, LDCV, DV, LDDV, IWORK, diff --git a/src/AB09JW.f b/src/AB09JW.f index f7d9728..c31a2b8 100644 --- a/src/AB09JW.f +++ b/src/AB09JW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09JW( JOB, DICO, JOBEW, STBCHK, N, M, P, NW, MW, $ A, LDA, B, LDB, C, LDC, D, LDD, AW, LDAW, $ EW, LDEW, BW, LDBW, CW, LDCW, DW, LDDW, IWORK, diff --git a/src/AB09JX.f b/src/AB09JX.f index 8700c18..39a12fe 100644 --- a/src/AB09JX.f +++ b/src/AB09JX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09JX( DICO, STDOM, EVTYPE, N, ALPHA, ER, EI, ED, $ TOLINF, INFO ) C diff --git a/src/AB09KD.f b/src/AB09KD.f index 9b51df3..f2c3491 100644 --- a/src/AB09KD.f +++ b/src/AB09KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09KD( JOB, DICO, WEIGHT, EQUIL, ORDSEL, N, NV, NW, M, $ P, NR, ALPHA, A, LDA, B, LDB, C, LDC, D, LDD, $ AV, LDAV, BV, LDBV, CV, LDCV, DV, LDDV, diff --git a/src/AB09KX.f b/src/AB09KX.f index 4b81241..bf1ee7d 100644 --- a/src/AB09KX.f +++ b/src/AB09KX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09KX( JOB, DICO, WEIGHT, N, NV, NW, M, P, $ A, LDA, B, LDB, C, LDC, D, LDD, $ AV, LDAV, BV, LDBV, CV, LDCV, DV, LDDV, diff --git a/src/AB09MD.f b/src/AB09MD.f index 52e904e..73533af 100644 --- a/src/AB09MD.f +++ b/src/AB09MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09MD( DICO, JOB, EQUIL, ORDSEL, N, M, P, NR, ALPHA, $ A, LDA, B, LDB, C, LDC, NS, HSV, TOL, IWORK, $ DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB09ND.f b/src/AB09ND.f index 4da2741..780285b 100644 --- a/src/AB09ND.f +++ b/src/AB09ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB09ND( DICO, JOB, EQUIL, ORDSEL, N, M, P, NR, ALPHA, $ A, LDA, B, LDB, C, LDC, D, LDD, NS, HSV, TOL1, $ TOL2, IWORK, DWORK, LDWORK, IWARN, INFO ) diff --git a/src/AB13AD.f b/src/AB13AD.f index 94c9b63..b86f84a 100644 --- a/src/AB13AD.f +++ b/src/AB13AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION AB13AD( DICO, EQUIL, N, M, P, ALPHA, A, $ LDA, B, LDB, C, LDC, NS, HSV, $ DWORK, LDWORK, INFO ) diff --git a/src/AB13AX.f b/src/AB13AX.f index 188a4d6..ab48e22 100644 --- a/src/AB13AX.f +++ b/src/AB13AX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION AB13AX( DICO, N, M, P, A, LDA, B, LDB, $ C, LDC, HSV, DWORK, LDWORK, $ INFO ) diff --git a/src/AB13BD.f b/src/AB13BD.f index c1c4a44..88b5937 100644 --- a/src/AB13BD.f +++ b/src/AB13BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION AB13BD( DICO, JOBN, N, M, P, A, LDA, $ B, LDB, C, LDC, D, LDD, NQ, TOL, $ DWORK, LDWORK, IWARN, INFO) diff --git a/src/AB13CD.f b/src/AB13CD.f index 6471c60..4386965 100644 --- a/src/AB13CD.f +++ b/src/AB13CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION AB13CD( N, M, NP, A, LDA, B, LDB, C, $ LDC, D, LDD, TOL, IWORK, DWORK, $ LDWORK, CWORK, LCWORK, BWORK, diff --git a/src/AB13DD.f b/src/AB13DD.f index 45f39b4..bf226a3 100644 --- a/src/AB13DD.f +++ b/src/AB13DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB13DD( DICO, JOBE, EQUIL, JOBD, N, M, P, FPEAK, $ A, LDA, E, LDE, B, LDB, C, LDC, D, LDD, GPEAK, $ TOL, IWORK, DWORK, LDWORK, CWORK, LCWORK, diff --git a/src/AB13DX.f b/src/AB13DX.f index 60f6b63..87abbba 100644 --- a/src/AB13DX.f +++ b/src/AB13DX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION AB13DX( DICO, JOBE, JOBD, N, M, P, $ OMEGA, A, LDA, E, LDE, B, LDB, $ C, LDC, D, LDD, IWORK, DWORK, diff --git a/src/AB13ED.f b/src/AB13ED.f index 0b982d6..dcb2c1f 100644 --- a/src/AB13ED.f +++ b/src/AB13ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB13ED( N, A, LDA, LOW, HIGH, TOL, DWORK, LDWORK, $ INFO ) C diff --git a/src/AB13FD.f b/src/AB13FD.f index a608783..3d04b41 100644 --- a/src/AB13FD.f +++ b/src/AB13FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB13FD( N, A, LDA, BETA, OMEGA, TOL, DWORK, LDWORK, $ CWORK, LCWORK, INFO ) C diff --git a/src/AB13HD.f b/src/AB13HD.f index 6402616..96c834a 100644 --- a/src/AB13HD.f +++ b/src/AB13HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB13HD( DICO, JOBE, EQUIL, JOBD, CKPROP, REDUCE, POLES, $ N, M, P, RANKE, FPEAK, A, LDA, E, LDE, B, LDB, $ C, LDC, D, LDD, NR, GPEAK, TOL, IWORK, DWORK, diff --git a/src/AB13ID.f b/src/AB13ID.f index e011849..fa1efb7 100644 --- a/src/AB13ID.f +++ b/src/AB13ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION AB13ID( JOBSYS, JOBEIG, EQUIL, CKSING, RESTOR, $ UPDATE, N, M, P, A, LDA, E, LDE, B, LDB, $ C, LDC, NR, RANKE, TOL, IWORK, DWORK, diff --git a/src/AB13MD.f b/src/AB13MD.f index 2fc175f..ed83614 100644 --- a/src/AB13MD.f +++ b/src/AB13MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB13MD( FACT, N, Z, LDZ, M, NBLOCK, ITYPE, X, BOUND, D, $ G, IWORK, DWORK, LDWORK, ZWORK, LZWORK, INFO ) C diff --git a/src/AB8NXZ.f b/src/AB8NXZ.f index 3acaa33..9d3b2c8 100644 --- a/src/AB8NXZ.f +++ b/src/AB8NXZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AB8NXZ( N, M, P, RO, SIGMA, SVLMAX, ABCD, LDABCD, $ NINFZ, INFZ, KRONL, MU, NU, NKROL, TOL, IWORK, $ DWORK, ZWORK, LZWORK, INFO ) diff --git a/src/AG07BD.f b/src/AG07BD.f index 4ff01db..6aba1f6 100644 --- a/src/AG07BD.f +++ b/src/AG07BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AG07BD( JOBE, N, M, A, LDA, E, LDE, B, LDB, C, LDC, $ D, LDD, AI, LDAI, EI, LDEI, BI, LDBI, CI, LDCI, $ DI, LDDI, INFO ) diff --git a/src/AG08BD.f b/src/AG08BD.f index 298cc65..430795e 100644 --- a/src/AG08BD.f +++ b/src/AG08BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AG08BD( EQUIL, L, N, M, P, A, LDA, E, LDE, B, LDB, $ C, LDC, D, LDD, NFZ, NRANK, NIZ, DINFZ, NKROR, $ NINFE, NKROL, INFZ, KRONR, INFE, KRONL, diff --git a/src/AG08BY.f b/src/AG08BY.f index 4ba3a15..5db128f 100644 --- a/src/AG08BY.f +++ b/src/AG08BY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AG08BY( FIRST, N, M, P, SVLMAX, ABCD, LDABCD, E, LDE, $ NR, PR, NINFZ, DINFZ, NKRONL, INFZ, KRONL, $ TOL, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/AG08BZ.f b/src/AG08BZ.f index 09c9734..5b5e2b8 100644 --- a/src/AG08BZ.f +++ b/src/AG08BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AG08BZ( EQUIL, L, N, M, P, A, LDA, E, LDE, B, LDB, $ C, LDC, D, LDD, NFZ, NRANK, NIZ, DINFZ, NKROR, $ NINFE, NKROL, INFZ, KRONR, INFE, KRONL, diff --git a/src/AG8BYZ.f b/src/AG8BYZ.f index ffd620e..e4578ed 100644 --- a/src/AG8BYZ.f +++ b/src/AG8BYZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE AG8BYZ( FIRST, N, M, P, SVLMAX, ABCD, LDABCD, E, LDE, $ NR, PR, NINFZ, DINFZ, NKRONL, INFZ, KRONL, $ TOL, IWORK, DWORK, ZWORK, LZWORK, INFO ) diff --git a/src/BB01AD.f b/src/BB01AD.f index b61eaf8..7cea151 100644 --- a/src/BB01AD.f +++ b/src/BB01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE BB01AD(DEF, NR, DPAR, IPAR, BPAR, CHPAR, VEC, N, M, P, 1 A, LDA, B, LDB, C, LDC, G, LDG, Q, LDQ, X, LDX, 2 DWORK, LDWORK, INFO) diff --git a/src/BB02AD.f b/src/BB02AD.f index 9e09ebf..5474b24 100644 --- a/src/BB02AD.f +++ b/src/BB02AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE BB02AD(DEF, NR, DPAR, IPAR, BPAR, CHPAR, VEC, N, M, P, 1 A, LDA, B, LDB, C, LDC, Q, LDQ, R, LDR, S, LDS, 2 X, LDX, DWORK, LDWORK, INFO) diff --git a/src/BB03AD.f b/src/BB03AD.f index bd7c7aa..e4cc4af 100644 --- a/src/BB03AD.f +++ b/src/BB03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE BB03AD(DEF, NR, DPAR, IPAR, VEC, N, M, E, LDE, A, LDA, 1 Y, LDY, B, LDB, X, LDX, U, LDU, NOTE, DWORK, 2 LDWORK, INFO) diff --git a/src/BB04AD.f b/src/BB04AD.f index b5ce2ea..7afa3ea 100644 --- a/src/BB04AD.f +++ b/src/BB04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE BB04AD(DEF, NR, DPAR, IPAR, VEC, N, M, E, LDE, A, LDA, 1 Y, LDY, B, LDB, X, LDX, U, LDU, NOTE, DWORK, 2 LDWORK, INFO) diff --git a/src/BD01AD.f b/src/BD01AD.f index 2ae38ad..07aca9a 100644 --- a/src/BD01AD.f +++ b/src/BD01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE BD01AD( DEF, NR, DPAR, IPAR, VEC, N, M, P, E, LDE, A, 1 LDA, B, LDB, C, LDC, D, LDD, NOTE, DWORK, 2 LDWORK, INFO ) diff --git a/src/BD02AD.f b/src/BD02AD.f index b87bd38..5cd0925 100644 --- a/src/BD02AD.f +++ b/src/BD02AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE BD02AD( DEF, NR, DPAR, IPAR, VEC, N, M, P, E, LDE, A, 1 LDA, B, LDB, C, LDC, D, LDD, NOTE, DWORK, 2 LDWORK, INFO ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0bb6d47..0ae6bca 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -101,7 +101,7 @@ INCLUDE(CheckFortranFunctionExists) MACRO(ADD_ROUTINE_IF_REQUIRED ROUTINE VAR SOURCE_FILE) SET(_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) - SET(CMAKE_REQUIRED_LIBRARIES BLAS::BLAS LAPACK::LAPACK) + SET(CMAKE_REQUIRED_LIBRARIES PRIVATE BLAS::BLAS LAPACK::LAPACK) Check_Fortran_Function_Exists(${ROUTINE} ${VAR}) IF (NOT ${VAR}) diff --git a/src/DE01OD.f b/src/DE01OD.f index bd3c9a2..bc83ad0 100644 --- a/src/DE01OD.f +++ b/src/DE01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE DE01OD( CONV, N, A, B, INFO ) C C PURPOSE diff --git a/src/DE01PD.f b/src/DE01PD.f index a142bf6..ab82f84 100644 --- a/src/DE01PD.f +++ b/src/DE01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE DE01PD( CONV, WGHT, N, A, B, W, INFO ) C C PURPOSE diff --git a/src/DF01MD.f b/src/DF01MD.f index d00656f..95a4f72 100644 --- a/src/DF01MD.f +++ b/src/DF01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE DF01MD( SICO, N, DT, A, DWORK, INFO ) C C PURPOSE diff --git a/src/DG01MD.f b/src/DG01MD.f index dc64b3b..a3d47d2 100644 --- a/src/DG01MD.f +++ b/src/DG01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE DG01MD( INDI, N, XR, XI, INFO ) C C PURPOSE diff --git a/src/DG01ND.f b/src/DG01ND.f index 0a28201..4bb8523 100644 --- a/src/DG01ND.f +++ b/src/DG01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE DG01ND( INDI, N, XR, XI, INFO ) C C PURPOSE diff --git a/src/DG01NY.f b/src/DG01NY.f index fcb18cc..1e03f9d 100644 --- a/src/DG01NY.f +++ b/src/DG01NY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE DG01NY( INDI, N, XR, XI ) C C PURPOSE diff --git a/src/DG01OD.f b/src/DG01OD.f index 23c4ffe..f37ba2f 100644 --- a/src/DG01OD.f +++ b/src/DG01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE DG01OD( SCR, WGHT, N, A, W, INFO ) C C PURPOSE diff --git a/src/DK01MD.f b/src/DK01MD.f index 0a0d7f3..ef685a3 100644 --- a/src/DK01MD.f +++ b/src/DK01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE DK01MD( TYPE, N, A, INFO ) C C PURPOSE diff --git a/src/FB01QD.f b/src/FB01QD.f index 847e7b8..35c51f7 100644 --- a/src/FB01QD.f +++ b/src/FB01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE FB01QD( JOBK, MULTBQ, N, M, P, S, LDS, A, LDA, B, $ LDB, Q, LDQ, C, LDC, R, LDR, K, LDK, TOL, $ IWORK, DWORK, LDWORK, INFO ) diff --git a/src/FB01RD.f b/src/FB01RD.f index 1b47863..1e59e17 100644 --- a/src/FB01RD.f +++ b/src/FB01RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE FB01RD( JOBK, MULTBQ, N, M, P, S, LDS, A, LDA, B, $ LDB, Q, LDQ, C, LDC, R, LDR, K, LDK, TOL, $ IWORK, DWORK, LDWORK, INFO ) diff --git a/src/FB01SD.f b/src/FB01SD.f index 3ba503a..847861b 100644 --- a/src/FB01SD.f +++ b/src/FB01SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE FB01SD( JOBX, MULTAB, MULTRC, N, M, P, SINV, LDSINV, $ AINV, LDAINV, B, LDB, RINV, LDRINV, C, LDC, $ QINV, LDQINV, X, RINVY, Z, E, TOL, IWORK, diff --git a/src/FB01TD.f b/src/FB01TD.f index c4b6f62..452d1ea 100644 --- a/src/FB01TD.f +++ b/src/FB01TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE FB01TD( JOBX, MULTRC, N, M, P, SINV, LDSINV, AINV, $ LDAINV, AINVB, LDAINB, RINV, LDRINV, C, LDC, $ QINV, LDQINV, X, RINVY, Z, E, TOL, IWORK, diff --git a/src/FB01VD.f b/src/FB01VD.f index 624256c..97b2dab 100644 --- a/src/FB01VD.f +++ b/src/FB01VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE FB01VD( N, M, L, P, LDP, A, LDA, B, LDB, C, LDC, Q, $ LDQ, R, LDR, K, LDK, TOL, IWORK, DWORK, LDWORK, $ INFO ) diff --git a/src/FD01AD.f b/src/FD01AD.f index 44ef96c..453550d 100644 --- a/src/FD01AD.f +++ b/src/FD01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE FD01AD( JP, L, LAMBDA, XIN, YIN, EFOR, XF, EPSBCK, $ CTETA, STETA, YQ, EPOS, EOUT, SALPH, IWARN, $ INFO ) diff --git a/src/IB01AD.f b/src/IB01AD.f index 3e9615b..097c4cc 100644 --- a/src/IB01AD.f +++ b/src/IB01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01AD( METH, ALG, JOBD, BATCH, CONCT, CTRL, NOBR, M, $ L, NSMP, U, LDU, Y, LDY, N, R, LDR, SV, RCOND, $ TOL, IWORK, DWORK, LDWORK, IWARN, INFO ) @@ -578,7 +581,7 @@ SUBROUTINE IB01AD( METH, ALG, JOBD, BATCH, CONCT, CTRL, NOBR, M, ELSE IF ( FQRALG ) THEN IF ( .NOT.ONEBCH .AND. CONNEC ) THEN MINWRK = NR*( M + L + 3 ) - ELSE IF ( FIRST .OR. INTERM ) THEN + ELSE IF ( (FIRST .OR. INTERM) .AND. .NOT. ONEBCH ) THEN MINWRK = NR*( M + L + 1 ) ELSE MINWRK = 2*NR*( M + L + 1 ) + NR diff --git a/src/IB01BD.f b/src/IB01BD.f index 2cbac3d..12c5b7c 100644 --- a/src/IB01BD.f +++ b/src/IB01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01BD( METH, JOB, JOBCK, NOBR, N, M, L, NSMPL, R, $ LDR, A, LDA, C, LDC, B, LDB, D, LDD, Q, LDQ, $ RY, LDRY, S, LDS, K, LDK, TOL, IWORK, DWORK, diff --git a/src/IB01CD.f b/src/IB01CD.f index ebe07b9..499d9fd 100644 --- a/src/IB01CD.f +++ b/src/IB01CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01CD( JOBX0, COMUSE, JOB, N, M, L, NSMP, A, LDA, B, $ LDB, C, LDC, D, LDD, U, LDU, Y, LDY, X0, V, $ LDV, TOL, IWORK, DWORK, LDWORK, IWARN, INFO ) diff --git a/src/IB01MD.f b/src/IB01MD.f index 83dda15..4528884 100644 --- a/src/IB01MD.f +++ b/src/IB01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01MD( METH, ALG, BATCH, CONCT, NOBR, M, L, NSMP, U, $ LDU, Y, LDY, R, LDR, IWORK, DWORK, LDWORK, $ IWARN, INFO ) diff --git a/src/IB01MY.f b/src/IB01MY.f index d39bf34..8275b43 100644 --- a/src/IB01MY.f +++ b/src/IB01MY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01MY( METH, BATCH, CONCT, NOBR, M, L, NSMP, U, LDU, $ Y, LDY, R, LDR, IWORK, DWORK, LDWORK, IWARN, $ INFO ) diff --git a/src/IB01ND.f b/src/IB01ND.f index 144014f..d18eaa2 100644 --- a/src/IB01ND.f +++ b/src/IB01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01ND( METH, JOBD, NOBR, M, L, R, LDR, SV, TOL, IWORK, $ DWORK, LDWORK, IWARN, INFO ) C diff --git a/src/IB01OD.f b/src/IB01OD.f index 33b5250..2f9fe32 100644 --- a/src/IB01OD.f +++ b/src/IB01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01OD( CTRL, NOBR, L, SV, N, TOL, IWARN, INFO ) C C PURPOSE diff --git a/src/IB01OY.f b/src/IB01OY.f index 22bab48..9efe946 100644 --- a/src/IB01OY.f +++ b/src/IB01OY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01OY( NS, NMAX, N, SV, INFO ) C C PURPOSE diff --git a/src/IB01PD.f b/src/IB01PD.f index feff579..165abd0 100644 --- a/src/IB01PD.f +++ b/src/IB01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01PD( METH, JOB, JOBCV, NOBR, N, M, L, NSMPL, R, $ LDR, A, LDA, C, LDC, B, LDB, D, LDD, Q, LDQ, $ RY, LDRY, S, LDS, O, LDO, TOL, IWORK, DWORK, diff --git a/src/IB01PX.f b/src/IB01PX.f index 445cde1..aaa2edd 100644 --- a/src/IB01PX.f +++ b/src/IB01PX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01PX( JOB, NOBR, N, M, L, UF, LDUF, UN, LDUN, UL, $ LDUL, PGAL, LDPGAL, K, LDK, R, LDR, X, B, LDB, $ D, LDD, TOL, IWORK, DWORK, LDWORK, IWARN, diff --git a/src/IB01PY.f b/src/IB01PY.f index a888545..29eea13 100644 --- a/src/IB01PY.f +++ b/src/IB01PY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01PY( METH, JOB, NOBR, N, M, L, RANKR1, UL, LDUL, $ R1, LDR1, TAU1, PGAL, LDPGAL, K, LDK, R, LDR, $ H, LDH, B, LDB, D, LDD, TOL, IWORK, DWORK, diff --git a/src/IB01QD.f b/src/IB01QD.f index 8df4891..25df5c7 100644 --- a/src/IB01QD.f +++ b/src/IB01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01QD( JOBX0, JOB, N, M, L, NSMP, A, LDA, C, LDC, U, $ LDU, Y, LDY, X0, B, LDB, D, LDD, TOL, IWORK, $ DWORK, LDWORK, IWARN, INFO ) diff --git a/src/IB01RD.f b/src/IB01RD.f index 93bd8db..8c5ebc8 100644 --- a/src/IB01RD.f +++ b/src/IB01RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB01RD( JOB, N, M, L, NSMP, A, LDA, B, LDB, C, LDC, D, $ LDD, U, LDU, Y, LDY, X0, TOL, IWORK, DWORK, $ LDWORK, IWARN, INFO ) diff --git a/src/IB03AD.f b/src/IB03AD.f index 6abf591..70ad7bb 100644 --- a/src/IB03AD.f +++ b/src/IB03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB03AD( INIT, ALG, STOR, NOBR, M, L, NSMP, N, NN, $ ITMAX1, ITMAX2, NPRINT, U, LDU, Y, LDY, X, LX, $ TOL1, TOL2, IWORK, DWORK, LDWORK, IWARN, INFO ) diff --git a/src/IB03BD.f b/src/IB03BD.f index cb62c58..3a036cc 100644 --- a/src/IB03BD.f +++ b/src/IB03BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE IB03BD( INIT, NOBR, M, L, NSMP, N, NN, ITMAX1, ITMAX2, $ NPRINT, U, LDU, Y, LDY, X, LX, TOL1, TOL2, $ IWORK, DWORK, LDWORK, IWARN, INFO ) diff --git a/src/MA01AD.f b/src/MA01AD.f index 4ae15ca..6230824 100644 --- a/src/MA01AD.f +++ b/src/MA01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA01AD( XR, XI, YR, YI ) C C PURPOSE diff --git a/src/MA01BD.f b/src/MA01BD.f index 7a53396..5e5896c 100644 --- a/src/MA01BD.f +++ b/src/MA01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA01BD( BASE, LGBAS, K, S, A, INCA, ALPHA, BETA, SCAL ) C C PURPOSE diff --git a/src/MA01BZ.f b/src/MA01BZ.f index 63625c3..bad6330 100644 --- a/src/MA01BZ.f +++ b/src/MA01BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA01BZ( BASE, K, S, A, INCA, ALPHA, BETA, SCAL ) C C PURPOSE diff --git a/src/MA01CD.f b/src/MA01CD.f index 9d94987..254d138 100644 --- a/src/MA01CD.f +++ b/src/MA01CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C INTEGER FUNCTION MA01CD( A, IA, B, IB ) C C PURPOSE diff --git a/src/MA01DD.f b/src/MA01DD.f index 8330375..f32b67e 100644 --- a/src/MA01DD.f +++ b/src/MA01DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA01DD( AR1, AI1, AR2, AI2, EPS, SAFEMN, D ) C C PURPOSE diff --git a/src/MA01DZ.f b/src/MA01DZ.f index afdcb93..fc0f84f 100644 --- a/src/MA01DZ.f +++ b/src/MA01DZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA01DZ( AR1, AI1, B1, AR2, AI2, B2, EPS, SAFEMN, D1, $ D2, IWARN ) C diff --git a/src/MA02AD.f b/src/MA02AD.f index 7c44956..b646813 100644 --- a/src/MA02AD.f +++ b/src/MA02AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02AD( JOB, M, N, A, LDA, B, LDB ) C C PURPOSE diff --git a/src/MA02AZ.f b/src/MA02AZ.f index bddbe09..2c731e5 100644 --- a/src/MA02AZ.f +++ b/src/MA02AZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02AZ( TRANS, JOB, M, N, A, LDA, B, LDB ) C C PURPOSE diff --git a/src/MA02BD.f b/src/MA02BD.f index 1aea31e..b3fa299 100644 --- a/src/MA02BD.f +++ b/src/MA02BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02BD( SIDE, M, N, A, LDA ) C C PURPOSE diff --git a/src/MA02BZ.f b/src/MA02BZ.f index e101109..456fcdc 100644 --- a/src/MA02BZ.f +++ b/src/MA02BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02BZ( SIDE, M, N, A, LDA ) C C PURPOSE diff --git a/src/MA02CD.f b/src/MA02CD.f index 9168aec..41393b7 100644 --- a/src/MA02CD.f +++ b/src/MA02CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02CD( N, KL, KU, A, LDA ) C C PURPOSE diff --git a/src/MA02CZ.f b/src/MA02CZ.f index eb4e69e..51b9c99 100644 --- a/src/MA02CZ.f +++ b/src/MA02CZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02CZ( N, KL, KU, A, LDA ) C C PURPOSE diff --git a/src/MA02DD.f b/src/MA02DD.f index 941f898..e275546 100644 --- a/src/MA02DD.f +++ b/src/MA02DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02DD( JOB, UPLO, N, A, LDA, AP ) C C PURPOSE diff --git a/src/MA02ED.f b/src/MA02ED.f index a8e0953..e17726b 100644 --- a/src/MA02ED.f +++ b/src/MA02ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02ED( UPLO, N, A, LDA ) C C PURPOSE diff --git a/src/MA02ES.f b/src/MA02ES.f index 0868b9c..1ea7828 100644 --- a/src/MA02ES.f +++ b/src/MA02ES.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02ES( UPLO, N, A, LDA ) C C PURPOSE diff --git a/src/MA02EZ.f b/src/MA02EZ.f index 256ef4a..ab1a4cc 100644 --- a/src/MA02EZ.f +++ b/src/MA02EZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02EZ( UPLO, TRANS, SKEW, N, A, LDA ) C C PURPOSE diff --git a/src/MA02FD.f b/src/MA02FD.f index 898f56d..46017f8 100644 --- a/src/MA02FD.f +++ b/src/MA02FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02FD( X1, X2, C, S, INFO ) C C PURPOSE diff --git a/src/MA02GD.f b/src/MA02GD.f index 3e368db..7eb1037 100644 --- a/src/MA02GD.f +++ b/src/MA02GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02GD( N, A, LDA, K1, K2, IPIV, INCX ) C C PURPOSE diff --git a/src/MA02GZ.f b/src/MA02GZ.f index b5f5bff..017800d 100644 --- a/src/MA02GZ.f +++ b/src/MA02GZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02GZ( N, A, LDA, K1, K2, IPIV, INCX ) C C PURPOSE diff --git a/src/MA02HD.f b/src/MA02HD.f index 7cf3ef4..b705a60 100644 --- a/src/MA02HD.f +++ b/src/MA02HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION MA02HD( JOB, M, N, DIAG, A, LDA ) C C PURPOSE diff --git a/src/MA02HZ.f b/src/MA02HZ.f index 30ce7a2..886c61f 100644 --- a/src/MA02HZ.f +++ b/src/MA02HZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION MA02HZ( JOB, M, N, DIAG, A, LDA ) C C PURPOSE diff --git a/src/MA02ID.f b/src/MA02ID.f index 319c881..e23c23c 100644 --- a/src/MA02ID.f +++ b/src/MA02ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MA02ID( TYP, NORM, N, A, LDA, QG, $ LDQG, DWORK ) C diff --git a/src/MA02IZ.f b/src/MA02IZ.f index d4487e3..f6de339 100644 --- a/src/MA02IZ.f +++ b/src/MA02IZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MA02IZ( TYP, NORM, N, A, LDA, QG, $ LDQG, DWORK ) C diff --git a/src/MA02JD.f b/src/MA02JD.f index 46b5e9f..944ad81 100644 --- a/src/MA02JD.f +++ b/src/MA02JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MA02JD( LTRAN1, LTRAN2, N, Q1, LDQ1, Q2, $ LDQ2, RES, LDRES ) C diff --git a/src/MA02JZ.f b/src/MA02JZ.f index e1a8e45..34150c8 100644 --- a/src/MA02JZ.f +++ b/src/MA02JZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MA02JZ( LTRAN1, LTRAN2, N, Q1, LDQ1, Q2, $ LDQ2, RES, LDRES ) C diff --git a/src/MA02MD.f b/src/MA02MD.f index dbb32e7..699726f 100644 --- a/src/MA02MD.f +++ b/src/MA02MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MA02MD( NORM, UPLO, N, A, LDA, DWORK ) C C PURPOSE diff --git a/src/MA02MZ.f b/src/MA02MZ.f index 96f00aa..65288f3 100644 --- a/src/MA02MZ.f +++ b/src/MA02MZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MA02MZ( NORM, UPLO, N, A, LDA, DWORK ) C C PURPOSE diff --git a/src/MA02NZ.f b/src/MA02NZ.f index 47103eb..75a6242 100644 --- a/src/MA02NZ.f +++ b/src/MA02NZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02NZ( UPLO, TRANS, SKEW, N, K, L, A, LDA ) C C PURPOSE diff --git a/src/MA02OD.f b/src/MA02OD.f index 5e679cc..101b711 100644 --- a/src/MA02OD.f +++ b/src/MA02OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C INTEGER FUNCTION MA02OD( SKEW, M, A, LDA, DE, LDDE ) C C PURPOSE diff --git a/src/MA02OZ.f b/src/MA02OZ.f index 80e41ce..ba81077 100644 --- a/src/MA02OZ.f +++ b/src/MA02OZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C INTEGER FUNCTION MA02OZ( SKEW, M, A, LDA, DE, LDDE ) C C PURPOSE diff --git a/src/MA02PD.f b/src/MA02PD.f index b3298a2..3fcef9d 100644 --- a/src/MA02PD.f +++ b/src/MA02PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02PD( M, N, A, LDA, NZR, NZC ) C C PURPOSE diff --git a/src/MA02PZ.f b/src/MA02PZ.f index 6cd2421..0229dc7 100644 --- a/src/MA02PZ.f +++ b/src/MA02PZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02PZ( M, N, A, LDA, NZR, NZC ) C C PURPOSE diff --git a/src/MA02RD.f b/src/MA02RD.f index 2b7e213..0c8e4a7 100644 --- a/src/MA02RD.f +++ b/src/MA02RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MA02RD( ID, N, D, E, INFO ) C C Purpose diff --git a/src/MA02SD.f b/src/MA02SD.f index ca2ecc1..c7155f3 100644 --- a/src/MA02SD.f +++ b/src/MA02SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MA02SD( M, N, A, LDA ) C C Purpose diff --git a/src/MB01KD.f b/src/MB01KD.f index edae564..cb660a3 100644 --- a/src/MB01KD.f +++ b/src/MB01KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01KD( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, $ C, LDC, INFO ) C diff --git a/src/MB01LD.f b/src/MB01LD.f index a8a7d2f..fe99450 100644 --- a/src/MB01LD.f +++ b/src/MB01LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01LD( UPLO, TRANS, M, N, ALPHA, BETA, R, LDR, A, LDA, $ X, LDX, DWORK, LDWORK, INFO ) C diff --git a/src/MB01MD.f b/src/MB01MD.f index c735efb..f32265a 100644 --- a/src/MB01MD.f +++ b/src/MB01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01MD( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, $ INCY ) C diff --git a/src/MB01ND.f b/src/MB01ND.f index 7da1364..338fa71 100644 --- a/src/MB01ND.f +++ b/src/MB01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01ND( UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA ) C C PURPOSE diff --git a/src/MB01OC.f b/src/MB01OC.f index 715cf7e..665ac70 100644 --- a/src/MB01OC.f +++ b/src/MB01OC.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01OC( UPLO, TRANS, N, ALPHA, BETA, R, LDR, H, LDH, X, $ LDX, INFO ) C diff --git a/src/MB01OD.f b/src/MB01OD.f index a584513..90995b3 100644 --- a/src/MB01OD.f +++ b/src/MB01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01OD( UPLO, TRANS, N, ALPHA, BETA, R, LDR, H, LDH, $ X, LDX, E, LDE, DWORK, LDWORK, INFO ) C diff --git a/src/MB01OE.f b/src/MB01OE.f index a42a863..9a5cc23 100644 --- a/src/MB01OE.f +++ b/src/MB01OE.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01OE( UPLO, TRANS, N, ALPHA, BETA, R, LDR, H, LDH, E, $ LDE ) C diff --git a/src/MB01OH.f b/src/MB01OH.f index 1d9366a..516c59a 100644 --- a/src/MB01OH.f +++ b/src/MB01OH.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01OH( UPLO, TRANS, N, ALPHA, BETA, R, LDR, H, LDH, A, $ LDA ) C diff --git a/src/MB01OO.f b/src/MB01OO.f index 33923fa..cad9b21 100644 --- a/src/MB01OO.f +++ b/src/MB01OO.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01OO( UPLO, TRANS, N, H, LDH, X, LDX, E, LDE, P, LDP, $ INFO ) C diff --git a/src/MB01OS.f b/src/MB01OS.f index fc06191..69a26c4 100644 --- a/src/MB01OS.f +++ b/src/MB01OS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01OS( UPLO, TRANS, N, H, LDH, X, LDX, P, LDP, INFO ) C C PURPOSE diff --git a/src/MB01OT.f b/src/MB01OT.f index f52fc19..d578d47 100644 --- a/src/MB01OT.f +++ b/src/MB01OT.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01OT( UPLO, TRANS, N, ALPHA, BETA, R, LDR, E, LDE, T, $ LDT ) C diff --git a/src/MB01PD.f b/src/MB01PD.f index bfedfb9..185b7ef 100644 --- a/src/MB01PD.f +++ b/src/MB01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01PD( SCUN, TYPE, M, N, KL, KU, ANRM, NBL, NROWS, A, $ LDA, INFO ) C diff --git a/src/MB01QD.f b/src/MB01QD.f index 1ce2d3b..2cc2f79 100644 --- a/src/MB01QD.f +++ b/src/MB01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01QD( TYPE, M, N, KL, KU, CFROM, CTO, NBL, NROWS, A, $ LDA, INFO ) C diff --git a/src/MB01RB.f b/src/MB01RB.f index a37d2c8..0ecf291 100644 --- a/src/MB01RB.f +++ b/src/MB01RB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01RB( SIDE, UPLO, TRANS, M, N, ALPHA, BETA, R, LDR, $ A, LDA, B, LDB, INFO ) C diff --git a/src/MB01RD.f b/src/MB01RD.f index 6ea0657..eb7d983 100644 --- a/src/MB01RD.f +++ b/src/MB01RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01RD( UPLO, TRANS, M, N, ALPHA, BETA, R, LDR, A, LDA, $ X, LDX, DWORK, LDWORK, INFO ) C diff --git a/src/MB01RH.f b/src/MB01RH.f index 767bb63..f431e57 100644 --- a/src/MB01RH.f +++ b/src/MB01RH.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01RH( UPLO, TRANS, N, ALPHA, BETA, R, LDR, H, LDH, $ X, LDX, DWORK, LDWORK, INFO ) C diff --git a/src/MB01RT.f b/src/MB01RT.f index 789176a..a6ba73a 100644 --- a/src/MB01RT.f +++ b/src/MB01RT.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01RT( UPLO, TRANS, N, ALPHA, BETA, R, LDR, E, LDE, $ X, LDX, DWORK, LDWORK, INFO ) C diff --git a/src/MB01RU.f b/src/MB01RU.f index df9f405..c8f56ee 100644 --- a/src/MB01RU.f +++ b/src/MB01RU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01RU( UPLO, TRANS, M, N, ALPHA, BETA, R, LDR, A, LDA, $ X, LDX, DWORK, LDWORK, INFO ) C diff --git a/src/MB01RW.f b/src/MB01RW.f index e7a4b2d..c74e4e7 100644 --- a/src/MB01RW.f +++ b/src/MB01RW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01RW( UPLO, TRANS, M, N, A, LDA, Z, LDZ, DWORK, $ INFO ) C diff --git a/src/MB01RX.f b/src/MB01RX.f index 75c05e3..0a66e1e 100644 --- a/src/MB01RX.f +++ b/src/MB01RX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01RX( SIDE, UPLO, TRANS, M, N, ALPHA, BETA, R, LDR, $ A, LDA, B, LDB, INFO ) C diff --git a/src/MB01RY.f b/src/MB01RY.f index d3cec99..fd990ca 100644 --- a/src/MB01RY.f +++ b/src/MB01RY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01RY( SIDE, UPLO, TRANS, M, ALPHA, BETA, R, LDR, H, $ LDH, B, LDB, DWORK, INFO ) C diff --git a/src/MB01SD.f b/src/MB01SD.f index 2e2d0c4..6e18217 100644 --- a/src/MB01SD.f +++ b/src/MB01SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01SD( JOBS, M, N, A, LDA, R, C ) C C PURPOSE diff --git a/src/MB01SS.f b/src/MB01SS.f index 7742151..4742a9a 100644 --- a/src/MB01SS.f +++ b/src/MB01SS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01SS( JOBS, UPLO, N, A, LDA, D ) C C PURPOSE diff --git a/src/MB01TD.f b/src/MB01TD.f index 1fa1aa1..19d6f78 100644 --- a/src/MB01TD.f +++ b/src/MB01TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01TD( N, A, LDA, B, LDB, DWORK, INFO ) C C PURPOSE diff --git a/src/MB01UD.f b/src/MB01UD.f index f598a80..ae23dab 100644 --- a/src/MB01UD.f +++ b/src/MB01UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01UD( SIDE, TRANS, M, N, ALPHA, H, LDH, A, LDA, B, $ LDB, INFO ) C diff --git a/src/MB01UW.f b/src/MB01UW.f index a6c5be6..0d5eeea 100644 --- a/src/MB01UW.f +++ b/src/MB01UW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01UW( SIDE, TRANS, M, N, ALPHA, H, LDH, A, LDA, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB01UX.f b/src/MB01UX.f index cba45c8..db13045 100644 --- a/src/MB01UX.f +++ b/src/MB01UX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01UX( SIDE, UPLO, TRANS, M, N, ALPHA, T, LDT, A, LDA, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB01UY.f b/src/MB01UY.f index 8ee8346..2bd0676 100644 --- a/src/MB01UY.f +++ b/src/MB01UY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01UY( SIDE, UPLO, TRANS, M, N, ALPHA, T, LDT, A, LDA, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB01UZ.f b/src/MB01UZ.f index aed3389..c79bda6 100644 --- a/src/MB01UZ.f +++ b/src/MB01UZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01UZ( SIDE, UPLO, TRANS, M, N, ALPHA, T, LDT, A, LDA, $ ZWORK, LZWORK, INFO ) C diff --git a/src/MB01VD.f b/src/MB01VD.f index 4e6472f..e0971e7 100644 --- a/src/MB01VD.f +++ b/src/MB01VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01VD( TRANA, TRANB, MA, NA, MB, NB, ALPHA, BETA, $ A, LDA, B, LDB, C, LDC, MC, NC, INFO ) C diff --git a/src/MB01WD.f b/src/MB01WD.f index 4fbe5c1..bbefb1e 100644 --- a/src/MB01WD.f +++ b/src/MB01WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01WD( DICO, UPLO, TRANS, HESS, N, ALPHA, BETA, R, $ LDR, A, LDA, T, LDT, INFO ) C diff --git a/src/MB01XD.f b/src/MB01XD.f index b54762f..554103d 100644 --- a/src/MB01XD.f +++ b/src/MB01XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01XD( UPLO, N, A, LDA, INFO ) C C PURPOSE diff --git a/src/MB01XY.f b/src/MB01XY.f index 1db4bd0..5059f67 100644 --- a/src/MB01XY.f +++ b/src/MB01XY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01XY( UPLO, N, A, LDA, INFO ) C C PURPOSE diff --git a/src/MB01YD.f b/src/MB01YD.f index e9010c9..1a93133 100644 --- a/src/MB01YD.f +++ b/src/MB01YD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01YD( UPLO, TRANS, N, K, L, ALPHA, BETA, A, LDA, C, $ LDC, INFO ) C diff --git a/src/MB01ZD.f b/src/MB01ZD.f index adc59f4..9f407ee 100644 --- a/src/MB01ZD.f +++ b/src/MB01ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB01ZD( SIDE, UPLO, TRANST, DIAG, M, N, L, ALPHA, T, $ LDT, H, LDH, INFO ) C diff --git a/src/MB02CD.f b/src/MB02CD.f index 79c2b32..2f4a09c 100644 --- a/src/MB02CD.f +++ b/src/MB02CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02CD( JOB, TYPET, K, N, T, LDT, G, LDG, R, LDR, L, $ LDL, CS, LCS, DWORK, LDWORK, INFO ) C diff --git a/src/MB02CU.f b/src/MB02CU.f index f88cde7..8233b24 100644 --- a/src/MB02CU.f +++ b/src/MB02CU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02CU( TYPEG, K, P, Q, NB, A1, LDA1, A2, LDA2, B, LDB, $ RNK, IPVT, CS, TOL, DWORK, LDWORK, INFO ) C diff --git a/src/MB02CV.f b/src/MB02CV.f index e55c74e..eb471cb 100644 --- a/src/MB02CV.f +++ b/src/MB02CV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02CV( TYPEG, STRUCG, K, N, P, Q, NB, RNK, A1, LDA1, $ A2, LDA2, B, LDB, F1, LDF1, F2, LDF2, G, LDG, $ CS, DWORK, LDWORK, INFO ) diff --git a/src/MB02CX.f b/src/MB02CX.f index 51144a0..cbaf708 100644 --- a/src/MB02CX.f +++ b/src/MB02CX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02CX( TYPET, P, Q, K, A, LDA, B, LDB, CS, LCS, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB02CY.f b/src/MB02CY.f index 629fb0c..6cccd25 100644 --- a/src/MB02CY.f +++ b/src/MB02CY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02CY( TYPET, STRUCG, P, Q, N, K, A, LDA, B, LDB, H, $ LDH, CS, LCS, DWORK, LDWORK, INFO ) C diff --git a/src/MB02DD.f b/src/MB02DD.f index cf6ad97..7e17234 100644 --- a/src/MB02DD.f +++ b/src/MB02DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02DD( JOB, TYPET, K, M, N, TA, LDTA, T, LDT, G, $ LDG, R, LDR, L, LDL, CS, LCS, DWORK, LDWORK, $ INFO ) diff --git a/src/MB02ED.f b/src/MB02ED.f index 803b163..ab1dfb9 100644 --- a/src/MB02ED.f +++ b/src/MB02ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02ED( TYPET, K, N, NRHS, T, LDT, B, LDB, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB02FD.f b/src/MB02FD.f index 551e6ac..43bfed3 100644 --- a/src/MB02FD.f +++ b/src/MB02FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02FD( TYPET, K, N, P, S, T, LDT, R, LDR, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB02GD.f b/src/MB02GD.f index 1f04a48..6dc8446 100644 --- a/src/MB02GD.f +++ b/src/MB02GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02GD( TYPET, TRIU, K, N, NL, P, S, T, LDT, RB, LDRB, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB02HD.f b/src/MB02HD.f index d51336e..1d2fb28 100644 --- a/src/MB02HD.f +++ b/src/MB02HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02HD( TRIU, K, L, M, ML, N, NU, P, S, TC, LDTC, TR, $ LDTR, RB, LDRB, DWORK, LDWORK, INFO ) C diff --git a/src/MB02ID.f b/src/MB02ID.f index f0de208..7df23bc 100644 --- a/src/MB02ID.f +++ b/src/MB02ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02ID( JOB, K, L, M, N, RB, RC, TC, LDTC, TR, LDTR, B, $ LDB, C, LDC, DWORK, LDWORK, INFO ) C diff --git a/src/MB02JD.f b/src/MB02JD.f index 88c7e62..39ceb57 100644 --- a/src/MB02JD.f +++ b/src/MB02JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02JD( JOB, K, L, M, N, P, S, TC, LDTC, TR, LDTR, Q, $ LDQ, R, LDR, DWORK, LDWORK, INFO ) C diff --git a/src/MB02JX.f b/src/MB02JX.f index b382a9b..c32b709 100644 --- a/src/MB02JX.f +++ b/src/MB02JX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02JX( JOB, K, L, M, N, TC, LDTC, TR, LDTR, RNK, Q, $ LDQ, R, LDR, JPVT, TOL1, TOL2, DWORK, LDWORK, $ INFO ) diff --git a/src/MB02KD.f b/src/MB02KD.f index 5b4ead5..27b800e 100644 --- a/src/MB02KD.f +++ b/src/MB02KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02KD( LDBLK, TRANS, K, L, M, N, R, ALPHA, BETA, $ TC, LDTC, TR, LDTR, B, LDB, C, LDC, DWORK, $ LDWORK, INFO ) diff --git a/src/MB02MD.f b/src/MB02MD.f index bbe093b..d5e652f 100644 --- a/src/MB02MD.f +++ b/src/MB02MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02MD( JOB, M, N, L, RANK, C, LDC, S, X, LDX, TOL, $ IWORK, DWORK, LDWORK, IWARN, INFO ) C diff --git a/src/MB02ND.f b/src/MB02ND.f index 9c5589a..cb27a51 100644 --- a/src/MB02ND.f +++ b/src/MB02ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02ND( M, N, L, RANK, THETA, C, LDC, X, LDX, Q, INUL, $ TOL, RELTOL, IWORK, DWORK, LDWORK, BWORK, $ IWARN, INFO ) diff --git a/src/MB02NY.f b/src/MB02NY.f index b44c5e7..2155165 100644 --- a/src/MB02NY.f +++ b/src/MB02NY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02NY( UPDATU, UPDATV, M, N, I, K, Q, E, U, LDU, V, $ LDV, DWORK ) C diff --git a/src/MB02OD.f b/src/MB02OD.f index f73f301..1801ee6 100644 --- a/src/MB02OD.f +++ b/src/MB02OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02OD( SIDE, UPLO, TRANS, DIAG, NORM, M, N, ALPHA, A, $ LDA, B, LDB, RCOND, TOL, IWORK, DWORK, INFO ) C diff --git a/src/MB02PD.f b/src/MB02PD.f index 6842290..476c5a9 100644 --- a/src/MB02PD.f +++ b/src/MB02PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02PD( FACT, TRANS, N, NRHS, A, LDA, AF, LDAF, IPIV, $ EQUED, R, C, B, LDB, X, LDX, RCOND, FERR, BERR, $ IWORK, DWORK, INFO ) diff --git a/src/MB02QD.f b/src/MB02QD.f index 1abacb4..d76701e 100644 --- a/src/MB02QD.f +++ b/src/MB02QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02QD( JOB, INIPER, M, N, NRHS, RCOND, SVLMAX, A, LDA, $ B, LDB, Y, JPVT, RANK, SVAL, DWORK, LDWORK, $ INFO ) diff --git a/src/MB02QY.f b/src/MB02QY.f index f2b125d..a44418f 100644 --- a/src/MB02QY.f +++ b/src/MB02QY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02QY( M, N, NRHS, RANK, A, LDA, JPVT, B, LDB, TAU, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB02RD.f b/src/MB02RD.f index 6db09a4..256c869 100644 --- a/src/MB02RD.f +++ b/src/MB02RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02RD( TRANS, N, NRHS, H, LDH, IPIV, B, LDB, INFO ) C C PURPOSE diff --git a/src/MB02RZ.f b/src/MB02RZ.f index 892ea0f..64cbd33 100644 --- a/src/MB02RZ.f +++ b/src/MB02RZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02RZ( TRANS, N, NRHS, H, LDH, IPIV, B, LDB, INFO ) C C PURPOSE diff --git a/src/MB02SD.f b/src/MB02SD.f index 19c411e..5a3b545 100644 --- a/src/MB02SD.f +++ b/src/MB02SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02SD( N, H, LDH, IPIV, INFO ) C C PURPOSE diff --git a/src/MB02SZ.f b/src/MB02SZ.f index 43058c5..40f1a7e 100644 --- a/src/MB02SZ.f +++ b/src/MB02SZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02SZ( N, H, LDH, IPIV, INFO ) C C PURPOSE diff --git a/src/MB02TD.f b/src/MB02TD.f index faa6687..31c6810 100644 --- a/src/MB02TD.f +++ b/src/MB02TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02TD( NORM, N, HNORM, H, LDH, IPIV, RCOND, IWORK, $ DWORK, INFO ) C diff --git a/src/MB02TZ.f b/src/MB02TZ.f index 02bd0e0..71dfb77 100644 --- a/src/MB02TZ.f +++ b/src/MB02TZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02TZ( NORM, N, HNORM, H, LDH, IPIV, RCOND, DWORK, $ ZWORK, INFO ) C diff --git a/src/MB02UD.f b/src/MB02UD.f index dbad789..d71ffdd 100644 --- a/src/MB02UD.f +++ b/src/MB02UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02UD( FACT, SIDE, TRANS, JOBP, M, N, ALPHA, RCOND, $ RANK, R, LDR, Q, LDQ, SV, B, LDB, RP, LDRP, $ DWORK, LDWORK, INFO ) diff --git a/src/MB02UU.f b/src/MB02UU.f index b5e8221..0dbfdf1 100644 --- a/src/MB02UU.f +++ b/src/MB02UU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02UU( N, A, LDA, RHS, IPIV, JPIV, SCALE ) C C PURPOSE diff --git a/src/MB02UV.f b/src/MB02UV.f index 70ca102..3d203fa 100644 --- a/src/MB02UV.f +++ b/src/MB02UV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02UV( N, A, LDA, IPIV, JPIV, INFO ) C C PURPOSE diff --git a/src/MB02UW.f b/src/MB02UW.f index 06c4db1..be181c4 100644 --- a/src/MB02UW.f +++ b/src/MB02UW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02UW( LTRANS, N, M, PAR, A, LDA, B, LDB, SCALE, $ IWARN ) C diff --git a/src/MB02VD.f b/src/MB02VD.f index 83d8a7a..64f1580 100644 --- a/src/MB02VD.f +++ b/src/MB02VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02VD( TRANS, M, N, A, LDA, IPIV, B, LDB, INFO ) C C PURPOSE diff --git a/src/MB02WD.f b/src/MB02WD.f index e3cda7a..7e02850 100644 --- a/src/MB02WD.f +++ b/src/MB02WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02WD( FORM, F, N, IPAR, LIPAR, DPAR, LDPAR, ITMAX, $ A, LDA, B, INCB, X, INCX, TOL, DWORK, LDWORK, $ IWARN, INFO ) diff --git a/src/MB02XD.f b/src/MB02XD.f index ca25d5f..b449ee9 100644 --- a/src/MB02XD.f +++ b/src/MB02XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02XD( FORM, STOR, UPLO, F, M, N, NRHS, IPAR, LIPAR, $ DPAR, LDPAR, A, LDA, B, LDB, ATA, LDATA, DWORK, $ LDWORK, INFO ) diff --git a/src/MB02YD.f b/src/MB02YD.f index f0d7360..81037a8 100644 --- a/src/MB02YD.f +++ b/src/MB02YD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB02YD( COND, N, R, LDR, IPVT, DIAG, QTB, RANK, X, TOL, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB03AB.f b/src/MB03AB.f index eee6ae8..3a6a3dd 100644 --- a/src/MB03AB.f +++ b/src/MB03AB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03AB( SHFT, K, N, AMAP, S, SINV, A, LDA1, LDA2, W1, $ W2, C1, S1, C2, S2 ) C diff --git a/src/MB03AD.f b/src/MB03AD.f index d58eec4..6381648 100644 --- a/src/MB03AD.f +++ b/src/MB03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03AD( SHFT, K, N, AMAP, S, SINV, A, LDA1, LDA2, C1, $ S1, C2, S2 ) C diff --git a/src/MB03AE.f b/src/MB03AE.f index 333df29..de1f32b 100644 --- a/src/MB03AE.f +++ b/src/MB03AE.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03AE( SHFT, K, N, AMAP, S, SINV, A, LDA1, LDA2, C1, $ S1, C2, S2 ) C diff --git a/src/MB03AF.f b/src/MB03AF.f index 6a9ab8f..e3517ac 100644 --- a/src/MB03AF.f +++ b/src/MB03AF.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03AF( SHFT, K, N, AMAP, S, SINV, A, LDA1, LDA2, C1, $ S1, C2, S2 ) C diff --git a/src/MB03AG.f b/src/MB03AG.f index b30c7b6..971a43b 100644 --- a/src/MB03AG.f +++ b/src/MB03AG.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03AG( SHFT, K, N, AMAP, S, SINV, A, LDA1, LDA2, C1, $ S1, C2, S2, IWORK, DWORK ) C diff --git a/src/MB03AH.f b/src/MB03AH.f index e6de03a..b4ab5e7 100644 --- a/src/MB03AH.f +++ b/src/MB03AH.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03AH( SHFT, K, N, AMAP, S, SINV, A, LDA1, LDA2, C1, $ S1, C2, S2 ) C diff --git a/src/MB03AI.f b/src/MB03AI.f index c5c5cbb..7055fd8 100644 --- a/src/MB03AI.f +++ b/src/MB03AI.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03AI( SHFT, K, N, AMAP, S, SINV, A, LDA1, LDA2, C1, $ S1, C2, S2, DWORK ) C diff --git a/src/MB03BA.f b/src/MB03BA.f index 566b852..1607738 100644 --- a/src/MB03BA.f +++ b/src/MB03BA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03BA( K, H, S, SMULT, AMAP, QMAP ) C C PURPOSE diff --git a/src/MB03BB.f b/src/MB03BB.f index fedb63e..d462378 100644 --- a/src/MB03BB.f +++ b/src/MB03BB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03BB( BASE, LGBAS, ULP, K, AMAP, S, SINV, A, LDA1, $ LDA2, ALPHAR, ALPHAI, BETA, SCAL, DWORK, INFO ) C diff --git a/src/MB03BC.f b/src/MB03BC.f index 5d724e4..adf3f2e 100644 --- a/src/MB03BC.f +++ b/src/MB03BC.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03BC( K, AMAP, S, SINV, A, LDA1, LDA2, MACPAR, CV, $ SV, DWORK ) C diff --git a/src/MB03BD.f b/src/MB03BD.f index e39f1e7..b233b7f 100644 --- a/src/MB03BD.f +++ b/src/MB03BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03BD( JOB, DEFL, COMPQ, QIND, K, N, H, ILO, IHI, S, $ A, LDA1, LDA2, Q, LDQ1, LDQ2, ALPHAR, ALPHAI, $ BETA, SCAL, IWORK, LIWORK, DWORK, LDWORK, diff --git a/src/MB03BE.f b/src/MB03BE.f index 274eaa3..5c57538 100644 --- a/src/MB03BE.f +++ b/src/MB03BE.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03BE( K, AMAP, S, SINV, A, LDA1, LDA2 ) C C PURPOSE diff --git a/src/MB03BF.f b/src/MB03BF.f index 10a7422..f6a992a 100644 --- a/src/MB03BF.f +++ b/src/MB03BF.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03BF( K, AMAP, S, SINV, A, LDA1, LDA2, ULP ) C C PURPOSE diff --git a/src/MB03BG.f b/src/MB03BG.f index efccfad..ef37934 100644 --- a/src/MB03BG.f +++ b/src/MB03BG.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03BG( K, N, AMAP, S, SINV, A, LDA1, LDA2, WR, WI ) C C PURPOSE diff --git a/src/MB03BZ.f b/src/MB03BZ.f index 7357a66..eb227f5 100644 --- a/src/MB03BZ.f +++ b/src/MB03BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03BZ( JOB, COMPQ, K, N, ILO, IHI, S, A, LDA1, LDA2, $ Q, LDQ1, LDQ2, ALPHA, BETA, SCAL, DWORK, $ LDWORK, ZWORK, LZWORK, INFO ) diff --git a/src/MB03CD.f b/src/MB03CD.f index 5452ed9..bf06f60 100644 --- a/src/MB03CD.f +++ b/src/MB03CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03CD( UPLO, N1, N2, PREC, A, LDA, B, LDB, D, LDD, Q1, $ LDQ1, Q2, LDQ2, Q3, LDQ3, DWORK, LDWORK, INFO ) C diff --git a/src/MB03CZ.f b/src/MB03CZ.f index ae8a66e..52eeed0 100644 --- a/src/MB03CZ.f +++ b/src/MB03CZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03CZ( A, LDA, B, LDB, D, LDD, CO1, SI1, CO2, SI2, $ CO3, SI3 ) C diff --git a/src/MB03DD.f b/src/MB03DD.f index f020394..7b41eff 100644 --- a/src/MB03DD.f +++ b/src/MB03DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03DD( UPLO, N1, N2, PREC, A, LDA, B, LDB, Q1, LDQ1, $ Q2, LDQ2, DWORK, LDWORK, INFO ) C diff --git a/src/MB03DZ.f b/src/MB03DZ.f index 2d3abe9..dcb7694 100644 --- a/src/MB03DZ.f +++ b/src/MB03DZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03DZ( A, LDA, B, LDB, CO1, SI1, CO2, SI2 ) C C PURPOSE diff --git a/src/MB03ED.f b/src/MB03ED.f index 7631d30..f86edae 100644 --- a/src/MB03ED.f +++ b/src/MB03ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03ED( N, PREC, A, LDA, B, LDB, D, LDD, Q1, LDQ1, Q2, $ LDQ2, Q3, LDQ3, DWORK, LDWORK, INFO ) C diff --git a/src/MB03FD.f b/src/MB03FD.f index ad6c6a4..5e3132f 100644 --- a/src/MB03FD.f +++ b/src/MB03FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03FD( N, PREC, A, LDA, B, LDB, Q1, LDQ1, Q2, LDQ2, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB03FZ.f b/src/MB03FZ.f index 7f837b3..1bb4326 100644 --- a/src/MB03FZ.f +++ b/src/MB03FZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03FZ( COMPQ, COMPU, ORTH, N, Z, LDZ, B, LDB, FG, $ LDFG, NEIG, D, LDD, C, LDC, Q, LDQ, U, LDU, $ ALPHAR, ALPHAI, BETA, IWORK, LIWORK, DWORK, diff --git a/src/MB03GD.f b/src/MB03GD.f index 57aa1bd..e470e80 100644 --- a/src/MB03GD.f +++ b/src/MB03GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03GD( N, B, LDB, D, LDD, MACPAR, Q, LDQ, U, LDU, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB03GZ.f b/src/MB03GZ.f index 7dd05c8..3c7d436 100644 --- a/src/MB03GZ.f +++ b/src/MB03GZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03GZ( Z11, Z12, Z22, H11, H12, CO1, SI1, CO2, SI2 ) C C PURPOSE diff --git a/src/MB03HD.f b/src/MB03HD.f index c2f71ae..ecd1510 100644 --- a/src/MB03HD.f +++ b/src/MB03HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03HD( N, A, LDA, B, LDB, MACPAR, Q, LDQ, DWORK, $ INFO ) C diff --git a/src/MB03HZ.f b/src/MB03HZ.f index c12e16a..48b93f9 100644 --- a/src/MB03HZ.f +++ b/src/MB03HZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03HZ( S11, S12, H11, H12, CO, SI ) C C PURPOSE diff --git a/src/MB03ID.f b/src/MB03ID.f index acb0237..e569a63 100644 --- a/src/MB03ID.f +++ b/src/MB03ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03ID( COMPQ, COMPU, N, A, LDA, C, LDC, D, LDD, B, $ LDB, F, LDF, Q, LDQ, U1, LDU1, U2, LDU2, NEIG, $ IWORK, LIWORK, DWORK, LDWORK, INFO ) diff --git a/src/MB03IZ.f b/src/MB03IZ.f index 83dc497..c680e67 100644 --- a/src/MB03IZ.f +++ b/src/MB03IZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03IZ( COMPQ, COMPU, N, A, LDA, C, LDC, D, LDD, B, $ LDB, F, LDF, Q, LDQ, U1, LDU1, U2, LDU2, NEIG, $ TOL, INFO ) diff --git a/src/MB03JD.f b/src/MB03JD.f index ae5e176..5cbc84f 100644 --- a/src/MB03JD.f +++ b/src/MB03JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03JD( COMPQ, N, A, LDA, D, LDD, B, LDB, F, LDF, Q, $ LDQ, NEIG, IWORK, LIWORK, DWORK, LDWORK, INFO ) C diff --git a/src/MB03JP.f b/src/MB03JP.f index 7909eb9..b915d31 100644 --- a/src/MB03JP.f +++ b/src/MB03JP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03JP( COMPQ, N, A, LDA, D, LDD, B, LDB, F, LDF, Q, $ LDQ, NEIG, IWORK, LIWORK, DWORK, LDWORK, INFO ) C diff --git a/src/MB03JZ.f b/src/MB03JZ.f index c0ab717..fbb9a29 100644 --- a/src/MB03JZ.f +++ b/src/MB03JZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03JZ( COMPQ, N, A, LDA, D, LDD, B, LDB, F, LDF, Q, $ LDQ, NEIG, TOL, INFO ) C diff --git a/src/MB03KA.f b/src/MB03KA.f index e4fb58c..2535d34 100644 --- a/src/MB03KA.f +++ b/src/MB03KA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03KA( COMPQ, WHICHQ, WS, K, NC, KSCHUR, IFST, ILST, $ N, NI, S, T, LDT, IXT, Q, LDQ, IXQ, TOL, IWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/MB03KB.f b/src/MB03KB.f index b70e616..adfab00 100644 --- a/src/MB03KB.f +++ b/src/MB03KB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03KB( COMPQ, WHICHQ, WS, K, NC, KSCHUR, J1, N1, N2, $ N, NI, S, T, LDT, IXT, Q, LDQ, IXQ, TOL, IWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/MB03KC.f b/src/MB03KC.f index 3cf9f0f..9b5e02b 100644 --- a/src/MB03KC.f +++ b/src/MB03KC.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03KC( K, KHESS, N, R, S, A, LDA, V, TAU ) C C PURPOSE diff --git a/src/MB03KD.f b/src/MB03KD.f index 41d27b0..4d98524 100644 --- a/src/MB03KD.f +++ b/src/MB03KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03KD( COMPQ, WHICHQ, STRONG, K, NC, KSCHUR, N, NI, S, $ SELECT, T, LDT, IXT, Q, LDQ, IXQ, M, TOL, $ IWORK, DWORK, LDWORK, INFO ) diff --git a/src/MB03KE.f b/src/MB03KE.f index 8348163..15347cd 100644 --- a/src/MB03KE.f +++ b/src/MB03KE.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03KE( TRANA, TRANB, ISGN, K, M, N, PREC, SMIN, S, A, $ B, C, SCALE, DWORK, LDWORK, INFO ) C diff --git a/src/MB03LD.f b/src/MB03LD.f index 6f4c0d1..01325e3 100644 --- a/src/MB03LD.f +++ b/src/MB03LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03LD( COMPQ, ORTH, N, A, LDA, DE, LDDE, B, LDB, FG, $ LDFG, NEIG, Q, LDQ, ALPHAR, ALPHAI, BETA, $ IWORK, LIWORK, DWORK, LDWORK, BWORK, INFO ) diff --git a/src/MB03LF.f b/src/MB03LF.f index d61d29c..8789d45 100644 --- a/src/MB03LF.f +++ b/src/MB03LF.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03LF( COMPQ, COMPU, ORTH, N, Z, LDZ, B, LDB, FG, $ LDFG, NEIG, Q, LDQ, U, LDU, ALPHAR, ALPHAI, $ BETA, IWORK, LIWORK, DWORK, LDWORK, BWORK, diff --git a/src/MB03LP.f b/src/MB03LP.f index c1c28db..1471f3d 100644 --- a/src/MB03LP.f +++ b/src/MB03LP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03LP( COMPQ, ORTH, N, A, LDA, DE, LDDE, B, LDB, FG, $ LDFG, NEIG, Q, LDQ, ALPHAR, ALPHAI, BETA, $ IWORK, LIWORK, DWORK, LDWORK, BWORK, INFO ) diff --git a/src/MB03LZ.f b/src/MB03LZ.f index ea80d8f..2411d42 100644 --- a/src/MB03LZ.f +++ b/src/MB03LZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03LZ( COMPQ, ORTH, N, A, LDA, DE, LDDE, B, LDB, FG, $ LDFG, NEIG, Q, LDQ, ALPHAR, ALPHAI, BETA, $ IWORK, DWORK, LDWORK, ZWORK, LZWORK, BWORK, diff --git a/src/MB03MD.f b/src/MB03MD.f index df5f2fc..e4de48b 100644 --- a/src/MB03MD.f +++ b/src/MB03MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03MD( N, L, THETA, Q, E, Q2, E2, PIVMIN, TOL, RELTOL, $ IWARN, INFO ) C diff --git a/src/MB03MY.f b/src/MB03MY.f index 23747c6..eeab9ad 100644 --- a/src/MB03MY.f +++ b/src/MB03MY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MB03MY( NX, X, INCX ) C C PURPOSE diff --git a/src/MB03ND.f b/src/MB03ND.f index f89a417..ba9ccfc 100644 --- a/src/MB03ND.f +++ b/src/MB03ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C INTEGER FUNCTION MB03ND( N, THETA, Q2, E2, PIVMIN, INFO ) C C PURPOSE diff --git a/src/MB03NY.f b/src/MB03NY.f index 89873f3..52fd0df 100644 --- a/src/MB03NY.f +++ b/src/MB03NY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C DOUBLE PRECISION FUNCTION MB03NY( N, OMEGA, A, LDA, S, DWORK, $ LDWORK, CWORK, LCWORK, INFO ) C diff --git a/src/MB03OD.f b/src/MB03OD.f index ccd8684..2c4eb1b 100644 --- a/src/MB03OD.f +++ b/src/MB03OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03OD( JOBQR, M, N, A, LDA, JPVT, RCOND, SVLMAX, TAU, $ RANK, SVAL, DWORK, LDWORK, INFO ) C diff --git a/src/MB03OY.f b/src/MB03OY.f index 98b9333..21c352e 100644 --- a/src/MB03OY.f +++ b/src/MB03OY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03OY( M, N, A, LDA, RCOND, SVLMAX, RANK, SVAL, JPVT, $ TAU, DWORK, INFO ) C diff --git a/src/MB03PD.f b/src/MB03PD.f index 949ebb2..536d998 100644 --- a/src/MB03PD.f +++ b/src/MB03PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03PD( JOBRQ, M, N, A, LDA, JPVT, RCOND, SVLMAX, TAU, $ RANK, SVAL, DWORK, INFO ) C diff --git a/src/MB03PY.f b/src/MB03PY.f index 8a33aa9..7a1a326 100644 --- a/src/MB03PY.f +++ b/src/MB03PY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03PY( M, N, A, LDA, RCOND, SVLMAX, RANK, SVAL, JPVT, $ TAU, DWORK, INFO ) C diff --git a/src/MB03QD.f b/src/MB03QD.f index 73d1f8a..5ac88b5 100644 --- a/src/MB03QD.f +++ b/src/MB03QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03QD( DICO, STDOM, JOBU, N, NLOW, NSUP, ALPHA, $ A, LDA, U, LDU, NDIM, DWORK, INFO ) C diff --git a/src/MB03QG.f b/src/MB03QG.f index da35938..3952f5d 100644 --- a/src/MB03QG.f +++ b/src/MB03QG.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03QG( DICO, STDOM, JOBU, JOBV, N, NLOW, NSUP, ALPHA, $ A, LDA, E, LDE, U, LDU, V, LDV, NDIM, DWORK, $ LDWORK, INFO ) diff --git a/src/MB03QV.f b/src/MB03QV.f index a2ecfaa..12f2130 100644 --- a/src/MB03QV.f +++ b/src/MB03QV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03QV( N, S, LDS, T, LDT, ALPHAR, ALPHAI, BETA, INFO ) C C PURPOSE diff --git a/src/MB03QW.f b/src/MB03QW.f index 4e3c40d..3bba021 100644 --- a/src/MB03QW.f +++ b/src/MB03QW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03QW( N, L, A, LDA, E, LDE, U, LDU, V, LDV, $ ALPHAR, ALPHAI, BETA, INFO ) C diff --git a/src/MB03QX.f b/src/MB03QX.f index f4e5076..e7b02b3 100644 --- a/src/MB03QX.f +++ b/src/MB03QX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03QX( N, T, LDT, WR, WI, INFO ) C C PURPOSE diff --git a/src/MB03QY.f b/src/MB03QY.f index e6b28da..031c9f4 100644 --- a/src/MB03QY.f +++ b/src/MB03QY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03QY( N, L, A, LDA, U, LDU, E1, E2, INFO ) C C PURPOSE diff --git a/src/MB03RD.f b/src/MB03RD.f index 34d46fe..649b409 100644 --- a/src/MB03RD.f +++ b/src/MB03RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03RD( JOBX, SORT, N, PMAX, A, LDA, X, LDX, NBLCKS, $ BLSIZE, WR, WI, TOL, DWORK, INFO ) C diff --git a/src/MB03RW.f b/src/MB03RW.f index 5cac2ae..fa0c131 100644 --- a/src/MB03RW.f +++ b/src/MB03RW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03RW( M, N, PMAX, A, LDA, B, LDB, C, LDC, INFO ) C C PURPOSE diff --git a/src/MB03RX.f b/src/MB03RX.f index 5e5a13c..495d642 100644 --- a/src/MB03RX.f +++ b/src/MB03RX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03RX( JOBV, N, KL, KU, A, LDA, X, LDX, WR, WI, $ DWORK ) C diff --git a/src/MB03RY.f b/src/MB03RY.f index 5360890..3638b66 100644 --- a/src/MB03RY.f +++ b/src/MB03RY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03RY( M, N, PMAX, A, LDA, B, LDB, C, LDC, INFO ) C C PURPOSE diff --git a/src/MB03RZ.f b/src/MB03RZ.f index d651acb..f3ccb87 100644 --- a/src/MB03RZ.f +++ b/src/MB03RZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03RZ( JOBX, SORT, N, PMAX, A, LDA, X, LDX, NBLCKS, $ BLSIZE, W, TOL, INFO ) C PURPOSE diff --git a/src/MB03SD.f b/src/MB03SD.f index be74f81..f1b3b23 100644 --- a/src/MB03SD.f +++ b/src/MB03SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03SD( JOBSCL, N, A, LDA, QG, LDQG, WR, WI, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB03TD.f b/src/MB03TD.f index e9d5b0d..e4c5402 100644 --- a/src/MB03TD.f +++ b/src/MB03TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03TD( TYP, COMPU, SELECT, LOWER, N, A, LDA, G, LDG, $ U1, LDU1, U2, LDU2, WR, WI, M, DWORK, LDWORK, $ INFO ) diff --git a/src/MB03TS.f b/src/MB03TS.f index 2673430..36dd1ff 100644 --- a/src/MB03TS.f +++ b/src/MB03TS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03TS( ISHAM, WANTU, N, A, LDA, G, LDG, U1, LDU1, U2, $ LDU2, J1, N1, N2, DWORK, INFO ) C diff --git a/src/MB03UD.f b/src/MB03UD.f index 68362e7..2c2ce98 100644 --- a/src/MB03UD.f +++ b/src/MB03UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03UD( JOBQ, JOBP, N, A, LDA, Q, LDQ, SV, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB03VD.f b/src/MB03VD.f index d4c1f5f..64db985 100644 --- a/src/MB03VD.f +++ b/src/MB03VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03VD( N, P, ILO, IHI, A, LDA1, LDA2, TAU, LDTAU, $ DWORK, INFO ) C diff --git a/src/MB03VW.f b/src/MB03VW.f index 587cdb2..fe49f1e 100644 --- a/src/MB03VW.f +++ b/src/MB03VW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03VW( COMPQ, QIND, TRIU, N, K, H, ILO, IHI, S, A, $ LDA1, LDA2, Q, LDQ1, LDQ2, IWORK, LIWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/MB03VY.f b/src/MB03VY.f index 1c40c5d..5494b2c 100644 --- a/src/MB03VY.f +++ b/src/MB03VY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03VY( N, P, ILO, IHI, A, LDA1, LDA2, TAU, LDTAU, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB03WA.f b/src/MB03WA.f index e1601a9..3277901 100644 --- a/src/MB03WA.f +++ b/src/MB03WA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03WA( WANTQ, WANTZ, N1, N2, A, LDA, B, LDB, Q, LDQ, $ Z, LDZ, INFO ) C diff --git a/src/MB03WD.f b/src/MB03WD.f index 5127cb6..5a5d133 100644 --- a/src/MB03WD.f +++ b/src/MB03WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03WD( JOB, COMPZ, N, P, ILO, IHI, ILOZ, IHIZ, H, $ LDH1, LDH2, Z, LDZ1, LDZ2, WR, WI, DWORK, $ LDWORK, INFO ) diff --git a/src/MB03WX.f b/src/MB03WX.f index a4244f5..9fe9f65 100644 --- a/src/MB03WX.f +++ b/src/MB03WX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03WX( N, P, T, LDT1, LDT2, WR, WI, INFO ) C C PURPOSE diff --git a/src/MB03XD.f b/src/MB03XD.f index 8ac1d16..7b1d469 100644 --- a/src/MB03XD.f +++ b/src/MB03XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03XD( BALANC, JOB, JOBU, JOBV, N, A, LDA, QG, LDQG, $ T, LDT, U1, LDU1, U2, LDU2, V1, LDV1, V2, LDV2, $ WR, WI, ILO, SCALE, DWORK, LDWORK, INFO ) diff --git a/src/MB03XP.f b/src/MB03XP.f index 4f16dfb..7312e2f 100644 --- a/src/MB03XP.f +++ b/src/MB03XP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03XP( JOB, COMPQ, COMPZ, N, ILO, IHI, A, LDA, B, LDB, $ Q, LDQ, Z, LDZ, ALPHAR, ALPHAI, BETA, DWORK, $ LDWORK, INFO ) diff --git a/src/MB03XS.f b/src/MB03XS.f index a5b3429..2ec741c 100644 --- a/src/MB03XS.f +++ b/src/MB03XS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03XS( JOBU, N, A, LDA, QG, LDQG, U1, LDU1, U2, LDU2, $ WR, WI, DWORK, LDWORK, INFO ) C diff --git a/src/MB03XU.f b/src/MB03XU.f index 558ee53..30f8622 100644 --- a/src/MB03XU.f +++ b/src/MB03XU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03XU( LTRA, LTRB, N, K, NB, A, LDA, B, LDB, G, LDG, $ Q, LDQ, XA, LDXA, XB, LDXB, XG, LDXG, XQ, LDXQ, $ YA, LDYA, YB, LDYB, YG, LDYG, YQ, LDYQ, CSL, diff --git a/src/MB03XZ.f b/src/MB03XZ.f index 9517a41..1873ecc 100644 --- a/src/MB03XZ.f +++ b/src/MB03XZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03XZ( BALANC, JOB, JOBU, N, A, LDA, QG, LDQG, U1, $ LDU1, U2, LDU2, WR, WI, ILO, SCALE, DWORK, $ LDWORK, ZWORK, LZWORK, BWORK, INFO ) diff --git a/src/MB03YA.f b/src/MB03YA.f index 6f476c6..c5d76ac 100644 --- a/src/MB03YA.f +++ b/src/MB03YA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03YA( WANTT, WANTQ, WANTZ, N, ILO, IHI, ILOQ, IHIQ, $ POS, A, LDA, B, LDB, Q, LDQ, Z, LDZ, INFO ) C diff --git a/src/MB03YD.f b/src/MB03YD.f index 439beff..3371df6 100644 --- a/src/MB03YD.f +++ b/src/MB03YD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03YD( WANTT, WANTQ, WANTZ, N, ILO, IHI, ILOQ, IHIQ, $ A, LDA, B, LDB, Q, LDQ, Z, LDZ, ALPHAR, ALPHAI, $ BETA, DWORK, LDWORK, INFO ) diff --git a/src/MB03YT.f b/src/MB03YT.f index 4a700f7..21ef202 100644 --- a/src/MB03YT.f +++ b/src/MB03YT.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03YT( A, LDA, B, LDB, ALPHAR, ALPHAI, BETA, CSL, SNL, $ CSR, SNR ) C diff --git a/src/MB03ZA.f b/src/MB03ZA.f index 20ea47c..63ac701 100644 --- a/src/MB03ZA.f +++ b/src/MB03ZA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03ZA( COMPC, COMPU, COMPV, COMPW, WHICH, SELECT, N, $ A, LDA, B, LDB, C, LDC, U1, LDU1, U2, LDU2, V1, $ LDV1, V2, LDV2, W, LDW, WR, WI, M, DWORK, diff --git a/src/MB03ZD.f b/src/MB03ZD.f index 8ef6cf7..6c85ae9 100644 --- a/src/MB03ZD.f +++ b/src/MB03ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB03ZD( WHICH, METH, STAB, BALANC, ORTBAL, SELECT, N, $ MM, ILO, SCALE, S, LDS, T, LDT, G, LDG, U1, $ LDU1, U2, LDU2, V1, LDV1, V2, LDV2, M, WR, WI, diff --git a/src/MB04AD.f b/src/MB04AD.f index b04bb28..4f4de2a 100644 --- a/src/MB04AD.f +++ b/src/MB04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04AD( JOB, COMPQ1, COMPQ2, COMPU1, COMPU2, N, Z, LDZ, $ H, LDH, Q1, LDQ1, Q2, LDQ2, U11, LDU11, U12, $ LDU12, U21, LDU21, U22, LDU22, T, LDT, ALPHAR, diff --git a/src/MB04AZ.f b/src/MB04AZ.f index cda431e..3976306 100644 --- a/src/MB04AZ.f +++ b/src/MB04AZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04AZ( JOB, COMPQ, COMPU, N, Z, LDZ, B, LDB, FG, $ LDFG, D, LDD, C, LDC, Q, LDQ, U, LDU, ALPHAR, $ ALPHAI, BETA, IWORK, LIWORK, DWORK, LDWORK, diff --git a/src/MB04BD.f b/src/MB04BD.f index 4c1faf9..f15a5a2 100644 --- a/src/MB04BD.f +++ b/src/MB04BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04BD( JOB, COMPQ1, COMPQ2, N, A, LDA, DE, LDDE, C1, $ LDC1, VW, LDVW, Q1, LDQ1, Q2, LDQ2, B, LDB, F, $ LDF, C2, LDC2, ALPHAR, ALPHAI, BETA, IWORK, diff --git a/src/MB04BP.f b/src/MB04BP.f index bf67587..8ca76b2 100644 --- a/src/MB04BP.f +++ b/src/MB04BP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04BP( JOB, COMPQ1, COMPQ2, N, A, LDA, DE, LDDE, C1, $ LDC1, VW, LDVW, Q1, LDQ1, Q2, LDQ2, B, LDB, F, $ LDF, C2, LDC2, ALPHAR, ALPHAI, BETA, IWORK, diff --git a/src/MB04BZ.f b/src/MB04BZ.f index 80901a3..cce98f4 100644 --- a/src/MB04BZ.f +++ b/src/MB04BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04BZ( JOB, COMPQ, N, A, LDA, DE, LDDE, B, LDB, FG, $ LDFG, Q, LDQ, ALPHAR, ALPHAI, BETA, IWORK, $ DWORK, LDWORK, ZWORK, LZWORK, BWORK, INFO ) diff --git a/src/MB04CD.f b/src/MB04CD.f index 388af7c..4cd2566 100644 --- a/src/MB04CD.f +++ b/src/MB04CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04CD( COMPQ1, COMPQ2, COMPQ3, N, A, LDA, B, LDB, D, $ LDD, Q1, LDQ1, Q2, LDQ2, Q3, LDQ3, IWORK, $ LIWORK, DWORK, LDWORK, BWORK, INFO ) diff --git a/src/MB04DB.f b/src/MB04DB.f index 66ef811..e64bd2b 100644 --- a/src/MB04DB.f +++ b/src/MB04DB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04DB( JOB, SGN, N, ILO, LSCALE, RSCALE, M, V1, LDV1, $ V2, LDV2, INFO ) C diff --git a/src/MB04DD.f b/src/MB04DD.f index 96a4705..93dcfeb 100644 --- a/src/MB04DD.f +++ b/src/MB04DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04DD( JOB, N, A, LDA, QG, LDQG, ILO, SCALE, INFO ) C C PURPOSE diff --git a/src/MB04DI.f b/src/MB04DI.f index 785af02..27b0687 100644 --- a/src/MB04DI.f +++ b/src/MB04DI.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04DI( JOB, SGN, N, ILO, SCALE, M, V1, LDV1, V2, LDV2, $ INFO ) C diff --git a/src/MB04DL.f b/src/MB04DL.f index 5131ab4..3f9b623 100644 --- a/src/MB04DL.f +++ b/src/MB04DL.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04DL( JOB, N, THRESH, A, LDA, B, LDB, ILO, IHI, $ LSCALE, RSCALE, DWORK, IWARN, INFO ) C diff --git a/src/MB04DP.f b/src/MB04DP.f index 43cff44..a9498ca 100644 --- a/src/MB04DP.f +++ b/src/MB04DP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04DP( JOB, N, THRESH, A, LDA, DE, LDDE, C, LDC, VW, $ LDVW, ILO, LSCALE, RSCALE, DWORK, IWARN, INFO ) C diff --git a/src/MB04DS.f b/src/MB04DS.f index f670b0c..9c77da1 100644 --- a/src/MB04DS.f +++ b/src/MB04DS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04DS( JOB, N, A, LDA, QG, LDQG, ILO, SCALE, INFO ) C C PURPOSE diff --git a/src/MB04DY.f b/src/MB04DY.f index c1ddd17..26908db 100644 --- a/src/MB04DY.f +++ b/src/MB04DY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04DY( JOBSCL, N, A, LDA, QG, LDQG, D, DWORK, INFO ) C C PURPOSE diff --git a/src/MB04DZ.f b/src/MB04DZ.f index 9493ca2..9cdcbc4 100644 --- a/src/MB04DZ.f +++ b/src/MB04DZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04DZ( JOB, N, A, LDA, QG, LDQG, ILO, SCALE, INFO ) C C PURPOSE diff --git a/src/MB04ED.f b/src/MB04ED.f index 99f0515..7200ca4 100644 --- a/src/MB04ED.f +++ b/src/MB04ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04ED( JOB, COMPQ, COMPU, N, Z, LDZ, B, LDB, FG, LDFG, $ Q, LDQ, U1, LDU1, U2, LDU2, ALPHAR, ALPHAI, $ BETA, IWORK, LIWORK, DWORK, LDWORK, INFO ) diff --git a/src/MB04FD.f b/src/MB04FD.f index 0de47e7..87b930e 100644 --- a/src/MB04FD.f +++ b/src/MB04FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04FD( JOB, COMPQ, N, A, LDA, DE, LDDE, B, LDB, FG, $ LDFG, Q, LDQ, ALPHAR, ALPHAI, BETA, IWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/MB04FP.f b/src/MB04FP.f index c20f4ef..08fc0c0 100644 --- a/src/MB04FP.f +++ b/src/MB04FP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04FP( JOB, COMPQ, N, A, LDA, DE, LDDE, B, LDB, FG, $ LDFG, Q, LDQ, ALPHAR, ALPHAI, BETA, IWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/MB04GD.f b/src/MB04GD.f index 722325f..f535a71 100644 --- a/src/MB04GD.f +++ b/src/MB04GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04GD( M, N, A, LDA, JPVT, TAU, DWORK, INFO ) C C PURPOSE diff --git a/src/MB04HD.f b/src/MB04HD.f index ff2597c..1a1032c 100644 --- a/src/MB04HD.f +++ b/src/MB04HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04HD( COMPQ1, COMPQ2, N, A, LDA, B, LDB, Q1, LDQ1, $ Q2, LDQ2, IWORK, LIWORK, DWORK, LDWORK, BWORK, $ INFO ) diff --git a/src/MB04ID.f b/src/MB04ID.f index 8f36a7d..f1d2fb3 100644 --- a/src/MB04ID.f +++ b/src/MB04ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04ID( N, M, P, L, A, LDA, B, LDB, TAU, DWORK, LDWORK, $ INFO ) C diff --git a/src/MB04IY.f b/src/MB04IY.f index 9f999e2..a16db43 100644 --- a/src/MB04IY.f +++ b/src/MB04IY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04IY( SIDE, TRANS, N, M, K, P, A, LDA, TAU, C, LDC, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB04IZ.f b/src/MB04IZ.f index e82f2d0..f982c48 100644 --- a/src/MB04IZ.f +++ b/src/MB04IZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04IZ( N, M, P, L, A, LDA, B, LDB, TAU, ZWORK, LZWORK, $ INFO ) C diff --git a/src/MB04JD.f b/src/MB04JD.f index c3e2e83..3c14933 100644 --- a/src/MB04JD.f +++ b/src/MB04JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04JD( N, M, P, L, A, LDA, B, LDB, TAU, DWORK, LDWORK, $ INFO ) C diff --git a/src/MB04KD.f b/src/MB04KD.f index d38d739..9675b52 100644 --- a/src/MB04KD.f +++ b/src/MB04KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04KD( UPLO, N, M, P, R, LDR, A, LDA, B, LDB, C, LDC, $ TAU, DWORK ) C diff --git a/src/MB04LD.f b/src/MB04LD.f index d379641..d0f9b91 100644 --- a/src/MB04LD.f +++ b/src/MB04LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04LD( UPLO, N, M, P, L, LDL, A, LDA, B, LDB, C, LDC, $ TAU, DWORK ) C diff --git a/src/MB04MD.f b/src/MB04MD.f index e6648f3..9320327 100644 --- a/src/MB04MD.f +++ b/src/MB04MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04MD( N, MAXRED, A, LDA, SCALE, INFO ) C C PURPOSE diff --git a/src/MB04ND.f b/src/MB04ND.f index 85eb62a..cc029f6 100644 --- a/src/MB04ND.f +++ b/src/MB04ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04ND( UPLO, N, M, P, R, LDR, A, LDA, B, LDB, C, LDC, $ TAU, DWORK ) C diff --git a/src/MB04NY.f b/src/MB04NY.f index e36e5e6..5411939 100644 --- a/src/MB04NY.f +++ b/src/MB04NY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04NY( M, N, V, INCV, TAU, A, LDA, B, LDB, DWORK ) C C PURPOSE diff --git a/src/MB04OD.f b/src/MB04OD.f index a7b31d9..5390345 100644 --- a/src/MB04OD.f +++ b/src/MB04OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04OD( UPLO, N, M, P, R, LDR, A, LDA, B, LDB, C, LDC, $ TAU, DWORK ) C diff --git a/src/MB04OW.f b/src/MB04OW.f index 643433a..cb16190 100644 --- a/src/MB04OW.f +++ b/src/MB04OW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04OW( M, N, P, A, LDA, T, LDT, X, INCX, B, LDB, $ C, LDC, D, INCD ) C diff --git a/src/MB04OX.f b/src/MB04OX.f index d8a117c..baba834 100644 --- a/src/MB04OX.f +++ b/src/MB04OX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04OX( N, A, LDA, X, INCX ) C C PURPOSE diff --git a/src/MB04OY.f b/src/MB04OY.f index 3af0cb5..226515e 100644 --- a/src/MB04OY.f +++ b/src/MB04OY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04OY( M, N, V, TAU, A, LDA, B, LDB, DWORK ) C C PURPOSE diff --git a/src/MB04PA.f b/src/MB04PA.f index 893c9e8..a933a5d 100644 --- a/src/MB04PA.f +++ b/src/MB04PA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04PA( LHAM, N, K, NB, A, LDA, QG, LDQG, XA, LDXA, $ XG, LDXG, XQ, LDXQ, YA, LDYA, CS, TAU, DWORK ) C diff --git a/src/MB04PB.f b/src/MB04PB.f index 351b7ea..2e44359 100644 --- a/src/MB04PB.f +++ b/src/MB04PB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04PB( N, ILO, A, LDA, QG, LDQG, CS, TAU, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB04PU.f b/src/MB04PU.f index 573b8f3..98f3666 100644 --- a/src/MB04PU.f +++ b/src/MB04PU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04PU( N, ILO, A, LDA, QG, LDQG, CS, TAU, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB04PY.f b/src/MB04PY.f index 6f68e99..aa8bfde 100644 --- a/src/MB04PY.f +++ b/src/MB04PY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04PY( SIDE, M, N, V, TAU, C, LDC, DWORK ) C C PURPOSE diff --git a/src/MB04QB.f b/src/MB04QB.f index 2594fc9..f22ff75 100644 --- a/src/MB04QB.f +++ b/src/MB04QB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04QB( TRANC, TRAND, TRANQ, STOREV, STOREW, M, N, K, $ V, LDV, W, LDW, C, LDC, D, LDD, CS, TAU, DWORK, $ LDWORK, INFO ) diff --git a/src/MB04QC.f b/src/MB04QC.f index e784166..3e33ad6 100644 --- a/src/MB04QC.f +++ b/src/MB04QC.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04QC( STRAB, TRANA, TRANB, TRANQ, DIRECT, STOREV, $ STOREW, M, N, K, V, LDV, W, LDW, RS, LDRS, T, $ LDT, A, LDA, B, LDB, DWORK ) diff --git a/src/MB04QF.f b/src/MB04QF.f index ba89c65..945e073 100644 --- a/src/MB04QF.f +++ b/src/MB04QF.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04QF( DIRECT, STOREV, STOREW, N, K, V, LDV, W, LDW, $ CS, TAU, RS, LDRS, T, LDT, DWORK ) C diff --git a/src/MB04QS.f b/src/MB04QS.f index fb15a0b..818c780 100644 --- a/src/MB04QS.f +++ b/src/MB04QS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04QS( TRANC, TRAND, TRANU, M, N, ILO, V, LDV, W, LDW, $ C, LDC, D, LDD, CS, TAU, DWORK, LDWORK, INFO ) C diff --git a/src/MB04QU.f b/src/MB04QU.f index 06e1032..7af42e8 100644 --- a/src/MB04QU.f +++ b/src/MB04QU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04QU( TRANC, TRAND, TRANQ, STOREV, STOREW, M, N, K, $ V, LDV, W, LDW, C, LDC, D, LDD, CS, TAU, DWORK, $ LDWORK, INFO ) diff --git a/src/MB04RB.f b/src/MB04RB.f index 78eb5d8..b2d9341 100644 --- a/src/MB04RB.f +++ b/src/MB04RB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04RB( N, ILO, A, LDA, QG, LDQG, CS, TAU, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB04RD.f b/src/MB04RD.f index 36b2612..5fd16a7 100644 --- a/src/MB04RD.f +++ b/src/MB04RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04RD( JOBX, JOBY, SORT, N, PMAX, A, LDA, B, LDB, X, $ LDX, Y, LDY, NBLCKS, BLSIZE, ALPHAR, ALPHAI, $ BETA, TOL, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/MB04RS.f b/src/MB04RS.f index 080583c..63ab794 100644 --- a/src/MB04RS.f +++ b/src/MB04RS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04RS( M, N, PMAX, A, LDA, B, LDB, C, LDC, D, LDD, E, $ LDE, F, LDF, SCALE, IWORK, INFO ) C diff --git a/src/MB04RT.f b/src/MB04RT.f index 9e53b03..339c743 100644 --- a/src/MB04RT.f +++ b/src/MB04RT.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04RT( M, N, PMAX, A, LDA, B, LDB, C, LDC, D, LDD, E, $ LDE, F, LDF, SCALE, IWORK, INFO ) C diff --git a/src/MB04RU.f b/src/MB04RU.f index 1355aba..c41ebbb 100644 --- a/src/MB04RU.f +++ b/src/MB04RU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04RU( N, ILO, A, LDA, QG, LDQG, CS, TAU, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB04RV.f b/src/MB04RV.f index c532634..a0b706d 100644 --- a/src/MB04RV.f +++ b/src/MB04RV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04RV( M, N, PMAX, A, LDA, B, LDB, C, LDC, D, LDD, E, $ LDE, F, LDF, SCALE, INFO ) C diff --git a/src/MB04RW.f b/src/MB04RW.f index 5a75330..9b93cda 100644 --- a/src/MB04RW.f +++ b/src/MB04RW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04RW( M, N, PMAX, A, LDA, B, LDB, C, LDC, D, LDD, E, $ LDE, F, LDF, SCALE, IWORK, INFO ) C diff --git a/src/MB04RZ.f b/src/MB04RZ.f index dec183c..a5d52f3 100644 --- a/src/MB04RZ.f +++ b/src/MB04RZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04RZ( JOBX, JOBY, SORT, N, PMAX, A, LDA, B, LDB, X, $ LDX, Y, LDY, NBLCKS, BLSIZE, ALPHA, BETA, TOL, $ IWORK, INFO ) diff --git a/src/MB04SU.f b/src/MB04SU.f index 0ab445a..8dd23f2 100644 --- a/src/MB04SU.f +++ b/src/MB04SU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04SU( M, N, A, LDA, B, LDB, CS, TAU, DWORK, LDWORK, $ INFO ) C diff --git a/src/MB04TB.f b/src/MB04TB.f index 5c6fb48..fc95bf0 100644 --- a/src/MB04TB.f +++ b/src/MB04TB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04TB( TRANA, TRANB, N, ILO, A, LDA, B, LDB, G, LDG, $ Q, LDQ, CSL, CSR, TAUL, TAUR, DWORK, LDWORK, $ INFO ) diff --git a/src/MB04TS.f b/src/MB04TS.f index 2e032b7..ef63a10 100644 --- a/src/MB04TS.f +++ b/src/MB04TS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04TS( TRANA, TRANB, N, ILO, A, LDA, B, LDB, G, LDG, $ Q, LDQ, CSL, CSR, TAUL, TAUR, DWORK, LDWORK, $ INFO ) diff --git a/src/MB04TT.f b/src/MB04TT.f index 95cf506..217ee38 100644 --- a/src/MB04TT.f +++ b/src/MB04TT.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04TT( UPDATQ, UPDATZ, M, N, IFIRA, IFICA, NCA, A, $ LDA, E, LDE, Q, LDQ, Z, LDZ, ISTAIR, RANK, TOL, $ IWORK ) diff --git a/src/MB04TU.f b/src/MB04TU.f index e8575ee..2bf1d02 100644 --- a/src/MB04TU.f +++ b/src/MB04TU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04TU( N, X, INCX, Y, INCY, C, S ) C C PURPOSE diff --git a/src/MB04TV.f b/src/MB04TV.f index 3f26152..9aff9b9 100644 --- a/src/MB04TV.f +++ b/src/MB04TV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04TV( UPDATZ, N, NRA, NCA, IFIRA, IFICA, A, LDA, E, $ LDE, Z, LDZ ) C diff --git a/src/MB04TW.f b/src/MB04TW.f index 7df6464..f784b9e 100644 --- a/src/MB04TW.f +++ b/src/MB04TW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04TW( UPDATQ, M, N, NRE, NCE, IFIRE, IFICE, IFICA, A, $ LDA, E, LDE, Q, LDQ ) C diff --git a/src/MB04TX.f b/src/MB04TX.f index 3a208ea..fff74a1 100644 --- a/src/MB04TX.f +++ b/src/MB04TX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04TX( UPDATQ, UPDATZ, M, N, NBLCKS, INUK, IMUK, A, $ LDA, E, LDE, Q, LDQ, Z, LDZ, MNEI ) C diff --git a/src/MB04TY.f b/src/MB04TY.f index bf6d1db..9f63661 100644 --- a/src/MB04TY.f +++ b/src/MB04TY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04TY( UPDATQ, UPDATZ, M, N, NBLCKS, INUK, IMUK, A, $ LDA, E, LDE, Q, LDQ, Z, LDZ, INFO ) C diff --git a/src/MB04UD.f b/src/MB04UD.f index b1808e1..7b638a9 100644 --- a/src/MB04UD.f +++ b/src/MB04UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04UD( JOBQ, JOBZ, M, N, A, LDA, E, LDE, Q, LDQ, $ Z, LDZ, RANKE, ISTAIR, TOL, DWORK, INFO ) C diff --git a/src/MB04VD.f b/src/MB04VD.f index 1da1ed6..0b683e9 100644 --- a/src/MB04VD.f +++ b/src/MB04VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04VD( MODE, JOBQ, JOBZ, M, N, RANKE, A, LDA, E, LDE, $ Q, LDQ, Z, LDZ, ISTAIR, NBLCKS, NBLCKI, IMUK, $ INUK, IMUK0, MNEI, TOL, IWORK, INFO ) diff --git a/src/MB04VX.f b/src/MB04VX.f index 8a33b35..ae546bd 100644 --- a/src/MB04VX.f +++ b/src/MB04VX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04VX( UPDATQ, UPDATZ, M, N, NBLCKS, INUK, IMUK, A, $ LDA, E, LDE, Q, LDQ, Z, LDZ, MNEI ) C diff --git a/src/MB04WD.f b/src/MB04WD.f index 1a8d259..97717e5 100644 --- a/src/MB04WD.f +++ b/src/MB04WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04WD( TRANQ1, TRANQ2, M, N, K, Q1, LDQ1, Q2, LDQ2, $ CS, TAU, DWORK, LDWORK, INFO ) C diff --git a/src/MB04WP.f b/src/MB04WP.f index bd573b5..a8a6dba 100644 --- a/src/MB04WP.f +++ b/src/MB04WP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04WP( N, ILO, U1, LDU1, U2, LDU2, CS, TAU, DWORK, $ LDWORK, INFO ) C diff --git a/src/MB04WR.f b/src/MB04WR.f index 6401ddd..1b880e5 100644 --- a/src/MB04WR.f +++ b/src/MB04WR.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04WR( JOB, TRANS, N, ILO, Q1, LDQ1, Q2, LDQ2, CS, $ TAU, DWORK, LDWORK, INFO ) C diff --git a/src/MB04WU.f b/src/MB04WU.f index 30c55ea..3a36bce 100644 --- a/src/MB04WU.f +++ b/src/MB04WU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04WU( TRANQ1, TRANQ2, M, N, K, Q1, LDQ1, Q2, LDQ2, $ CS, TAU, DWORK, LDWORK, INFO ) C diff --git a/src/MB04XD.f b/src/MB04XD.f index 9236b20..aae4a64 100644 --- a/src/MB04XD.f +++ b/src/MB04XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04XD( JOBU, JOBV, M, N, RANK, THETA, A, LDA, U, LDU, $ V, LDV, Q, INUL, TOL, RELTOL, DWORK, LDWORK, $ IWARN, INFO ) diff --git a/src/MB04XY.f b/src/MB04XY.f index c80f993..2fb380a 100644 --- a/src/MB04XY.f +++ b/src/MB04XY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04XY( JOBU, JOBV, M, N, X, LDX, TAUP, TAUQ, U, $ LDU, V, LDV, INUL, INFO ) C diff --git a/src/MB04YD.f b/src/MB04YD.f index 5e16381..cc9d8c3 100644 --- a/src/MB04YD.f +++ b/src/MB04YD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04YD( JOBU, JOBV, M, N, RANK, THETA, Q, E, U, LDU, V, $ LDV, INUL, TOL, RELTOL, DWORK, LDWORK, IWARN, $ INFO ) diff --git a/src/MB04YW.f b/src/MB04YW.f index e46e61a..4a59cff 100644 --- a/src/MB04YW.f +++ b/src/MB04YW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04YW( QRIT, UPDATU, UPDATV, M, N, L, K, SHIFT, D, E, $ U, LDU, V, LDV, DWORK ) C diff --git a/src/MB04ZD.f b/src/MB04ZD.f index 5986dd9..2e5f2ea 100644 --- a/src/MB04ZD.f +++ b/src/MB04ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB04ZD( COMPU, N, A, LDA, QG, LDQG, U, LDU, DWORK, INFO $ ) C diff --git a/src/MB05MD.f b/src/MB05MD.f index bc8e64e..ef141e4 100644 --- a/src/MB05MD.f +++ b/src/MB05MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB05MD( BALANC, N, DELTA, A, LDA, V, LDV, Y, LDY, VALR, $ VALI, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/MB05MY.f b/src/MB05MY.f index 3e6c9b3..1959962 100644 --- a/src/MB05MY.f +++ b/src/MB05MY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB05MY( BALANC, N, A, LDA, WR, WI, R, LDR, Q, LDQ, $ DWORK, LDWORK, INFO ) C diff --git a/src/MB05ND.f b/src/MB05ND.f index f7fac11..a633d08 100644 --- a/src/MB05ND.f +++ b/src/MB05ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB05ND( N, DELTA, A, LDA, EX, LDEX, EXINT, LDEXIN, $ TOL, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/MB05OD.f b/src/MB05OD.f index b4adc99..7cfe06a 100644 --- a/src/MB05OD.f +++ b/src/MB05OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB05OD( BALANC, N, NDIAG, DELTA, A, LDA, MDIG, IDIG, $ IWORK, DWORK, LDWORK, IWARN, INFO ) C diff --git a/src/MB05OY.f b/src/MB05OY.f index ff39238..23c015c 100644 --- a/src/MB05OY.f +++ b/src/MB05OY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB05OY( JOB, N, LOW, IGH, A, LDA, SCALE, INFO ) C C PURPOSE diff --git a/src/MB3JZP.f b/src/MB3JZP.f index 93f6f27..83c2418 100644 --- a/src/MB3JZP.f +++ b/src/MB3JZP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB3JZP( COMPQ, N, A, LDA, D, LDD, B, LDB, F, LDF, Q, $ LDQ, NEIG, TOL, DWORK, ZWORK, INFO ) C diff --git a/src/MB3LZP.f b/src/MB3LZP.f index 86038c2..9fd0c76 100644 --- a/src/MB3LZP.f +++ b/src/MB3LZP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB3LZP( COMPQ, ORTH, N, A, LDA, DE, LDDE, B, LDB, FG, $ LDFG, NEIG, Q, LDQ, ALPHAR, ALPHAI, BETA, $ IWORK, DWORK, LDWORK, ZWORK, LZWORK, BWORK, diff --git a/src/MB3OYZ.f b/src/MB3OYZ.f index 2e01fd6..3fe7c18 100644 --- a/src/MB3OYZ.f +++ b/src/MB3OYZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB3OYZ( M, N, A, LDA, RCOND, SVLMAX, RANK, SVAL, JPVT, $ TAU, DWORK, ZWORK, INFO ) C diff --git a/src/MB3PYZ.f b/src/MB3PYZ.f index a3ca665..5ad453f 100644 --- a/src/MB3PYZ.f +++ b/src/MB3PYZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB3PYZ( M, N, A, LDA, RCOND, SVLMAX, RANK, SVAL, JPVT, $ TAU, DWORK, ZWORK, INFO ) C diff --git a/src/MB4DBZ.f b/src/MB4DBZ.f index c74821a..02cbbaf 100644 --- a/src/MB4DBZ.f +++ b/src/MB4DBZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB4DBZ( JOB, SGN, N, ILO, LSCALE, RSCALE, M, V1, LDV1, $ V2, LDV2, INFO ) C diff --git a/src/MB4DLZ.f b/src/MB4DLZ.f index f7ddfde..cc2be2a 100644 --- a/src/MB4DLZ.f +++ b/src/MB4DLZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB4DLZ( JOB, N, THRESH, A, LDA, B, LDB, ILO, IHI, $ LSCALE, RSCALE, DWORK, IWARN, INFO ) C diff --git a/src/MB4DPZ.f b/src/MB4DPZ.f index d2789aa..9808a49 100644 --- a/src/MB4DPZ.f +++ b/src/MB4DPZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MB4DPZ( JOB, N, THRESH, A, LDA, DE, LDDE, C, LDC, VW, $ LDVW, ILO, LSCALE, RSCALE, DWORK, IWARN, INFO ) C diff --git a/src/MC01MD.f b/src/MC01MD.f index e3e791b..399c320 100644 --- a/src/MC01MD.f +++ b/src/MC01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01MD( DP, ALPHA, K, P, Q, INFO ) C C PURPOSE diff --git a/src/MC01ND.f b/src/MC01ND.f index d07348a..14ac1a2 100644 --- a/src/MC01ND.f +++ b/src/MC01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01ND( DP, XR, XI, P, VR, VI, INFO ) C C PURPOSE diff --git a/src/MC01OD.f b/src/MC01OD.f index 2e441af..6e3462d 100644 --- a/src/MC01OD.f +++ b/src/MC01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01OD( K, REZ, IMZ, REP, IMP, DWORK, INFO ) C C PURPOSE diff --git a/src/MC01PD.f b/src/MC01PD.f index 2f4ef0b..b228b7a 100644 --- a/src/MC01PD.f +++ b/src/MC01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01PD( K, REZ, IMZ, P, DWORK, INFO ) C C PURPOSE diff --git a/src/MC01PY.f b/src/MC01PY.f index f092f67..915f500 100644 --- a/src/MC01PY.f +++ b/src/MC01PY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01PY( K, REZ, IMZ, P, DWORK, INFO ) C C PURPOSE diff --git a/src/MC01QD.f b/src/MC01QD.f index 5537533..cb1d9e4 100644 --- a/src/MC01QD.f +++ b/src/MC01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01QD( DA, DB, A, B, RQ, IWARN, INFO ) C C PURPOSE diff --git a/src/MC01RD.f b/src/MC01RD.f index 5400f35..82392f4 100644 --- a/src/MC01RD.f +++ b/src/MC01RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01RD( DP1, DP2, DP3, ALPHA, P1, P2, P3, INFO ) C C PURPOSE diff --git a/src/MC01SD.f b/src/MC01SD.f index 61e0ca3..e66b016 100644 --- a/src/MC01SD.f +++ b/src/MC01SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01SD( DP, P, S, T, MANT, E, IWORK, INFO ) C C PURPOSE diff --git a/src/MC01SW.f b/src/MC01SW.f index 6f3880e..5dc647b 100644 --- a/src/MC01SW.f +++ b/src/MC01SW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01SW( A, B, M, E ) C C PURPOSE diff --git a/src/MC01SX.f b/src/MC01SX.f index 64edf60..60b553c 100644 --- a/src/MC01SX.f +++ b/src/MC01SX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C INTEGER FUNCTION MC01SX( LB, UB, E, MANT ) C C PURPOSE diff --git a/src/MC01SY.f b/src/MC01SY.f index a0274e4..ca63d44 100644 --- a/src/MC01SY.f +++ b/src/MC01SY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01SY( M, E, B, A, OVFLOW ) C C PURPOSE diff --git a/src/MC01TD.f b/src/MC01TD.f index aa7ed1e..e1221fa 100644 --- a/src/MC01TD.f +++ b/src/MC01TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01TD( DICO, DP, P, STABLE, NZ, DWORK, IWARN, INFO ) C C PURPOSE diff --git a/src/MC01VD.f b/src/MC01VD.f index 1139261..3200a27 100644 --- a/src/MC01VD.f +++ b/src/MC01VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01VD( A, B, C, Z1RE, Z1IM, Z2RE, Z2IM, INFO ) C C PURPOSE diff --git a/src/MC01WD.f b/src/MC01WD.f index 66aff19..e7c70f7 100644 --- a/src/MC01WD.f +++ b/src/MC01WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01WD( DP, P, U1, U2, Q, INFO ) C C PURPOSE diff --git a/src/MC01XD.f b/src/MC01XD.f index 1dd0fd7..75b7c78 100644 --- a/src/MC01XD.f +++ b/src/MC01XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC01XD( ALPHA, BETA, GAMMA, DELTA, EVR, EVI, EVQ, $ DWORK, LDWORK, INFO ) C diff --git a/src/MC03MD.f b/src/MC03MD.f index a0cc85a..feb96ab 100644 --- a/src/MC03MD.f +++ b/src/MC03MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC03MD( RP1, CP1, CP2, DP1, DP2, DP3, ALPHA, P1, $ LDP11, LDP12, P2, LDP21, LDP22, P3, LDP31, $ LDP32, DWORK, INFO ) diff --git a/src/MC03ND.f b/src/MC03ND.f index 3def87c..769d472 100644 --- a/src/MC03ND.f +++ b/src/MC03ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC03ND( MP, NP, DP, P, LDP1, LDP2, DK, GAM, NULLSP, $ LDNULL, KER, LDKER1, LDKER2, TOL, IWORK, DWORK, $ LDWORK, INFO ) diff --git a/src/MC03NX.f b/src/MC03NX.f index 69d2473..486070d 100644 --- a/src/MC03NX.f +++ b/src/MC03NX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC03NX( MP, NP, DP, P, LDP1, LDP2, A, LDA, E, LDE ) C C PURPOSE diff --git a/src/MC03NY.f b/src/MC03NY.f index 8e28ec5..bd9dfea 100644 --- a/src/MC03NY.f +++ b/src/MC03NY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MC03NY( NBLCKS, NRA, NCA, A, LDA, E, LDE, IMUK, INUK, $ VEPS, LDVEPS, INFO ) C diff --git a/src/MD03AD.f b/src/MD03AD.f index 7f0b386..01a3473 100644 --- a/src/MD03AD.f +++ b/src/MD03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MD03AD( XINIT, ALG, STOR, UPLO, FCN, JPJ, M, N, ITMAX, $ NPRINT, IPAR, LIPAR, DPAR1, LDPAR1, DPAR2, $ LDPAR2, X, NFEV, NJEV, TOL, CGTOL, DWORK, diff --git a/src/MD03BA.f b/src/MD03BA.f index cc617c6..3533f77 100644 --- a/src/MD03BA.f +++ b/src/MD03BA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MD03BA( N, IPAR, LIPAR, FNORM, J, LDJ, E, JNORMS, $ GNORM, IPVT, DWORK, LDWORK, INFO ) C diff --git a/src/MD03BB.f b/src/MD03BB.f index c833a2f..5c04b8e 100644 --- a/src/MD03BB.f +++ b/src/MD03BB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MD03BB( COND, N, IPAR, LIPAR, R, LDR, IPVT, DIAG, QTB, $ DELTA, PAR, RANKS, X, RX, TOL, DWORK, LDWORK, $ INFO ) diff --git a/src/MD03BD.f b/src/MD03BD.f index b502d13..cafaa77 100644 --- a/src/MD03BD.f +++ b/src/MD03BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MD03BD( XINIT, SCALE, COND, FCN, QRFACT, LMPARM, M, N, $ ITMAX, FACTOR, NPRINT, IPAR, LIPAR, DPAR1, $ LDPAR1, DPAR2, LDPAR2, X, DIAG, NFEV, NJEV, diff --git a/src/MD03BF.f b/src/MD03BF.f index bc28cd2..3c65ea8 100644 --- a/src/MD03BF.f +++ b/src/MD03BF.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MD03BF( IFLAG, M, N, IPAR, LIPAR, DPAR1, LDPAR1, DPAR2, $ LDPAR2, X, NFEVL, E, J, LDJ, DWORK, LDWORK, $ INFO ) diff --git a/src/MD03BX.f b/src/MD03BX.f index 61bf15d..3d3e939 100644 --- a/src/MD03BX.f +++ b/src/MD03BX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MD03BX( M, N, FNORM, J, LDJ, E, JNORMS, GNORM, IPVT, $ DWORK, LDWORK, INFO ) C diff --git a/src/MD03BY.f b/src/MD03BY.f index b6cddd3..de1eab9 100644 --- a/src/MD03BY.f +++ b/src/MD03BY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE MD03BY( COND, N, R, LDR, IPVT, DIAG, QTB, DELTA, PAR, $ RANK, X, RX, TOL, DWORK, LDWORK, INFO ) C diff --git a/src/NF01AD.f b/src/NF01AD.f index 54b837f..0203263 100644 --- a/src/NF01AD.f +++ b/src/NF01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01AD( NSMP, M, L, IPAR, LIPAR, X, LX, U, LDU, Y, LDY, $ DWORK, LDWORK, INFO ) C diff --git a/src/NF01AY.f b/src/NF01AY.f index dbeb284..ef2f4f1 100644 --- a/src/NF01AY.f +++ b/src/NF01AY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01AY( NSMP, NZ, L, IPAR, LIPAR, WB, LWB, Z, LDZ, $ Y, LDY, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BA.f b/src/NF01BA.f index 8ff39ee..8260a9d 100644 --- a/src/NF01BA.f +++ b/src/NF01BA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BA( IFLAG, NSMP, N, IPAR, LIPAR, Z, LDZ, Y, LDY, X, $ NFEVL, E, J, LDJ, JTE, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BB.f b/src/NF01BB.f index 50cc543..9bb29a4 100644 --- a/src/NF01BB.f +++ b/src/NF01BB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BB( IFLAG, NFUN, LX, IPAR, LIPAR, U, LDU, Y, LDY, $ X, NFEVL, E, J, LDJ, JTE, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BD.f b/src/NF01BD.f index e8e0ab1..69d9a03 100644 --- a/src/NF01BD.f +++ b/src/NF01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BD( CJTE, NSMP, M, L, IPAR, LIPAR, X, LX, U, LDU, $ E, J, LDJ, JTE, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BE.f b/src/NF01BE.f index 04aba09..cd900ae 100644 --- a/src/NF01BE.f +++ b/src/NF01BE.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BE( IFLAG, NSMP, N, IPAR, LIPAR, Z, LDZ, Y, LDY, X, $ NFEVL, E, J, LDJ, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BF.f b/src/NF01BF.f index 38bb7af..b5abae0 100644 --- a/src/NF01BF.f +++ b/src/NF01BF.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BF( IFLAG, NFUN, LX, IPAR, LIPAR, U, LDU, Y, LDY, $ X, NFEVL, E, J, LDJ, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BP.f b/src/NF01BP.f index b1ded26..8a23747 100644 --- a/src/NF01BP.f +++ b/src/NF01BP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BP( COND, N, IPAR, LIPAR, R, LDR, IPVT, DIAG, QTB, $ DELTA, PAR, RANKS, X, RX, TOL, DWORK, LDWORK, $ INFO ) diff --git a/src/NF01BQ.f b/src/NF01BQ.f index 48b9bd4..4c3594f 100644 --- a/src/NF01BQ.f +++ b/src/NF01BQ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BQ( COND, N, IPAR, LIPAR, R, LDR, IPVT, DIAG, QTB, $ RANKS, X, TOL, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BR.f b/src/NF01BR.f index 76646cd..09923c9 100644 --- a/src/NF01BR.f +++ b/src/NF01BR.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BR( COND, UPLO, TRANS, N, IPAR, LIPAR, R, LDR, $ SDIAG, S, LDS, B, RANKS, TOL, DWORK, LDWORK, $ INFO ) diff --git a/src/NF01BS.f b/src/NF01BS.f index f83116d..bbbd87a 100644 --- a/src/NF01BS.f +++ b/src/NF01BS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BS( N, IPAR, LIPAR, FNORM, J, LDJ, E, JNORMS, $ GNORM, IPVT, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BU.f b/src/NF01BU.f index b8c279f..ce6d0bd 100644 --- a/src/NF01BU.f +++ b/src/NF01BU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BU( STOR, UPLO, N, IPAR, LIPAR, DPAR, LDPAR, J, $ LDJ, JTJ, LDJTJ, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BV.f b/src/NF01BV.f index a50a399..215774e 100644 --- a/src/NF01BV.f +++ b/src/NF01BV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BV( STOR, UPLO, N, IPAR, LIPAR, DPAR, LDPAR, J, $ LDJ, JTJ, LDJTJ, DWORK, LDWORK, INFO ) C diff --git a/src/NF01BW.f b/src/NF01BW.f index 95bd444..a703500 100644 --- a/src/NF01BW.f +++ b/src/NF01BW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BW( N, IPAR, LIPAR, DPAR, LDPAR, J, LDJ, X, INCX, $ DWORK, LDWORK, INFO ) C diff --git a/src/NF01BX.f b/src/NF01BX.f index 3721108..c01f0d0 100644 --- a/src/NF01BX.f +++ b/src/NF01BX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BX( N, IPAR, LIPAR, DPAR, LDPAR, J, LDJ, X, INCX, $ DWORK, LDWORK, INFO ) C diff --git a/src/NF01BY.f b/src/NF01BY.f index 8a607b8..e2081e5 100644 --- a/src/NF01BY.f +++ b/src/NF01BY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE NF01BY( CJTE, NSMP, NZ, L, IPAR, LIPAR, WB, LWB, Z, $ LDZ, E, J, LDJ, JTE, DWORK, LDWORK, INFO ) C diff --git a/src/SB01BD.f b/src/SB01BD.f index a5839ea..d0dbd46 100644 --- a/src/SB01BD.f +++ b/src/SB01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB01BD( DICO, N, M, NP, ALPHA, A, LDA, B, LDB, WR, WI, $ NFP, NAP, NUP, F, LDF, Z, LDZ, TOL, DWORK, $ LDWORK, IWARN, INFO ) diff --git a/src/SB01BX.f b/src/SB01BX.f index 7a1f3a4..4c7eb1b 100644 --- a/src/SB01BX.f +++ b/src/SB01BX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB01BX( REIG, N, XR, XI, WR, WI, S, P ) C C PURPOSE diff --git a/src/SB01BY.f b/src/SB01BY.f index 282c7da..b8bbb13 100644 --- a/src/SB01BY.f +++ b/src/SB01BY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB01BY( N, M, S, P, A, B, F, TOL, DWORK, INFO ) C C PURPOSE diff --git a/src/SB01DD.f b/src/SB01DD.f index f93201e..b35d55a 100644 --- a/src/SB01DD.f +++ b/src/SB01DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB01DD( N, M, INDCON, A, LDA, B, LDB, NBLK, WR, WI, $ Z, LDZ, Y, COUNT, G, LDG, TOL, IWORK, DWORK, $ LDWORK, INFO ) diff --git a/src/SB01FY.f b/src/SB01FY.f index 0817ad7..55eea4c 100644 --- a/src/SB01FY.f +++ b/src/SB01FY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB01FY( DISCR, N, M, A, LDA, B, LDB, F, LDF, V, LDV, $ INFO ) C diff --git a/src/SB01MD.f b/src/SB01MD.f index 04e3a0d..aa94929 100644 --- a/src/SB01MD.f +++ b/src/SB01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB01MD( NCONT, N, A, LDA, B, WR, WI, Z, LDZ, G, DWORK, $ INFO ) C diff --git a/src/SB02CX.f b/src/SB02CX.f index 041473c..1f648c7 100644 --- a/src/SB02CX.f +++ b/src/SB02CX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02CX( REIG, IEIG ) C C PURPOSE diff --git a/src/SB02MD.f b/src/SB02MD.f index 822df5b..abee144 100644 --- a/src/SB02MD.f +++ b/src/SB02MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02MD( DICO, HINV, UPLO, SCAL, SORT, N, A, LDA, G, $ LDG, Q, LDQ, RCOND, WR, WI, S, LDS, U, LDU, $ IWORK, DWORK, LDWORK, BWORK, INFO ) diff --git a/src/SB02MR.f b/src/SB02MR.f index 15e20a1..2614f92 100644 --- a/src/SB02MR.f +++ b/src/SB02MR.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02MR( REIG, IEIG ) C C PURPOSE diff --git a/src/SB02MS.f b/src/SB02MS.f index 974fa8f..7c440b6 100644 --- a/src/SB02MS.f +++ b/src/SB02MS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02MS( REIG, IEIG ) C C PURPOSE diff --git a/src/SB02MT.f b/src/SB02MT.f index d6c7475..342e7ae 100644 --- a/src/SB02MT.f +++ b/src/SB02MT.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02MT( JOBG, JOBL, FACT, UPLO, N, M, A, LDA, B, LDB, $ Q, LDQ, R, LDR, L, LDL, IPIV, OUFACT, G, LDG, $ IWORK, DWORK, LDWORK, INFO ) diff --git a/src/SB02MU.f b/src/SB02MU.f index 1abe1df..f544af9 100644 --- a/src/SB02MU.f +++ b/src/SB02MU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02MU( DICO, HINV, UPLO, N, A, LDA, G, LDG, Q, LDQ, S, $ LDS, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/SB02MV.f b/src/SB02MV.f index 5f13471..9b5609e 100644 --- a/src/SB02MV.f +++ b/src/SB02MV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02MV( REIG, IEIG ) C C PURPOSE diff --git a/src/SB02MW.f b/src/SB02MW.f index 561adf5..bee1a2c 100644 --- a/src/SB02MW.f +++ b/src/SB02MW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02MW( REIG, IEIG ) C C PURPOSE diff --git a/src/SB02MX.f b/src/SB02MX.f index 773ad51..04a1a54 100644 --- a/src/SB02MX.f +++ b/src/SB02MX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02MX( JOBG, JOBL, FACT, UPLO, TRANS, FLAG, DEF, N, M, $ A, LDA, B, LDB, Q, LDQ, R, LDR, L, LDL, IPIV, $ OUFACT, G, LDG, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/SB02ND.f b/src/SB02ND.f index a98a53f..0f2a1b8 100644 --- a/src/SB02ND.f +++ b/src/SB02ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02ND( DICO, FACT, UPLO, JOBL, N, M, P, A, LDA, B, $ LDB, R, LDR, IPIV, L, LDL, X, LDX, RNORM, F, $ LDF, OUFACT, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/SB02OD.f b/src/SB02OD.f index cdf2c8d..b3e4b50 100644 --- a/src/SB02OD.f +++ b/src/SB02OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02OD( DICO, JOBB, FACT, UPLO, JOBL, SORT, N, M, P, A, $ LDA, B, LDB, Q, LDQ, R, LDR, L, LDL, RCOND, X, $ LDX, ALFAR, ALFAI, BETA, S, LDS, T, LDT, U, diff --git a/src/SB02OU.f b/src/SB02OU.f index 5824986..21ad379 100644 --- a/src/SB02OU.f +++ b/src/SB02OU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02OU( ALPHAR, ALPHAI, BETA ) C C PURPOSE diff --git a/src/SB02OV.f b/src/SB02OV.f index ca365df..b9ed6f9 100644 --- a/src/SB02OV.f +++ b/src/SB02OV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02OV( ALPHAR, ALPHAI, BETA ) C C PURPOSE diff --git a/src/SB02OW.f b/src/SB02OW.f index 3b8b777..82a4fcb 100644 --- a/src/SB02OW.f +++ b/src/SB02OW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02OW( ALPHAR, ALPHAI, BETA ) C C PURPOSE diff --git a/src/SB02OX.f b/src/SB02OX.f index 50f37d0..c4f306b 100644 --- a/src/SB02OX.f +++ b/src/SB02OX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SB02OX( ALPHAR, ALPHAI, BETA ) C C PURPOSE diff --git a/src/SB02OY.f b/src/SB02OY.f index 88365aa..f356b01 100644 --- a/src/SB02OY.f +++ b/src/SB02OY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02OY( TYPE, DICO, JOBB, FACT, UPLO, JOBL, JOBE, N, M, $ P, A, LDA, B, LDB, Q, LDQ, R, LDR, L, LDL, E, $ LDE, AF, LDAF, BF, LDBF, TOL, IWORK, DWORK, diff --git a/src/SB02PD.f b/src/SB02PD.f index face84d..c5a54f8 100644 --- a/src/SB02PD.f +++ b/src/SB02PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02PD( JOB, TRANA, UPLO, N, A, LDA, G, LDG, Q, LDQ, X, $ LDX, RCOND, FERR, WR, WI, IWORK, DWORK, LDWORK, $ INFO ) diff --git a/src/SB02QD.f b/src/SB02QD.f index 88d762e..d47d31f 100644 --- a/src/SB02QD.f +++ b/src/SB02QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02QD( JOB, FACT, TRANA, UPLO, LYAPUN, N, A, LDA, T, $ LDT, U, LDU, G, LDG, Q, LDQ, X, LDX, SEP, $ RCOND, FERR, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/SB02RD.f b/src/SB02RD.f index 94ec29c..8eb09de 100644 --- a/src/SB02RD.f +++ b/src/SB02RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02RD( JOB, DICO, HINV, TRANA, UPLO, SCAL, SORT, FACT, $ LYAPUN, N, A, LDA, T, LDT, V, LDV, G, LDG, Q, $ LDQ, X, LDX, SEP, RCOND, FERR, WR, WI, S, LDS, diff --git a/src/SB02RU.f b/src/SB02RU.f index d171a58..b1f5da2 100644 --- a/src/SB02RU.f +++ b/src/SB02RU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02RU( DICO, HINV, TRANA, UPLO, N, A, LDA, G, LDG, Q, $ LDQ, S, LDS, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/SB02SD.f b/src/SB02SD.f index 679f0d1..47b75fd 100644 --- a/src/SB02SD.f +++ b/src/SB02SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB02SD( JOB, FACT, TRANA, UPLO, LYAPUN, N, A, LDA, T, $ LDT, U, LDU, G, LDG, Q, LDQ, X, LDX, SEPD, $ RCOND, FERR, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/SB03MD.f b/src/SB03MD.f index 749e58b..db18505 100644 --- a/src/SB03MD.f +++ b/src/SB03MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03MD( DICO, JOB, FACT, TRANA, N, A, LDA, U, LDU, C, $ LDC, SCALE, SEP, FERR, WR, WI, IWORK, DWORK, $ LDWORK, INFO ) diff --git a/src/SB03MU.f b/src/SB03MU.f index 39a32fd..b6ac4fc 100644 --- a/src/SB03MU.f +++ b/src/SB03MU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03MU( LTRANL, LTRANR, ISGN, N1, N2, TL, LDTL, TR, $ LDTR, B, LDB, SCALE, X, LDX, XNORM, INFO ) C diff --git a/src/SB03MV.f b/src/SB03MV.f index d58ba56..db8296e 100644 --- a/src/SB03MV.f +++ b/src/SB03MV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03MV( LTRAN, LUPPER, T, LDT, B, LDB, SCALE, X, LDX, $ XNORM, INFO ) C diff --git a/src/SB03MW.f b/src/SB03MW.f index 96da063..2aa7f23 100644 --- a/src/SB03MW.f +++ b/src/SB03MW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03MW( LTRAN, LUPPER, T, LDT, B, LDB, SCALE, X, LDX, $ XNORM, INFO ) C diff --git a/src/SB03MX.f b/src/SB03MX.f index 5bd61a5..f437a92 100644 --- a/src/SB03MX.f +++ b/src/SB03MX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03MX( TRANA, N, A, LDA, C, LDC, SCALE, DWORK, INFO ) C C PURPOSE diff --git a/src/SB03MY.f b/src/SB03MY.f index 909ecdc..d9e259c 100644 --- a/src/SB03MY.f +++ b/src/SB03MY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03MY( TRANA, N, A, LDA, C, LDC, SCALE, INFO ) C C PURPOSE diff --git a/src/SB03OD.f b/src/SB03OD.f index b5a17bb..b68dab7 100644 --- a/src/SB03OD.f +++ b/src/SB03OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03OD( DICO, FACT, TRANS, N, M, A, LDA, Q, LDQ, B, $ LDB, SCALE, WR, WI, DWORK, LDWORK, INFO ) C diff --git a/src/SB03OR.f b/src/SB03OR.f index ebee2dc..523bfc9 100644 --- a/src/SB03OR.f +++ b/src/SB03OR.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03OR( DISCR, LTRANS, N, M, S, LDS, A, LDA, C, LDC, $ SCALE, INFO ) C diff --git a/src/SB03OS.f b/src/SB03OS.f index d3c5fa2..bb97c78 100644 --- a/src/SB03OS.f +++ b/src/SB03OS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03OS( DISCR, LTRANS, N, S, LDS, R, LDR, SCALE, DWORK, $ ZWORK, INFO ) C diff --git a/src/SB03OT.f b/src/SB03OT.f index f62c2af..95e8c78 100644 --- a/src/SB03OT.f +++ b/src/SB03OT.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03OT( DISCR, LTRANS, N, S, LDS, R, LDR, SCALE, DWORK, $ INFO ) C diff --git a/src/SB03OU.f b/src/SB03OU.f index c86d130..8d4e65a 100644 --- a/src/SB03OU.f +++ b/src/SB03OU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03OU( DISCR, LTRANS, N, M, A, LDA, B, LDB, TAU, U, $ LDU, SCALE, DWORK, LDWORK, INFO ) C diff --git a/src/SB03OV.f b/src/SB03OV.f index cd6cdb2..24d7ef9 100644 --- a/src/SB03OV.f +++ b/src/SB03OV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03OV( A, B, SMALL, C, S ) C C PURPOSE diff --git a/src/SB03OY.f b/src/SB03OY.f index 59b2006..6ae9daa 100644 --- a/src/SB03OY.f +++ b/src/SB03OY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03OY( DISCR, LTRANS, ISGN, S, LDS, R, LDR, A, LDA, $ SCALE, INFO ) C diff --git a/src/SB03OZ.f b/src/SB03OZ.f index 2e4384e..597a96d 100644 --- a/src/SB03OZ.f +++ b/src/SB03OZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03OZ( DICO, FACT, TRANS, N, M, A, LDA, Q, LDQ, B, $ LDB, SCALE, W, DWORK, ZWORK, LZWORK, INFO ) C diff --git a/src/SB03PD.f b/src/SB03PD.f index b17e043..2cd2350 100644 --- a/src/SB03PD.f +++ b/src/SB03PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03PD( JOB, FACT, TRANA, N, A, LDA, U, LDU, C, LDC, $ SCALE, SEPD, FERR, WR, WI, IWORK, DWORK, $ LDWORK, INFO ) diff --git a/src/SB03QD.f b/src/SB03QD.f index 6ff71d1..e5938ba 100644 --- a/src/SB03QD.f +++ b/src/SB03QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03QD( JOB, FACT, TRANA, UPLO, LYAPUN, N, SCALE, A, $ LDA, T, LDT, U, LDU, C, LDC, X, LDX, SEP, $ RCOND, FERR, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/SB03QX.f b/src/SB03QX.f index defa886..7b14c95 100644 --- a/src/SB03QX.f +++ b/src/SB03QX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03QX( TRANA, UPLO, LYAPUN, N, XANORM, T, LDT, U, LDU, $ R, LDR, FERR, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/SB03QY.f b/src/SB03QY.f index 53bba5c..07b63e2 100644 --- a/src/SB03QY.f +++ b/src/SB03QY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03QY( JOB, TRANA, LYAPUN, N, T, LDT, U, LDU, X, LDX, $ SEP, THNORM, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/SB03RD.f b/src/SB03RD.f index 85e1ecd..1d1aa73 100644 --- a/src/SB03RD.f +++ b/src/SB03RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03RD( JOB, FACT, TRANA, N, A, LDA, U, LDU, C, LDC, $ SCALE, SEP, FERR, WR, WI, IWORK, DWORK, $ LDWORK, INFO ) diff --git a/src/SB03SD.f b/src/SB03SD.f index 4145db1..2360022 100644 --- a/src/SB03SD.f +++ b/src/SB03SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03SD( JOB, FACT, TRANA, UPLO, LYAPUN, N, SCALE, A, $ LDA, T, LDT, U, LDU, C, LDC, X, LDX, SEPD, $ RCOND, FERR, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/SB03SX.f b/src/SB03SX.f index 764e422..eccca9a 100644 --- a/src/SB03SX.f +++ b/src/SB03SX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03SX( TRANA, UPLO, LYAPUN, N, XANORM, T, LDT, U, LDU, $ R, LDR, FERR, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/SB03SY.f b/src/SB03SY.f index 206ad84..73a129b 100644 --- a/src/SB03SY.f +++ b/src/SB03SY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03SY( JOB, TRANA, LYAPUN, N, T, LDT, U, LDU, XA, $ LDXA, SEPD, THNORM, IWORK, DWORK, LDWORK, $ INFO ) diff --git a/src/SB03TD.f b/src/SB03TD.f index 8901a37..936e2c5 100644 --- a/src/SB03TD.f +++ b/src/SB03TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03TD( JOB, FACT, TRANA, UPLO, LYAPUN, N, SCALE, A, $ LDA, T, LDT, U, LDU, C, LDC, X, LDX, SEP, $ RCOND, FERR, WR, WI, IWORK, DWORK, LDWORK, diff --git a/src/SB03UD.f b/src/SB03UD.f index f2f3172..0f9e03b 100644 --- a/src/SB03UD.f +++ b/src/SB03UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB03UD( JOB, FACT, TRANA, UPLO, LYAPUN, N, SCALE, A, $ LDA, T, LDT, U, LDU, C, LDC, X, LDX, SEPD, $ RCOND, FERR, WR, WI, IWORK, DWORK, LDWORK, diff --git a/src/SB04MD.f b/src/SB04MD.f index 729c36f..51d8448 100644 --- a/src/SB04MD.f +++ b/src/SB04MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04MD( N, M, A, LDA, B, LDB, C, LDC, Z, LDZ, IWORK, $ DWORK, LDWORK, INFO ) C diff --git a/src/SB04MR.f b/src/SB04MR.f index 3b8b7e4..94d7617 100644 --- a/src/SB04MR.f +++ b/src/SB04MR.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04MR( M, D, IPR, INFO ) C C PURPOSE diff --git a/src/SB04MU.f b/src/SB04MU.f index 9a0c78c..8060b83 100644 --- a/src/SB04MU.f +++ b/src/SB04MU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04MU( N, M, IND, A, LDA, B, LDB, C, LDC, D, IPR, $ INFO ) C diff --git a/src/SB04MW.f b/src/SB04MW.f index a682550..3208c61 100644 --- a/src/SB04MW.f +++ b/src/SB04MW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04MW( M, D, IPR, INFO ) C C PURPOSE diff --git a/src/SB04MY.f b/src/SB04MY.f index e50aade..8b9a180 100644 --- a/src/SB04MY.f +++ b/src/SB04MY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04MY( N, M, IND, A, LDA, B, LDB, C, LDC, D, IPR, $ INFO ) C diff --git a/src/SB04ND.f b/src/SB04ND.f index e25e01b..8fa0532 100644 --- a/src/SB04ND.f +++ b/src/SB04ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04ND( ABSCHU, ULA, ULB, N, M, A, LDA, B, LDB, C, $ LDC, TOL, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/SB04NV.f b/src/SB04NV.f index b4db529..b82ede0 100644 --- a/src/SB04NV.f +++ b/src/SB04NV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04NV( ABSCHR, UL, N, M, C, LDC, INDX, AB, LDAB, D ) C C PURPOSE diff --git a/src/SB04NW.f b/src/SB04NW.f index a52825e..224fa09 100644 --- a/src/SB04NW.f +++ b/src/SB04NW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04NW( ABSCHR, UL, N, M, C, LDC, INDX, AB, LDAB, D ) C C PURPOSE diff --git a/src/SB04NX.f b/src/SB04NX.f index 283e5a5..947f81f 100644 --- a/src/SB04NX.f +++ b/src/SB04NX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04NX( RC, UL, M, A, LDA, LAMBD1, LAMBD2, LAMBD3, $ LAMBD4, D, TOL, IWORK, DWORK, LDDWOR, INFO ) C diff --git a/src/SB04NY.f b/src/SB04NY.f index 9c25734..5a6b3c2 100644 --- a/src/SB04NY.f +++ b/src/SB04NY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04NY( RC, UL, M, A, LDA, LAMBDA, D, TOL, IWORK, $ DWORK, LDDWOR, INFO ) C diff --git a/src/SB04OD.f b/src/SB04OD.f index 05d5bc0..b1ecf5e 100644 --- a/src/SB04OD.f +++ b/src/SB04OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04OD( REDUCE, TRANS, JOBD, M, N, A, LDA, B, LDB, C, $ LDC, D, LDD, E, LDE, F, LDF, SCALE, DIF, P, $ LDP, Q, LDQ, U, LDU, V, LDV, IWORK, DWORK, diff --git a/src/SB04OW.f b/src/SB04OW.f index bc37993..ae841bc 100644 --- a/src/SB04OW.f +++ b/src/SB04OW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04OW( M, N, A, LDA, B, LDB, C, LDC, D, LDD, E, LDE, $ F, LDF, SCALE, IWORK, INFO ) C diff --git a/src/SB04PD.f b/src/SB04PD.f index 7880c1a..6e4790f 100644 --- a/src/SB04PD.f +++ b/src/SB04PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04PD( DICO, FACTA, FACTB, TRANA, TRANB, ISGN, M, N, $ A, LDA, U, LDU, B, LDB, V, LDV, C, LDC, SCALE, $ DWORK, LDWORK, INFO ) diff --git a/src/SB04PX.f b/src/SB04PX.f index 2e1b71d..74532d7 100644 --- a/src/SB04PX.f +++ b/src/SB04PX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04PX( LTRANL, LTRANR, ISGN, N1, N2, TL, LDTL, TR, $ LDTR, B, LDB, SCALE, X, LDX, XNORM, INFO ) C diff --git a/src/SB04PY.f b/src/SB04PY.f index 26a1d56..db6e3f1 100644 --- a/src/SB04PY.f +++ b/src/SB04PY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04PY( TRANA, TRANB, ISGN, M, N, A, LDA, B, LDB, C, $ LDC, SCALE, DWORK, INFO ) C diff --git a/src/SB04QD.f b/src/SB04QD.f index 9ab7e06..c7ca5f0 100644 --- a/src/SB04QD.f +++ b/src/SB04QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04QD( N, M, A, LDA, B, LDB, C, LDC, Z, LDZ, IWORK, $ DWORK, LDWORK, INFO ) C diff --git a/src/SB04QR.f b/src/SB04QR.f index b4dedfa..722020d 100644 --- a/src/SB04QR.f +++ b/src/SB04QR.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04QR( M, D, IPR, INFO ) C C PURPOSE diff --git a/src/SB04QU.f b/src/SB04QU.f index 8832b89..5d12048 100644 --- a/src/SB04QU.f +++ b/src/SB04QU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04QU( N, M, IND, A, LDA, B, LDB, C, LDC, D, IPR, $ INFO ) C diff --git a/src/SB04QY.f b/src/SB04QY.f index a270bbc..2266c23 100644 --- a/src/SB04QY.f +++ b/src/SB04QY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04QY( N, M, IND, A, LDA, B, LDB, C, LDC, D, IPR, $ INFO ) C diff --git a/src/SB04RD.f b/src/SB04RD.f index 9cbbb9a..61431cb 100644 --- a/src/SB04RD.f +++ b/src/SB04RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04RD( ABSCHU, ULA, ULB, N, M, A, LDA, B, LDB, C, $ LDC, TOL, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/SB04RV.f b/src/SB04RV.f index 4b9f202..351cfb7 100644 --- a/src/SB04RV.f +++ b/src/SB04RV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04RV( ABSCHR, UL, N, M, C, LDC, INDX, AB, LDAB, BA, $ LDBA, D, DWORK ) C diff --git a/src/SB04RW.f b/src/SB04RW.f index b718990..843c2cc 100644 --- a/src/SB04RW.f +++ b/src/SB04RW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04RW( ABSCHR, UL, N, M, C, LDC, INDX, AB, LDAB, BA, $ LDBA, D, DWORK ) C diff --git a/src/SB04RX.f b/src/SB04RX.f index a472f44..ea18bc3 100644 --- a/src/SB04RX.f +++ b/src/SB04RX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04RX( RC, UL, M, A, LDA, LAMBD1, LAMBD2, LAMBD3, $ LAMBD4, D, TOL, IWORK, DWORK, LDDWOR, INFO ) C diff --git a/src/SB04RY.f b/src/SB04RY.f index 7d798ed..0e3a4b9 100644 --- a/src/SB04RY.f +++ b/src/SB04RY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB04RY( RC, UL, M, A, LDA, LAMBDA, D, TOL, IWORK, $ DWORK, LDDWOR, INFO ) C diff --git a/src/SB06ND.f b/src/SB06ND.f index 0e85a69..1832037 100644 --- a/src/SB06ND.f +++ b/src/SB06ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB06ND( N, M, KMAX, A, LDA, B, LDB, KSTAIR, U, LDU, F, $ LDF, DWORK, INFO ) C diff --git a/src/SB08CD.f b/src/SB08CD.f index 115cbbd..0b03950 100644 --- a/src/SB08CD.f +++ b/src/SB08CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08CD( DICO, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ NQ, NR, BR, LDBR, DR, LDDR, TOL, DWORK, LDWORK, $ IWARN, INFO ) diff --git a/src/SB08DD.f b/src/SB08DD.f index d0125bc..985dcd4 100644 --- a/src/SB08DD.f +++ b/src/SB08DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08DD( DICO, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, $ NQ, NR, CR, LDCR, DR, LDDR, TOL, DWORK, LDWORK, $ IWARN, INFO ) diff --git a/src/SB08ED.f b/src/SB08ED.f index 8aa446a..4173f36 100644 --- a/src/SB08ED.f +++ b/src/SB08ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08ED( DICO, N, M, P, ALPHA, A, LDA, B, LDB, C, LDC, $ D, LDD, NQ, NR, BR, LDBR, DR, LDDR, TOL, DWORK, $ LDWORK, IWARN, INFO ) diff --git a/src/SB08FD.f b/src/SB08FD.f index f9732d6..843479a 100644 --- a/src/SB08FD.f +++ b/src/SB08FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08FD( DICO, N, M, P, ALPHA, A, LDA, B, LDB, C, LDC, $ D, LDD, NQ, NR, CR, LDCR, DR, LDDR, TOL, DWORK, $ LDWORK, IWARN, INFO ) diff --git a/src/SB08GD.f b/src/SB08GD.f index 6439673..d1d0d65 100644 --- a/src/SB08GD.f +++ b/src/SB08GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08GD( N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, BR, $ LDBR, DR, LDDR, IWORK, DWORK, INFO ) C diff --git a/src/SB08HD.f b/src/SB08HD.f index 0d2d5cf..a01b3fa 100644 --- a/src/SB08HD.f +++ b/src/SB08HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08HD( N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, CR, $ LDCR, DR, LDDR, IWORK, DWORK, INFO ) C diff --git a/src/SB08MD.f b/src/SB08MD.f index afbddfa..cfd8d62 100644 --- a/src/SB08MD.f +++ b/src/SB08MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08MD( ACONA, DA, A, RES, E, DWORK, LDWORK, INFO ) C C PURPOSE diff --git a/src/SB08MY.f b/src/SB08MY.f index edecf17..0054458 100644 --- a/src/SB08MY.f +++ b/src/SB08MY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08MY( DA, A, B, EPSB ) C C PURPOSE diff --git a/src/SB08ND.f b/src/SB08ND.f index 35e4517..9b38579 100644 --- a/src/SB08ND.f +++ b/src/SB08ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08ND( ACONA, DA, A, RES, E, DWORK, LDWORK, INFO ) C C PURPOSE diff --git a/src/SB08NY.f b/src/SB08NY.f index b758057..55eb5b0 100644 --- a/src/SB08NY.f +++ b/src/SB08NY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB08NY( DA, A, B, EPSB ) C C PURPOSE diff --git a/src/SB09MD.f b/src/SB09MD.f index e0894d8..81093a1 100644 --- a/src/SB09MD.f +++ b/src/SB09MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB09MD( N, NC, NB, H1, LDH1, H2, LDH2, SS, LDSS, SE, $ LDSE, PRE, LDPRE, TOL, INFO ) C diff --git a/src/SB10AD.f b/src/SB10AD.f index 392a025..7bcec19 100644 --- a/src/SB10AD.f +++ b/src/SB10AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10AD( JOB, N, M, NP, NCON, NMEAS, GAMMA, A, LDA, $ B, LDB, C, LDC, D, LDD, AK, LDAK, BK, LDBK, CK, $ LDCK, DK, LDDK, AC, LDAC, BC, LDBC, CC, LDCC, diff --git a/src/SB10DD.f b/src/SB10DD.f index 3a4ed78..6ec4776 100644 --- a/src/SB10DD.f +++ b/src/SB10DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10DD( N, M, NP, NCON, NMEAS, GAMMA, A, LDA, B, LDB, $ C, LDC, D, LDD, AK, LDAK, BK, LDBK, CK, LDCK, $ DK, LDDK, X, LDX, Z, LDZ, RCOND, TOL, IWORK, diff --git a/src/SB10ED.f b/src/SB10ED.f index ce73dfa..8c0de74 100644 --- a/src/SB10ED.f +++ b/src/SB10ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10ED( N, M, NP, NCON, NMEAS, A, LDA, B, LDB, C, LDC, $ D, LDD, AK, LDAK, BK, LDBK, CK, LDCK, DK, LDDK, $ RCOND, TOL, IWORK, DWORK, LDWORK, BWORK, INFO ) diff --git a/src/SB10FD.f b/src/SB10FD.f index 54ab86a..e514f22 100644 --- a/src/SB10FD.f +++ b/src/SB10FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10FD( N, M, NP, NCON, NMEAS, GAMMA, A, LDA, B, LDB, $ C, LDC, D, LDD, AK, LDAK, BK, LDBK, CK, LDCK, $ DK, LDDK, RCOND, TOL, IWORK, DWORK, LDWORK, diff --git a/src/SB10HD.f b/src/SB10HD.f index a569872..f57fcba 100644 --- a/src/SB10HD.f +++ b/src/SB10HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10HD( N, M, NP, NCON, NMEAS, A, LDA, B, LDB, C, LDC, $ D, LDD, AK, LDAK, BK, LDBK, CK, LDCK, DK, LDDK, $ RCOND, TOL, IWORK, DWORK, LDWORK, BWORK, INFO ) diff --git a/src/SB10ID.f b/src/SB10ID.f index bd1c6e5..edfbe8b 100644 --- a/src/SB10ID.f +++ b/src/SB10ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10ID( N, M, NP, A, LDA, B, LDB, C, LDC, D, LDD, $ FACTOR, NK, AK, LDAK, BK, LDBK, CK, LDCK, $ DK, LDDK, RCOND, IWORK, DWORK, LDWORK, BWORK, diff --git a/src/SB10JD.f b/src/SB10JD.f index 9b21a4a..7ebdaaf 100644 --- a/src/SB10JD.f +++ b/src/SB10JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10JD( N, M, NP, A, LDA, B, LDB, C, LDC, D, LDD, E, $ LDE, NSYS, DWORK, LDWORK, INFO ) C diff --git a/src/SB10KD.f b/src/SB10KD.f index fbcee1f..5c9e180 100644 --- a/src/SB10KD.f +++ b/src/SB10KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10KD( N, M, NP, A, LDA, B, LDB, C, LDC, FACTOR, $ AK, LDAK, BK, LDBK, CK, LDCK, DK, LDDK, RCOND, $ IWORK, DWORK, LDWORK, BWORK, INFO ) diff --git a/src/SB10LD.f b/src/SB10LD.f index 2fdca57..666e53e 100644 --- a/src/SB10LD.f +++ b/src/SB10LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10LD( N, M, NP, NCON, NMEAS, A, LDA, B, LDB, C, LDC, $ D, LDD, AK, LDAK, BK, LDBK, CK, LDCK, DK, LDDK, $ AC, LDAC, BC, LDBC, CC, LDCC, DC, LDDC, IWORK, diff --git a/src/SB10MD.f b/src/SB10MD.f index 9a29c6e..71d4d67 100644 --- a/src/SB10MD.f +++ b/src/SB10MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10MD( NC, MP, LENDAT, F, ORD, MNB, NBLOCK, ITYPE, $ QUTOL, A, LDA, B, LDB, C, LDC, D, LDD, OMEGA, $ TOTORD, AD, LDAD, BD, LDBD, CD, LDCD, DD, LDDD, diff --git a/src/SB10PD.f b/src/SB10PD.f index 71c2afd..c3f80c4 100644 --- a/src/SB10PD.f +++ b/src/SB10PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10PD( N, M, NP, NCON, NMEAS, A, LDA, B, LDB, C, LDC, $ D, LDD, TU, LDTU, TY, LDTY, RCOND, TOL, DWORK, $ LDWORK, INFO ) diff --git a/src/SB10QD.f b/src/SB10QD.f index 63b4d5a..fee2715 100644 --- a/src/SB10QD.f +++ b/src/SB10QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10QD( N, M, NP, NCON, NMEAS, GAMMA, A, LDA, B, LDB, $ C, LDC, D, LDD, F, LDF, H, LDH, X, LDX, Y, LDY, $ XYCOND, IWORK, DWORK, LDWORK, BWORK, INFO ) diff --git a/src/SB10RD.f b/src/SB10RD.f index ff2d2ee..06338af 100644 --- a/src/SB10RD.f +++ b/src/SB10RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10RD( N, M, NP, NCON, NMEAS, GAMMA, A, LDA, B, LDB, $ C, LDC, D, LDD, F, LDF, H, LDH, TU, LDTU, TY, $ LDTY, X, LDX, Y, LDY, AK, LDAK, BK, LDBK, CK, diff --git a/src/SB10SD.f b/src/SB10SD.f index 42ff623..116eb00 100644 --- a/src/SB10SD.f +++ b/src/SB10SD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10SD( N, M, NP, NCON, NMEAS, A, LDA, B, LDB, C, LDC, $ D, LDD, AK, LDAK, BK, LDBK, CK, LDCK, DK, LDDK, $ X, LDX, Y, LDY, RCOND, TOL, IWORK, DWORK, diff --git a/src/SB10TD.f b/src/SB10TD.f index 25a3b03..b33e8fc 100644 --- a/src/SB10TD.f +++ b/src/SB10TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10TD( N, M, NP, NCON, NMEAS, D, LDD, TU, LDTU, TY, $ LDTY, AK, LDAK, BK, LDBK, CK, LDCK, DK, LDDK, $ RCOND, TOL, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/SB10UD.f b/src/SB10UD.f index de60bf8..5a4ec0a 100644 --- a/src/SB10UD.f +++ b/src/SB10UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10UD( N, M, NP, NCON, NMEAS, B, LDB, C, LDC, D, LDD, $ TU, LDTU, TY, LDTY, RCOND, TOL, DWORK, LDWORK, $ INFO ) diff --git a/src/SB10VD.f b/src/SB10VD.f index fabcd1b..7042c95 100644 --- a/src/SB10VD.f +++ b/src/SB10VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10VD( N, M, NP, NCON, NMEAS, A, LDA, B, LDB, C, LDC, $ F, LDF, H, LDH, X, LDX, Y, LDY, XYCOND, IWORK, $ DWORK, LDWORK, BWORK, INFO ) diff --git a/src/SB10WD.f b/src/SB10WD.f index a1fa739..6d4f868 100644 --- a/src/SB10WD.f +++ b/src/SB10WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10WD( N, M, NP, NCON, NMEAS, A, LDA, B, LDB, C, LDC, $ D, LDD, F, LDF, H, LDH, TU, LDTU, TY, LDTY, $ AK, LDAK, BK, LDBK, CK, LDCK, DK, LDDK, INFO ) diff --git a/src/SB10YD.f b/src/SB10YD.f index 6126bb6..cc1008a 100644 --- a/src/SB10YD.f +++ b/src/SB10YD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10YD( DISCFL, FLAG, LENDAT, RFRDAT, IFRDAT, OMEGA, N, $ A, LDA, B, C, D, TOL, IWORK, DWORK, LDWORK, $ ZWORK, LZWORK, INFO ) diff --git a/src/SB10ZD.f b/src/SB10ZD.f index e0e7b7f..607f02b 100644 --- a/src/SB10ZD.f +++ b/src/SB10ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10ZD( N, M, NP, A, LDA, B, LDB, C, LDC, D, LDD, $ FACTOR, AK, LDAK, BK, LDBK, CK, LDCK, DK, $ LDDK, RCOND, TOL, IWORK, DWORK, LDWORK, BWORK, diff --git a/src/SB10ZP.f b/src/SB10ZP.f index 6a3b8fb..8ba2597 100644 --- a/src/SB10ZP.f +++ b/src/SB10ZP.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB10ZP( DISCFL, N, A, LDA, B, C, D, IWORK, DWORK, $ LDWORK, INFO ) C diff --git a/src/SB16AD.f b/src/SB16AD.f index 504c743..47d1454 100644 --- a/src/SB16AD.f +++ b/src/SB16AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB16AD( DICO, JOBC, JOBO, JOBMR, WEIGHT, EQUIL, ORDSEL, $ N, M, P, NC, NCR, ALPHA, A, LDA, B, LDB, $ C, LDC, D, LDD, AC, LDAC, BC, LDBC, CC, LDCC, diff --git a/src/SB16AY.f b/src/SB16AY.f index fe53eb1..116e5a0 100644 --- a/src/SB16AY.f +++ b/src/SB16AY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB16AY( DICO, JOBC, JOBO, WEIGHT, N, M, P, NC, NCS, $ A, LDA, B, LDB, C, LDC, D, LDD, $ AC, LDAC, BC, LDBC, CC, LDCC, DC, LDDC, diff --git a/src/SB16BD.f b/src/SB16BD.f index d7c8164..e50e29b 100644 --- a/src/SB16BD.f +++ b/src/SB16BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB16BD( DICO, JOBD, JOBMR, JOBCF, EQUIL, ORDSEL, $ N, M, P, NCR, A, LDA, B, LDB, C, LDC, D, LDD, $ F, LDF, G, LDG, DC, LDDC, HSV, TOL1, TOL2, diff --git a/src/SB16CD.f b/src/SB16CD.f index ad70c60..b1244d5 100644 --- a/src/SB16CD.f +++ b/src/SB16CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB16CD( DICO, JOBD, JOBMR, JOBCF, ORDSEL, N, M, P, NCR, $ A, LDA, B, LDB, C, LDC, D, LDD, F, LDF, G, LDG, $ HSV, TOL, IWORK, DWORK, LDWORK, IWARN, INFO ) diff --git a/src/SB16CY.f b/src/SB16CY.f index 6356896..442bcd8 100644 --- a/src/SB16CY.f +++ b/src/SB16CY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SB16CY( DICO, JOBCF, N, M, P, A, LDA, B, LDB, C, LDC, $ F, LDF, G, LDG, SCALEC, SCALEO, S, LDS, R, LDR, $ DWORK, LDWORK, INFO ) diff --git a/src/SG02AD.f b/src/SG02AD.f index 01fa345..17ca191 100644 --- a/src/SG02AD.f +++ b/src/SG02AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG02AD( DICO, JOBB, FACT, UPLO, JOBL, SCAL, SORT, ACC, $ N, M, P, A, LDA, E, LDE, B, LDB, Q, LDQ, R, $ LDR, L, LDL, RCONDU, X, LDX, ALFAR, ALFAI, diff --git a/src/SG02CV.f b/src/SG02CV.f index 785a592..e519e16 100644 --- a/src/SG02CV.f +++ b/src/SG02CV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG02CV( DICO, JOB, JOBE, UPLO, TRANS, N, A, LDA, E, $ LDE, X, LDX, R, LDR, NORMS, DWORK, LDWORK, $ INFO ) diff --git a/src/SG02CW.f b/src/SG02CW.f index 2040bf7..6e83618 100644 --- a/src/SG02CW.f +++ b/src/SG02CW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG02CW( DICO, JOB, JOBE, FLAG, JOBG, UPLO, TRANS, N, M, $ A, LDA, E, LDE, G, LDG, X, LDX, F, LDF, K, LDK, $ XE, LDXE, R, LDR, C, LDC, NORMS, DWORK, LDWORK, diff --git a/src/SG02CX.f b/src/SG02CX.f index f60cc15..241a04c 100644 --- a/src/SG02CX.f +++ b/src/SG02CX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG02CX( JOBE, FLAG, JOBG, UPLO, TRANS, N, M, E, LDE, R, $ LDR, S, LDS, G, LDG, ALPHA, RNORM, DWORK, $ LDWORK, IWARN, INFO ) diff --git a/src/SG02ND.f b/src/SG02ND.f index e0d9b0b..b98533e 100644 --- a/src/SG02ND.f +++ b/src/SG02ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG02ND( DICO, JOBE, JOB, JOBX, FACT, UPLO, JOBL, TRANS, $ N, M, P, A, LDA, E, LDE, B, LDB, R, LDR, IPIV, $ L, LDL, X, LDX, RNORM, K, LDK, H, LDH, XE, diff --git a/src/SG03AD.f b/src/SG03AD.f index 4687790..8ede35a 100644 --- a/src/SG03AD.f +++ b/src/SG03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03AD( DICO, JOB, FACT, TRANS, UPLO, N, A, LDA, E, $ LDE, Q, LDQ, Z, LDZ, X, LDX, SCALE, SEP, FERR, $ ALPHAR, ALPHAI, BETA, IWORK, DWORK, LDWORK, diff --git a/src/SG03AX.f b/src/SG03AX.f index 05cd7a0..1a2f8e4 100644 --- a/src/SG03AX.f +++ b/src/SG03AX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03AX( TRANS, N, A, LDA, E, LDE, X, LDX, SCALE, INFO ) C C PURPOSE diff --git a/src/SG03AY.f b/src/SG03AY.f index 60c671c..eb9f546 100644 --- a/src/SG03AY.f +++ b/src/SG03AY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03AY( TRANS, N, A, LDA, E, LDE, X, LDX, SCALE, INFO ) C C PURPOSE diff --git a/src/SG03BD.f b/src/SG03BD.f index 79cd3d8..1d21a72 100644 --- a/src/SG03BD.f +++ b/src/SG03BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BD( DICO, FACT, TRANS, N, M, A, LDA, E, LDE, Q, $ LDQ, Z, LDZ, B, LDB, SCALE, ALPHAR, ALPHAI, $ BETA, DWORK, LDWORK, INFO ) diff --git a/src/SG03BR.f b/src/SG03BR.f index c002e45..31191f5 100644 --- a/src/SG03BR.f +++ b/src/SG03BR.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BR( XR, XI, YR, YI, C, SR, SI, ZR, ZI ) C C PURPOSE diff --git a/src/SG03BS.f b/src/SG03BS.f index b3bedf0..d7f80f3 100644 --- a/src/SG03BS.f +++ b/src/SG03BS.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BS( TRANS, N, A, LDA, E, LDE, B, LDB, SCALE, DWORK, $ ZWORK, INFO ) C diff --git a/src/SG03BT.f b/src/SG03BT.f index 558a2f1..84c4f74 100644 --- a/src/SG03BT.f +++ b/src/SG03BT.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BT( TRANS, N, A, LDA, E, LDE, B, LDB, SCALE, DWORK, $ ZWORK, INFO ) C diff --git a/src/SG03BU.f b/src/SG03BU.f index 5e046d2..6bacf21 100644 --- a/src/SG03BU.f +++ b/src/SG03BU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BU( TRANS, N, A, LDA, E, LDE, B, LDB, SCALE, DWORK, $ INFO ) C diff --git a/src/SG03BV.f b/src/SG03BV.f index 40c5d27..d670110 100644 --- a/src/SG03BV.f +++ b/src/SG03BV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BV( TRANS, N, A, LDA, E, LDE, B, LDB, SCALE, DWORK, $ INFO ) C diff --git a/src/SG03BW.f b/src/SG03BW.f index 56ad8a6..7aa5122 100644 --- a/src/SG03BW.f +++ b/src/SG03BW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BW( TRANS, M, N, A, LDA, C, LDC, E, LDE, D, LDD, X, $ LDX, SCALE, INFO ) C diff --git a/src/SG03BX.f b/src/SG03BX.f index 08bb290..21ad962 100644 --- a/src/SG03BX.f +++ b/src/SG03BX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BX( DICO, TRANS, A, LDA, E, LDE, B, LDB, U, LDU, $ SCALE, M1, LDM1, M2, LDM2, INFO ) C diff --git a/src/SG03BY.f b/src/SG03BY.f index 660f140..ef16387 100644 --- a/src/SG03BY.f +++ b/src/SG03BY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BY( XR, XI, YR, YI, CR, CI, SR, SI, Z ) C C PURPOSE diff --git a/src/SG03BZ.f b/src/SG03BZ.f index db3e463..7d6d08f 100644 --- a/src/SG03BZ.f +++ b/src/SG03BZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE SG03BZ( DICO, FACT, TRANS, N, M, A, LDA, E, LDE, Q, $ LDQ, Z, LDZ, B, LDB, SCALE, ALPHA, BETA, DWORK, $ ZWORK, LZWORK, INFO ) diff --git a/src/TB01ID.f b/src/TB01ID.f index f5f87e5..9b5223a 100644 --- a/src/TB01ID.f +++ b/src/TB01ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01ID( JOB, N, M, P, MAXRED, A, LDA, B, LDB, C, LDC, $ SCALE, INFO ) C diff --git a/src/TB01IZ.f b/src/TB01IZ.f index 6ab88ca..fa45592 100644 --- a/src/TB01IZ.f +++ b/src/TB01IZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01IZ( JOB, N, M, P, MAXRED, A, LDA, B, LDB, C, LDC, $ SCALE, INFO ) C diff --git a/src/TB01KD.f b/src/TB01KD.f index 23e2593..1d1a233 100644 --- a/src/TB01KD.f +++ b/src/TB01KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01KD( DICO, STDOM, JOBA, N, M, P, ALPHA, A, LDA, B, $ LDB, C, LDC, NDIM, U, LDU, WR, WI, DWORK, $ LDWORK, INFO ) diff --git a/src/TB01KX.f b/src/TB01KX.f index 4671b15..879194c 100644 --- a/src/TB01KX.f +++ b/src/TB01KX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01KX( N, M, P, NDIM, A, LDA, B, LDB, C, LDC, U, LDU, $ V, LDV, INFO ) C diff --git a/src/TB01LD.f b/src/TB01LD.f index e36e65c..bbbd1b1 100644 --- a/src/TB01LD.f +++ b/src/TB01LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01LD( DICO, STDOM, JOBA, N, M, P, ALPHA, A, LDA, B, $ LDB, C, LDC, NDIM, U, LDU, WR, WI, DWORK, $ LDWORK, INFO ) diff --git a/src/TB01MD.f b/src/TB01MD.f index 36e83dd..0f57db8 100644 --- a/src/TB01MD.f +++ b/src/TB01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01MD( JOBU, UPLO, N, M, A, LDA, B, LDB, U, LDU, $ DWORK, INFO ) C diff --git a/src/TB01ND.f b/src/TB01ND.f index 2dbf5f8..d4760b3 100644 --- a/src/TB01ND.f +++ b/src/TB01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01ND( JOBU, UPLO, N, P, A, LDA, C, LDC, U, LDU, $ DWORK, INFO ) C diff --git a/src/TB01PD.f b/src/TB01PD.f index dd97429..c5efff7 100644 --- a/src/TB01PD.f +++ b/src/TB01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01PD( JOB, EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, $ NR, TOL, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/TB01PX.f b/src/TB01PX.f index 7448993..16d4db2 100644 --- a/src/TB01PX.f +++ b/src/TB01PX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01PX( JOB, EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, $ NR, INFRED, TOL, IWORK, DWORK, LDWORK, INFO ) C diff --git a/src/TB01TD.f b/src/TB01TD.f index 95953a6..def9df4 100644 --- a/src/TB01TD.f +++ b/src/TB01TD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01TD( N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, LOW, $ IGH, SCSTAT, SCIN, SCOUT, DWORK, INFO ) C diff --git a/src/TB01TY.f b/src/TB01TY.f index 3af1daa..732245f 100644 --- a/src/TB01TY.f +++ b/src/TB01TY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01TY( MODE, IOFF, JOFF, NROW, NCOL, SIZE, X, LDX, $ BVECT ) C diff --git a/src/TB01UD.f b/src/TB01UD.f index fbaae8f..3b22f1f 100644 --- a/src/TB01UD.f +++ b/src/TB01UD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01UD( JOBZ, N, M, P, A, LDA, B, LDB, C, LDC, NCONT, $ INDCON, NBLK, Z, LDZ, TAU, TOL, IWORK, DWORK, $ LDWORK, INFO ) diff --git a/src/TB01UX.f b/src/TB01UX.f index 35e6441..508f7c1 100644 --- a/src/TB01UX.f +++ b/src/TB01UX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01UX( COMPZ, N, M, P, A, LDA, B, LDB, C, LDC, Z, LDZ, $ NOBSV, NLBLCK, CTAU, TOL, IWORK, DWORK, INFO ) C diff --git a/src/TB01UY.f b/src/TB01UY.f index 914c0c0..de61e85 100644 --- a/src/TB01UY.f +++ b/src/TB01UY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01UY( JOBZ, N, M1, M2, P, A, LDA, B, LDB, C, LDC, $ NCONT, INDCON, NBLK, Z, LDZ, TAU, TOL, IWORK, $ DWORK, LDWORK, INFO ) diff --git a/src/TB01VD.f b/src/TB01VD.f index 0aff6c0..da73799 100644 --- a/src/TB01VD.f +++ b/src/TB01VD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01VD( APPLY, N, M, L, A, LDA, B, LDB, C, LDC, D, LDD, $ X0, THETA, LTHETA, DWORK, LDWORK, INFO ) C diff --git a/src/TB01VY.f b/src/TB01VY.f index d673bd4..8d709df 100644 --- a/src/TB01VY.f +++ b/src/TB01VY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01VY( APPLY, N, M, L, THETA, LTHETA, A, LDA, B, LDB, $ C, LDC, D, LDD, X0, DWORK, LDWORK, INFO ) C diff --git a/src/TB01WD.f b/src/TB01WD.f index 878fca5..0dafe5c 100644 --- a/src/TB01WD.f +++ b/src/TB01WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01WD( N, M, P, A, LDA, B, LDB, C, LDC, U, LDU, $ WR, WI, DWORK, LDWORK, INFO ) C diff --git a/src/TB01WX.f b/src/TB01WX.f index 9197c26..e393e27 100644 --- a/src/TB01WX.f +++ b/src/TB01WX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01WX( COMPU, N, M, P, A, LDA, B, LDB, C, LDC, U, LDU, $ DWORK, LDWORK, INFO ) C diff --git a/src/TB01XD.f b/src/TB01XD.f index 38930f1..9cfca8c 100644 --- a/src/TB01XD.f +++ b/src/TB01XD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01XD( JOBD, N, M, P, KL, KU, A, LDA, B, LDB, C, LDC, $ D, LDD, INFO ) C diff --git a/src/TB01XZ.f b/src/TB01XZ.f index 5f1066a..c271e75 100644 --- a/src/TB01XZ.f +++ b/src/TB01XZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01XZ( JOBD, N, M, P, KL, KU, A, LDA, B, LDB, C, LDC, $ D, LDD, INFO ) C diff --git a/src/TB01YD.f b/src/TB01YD.f index f3b3278..1b03f97 100644 --- a/src/TB01YD.f +++ b/src/TB01YD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01YD( N, M, P, A, LDA, B, LDB, C, LDC, INFO ) C C PURPOSE diff --git a/src/TB01ZD.f b/src/TB01ZD.f index 9a0fffe..173bb35 100644 --- a/src/TB01ZD.f +++ b/src/TB01ZD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB01ZD( JOBZ, N, P, A, LDA, B, C, LDC, NCONT, Z, LDZ, $ TAU, TOL, DWORK, LDWORK, INFO ) C diff --git a/src/TB03AD.f b/src/TB03AD.f index b162d4b..e434e8a 100644 --- a/src/TB03AD.f +++ b/src/TB03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB03AD( LERI, EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, $ D, LDD, NR, INDEX, PCOEFF, LDPCO1, LDPCO2, $ QCOEFF, LDQCO1, LDQCO2, VCOEFF, LDVCO1, LDVCO2, diff --git a/src/TB03AY.f b/src/TB03AY.f index e88bf5c..5022e05 100644 --- a/src/TB03AY.f +++ b/src/TB03AY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB03AY( NR, A, LDA, INDBLK, NBLK, VCOEFF, LDVCO1, $ LDVCO2, PCOEFF, LDPCO1, LDPCO2, INFO ) C diff --git a/src/TB04AD.f b/src/TB04AD.f index b64fc4d..f4c6965 100644 --- a/src/TB04AD.f +++ b/src/TB04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB04AD( ROWCOL, N, M, P, A, LDA, B, LDB, C, LDC, D, $ LDD, NR, INDEX, DCOEFF, LDDCOE, UCOEFF, LDUCO1, $ LDUCO2, TOL1, TOL2, IWORK, DWORK, LDWORK, diff --git a/src/TB04AY.f b/src/TB04AY.f index a733484..dcd604f 100644 --- a/src/TB04AY.f +++ b/src/TB04AY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB04AY( N, MWORK, PWORK, A, LDA, B, LDB, C, LDC, D, $ LDD, NCONT, INDEXD, DCOEFF, LDDCOE, UCOEFF, $ LDUCO1, LDUCO2, AT, N1, TAU, TOL1, TOL2, IWORK, diff --git a/src/TB04BD.f b/src/TB04BD.f index e8a1005..c3becbf 100644 --- a/src/TB04BD.f +++ b/src/TB04BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB04BD( JOBD, ORDER, EQUIL, N, M, P, MD, A, LDA, B, $ LDB, C, LDC, D, LDD, IGN, LDIGN, IGD, LDIGD, $ GN, GD, TOL, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/TB04BV.f b/src/TB04BV.f index ea0280b..061fdf3 100644 --- a/src/TB04BV.f +++ b/src/TB04BV.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB04BV( ORDER, P, M, MD, IGN, LDIGN, IGD, LDIGD, GN, $ GD, D, LDD, TOL, INFO ) C diff --git a/src/TB04BW.f b/src/TB04BW.f index f7ce58b..43bda06 100644 --- a/src/TB04BW.f +++ b/src/TB04BW.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB04BW( ORDER, P, M, MD, IGN, LDIGN, IGD, LDIGD, GN, $ GD, D, LDD, INFO ) C diff --git a/src/TB04BX.f b/src/TB04BX.f index 28457b4..b113d76 100644 --- a/src/TB04BX.f +++ b/src/TB04BX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB04BX( IP, IZ, A, LDA, B, C, D, PR, PI, ZR, ZI, GAIN, $ IWORK ) C diff --git a/src/TB04CD.f b/src/TB04CD.f index b93f69f..5aa6689 100644 --- a/src/TB04CD.f +++ b/src/TB04CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB04CD( JOBD, EQUIL, N, M, P, NPZ, A, LDA, B, LDB, C, $ LDC, D, LDD, NZ, LDNZ, NP, LDNP, ZEROSR, $ ZEROSI, POLESR, POLESI, GAINS, LDGAIN, TOL, diff --git a/src/TB05AD.f b/src/TB05AD.f index d005429..4d086b7 100644 --- a/src/TB05AD.f +++ b/src/TB05AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TB05AD( BALEIG, INITA, N, M, P, FREQ, A, LDA, B, LDB, $ C, LDC, RCOND, G, LDG, EVRE, EVIM, HINVB, $ LDHINV, IWORK, DWORK, LDWORK, ZWORK, LZWORK, diff --git a/src/TC01OD.f b/src/TC01OD.f index b90b4e8..7271bb1 100644 --- a/src/TC01OD.f +++ b/src/TC01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TC01OD( LERI, M, P, INDLIM, PCOEFF, LDPCO1, LDPCO2, $ QCOEFF, LDQCO1, LDQCO2, INFO ) C diff --git a/src/TC04AD.f b/src/TC04AD.f index f93e217..f7bfe67 100644 --- a/src/TC04AD.f +++ b/src/TC04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TC04AD( LERI, M, P, INDEX, PCOEFF, LDPCO1, LDPCO2, $ QCOEFF, LDQCO1, LDQCO2, N, RCOND, A, LDA, B, $ LDB, C, LDC, D, LDD, IWORK, DWORK, LDWORK, diff --git a/src/TC05AD.f b/src/TC05AD.f index 9a275a2..8865dfc 100644 --- a/src/TC05AD.f +++ b/src/TC05AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TC05AD( LERI, M, P, SVAL, INDEX, PCOEFF, LDPCO1, $ LDPCO2, QCOEFF, LDQCO1, LDQCO2, RCOND, CFREQR, $ LDCFRE, IWORK, DWORK, ZWORK, INFO ) diff --git a/src/TD03AD.f b/src/TD03AD.f index ed39a2e..db8c669 100644 --- a/src/TD03AD.f +++ b/src/TD03AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TD03AD( ROWCOL, LERI, EQUIL, M, P, INDEXD, DCOEFF, $ LDDCOE, UCOEFF, LDUCO1, LDUCO2, NR, A, LDA, B, $ LDB, C, LDC, D, LDD, INDEXP, PCOEFF, LDPCO1, diff --git a/src/TD03AY.f b/src/TD03AY.f index 520d393..6323c5b 100644 --- a/src/TD03AY.f +++ b/src/TD03AY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TD03AY( MWORK, PWORK, INDEX, DCOEFF, LDDCOE, UCOEFF, $ LDUCO1, LDUCO2, N, A, LDA, B, LDB, C, LDC, D, $ LDD, INFO ) diff --git a/src/TD04AD.f b/src/TD04AD.f index 4f45363..19201c6 100644 --- a/src/TD04AD.f +++ b/src/TD04AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TD04AD( ROWCOL, M, P, INDEX, DCOEFF, LDDCOE, UCOEFF, $ LDUCO1, LDUCO2, NR, A, LDA, B, LDB, C, LDC, D, $ LDD, TOL, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/TD05AD.f b/src/TD05AD.f index 7258e18..32e44b2 100644 --- a/src/TD05AD.f +++ b/src/TD05AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TD05AD( UNITF, OUTPUT, NP1, MP1, W, A, B, VALR, VALI, $ INFO ) C diff --git a/src/TF01MD.f b/src/TF01MD.f index 4cbab4f..1d9fbab 100644 --- a/src/TF01MD.f +++ b/src/TF01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TF01MD( N, M, P, NY, A, LDA, B, LDB, C, LDC, D, LDD, $ U, LDU, X, Y, LDY, DWORK, INFO ) C diff --git a/src/TF01MX.f b/src/TF01MX.f index 4a03ff9..60d81c7 100644 --- a/src/TF01MX.f +++ b/src/TF01MX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TF01MX( N, M, P, NY, S, LDS, U, LDU, X, Y, LDY, $ DWORK, LDWORK, INFO ) C diff --git a/src/TF01MY.f b/src/TF01MY.f index 02a1140..266ec24 100644 --- a/src/TF01MY.f +++ b/src/TF01MY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TF01MY( N, M, P, NY, A, LDA, B, LDB, C, LDC, D, LDD, $ U, LDU, X, Y, LDY, DWORK, LDWORK, INFO ) C diff --git a/src/TF01ND.f b/src/TF01ND.f index 84a172d..21e8912 100644 --- a/src/TF01ND.f +++ b/src/TF01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TF01ND( UPLO, N, M, P, NY, A, LDA, B, LDB, C, LDC, D, $ LDD, U, LDU, X, Y, LDY, DWORK, INFO ) C diff --git a/src/TF01OD.f b/src/TF01OD.f index c3569ad..81781ad 100644 --- a/src/TF01OD.f +++ b/src/TF01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TF01OD( NH1, NH2, NR, NC, H, LDH, T, LDT, INFO ) C C PURPOSE diff --git a/src/TF01PD.f b/src/TF01PD.f index 79e919c..69bf391 100644 --- a/src/TF01PD.f +++ b/src/TF01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TF01PD( NH1, NH2, NR, NC, H, LDH, T, LDT, INFO ) C C PURPOSE diff --git a/src/TF01QD.f b/src/TF01QD.f index 27d78dd..7061312 100644 --- a/src/TF01QD.f +++ b/src/TF01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TF01QD( NC, NB, N, IORD, AR, MA, H, LDH, INFO ) C C PURPOSE diff --git a/src/TF01RD.f b/src/TF01RD.f index 77db298..6c1cb48 100644 --- a/src/TF01RD.f +++ b/src/TF01RD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TF01RD( NA, NB, NC, N, A, LDA, B, LDB, C, LDC, H, LDH, $ DWORK, LDWORK, INFO ) C diff --git a/src/TG01AD.f b/src/TG01AD.f index 6f81cbd..0165c43 100644 --- a/src/TG01AD.f +++ b/src/TG01AD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01AD( JOB, L, N, M, P, THRESH, A, LDA, E, LDE, $ B, LDB, C, LDC, LSCALE, RSCALE, DWORK, INFO ) C diff --git a/src/TG01AZ.f b/src/TG01AZ.f index 8b6eb45..0a0cab7 100644 --- a/src/TG01AZ.f +++ b/src/TG01AZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01AZ( JOB, L, N, M, P, THRESH, A, LDA, E, LDE, $ B, LDB, C, LDC, LSCALE, RSCALE, DWORK, INFO ) C diff --git a/src/TG01BD.f b/src/TG01BD.f index d3137af..2220c48 100644 --- a/src/TG01BD.f +++ b/src/TG01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01BD( JOBE, COMPQ, COMPZ, N, M, P, ILO, IHI, A, LDA, $ E, LDE, B, LDB, C, LDC, Q, LDQ, Z, LDZ, DWORK, $ LDWORK, INFO ) diff --git a/src/TG01CD.f b/src/TG01CD.f index 6236c2b..ca50803 100644 --- a/src/TG01CD.f +++ b/src/TG01CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01CD( COMPQ, L, N, M, A, LDA, E, LDE, B, LDB, Q, LDQ, $ DWORK, LDWORK, INFO ) C diff --git a/src/TG01DD.f b/src/TG01DD.f index e2e8746..b5e67b8 100644 --- a/src/TG01DD.f +++ b/src/TG01DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01DD( COMPZ, L, N, P, A, LDA, E, LDE, C, LDC, Z, LDZ, $ DWORK, LDWORK, INFO ) C diff --git a/src/TG01ED.f b/src/TG01ED.f index 6294dde..26389b0 100644 --- a/src/TG01ED.f +++ b/src/TG01ED.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01ED( JOBA, L, N, M, P, A, LDA, E, LDE, B, LDB, $ C, LDC, Q, LDQ, Z, LDZ, RANKE, RNKA22, TOL, $ DWORK, LDWORK, INFO ) diff --git a/src/TG01FD.f b/src/TG01FD.f index f464f1a..c0a5e12 100644 --- a/src/TG01FD.f +++ b/src/TG01FD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01FD( COMPQ, COMPZ, JOBA, L, N, M, P, A, LDA, E, LDE, $ B, LDB, C, LDC, Q, LDQ, Z, LDZ, RANKE, RNKA22, $ TOL, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/TG01FZ.f b/src/TG01FZ.f index 1a2fe51..24e8c1c 100644 --- a/src/TG01FZ.f +++ b/src/TG01FZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01FZ( COMPQ, COMPZ, JOBA, L, N, M, P, A, LDA, E, LDE, $ B, LDB, C, LDC, Q, LDQ, Z, LDZ, RANKE, RNKA22, $ TOL, IWORK, DWORK, ZWORK, LZWORK, INFO ) diff --git a/src/TG01GD.f b/src/TG01GD.f index bbd8c40..459adc5 100644 --- a/src/TG01GD.f +++ b/src/TG01GD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01GD( JOBS, L, N, M, P, A, LDA, E, LDE, B, LDB, $ C, LDC, D, LDD, LR, NR, RANKE, INFRED, TOL, $ IWORK, DWORK, LDWORK, INFO ) diff --git a/src/TG01HD.f b/src/TG01HD.f index 13b8896..0a5491a 100644 --- a/src/TG01HD.f +++ b/src/TG01HD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01HD( JOBCON, COMPQ, COMPZ, N, M, P, A, LDA, E, LDE, $ B, LDB, C, LDC, Q, LDQ, Z, LDZ, NCONT, NIUCON, $ NRBLCK, RTAU, TOL, IWORK, DWORK, INFO ) diff --git a/src/TG01HU.f b/src/TG01HU.f index b246d2f..220083f 100644 --- a/src/TG01HU.f +++ b/src/TG01HU.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01HU( COMPQ, COMPZ, L, N, M1, M2, P, N1, LBE, A, LDA, $ E, LDE, B, LDB, C, LDC, Q, LDQ, Z, LDZ, NR, $ NRBLCK, RTAU, TOL, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/TG01HX.f b/src/TG01HX.f index 25e0b5d..10d5958 100644 --- a/src/TG01HX.f +++ b/src/TG01HX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01HX( COMPQ, COMPZ, L, N, M, P, N1, LBE, A, LDA, $ E, LDE, B, LDB, C, LDC, Q, LDQ, Z, LDZ, NR, $ NRBLCK, RTAU, TOL, IWORK, DWORK, INFO ) diff --git a/src/TG01HY.f b/src/TG01HY.f index 31a78f9..27c091b 100644 --- a/src/TG01HY.f +++ b/src/TG01HY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01HY( COMPQ, COMPZ, L, N, M, P, N1, LBE, A, LDA, $ E, LDE, B, LDB, C, LDC, Q, LDQ, Z, LDZ, NR, $ NRBLCK, RTAU, TOL, IWORK, DWORK, LDWORK, INFO ) diff --git a/src/TG01ID.f b/src/TG01ID.f index 04aeda4..ec10243 100644 --- a/src/TG01ID.f +++ b/src/TG01ID.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01ID( JOBOBS, COMPQ, COMPZ, N, M, P, A, LDA, E, LDE, $ B, LDB, C, LDC, Q, LDQ, Z, LDZ, NOBSV, NIUOBS, $ NLBLCK, CTAU, TOL, IWORK, DWORK, INFO ) diff --git a/src/TG01JD.f b/src/TG01JD.f index 7c05198..e7389cd 100644 --- a/src/TG01JD.f +++ b/src/TG01JD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01JD( JOB, SYSTYP, EQUIL, N, M, P, A, LDA, E, LDE, $ B, LDB, C, LDC, NR, INFRED, TOL, IWORK, DWORK, $ LDWORK, INFO ) diff --git a/src/TG01JY.f b/src/TG01JY.f index edebf88..eaeca34 100644 --- a/src/TG01JY.f +++ b/src/TG01JY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01JY( JOB, SYSTYP, EQUIL, CKSING, RESTOR, N, M, P, A, $ LDA, E, LDE, B, LDB, C, LDC, NR, INFRED, TOL, $ IWORK, DWORK, LDWORK, INFO ) diff --git a/src/TG01KD.f b/src/TG01KD.f index 42b5bd7..c3deec5 100644 --- a/src/TG01KD.f +++ b/src/TG01KD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01KD( JOBE, COMPC, COMPQ, COMPZ, N, A, LDA, E, LDE, $ B, C, INCC, Q, LDQ, Z, LDZ, INFO ) C diff --git a/src/TG01KZ.f b/src/TG01KZ.f index 0a3fff5..91e572a 100644 --- a/src/TG01KZ.f +++ b/src/TG01KZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01KZ( JOBE, COMPC, COMPQ, COMPZ, N, A, LDA, E, LDE, $ B, C, INCC, Q, LDQ, Z, LDZ, INFO ) C diff --git a/src/TG01LD.f b/src/TG01LD.f index bee614d..83cbdca 100644 --- a/src/TG01LD.f +++ b/src/TG01LD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01LD( JOB, JOBA, COMPQ, COMPZ, N, M, P, A, LDA, $ E, LDE, B, LDB, C, LDC, Q, LDQ, Z, LDZ, NF, ND, $ NIBLCK, IBLCK, TOL, IWORK, DWORK, LDWORK, diff --git a/src/TG01LY.f b/src/TG01LY.f index d9e3990..bc12ab8 100644 --- a/src/TG01LY.f +++ b/src/TG01LY.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01LY( COMPQ, COMPZ, N, M, P, RANKE, RNKA22, A, LDA, $ E, LDE, B, LDB, C, LDC, Q, LDQ, Z, LDZ, NF, $ NIBLCK, IBLCK, TOL, IWORK, DWORK, LDWORK, diff --git a/src/TG01MD.f b/src/TG01MD.f index 08d1bea..3bc0ab0 100644 --- a/src/TG01MD.f +++ b/src/TG01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01MD( JOB, N, M, P, A, LDA, E, LDE, B, LDB, C, LDC, $ ALPHAR, ALPHAI, BETA, Q, LDQ, Z, LDZ, NF, ND, $ NIBLCK, IBLCK, TOL, IWORK, DWORK, LDWORK, diff --git a/src/TG01ND.f b/src/TG01ND.f index fe1f257..01c1620 100644 --- a/src/TG01ND.f +++ b/src/TG01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01ND( JOB, JOBT, N, M, P, A, LDA, E, LDE, B, LDB, $ C, LDC, ALPHAR, ALPHAI, BETA, Q, LDQ, Z, LDZ, $ NF, ND, NIBLCK, IBLCK, TOL, IWORK, DWORK, diff --git a/src/TG01NX.f b/src/TG01NX.f index 203737d..31c0f2c 100644 --- a/src/TG01NX.f +++ b/src/TG01NX.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01NX( JOBT, N, M, P, NDIM, A, LDA, E, LDE, B, LDB, $ C, LDC, Q, LDQ, Z, LDZ, IWORK, INFO ) C diff --git a/src/TG01OA.f b/src/TG01OA.f index ec57252..a0d05c4 100644 --- a/src/TG01OA.f +++ b/src/TG01OA.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01OA( JOBE, N, DCBA, LDDCBA, E, LDE, INFO ) C C PURPOSE diff --git a/src/TG01OB.f b/src/TG01OB.f index 79689b4..757c1f2 100644 --- a/src/TG01OB.f +++ b/src/TG01OB.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01OB( JOBE, N, DCBA, LDDCBA, E, LDE, INFO ) C C PURPOSE diff --git a/src/TG01OD.f b/src/TG01OD.f index 7c302d3..9f9dc7e 100644 --- a/src/TG01OD.f +++ b/src/TG01OD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01OD( JOBE, N, DCBA, LDDCBA, E, LDE, NZ, G, TOL, $ DWORK, LDWORK, INFO ) C diff --git a/src/TG01OZ.f b/src/TG01OZ.f index 761c2d4..12a837b 100644 --- a/src/TG01OZ.f +++ b/src/TG01OZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01OZ( JOBE, N, DCBA, LDDCBA, E, LDE, NZ, G, TOL, $ ZWORK, LZWORK, INFO ) C diff --git a/src/TG01PD.f b/src/TG01PD.f index 654d660..07e852c 100644 --- a/src/TG01PD.f +++ b/src/TG01PD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01PD( DICO, STDOM, JOBAE, COMPQ, COMPZ, N, M, P, $ NLOW, NSUP, ALPHA, A, LDA, E, LDE, B, LDB, $ C, LDC, Q, LDQ, Z, LDZ, NDIM, ALPHAR, ALPHAI, diff --git a/src/TG01QD.f b/src/TG01QD.f index d0c9036..79d1f16 100644 --- a/src/TG01QD.f +++ b/src/TG01QD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01QD( DICO, STDOM, JOBFI, N, M, P, ALPHA, A, LDA, $ E, LDE, B, LDB, C, LDC, N1, N2, N3, ND, NIBLCK, $ IBLCK, Q, LDQ, Z, LDZ, ALPHAR, ALPHAI, BETA, diff --git a/src/TG01WD.f b/src/TG01WD.f index da04a27..d9fbefc 100644 --- a/src/TG01WD.f +++ b/src/TG01WD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE TG01WD( N, M, P, A, LDA, E, LDE, B, LDB, C, LDC, $ Q, LDQ, Z, LDZ, ALPHAR, ALPHAI, BETA, DWORK, $ LDWORK, INFO ) diff --git a/src/UD01BD.f b/src/UD01BD.f index a5a0107..6af8af3 100644 --- a/src/UD01BD.f +++ b/src/UD01BD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE UD01BD( MP, NP, DP, NIN, P, LDP1, LDP2, INFO ) C C PURPOSE diff --git a/src/UD01CD.f b/src/UD01CD.f index b5670f8..ac24bc4 100644 --- a/src/UD01CD.f +++ b/src/UD01CD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE UD01CD( MP, NP, DP, NIN, P, LDP1, LDP2, INFO ) C C PURPOSE diff --git a/src/UD01DD.f b/src/UD01DD.f index 0b75ecb..5fa1d93 100644 --- a/src/UD01DD.f +++ b/src/UD01DD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE UD01DD( M, N, NIN, A, LDA, INFO ) C C PURPOSE diff --git a/src/UD01MD.f b/src/UD01MD.f index 5c18ec4..6809021 100644 --- a/src/UD01MD.f +++ b/src/UD01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE UD01MD( M, N, L, NOUT, A, LDA, TEXT, INFO ) C C PURPOSE diff --git a/src/UD01MZ.f b/src/UD01MZ.f index 56659e6..ad96bc6 100644 --- a/src/UD01MZ.f +++ b/src/UD01MZ.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE UD01MZ( M, N, L, NOUT, A, LDA, TEXT, INFO ) C C PURPOSE diff --git a/src/UD01ND.f b/src/UD01ND.f index 5231015..a19e7ca 100644 --- a/src/UD01ND.f +++ b/src/UD01ND.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C SUBROUTINE UD01ND( MP, NP, DP, L, NOUT, P, LDP1, LDP2, TEXT, $ INFO ) C diff --git a/src/UE01MD.f b/src/UE01MD.f index 138e717..4bcd8f1 100644 --- a/src/UE01MD.f +++ b/src/UE01MD.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C INTEGER FUNCTION UE01MD( ISPEC, NAME, OPTS, N1, N2, N3 ) C C PURPOSE diff --git a/src/delctg.f b/src/delctg.f index 89558e3..ce10688 100644 --- a/src/delctg.f +++ b/src/delctg.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION DELCTG( PAR1, PAR2, PAR3 ) C C PURPOSE diff --git a/src/select.f b/src/select.f index 1dfa9ae..227cc4b 100644 --- a/src/select.f +++ b/src/select.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION SELECT( PAR1, PAR2 ) C C PURPOSE diff --git a/src/zelctg.f b/src/zelctg.f index 248243b..ef7e943 100644 --- a/src/zelctg.f +++ b/src/zelctg.f @@ -1,3 +1,6 @@ +C +C SPDX-License-Identifier: BSD-3-Clause +C LOGICAL FUNCTION ZELCTG( PAR1, PAR2 ) C C PURPOSE From ca0294ce8dd8bda6d9819c17ca632f2199581ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Wed, 7 May 2025 15:09:57 +0200 Subject: [PATCH 14/22] Enable proper Integer8 building and RPM packaging --- .version | 4 ++ CMakeLists.txt | 39 ++++++++++----- INSTALL.md | 22 +++++++++ ReleaseNotes.md | 1 + SLICOTConfig.cmake.in | 2 +- dist/make_rpm.sh | 26 ++++++++++ dist/rpm/slicot.spec.in | 103 ++++++++++++++++++++++++++++++++++++++++ slicot.pc.in | 4 +- src/CMakeLists.txt | 3 +- 9 files changed, 187 insertions(+), 17 deletions(-) create mode 100644 .version create mode 100644 dist/make_rpm.sh create mode 100644 dist/rpm/slicot.spec.in diff --git a/.version b/.version new file mode 100644 index 0000000..19fd82f --- /dev/null +++ b/.version @@ -0,0 +1,4 @@ +MAJOR=5 +MINOR=9 +PATCH=1 + diff --git a/CMakeLists.txt b/CMakeLists.txt index 977a50d..85e0cb7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,9 +5,14 @@ CMAKE_POLICY(SET CMP0048 NEW) # Adding C to the list of languages is necessary, such that BLAS # libraries requiring C libraries as well will work. This for # example is necessary to run MKL +IF (DEFINED SLICOT_VERSION) + SET(_VERSION "${SLICOT_VERSION}") +ELSE() + SET(_VERSION "5.9.0") +ENDIF() PROJECT(SLICOT - VERSION 5.9.0 + VERSION ${_VERSION} LANGUAGES C Fortran) # Add addtional CMAKE Paths. @@ -33,11 +38,14 @@ ENDIF() -# Shared libraries IF (SLICOT_INTEGER8) SET(INTEGER8 ON) + SET(SLICOT_NAME "slicot64") + SET(SLICOT_NAME_UC "SLICOT64") ELSE() SET(INTEGER8 OFF) + SET(SLICOT_NAME "slicot") + SET(SLICOT_NAME_UC "SLICOT") ENDIF() # Enable PIC code by default @@ -57,6 +65,10 @@ ENDIF() INCLUDE(FortranCompilerSettings) INCLUDE(GNUInstallDirs) +IF (NOT DEFINED BUILD_SHARED_LIBS) + SET(BUILD_SHARED_LIBS ON ) +ENDIF() + # Set a default build type if none was specified if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'Release' as none was specified.") @@ -143,26 +155,26 @@ configure_file( INCLUDE(CMakePackageConfigHelpers) WRITE_BASIC_PACKAGE_VERSION_FILE( - SLICOTConfigVersion.cmake + ${SLICOT_NAME_UC}ConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) INSTALL(EXPORT slicot_targets - FILE SLICOTTargets.cmake + FILE ${SLICOT_NAME_UC}Targets.cmake NAMESPACE SLICOT:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SLICOT + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${SLICOT_NAME_UC} ) -CONFIGURE_FILE(SLICOTConfig.cmake.in SLICOTConfig.cmake @ONLY) +CONFIGURE_FILE(SLICOTConfig.cmake.in ${SLICOT_NAME_UC}Config.cmake @ONLY) INSTALL(FILES - "${CMAKE_CURRENT_BINARY_DIR}/SLICOTConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/SLICOTConfigVersion.cmake" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SLICOT + "${CMAKE_CURRENT_BINARY_DIR}/${SLICOT_NAME_UC}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${SLICOT_NAME_UC}ConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${SLICOT_NAME_UC} ) -CONFIGURE_FILE(slicot.pc.in slicot.pc @ONLY) +CONFIGURE_FILE(slicot.pc.in ${SLICOT_NAME}.pc @ONLY) INSTALL(FILES - "${CMAKE_CURRENT_BINARY_DIR}/slicot.pc" + "${CMAKE_CURRENT_BINARY_DIR}/${SLICOT_NAME}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") MESSAGE(STATUS "------------ Build Information --------------") @@ -172,8 +184,9 @@ MESSAGE(STATUS "CMAKE_Fortran_FLAGS_DEBUG: ${CMAKE_Fortran_FLAGS_DEBUG}") MESSAGE(STATUS "CMAKE_Fortran_FLAGS_RELEASE: ${CMAKE_Fortran_FLAGS_RELEASE}") MESSAGE(STATUS "BLAS Libraries: ${BLAS_LIBRARIES}") MESSAGE(STATUS "LAPACK Libraries: ${LAPACK_LIBRARIES}") -MESSAGE(STATUS "Build Type: ${CMAKE_BUILD_TYPE}") MESSAGE(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") -MESSAGE(STATUS "Shared Libs: ${BUILD_SHARED_LIBS}") +MESSAGE(STATUS "BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") +MESSAGE(STATUS "SLICOT_INTEGER8: ${SLICOT_INTEGER8}") +MESSAGE(STATUS "SLICOT_TESTING: ${SLICOT_TESTING}") MESSAGE(STATUS "---------------------------------------------") diff --git a/INSTALL.md b/INSTALL.md index 631b3e5..7cded41 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -86,6 +86,28 @@ pacboy sync gcc-fortran cmake ninja lapack The remaining build process works as described above. +RPM Packages +------------ +On RHEL, its derivatives, and Fedora Linux, we provide RPM packaging as well. In +order to use this, install the following packages: +```shell +sudo dnf install cmake make gcc gcc-gfortran flexiblas-devel rpmdevtools +``` +Instead `flexiblas-devel` also the reference packages can be installed. In this +case uninstall `flexiblas-devel` and install `blas-devel` and `lapack-devel`. + +Afterwards, run +```shell +bash ./dist/make_rpm.sh +``` +from the root of the source tree. This builds the SRPM and the RPM files for +SLICOT. The results can be found in `~/rpmbuild/SRPMS` and +`~/rpmbuild/RPMS/`. If only the SRPM is required, use +```shell +bash ./dist/make_rpm.sh -ts +``` +instead. + Issues ------ A list of known issues can be found in [KNOWN_ISSUSES.md](./KNOWN_ISSUES.md) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 783970d..83b8f68 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -10,6 +10,7 @@ not add any new routines to SLICOT. * The build system now uses CMAKE. The old makefile based system works in parallel but will be removed in the future with the next minor release. * CI Runs on Github and Gitlab - See Github #2 +* RPM packaging, see INSTALL.md for details ### Bugfixes diff --git a/SLICOTConfig.cmake.in b/SLICOTConfig.cmake.in index 243f93a..60f3163 100644 --- a/SLICOTConfig.cmake.in +++ b/SLICOTConfig.cmake.in @@ -5,4 +5,4 @@ find_dependency(BLAS REQUIRED) find_dependency(LAPACK REQUIRED) # Add the targets file -include("${CMAKE_CURRENT_LIST_DIR}/SLICOTTargets.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/@SLICOT_NAME_UC@Targets.cmake") diff --git a/dist/make_rpm.sh b/dist/make_rpm.sh new file mode 100644 index 0000000..0203d30 --- /dev/null +++ b/dist/make_rpm.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# Build the RPM files +# +# This script must be executed from the root of the source. +# +# +. ./.version + +BUILDARG=${1:--ta} + +RPMSPEC_BASE=slicot.spec +RPMSPEC=dist/rpm/${RPMSPEC_BASE}.in + +# MAJOR=$(cat "$RPMSPEC" | grep "%global major" | sed -e 's/%global major //g' | tr -d ' ' ) +# MINOR=$(cat "$RPMSPEC" | grep "%global minor" | sed -e 's/%global minor //g' | tr -d ' ' ) +# PATCH=$(cat "$RPMSPEC" | grep "%global patch" | sed -e 's/%global patch //g' | tr -d ' ' ) +# cp "${RPMSPEC}" "${RPMSPEC_BASE}" + +sed -e "s/##MAJOR##/$MAJOR/g" -e "s/##MINOR##/$MINOR/g" -e "s/##PATCH##/$PATCH/g" "${RPMSPEC}" > "${RPMSPEC_BASE}" +tar -v --exclude="build*" --exclude-vcs --exclude-vcs-ignores \ + --transform="s/.\/\(.*\)/slicot-${MAJOR}.${MINOR}.${PATCH}\/\1/g" \ + -czf /tmp/slicot-${MAJOR}.${MINOR}.${PATCH}.tar.gz . +rm "${RPMSPEC_BASE}" + +rpmbuild ${BUILDARG} /tmp/slicot-${MAJOR}.${MINOR}.${PATCH}.tar.gz + diff --git a/dist/rpm/slicot.spec.in b/dist/rpm/slicot.spec.in new file mode 100644 index 0000000..8f60e4b --- /dev/null +++ b/dist/rpm/slicot.spec.in @@ -0,0 +1,103 @@ +%global major ##MAJOR## +%global minor ##MINOR## +%global patch ##PATCH## + +Name: slicot +Version: %{major}.%{minor}.%{patch} +Release: 1%{?dist} +Summary: A library for control theoretical computations + +License: BSD-3-Clause +URL: https://github.com/SLICOT/SLICOT-Reference +Source0: https://github.com/SLICOT/SLICOT-Reference/archive/v%{version}/%{name}-%{version}.tar.gz + +BuildRequires: make, cmake >= 3.22 +BuildRequires: gcc, gcc-fortran +BuildRequires: (flexiblas-devel or (blas-devel and lapack-devel)) +%global _description %{expand: +SLICOT is a general purpose basic mathematical library implemented +in Fortran for control theoretical computations. The library provides +tools to perform essential system analysis and synthesis tasks. The +main emphasis in SLICOT is on numerical reliability of implemented +algorithms and the numerical robustness and efficiency of routines. +Providing algorithmic flexibility and the use of rigorous implementation +and documentation standards are other SLICOT features. +} + +%description %_description + +%if 0%{?__isa_bits} == 64 +%package -n %{name}64 +Summary: A library for control theoretical computations + +%description -n %{name}64 %_description +This build has 64-bit integer support. +%endif + +%package devel +Summary: Development headers and libraries for SLICOT +Requires: gcc-gfortran%{_isa} +Requires: %{name}%{?_isa} = %{version}-%{release} +%if 0%{?__isa_bits} == 64 +Requires: %{name}64%{?_isa} = %{version}-%{release} +%endif + +%description devel %_description +This package contains the development headers and libraries. + +%prep +%setup -q + +%build +%cmake -B build \ + -DSLICOT_INTEGER8=OFF \ + -DSLICOT_VERSION="%{major}.%{minor}.%{patch}" +%make_build -C build +%if 0%{?__isa_bits} == 64 +%cmake -B build64 \ + -DSLICOT_INTEGER8=ON \ + -DSLICOT_VERSION="%{major}.%{minor}.%{patch}" + +%make_build -C build64 +%endif + +%install +%make_install -C build +%if 0%{?__isa_bits} == 64 +%make_install -C build64 +%endif + +%check +export CTEST_OUTPUT_ON_FAILURE=1 +make -C build test +%if 0%{?__isa_bits} == 64 +make -C build64 test +%endif + +%files +%license LICENSE +%doc README.md Contributors.md KNOWN_ISSUES.md ReleaseNotes.md +%{_libdir}/lib%{name}.so.%{major} +%{_libdir}/lib%{name}.so.%{major}.%{minor}.%{patch} + +%if 0%{?__isa_bits} == 64 +%files -n %{name}64 +%license LICENSE +%doc README.md Contributors.md KNOWN_ISSUES.md ReleaseNotes.md +%{_libdir}/lib%{name}64.so.%{major} +%{_libdir}/lib%{name}64.so.%{major}.%{minor}.%{patch} +%endif + +%files devel +%{_libdir}/cmake/%{upper:%{name}} +%{_libdir}/lib%{name}.so +%{_libdir}/pkgconfig/%{name}.pc +%if 0%{?__isa_bits} == 64 +%{_libdir}/cmake/%{upper:%{name}}64 +%{_libdir}/lib%{name}64.so +%{_libdir}/pkgconfig/%{name}64.pc +%endif + +%changelog +%autochangelog + diff --git a/slicot.pc.in b/slicot.pc.in index 687284a..f1f50d9 100644 --- a/slicot.pc.in +++ b/slicot.pc.in @@ -3,8 +3,8 @@ exec_prefix=@CMAKE_INSTALL_PREFIX@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ libdir=@CMAKE_INSTALL_FULL_LIBDIR@ -Name: slicot +Name: @SLICOT_NAME@ Description: The SLICOT library Version: @PROJECT_VERSION@ Requires: blas, lapack -Libs: -L${libdir} -lslicot +Libs: -L${libdir} -l@SLICOT_NAME@ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0ae6bca..dabaaa7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -122,8 +122,9 @@ ADD_ROUTINE_IF_REQUIRED(zgegv HAVE_ZGEGV lapack_aux/zgegv.f) ADD_LIBRARY(slicot ${SOURCES}) TARGET_LINK_LIBRARIES(slicot PUBLIC LAPACK::LAPACK BLAS::BLAS) -SET_PROPERTY(TARGET slicot PROPERTY VERSION ${PROJECT_VERSION}) +SET_PROPERTY(TARGET slicot PROPERTY VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) SET_PROPERTY(TARGET slicot PROPERTY SOVERSION ${PROJECT_VERSION_MAJOR}) +SET_PROPERTY(TARGET slicot PROPERTY OUTPUT_NAME ${SLICOT_NAME}) if(_is_coverage_build) target_link_libraries(slicot PRIVATE gcov) From 3bcd99eaf8463a3aa6f383f64893fa0aa1c87da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Thu, 8 May 2025 08:36:01 +0200 Subject: [PATCH 15/22] Add RPM building to CI --- .gitlab-ci.yml | 15 +++++++++++++++ .gitlab/docker/fedora-image/Dockerfile.fc40 | 4 ++-- .gitlab/docker/fedora-image/Dockerfile.fc41 | 2 +- .gitlab/docker/fedora-image/Dockerfile.fc42 | 2 +- .gitlab/docker/fedora-image/Dockerfile.fcrawhide | 2 +- dist/make_rpm.sh | 10 +++++++--- dist/rpm/slicot.spec.in | 4 +++- slicot.pc.in | 1 - 8 files changed, 30 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 48967a4..9d19e5a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,7 @@ before_script: stages: - build + - deploy linux: @@ -78,3 +79,17 @@ compilers: - cmake --build build-dir --target install - (cd build-dir; OMP_NUM_THREADS=1 ctest --output-on-failure) + +dist-rpm: + stage: deploy + variables: + OS: fedora + OSVERSION: 42 + RPM_QUIET: 1 + image: ${CI_REGISTRY_IMAGE}/${OS}:${OSVERSION} + needs: [] + script: + - bash ./dist/make_rpm.sh + - dnf install -y ~/rpmbuild/RPMS/$(uname -m)/*.rpm + + diff --git a/.gitlab/docker/fedora-image/Dockerfile.fc40 b/.gitlab/docker/fedora-image/Dockerfile.fc40 index 0d5ad47..f51c0f0 100644 --- a/.gitlab/docker/fedora-image/Dockerfile.fc40 +++ b/.gitlab/docker/fedora-image/Dockerfile.fc40 @@ -1,4 +1,4 @@ FROM fedora:40 RUN dnf update -y ; \ - dnf install -y bash mock git fedora-packager rpmdevtools gcc gcc-fortran ; \ - dnf install -y cmake flexiblas-devel git + dnf install -y bash git rpmdevtools gcc gcc-fortran ; \ + dnf install -y cmake flexiblas-devel diff --git a/.gitlab/docker/fedora-image/Dockerfile.fc41 b/.gitlab/docker/fedora-image/Dockerfile.fc41 index 8bfc6f5..51675d8 100644 --- a/.gitlab/docker/fedora-image/Dockerfile.fc41 +++ b/.gitlab/docker/fedora-image/Dockerfile.fc41 @@ -1,5 +1,5 @@ FROM fedora:41 RUN dnf update -y ; \ - dnf install -y bash mock git fedora-packager rpmdevtools gcc gcc-fortran ; \ + dnf install -y bash rpmdevtools gcc gcc-fortran ; \ dnf install -y cmake flexiblas-devel git diff --git a/.gitlab/docker/fedora-image/Dockerfile.fc42 b/.gitlab/docker/fedora-image/Dockerfile.fc42 index 42b2b31..64f5bc8 100644 --- a/.gitlab/docker/fedora-image/Dockerfile.fc42 +++ b/.gitlab/docker/fedora-image/Dockerfile.fc42 @@ -1,6 +1,6 @@ FROM fedora:42 RUN dnf update -y RUN dnf upgrade -y -RUN dnf install -y bash mock git fedora-packager rpmdevtools gcc gcc-fortran ; \ +RUN dnf install -y bash rpmdevtools gcc gcc-fortran ; \ dnf install -y cmake flexiblas-devel git diff --git a/.gitlab/docker/fedora-image/Dockerfile.fcrawhide b/.gitlab/docker/fedora-image/Dockerfile.fcrawhide index 117847d..01fc4af 100644 --- a/.gitlab/docker/fedora-image/Dockerfile.fcrawhide +++ b/.gitlab/docker/fedora-image/Dockerfile.fcrawhide @@ -1,6 +1,6 @@ FROM fedora:rawhide -RUN dnf install -y bash mock git fedora-packager rpmdevtools gcc gcc-fortran ; \ +RUN dnf install -y bash fedora-packager rpmdevtools gcc gcc-fortran ; \ dnf install -y cmake flexiblas-devel git ENV CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' diff --git a/dist/make_rpm.sh b/dist/make_rpm.sh index 0203d30..23c75f3 100644 --- a/dist/make_rpm.sh +++ b/dist/make_rpm.sh @@ -7,7 +7,11 @@ . ./.version BUILDARG=${1:--ta} - +if [ -n "$RPM_QUIET" ]; then + QUIET="--quiet" +else + QUIET="" +fi RPMSPEC_BASE=slicot.spec RPMSPEC=dist/rpm/${RPMSPEC_BASE}.in @@ -17,10 +21,10 @@ RPMSPEC=dist/rpm/${RPMSPEC_BASE}.in # cp "${RPMSPEC}" "${RPMSPEC_BASE}" sed -e "s/##MAJOR##/$MAJOR/g" -e "s/##MINOR##/$MINOR/g" -e "s/##PATCH##/$PATCH/g" "${RPMSPEC}" > "${RPMSPEC_BASE}" -tar -v --exclude="build*" --exclude-vcs --exclude-vcs-ignores \ +tar --exclude="build*" --exclude-vcs --exclude-vcs-ignores \ --transform="s/.\/\(.*\)/slicot-${MAJOR}.${MINOR}.${PATCH}\/\1/g" \ -czf /tmp/slicot-${MAJOR}.${MINOR}.${PATCH}.tar.gz . rm "${RPMSPEC_BASE}" -rpmbuild ${BUILDARG} /tmp/slicot-${MAJOR}.${MINOR}.${PATCH}.tar.gz +rpmbuild $QUIET ${BUILDARG} /tmp/slicot-${MAJOR}.${MINOR}.${PATCH}.tar.gz diff --git a/dist/rpm/slicot.spec.in b/dist/rpm/slicot.spec.in index 8f60e4b..46bb825 100644 --- a/dist/rpm/slicot.spec.in +++ b/dist/rpm/slicot.spec.in @@ -2,6 +2,7 @@ %global minor ##MINOR## %global patch ##PATCH## + Name: slicot Version: %{major}.%{minor}.%{patch} Release: 1%{?dist} @@ -13,7 +14,8 @@ Source0: https://github.com/SLICOT/SLICOT-Reference/archive/v%{version}/% BuildRequires: make, cmake >= 3.22 BuildRequires: gcc, gcc-fortran -BuildRequires: (flexiblas-devel or (blas-devel and lapack-devel)) +BuildRequires: flexiblas-devel +# or (blas-devel and lapack-devel)) %global _description %{expand: SLICOT is a general purpose basic mathematical library implemented in Fortran for control theoretical computations. The library provides diff --git a/slicot.pc.in b/slicot.pc.in index f1f50d9..e367027 100644 --- a/slicot.pc.in +++ b/slicot.pc.in @@ -6,5 +6,4 @@ libdir=@CMAKE_INSTALL_FULL_LIBDIR@ Name: @SLICOT_NAME@ Description: The SLICOT library Version: @PROJECT_VERSION@ -Requires: blas, lapack Libs: -L${libdir} -l@SLICOT_NAME@ From f2c6096f4094e19994b0b3ef96cdce6f1e79a3a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Thu, 9 Oct 2025 09:51:27 +0200 Subject: [PATCH 16/22] improve tar-ball building --- dist/make_rpm.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/make_rpm.sh b/dist/make_rpm.sh index 0203d30..7e66b49 100644 --- a/dist/make_rpm.sh +++ b/dist/make_rpm.sh @@ -17,7 +17,7 @@ RPMSPEC=dist/rpm/${RPMSPEC_BASE}.in # cp "${RPMSPEC}" "${RPMSPEC_BASE}" sed -e "s/##MAJOR##/$MAJOR/g" -e "s/##MINOR##/$MINOR/g" -e "s/##PATCH##/$PATCH/g" "${RPMSPEC}" > "${RPMSPEC_BASE}" -tar -v --exclude="build*" --exclude-vcs --exclude-vcs-ignores \ +tar --exclude="build*" --exclude-vcs --exclude-vcs-ignores \ --transform="s/.\/\(.*\)/slicot-${MAJOR}.${MINOR}.${PATCH}\/\1/g" \ -czf /tmp/slicot-${MAJOR}.${MINOR}.${PATCH}.tar.gz . rm "${RPMSPEC_BASE}" From 85bb9aeca137b1fecd543231f401b73bdf8c22c6 Mon Sep 17 00:00:00 2001 From: grisuthedragon Date: Sat, 25 Oct 2025 14:23:50 +0200 Subject: [PATCH 17/22] Initial version of the Contributing Guide --- CONTRIBUTING.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ Contributors.md | 5 ++++ 2 files changed, 75 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2fa98fc --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,70 @@ +# SLICOT Contribution Guide + +Thank you for considering contributing to the SLICOT project! +We welcome contributions from everyone. Please follow these guidelines to ensure +a smooth contribution process. + +## How to Contribute + +1. **Fork the Repository**: Start by forking the repository to your GitHub account. + +2. **Clone the Repository**: Clone your forked repository to your local machine. + + ```bash + git clone https://github.com/your-username/SLICOT-Reference.git + ``` + +3. **Create a Branch**: Create a new branch for your feature or bug fix. + + ```bash + git switch -c feature-or-bugfix-name + ``` + +4. **Make Changes**: Implement your changes in the codebase and add yourself to the list + of contributors in the `CONTRIBUTORS.md` file in the root of the project. By doing this + you accept the conditions from this contribution guide. + +5. **Commit Changes**: Commit your changes with a clear and descriptive commit message. + + ```bash + git commit -m "Description of changes" + ``` + +6. **Push Changes**: Push your changes to your forked repository. + + ```bash + git push origin feature-or-bugfix-name + ``` + +7. **Submit a Pull Request**: Go to the [SLICOT Repository](https://github.com/SLICOT/SLICOT-Reference) + and submit a pull request. Provide a detailed description of your changes and any related issues. + +## Code Style Guide + +To maintain consistency across the codebase, please adhere to the code style guidelines specified +in the `.editorconfig` file located in the root directory of the repository. This file contains +settings for indentation, line endings, and other code style preferences. Most modern code editors +support `.editorconfig` and will automatically apply these settings. For more details, we refer To +[https://editorconfig.org/](https://editorconfig.org/). Furthermore, we accept Fortran 77 fixed-form code +(not recommended) or F90 free form code. + +## Copyright and Licensing + +By contributing to this project, you agree to the following terms regarding copyright and licensing: + +- **Copyright Assignment**: You agree that the SLICOT team retains the copyright to the + entire codebase, including your contributions. This means that while you will be acknowledged as + a contributor, but the copyright of the code remains with the SLICOT team. The SLICOT team is + represented by the current maintainers as listed in the [CONTRIBUTORS.md](./CONTRIBUTORS.md) file. + +- **Right to Re-license**: The SLICOT team reserves the right to re-license the entire + codebase, including your contributions, under different terms. This could involve changing the + licensing terms to better suit the project's goals or to comply with legal requirements. This + includes also commercial licensing or moving from the current BSD license back to the previous GNU GPL. + +- **Acknowledgment**: Significant contributions will be acknowledged in the project's documentation + and/or release notes, giving credit for your work. Additionally, contributors may be listed in + the [CONTRIBUTORS.md](./CONTRIBUTORS.md) file as a token of appreciation for their efforts. + +We appreciate your contributions and look forward to collaborating with you! If you have any +questions or concerns about these terms, please feel free to open an issue or contact us directly. diff --git a/Contributors.md b/Contributors.md index 8b8147a..4d8b9bc 100644 --- a/Contributors.md +++ b/Contributors.md @@ -15,6 +15,11 @@ Contributors since Version 5.9.0 Contributors until Version 5.9.0 -------------------------------- +Maintainers: + +* Vasile Sima +* Andreas Varga + The development of the SLICOT Library (Subroutine Library In COntrol Theory) owe much to many people. We especially thank all those who have contributed routines to the Library, including From aaba5c5126e063df5c88b66c0f6991ba020d84a8 Mon Sep 17 00:00:00 2001 From: grisuthedragon Date: Mon, 3 Nov 2025 11:44:44 +0100 Subject: [PATCH 18/22] Add CITATION.cff file --- CITATION.cff | 27 +++++++++++++++++++++++++++ CMakeLists.txt | 15 ++------------- Contributors.md => CONTRIBUTORS.md | 0 cmake/new-version.sh | 16 ++++++++++++++++ cmake/update-date.sh | 3 +++ cmake/update-doi.sh | 10 ++++++++++ 6 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 CITATION.cff rename Contributors.md => CONTRIBUTORS.md (100%) create mode 100644 cmake/new-version.sh create mode 100644 cmake/update-date.sh create mode 100644 cmake/update-doi.sh diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000..262655a --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,27 @@ +cff-version: 1.2.0 +message: "If you use this software, please cite it as below." +authors: + - family-names: "Köhler" + given-names: "Martin" + orcid: "https://orcid.org/00000-0003-2338-9904" + - family-names: "Saak" + given-names: "Jens" + orcid: "https://orcid.org/0000-0001-5567-9637" + - family-names: "Sima" + given-names: "Vasile" + orcid: "https://orcid.org/0000-0003-1445-345X" + - family-names: "Varga" + given-names: "Andreas" + orcid: "https://orcid.org/0000-0002-6278-2939" +title: "SLICOT - Subroutine Library In COntrol Theory" +version: 5.9.0 +doi: TBA +date-released: TBA +url: "https://github.com/SLICOT/SLICOT-Reference" +license: BSD-3-Clause +keywords: + - "BLAS" + - "LAPACK" + - "SLICOT" + - "Matrix Eqations" + - "Control Theory" diff --git a/CMakeLists.txt b/CMakeLists.txt index 85e0cb7..2407dca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,19 +1,8 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.15.0) CMAKE_POLICY(SET CMP0048 NEW) - -# Adding C to the list of languages is necessary, such that BLAS -# libraries requiring C libraries as well will work. This for -# example is necessary to run MKL -IF (DEFINED SLICOT_VERSION) - SET(_VERSION "${SLICOT_VERSION}") -ELSE() - SET(_VERSION "5.9.0") -ENDIF() - -PROJECT(SLICOT - VERSION ${_VERSION} - LANGUAGES C Fortran) +PROJECT(SLICOT VERSION 5.9.0 + LANGUAGES C Fortran) # Add addtional CMAKE Paths. LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") diff --git a/Contributors.md b/CONTRIBUTORS.md similarity index 100% rename from Contributors.md rename to CONTRIBUTORS.md diff --git a/cmake/new-version.sh b/cmake/new-version.sh new file mode 100644 index 0000000..4a3c9a0 --- /dev/null +++ b/cmake/new-version.sh @@ -0,0 +1,16 @@ +#!/bin/bash +MAJOR=$(echo $1 | cut -d. -f 1) +MINOR=$(echo $1 | cut -d. -f 2) +PATCH=$(echo $1 | cut -d. -f 3) + +sed -i -e "s/^version.*\$/version: $1/g" CITATION.cff +sed -i -e "/^PROJECT/ s/VERSION [0-9]\+\.[0-9]\+\.[0-9]\+/VERSION $1/g" CMakeLists.txt +sed -i -e "s/Version [0-9]\+\.[0-9]\+\.[0-9]\+/Version $1/g" README.md + +cat > ./.version << EOF +MAJOR=$MAJOR +MINOR=$MINOR +PATCH=$PATCH +EOF + + diff --git a/cmake/update-date.sh b/cmake/update-date.sh new file mode 100644 index 0000000..dcef32b --- /dev/null +++ b/cmake/update-date.sh @@ -0,0 +1,3 @@ +export D=$(date +"%Y-%m-%d") +sed -i -e "s,^date-released: .*\$,date-released: $D,g" CITATION.cff + diff --git a/cmake/update-doi.sh b/cmake/update-doi.sh new file mode 100644 index 0000000..e2eb1b4 --- /dev/null +++ b/cmake/update-doi.sh @@ -0,0 +1,10 @@ +#!/bin/bash +if [ $# -ne 1 ]; then + echo "Usage: $0 DOI" + exit 1 +fi + +export DOI=$1 +sed -i -e "s,^doi:.*\$,doi: ${DOI},g" CITATION.cff + + From 2195bb701d66bb17024178cf8a74fbc8a49438e4 Mon Sep 17 00:00:00 2001 From: grisuthedragon Date: Mon, 3 Nov 2025 11:51:18 +0100 Subject: [PATCH 19/22] Resolve "Installguide update" --- INSTALL.md | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 7cded41..f2c68fd 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,16 +1,17 @@ SLICOT Software Installation ============================ -This file describes how to install and update the **SLICOT** Library, and how to run the example programs. +This file describes how to install and update the **SLICOT** Library, and how +to run the example programs. Requirements ------------ In order to build SLICOT you need: - * a F77 compatible Fortran compiler + * a Fortran 77 compatible Fortran compiler and a corresponding C compiler * cmake, at least 3.15 or 3.22 for the ILP64 build - * a BLAS/LIBRARY + * a BLAS and LAPACK library, preferable an optimized one like OpenBLAS The following compilers are tested @@ -53,15 +54,15 @@ ctest --test-dir build-dir The following options to cmake are availble: -| Option | Possible Values | Default Value | Description | -|:-------|:----------------|:--------------|-------------| -|`CMAKE_INSTALL_PREFIX` | valid path | `/usr/local` | Installation path | +| Option | Possible Values | Default Value | Description | +|:----------------------|:----------------|:--------------|--------------------| +|`CMAKE_INSTALL_PREFIX` | valid path | `/usr/local ` | Installation path | |`CMAKE_BUILD_TYPE` | `Debug`, `Release`, `MinSizeRel`, `RelWithDebInfo`, `Coverage` | `Release` | Specify the build type | -|`BUILD_SHARED_LIBS` | `ON`, `OFF` | `OFF` | Build SLICOT as shared library | -|`SLICOT_TESTING` | `ON`, `OFF` | `ON` | Build the examples and the test suite | -|`SLICOT_DEBUG` | `ON`, `OFF` | `OFF` | Enable the debug build, equivalent to `CMAKE_BUILD_TYPE=Debug`| -|`SLICOT_INTEGER8` | `ON`, `OFF` | `OFF` | Enable the ILP64 integer model, i.e. the Fortran `INTEGER` defaults to a 64-bit integer, requires cmake >= 3.22| -|`BLA_VENDOR` | BLAS Vendor Name | empty | Specify the BLAS library to search for, see https://cmake.org/cmake/help/latest/module/FindBLAS.html for details | +|`BUILD_SHARED_LIBS` | `ON`, `OFF` | `OFF` | Build SLICOT as shared library | +|`SLICOT_TESTING` | `ON`, `OFF` | `ON` | Build the examples and the test suite | +|`SLICOT_DEBUG` | `ON`, `OFF` | `OFF` | Enable the debug build, equivalent to `CMAKE_BUILD_TYPE=Debug`| +|`SLICOT_INTEGER8` | `ON`, `OFF` | `OFF` | Enable the ILP64 integer model, i.e. the Fortran `INTEGER` defaults to a 64-bit integer, requires cmake >= 3.22| +|`BLA_VENDOR` | BLAS Vendor Name | empty | Specify the BLAS library to search for, see https://cmake.org/cmake/help/latest/module/FindBLAS.html for details | The options are passed as `-DOPTION=VALUE` to cmake. @@ -112,4 +113,8 @@ Issues ------ A list of known issues can be found in [KNOWN_ISSUSES.md](./KNOWN_ISSUES.md) - +Deprecation Warning +------------------- +**SLICOT could still by built by calling `make` and setting the proper values +in `make.inc`. This way is deprecated and will be removed in the next non-bugfix +release of SLICOT. Most-likely in 5.10 or 6.0.** From de6ed258e199e2de0d7fc4eb172d24c93bc0126c Mon Sep 17 00:00:00 2001 From: grisuthedragon Date: Mon, 3 Nov 2025 14:40:45 +0100 Subject: [PATCH 20/22] Resolve "RPM Package Generation" --- .gitlab-ci.yml | 11 +++++++++-- .gitlab/docker/almalinux-image/Dockerfile.10 | 13 +++++++++++++ .gitlab/docker/fedora-image/Dockerfile.fc40 | 4 ---- .gitlab/docker/fedora-image/Dockerfile.fc43 | 6 ++++++ .version | 1 - CITATION.cff | 2 +- CMakeLists.txt | 2 +- dist/rpm/slicot.spec.in | 4 ++-- 8 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 .gitlab/docker/almalinux-image/Dockerfile.10 delete mode 100644 .gitlab/docker/fedora-image/Dockerfile.fc40 create mode 100644 .gitlab/docker/fedora-image/Dockerfile.fc43 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9d19e5a..e217277 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,17 +18,24 @@ linux: matrix: - OS: [ "ubuntu" ] OSVERSION: [ 'focal', 'jammy'] + TAG: "amd64" - OS: [ "ubuntu" ] OSVERSION: [ 'noble' ] INTEGER8: [ 'INTEGER8_ON', 'INTEGER8_OFF' ] + TAG: "amd64" - OS: [ "ubuntu" ] OSVERSION: [ 'noble' ] CC: "clang" FC: "flang-new" + TAG: "amd64" - OS: [ "fedora" ] - OSVERSION: [ '40', '41', '42', 'rawhide' ] + OSVERSION: [ '41', '42', '43', 'rawhide' ] + TAG: "amd64" - OS: [ "almalinux" ] - OSVERSION: [ '8', '9' ] + OSVERSION: [ '8', '9', '10' ] + TAG: "haswell" + tags: + - ${TAG} script: - export INTEGER8=${INTEGER8##INTEGER8_}; export INTEGER8=${INTEGER8:-OFF}; diff --git a/.gitlab/docker/almalinux-image/Dockerfile.10 b/.gitlab/docker/almalinux-image/Dockerfile.10 new file mode 100644 index 0000000..e5c107c --- /dev/null +++ b/.gitlab/docker/almalinux-image/Dockerfile.10 @@ -0,0 +1,13 @@ +FROM almalinux:10 +RUN dnf update -y ; \ + dnf install -y epel-release; \ + dnf install -y dnf-plugins-core; \ + dnf config-manager --set-enabled crb ;\ + dnf install -y elrepo-release ;\ + dnf install -y almalinux-release-devel + +RUN dnf install -y bash mock git fedora-packager rpmdevtools gcc; \ + dnf install -y cmake flexiblas-devel ;\ + dnf install -y gcc-gfortran + + diff --git a/.gitlab/docker/fedora-image/Dockerfile.fc40 b/.gitlab/docker/fedora-image/Dockerfile.fc40 deleted file mode 100644 index f51c0f0..0000000 --- a/.gitlab/docker/fedora-image/Dockerfile.fc40 +++ /dev/null @@ -1,4 +0,0 @@ -FROM fedora:40 -RUN dnf update -y ; \ - dnf install -y bash git rpmdevtools gcc gcc-fortran ; \ - dnf install -y cmake flexiblas-devel diff --git a/.gitlab/docker/fedora-image/Dockerfile.fc43 b/.gitlab/docker/fedora-image/Dockerfile.fc43 new file mode 100644 index 0000000..64f5bc8 --- /dev/null +++ b/.gitlab/docker/fedora-image/Dockerfile.fc43 @@ -0,0 +1,6 @@ +FROM fedora:42 +RUN dnf update -y +RUN dnf upgrade -y +RUN dnf install -y bash rpmdevtools gcc gcc-fortran ; \ + dnf install -y cmake flexiblas-devel git + diff --git a/.version b/.version index 19fd82f..fd53c82 100644 --- a/.version +++ b/.version @@ -1,4 +1,3 @@ MAJOR=5 MINOR=9 PATCH=1 - diff --git a/CITATION.cff b/CITATION.cff index 262655a..d625f7a 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -14,7 +14,7 @@ authors: given-names: "Andreas" orcid: "https://orcid.org/0000-0002-6278-2939" title: "SLICOT - Subroutine Library In COntrol Theory" -version: 5.9.0 +version: 5.9.1 doi: TBA date-released: TBA url: "https://github.com/SLICOT/SLICOT-Reference" diff --git a/CMakeLists.txt b/CMakeLists.txt index 2407dca..6b0eb11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.15.0) CMAKE_POLICY(SET CMP0048 NEW) -PROJECT(SLICOT VERSION 5.9.0 +PROJECT(SLICOT VERSION 5.9.1 LANGUAGES C Fortran) # Add addtional CMAKE Paths. diff --git a/dist/rpm/slicot.spec.in b/dist/rpm/slicot.spec.in index 46bb825..eed6129 100644 --- a/dist/rpm/slicot.spec.in +++ b/dist/rpm/slicot.spec.in @@ -78,14 +78,14 @@ make -C build64 test %files %license LICENSE -%doc README.md Contributors.md KNOWN_ISSUES.md ReleaseNotes.md +%doc README.md CONTRIBUTORS.md CONTRIBUTING.md KNOWN_ISSUES.md ReleaseNotes.md INSTALL.md CITATION.cff %{_libdir}/lib%{name}.so.%{major} %{_libdir}/lib%{name}.so.%{major}.%{minor}.%{patch} %if 0%{?__isa_bits} == 64 %files -n %{name}64 %license LICENSE -%doc README.md Contributors.md KNOWN_ISSUES.md ReleaseNotes.md +%doc README.md CONTRIBUTORS.md CONTRIBUTING.md KNOWN_ISSUES.md ReleaseNotes.md INSTALL.md CITATION.cff %{_libdir}/lib%{name}64.so.%{major} %{_libdir}/lib%{name}64.so.%{major}.%{minor}.%{patch} %endif From 151c39060cf8afa89f782843061c9ada2365d92a Mon Sep 17 00:00:00 2001 From: grisuthedragon Date: Tue, 4 Nov 2025 14:12:25 +0100 Subject: [PATCH 21/22] Resolve "Automatic Debian packing with versioning" --- .gitlab-ci.yml | 18 +- .../docker/debian-image/Dockerfile.bookworm | 7 + .gitlab/docker/debian-image/Dockerfile.trixie | 7 + .gitlab/docker/debian-image/build.sh | 14 + .gitlab/docker/ubuntu-image/Dockerfile.focal | 4 +- .gitlab/docker/ubuntu-image/Dockerfile.jammy | 4 +- .gitlab/docker/ubuntu-image/Dockerfile.latest | 7 + .gitlab/docker/ubuntu-image/Dockerfile.noble | 4 +- CMakeLists.txt | 2 +- INSTALL.md | 17 + debian/changelog | 5 + debian/control | 105 +++ debian/copyright | 38 + debian/libslicot-dev.install | 8 + debian/libslicot-doc.doc-base | 7 + debian/libslicot-doc.docs | 8 + debian/libslicot5.install | 1 + debian/libslicot64-5.install | 2 + debian/rules | 102 +++ debian/source/format | 1 + debian/source/lintian-overrides | 3 + debian/source/options | 5 + dist/get_version.sh | 20 + libindex.html => doc/libindex.html | 768 +++++++++--------- 24 files changed, 764 insertions(+), 393 deletions(-) create mode 100644 .gitlab/docker/debian-image/Dockerfile.bookworm create mode 100644 .gitlab/docker/debian-image/Dockerfile.trixie create mode 100644 .gitlab/docker/debian-image/build.sh create mode 100644 .gitlab/docker/ubuntu-image/Dockerfile.latest create mode 100644 debian/changelog create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/libslicot-dev.install create mode 100644 debian/libslicot-doc.doc-base create mode 100644 debian/libslicot-doc.docs create mode 100644 debian/libslicot5.install create mode 100644 debian/libslicot64-5.install create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/source/lintian-overrides create mode 100644 debian/source/options create mode 100755 dist/get_version.sh rename libindex.html => doc/libindex.html (74%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e217277..35e6fe5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -90,13 +90,27 @@ compilers: dist-rpm: stage: deploy variables: - OS: fedora - OSVERSION: 42 RPM_QUIET: 1 + parallel: + matrix: + - OS: [ 'fedora' ] + OSVERSION: ['42', '43' ] image: ${CI_REGISTRY_IMAGE}/${OS}:${OSVERSION} needs: [] script: - bash ./dist/make_rpm.sh - dnf install -y ~/rpmbuild/RPMS/$(uname -m)/*.rpm +dist-deb: + stage: deploy + parallel: + matrix: + - OS: [ "ubuntu" ] + OSVERSION: [ "jammy", "noble", "latest" ] + - OS: [ "debian" ] + OSVERSION: [ "bookworm", "trixie" ] + image: ${CI_REGISTRY_IMAGE}/${OS}:${OSVERSION} + needs: [] + script: + - dpkg-buildpackage -uc -us diff --git a/.gitlab/docker/debian-image/Dockerfile.bookworm b/.gitlab/docker/debian-image/Dockerfile.bookworm new file mode 100644 index 0000000..d7cba7b --- /dev/null +++ b/.gitlab/docker/debian-image/Dockerfile.bookworm @@ -0,0 +1,7 @@ +FROM debian:bookworm +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update ; \ + apt install --yes cmake libblas-dev libblas64-dev liblapack-dev liblapack64-dev git;\ + apt install --yes build-essential;\ + apt install --yes gfortran ninja-build debhelper + diff --git a/.gitlab/docker/debian-image/Dockerfile.trixie b/.gitlab/docker/debian-image/Dockerfile.trixie new file mode 100644 index 0000000..0fa016e --- /dev/null +++ b/.gitlab/docker/debian-image/Dockerfile.trixie @@ -0,0 +1,7 @@ +FROM debian:trixie +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update ; \ + apt install --yes cmake libblas-dev libblas64-dev liblapack-dev liblapack64-dev git;\ + apt install --yes build-essential;\ + apt install --yes gfortran ninja-build debhelper + diff --git a/.gitlab/docker/debian-image/build.sh b/.gitlab/docker/debian-image/build.sh new file mode 100644 index 0000000..fb3f1cb --- /dev/null +++ b/.gitlab/docker/debian-image/build.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +export CI_REGISTRY_IMAGE=${CI_REGISTRY_IMAGE:-gitlab.mpi-magdeburg.mpg.de/software/slicot} +export IMAGE_NAME=${IMAGE_NAME:-debian} +IMAGE_BASE=${CI_REGISTRY_IMAGE}/${IMAGE_NAME} + + +for i in Dockerfile.* +do + echo $i + v=${i#Dockerfile.} + docker build -f "$i" -t ${IMAGE_BASE}:${v} . + docker push ${IMAGE_BASE}:${v} +done + diff --git a/.gitlab/docker/ubuntu-image/Dockerfile.focal b/.gitlab/docker/ubuntu-image/Dockerfile.focal index 1bb9e9a..4d0a614 100644 --- a/.gitlab/docker/ubuntu-image/Dockerfile.focal +++ b/.gitlab/docker/ubuntu-image/Dockerfile.focal @@ -1,7 +1,7 @@ FROM ubuntu:focal ENV DEBIAN_FRONTEND=noninteractive RUN apt update ; \ - apt install --yes cmake libopenblas-dev git;\ + apt install --yes cmake libblas-dev libblas64-dev liblapack-dev liblapack64-dev git;\ apt install --yes build-essential;\ - apt install --yes gfortran + apt install --yes gfortran ninja-build debhelper diff --git a/.gitlab/docker/ubuntu-image/Dockerfile.jammy b/.gitlab/docker/ubuntu-image/Dockerfile.jammy index 9bb39fe..f08cb01 100644 --- a/.gitlab/docker/ubuntu-image/Dockerfile.jammy +++ b/.gitlab/docker/ubuntu-image/Dockerfile.jammy @@ -1,7 +1,7 @@ FROM ubuntu:jammy ENV DEBIAN_FRONTEND=noninteractive RUN apt update ; \ - apt install --yes cmake libopenblas-dev git;\ + apt install --yes cmake libblas-dev libblas64-dev liblapack-dev liblapack64-dev git;\ apt install --yes build-essential;\ - apt install --yes gfortran + apt install --yes gfortran ninja-build debhelper diff --git a/.gitlab/docker/ubuntu-image/Dockerfile.latest b/.gitlab/docker/ubuntu-image/Dockerfile.latest new file mode 100644 index 0000000..8bb2818 --- /dev/null +++ b/.gitlab/docker/ubuntu-image/Dockerfile.latest @@ -0,0 +1,7 @@ +FROM ubuntu:questing +ENV DEBIAN_FRONTEND noninteractive +RUN apt update ; \ + apt install --yes cmake libblas-dev libblas64-dev liblapack-dev liblapack64-dev git;\ + apt install --yes build-essential;\ + apt install --yes gfortran clang flang ninja-build debhelper + diff --git a/.gitlab/docker/ubuntu-image/Dockerfile.noble b/.gitlab/docker/ubuntu-image/Dockerfile.noble index 85dd17b..f519fa8 100644 --- a/.gitlab/docker/ubuntu-image/Dockerfile.noble +++ b/.gitlab/docker/ubuntu-image/Dockerfile.noble @@ -1,7 +1,7 @@ FROM ubuntu:noble ENV DEBIAN_FRONTEND noninteractive RUN apt update ; \ - apt install --yes cmake libopenblas-dev libopenblas64-dev git;\ + apt install --yes cmake libblas-dev libblas64-dev liblapack-dev liblapack64-dev git;\ apt install --yes build-essential;\ - apt install --yes gfortran clang flang + apt install --yes gfortran clang flang ninja-build debhelper diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b0eb11..c8bf094 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,7 @@ INCLUDE(FortranCompilerSettings) INCLUDE(GNUInstallDirs) IF (NOT DEFINED BUILD_SHARED_LIBS) - SET(BUILD_SHARED_LIBS ON ) + SET(BUILD_SHARED_LIBS ON) ENDIF() # Set a default build type if none was specified diff --git a/INSTALL.md b/INSTALL.md index f2c68fd..21d1a0c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -109,6 +109,23 @@ bash ./dist/make_rpm.sh -ts ``` instead. +Debian/Ubuntu Packages +---------------------- +On Debian, Ubuntu and their derivatives packages can be built as well. This +requires the installation of then prerequisites: +```shell +sudo apt install cmake libblas-dev libblas64-dev liblapack-dev liblapack64-dev\ + git build-essential gfortran clang flang ninja-build debhelper +``` +and `debhelper` must be available in version 13.0. (This disables building +packages on Ubuntu before 22.04.) + +After installing the requirements, the packages are bulild using +```shell +dpkg-buildpackage -uc -us +``` + + Issues ------ A list of known issues can be found in [KNOWN_ISSUSES.md](./KNOWN_ISSUES.md) diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..c362bcb --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +slicot (5.9.1) noble; urgency=medium + + * SLICOT Release 5.9.1. + + -- Martin Köhler Mon, 03 Nov 2025 14:45:14 +0100 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..9282fe3 --- /dev/null +++ b/debian/control @@ -0,0 +1,105 @@ +Source: slicot +Priority: optional +Maintainer: Martin Köhler +Build-Depends: debhelper-compat (= 13) +Build-Depends-Arch: gfortran, + cmake, + ninja-build, + libblas-dev, + libblas64-dev, + liblapack-dev, + liblapack64-dev +Standards-Version: 4.6.2 +Section: libs +Homepage: https://www.slicot.org +Vcs-Git: https://github.com/SLICOT/SLICOT-Reference.git +Vcs-Browser: https://github.com/SLICOT/SLICOT-Reference +Rules-Requires-Root: no + +Package: libslicot5 +Architecture: any +Multi-Arch: same +Conflicts: libslicot0 +Pre-Depends: ${misc:Pre-Depends} +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: numerical algorithms from systems and control theory (shared library) + SLICOT (Subroutine Library In COntrol Theory) is a general purpose basic + mathematical library for control theoretical computations. The library + provides tools to perform essential system analysis and synthesis tasks. The + main emphasis in SLICOT is on numerical reliability of implemented algorithms + and the numerical robustness and efficiency of routines. Providing algorithmic + flexibility and the use of rigorous implementation and documentation standards + are other SLICOT features. + . + SLICOT is written is Fortran 77 and builds upon the numerical linear algebra + routines from BLAS (Basic Linear Algebra Subroutines) and LAPACK (Linear + Algebra PACKage). + . + This package contains a shared version of the library. + +Package: libslicot64-5 +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: numerical algorithms from systems and control theory (shared library, ILP64) + SLICOT (Subroutine Library In COntrol Theory) is a general purpose basic + mathematical library for control theoretical computations. The library + provides tools to perform essential system analysis and synthesis tasks. The + main emphasis in SLICOT is on numerical reliability of implemented algorithms + and the numerical robustness and efficiency of routines. Providing algorithmic + flexibility and the use of rigorous implementation and documentation standards + are other SLICOT features. + . + SLICOT is written is Fortran 77 and builds upon the numerical linear algebra + routines from BLAS (Basic Linear Algebra Subroutines) and LAPACK (Linear + Algebra PACKage). + . + This package contains a shared version of the library with 64-byte integers. + + +Package: libslicot-dev +Section: libdevel +Architecture: any +Multi-Arch: same +Depends: libslicot5 (= ${binary:Version}), + libslicot64-5 (= ${binary:Version}), + libblas-dev, liblapack-dev, + libblas64-dev, liblapack64-dev, + ${misc:Depends} +Suggests: libslicot-doc +Description: numerical algorithms from systems and control theory (static library) + SLICOT (Subroutine Library In COntrol Theory) is a general purpose basic + mathematical library for control theoretical computations. The library + provides tools to perform essential system analysis and synthesis tasks. The + main emphasis in SLICOT is on numerical reliability of implemented algorithms + and the numerical robustness and efficiency of routines. Providing algorithmic + flexibility and the use of rigorous implementation and documentation standards + are other SLICOT features. + . + SLICOT is written is Fortran 77 and builds upon the numerical linear algebra + routines from BLAS (Basic Linear Algebra Subroutines) and LAPACK (Linear + Algebra PACKage). + . + This package contains a static version of the library. + +Package: libslicot-doc +Section: doc +Architecture: all +Depends: ${misc:Depends} +Suggests: libslicot-dev +Multi-Arch: foreign +Description: numerical algorithms from systems and control theory (documentation) + SLICOT (Subroutine Library In COntrol Theory) is a general purpose basic + mathematical library for control theoretical computations. The library + provides tools to perform essential system analysis and synthesis tasks. The + main emphasis in SLICOT is on numerical reliability of implemented algorithms + and the numerical robustness and efficiency of routines. Providing algorithmic + flexibility and the use of rigorous implementation and documentation standards + are other SLICOT features. + . + SLICOT is written is Fortran 77 and builds upon the numerical linear algebra + routines from BLAS (Basic Linear Algebra Subroutines) and LAPACK (Linear + Algebra PACKage). + . + This package contains the documentation of all the routines. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..608b1a8 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,38 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: SLICOT +Upstream-Contact: Vasile Sima +Source: https://github.com/SLICOT/SLICOT-Reference/ + +Files: * +Copyright: 2020 SLICOT +License: BSD-3-clause + +Files: debian/* +Copyright: 2012-2024 Sébastien Villemot +License: BSD-3-clause + +License: BSD-3-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/debian/libslicot-dev.install b/debian/libslicot-dev.install new file mode 100644 index 0000000..f7e7362 --- /dev/null +++ b/debian/libslicot-dev.install @@ -0,0 +1,8 @@ +/usr/lib/${DEB_HOST_MULTIARCH}/libslicot.so +/usr/lib/${DEB_HOST_MULTIARCH}/libslicot64.so +/usr/lib/${DEB_HOST_MULTIARCH}/libslicot.a +/usr/lib/${DEB_HOST_MULTIARCH}/libslicot64.a +/usr/lib/${DEB_HOST_MULTIARCH}/cmake/SLICOT/* +/usr/lib/${DEB_HOST_MULTIARCH}/cmake/SLICOT64/* +/usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/slicot.pc +/usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/slicot64.pc diff --git a/debian/libslicot-doc.doc-base b/debian/libslicot-doc.doc-base new file mode 100644 index 0000000..a44d800 --- /dev/null +++ b/debian/libslicot-doc.doc-base @@ -0,0 +1,7 @@ +Document: slicot +Title: Slicot Reference Manual +Section: Science/Mathematics + +Format: HTML +Index: /usr/share/doc/libslicot-dev/doc/libindex.html +Files: /usr/share/doc/libslicot-dev/doc/libindex.html /usr/share/doc/libslicot-dev/doc/*.html diff --git a/debian/libslicot-doc.docs b/debian/libslicot-doc.docs new file mode 100644 index 0000000..bff6298 --- /dev/null +++ b/debian/libslicot-doc.docs @@ -0,0 +1,8 @@ +README.md +CITATION.cff +ReleaseNotes.md +CONTRIBUTORS.md +CONTRIBUTING.md +INSTALL.md +KNOWN_ISSUES.md +doc/ diff --git a/debian/libslicot5.install b/debian/libslicot5.install new file mode 100644 index 0000000..8efc9b0 --- /dev/null +++ b/debian/libslicot5.install @@ -0,0 +1 @@ +/usr/lib/${DEB_HOST_MULTIARCH}/libslicot.so.* diff --git a/debian/libslicot64-5.install b/debian/libslicot64-5.install new file mode 100644 index 0000000..7319c4d --- /dev/null +++ b/debian/libslicot64-5.install @@ -0,0 +1,2 @@ +/usr/lib/${DEB_HOST_MULTIARCH}/libslicot64.so.* + diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..0fe3d9e --- /dev/null +++ b/debian/rules @@ -0,0 +1,102 @@ +#!/usr/bin/make -f + +#export DH_VERBOSE = 1 + +pkgsrc = $(shell LC_ALL=C dpkg-parsechangelog --show-field Source ) +pkgver = $(shell LC_ALL=C dpkg-parsechangelog --show-field Version ) +pkgdist = $(shell LC_ALL=C dpkg-parsechangelog --show-field Distribution ) + +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + + + + +OS_DIST := $(shell grep ^VERSION_CODENAME /etc/os-release | cut -d'=' -f2 | sed 's/\"//gI') + +SC_VERSION = $(shell dist/get_version.sh deb) +NEW_VERSION = $(shell dpkg --compare-versions $(SC_VERSION) gt $(pkgver) && echo $(SC_VERSION) ) + +ifdef DEB_FULLNAME +export DEBFULLNAME=$(DEB_FULLNAME) +endif + + +%: + dh $@ --with-missing + +override_dh_missing: + dh_missing --fail-missing + +override_dh_auto_clean: + dh_auto_clean -B build-32 + dh_auto_clean -B build-64 + dh_auto_clean -B build-32-static + dh_auto_clean -B build-64-static + rm -rf build-32 + rm -rf build-64 + rm -rf build-32-static + rm -rf build-64-static +ifneq ($(NEW_VERSION),) + $(warning "Setting new version in debian changelog: $(NEW_VERSION)") + debchange -v $(NEW_VERSION)$(VERSION_POSTFIX) "Version $(NEW_VERSION)" && debchange -D $(OS_DIST) -m -r "" +endif + + +override_dh_auto_configure: +ifneq ($(NEW_VERSION),) + $(warning "Setting new version in debian changelog: $(NEW_VERSION)") + debchange -v $(NEW_VERSION)$(VERSION_POSTFIX) "Version $(NEW_VERSION)" && debchange -D $(OS_DIST) -m -r "" +endif + mkdir -p build-32 + mkdir -p build-64 + mkdir -p build-32-static + mkdir -p build-64-static + dh_auto_configure -B build-32 -- \ + -DBLA_VENDOR=Generic \ + -DSLICOT_INTEGER8=OFF \ + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ + -GNinja + dh_auto_configure -B build-64 -- \ + -DBLA_VENDOR=Generic \ + -DSLICOT_INTEGER8=ON \ + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ + -GNinja + dh_auto_configure -B build-32-static -- \ + -DBLA_VENDOR=Generic \ + -DSLICOT_INTEGER8=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DSLICOT_TESTING=OFF \ + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ + -GNinja + dh_auto_configure -B build-64-static -- \ + -DBLA_VENDOR=Generic \ + -DSLICOT_INTEGER8=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DSLICOT_TESTING=OFF \ + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ + -GNinja + + +override_dh_auto_build: + dh_auto_build -B build-32 + dh_auto_build -B build-64 + dh_auto_build -B build-32-static + dh_auto_build -B build-64-static + + +override_dh_auto_install: + dh_auto_install -B build-32 + dh_auto_install -B build-64 + install -m 644 -t $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/ build-32-static/lib/libslicot.a + install -m 644 -t $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/ build-64-static/lib/libslicot64.a + + + +override_dh_auto_test: + # dh_auto_test --no-parallel + dh_auto_test -B build-32 --no-parallel + dh_auto_test -B build-64 --no-parallel + + + + diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides new file mode 100644 index 0000000..9af2c0b --- /dev/null +++ b/debian/source/lintian-overrides @@ -0,0 +1,3 @@ +# False positives +slicot source: source-is-missing [doc/DAESolver.html] +slicot source: source-is-missing [doc/ODESolver.html] diff --git a/debian/source/options b/debian/source/options new file mode 100644 index 0000000..531c6f2 --- /dev/null +++ b/debian/source/options @@ -0,0 +1,5 @@ +tar-ignore=build* +tar-ignore=.ccls* +tar-ignore=.git* +tar-ignore=*.a + diff --git a/dist/get_version.sh b/dist/get_version.sh new file mode 100755 index 0000000..e57ec8c --- /dev/null +++ b/dist/get_version.sh @@ -0,0 +1,20 @@ +#!/bin/sh +VERSION="" +if [ -e ./.version ]; then + . ./.version + VERSION="$MAJOR.$MINOR.$PATCH" +fi + +if [ -d .git -a -n "$(which git)" ]; then + VERSIONX=$(git describe --match 'v[0-9]*.[0-9]*.[0-9]*' --long 2>/dev/null ) + ret=$? + if [ $ret -eq 0 ]; then + VERSION=$(echo $VERSIONX | sed 's/-g[0-9a-f]\+$//' | sed 's/^v//g' ) + fi +fi + +if [ "$1" = "deb" ]; then + VERSION=$(echo $VERSION | sed 's/-/+/g' ) +fi +echo $VERSION + diff --git a/libindex.html b/doc/libindex.html similarity index 74% rename from libindex.html rename to doc/libindex.html index 625601e..91592ca 100644 --- a/libindex.html +++ b/doc/libindex.html @@ -22,7 +22,7 @@

SLICOT LIBRARY INDEX

or Return to SLICOT homepage
-or +or Go to SLICOT Supporting Routines Index


@@ -30,141 +30,141 @@

SLICOT LIBRARY INDEX

AB - State-Space Analysis

Canonical and Quasi Canonical Forms

-
+
 AB01MD   Orthogonal controllability form for single-input system
-
+
 AB01ND   Orthogonal controllability staircase form for multi-input system
-
+
 AB01OD   Staircase form for multi-input system using orthogonal transformations
 

Continuous/Discrete Time

-
+
 AB04MD   Discrete-time <-> continuous-time conversion by bilinear transformation
 

Interconnections of Subsystems

-
+
 AB05MD   Cascade inter-connection of two systems in state-space form
-
+
 AB05ND   Feedback inter-connection of two systems in state-space form
-
+
 AB05OD   Rowwise concatenation of two systems in state-space form
-
+
 AB05PD   Parallel inter-connection of two systems in state-space form
-
+
 AB05QD   Appending two systems in state-space form
-
+
 AB05RD   Closed-loop system for a mixed output and state feedback control law
-
+
 AB05SD   Closed-loop system for an output feedback control law
 

Inverse and Dual Systems

-
+
 AB07MD   Dual of a given state-space representation
-
+
 AB07ND   Inverse of a given state-space representation
 

Poles, Zeros, Gain

-
+
 AB08MD   Normal rank of the transfer-function matrix of a state space model
-
+
 AB08MZ   Normal rank of the transfer-function matrix of a state space model (complex case)
-
+
 AB08ND   System zeros and Kronecker structure of system pencil
-
+
 AB08NW   System zeros and singular and infinite Kronecker structure of system pencil
-
+
 AB08NZ   System zeros and Kronecker structure of system pencil (complex case)
 

Model Reduction

-
-AB09AD   Balance & Truncate model reduction   
-
-AB09BD   Singular perturbation approximation based model reduction 
-
-AB09CD   Hankel norm approximation based model reduction 
-
-AB09DD   Singular perturbation approximation formulas 
-
+
+AB09AD   Balance & Truncate model reduction
+
+AB09BD   Singular perturbation approximation based model reduction
+
+AB09CD   Hankel norm approximation based model reduction
+
+AB09DD   Singular perturbation approximation formulas
+
 AB09ED   Hankel norm approximation based model reduction of unstable systems
-
+
 AB09FD   Balance & Truncate model reduction of coprime factors
-
+
 AB09GD   Singular perturbation approximation of coprime factors
-
+
 AB09HD   Stochastic balancing based model reduction
-
+
 AB09ID   Frequency-weighted model reduction based on balancing techniques
-
+
 AB09JD   Frequency-weighted Hankel norm approximation with invertible weights
-
+
 AB09KD   Frequency-weighted Hankel-norm approximation
-
-AB09MD   Balance & Truncate model reduction for the stable part  
-
-AB09ND   Singular perturbation approximation based model reduction for the   
-         stable part  
+
+AB09MD   Balance & Truncate model reduction for the stable part
+
+AB09ND   Singular perturbation approximation based model reduction for the
+         stable part
 

System Norms

-
-AB13AD   Hankel-norm of the stable projection   
-
-AB13BD   H2 or L2 norm of a system 
-
+
+AB13AD   Hankel-norm of the stable projection
+
+AB13BD   H2 or L2 norm of a system
+
 AB13CD   H-infinity norm of a continuous-time stable system
          (obsolete, replaced by AB13DD)
-
+
 AB13DD   L-infinity norm of a state space system
-
-AB13HD   L-infinity norm of a state space system in standard or 
+
+AB13HD   L-infinity norm of a state space system in standard or
          in descriptor form
-
+
 AB13ED   Complex stability radius, using bisection
-
+
 AB13FD   Complex stability radius, using bisection and SVD
-
+
 AB13ID   Properness of the transfer function matrix of a descriptor system
-
-AB13MD   Upper bound on the structured singular value for a square 
+
+AB13MD   Upper bound on the structured singular value for a square
          complex matrix
 

AG - Generalized State-Space Analysis

Inverse and Dual Systems

-
+
 AG07BD   Descriptor inverse of a state-space or descriptor representation
 

Poles, Zeros, Gain

-
+
 AG08BD   Zeros and Kronecker structure of a descriptor system pencil
-
+
 AG08BZ   Zeros and Kronecker structure of a descriptor system pencil (complex case)
 

-

B - Benchmark and Test Problems

+

B - Benchmark and Test Problems

BB - State-space Models

-
+
 BB01AD   Benchmark examples for continuous-time Riccati equations
-
+
 BB02AD   Benchmark examples for discrete-time Riccati equations
-
+
 BB03AD   Benchmark examples of (generalized) continuous-time Lyapunov equations
-
+
 BB04AD   Benchmark examples of (generalized) discrete-time Lyapunov equations
 

BD - Generalized State-space Models

-
+
 BD01AD   Benchmark examples of continuous-time systems
-
+
 BD02AD   Benchmark examples of discrete-time systems
 

@@ -173,48 +173,48 @@

BD - Generalized State-space Models

D - Data Analysis

DE - Covariances

-
+
 DE01OD   Convolution or deconvolution of two signals
-
+
 DE01PD   Convolution or deconvolution of two real signals using Hartley transform
 

DF - Spectra

-
+
 DF01MD   Sine transform or cosine transform of a real signal
 

DG - Discrete Fourier and Hartley Transforms

-
+
 DG01MD   Discrete Fourier transform of a complex signal
-
+
 DG01ND   Discrete Fourier transform of a real signal
-
+
 DG01OD   Scrambled discrete Hartley transform of a real signal
 

DK - Windowing

-
+
 DK01MD   Anti-aliasing window applied to a real signal
 

F - Filtering

FB - Kalman Filters

-
+
 FB01QD   Time-varying square root covariance filter (dense matrices)
-
-FB01RD   Time-invariant square root covariance filter (Hessenberg form) 
-
+
+FB01RD   Time-invariant square root covariance filter (Hessenberg form)
+
 FB01SD   Time-varying square root information filter (dense matrices)
-
-FB01TD   Time-invariant square root information filter (Hessenberg form) 
-
-FB01VD   One recursion of the conventional Kalman filter 
+
+FB01TD   Time-invariant square root information filter (Hessenberg form)
+
+FB01VD   One recursion of the conventional Kalman filter
 

FD - Fast Recursive Least Squares Filters

-
+
 FD01AD   Fast recursive least-squares filter
 

@@ -222,19 +222,19 @@

FD - Fast Recursive Least Squares Filters

IB - Subspace Identification

Time Invariant State-space Systems

-
+
 IB01AD   Input-output data preprocessing and finding the system order
-
+
 IB01BD   Estimating the system matrices, covariances, and Kalman gain
-
+
 IB01CD   Estimating the initial state and the system matrices B and D
 

Wiener Systems

-
+
 IB03AD   Estimating a Wiener system by a Levenberg-Marquardt algorithm
          (Cholesky-based or conjugate gradients solver)
-
+
 IB03BD   Estimating a Wiener system by a MINPACK-like Levenberg-Marquardt
          algorithm
 
@@ -243,309 +243,309 @@

Wiener Systems

MB - Linear Algebra

Basic Linear Algebra Manipulations

-
+
 MB01PD   Matrix scaling (higher level routine)
-
+
 MB01QD   Matrix scaling (lower level routine)
-
-MB01RB   Computation of a triangle of matrix expression alpha*R + beta*A*B 
+
+MB01RB   Computation of a triangle of matrix expression alpha*R + beta*A*B
          or alpha*R + beta*B*A ( BLAS 3 version)
-
+
 MB01RD   Computation of matrix expression alpha*R + beta*A*X*trans(A)
-
-MB01TD   Product of two upper quasi-triangular matrices 
-
+
+MB01TD   Product of two upper quasi-triangular matrices
+
 MB01UD   Computation of matrix expressions alpha*H*A or alpha*A*H,
          with H an upper Hessenberg matrix
-
+
 MB01UX   Computation of matrix expressions alpha*T*A or alpha*A*T, T quasi-triangular
-
+
 MB01UY   Computation of matrix expressions alpha*T*A or alpha*A*T, over T, T triangular
-
+
 MB01UZ   Computation of matrix expressions alpha*T*A or alpha*A*T, over T, T triangular
          (complex version)
-
-MB01WD   Residuals of Lyapunov or Stein equations for Cholesky factored 
+
+MB01WD   Residuals of Lyapunov or Stein equations for Cholesky factored
          solutions
-
-MB01XD   Computation of the product U'*U or L*L', with U and L upper and 
+
+MB01XD   Computation of the product U'*U or L*L', with U and L upper and
          lower triangular matrices (block algorithm)
-
+
 MB01YD   Symmetric rank k operation C := alpha*A*A' + beta*C, C symmetric
-
+
 MB01ZD   Computation of matrix expressions H := alpha*T*H, or H := alpha*H*T,
          with H Hessenberg-like, T triangular
 

Linear Equations and Least Squares

-
+
 MB02CD   Cholesky factorization of a positive definite block Toeplitz matrix
-
-MB02DD   Updating Cholesky factorization of a positive definite block 
+
+MB02DD   Updating Cholesky factorization of a positive definite block
          Toeplitz matrix
-
+
 MB02ED   Solution of T*X = B or X*T = B, with T a positive definite
          block Toeplitz matrix
-
+
 MB02FD   Incomplete Cholesky factor of a positive definite block Toeplitz matrix
-
+
 MB02GD   Cholesky factorization of a banded symmetric positive definite
          block Toeplitz matrix
-
+
 MB02HD   Cholesky factorization of the matrix T'*T, with T a banded
          block Toeplitz matrix of full rank
-
+
 MB02ID   Solution of over- or underdetermined linear systems with a full rank
          block Toeplitz matrix
-
+
 MB02JD   Full QR factorization of a block Toeplitz matrix of full rank
-
+
 MB02JX   Low rank QR factorization with column pivoting of a block Toeplitz matrix
-
+
 MB02KD   Computation of the product C = alpha*op( T )*B + beta*C, with T
          a block Toeplitz matrix
-
+
 MB02MD   Solution of Total Least-Squares problem using a SVD approach
-
+
 MB02ND   Solution of Total Least-Squares problem using a partial SVD approach
-
-MB02OD   Solution of op(A)*X = alpha*B, or X*op(A) = alpha*B, A triangular 
-
-MB02PD   Solution of matrix equation op(A)*X = B, with error bounds 
+
+MB02OD   Solution of op(A)*X = alpha*B, or X*op(A) = alpha*B, A triangular
+
+MB02PD   Solution of matrix equation op(A)*X = B, with error bounds
          and condition estimates
-
-MB02QD   Solution, optionally corresponding to specified free elements, 
+
+MB02QD   Solution, optionally corresponding to specified free elements,
          of a linear least squares problem
-
+
 MB02RD   Solution of a linear system with upper Hessenberg matrix
-
+
 MB02RZ   Solution of a linear system with complex upper Hessenberg matrix
-
+
 MB02SD   LU factorization of an upper Hessenberg matrix
-
+
 MB02SZ   LU factorization of a complex upper Hessenberg matrix
-
+
 MB02TD   Condition number of an upper Hessenberg matrix
-
+
 MB02TZ   Condition number of a complex upper Hessenberg matrix
-
+
 MB02UD   Minimum norm least squares solution of op(R)*X = B, or X*op(R) = B,
          using singular value decomposition (R upper triangular)
-
+
 MB02VD   Solution of X*op(A) = B
 

Eigenvalues and Eigenvectors

-
-MB03LF   Eigenvalues and right deflating subspace of a real 
+
+MB03LF   Eigenvalues and right deflating subspace of a real
          skew-Hamiltonian/Hamiltonian pencil in factored form
-
-MB03FZ   Eigenvalues and right deflating subspace of a complex 
+
+MB03FZ   Eigenvalues and right deflating subspace of a complex
          skew-Hamiltonian/Hamiltonian pencil in factored form
-
-MB03LD   Eigenvalues and right deflating subspace of a real 
+
+MB03LD   Eigenvalues and right deflating subspace of a real
          skew-Hamiltonian/Hamiltonian pencil
-
-MB03LP   Eigenvalues and right deflating subspace of a real 
+
+MB03LP   Eigenvalues and right deflating subspace of a real
          skew-Hamiltonian/Hamiltonian pencil (applying transformations on panels of columns)
-
-MB03LZ   Eigenvalues and right deflating subspace of a complex 
+
+MB03LZ   Eigenvalues and right deflating subspace of a complex
          skew-Hamiltonian/Hamiltonian pencil
-
-MB3LZP   Eigenvalues and right deflating subspace of a complex 
+
+MB3LZP   Eigenvalues and right deflating subspace of a complex
          skew-Hamiltonian/Hamiltonian pencil (applying transformations on panels of columns)
-
+
 MB03MD   Upper bound for L singular values of a bidiagonal matrix
-
+
 MB03ND   Number of singular values of a bidiagonal matrix less than a bound
-
+
 MB03OD   Matrix rank determination by incremental condition estimation
-
+
 MB03PD   Matrix rank determination (row pivoting)
-
+
 MB03QD   Reordering of the diagonal blocks of a real Schur matrix
-
-MB03QG   Reordering of the diagonal blocks of principal subpencil of 
+
+MB03QG   Reordering of the diagonal blocks of principal subpencil of
          a real Schur-triangular matrix pencil
-
+
 MB03RD   Reduction of a real Schur matrix to a block-diagonal form
-
+
 MB03RZ   Reduction of a complex Schur matrix to a block-diagonal form
-
+
 MB03SD   Eigenvalues of a square-reduced Hamiltonian matrix
-
+
 MB03TD   Reordering the diagonal blocks of a matrix in (skew-)Hamiltonian Schur form
-
+
 MB03UD   Singular value decomposition of an upper triangular matrix
-
+
 MB03VD   Periodic Hessenberg form of a product of matrices
-
+
 MB03VW   Periodic Hessenberg form of a formal product of matrices
-
+
 MB03WD   Periodic Schur decomposition and eigenvalues of a product of
          matrices in periodic Hessenberg form
-
+
 MB03XD   Eigenvalues of a Hamiltonian matrix
-
+
 MB03XZ   Eigenvalues of a complex Hamiltonian matrix
-
-MB03XP   Periodic Schur decomposition and eigenvalues of a matrix product A*B, 
+
+MB03XP   Periodic Schur decomposition and eigenvalues of a matrix product A*B,
          A upper Hessenberg and B upper triangular
-
+
 MB03YD   Periodic QR iteration
-
+
 MB03ZD   Stable and unstable invariant subspaces for a dichotomic Hamiltonian matrix
 

Decompositions and Transformations

-
-MB04AD   Eigenvalues and generalized symplectic URV decomposition of a real 
+
+MB04AD   Eigenvalues and generalized symplectic URV decomposition of a real
          skew-Hamiltonian/Hamiltonian pencil in factored form
-
+
 MB04AZ   Eigenvalues of a complex skew-Hamiltonian/Hamiltonian pencil in factored form
-
-MB04BD   Eigenvalues and orthogonal decomposition of a real 
+
+MB04BD   Eigenvalues and orthogonal decomposition of a real
          skew-Hamiltonian/Hamiltonian pencil
-
-MB04BP   Eigenvalues and orthogonal decomposition of a real 
+
+MB04BP   Eigenvalues and orthogonal decomposition of a real
          skew-Hamiltonian/Hamiltonian pencil (applying transformations on panels of columns)
-
+
 MB04BZ   Eigenvalues of a complex skew-Hamiltonian/Hamiltonian pencil
-
-MB04DL   Balancing a real matrix pencil, optionally avoiding large 
+
+MB04DL   Balancing a real matrix pencil, optionally avoiding large
          norms for the scaled (sub)matrices
-
-MB4DLZ   Balancing a complex matrix pencil, optionally avoiding large 
-         norms for the scaled (sub)matrices 
-
-MB04DP   Balancing a real skew-Hamiltonian/Hamiltonian matrix pencil, 
+
+MB4DLZ   Balancing a complex matrix pencil, optionally avoiding large
+         norms for the scaled (sub)matrices
+
+MB04DP   Balancing a real skew-Hamiltonian/Hamiltonian matrix pencil,
          optionally avoiding large norms for the scaled (sub)matrices
-
-MB4DPZ   Balancing a complex skew-Hamiltonian/Hamiltonian matrix pencil, 
+
+MB4DPZ   Balancing a complex skew-Hamiltonian/Hamiltonian matrix pencil,
          optionally avoiding large norms for the scaled (sub)matrices
-
-MB04ED   Eigenvalues and orthogonal decomposition of a real 
+
+MB04ED   Eigenvalues and orthogonal decomposition of a real
          skew-Hamiltonian/skew-Hamiltonian pencil in factored form
-
-MB04FD   Eigenvalues and orthogonal decomposition of a real 
+
+MB04FD   Eigenvalues and orthogonal decomposition of a real
          skew-Hamiltonian/skew-Hamiltonian pencil
-
-MB04FP   Eigenvalues and orthogonal decomposition of a real 
+
+MB04FP   Eigenvalues and orthogonal decomposition of a real
          skew-Hamiltonian/skew-Hamiltonian pencil (applying transformations on panels of columns)
-
+
 MB04GD   RQ factorization of a matrix with row pivoting
-
+
 MB04ID   QR factorization of a matrix with a lower left zero triangle
-
+
 MB04IZ   QR factorization of a matrix with a lower left zero triangle (complex case)
-
+
 MB04JD   LQ factorization of a matrix with an upper right zero triangle
-
+
 MB04KD   QR factorization of a special structured block matrix
-
+
 MB04LD   LQ factorization of a special structured block matrix
-
+
 MB04MD   Balancing a general real matrix
-
+
 MB04ND   RQ factorization of a special structured block matrix
-
+
 MB04OD   QR factorization of a special structured block matrix (variant)
-
+
 MB04PB   Paige/Van Loan form of a Hamiltonian matrix
-
-MB04RD   Reduction of a real matrix pencil in generalized real Schur form to 
+
+MB04RD   Reduction of a real matrix pencil in generalized real Schur form to
          a block-diagonal form
-
+
 MB04RT   Solution of a generalized real Sylvester equation with matrix pairs
          in generalized real Schur form (blocked version)
-
+
 MB04RW   Solution of a generalized complex Sylvester equation with matrix pairs
          in generalized complex Schur form (blocked version)
-
-MB04RZ   Reduction of a complex matrix pencil in generalized complex Schur form to 
+
+MB04RZ   Reduction of a complex matrix pencil in generalized complex Schur form to
          a block-diagonal form
-
+
 MB04TB   Symplectic URV decomposition of a real 2N-by-2N matrix
-
-MB04UD   Unitary column echelon form for a rectangular matrix 
-
+
+MB04UD   Unitary column echelon form for a rectangular matrix
+
 MB04VD   Upper block triangular form for a rectangular pencil
-
-MB04XD   Basis for left/right null singular subspace of a matrix  
-
-MB04YD   Partial diagonalization of a bidiagonal matrix  
-
-MB04ZD   Transforming a Hamiltonian matrix into a square-reduced form  
+
+MB04XD   Basis for left/right null singular subspace of a matrix
+
+MB04YD   Partial diagonalization of a bidiagonal matrix
+
+MB04ZD   Transforming a Hamiltonian matrix into a square-reduced form
 

Matrix Functions

-
-MB05MD   Matrix exponential for a real non-defective matrix 
-
-MB05ND   Matrix exponential and integral for a real matrix 
-
+
+MB05MD   Matrix exponential for a real non-defective matrix
+
+MB05ND   Matrix exponential and integral for a real matrix
+
 MB05OD   Matrix exponential for a real matrix, with accuracy estimate
 

MC - Polynomial and Rational Function Manipulation

Scalar Polynomials

-
-MC01MD   The leading coefficients of the shifted polynomial  
-
-MC01ND   Value of a real polynomial at a given complex point  
-
-MC01OD   Coefficients of a complex polynomial, given its zeros  
-
-MC01PD   Coefficients of a real polynomial, given its zeros  
-
-MC01QD   Quotient and remainder polynomials for polynomial division 
-
-MC01RD   Polynomial operation P(x) = P1(x) P2(x) + alpha P3(x)  
-
-MC01SD   Scaling coefficients of a real polynomial for minimal variation  
-
-MC01TD   Checking stability of a given real polynomial  
-
-MC01VD   Roots of a quadratic equation with real coefficients  
-
-MC01WD   Quotient and remainder polynomials for a quadratic denominator  
-
-MC01XD   Roots of a third order polynomial  
+
+MC01MD   The leading coefficients of the shifted polynomial
+
+MC01ND   Value of a real polynomial at a given complex point
+
+MC01OD   Coefficients of a complex polynomial, given its zeros
+
+MC01PD   Coefficients of a real polynomial, given its zeros
+
+MC01QD   Quotient and remainder polynomials for polynomial division
+
+MC01RD   Polynomial operation P(x) = P1(x) P2(x) + alpha P3(x)
+
+MC01SD   Scaling coefficients of a real polynomial for minimal variation
+
+MC01TD   Checking stability of a given real polynomial
+
+MC01VD   Roots of a quadratic equation with real coefficients
+
+MC01WD   Quotient and remainder polynomials for a quadratic denominator
+
+MC01XD   Roots of a third order polynomial
 

Polynomial Matrices

-
-MC03MD   Real polynomial matrix operation P(x) = P1(x) P2(x) + alpha P3(x)  
-
-MC03ND   Minimal polynomial basis for the right nullspace of a polynomial matrix  
+
+MC03MD   Real polynomial matrix operation P(x) = P1(x) P2(x) + alpha P3(x)
+
+MC03ND   Minimal polynomial basis for the right nullspace of a polynomial matrix
 

MD - Optimization

Unconstrained Nonlinear Least Squares

-
+
 MD03AD   Levenberg-Marquardt algorithm (Cholesky-based or conjugate
          gradients solver)
-
-MD03BD   Enhanced MINPACK-like Levenberg-Marquardt algorithm 
+
+MD03BD   Enhanced MINPACK-like Levenberg-Marquardt algorithm
 

N - Nonlinear Systems

NI - Interfaces to Nonlinear Solvers

ODE and DAE Solvers

-
+
 DAESolver    Interface to DAE Solvers
-
+
 ODESolver    Interface to ODE Solvers
 

Nonlinear Equation Solvers

-
+
 KINSOL    Interface to KINSOL solver for nonlinear systems of equations
 

Nonlinear Optimization Solvers

-
+
 FSQP    Interface to FSQP solver for nonlinear optimization
 

@@ -553,160 +553,160 @@

Nonlinear Optimization Solvers

SB - State-Space Synthesis

Eigenvalue/Eigenvector Assignment

-
+
 SB01BD    Pole assignment for a given matrix pair (A,B)
-
+
 SB01DD    Eigenstructure assignment for a controllable matrix pair (A,B) in
           orthogonal canonical form
-
+
 SB01MD    State feedback matrix of a time-invariant single-input system
 

Riccati Equations

-
+
 SB02MD    Solution of algebraic Riccati equations (Schur vectors method)
-
+
 SB02MT    Conversion of problems with coupling terms to standard problems
-
+
 SB02MX    Conversion of problems with coupling terms to standard problems
           (more flexibility)
-
+
 SB02ND    Optimal state feedback matrix for an optimal control problem
-
+
 SB02OD    Solution of algebraic Riccati equations (generalized Schur method)
-
-SB02PD    Solution of continuous algebraic Riccati equations (matrix sign 
+
+SB02PD    Solution of continuous algebraic Riccati equations (matrix sign
           function method) with condition and forward error bound estimates
-
+
 SB02QD    Condition and forward error for continuous Riccati equation solution
-
-SB02RD    Solution of algebraic Riccati equations (refined Schur vectors method) 
+
+SB02RD    Solution of algebraic Riccati equations (refined Schur vectors method)
           with condition and forward error bound estimates
-
+
 SB02SD    Condition and forward error for discrete Riccati equation solution
 

Lyapunov Equations

-
+
 SB03MD    Solution of Lyapunov equations and separation estimation
-
+
 SB03OD    Solution of stable Lyapunov equations (Cholesky factor)
-
+
 SB03OZ    Solution of stable complex Lyapunov equations (Cholesky factor)
-
+
 SB03PD    Solution of discrete Lyapunov equations and separation estimation
-
+
 SB03QD    Condition and forward error for continuous Lyapunov equations
-
+
 SB03RD    Solution of continuous Lyapunov equations and separation estimation
-
+
 SB03SD    Condition and forward error for discrete Lyapunov equations
-
-SB03TD    Solution of continuous Lyapunov equations, condition and forward error 
+
+SB03TD    Solution of continuous Lyapunov equations, condition and forward error
           estimation
-
-SB03UD    Solution of discrete Lyapunov equations, condition and forward error 
+
+SB03UD    Solution of discrete Lyapunov equations, condition and forward error
           estimation
 

Sylvester Equations

-
+
 SB04MD    Solution of continuous Sylvester equations (Hessenberg-Schur method)
-
+
 SB04ND    Solution of continuous Sylvester equations (one matrix in Schur form)
-
+
 SB04OD    Solution of generalized Sylvester equations with separation estimation
-
+
 SB04PD    Solution of continuous or discrete Sylvester equations (Schur method)
-
+
 SB04QD    Solution of discrete Sylvester equations (Hessenberg-Schur method)
-
+
 SB04RD    Solution of discrete Sylvester equations (one matrix in Schur form)
 

Deadbeat Control

-
-SB06ND    Minimum norm deadbeat control state feedback matrix 
+
+SB06ND    Minimum norm deadbeat control state feedback matrix
 

Transfer Matrix Factorization

-
+
 SB08CD    Left coprime factorization with inner denominator
-
+
 SB08DD    Right coprime factorization with inner denominator
-
+
 SB08ED    Left coprime factorization with prescribed stability degree
-
+
 SB08FD    Right coprime factorization with prescribed stability degree
-
+
 SB08GD    State-space representation of a left coprime factorization
-
+
 SB08HD    State-space representation of a right coprime factorization
-
+
 SB08MD    Spectral factorization of polynomials (continuous-time case)
-
+
 SB08ND    Spectral factorization of polynomials (discrete-time case)
 

Realization Methods

-
+
 SB09MD    Closeness of two multivariable sequences
 
 

Optimal Regulator Problems

-
+
 SB10AD    H-infinity optimal controller using modified Glover's and Doyle's
           formulas (continuous-time)
-
+
 SB10DD    H-infinity (sub)optimal state controller for a discrete-time system
-
+
 SB10ED    H2 optimal state controller for a discrete-time system
-
+
 SB10FD    H-infinity (sub)optimal state controller for a continuous-time system
-
+
 SB10HD    H2 optimal state controller for a continuous-time system
-
+
 SB10MD    D-step in the D-K iteration for continuous-time case
-
+
 SB10ID    Positive feedback controller for a continuous-time system
-
+
 SB10KD    Positive feedback controller for a discrete-time system
-
+
 SB10ZD    Positive feedback controller for a discrete-time system (D <> 0)
 
 

Controller Reduction

-
+
 SB16AD    Stability/performance enforcing frequency-weighted controller reduction
-
+
 SB16BD    Coprime factorization based state feedback controller reduction
-
-SB16CD    Coprime factorization based frequency-weighted state feedback 
+
+SB16CD    Coprime factorization based frequency-weighted state feedback
           controller reduction
 

SG - Generalized State-Space Synthesis

Riccati Equations

-
+
 SG02AD    Solution of algebraic Riccati equations for descriptor systems
-
+
 SG02CW    Residual of continuous- or discrete-time (generalized) algebraic
           Riccati equations
-
-SG02CX    Line search parameter minimizing the residual of (generalized) 
+
+SG02CX    Line search parameter minimizing the residual of (generalized)
           continuous- or discrete-time algebraic Riccati equations
-
+
 SG02ND    Optimal state feedback matrix for an optimal control problem
 

Generalized Lyapunov Equations

-
+
 SG03AD    Solution of generalized Lyapunov equations and separation estimation
-
+
 SG03BD    Solution of stable generalized Lyapunov equations (Cholesky factor)
-
+
 SG03BZ    Solution of stable generalized complex Lyapunov equations (Cholesky factor)
 

@@ -714,178 +714,178 @@

Generalized Lyapunov Equations

TB - State-Space

State-Space Transformations

-
+
 TB01ID   Balancing a system matrix for a given triplet
-
+
 TB01IZ   Balancing a system matrix for a given triplet (complex case)
-
-TB01KD   Additive spectral decomposition of a state-space system 
-
+
+TB01KD   Additive spectral decomposition of a state-space system
+
 TB01LD   Spectral separation of a state-space system
-
+
 TB01MD   Upper/lower controller Hessenberg form
-
-TB01ND   Upper/lower observer Hessenberg form 
-
-TB01PD   Minimal, controllable or observable block Hessenberg realization 
-
+
+TB01ND   Upper/lower observer Hessenberg form
+
+TB01PD   Minimal, controllable or observable block Hessenberg realization
+
 TB01PX   Minimal, controllable or observable block Hessenberg realization (variant)
-
+
 TB01TD   Balancing state-space representation by permutations and scalings
-
+
 TB01UD   Controllable block Hessenberg realization for a state-space representation
-
+
 TB01UY   Controllable block Hessenberg realization for a standard multi-input system
-
-TB01WD   Reduction of the state dynamics matrix to real Schur form 
-
-TB01WX   Orthogonal similarity transformation of a standard system to one 
+
+TB01WD   Reduction of the state dynamics matrix to real Schur form
+
+TB01WX   Orthogonal similarity transformation of a standard system to one
          with state matrix in a Hessenberg form
-
-TB01ZD   Controllable realization for single-input systems 
+
+TB01ZD   Controllable realization for single-input systems
 

State-Space to Polynomial Matrix Conversion

-
+
 TB03AD   Left/right polynomial matrix representation of a state-space representation
 

State-Space to Rational Matrix Conversion

-
-TB04AD   Transfer matrix of a state-space representation  
-
+
+TB04AD   Transfer matrix of a state-space representation
+
 TB04BD   Transfer matrix of a state-space representation, using the pole-zeros method
-
-TB04CD   Transfer matrix of a state-space representation in the pole-zero-gain form 
+
+TB04CD   Transfer matrix of a state-space representation in the pole-zero-gain form
 

State-Space to Frequency Response

-
-TB05AD   Frequency response matrix of a state-space representation 
+
+TB05AD   Frequency response matrix of a state-space representation
 

TC - Polynomial Matrix

Polynomial Matrix Transformations

-
+
 TC01OD   Dual of a left/right polynomial matrix representation
 

Polynomial Matrix to State-Space Conversion

-
+
 TC04AD   State-space representation for left/right polynomial matrix representation
 

Polynomial Matrix to Frequency Response

-
+
 TC05AD   Transfer matrix of a left/right polynomial matrix representation
 

TD - Rational Matrix

Rational Matrix to Polynomial Matrix Conversion

-
+
 TD03AD   Left/right polynomial matrix representation for a proper transfer matrix
 

Rational Matrix to State-Space Conversion

-
-TD04AD   Minimal state-space representation for a proper transfer matrix 
+
+TD04AD   Minimal state-space representation for a proper transfer matrix
 

Rational Matrix to Frequency Response

-
-TD05AD   Evaluation of a transfer function for a specified frequency 
+
+TD05AD   Evaluation of a transfer function for a specified frequency
 

TF - Time Response

-
+
 TF01MD   Output response of a linear discrete-time system
-
+
 TF01ND   Output response of a linear discrete-time system (Hessenberg matrix)
-
+
 TF01OD   Block Hankel expansion of a multivariable parameter sequence
-
+
 TF01PD   Block Toeplitz expansion of a multivariable parameter sequence
-
+
 TF01QD   Markov parameters of a system from transfer function matrix
-
+
 TF01RD   Markov parameters of a system from state-space representation
 

TG - Generalized State-space

Generalized State-space Transformations

-
+
 TG01AD   Balancing the matrices of the system pencil corresponding to a
          descriptor triple
-
+
 TG01AZ   Balancing the matrices of the system pencil corresponding to a
          descriptor triple (complex case)
-
-TG01BD   Orthogonal reduction of a descriptor system to the generalized 
+
+TG01BD   Orthogonal reduction of a descriptor system to the generalized
          Hessenberg form
-
+
 TG01CD   Orthogonal reduction of a descriptor system pair (A-sE,B)
          to the QR-coordinate form
-
+
 TG01DD   Orthogonal reduction of a descriptor system pair (C,A-sE)
          to the RQ-coordinate form
-
-TG01ED   Orthogonal reduction of a descriptor system to a SVD coordinate 
+
+TG01ED   Orthogonal reduction of a descriptor system to a SVD coordinate
          form
-
+
 TG01FD   Orthogonal reduction of a descriptor system to a SVD-like
          coordinate form
-
-TG01FZ   Orthogonal reduction of a descriptor system to a SVD-like 
+
+TG01FZ   Orthogonal reduction of a descriptor system to a SVD-like
          coordinate form (complex case)
-
+
 TG01GD   Reduced descriptor representation without non-dynamic modes
-
+
 TG01HD   Orthogonal reduction of a descriptor system to the controllability
          staircase form
-
+
 TG01ID   Orthogonal reduction of a descriptor system to the observability
          staircase form
-
+
 TG01JD   Irreducible descriptor representation
-
+
 TG01JY   Irreducible descriptor representation (blocked version)
-
+
 TG01LD   Finite-infinite decomposition of a descriptor system
-
+
 TG01MD   Finite-infinite generalized real Schur form decomposition of a descriptor system
-
+
 TG01ND   Finite-infinite block-diagonal decomposition of a descriptor system
-
+
 TG01OD   Reducing a SISO descriptor system with E nonsingular so that
          the obtained feedthrough term has a sufficiently large magnitude
-
+
 TG01OZ   Reducing a complex SISO descriptor system with E nonsingular so that
          the obtained feedthrough term has a sufficiently large magnitude
-
+
 TG01PD   Bi-domain spectral splitting of a subpencil of a descriptor system
-
+
 TG01QD   Three-domain spectral splitting of a subpencil of a descriptor system
-
-TG01WD   Reduction of the descriptor dynamics matrix pair to generalized 
+
+TG01WD   Reduction of the descriptor dynamics matrix pair to generalized
          real Schur form
 

U - Utility Routines

UD - Numerical Data Handling

-
+
 UD01BD   Reading a matrix polynomial
-
+
 UD01CD   Reading a sparse matrix polynomial
-
+
 UD01DD   Reading a sparse real matrix
-
+
 UD01MD   Printing a real matrix
-
+
 UD01MZ   Printing a real matrix (complex case)
-
+
 UD01ND   Printing a matrix polynomial
-
+
 UE01MD   Default machine-specific parameters for (skew-)Hamiltonian computation routines
 

From 04577cf6084589ec502b6218952e371540545e60 Mon Sep 17 00:00:00 2001 From: grisuthedragon Date: Tue, 4 Nov 2025 14:34:29 +0100 Subject: [PATCH 22/22] Resolve "DOI for 5.9.1" --- CITATION.cff | 4 ++-- dist/create_tar.sh | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100755 dist/create_tar.sh diff --git a/CITATION.cff b/CITATION.cff index d625f7a..0f90065 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -15,8 +15,8 @@ authors: orcid: "https://orcid.org/0000-0002-6278-2939" title: "SLICOT - Subroutine Library In COntrol Theory" version: 5.9.1 -doi: TBA -date-released: TBA +doi: 10.5281/zenodo.17523371 +date-released: 2025-11-04 url: "https://github.com/SLICOT/SLICOT-Reference" license: BSD-3-Clause keywords: diff --git a/dist/create_tar.sh b/dist/create_tar.sh new file mode 100755 index 0000000..a851f84 --- /dev/null +++ b/dist/create_tar.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh + +VERSION=$(bash ./dist/get_version.sh) +if [ $# -eq 1 ]; then + GIT=$1 +else + GIT=v${VERSION} +fi +git archive --format tar.gz --prefix slicot-${VERSION}/ -o slicot-${VERSION}.tar.gz -v $GIT