splpdm.f 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. *DECK SPLPDM
  2. SUBROUTINE SPLPDM (MRELAS, NVARS, LMX, LBM, NREDC, INFO, IOPT,
  3. + IBASIS, IMAT, IBRC, IPR, IWR, IND, IBB, ANORM, EPS, UU, GG,
  4. + AMAT, BASMAT, CSC, WR, SINGLR, REDBAS)
  5. C***BEGIN PROLOGUE SPLPDM
  6. C***SUBSIDIARY
  7. C***PURPOSE Subsidiary to SPLP
  8. C***LIBRARY SLATEC
  9. C***TYPE SINGLE PRECISION (SPLPDM-S, DPLPDM-D)
  10. C***AUTHOR (UNKNOWN)
  11. C***DESCRIPTION
  12. C
  13. C THIS SUBPROGRAM IS FROM THE SPLP( ) PACKAGE. IT PERFORMS THE
  14. C TASK OF DEFINING THE ENTRIES OF THE BASIS MATRIX AND
  15. C DECOMPOSING IT USING THE LA05 PACKAGE.
  16. C IT IS THE MAIN PART OF THE PROCEDURE (DECOMPOSE BASIS MATRIX).
  17. C
  18. C***SEE ALSO SPLP
  19. C***ROUTINES CALLED LA05AS, PNNZRS, SASUM, XERMSG
  20. C***COMMON BLOCKS LA05DS
  21. C***REVISION HISTORY (YYMMDD)
  22. C 811215 DATE WRITTEN
  23. C 890605 Corrected references to XERRWV. (WRB)
  24. C 890605 Removed unreferenced labels. (WRB)
  25. C 891214 Prologue converted to Version 4.0 format. (BAB)
  26. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  27. C 900328 Added TYPE section. (WRB)
  28. C 900510 Convert XERRWV calls to XERMSG calls, changed do-it-yourself
  29. C DO loops to DO loops. (RWC)
  30. C***END PROLOGUE SPLPDM
  31. INTEGER IBASIS(*),IMAT(*),IBRC(LBM,2),IPR(*),IWR(*),IND(*),IBB(*)
  32. REAL AMAT(*),BASMAT(*),CSC(*),WR(*),ANORM,EPS,GG,
  33. * ONE,SMALL,UU,ZERO
  34. LOGICAL SINGLR,REDBAS
  35. CHARACTER*16 XERN3
  36. C
  37. C COMMON BLOCK USED BY LA05 () PACKAGE..
  38. COMMON /LA05DS/ SMALL,LP,LENL,LENU,NCP,LROW,LCOL
  39. C
  40. C***FIRST EXECUTABLE STATEMENT SPLPDM
  41. ZERO = 0.E0
  42. ONE = 1.E0
  43. C
  44. C DEFINE BASIS MATRIX BY COLUMNS FOR SPARSE MATRIX EQUATION SOLVER.
  45. C THE LA05AS() SUBPROGRAM REQUIRES THE NONZERO ENTRIES OF THE MATRIX
  46. C TOGETHER WITH THE ROW AND COLUMN INDICES.
  47. C
  48. NZBM = 0
  49. C
  50. C DEFINE DEPENDENT VARIABLE COLUMNS. THESE ARE
  51. C COLS. OF THE IDENTITY MATRIX AND IMPLICITLY GENERATED.
  52. C
  53. DO 20 K = 1,MRELAS
  54. J = IBASIS(K)
  55. IF (J.GT.NVARS) THEN
  56. NZBM = NZBM+1
  57. IF (IND(J).EQ.2) THEN
  58. BASMAT(NZBM) = ONE
  59. ELSE
  60. BASMAT(NZBM) = -ONE
  61. ENDIF
  62. IBRC(NZBM,1) = J-NVARS
  63. IBRC(NZBM,2) = K
  64. ELSE
  65. C
  66. C DEFINE THE INDEP. VARIABLE COLS. THIS REQUIRES RETRIEVING
  67. C THE COLS. FROM THE SPARSE MATRIX DATA STRUCTURE.
  68. C
  69. I = 0
  70. 10 CALL PNNZRS(I,AIJ,IPLACE,AMAT,IMAT,J)
  71. IF (I.GT.0) THEN
  72. NZBM = NZBM+1
  73. BASMAT(NZBM) = AIJ*CSC(J)
  74. IBRC(NZBM,1) = I
  75. IBRC(NZBM,2) = K
  76. GO TO 10
  77. ENDIF
  78. ENDIF
  79. 20 CONTINUE
  80. C
  81. SINGLR = .FALSE.
  82. C
  83. C RECOMPUTE MATRIX NORM USING CRUDE NORM = SUM OF MAGNITUDES.
  84. C
  85. ANORM = SASUM(NZBM,BASMAT,1)
  86. SMALL = EPS*ANORM
  87. C
  88. C GET AN L-U FACTORIZATION OF THE BASIS MATRIX.
  89. C
  90. NREDC = NREDC+1
  91. REDBAS = .TRUE.
  92. CALL LA05AS(BASMAT,IBRC,NZBM,LBM,MRELAS,IPR,IWR,WR,GG,UU)
  93. C
  94. C CHECK RETURN VALUE OF ERROR FLAG, GG.
  95. C
  96. IF (GG.GE.ZERO) RETURN
  97. IF (GG.EQ.(-7.)) THEN
  98. CALL XERMSG ('SLATEC', 'SPLPDM',
  99. * 'IN SPLP, SHORT ON STORAGE FOR LA05AS. ' //
  100. * 'USE PRGOPT(*) TO GIVE MORE.', 28, IOPT)
  101. INFO = -28
  102. ELSEIF (GG.EQ.(-5.)) THEN
  103. SINGLR = .TRUE.
  104. ELSE
  105. WRITE (XERN3, '(1PE15.6)') GG
  106. CALL XERMSG ('SLATEC', 'SPLPDM',
  107. * 'IN SPLP, LA05AS RETURNED ERROR FLAG = ' // XERN3,
  108. * 27, IOPT)
  109. INFO = -27
  110. ENDIF
  111. RETURN
  112. END