Trailing-Edge
-
PDP-10 Archives
-
decuslib20-05
-
decus/20-0137/rvslpr/sg2rvs.for
There are 2 other files named sg2rvs.for in the archive. Click here to see a list.
C WESTERN MICHIGAN UNIVERSITY
C SG2RVS.FOR (FILENAME ON LIBRARY DECTAPE)
C CALLED BY SUBR. MAIN2 IN RVSLPR.FOR
C ABOVE COMMENTS AND RIGHT ADJUSTED COMMENTS PUT IN BY WG
C COMMON /IOB/, /IOD/, AND /NONDVN/ SHARED BY MAIN PROG.,
C MAIN1, MAIN2, AND SEGMT1.
C SENAN IS SPACE RESERVED BY DYN. ALLOC. OTHER ARGS. ARE INPUT.
C ISWST RETURNED BY SUBR. SEGMT2 THRU COMMON /NONDYN/
C
SUBROUTINE SEGMT2(BINIT,ISLACK,AMAT,IBASIS,SHADPR,WSHAD,COBJ,
1ITEST,CWOBJ,NART,RELCOS,BCONST,PRINV,JPRINV,
2PIVCOL,BSTAR,IMIN,NBASIS,NONBA,DCOS,ORIGBA,SENAN)
COMMON/IOD/NDEVO,DEVNAM,IDVO,IFLNMO,IPJ,IPG,IBNK,
1NDEVI,IDVI,IFLNMI
COMMON/IOB/LEFBK,IRTBK,IART,MAXPAG,IPAGE,IPAGCT,IDLG
1,IRSP,ICODE,JDUMMY
COMMON/NONDYN/NR,NC,NR2,NCFIN,JTYPE,TABLO,ICOND,ISWST
1,FIRST1,FIRST2,ITERRI,FLAG1,FLAG2,LSTOP,FLAG,
2TOL1,TOL2,TOL3,TOL4,TOL5,TOL6,TOL7,TOL8,IPHASE,
3TOL9,TOL10,TOL11,GREAT,NEQUAL,ITERR
DOUBLE PRECISION NBASIS,TEMP1,TEMP2,TEMP3
DIMENSION AMAT(1),BINIT(1),IBASIS(1),SHADPR(1),WSHAD(1),
1COBJ(1),ITEST(1),ISLACK(1),CWOBJ(1),NART(1),RELCOS(1)
2,BCONST(1),PRINV(1),JPRINV(1),PIVCOL(1),BSTAR(1),
3IMIN(1),NBASIS(1),NONBA(1),DCOS(1),ORIGBA(1),SENAN(1)
INTEGER POSTOP(13)
C---------------POST SOLUTION OPTIONS
DATA POSTOP/'RELCO','INVER','BASEN','NBSEN','BVSEN','HELP',
1'TABLE','TABLO','START','END',
2'INEQ','OBJ','BVALU'/
NCOL=5
10 WRITE(IDLG,6)
6 FORMAT(1X,'ENTER POST SOLUTION OPTION(S).'/)
14 WRITE(IDLG,43)
43 FORMAT(/' *',$)
4 READ(NDEVI,8)JTYPE
KKK=0
8 FORMAT(A5)
DO 28 I=1,13
IF(POSTOP(I).EQ.JTYPE)
1GO TO(13,35,32,33,34,37,103,103,104,105,44,45,46),I
28 CONTINUE
IF(ICODE.EQ.-1)CALL EXIT
WRITE(IDLG,9)JTYPE
9 FORMAT(1X,A5,3X,'IS NOT VALID. TRY AGAIN.'/)
GO TO 14
C---------------RELCO OPTION
13 WRITE(NDEVO,2510)
2510 FORMAT(1X,'RELATIVE COST COEFFS'/)
NFIRST=1
NLAST=NCOL
NCF=NCFIN
IF(NLAST.GT.NCF)NLAST=NCF
2525 WRITE(NDEVO,2560)(NBASIS(J),J=NFIRST,NLAST)
2560 FORMAT(1H0,10(3X,A10))
WRITE(NDEVO,2570)(RELCOS(J),J=NFIRST,NLAST)
IF(NLAST.GE.NCF)GO TO 14
NFIRST=NFIRST+NCOL
NLAST=NLAST+NCOL
IF(NLAST.GT.NCF)NLAST=NCF
GO TO 2525
2570 FORMAT(1X,10(3X,E10.3))
WRITE(NDEVO,1000)
1000 FORMAT(1X,'INVERSE',///)
C---------------INVER OPTION
35 NUMIN=1
NUMEND =NCOL
IF(NUMEND.GT.NR)NUMEND=NR
5013 WRITE(NDEVO,5014)(J,J=NUMIN,NUMEND)
5014 FORMAT(/,7X,I4,9(9X,I4))
DO 5015 I=1,NR
IJ=(I-1)*NR
WRITE(NDEVO,5016)(PRINV(IJ+J),J=NUMIN,NUMEND)
5015 CONTINUE
5016 FORMAT(1X,10(3X,E10.3))
NUMIN=NUMIN+NCOL
NUMEND=NUMEND+NCOL
IF(NUMIN.GT.NR)GO TO 14
IF(NUMEND.GT.NR)NUMEND=NR
GO TO 5013
C---------------BASEN OPTION
32 IF(KKK.EQ.1)GO TO 5034
LL=1
GO TO 5033
C---------------NBSEN OPTION
33 IF(KKK.EQ.1)GO TO 5035
LL=2
5033 K=1
DO 5022 I=1,NCFIN
IF(ITEST(I).EQ.0.OR.ABS(DCOS(I)).GT.TOL1)GO TO 5022
NONBA(K)=I
K=K+1
5022 CONTINUE
IF((K-1).EQ.0)GO TO 5085
KLIM=K-1
GO TO 5086
5085 WRITE(NDEVO,5087)
5087 FORMAT(1X,'ALL NONBASIC VARIABLES ARE ARTIFICIAL.',
1' THIS SENSITIVITY ANALYSIS OMITTED.'/)
GO TO 14
5086 DO 5020 K=1,KLIM
KK=NONBA(K)
DO 5020 I=1,NR
TEMP=0
IJ=(I-1)*NR
C---------------MULTIPLY INVERSE BY COLS. OF ORIG. TABLEAUX
C--------------- WHICH ARE NOT IN BASIS AND WHOSE PHASE 1 REL.COST
C--------------- COEFF. ARE LE TOL1. SEE ST. 5033+2. ALSO SEE
C--------------- BOOK BY DANTZIG "LIN. PROG. & EXTENSIONS"
DO 5021 J=1,NR
IJ=IJ+1
JKK=(J-1)*NCFIN+KK
5021 TEMP=PRINV(IJ)*AMAT(JKK)+TEMP
IK=(I-1)*KLIM+K
5020 SENAN(IK)=TEMP
KKK=1
GO TO(5034,5035),LL
C---------------COME FROM ST. 32
5034 WRITE(NDEVO,5030)
5030 FORMAT(1X,'SENSITIVITY ANAL. TABLE FOR BASIS',
1' (SOLUTION) VARIABLES'//)
WRITE(NDEVO,5044)
5044 FORMAT(1X,62(1H-)/11X,1HI,10X,1HI,
214X,1HI,10X,1HI/' VAR. NAM. ', 1HI,'L.L. VAR. ',1HI,
3' LOW LIMIT ',
41HI,'TOP L. VAR',1HI,'TOP LIMIT'/11X,1HI,10X,1HI,14X,1HI,10X,
51HI,/1X,62(1H-)/11X,1HI,10X,1HI,14X,1HI,10X,1HI)
JJ=1
DO 5028 I=1,NR
UPPER=-GREAT
UNDER=GREAT
K1=1
K2=1
IB=IBASIS(I)
IK=(I-1)*KLIM
DO 5023 K=1,KLIM
IK=IK+1
II=NONBA(K)
IF(SENAN(IK).EQ.0)GO TO 5023
RATIO=RELCOS(II)/SENAN(IK)
IF(SENAN(IK))5024,5023,5025
5025 IF(RATIO-UNDER)5026,5026,5023
5026 UNDER=RATIO
K1=K
GO TO 5023
5024 IF(RATIO-UPPER)5023,5027,5027
5027 UPPER=RATIO
K2=K
5023 CONTINUE
TEMP1=NBASIS(NONBA(K1))
TEMP2=NBASIS(NONBA(K2))
TEMP3=NBASIS(IB)
UNLIM=-COBJ(IB)-UNDER
UPLIM=-COBJ(IB)-UPPER
GO TO 5066
5028 CONTINUE
5029 FORMAT(1X,A10,'I',A10,'I',G14.8,'I',A10,'I',G14.8)
GO TO 14
C---------------COME FROM ST. 33.
5035 WRITE(NDEVO,5043)
5043 FORMAT(//1X,'SENSITIVITY ANAL. TABLE FOR NON',
1'BASIS VARIABLES'//)
JJ=2
WRITE(NDEVO,5044)
DO 5036 J=1,KLIM
UPLIM=GREAT
UNLIM=-GREAT
K1=1
K2=1
DO 5037 I=1,NR
IJ=(I-1)*KLIM+J
IF(SENAN(IJ))5038,5037,5038
5038 RATIO=BCONST(I)/SENAN(IJ)
IF(SENAN(IJ))5039,5037,5040
5039 IF(RATIO-UNLIM)5037,5041,5041
5041 UNLIM=RATIO
K1=I
GO TO 5037
5040 IF(RATIO-UPLIM)5042,5042,5037
5042 UPLIM=RATIO
K2=I
5037 CONTINUE
TEMP1=NBASIS(IBASIS(K1))
TEMP2=NBASIS(IBASIS(K2))
TEMP3=NBASIS(NONBA(J))
GO TO 5066
5036 CONTINUE
GO TO 14
5066 IF(UNLIM.NE.-GREAT.AND.UPLIM.NE.GREAT)GO TO 5067
IF(UNLIM.NE.-GREAT)GO TO 5068
TEMP1='NONE '
5068 IF(UPLIM.NE.GREAT)GO TO 5067
TEMP2='NONE '
5067 WRITE(NDEVO,5029)TEMP3,TEMP1,UNLIM,TEMP2,UPLIM
GO TO(5028,5036),JJ
C---------------BVSEN OPTION
34 WRITE(NDEVO,5054)
5054 FORMAT(1X,'SENSITIVITY ANAL. TABLE FOR THE',
1' B VALUES'//)
WRITE(NDEVO,5055)
5055 FORMAT(1X,62(1H-)/15X,1HI,10X,1HI,
114X,1HI,10X,1HI/5X,'B VALUES ',1HI,'L.L. VAR. ',1HI
2,' LOW LIMIT ',
31HI,'TOP L. VAR',1HI,'TOP LIMIT',/15X,1HI,10X,1HI,14X,1HI,10X,
41HI/1X,62(1H-)/15X,1HI,10X,1HI,14X,1HI,10X,1HI)
DO 5045 J=1,NR
UPPER=GREAT
UNDER=-GREAT
K1=1
K2=1
DO 5046 I=1,NR
IJ=(I-1)*NR+J
IF(PRINV(IJ))5047,5046,5047
5047 RATIO=BCONST(I)/PRINV(IJ)
IF(PRINV(IJ))5049,5046,5050
5049 IF(RATIO-UNDER)5046,5051,5051
5051 UNDER=RATIO
K1=I
GO TO 5046
5050 IF(RATIO-UPPER)5052,5052,5046
5052 UPPER=RATIO
K2=I
5046 CONTINUE
BMAX=BINIT(J)+ABS(UNDER)
BMIN=BINIT(J)-UPPER
IB1=IBASIS(K1)
IB2=IBASIS(K2)
TEMP1=NBASIS(IB2)
TEMP2=NBASIS(IB1)
IF(BMIN.NE.-GREAT.AND.BMAX.NE.GREAT)GO TO 5045
IF(BMIN.NE.-GREAT)GO TO 5070
TEMP1='NONE '
5070 IF(BMAX.NE.GREAT)GO TO 5045
TEMP2='NONE '
5045 WRITE(NDEVO,5048)BINIT(J),TEMP1,BMIN,TEMP2,BMAX
5048 FORMAT(1X,G14.8,1HI,A10,1HI,G14.8,1HI,A10,1HI,G14.8)
GO TO 14
C---------------HELP OPTION
37 WRITE(NDEVO,5059)
5059 FORMAT(1X,'AVAILABLE OPTIONS ARE RELCO,INVER,BASEN,NBSEN,'/1X,
1'BVSEN,TABLO,TABLE,INEQ,OBJ,BVALU,START,AND END.'/1X,
2'1)END MUST BE LAST OPTION. IT IS ONLY REQUIRED OPTION.'/1X,
3'IT CAUSES EXIT FROM PROG.'/1X,
4'2)RELCO PRINTS RELATIVE COST COEFFS.'/1X,
5'3)INVER PRINTS INVERSE OF BASIS MATRIX.'/1X,
6'4)BASEN PRINTS SENS. ANAL. TABLE FOR BASIS VARS.'/1X,
7'5)NBSEN PRINTS SENS. ANAL. TABLE FOR NON-BASIS VARS.'/1X,
8'6)BVSEN PRINTS SENS. ANAL. TABLE FOR CONTRAINT CONSTANTS.'/1X,
9'7)TABLO OR TABLE PRINTS CURRENT TABLEAU.'/1X,
1'WE MAY CHANGE TABLEAU VALUES AND RERUN AS BELOW:'/1X,
2'1)AFTER INEQ ENTER 3 VALUES SEPARATED BY 2 COMMAS.'/1X,
3'FIRST IS SEQ. ID. I OF INEQ. SECOND IS SEQ. ID. J OF '/1X,
4'UNKNOWN. THIRD IS NEW COEFF. A(I,J). AFTER LAST CHANGE,'/1X,
5'ENTER 0 OR CTRL Z.'/1X,
6'2)AFTER OBJ ENTER 2 VALUES SEP. BY COMMA. FIRST IS SEQ.'/1X,
7'ID. J OF COST COEFF. SECOND IS NEW COST COEFF.'/1X,
8'3)AFTER BVALU ENTER 2 VALUES SEP. BY COMMA. FIRST IS SEQ.')
WRITE(IDLG,200)
200 FORMAT(1X,'ID. I OF INEQ. SECOND IS NEW CONSTRAINT'/1X,
1'CONSTANT B(I) OF ITH INEQ.'/1X,
2'DO NOT CHANGE SIGN OF BVALU.'/1X,
3'4)START CAUSES NEW PROB. TO BE SOLVED.'/)
CALL TYPEON
GO TO 14
C---------------INEQ OPTION
44 IE=1
5100 READ(NDEVI,5078,ERR=5077,END=14)I,J,VALUE
IJ=(I-1)*NCFIN+J
IF(I.EQ.0)GO TO 14
IF(I.LT.1.OR.I.GT.NR.OR.J.LT.1.OR.J.GT.NC)GO TO 5077
IF(BINIT(I).GE.0)GO TO 5082
AMAT(IJ)=-VALUE
GO TO 5100
5082 AMAT(IJ)=VALUE
GO TO 5100
5077 WRITE(IDLG,5079)
5079 FORMAT(1X,'ERROR IN INPUT DATA;TRY AGAIN.'/)
GO TO(44,45,46),IE
C---------------OBJ OPTION OPTION
45 IE=2
5101 READ(NDEVI,5076,ERR=5077,END=14)J,VALUE
IF(J.EQ.0)GO TO 14
IF(J.GT.NC.OR.J.LT.1)GO TO 5077
IF(ICOND.NE.0)COBJ(J)=-VALUE
GO TO 5101
5076 FORMAT(I,F)
5078 FORMAT(2I,F)
C---------------BVALU OPTION
46 IE=3
47 READ(NDEVI,5076,ERR=5077,END=14)I,VALUE
IF(I.EQ.0)GO TO 14
IF(I.LT.1.OR.I.GT.NR)GO TO 5077
SGN1=SIGN(1.0,VALUE)
SGN2=SIGN(1.0,BINIT(I))
IF(SGN1.NE.SGN2)GO TO 5083
IF(BINIT(I).GE.0)GO TO 5080
BINIT(I)=-VALUE
GO TO 47
5080 BINIT(I)=VALUE
GO TO 47
5083 WRITE(IDLG,5084)
5084 FORMAT(1X,'SIGN OF NEW B VALUE MUST EQUAL SIGN OF',
1' OLD VALUE.'/)
GO TO 14
C---------------START OPTION
104 ISWST=1
RETURN
C---------------END OPTION
105 ISWST=2
RETURN
C---------------TABLE, TABLO OPTIONS
103 WRITE(IRSP,700)
700 FORMAT(1X,'INITIAL COEFF. MATRIX'/)
710 FORMAT(1X,3X,9(3X,A10)/)
720 FORMAT(1X,I3,10(3X,E10.3))
740 NFIRST=1
NLAST=NCOL
IF(NLAST.GT.NC)NLAST=NC
760 WRITE(IRSP,710)(NBASIS(J),J=NFIRST,NLAST)
DO 770 I=1,NR
IJ=(I-1)*NCFIN
WRITE(IRSP,720)I,(AMAT(IJ+J),J=NFIRST,NLAST)
770 CONTINUE
IF(NLAST.GE.NC)GO TO 780
NFIRST=NFIRST+NCOL
NLAST=NLAST+NCOL
IF(NLAST.GT.NC)NLAST=NC
GO TO 760
780 NFIRST=NC+1
NLAST=NC+NCOL
IF(NLAST.GT.NCFIN)NLAST=NCFIN
772 WRITE(IRSP,710)(NBASIS(J),J=NFIRST,NLAST)
IF(NLAST.GE.NCFIN)GO TO 771
NFIRST=NFIRST+NCOL
NLAST=NLAST+NCOL
IF(NLAST.GT.NCFIN)NLAST=NCFIN
GO TO 772
771 WRITE(IRSP,790)
790 FORMAT(1H0,3X,'INITIAL',/,5X,'BASIS',3X,'CONSTANTS'/)
DO 810 I=1,NR
II=ORIGBA(I)
WRITE(IRSP,800)NBASIS(II),BINIT(I)
810 CONTINUE
800 FORMAT(5X,A10,' = ',E10.3)
WRITE(IRSP,820)
820 FORMAT(1H0,'COEFFS. OF OBJECTIVE FUNCTION,Z')
NFIRST=1
NLAST=NCOL
830 IF(NLAST.GT.NCFIN)NLAST=NCFIN
840 WRITE(IRSP,850)(NBASIS(J),J=NFIRST,NLAST)
850 FORMAT(1H0,3X,9(3X,A10)/)
WRITE(IRSP,860)(COBJ(J),J=NFIRST,NLAST)
860 FORMAT(4X,10(3X,E10.3))
IF(NLAST.GE.NCFIN)GO TO 14
NFIRST=NFIRST+NCOL
NLAST=NLAST+NCOL
IF(NLAST.GT.NCFIN)NLAST=NCFIN
GO TO 840
END