spincw.f 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. *DECK SPINCW
  2. SUBROUTINE SPINCW (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 SPINCW
  7. C***SUBSIDIARY
  8. C***PURPOSE Subsidiary to SPLP
  9. C***LIBRARY SLATEC
  10. C***TYPE SINGLE 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 SPLP( ) PACKAGE.
  21. C IT IMPLEMENTS THE PROCEDURE (INITIALIZE REDUCED COSTS AND
  22. C STEEPEST EDGE WEIGHTS).
  23. C
  24. C***SEE ALSO SPLP
  25. C***ROUTINES CALLED IPLOC, LA05BS, PRWPGE, SCOPY, SDOT
  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 891214 Prologue converted to Version 4.0 format. (BAB)
  31. C 900328 Added TYPE section. (WRB)
  32. C***END PROLOGUE SPINCW
  33. INTEGER IBASIS(*),IMAT(*),IBRC(LBM,2),IPR(*),IWR(*),IND(*),IBB(*)
  34. REAL AMAT(*),BASMAT(*),CSC(*),WR(*),WW(*),RZ(*),RG(*),
  35. * COSTS(*),COLNRM(*),DUALS(*),COSTSC,ERDNRM,DULNRM,GG,ONE,RZJ,
  36. * SCALR,ZERO,RCOST
  37. LOGICAL STPEDG,PAGEPL,TRANS
  38. C***FIRST EXECUTABLE STATEMENT SPINCW
  39. LPG=LMX-(NVARS+4)
  40. ZERO=0.
  41. ONE=1.
  42. C
  43. C FORM REDUCED COSTS, RZ(*), AND STEEPEST EDGE WEIGHTS, RG(*).
  44. PAGEPL=.TRUE.
  45. RZ(1)=ZERO
  46. CALL SCOPY(NVARS+MRELAS,RZ,0,RZ,1)
  47. RG(1)=ONE
  48. CALL SCOPY(NVARS+MRELAS,RG,0,RG,1)
  49. NNEGRC=0
  50. J=JSTRT
  51. 20002 IF (.NOT.(IBB(J).LE.0)) GO TO 20004
  52. PAGEPL=.TRUE.
  53. GO TO 20005
  54. C
  55. C THESE ARE NONBASIC INDEPENDENT VARIABLES. THE COLS. ARE IN SPARSE
  56. C MATRIX FORMAT.
  57. 20004 IF (.NOT.(J.LE.NVARS)) GO TO 20007
  58. RZJ=COSTSC*COSTS(J)
  59. WW(1)=ZERO
  60. CALL SCOPY(MRELAS,WW,0,WW,1)
  61. IF (.NOT.(J.EQ.1)) GO TO 20010
  62. ILOW=NVARS+5
  63. GO TO 20011
  64. 20010 ILOW=IMAT(J+3)+1
  65. 20011 CONTINUE
  66. IF (.NOT.(PAGEPL)) GO TO 20013
  67. IL1=IPLOC(ILOW,AMAT,IMAT)
  68. IF (.NOT.(IL1.GE.LMX-1)) GO TO 20016
  69. ILOW=ILOW+2
  70. IL1=IPLOC(ILOW,AMAT,IMAT)
  71. 20016 CONTINUE
  72. IPAGE=ABS(IMAT(LMX-1))
  73. GO TO 20014
  74. 20013 IL1=IHI+1
  75. 20014 CONTINUE
  76. IHI=IMAT(J+4)-(ILOW-IL1)
  77. 20019 IU1=MIN(LMX-2,IHI)
  78. IF (.NOT.(IL1.GT.IU1)) GO TO 20021
  79. GO TO 20020
  80. 20021 CONTINUE
  81. DO 60 I=IL1,IU1
  82. RZJ=RZJ-AMAT(I)*DUALS(IMAT(I))
  83. WW(IMAT(I))=AMAT(I)*CSC(J)
  84. 60 CONTINUE
  85. IF (.NOT.(IHI.LE.LMX-2)) GO TO 20024
  86. GO TO 20020
  87. 20024 CONTINUE
  88. IPAGE=IPAGE+1
  89. KEY=1
  90. CALL PRWPGE(KEY,IPAGE,LPG,AMAT,IMAT)
  91. IL1=NVARS+5
  92. IHI=IHI-LPG
  93. GO TO 20019
  94. 20020 PAGEPL=IHI.EQ.(LMX-2)
  95. RZ(J)=RZJ*CSC(J)
  96. IF (.NOT.(STPEDG)) GO TO 20027
  97. TRANS=.FALSE.
  98. CALL LA05BS(BASMAT,IBRC,LBM,MRELAS,IPR,IWR,WR,GG,WW,TRANS)
  99. RG(J)=SDOT(MRELAS,WW,1,WW,1)+ONE
  100. 20027 CONTINUE
  101. C
  102. C THESE ARE NONBASIC DEPENDENT VARIABLES. THE COLS. ARE IMPLICITLY
  103. C DEFINED.
  104. GO TO 20008
  105. 20007 PAGEPL=.TRUE.
  106. WW(1)=ZERO
  107. CALL SCOPY(MRELAS,WW,0,WW,1)
  108. SCALR=-ONE
  109. IF (IND(J).EQ.2) SCALR=ONE
  110. I=J-NVARS
  111. RZ(J)=-SCALR*DUALS(I)
  112. WW(I)=SCALR
  113. IF (.NOT.(STPEDG)) GO TO 20030
  114. TRANS=.FALSE.
  115. CALL LA05BS(BASMAT,IBRC,LBM,MRELAS,IPR,IWR,WR,GG,WW,TRANS)
  116. RG(J)=SDOT(MRELAS,WW,1,WW,1)+ONE
  117. 20030 CONTINUE
  118. CONTINUE
  119. 20008 CONTINUE
  120. C
  121. 20005 RCOST=RZ(J)
  122. IF (MOD(IBB(J),2).EQ.0) RCOST=-RCOST
  123. IF (IND(J).EQ.4) RCOST=-ABS(RCOST)
  124. CNORM=ONE
  125. IF (J.LE.NVARS) CNORM=COLNRM(J)
  126. IF (RCOST+ERDNRM*DULNRM*CNORM.LT.ZERO) NNEGRC=NNEGRC+1
  127. J=MOD(J,MRELAS+NVARS)+1
  128. IF (.NOT.(NNEGRC.GE.NPP .OR. J.EQ.JSTRT)) GO TO 20033
  129. GO TO 20003
  130. 20033 GO TO 20002
  131. 20003 JSTRT=J
  132. RETURN
  133. END