1 INTEGER FUNCTION LA_WS_GELSS( VER, M, N, NRHS ) 2! 3! -- LAPACK95 interface driver routine (version 1.0) -- 4! UNI-C, Denmark; Univ. of Tennessee, USA; NAG Ltd., UK 5! May 31, 1997 6! 7! .. USE STATEMENTS .. 8 USE F77_LAPACK, ONLY: ILAENV_F77 => LA_ILAENV 9! .. IMPLICIT STATEMENT .. 10 IMPLICIT NONE 11! .. SCALAR ARGUMENTS .. 12 CHARACTER(LEN=1), INTENT(IN) :: VER 13 INTEGER, INTENT(IN) :: M, N, NRHS 14! .. PARAMETERS .. 15 CHARACTER(LEN=5), PARAMETER :: NAME1='GELSS', NAME2='GEQRF', NAME3='ORMQR', NAME4='GEBRD', & 16 NAME5='ORMBR', NAME6='ORGBR', NAME7='GELQF', NAME8='ORMLQ' 17! .. LOCAL SCALARS .. 18 INTEGER :: MNTHR, MINWRK, MAXWRK, MM, BDSPAC 19! .. INTRINSIC FUNCTIONS .. 20 INTRINSIC MAX 21! .. EXECUTABLE STATEMENTS .. 22 MNTHR = ILAENV_F77( 6, VER//NAME1, ' ', M, N, NRHS, -1 ) 23! 24! COMPUTE WORKSPACE 25! (NOTE: COMMENTS IN THE CODE BEGINNING "Workspace:" DESCRIBE THE 26! MINIMAL AMOUNT OF WORKSPACE NEEDED AT THAT POINT IN THE CODE, 27! AS WELL AS THE PREFERRED AMOUNT FOR GOOD PERFORMANCE. 28! NB REFERS TO THE OPTIMAL BLOCK SIZE FOR THE IMMEDIATELY 29! FOLLOWING SUBROUTINE, AS RETURNED BY ILAENV.) 30! 31 MINWRK = 1 32 MAXWRK = 0 33 MM = M 34 IF( M.GE.N .AND. M.GE.MNTHR ) THEN 35! 36! PATH 1A - OVERDETERMINED, WITH MANY MORE ROWS THAN COLUMNS 37! 38 MM = N 39 MAXWRK = MAX(MAXWRK,N+N*ILAENV_F77(1,VER//NAME2,' ',M,N,-1,-1)) 40 MAXWRK = MAX( MAXWRK, N+NRHS* & 41 & ILAENV_F77( 1, VER//NAME3, 'LT', M, NRHS, N, -1 ) ) 42 END IF 43 IF( M.GE.N ) THEN 44! 45! PATH 1 - OVERDETERMINED OR EXACTLY DETERMINED 46! 47! COMPUTE WORKSPACE NEEDE FOR DBDSQR 48! 49 BDSPAC = MAX( 1, 5*N-4 ) 50 MAXWRK = MAX( MAXWRK, 3*N+( MM+N )* & 51 & ILAENV_F77( 1, VER//NAME4, ' ', MM, N, -1, -1 ) ) 52 MAXWRK = MAX( MAXWRK, 3*N+NRHS* & 53 & ILAENV_F77( 1, VER//NAME5, 'QLT', MM, NRHS, N, -1 ) ) 54 MAXWRK = MAX( MAXWRK, 3*N+( N-1 )* & 55 & ILAENV_F77( 1, VER//NAME6, 'P', N, N, N, -1 ) ) 56 MAXWRK = MAX( MAXWRK, BDSPAC ) 57 MAXWRK = MAX( MAXWRK, N*NRHS ) 58 MINWRK = MAX( 3*N+MM, 3*N+NRHS, BDSPAC ) 59 MAXWRK = MAX( MINWRK, MAXWRK ) 60 END IF 61 IF( N.GT.M ) THEN 62! 63! COMPUTE WORKSPACE NEEDE FOR DBDSQR 64! 65 BDSPAC = MAX( 1, 5*M-4 ) 66 MINWRK = MAX( 3*M+NRHS, 3*M+N, BDSPAC ) 67 IF( N.GE.MNTHR ) THEN 68! 69! PATH 2A - UNDERDETERMINED, WITH MANY MORE COLUMNS 70! THAN ROWS 71! 72 MAXWRK = M + M*ILAENV_F77( 1,VER//NAME7,' ',M,N,-1,-1 ) 73 MAXWRK = MAX( MAXWRK, M*M+4*M+2*M* & 74 & ILAENV_F77( 1, VER//NAME4, ' ', M, M, -1, -1 ) ) 75 MAXWRK = MAX( MAXWRK, M*M+4*M+NRHS* & 76 & ILAENV_F77( 1,VER//NAME5,'QLT',M,NRHS,M,-1 ) ) 77 MAXWRK = MAX( MAXWRK, M*M+4*M+( M-1 )* & 78 & ILAENV_F77( 1, VER//NAME6, 'P', M, M, M, -1 ) ) 79 MAXWRK = MAX( MAXWRK, M*M+M+BDSPAC ) 80 IF( NRHS.GT.1 ) THEN 81 MAXWRK = MAX( MAXWRK, M*M+M+M*NRHS ) 82 ELSE 83 MAXWRK = MAX( MAXWRK, M*M+2*M ) 84 END IF 85 MAXWRK = MAX( MAXWRK, M+NRHS* & 86 & ILAENV_F77( 1, VER//NAME8, 'LT', N, NRHS, M, -1 ) ) 87 ELSE 88! 89! PATH 2 - UNDERDETERMINED 90! 91 MAXWRK = 3*M+(N+M)*ILAENV_F77(1,VER//NAME4,' ',M,N,-1,-1) 92 MAXWRK = MAX( MAXWRK, 3*M+NRHS* & 93 & ILAENV_F77( 1,VER//NAME5,'QLT',M,NRHS,M,-1 ) ) 94 MAXWRK = MAX( MAXWRK, 3*M+M* & 95 & ILAENV_F77( 1, VER//NAME6, 'P', M, N, M, -1 ) ) 96 MAXWRK = MAX( MAXWRK, BDSPAC ) 97 MAXWRK = MAX( MAXWRK, N*NRHS ) 98 END IF 99 END IF 100 LA_WS_GELSS = M*M + 4*M*M + 3*N*N + NRHS*NRHS*NRHS 101! & MAX( MINWRK, MAXWRK ) 102 END FUNCTION LA_WS_GELSS 103