LOGICAL FUNCTION INITLA(CONTIN, FINAL, POSDOT, POSNU, W, IW)
USE Numeric_Kinds_Module
!
! $RCSfile: initla.f,v $ $Revision: 1.3 $
! $Date: 89/07/28 09:57:16 $
! $State: Stable $
!
!
! **********************************************************************
!
! PURPOSE -
!
! INITIALIZES PARAMETERS USED IN CONNECTION WITH THE LANCZOS
! STEPS. NORMALIZES THE STATRINGVECTOR (UNLESS THE M-SCALAR
! PRODUCT IS TOO SMALL).
!
!
! OUTPUT PARAMETERS -
!
! CONTIN = USED TO DECIDE IF AN OTHER LANCZOS STEP SHOULD BE
! TAKEN.
! FINAL = TRUE IF THE LAST STEP HAS BEEN TAKEN.
! POSDOT = TRUE IF THE M-SCALAR PRODUCT IS GREATER THAN
! TOLPDM.
! POSNU = TRUE IF IT EXISTS A NU-EIGENVALUE GREATER THAN
! TOLZNU.
!
! PLEASE SEE THE PROGRAMMERS GUIDE FOR INFORMATION ABOUT
! PARAMETERS NOT EXPLAINED ABOVE, AND FOR MORE DETAILS ABOUT
! THE FUNCTION OF THE ROUTINE.
!
!
! **********************************************************************
!
REAL(Kind=WP_Kind) CK, CL, COEFF, DOT, FACTOR, SRELPR, RDUMP, SECOND, ST, TIME, TIMTQL, TLDL, TOLBPI, TOLLDL, TOLPDM, TOLS1I, &
TOLZBT, TOLZNU, TOPINV, TOPM, TPRED, TSAVE, TVECOP, W(1), WRR
INTEGER ACTION, CNEG, CONV, COUNT, CPOS, DUMMY, ERRNO, FREE, IDUMP, ITERNO, IW(1), MV, MXNEW, MXOLD, MXRST, N, &
NBADMU, NIL, NMXRST, NOACTN, NOR, OLCPOS, P, PFCONV, REST, RNEW, ROLD, SAVE, SAVFRE, SCPX, SOLCPX, TCONV, V, &
WRI, X
LOGICAL CONTIN, F, FINAL, MEQI, MULVEC, OPM, POSDOT, POSNU, SCPROD, T, UPDATE, USEMX, WRL, ZERBET
COMMON /STLMAC/ NOACTN, FREE, SAVE, SAVFRE
COMMON /STLMCT/ N, ITERNO, TCONV, CNEG, CPOS, OLCPOS, RNEW, ROLD, REST, P, USEMX, ZERBET
COMMON /STLMER/ RDUMP, ERRNO, IDUMP(2)
COMMON /STLMID/ NIL, MV, V, MXNEW, MXOLD, MXRST, SCPX, SOLCPX, X
COMMON /STLMMI/ MEQI
COMMON /STLMOP/ TLDL, TOPINV, TOPM, TIMTQL, TVECOP, TPRED, TSAVE, COEFF(4), CK, CL, CONV, PFCONV, UPDATE
COMMON /STLMST/ TIME(24), COUNT(24), NBADMU, NMXRST, DUMMY
COMMON /STLMTF/ T, F
COMMON /STLMTL/ SRELPR, TOLBPI, TOLS1I, FACTOR, TOLPDM, TOLZBT, TOLZNU, TOLLDL(3)
COMMON /STLMWR/ WRR(5), WRI(5), WRL(5)
!
DATA NOR / 7 /
!
ST = SECOND(DUMMY)
COUNT(NOR) = COUNT(NOR) + 1
INITLA = T
!
! ********************************************************
! COMPUTE STARTINGVECTOR(T) * M * STARTINGVECTOR AND CHECK
! IF IT IS GREAT ENOUGH.
! ********************************************************
IF(MEQI) GOTO 10
IF(.NOT. OPM(MV + 1, V + 1, W, IW)) GOTO 8888
10 IF(.NOT. SCPROD(MV + 1, V + 1, DOT, W, IW, NOACTN, 1)) GOTO 8888
!
POSDOT = DOT > TOLPDM
WRL(2) = POSDOT
RDUMP = DOT
!
IF(.NOT. POSDOT) GOTO 30
! ***********************************
! NORMALIZE V (AND MV IF IT IS USED).
! ***********************************
DOT = 1.0D0 / SQRT(DOT)
ACTION = SAVFRE
IF(MEQI) ACTION = SAVE
IF(.NOT. MULVEC(V + 1, V + 1, DOT, W, IW, ACTION, 1)) GOTO 8888
IF(MEQI) GOTO 20
IF(.NOT. MULVEC(MV + 1, MV + 1, DOT, W, IW, SAVE, 1)) GOTO 8888
!
! **************************
! MAKE SOME INITIALIZATIONS.
! **************************
20 PFCONV = 0
CONTIN = T
FINAL = F
ZERBET = F
POSNU = F
P = 0
CNEG = 0
GOTO 9999
!
30 IF(.NOT. MEQI) CALL FREEID(MV + 1)
GOTO 9999
!
8888 INITLA = F
CALL ERROR(NOR, NOR)
!
9999 TIME(NOR) = TIME(NOR) + SECOND(DUMMY) - ST
RETURN
END