Skip to content

Commit 7b65169

Browse files
committed
Added ilaenv2stage -> circumvents requirement of recursive compilation
Added ilaenv2stage.f to enable the extraction of 2stage machine dependent variables from the 2stage solver without having to rely on compiling the entire library with the recursive flag. Secondly, all calls to ILAENV( 17 <= 21, ...) have been fixed to use the corresponding ILAENV2STAGE routine by translating ISPEC by -16 I.e. ILAENV( 17, ...) == ILAENV2STAGE( 1, ...) Also fixed the documentation of ilaenv.f to specify the cases of ISPEC > 16. Signed-off-by: Nick Papior <nickpapior@gmail.com>
1 parent 51a9157 commit 7b65169

44 files changed

Lines changed: 463 additions & 213 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

INSTALL/make.inc.gfortran

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ CFLAGS = -O3
2020
# should not compile LAPACK with flags such as -ffpe-trap=overflow.
2121
#
2222
FORTRAN = gfortran
23-
OPTS = -O2 -frecursive
23+
OPTS = -O2
2424
DRVOPTS = $(OPTS)
25-
NOOPT = -O0 -frecursive
25+
NOOPT = -O0
2626

2727
# Define LOADER and LOADOPTS to refer to the loader and desired
2828
# load options for your machine.

INSTALL/make.inc.gfortran_debug

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ CFLAGS = -g
1919
# and handle these quantities appropriately. As a consequence, one
2020
# should not compile LAPACK with flags such as -ffpe-trap=overflow.
2121
#
22-
FORTRAN = gfortran -fimplicit-none -g -frecursive
22+
FORTRAN = gfortran -fimplicit-none -g
2323
OPTS =
2424
DRVOPTS = $(OPTS)
25-
NOOPT = -g -O0 -frecursive
25+
NOOPT = -g -O0
2626

2727
# Define LOADER and LOADOPTS to refer to the loader and desired
2828
# load options for your machine.

SRC/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#
3636
#######################################################################
3737

38-
set(ALLAUX ilaenv.f ieeeck.f lsamen.f iparmq.f iparam2stage.F
38+
set(ALLAUX ilaenv.f ilaenv2stage.f ieeeck.f lsamen.f iparmq.f iparam2stage.F
3939
ilaprec.f ilatrans.f ilauplo.f iladiag.f chla_transtype.f
4040
../INSTALL/ilaver.f ../INSTALL/lsame.f xerbla.f xerbla_array.f
4141
../INSTALL/slamch.f)

SRC/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ include ../make.inc
5656
#
5757
#######################################################################
5858

59-
ALLAUX = ilaenv.o ieeeck.o lsamen.o xerbla.o xerbla_array.o iparmq.o iparam2stage.o \
59+
ALLAUX = ilaenv.o ilaenv2stage.o ieeeck.o lsamen.o xerbla.o xerbla_array.o \
60+
iparmq.o iparam2stage.o \
6061
ilaprec.o ilatrans.o ilauplo.o iladiag.o chla_transtype.o \
6162
../INSTALL/ilaver.o ../INSTALL/lsame.o ../INSTALL/slamch.o
6263

SRC/chbev_2stage.f

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,9 @@ SUBROUTINE CHBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
242242
* ..
243243
* .. External Functions ..
244244
LOGICAL LSAME
245-
INTEGER ILAENV
245+
INTEGER ILAENV2STAGE
246246
REAL SLAMCH, CLANHB
247-
EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV
247+
EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE
248248
* ..
249249
* .. External Subroutines ..
250250
EXTERNAL SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR,
@@ -281,9 +281,12 @@ SUBROUTINE CHBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
281281
LWMIN = 1
282282
WORK( 1 ) = LWMIN
283283
ELSE
284-
IB = ILAENV( 18, 'CHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
285-
LHTRD = ILAENV( 19, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
286-
LWTRD = ILAENV( 20, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
284+
IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ,
285+
$ N, KD, -1, -1 )
286+
LHTRD = ILAENV2STAGE( 3, 'CHETRD_HB2ST', JOBZ,
287+
$ N, KD, IB, -1 )
288+
LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ,
289+
$ N, KD, IB, -1 )
287290
LWMIN = LHTRD + LWTRD
288291
WORK( 1 ) = LWMIN
289292
ENDIF

SRC/chbevd_2stage.f

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,9 @@ SUBROUTINE CHBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
296296
* ..
297297
* .. External Functions ..
298298
LOGICAL LSAME
299-
INTEGER ILAENV
299+
INTEGER ILAENV2STAGE
300300
REAL SLAMCH, CLANHB
301-
EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV
301+
EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE
302302
* ..
303303
* .. External Subroutines ..
304304
EXTERNAL SSCAL, SSTERF, XERBLA, CGEMM, CLACPY,
@@ -321,9 +321,9 @@ SUBROUTINE CHBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
321321
LRWMIN = 1
322322
LIWMIN = 1
323323
ELSE
324-
IB = ILAENV( 18, 'CHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
325-
LHTRD = ILAENV( 19, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
326-
LWTRD = ILAENV( 20, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
324+
IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
325+
LHTRD = ILAENV2STAGE( 3, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
326+
LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
327327
IF( WANTZ ) THEN
328328
LWMIN = 2*N**2
329329
LRWMIN = 1 + 5*N + 2*N**2

SRC/chbevx_2stage.f

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,9 @@ SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB,
369369
* ..
370370
* .. External Functions ..
371371
LOGICAL LSAME
372-
INTEGER ILAENV
372+
INTEGER ILAENV2STAGE
373373
REAL SLAMCH, CLANHB
374-
EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV
374+
EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE
375375
* ..
376376
* .. External Subroutines ..
377377
EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CCOPY,
@@ -429,9 +429,12 @@ SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB,
429429
LWMIN = 1
430430
WORK( 1 ) = LWMIN
431431
ELSE
432-
IB = ILAENV( 18, 'CHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
433-
LHTRD = ILAENV( 19, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
434-
LWTRD = ILAENV( 20, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
432+
IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ,
433+
$ N, KD, -1, -1 )
434+
LHTRD = ILAENV2STAGE( 3, 'CHETRD_HB2ST', JOBZ,
435+
$ N, KD, IB, -1 )
436+
LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ,
437+
$ N, KD, IB, -1 )
435438
LWMIN = LHTRD + LWTRD
436439
WORK( 1 ) = LWMIN
437440
ENDIF

SRC/cheev_2stage.f

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,9 @@ SUBROUTINE CHEEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
222222
* ..
223223
* .. External Functions ..
224224
LOGICAL LSAME
225-
INTEGER ILAENV
225+
INTEGER ILAENV2STAGE
226226
REAL SLAMCH, CLANHE
227-
EXTERNAL LSAME, ILAENV, SLAMCH, CLANHE
227+
EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE
228228
* ..
229229
* .. External Subroutines ..
230230
EXTERNAL SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR,
@@ -253,10 +253,10 @@ SUBROUTINE CHEEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
253253
END IF
254254
*
255255
IF( INFO.EQ.0 ) THEN
256-
KD = ILAENV( 17, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
257-
IB = ILAENV( 18, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
258-
LHTRD = ILAENV( 19, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
259-
LWTRD = ILAENV( 20, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
256+
KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
257+
IB = ILAENV2STAGE( 2, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
258+
LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
259+
LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
260260
LWMIN = N + LHTRD + LWTRD
261261
WORK( 1 ) = LWMIN
262262
*

SRC/cheevd_2stage.f

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,9 @@ SUBROUTINE CHEEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
291291
* ..
292292
* .. External Functions ..
293293
LOGICAL LSAME
294-
INTEGER ILAENV
294+
INTEGER ILAENV2STAGE
295295
REAL SLAMCH, CLANHE
296-
EXTERNAL LSAME, ILAENV, SLAMCH, CLANHE
296+
EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE
297297
* ..
298298
* .. External Subroutines ..
299299
EXTERNAL SSCAL, SSTERF, XERBLA, CLACPY, CLASCL,
@@ -327,10 +327,14 @@ SUBROUTINE CHEEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
327327
LRWMIN = 1
328328
LIWMIN = 1
329329
ELSE
330-
KD = ILAENV( 17, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
331-
IB = ILAENV( 18, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
332-
LHTRD = ILAENV( 19, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
333-
LWTRD = ILAENV( 20, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
330+
KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ,
331+
$ N, -1, -1, -1 )
332+
IB = ILAENV2STAGE( 2, 'CHETRD_2STAGE', JOBZ,
333+
$ N, KD, -1, -1 )
334+
LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ,
335+
$ N, KD, IB, -1 )
336+
LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ,
337+
$ N, KD, IB, -1 )
334338
IF( WANTZ ) THEN
335339
LWMIN = 2*N + N*N
336340
LRWMIN = 1 + 5*N + 2*N**2

SRC/cheevr_2stage.f

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -445,9 +445,9 @@ SUBROUTINE CHEEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
445445
* ..
446446
* .. External Functions ..
447447
LOGICAL LSAME
448-
INTEGER ILAENV
448+
INTEGER ILAENV, ILAENV2STAGE
449449
REAL SLAMCH, CLANSY
450-
EXTERNAL LSAME, ILAENV, SLAMCH, CLANSY
450+
EXTERNAL LSAME, SLAMCH, CLANSY, ILAENV, ILAENV2STAGE
451451
* ..
452452
* .. External Subroutines ..
453453
EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CSSCAL,
@@ -471,10 +471,10 @@ SUBROUTINE CHEEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
471471
LQUERY = ( ( LWORK.EQ.-1 ) .OR. ( LRWORK.EQ.-1 ) .OR.
472472
$ ( LIWORK.EQ.-1 ) )
473473
*
474-
KD = ILAENV( 17, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
475-
IB = ILAENV( 18, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
476-
LHTRD = ILAENV( 19, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
477-
LWTRD = ILAENV( 20, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
474+
KD = ILAENV2STAGE( 1, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
475+
IB = ILAENV2STAGE( 2, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
476+
LHTRD = ILAENV2STAGE( 3, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
477+
LWTRD = ILAENV2STAGE( 4, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
478478
LWMIN = N + LHTRD + LWTRD
479479
LRWMIN = MAX( 1, 24*N )
480480
LIWMIN = MAX( 1, 10*N )

0 commit comments

Comments
 (0)