ohtror.f 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. *DECK OHTROR
  2. SUBROUTINE OHTROR (Q, N, NRDA, DIAG, IRANK, DIV, TD)
  3. C***BEGIN PROLOGUE OHTROR
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to BVSUP
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (OHTROR-S)
  8. C***AUTHOR Watts, H. A., (SNLA)
  9. C***DESCRIPTION
  10. C
  11. C For a rank deficient problem, additional orthogonal
  12. C HOUSEHOLDER transformations are applied to the right side
  13. C of Q to further reduce the triangular form.
  14. C Thus, after application of the routines ORTHOL and OHTROR
  15. C to the original matrix, the result is a nonsingular
  16. C triangular matrix while the remainder of the matrix
  17. C has been zeroed out.
  18. C
  19. C***SEE ALSO BVSUP
  20. C***ROUTINES CALLED SDOT
  21. C***REVISION HISTORY (YYMMDD)
  22. C 750601 DATE WRITTEN
  23. C 890831 Modified array declarations. (WRB)
  24. C 891214 Prologue converted to Version 4.0 format. (BAB)
  25. C 900402 Added TYPE section. (WRB)
  26. C 910722 Updated AUTHOR section. (ALS)
  27. C***END PROLOGUE OHTROR
  28. DIMENSION Q(NRDA,*),DIAG(*),DIV(*),TD(*)
  29. C***FIRST EXECUTABLE STATEMENT OHTROR
  30. NMIR=N-IRANK
  31. IRP=IRANK+1
  32. DO 30 K=1,IRANK
  33. KIR=IRP-K
  34. DIAGK=DIAG(KIR)
  35. SIG=(DIAGK*DIAGK)+SDOT(NMIR,Q(KIR,IRP),NRDA,Q(KIR,IRP),NRDA)
  36. DD=SIGN(SQRT(SIG),-DIAGK)
  37. DIV(KIR)=DD
  38. TDV=DIAGK-DD
  39. TD(KIR)=TDV
  40. IF (K .EQ. IRANK) GO TO 30
  41. KIRM=KIR-1
  42. SQD=DD*DIAGK-SIG
  43. DO 20 J=1,KIRM
  44. QS=((TDV*Q(J,KIR))+SDOT(NMIR,Q(J,IRP),NRDA,Q(KIR,IRP),NRDA))
  45. 1 /SQD
  46. Q(J,KIR)=Q(J,KIR)+QS*TDV
  47. DO 10 L=IRP,N
  48. 10 Q(J,L)=Q(J,L)+QS*Q(KIR,L)
  49. 20 CONTINUE
  50. 30 CONTINUE
  51. RETURN
  52. END