CLS
DEFINT I-N
DEFSNG A-H, O-Z
DIM JN(40, 5),
NN(40), JB(20), INFLOW(40), LP(8, 20), JC(50)
DIM D(50), L!(50),
A(50, 51), QJ(20), E(50), KP!(50), V(2)
DIM Q(50),
EXPP(50), AR(50), ARL(50), VL(50), HL(50), F(50), G(50)
DEF FNAL10 (X) =
LOG(X) * .434295
DIM IROW(50),
JCOL(50), X(50)
PRINT "*****
PROGRAM FOR PIPENETWORK ANALYSES USING LINER THEORY METHOD *****"
PRINT : PRINT
PRINT "FOR
EXCUTING THIS PROGRAM DATA LINES SHOULD BE CREATED FOLLOWING DATA LISTED AT THE
END OF THIS PROGRAM"
PRINT " DATA NP, NJ,NL,MAX,NUNIT,ERS,
PRINT " DATA D(I),L!(I),E(I),....(I=2 TO
NP)"
PRINT " DATA
INFLOW(I),NNJ,JN(I,J)....,Q(II),...(I=1 TO NJ,J=1 TO NNJ)"
PRINT " DATA NNL,LP(J,I),....(I=1 TO NL,J=1 TO
NNL)"
PRINT " DATA F(I),G(I),.....(I=1 TO NP)"
PRINT
PRINT "
NP=NO.OF PIPES,NJ=NO. OF JUNCTIONS,NL=NO.OF LOOPS"
PRINT
"MAX=MAXIMUM NO OF ITTERATION, ERS=PERMISSIBLE ERROR"
PRINT "D=
INSIDE DIAMETER OF PIPE, L!=LENGTH OF PIPE,E=ABSOLUTE ROUGHNESS"
PRINT "
300 PRINT : INPUT
"PRESS (CR) TO CONTINUE"; A$
READ NP, NJ, NL,
MAX, NUNIT, ERS,
NPP = NP + 1
NJ1 = NJ - 1
FOR I = 1 TO NP:
READ D(I), L!(I), E(I): NEXT I
FOR I = 1 TO NP:
E(I) = E(I) / D(I): NEXT I
CLS
ON NUNIT + 1 GOTO
380, 390, 410, 400
380 PRINT "D=PIPE DIAMETER,E=RELETIVE
ROUGHNESS IN INCH,L=PIPE LENGTH IN FEET": GOTO 420
390 PRINT "D=PIPE
DIAMETER,E=RELETIVE ROUGHNESS,L=PIPE LENGTH (IN FEET)": GOTO 420
400 FOR I = 1 TO NP:
D(I) = .001 * D(I): NEXT I
410 PRINT "D=PIPE
DIAMETER,E=RELETIVE ROUGHNESS IN INCH,L=PIPE LENGTH (IN METER)"
420 PRINT " I=NUMBER OF PIPE ": PRINT
PRINT "I D
L E I
D L E
I D L
E"
PRINT
"-----------------------------------------------------------------------------"
FOR I = 1 TO NP
STEP 3
IF I + 1 > NP
THEN GOTO 490
IF I + 2 > NP
THEN GOTO 500
PRINT USING
"## ##.## ####
#.#### ## ##.##
#### #.#### ##
##.## #### #.####"; I; D(I); L!(I); E(I); I + 1;
D(I + 1); L!(I + 1); E(I + 1); I + 2; D(I + 2); L!(I + 2); E(I + 2): GOTO 510
490 PRINT USING
"## ##.## ####
#.####"; I; D(I); L!(I); E(I): GOTO 510
500 PRINT USING
"## ##.## ####
#.#### ## ##.##
#### #.####"; I; D(I);
L!(I); E(I); I + 1; D(I + 1); L!(I + 1); E(I + 1)
510 NEXT I
IF NUNIT > 0
THEN 560
FOR I = 1 TO NP
D(I) = D(I) / 12
NEXT I
560 IF NUNIT = 0 OR
NUNIT = 1 THEN G2 = 64.4
IF NUNIT = 2 OR
NUNIT = 3 THEN G2 = 19.62
FOR I = 1 TO NP
AR(I) = .78539392#
* D(I) ^ 2
ARL(I) = L!(I) /
(G2 * D(I) * (AR(I)) ^ 2)
NEXT I
II = 1
FOR I = 1 TO NJ:
READ INFLOW(I): READ NNJ
NN(I) = NNJ
ON INFLOW + 1 GOTO
730, 700, 710, 720
700 FOR J = 1 TO NNJ:
READ JN(I, J): NEXT J: READ QJ(II): QJ(II) = QJ(II) / 449: GOTO 740
710 FOR J = 1 TO NNJ:
READ JN(I, J): NEXT J: READ QJ(II): GOTO 740
720 FOR J = 1 TO NNJ:
READ JN(I, J): NEXT J: READ QJ(II): QJ(II) = QJ(II) / 1000: GOTO 740
730 FOR J = 1 TO NNJ:
READ JN(I, J): NEXT J: GOTO 760
740 JB(II) = I
II = II + 1
760 NEXT I
FOR I = 1 TO NL:
READ NNL: FOR J = 1 TO NNL: READ LP(J, I)
NEXT J: LP(8, I) =
NNL: NEXT I
FOR I = 1 TO NP
IF NUNIT > 1
GOTO 830
KP!(I) = .0009517
* L!(I) / D(I) ^ 4.87
GOTO 840
830 KP!(I) = .00212 *
L!(I) / D(I) ^ 4.87
840 NEXT I
ELOG = 18.7 *
FNAL10(2.71828183#)
SUM = 100!
NCT = 0
880 II = 1
FOR I = 1 TO NJ1
FOR J = 1 TO NP:
A(I, J) = 0!: NEXT
NNJ = NN(I)
FOR J = 1 TO NNJ
IJ = JN(I, J)
IF IJ > 0 THEN
A(I, J) = 1! ELSE IIJ = ABS(IJ): A(I, IIJ) = -1!
NEXT J
IF INFLOW(I) = 0
THEN A(I, NPP) = 0! ELSE A(I, NPP) = QJ(II): II = II + 1
NEXT I
FOR I = NJ TO NP
FOR J = 1 TO NP:
A(I, J) = 0!: NEXT
II = I - NJ1
NNJ = LP(8, II)
FOR J = 1 TO NNJ
IJ = LP(J, II)
IIJ = ABS(IJ)
IF IJ < 0 THEN
A(I, IIJ) = -KP!(IIJ) ELSE A(I, IIJ) = KP!(IIJ)
NEXT J
A(I, NPP) = 0!
NEXT I
GOSUB 2000
PRINT ID
IF ID = 2 THEN
GOTO 1940
IF NCT > 0 THEN
SUM = 0!
FOR I = 1 TO NP
BB = A(I, NPP)
IF NCT > 0 THEN
QM = .5 * (Q(I) + BB): SUM = SUM + ABS(Q(I) - BB) ELSE QM = BB
Q(I) = QM
DELQ = QM * DELQ1
QM = ABS(QM)
V1 = (QM - DELQ) /
AR(I)
REM IF V1<.001
THEN V1=.001
V2 = (QM + DELQ) /
AR(I)
VE = QM / AR(I)
RE1 = V1 * D(I) /
RE2 = V2 * D(I) /
IF RE2 > 2100
THEN 1310
F1 = 64! / RE1
F2 = 64! / RE2
EXPP(I) = 1!
KP!(I) = (F1 + F2)
/ 2! * ARL(I) * QM
GOTO 1560
1310 MM = 0
F = 1! / (1.14 -
2! * FNAL10(E(I))) ^ 2
PAR = VE *
SQR(.125 * F) * D(I) * E(I) /
IF PAR > 100!
THEN 1540
RE = RE1
1360 MCT = 0
1370 FS = SQR(F)
FZ = .5 / (F * FS)
ARG = E(I) +
9.350001 / (RE * FS)
FF = 1! / FS -
1.14 + 2! * FNAL10(ARG)
DF = FZ + ELOG *
FZ / (ARG * RE)
DIF = FF / DF
F = F + DIF
MCT = MCT + 1
IF ABS(DIF) >
.00001 AND MCT < 15 THEN 1370
IF MM <> 1
THEN MM = 1: RE = RE2: F1 = F: GOTO 1360
F2 = F
BE = (LOG(F1) -
LOG(F2)) / (LOG(QM + DELQ) - LOG(QM - DELQ))
AE = F1 * (QM -
DELQ) ^ BE
EP = 1! - BE
EXPP(I) = EP + 1!
KP!(I) = AE *
ARL(I) * QM ^ EP
GOTO 1560
1540 KP!(I) = F *
ARL(I) * QM
EXPP(I) = 2!
1560 NEXT I
NCT = NCT + 1
PRINT "
Q N K Q
N K Q
N K"
PRINT
"------------------------------------------------------------------------"
FOR I = 1 TO NP STEP 3
IF I + 1 > NP
THEN GOTO 1680
IF I + 2 > NP
THEN GOTO 1690
PRINT USING
"###.## #.### ###.####
###.## #.### ###.####
###.## #.### ###.####"; Q(I); EXPP(I); KP!(I); Q(I +
1); EXPP(I + 1); KP!(I + 1); Q(I + 2); EXPP(I + 2); KP!(I + 2)
GOTO 1700
1680 PRINT USING
"###.## #.### ###.####"; Q(I); EXPP(I); KP!(I): GOTO
1700
1690 PRINT USING
"###.## #.### ###.####
###.## #.### ###.####
"; Q(I); EXPP(I); KP!(I); Q(I + 1); EXPP(I + 1); KP!(I + 1)
1700 NEXT I
INPUT "PRESS
(CR) TO CONTINUE"; D$
IF SUM > ERS
AND NCT < MAX THEN 880
IF NCT = MAX THEN
PRINT "DID NOT CONVRGE IN"; : PRINT NCT; : PRINT "ITERATION ,
SUM OF DIFFRENCE="; : PRINT SUM
FOR I = 1 TO NP: KP!(I)
= KP!(I) * ABS(Q(I)): NEXT I
FOR I = 1 TO NP:
VL(I) = ABS(Q(I)) / AR(I): NEXT I
CLS
PRINT CHR$(15);
WIDTH LPRINT 150
FOR I = 1 TO NP
READ F(I), G(I):
NEXT I
PRINT
"--------------------------------------------------------------------------------"
FOR I = 1 TO NP:
HL(I) = KP!(I) * 1000 / L!(I): NEXT I
PRINT
"PIPE BETWEEN NOEDS DIAMETER
LENGTH FLOW RATE VELOCITY
HEAD LOSS HEAD LOSS"
IF NUNIT < 2
THEN GOTO 1870
FOR I = 1 TO NP:
D(I) = D(I) * 1000: Q(I) = Q(I) * 1000: NEXT I
PRINT "
NO. I J
MM M L/S M/S
M M/1000M ": GOTO 1890
1870 FOR I = 1 TO NP:
D(I) = D(I) * 12: NEXT I
PRINT "
NO. I J
INCH FEET
CFS FEET/S FT
FT/1000FT"
1890 PRINT
"--------------------------------------------------------------------------------"
FOR I = 1 TO NP
PRINT USING "
## ### ###
#### ####.# ####.####
##.### ##.### ###.####"; I; F(I); G(I); D(I); L!(I);
Q(I); VL(I); KP!(I); HL(I)
NEXT I
GOTO 300
1940 PRINT "OVER
FLOW OCCURED ,CHECK FOR REDUNDANT EQUATION"
PRINT
"RESULTING SINGULAR MATRIX"
GOTO 300
STOP
END
2000 REM SOLVING SYSTEM
(GAUSS
ID = 1
EPS = 1E-10
FOR K3 = 1 TO NP
KM1 = K3 - 1
PIVOT = 0!
REM SEARCH FOR
PIVOT ELEMENT
FOR K1 = 1 TO NP
FOR
IF K3 = 1 THEN
2190
FOR ISCAN = 1 TO
KM1
FOR JSCAN = 1 TO
KM1
IF K1 =
IROW(ISCAN) THEN 2230
IF
NEXT JSCAN
NEXT ISCAN
PRINT
"A(", K1, ",",
INPUT A$
2190 IF ABS(A(K1,
PIVOT = A(K1,
IROW(K3) = K1
JCOL(K3) =
2230 NEXT
NEXT K1
IF ABS(PIVOT) >
EPS THEN 2290
ID = 2
RETURN
REM NORMALIZE THE
PIVOT ROW
2290 IROWK = IROW(K3)
JCOLK = JCOL(K3)
FOR
A(IROWK,
NEXT
REM CARRY UOT THE
ELEMINATION
FOR K1 = 1 TO NP
IF K1 = IROWK THEN
2410
AIJCK = A(K1,
JCOLK)
FOR
IF
NEXT
2410 NEXT K1
NEXT K3
REM UNSCRAMBLE
FOR K1 = 1 TO NP
X(JCOL(K1)) =
A(IROW(K1), NPP)
NEXT K1
FOR K1 = 1 TO NP
A(K1, NPP) = X(K1)
NEXT K1
RETURN
END
DATA
7,6,2,10,0,.001,.00001217,.1
DATA
8,1106,.0102,12,751,.0102,10,1000,.0102,12,500,.0102
DATA
10,1200,.0102,6,600,.0102,8,800,.0102
DATA
1,2,1,4,2000,0,3,-1,-2,5,1,3,-3,2,-7,-1500
DATA
1,2,3,-4,-1000,1,2,-5,-6,-1500,1,2,6,7,2000
DATA
4,1,-2,-3,-4,4,5,-6,7,2
DATA
1,2,3,2,4,3,1,4,2,5,6,5,6,3