wnlt1.f 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. *DECK WNLT1
  2. SUBROUTINE WNLT1 (I, LEND, MEND, IR, MDW, RECALC, IMAX, HBAR, H,
  3. + SCALE, W)
  4. C***BEGIN PROLOGUE WNLT1
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to WNLIT
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE PRECISION (WNLT1-S, DWNLT1-D)
  9. C***AUTHOR Hanson, R. J., (SNLA)
  10. C Haskell, K. H., (SNLA)
  11. C***DESCRIPTION
  12. C
  13. C To update the column Sum Of Squares and find the pivot column.
  14. C The column Sum of Squares Vector will be updated at each step.
  15. C When numerically necessary, these values will be recomputed.
  16. C
  17. C***SEE ALSO WNLIT
  18. C***ROUTINES CALLED ISAMAX
  19. C***REVISION HISTORY (YYMMDD)
  20. C 790701 DATE WRITTEN
  21. C 890620 Code extracted from WNLIT and made a subroutine. (RWC))
  22. C***END PROLOGUE WNLT1
  23. INTEGER I, IMAX, IR, LEND, MDW, MEND
  24. REAL H(*), HBAR, SCALE(*), W(MDW,*)
  25. LOGICAL RECALC
  26. C
  27. EXTERNAL ISAMAX
  28. INTEGER ISAMAX
  29. C
  30. INTEGER J, K
  31. C
  32. C***FIRST EXECUTABLE STATEMENT WNLT1
  33. IF (IR.NE.1 .AND. (.NOT.RECALC)) THEN
  34. C
  35. C Update column SS=sum of squares.
  36. C
  37. DO 10 J=I,LEND
  38. H(J) = H(J) - SCALE(IR-1)*W(IR-1,J)**2
  39. 10 CONTINUE
  40. C
  41. C Test for numerical accuracy.
  42. C
  43. IMAX = ISAMAX(LEND-I+1, H(I), 1) + I - 1
  44. RECALC = (HBAR+1.E-3*H(IMAX)) .EQ. HBAR
  45. ENDIF
  46. C
  47. C If required, recalculate column SS, using rows IR through MEND.
  48. C
  49. IF (RECALC) THEN
  50. DO 30 J=I,LEND
  51. H(J) = 0.E0
  52. DO 20 K=IR,MEND
  53. H(J) = H(J) + SCALE(K)*W(K,J)**2
  54. 20 CONTINUE
  55. 30 CONTINUE
  56. C
  57. C Find column with largest SS.
  58. C
  59. IMAX = ISAMAX(LEND-I+1, H(I), 1) + I - 1
  60. HBAR = H(IMAX)
  61. ENDIF
  62. RETURN
  63. END