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