dwnlt1.f 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. *DECK DWNLT1
  2. SUBROUTINE DWNLT1 (I, LEND, MEND, IR, MDW, RECALC, IMAX, HBAR, H,
  3. + SCALE, W)
  4. C***BEGIN PROLOGUE DWNLT1
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to WNLIT
  7. C***LIBRARY SLATEC
  8. C***TYPE DOUBLE 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 DWNLIT
  18. C***ROUTINES CALLED IDAMAX
  19. C***REVISION HISTORY (YYMMDD)
  20. C 790701 DATE WRITTEN
  21. C 890620 Code extracted from WNLIT and made a subroutine. (RWC))
  22. C 900604 DP version created from SP version. (RWC)
  23. C***END PROLOGUE DWNLT1
  24. INTEGER I, IMAX, IR, LEND, MDW, MEND
  25. DOUBLE PRECISION H(*), HBAR, SCALE(*), W(MDW,*)
  26. LOGICAL RECALC
  27. C
  28. EXTERNAL IDAMAX
  29. INTEGER IDAMAX
  30. C
  31. INTEGER J, K
  32. C
  33. C***FIRST EXECUTABLE STATEMENT DWNLT1
  34. IF (IR.NE.1 .AND. (.NOT.RECALC)) THEN
  35. C
  36. C Update column SS=sum of squares.
  37. C
  38. DO 10 J=I,LEND
  39. H(J) = H(J) - SCALE(IR-1)*W(IR-1,J)**2
  40. 10 CONTINUE
  41. C
  42. C Test for numerical accuracy.
  43. C
  44. IMAX = IDAMAX(LEND-I+1, H(I), 1) + I - 1
  45. RECALC = (HBAR+1.E-3*H(IMAX)) .EQ. HBAR
  46. ENDIF
  47. C
  48. C If required, recalculate column SS, using rows IR through MEND.
  49. C
  50. IF (RECALC) THEN
  51. DO 30 J=I,LEND
  52. H(J) = 0.D0
  53. DO 20 K=IR,MEND
  54. H(J) = H(J) + SCALE(K)*W(K,J)**2
  55. 20 CONTINUE
  56. 30 CONTINUE
  57. C
  58. C Find column with largest SS.
  59. C
  60. IMAX = IDAMAX(LEND-I+1, H(I), 1) + I - 1
  61. HBAR = H(IMAX)
  62. ENDIF
  63. RETURN
  64. END