dpincw.f 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. *DECK DPINCW
  2. SUBROUTINE DPINCW (MRELAS, NVARS, LMX, LBM, NPP, JSTRT, IBASIS,
  3. + IMAT, IBRC, IPR, IWR, IND, IBB, COSTSC, GG, ERDNRM, DULNRM,
  4. + AMAT, BASMAT, CSC, WR, WW, RZ, RG, COSTS, COLNRM, DUALS,
  5. + STPEDG)
  6. C***BEGIN PROLOGUE DPINCW
  7. C***SUBSIDIARY
  8. C***PURPOSE Subsidiary to DSPLP
  9. C***LIBRARY SLATEC
  10. C***TYPE DOUBLE PRECISION (SPINCW-S, DPINCW-D)
  11. C***AUTHOR (UNKNOWN)
  12. C***DESCRIPTION
  13. C
  14. C THE EDITING REQUIRED TO CONVERT THIS SUBROUTINE FROM SINGLE TO
  15. C DOUBLE PRECISION INVOLVES THE FOLLOWING CHARACTER STRING CHANGES.
  16. C
  17. C USE AN EDITING COMMAND (CHANGE) /STRING-1/(TO)STRING-2/,
  18. C REAL (12 BLANKS)/DOUBLE PRECISION/,/SCOPY/DCOPY/,/SDOT/DDOT/.
  19. C
  20. C THIS SUBPROGRAM IS PART OF THE DSPLP( ) PACKAGE.
  21. C IT IMPLEMENTS THE PROCEDURE (INITIALIZE REDUCED COSTS AND
  22. C STEEPEST EDGE WEIGHTS).
  23. C
  24. C***SEE ALSO DSPLP
  25. C***ROUTINES CALLED DCOPY, DDOT, DPRWPG, IDLOC, LA05BD
  26. C***REVISION HISTORY (YYMMDD)
  27. C 811215 DATE WRITTEN
  28. C 890531 Changed all specific intrinsics to generic. (WRB)
  29. C 890605 Removed unreferenced labels. (WRB)
  30. C 890606 Changed references from IPLOC to IDLOC. (WRB)
  31. C 891214 Prologue converted to Version 4.0 format. (BAB)
  32. C 900328 Added TYPE section. (WRB)
  33. C***END PROLOGUE DPINCW
  34. INTEGER IBASIS(*),IMAT(*),IBRC(LBM,2),IPR(*),IWR(*),IND(*),IBB(*)
  35. DOUBLE PRECISION AMAT(*),BASMAT(*),CSC(*),WR(*),WW(*),RZ(*),RG(*),
  36. * COSTS(*),COLNRM(*),DUALS(*),COSTSC,ERDNRM,DULNRM,GG,ONE,RZJ,
  37. * SCALR,ZERO,RCOST,CNORM
  38. DOUBLE PRECISION DDOT
  39. LOGICAL STPEDG,PAGEPL,TRANS
  40. C***FIRST EXECUTABLE STATEMENT DPINCW
  41. LPG=LMX-(NVARS+4)
  42. ZERO=0.D0
  43. ONE=1.D0
  44. C
  45. C FORM REDUCED COSTS, RZ(*), AND STEEPEST EDGE WEIGHTS, RG(*).
  46. PAGEPL=.TRUE.
  47. RZ(1)=ZERO
  48. CALL DCOPY(NVARS+MRELAS,RZ,0,RZ,1)
  49. RG(1)=ONE
  50. CALL DCOPY(NVARS+MRELAS,RG,0,RG,1)
  51. NNEGRC=0
  52. J=JSTRT
  53. 20002 IF (.NOT.(IBB(J).LE.0)) GO TO 20004
  54. PAGEPL=.TRUE.
  55. GO TO 20005
  56. C
  57. C THESE ARE NONBASIC INDEPENDENT VARIABLES. THE COLS. ARE IN SPARSE
  58. C MATRIX FORMAT.
  59. 20004 IF (.NOT.(J.LE.NVARS)) GO TO 20007
  60. RZJ=COSTSC*COSTS(J)
  61. WW(1)=ZERO
  62. CALL DCOPY(MRELAS,WW,0,WW,1)
  63. IF (.NOT.(J.EQ.1)) GO TO 20010
  64. ILOW=NVARS+5
  65. GO TO 20011
  66. 20010 ILOW=IMAT(J+3)+1
  67. 20011 CONTINUE
  68. IF (.NOT.(PAGEPL)) GO TO 20013
  69. IL1=IDLOC(ILOW,AMAT,IMAT)
  70. IF (.NOT.(IL1.GE.LMX-1)) GO TO 20016
  71. ILOW=ILOW+2
  72. IL1=IDLOC(ILOW,AMAT,IMAT)
  73. 20016 CONTINUE
  74. IPAGE=ABS(IMAT(LMX-1))
  75. GO TO 20014
  76. 20013 IL1=IHI+1
  77. 20014 CONTINUE
  78. IHI=IMAT(J+4)-(ILOW-IL1)
  79. 20019 IU1=MIN(LMX-2,IHI)
  80. IF (.NOT.(IL1.GT.IU1)) GO TO 20021
  81. GO TO 20020
  82. 20021 CONTINUE
  83. DO 60 I=IL1,IU1
  84. RZJ=RZJ-AMAT(I)*DUALS(IMAT(I))
  85. WW(IMAT(I))=AMAT(I)*CSC(J)
  86. 60 CONTINUE
  87. IF (.NOT.(IHI.LE.LMX-2)) GO TO 20024
  88. GO TO 20020
  89. 20024 CONTINUE
  90. IPAGE=IPAGE+1
  91. KEY=1
  92. CALL DPRWPG(KEY,IPAGE,LPG,AMAT,IMAT)
  93. IL1=NVARS+5
  94. IHI=IHI-LPG
  95. GO TO 20019
  96. 20020 PAGEPL=IHI.EQ.(LMX-2)
  97. RZ(J)=RZJ*CSC(J)
  98. IF (.NOT.(STPEDG)) GO TO 20027
  99. TRANS=.FALSE.
  100. CALL LA05BD(BASMAT,IBRC,LBM,MRELAS,IPR,IWR,WR,GG,WW,TRANS)
  101. RG(J)=DDOT(MRELAS,WW,1,WW,1)+ONE
  102. 20027 CONTINUE
  103. C
  104. C THESE ARE NONBASIC DEPENDENT VARIABLES. THE COLS. ARE IMPLICITLY
  105. C DEFINED.
  106. GO TO 20008
  107. 20007 PAGEPL=.TRUE.
  108. WW(1)=ZERO
  109. CALL DCOPY(MRELAS,WW,0,WW,1)
  110. SCALR=-ONE
  111. IF (IND(J).EQ.2) SCALR=ONE
  112. I=J-NVARS
  113. RZ(J)=-SCALR*DUALS(I)
  114. WW(I)=SCALR
  115. IF (.NOT.(STPEDG)) GO TO 20030
  116. TRANS=.FALSE.
  117. CALL LA05BD(BASMAT,IBRC,LBM,MRELAS,IPR,IWR,WR,GG,WW,TRANS)
  118. RG(J)=DDOT(MRELAS,WW,1,WW,1)+ONE
  119. 20030 CONTINUE
  120. CONTINUE
  121. 20008 CONTINUE
  122. C
  123. 20005 RCOST=RZ(J)
  124. IF (MOD(IBB(J),2).EQ.0) RCOST=-RCOST
  125. IF (IND(J).EQ.4) RCOST=-ABS(RCOST)
  126. CNORM=ONE
  127. IF (J.LE.NVARS) CNORM=COLNRM(J)
  128. IF (RCOST+ERDNRM*DULNRM*CNORM.LT.ZERO) NNEGRC=NNEGRC+1
  129. J=MOD(J,MRELAS+NVARS)+1
  130. IF (.NOT.(NNEGRC.GE.NPP .OR. J.EQ.JSTRT)) GO TO 20033
  131. GO TO 20003
  132. 20033 GO TO 20002
  133. 20003 JSTRT=J
  134. RETURN
  135. END