dpinit.f 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. *DECK DPINIT
  2. SUBROUTINE DPINIT (MRELAS, NVARS, COSTS, BL, BU, IND, PRIMAL,
  3. + INFO, AMAT, CSC, COSTSC, COLNRM, XLAMDA, ANORM, RHS, RHSNRM,
  4. + IBASIS, IBB, IMAT, LOPT)
  5. C***BEGIN PROLOGUE DPINIT
  6. C***SUBSIDIARY
  7. C***PURPOSE Subsidiary to DSPLP
  8. C***LIBRARY SLATEC
  9. C***TYPE DOUBLE PRECISION (SPINIT-S, DPINIT-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/,/SCOPY/DCOPY/
  18. C REVISED 810519-0900
  19. C REVISED YYMMDD-HHMM
  20. C
  21. C INITIALIZATION SUBROUTINE FOR DSPLP(*) PACKAGE.
  22. C
  23. C***SEE ALSO DSPLP
  24. C***ROUTINES CALLED DASUM, DCOPY, DPNNZR
  25. C***REVISION HISTORY (YYMMDD)
  26. C 811215 DATE WRITTEN
  27. C 890531 Changed all specific intrinsics to generic. (WRB)
  28. C 890605 Removed unreferenced labels. (WRB)
  29. C 891009 Removed unreferenced variable. (WRB)
  30. C 891214 Prologue converted to Version 4.0 format. (BAB)
  31. C 900328 Added TYPE section. (WRB)
  32. C***END PROLOGUE DPINIT
  33. DOUBLE PRECISION AIJ,AMAT(*),ANORM,BL(*),BU(*),CMAX,
  34. * COLNRM(*),COSTS(*),COSTSC,CSC(*),CSUM,ONE,PRIMAL(*),
  35. * RHS(*),RHSNRM,SCALR,TESTSC,XLAMDA,ZERO
  36. DOUBLE PRECISION DASUM
  37. INTEGER IBASIS(*),IBB(*),IMAT(*),IND(*)
  38. LOGICAL CONTIN,USRBAS,COLSCP,CSTSCP,MINPRB,LOPT(8)
  39. C
  40. C***FIRST EXECUTABLE STATEMENT DPINIT
  41. ZERO=0.D0
  42. ONE=1.D0
  43. CONTIN=LOPT(1)
  44. USRBAS=LOPT(2)
  45. COLSCP=LOPT(5)
  46. CSTSCP=LOPT(6)
  47. MINPRB=LOPT(7)
  48. C
  49. C SCALE DATA. NORMALIZE BOUNDS. FORM COLUMN CHECK SUMS.
  50. GO TO 30001
  51. C
  52. C INITIALIZE ACTIVE BASIS MATRIX.
  53. 20002 CONTINUE
  54. GO TO 30002
  55. 20003 RETURN
  56. C
  57. C PROCEDURE (SCALE DATA. NORMALIZE BOUNDS. FORM COLUMN CHECK SUMS)
  58. C
  59. C DO COLUMN SCALING IF NOT PROVIDED BY THE USER.
  60. 30001 IF (.NOT.(.NOT. COLSCP)) GO TO 20004
  61. J=1
  62. N20007=NVARS
  63. GO TO 20008
  64. 20007 J=J+1
  65. 20008 IF ((N20007-J).LT.0) GO TO 20009
  66. CMAX=ZERO
  67. I=0
  68. 20011 CALL DPNNZR(I,AIJ,IPLACE,AMAT,IMAT,J)
  69. IF (.NOT.(I.EQ.0)) GO TO 20013
  70. GO TO 20012
  71. 20013 CONTINUE
  72. CMAX=MAX(CMAX,ABS(AIJ))
  73. GO TO 20011
  74. 20012 IF (.NOT.(CMAX.EQ.ZERO)) GO TO 20016
  75. CSC(J)=ONE
  76. GO TO 20017
  77. 20016 CSC(J)=ONE/CMAX
  78. 20017 CONTINUE
  79. GO TO 20007
  80. 20009 CONTINUE
  81. C
  82. C FORM CHECK SUMS OF COLUMNS. COMPUTE MATRIX NORM OF SCALED MATRIX.
  83. 20004 ANORM = ZERO
  84. J=1
  85. N20019=NVARS
  86. GO TO 20020
  87. 20019 J=J+1
  88. 20020 IF ((N20019-J).LT.0) GO TO 20021
  89. PRIMAL(J)=ZERO
  90. CSUM = ZERO
  91. I=0
  92. 20023 CALL DPNNZR(I,AIJ,IPLACE,AMAT,IMAT,J)
  93. IF (.NOT.(I.LE.0)) GO TO 20025
  94. GO TO 20024
  95. 20025 CONTINUE
  96. PRIMAL(J)=PRIMAL(J)+AIJ
  97. CSUM = CSUM+ABS(AIJ)
  98. GO TO 20023
  99. 20024 IF (IND(J).EQ.2) CSC(J)=-CSC(J)
  100. PRIMAL(J)=PRIMAL(J)*CSC(J)
  101. COLNRM(J)=ABS(CSC(J)*CSUM)
  102. ANORM = MAX(ANORM,COLNRM(J))
  103. GO TO 20019
  104. C
  105. C IF THE USER HAS NOT PROVIDED COST VECTOR SCALING THEN SCALE IT
  106. C USING THE MAX. NORM OF THE TRANSFORMED COST VECTOR, IF NONZERO.
  107. 20021 TESTSC=ZERO
  108. J=1
  109. N20028=NVARS
  110. GO TO 20029
  111. 20028 J=J+1
  112. 20029 IF ((N20028-J).LT.0) GO TO 20030
  113. TESTSC=MAX(TESTSC,ABS(CSC(J)*COSTS(J)))
  114. GO TO 20028
  115. 20030 IF (.NOT.(.NOT.CSTSCP)) GO TO 20032
  116. IF (.NOT.(TESTSC.GT.ZERO)) GO TO 20035
  117. COSTSC=ONE/TESTSC
  118. GO TO 20036
  119. 20035 COSTSC=ONE
  120. 20036 CONTINUE
  121. CONTINUE
  122. 20032 XLAMDA=(COSTSC+COSTSC)*TESTSC
  123. IF (XLAMDA.EQ.ZERO) XLAMDA=ONE
  124. C
  125. C IF MAXIMIZATION PROBLEM, THEN CHANGE SIGN OF COSTSC AND LAMDA
  126. C =WEIGHT FOR PENALTY-FEASIBILITY METHOD.
  127. IF (.NOT.(.NOT.MINPRB)) GO TO 20038
  128. COSTSC=-COSTSC
  129. 20038 GO TO 20002
  130. C:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  131. C PROCEDURE (INITIALIZE RHS(*),IBASIS(*), AND IBB(*))
  132. C
  133. C INITIALLY SET RIGHT-HAND SIDE VECTOR TO ZERO.
  134. 30002 CALL DCOPY(MRELAS,ZERO,0,RHS,1)
  135. C
  136. C TRANSLATE RHS ACCORDING TO CLASSIFICATION OF INDEPENDENT VARIABLES
  137. J=1
  138. N20041=NVARS
  139. GO TO 20042
  140. 20041 J=J+1
  141. 20042 IF ((N20041-J).LT.0) GO TO 20043
  142. IF (.NOT.(IND(J).EQ.1)) GO TO 20045
  143. SCALR=-BL(J)
  144. GO TO 20046
  145. 20045 IF (.NOT.(IND(J).EQ.2)) GO TO 10001
  146. SCALR=-BU(J)
  147. GO TO 20046
  148. 10001 IF (.NOT.(IND(J).EQ.3)) GO TO 10002
  149. SCALR=-BL(J)
  150. GO TO 20046
  151. 10002 IF (.NOT.(IND(J).EQ.4)) GO TO 10003
  152. SCALR=ZERO
  153. 10003 CONTINUE
  154. 20046 CONTINUE
  155. IF (.NOT.(SCALR.NE.ZERO)) GO TO 20048
  156. I=0
  157. 20051 CALL DPNNZR(I,AIJ,IPLACE,AMAT,IMAT,J)
  158. IF (.NOT.(I.LE.0)) GO TO 20053
  159. GO TO 20052
  160. 20053 CONTINUE
  161. RHS(I)=SCALR*AIJ+RHS(I)
  162. GO TO 20051
  163. 20052 CONTINUE
  164. 20048 CONTINUE
  165. GO TO 20041
  166. C
  167. C TRANSLATE RHS ACCORDING TO CLASSIFICATION OF DEPENDENT VARIABLES.
  168. 20043 I=NVARS+1
  169. N20056=NVARS+MRELAS
  170. GO TO 20057
  171. 20056 I=I+1
  172. 20057 IF ((N20056-I).LT.0) GO TO 20058
  173. IF (.NOT.(IND(I).EQ.1)) GO TO 20060
  174. SCALR=BL(I)
  175. GO TO 20061
  176. 20060 IF (.NOT.(IND(I).EQ.2)) GO TO 10004
  177. SCALR=BU(I)
  178. GO TO 20061
  179. 10004 IF (.NOT.(IND(I).EQ.3)) GO TO 10005
  180. SCALR=BL(I)
  181. GO TO 20061
  182. 10005 IF (.NOT.(IND(I).EQ.4)) GO TO 10006
  183. SCALR=ZERO
  184. 10006 CONTINUE
  185. 20061 CONTINUE
  186. RHS(I-NVARS)=RHS(I-NVARS)+SCALR
  187. GO TO 20056
  188. 20058 RHSNRM=DASUM(MRELAS,RHS,1)
  189. C
  190. C IF THIS IS NOT A CONTINUATION OR THE USER HAS NOT PROVIDED THE
  191. C INITIAL BASIS, THEN THE INITIAL BASIS IS COMPRISED OF THE
  192. C DEPENDENT VARIABLES.
  193. IF (.NOT.(.NOT.(CONTIN .OR. USRBAS))) GO TO 20063
  194. J=1
  195. N20066=MRELAS
  196. GO TO 20067
  197. 20066 J=J+1
  198. 20067 IF ((N20066-J).LT.0) GO TO 20068
  199. IBASIS(J)=NVARS+J
  200. GO TO 20066
  201. 20068 CONTINUE
  202. C
  203. C DEFINE THE ARRAY IBB(*)
  204. 20063 J=1
  205. N20070=NVARS+MRELAS
  206. GO TO 20071
  207. 20070 J=J+1
  208. 20071 IF ((N20070-J).LT.0) GO TO 20072
  209. IBB(J)=1
  210. GO TO 20070
  211. 20072 J=1
  212. N20074=MRELAS
  213. GO TO 20075
  214. 20074 J=J+1
  215. 20075 IF ((N20074-J).LT.0) GO TO 20076
  216. IBB(IBASIS(J))=-1
  217. GO TO 20074
  218. C
  219. C DEFINE THE REST OF IBASIS(*)
  220. 20076 IP=MRELAS
  221. J=1
  222. N20078=NVARS+MRELAS
  223. GO TO 20079
  224. 20078 J=J+1
  225. 20079 IF ((N20078-J).LT.0) GO TO 20080
  226. IF (.NOT.(IBB(J).GT.0)) GO TO 20082
  227. IP=IP+1
  228. IBASIS(IP)=J
  229. 20082 GO TO 20078
  230. 20080 GO TO 20003
  231. END