dplpce.f 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. *DECK DPLPCE
  2. SUBROUTINE DPLPCE (MRELAS, NVARS, LMX, LBM, ITLP, ITBRC, IBASIS,
  3. + IMAT, IBRC, IPR, IWR, IND, IBB, ERDNRM, EPS, TUNE, GG, AMAT,
  4. + BASMAT, CSC, WR, WW, PRIMAL, ERD, ERP, SINGLR, REDBAS)
  5. C***BEGIN PROLOGUE DPLPCE
  6. C***SUBSIDIARY
  7. C***PURPOSE Subsidiary to DSPLP
  8. C***LIBRARY SLATEC
  9. C***TYPE DOUBLE PRECISION (SPLPCE-S, DPLPCE-D)
  10. C***AUTHOR (UNKNOWN)
  11. C***DESCRIPTION
  12. C
  13. C THE EDITING REQUIRED TO CONVERT THIS SUBROUTINE FROM SINGLE TO
  14. C DOUBLE PRECISION INVOLVES THE FOLLOWING CHARACTER STRING CHANGES.
  15. C
  16. C USE AN EDITING COMMAND (CHANGE) /STRING-1/(TO)STRING-2/.
  17. C /REAL (12 BLANKS)/DOUBLE PRECISION/,
  18. C /SASUM/DASUM/,/DCOPY/,DCOPY/.
  19. C
  20. C REVISED 811219-1630
  21. C REVISED YYMMDD-HHMM
  22. C
  23. C THIS SUBPROGRAM IS FROM THE DSPLP( ) PACKAGE. IT CALCULATES
  24. C THE APPROXIMATE ERROR IN THE PRIMAL AND DUAL SYSTEMS. IT IS
  25. C THE MAIN PART OF THE PROCEDURE (COMPUTE ERROR IN DUAL AND PRIMAL
  26. C SYSTEMS).
  27. C
  28. C***SEE ALSO DSPLP
  29. C***ROUTINES CALLED DASUM, DCOPY, DPRWPG, IDLOC, LA05BD
  30. C***REVISION HISTORY (YYMMDD)
  31. C 811215 DATE WRITTEN
  32. C 890531 Changed all specific intrinsics to generic. (WRB)
  33. C 890605 Removed unreferenced labels. (WRB)
  34. C 890606 Changed references from IPLOC to IDLOC. (WRB)
  35. C 891214 Prologue converted to Version 4.0 format. (BAB)
  36. C 900328 Added TYPE section. (WRB)
  37. C***END PROLOGUE DPLPCE
  38. INTEGER IBASIS(*),IMAT(*),IBRC(LBM,2),IPR(*),IWR(*),IND(*),IBB(*)
  39. DOUBLE PRECISION AMAT(*),BASMAT(*),CSC(*),WR(*),WW(*),PRIMAL(*),
  40. * ERD(*),ERP(*),EPS,ERDNRM,FACTOR,GG,ONE,ZERO,TEN,TUNE
  41. DOUBLE PRECISION DASUM
  42. LOGICAL SINGLR,REDBAS,TRANS,PAGEPL
  43. C***FIRST EXECUTABLE STATEMENT DPLPCE
  44. ZERO=0.D0
  45. ONE=1.D0
  46. TEN=10.D0
  47. LPG=LMX-(NVARS+4)
  48. SINGLR=.FALSE.
  49. FACTOR=0.01
  50. C
  51. C COPY COLSUMS IN WW(*), AND SOLVE TRANSPOSED SYSTEM.
  52. I=1
  53. N20002=MRELAS
  54. GO TO 20003
  55. 20002 I=I+1
  56. 20003 IF ((N20002-I).LT.0) GO TO 20004
  57. J=IBASIS(I)
  58. IF (.NOT.(J.LE.NVARS)) GO TO 20006
  59. WW(I) = PRIMAL(J)
  60. GO TO 20007
  61. 20006 IF (.NOT.(IND(J).EQ.2)) GO TO 20009
  62. WW(I)=ONE
  63. GO TO 20010
  64. 20009 WW(I)=-ONE
  65. 20010 CONTINUE
  66. 20007 CONTINUE
  67. GO TO 20002
  68. C
  69. C PERTURB RIGHT-SIDE IN UNITS OF LAST BITS TO BETTER REFLECT
  70. C ERRORS IN THE CHECK SUM SOLNS.
  71. 20004 I=1
  72. N20012=MRELAS
  73. GO TO 20013
  74. 20012 I=I+1
  75. 20013 IF ((N20012-I).LT.0) GO TO 20014
  76. WW(I)=WW(I)+TEN*EPS*WW(I)
  77. GO TO 20012
  78. 20014 TRANS = .TRUE.
  79. CALL LA05BD(BASMAT,IBRC,LBM,MRELAS,IPR,IWR,WR,GG,WW,TRANS)
  80. I=1
  81. N20016=MRELAS
  82. GO TO 20017
  83. 20016 I=I+1
  84. 20017 IF ((N20016-I).LT.0) GO TO 20018
  85. ERD(I)=MAX(ABS(WW(I)-ONE),EPS)*TUNE
  86. C
  87. C SYSTEM BECOMES SINGULAR WHEN ACCURACY OF SOLUTION IS .GT. FACTOR.
  88. C THIS VALUE (FACTOR) MIGHT NEED TO BE CHANGED.
  89. SINGLR=SINGLR.OR.(ERD(I).GE.FACTOR)
  90. GO TO 20016
  91. 20018 ERDNRM=DASUM(MRELAS,ERD,1)
  92. C
  93. C RECALCULATE ROW CHECK SUMS EVERY ITBRC ITERATIONS OR WHEN
  94. C A REDECOMPOSITION HAS OCCURRED.
  95. IF (.NOT.(MOD(ITLP,ITBRC).EQ.0 .OR. REDBAS)) GO TO 20020
  96. C
  97. C COMPUTE ROW SUMS, STORE IN WW(*), SOLVE PRIMAL SYSTEM.
  98. WW(1)=ZERO
  99. CALL DCOPY(MRELAS,WW,0,WW,1)
  100. PAGEPL=.TRUE.
  101. J=1
  102. N20023=NVARS
  103. GO TO 20024
  104. 20023 J=J+1
  105. 20024 IF ((N20023-J).LT.0) GO TO 20025
  106. IF (.NOT.(IBB(J).GE.ZERO)) GO TO 20027
  107. C
  108. C THE VARIABLE IS NON-BASIC.
  109. PAGEPL=.TRUE.
  110. GO TO 20023
  111. 20027 IF (.NOT.(J.EQ.1)) GO TO 20030
  112. ILOW=NVARS+5
  113. GO TO 20031
  114. 20030 ILOW=IMAT(J+3)+1
  115. 20031 IF (.NOT.(PAGEPL)) GO TO 20033
  116. IL1=IDLOC(ILOW,AMAT,IMAT)
  117. IF (.NOT.(IL1.GE.LMX-1)) GO TO 20036
  118. ILOW=ILOW+2
  119. IL1=IDLOC(ILOW,AMAT,IMAT)
  120. 20036 CONTINUE
  121. IPAGE=ABS(IMAT(LMX-1))
  122. GO TO 20034
  123. 20033 IL1=IHI+1
  124. 20034 IHI=IMAT(J+4)-(ILOW-IL1)
  125. 20039 IU1=MIN(LMX-2,IHI)
  126. IF (.NOT.(IL1.GT.IU1)) GO TO 20041
  127. GO TO 20040
  128. 20041 CONTINUE
  129. DO 20 I=IL1,IU1
  130. WW(IMAT(I))=WW(IMAT(I))+AMAT(I)*CSC(J)
  131. 20 CONTINUE
  132. IF (.NOT.(IHI.LE.LMX-2)) GO TO 20044
  133. GO TO 20040
  134. 20044 CONTINUE
  135. IPAGE=IPAGE+1
  136. KEY=1
  137. CALL DPRWPG(KEY,IPAGE,LPG,AMAT,IMAT)
  138. IL1=NVARS+5
  139. IHI=IHI-LPG
  140. GO TO 20039
  141. 20040 PAGEPL=IHI.EQ.(LMX-2)
  142. GO TO 20023
  143. 20025 L=1
  144. N20047=MRELAS
  145. GO TO 20048
  146. 20047 L=L+1
  147. 20048 IF ((N20047-L).LT.0) GO TO 20049
  148. J=IBASIS(L)
  149. IF (.NOT.(J.GT.NVARS)) GO TO 20051
  150. I=J-NVARS
  151. IF (.NOT.(IND(J).EQ.2)) GO TO 20054
  152. WW(I)=WW(I)+ONE
  153. GO TO 20055
  154. 20054 WW(I)=WW(I)-ONE
  155. 20055 CONTINUE
  156. CONTINUE
  157. 20051 CONTINUE
  158. GO TO 20047
  159. C
  160. C PERTURB RIGHT-SIDE IN UNITS OF LAST BIT POSITIONS.
  161. 20049 I=1
  162. N20057=MRELAS
  163. GO TO 20058
  164. 20057 I=I+1
  165. 20058 IF ((N20057-I).LT.0) GO TO 20059
  166. WW(I)=WW(I)+TEN*EPS*WW(I)
  167. GO TO 20057
  168. 20059 TRANS = .FALSE.
  169. CALL LA05BD(BASMAT,IBRC,LBM,MRELAS,IPR,IWR,WR,GG,WW,TRANS)
  170. I=1
  171. N20061=MRELAS
  172. GO TO 20062
  173. 20061 I=I+1
  174. 20062 IF ((N20061-I).LT.0) GO TO 20063
  175. ERP(I)=MAX(ABS(WW(I)-ONE),EPS)*TUNE
  176. C
  177. C SYSTEM BECOMES SINGULAR WHEN ACCURACY OF SOLUTION IS .GT. FACTOR.
  178. C THIS VALUE (FACTOR) MIGHT NEED TO BE CHANGED.
  179. SINGLR=SINGLR.OR.(ERP(I).GE.FACTOR)
  180. GO TO 20061
  181. 20063 CONTINUE
  182. C
  183. 20020 RETURN
  184. END