-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathEX218.FOR
192 lines (192 loc) · 5.8 KB
/
EX218.FOR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
C*********************** ABSTRACT *********************************
C
C THIS PROGRAM CALCULATES THE PERFORMANCE OF AN ISOTHERMAL CSTR
C REACTOR. USING A STEADY STATE MOLE BALANCE FOR EACH REACTION SPECIES,
C A SYSTEM OF FOUR NONLINEAR EQUATIONS CONTAINING FOUR UNKNOWNS IS
C GENERATED. THIS SYSTEM OF EQUATIONS IS SOLVED USING THE NEWTON
C METHOD.
C
C*********************** NOMENCLATURE *******************************
C
C CAO- THE INITAL CONCENTRATION OF A IN THE FEED STREAM (GMOLES/L)
C ERLIM- ERROR CRITERIA
C FX(I)- THE VALUE OF THE NONLINEAR EQUATIONS WHERE I INDICATES
C WHICH EQUATION
C KI- THE RATE CONSTANT FOR EACH OF THE REACTIONS (I INDICATES THE
C THE REACTION NUMBER)
C N- THE NUMBER OF NONLINEAR EQUATIONS
C Q- THE VOLUMETRIC FLOW RATE INTO AND OUT OF THE REACTOR (L/SEC)
C X(I)- THE INDEPENDENT VARIABLES OF THE PROBLEM I=1 (CONC OF A),
C I=2 (CONC OF B), I=3 (CONC OF C), AND I=4 (CONC OF D)
C ALL CONC ARE GIVEN IN GMOLES/L
C
C
C***************** INPUT DESCRIPTION ********************
C
C THE INITIAL GUESSES ARE SPECIFIED IN THE MAIN PROGRAM AS WELL
C AS THE ERROR CRITERIA AND THE NUMBER OF NONLINEAR EQUATIONS.
C THE FUNCTIONS ARE SPECIFIED IN SUBROUTINE FUNC AND THE PARTIAL
C DERIVATIVES OF THE FUNCTION WITH RESPECT TO THE INDEPENDENT
C VARIABLES ARE SPECIFIED IN SUBROUTINE DER.
C
C
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION X(4),FX(4),FX1(4),Y(4),A(4,4),B(4),XX(4),IPVT(4)
COMMON /ONE/ K1,K2,K3,K4,VR,Q,CAO
C SPECIFY EXTERNAL STATEMENT
EXTERNAL FUNC,DER
REAL K1,K2,K3,K4
C
C INPUT THE RATE CONSTANTS
C
K1=1.
K2=.2
K3=.05
K4=.4
C
C INPUT REACTOR VOLUME, FLOW RATE, AND INLET CONCENTRATION
C
VR=100.
Q=50.
CAO=1.
C
C MAKE INITIAL GUESSES
C
X(1)=0.0
X(2)=.3
X(3)=.3
X(4)=0.0
N=4
ERLIM=1.E-3
C
C CALL NEWTON METHOD
C
CALL NEWTND(FUNC,DER,N,X,FX,FX1,ERLIM,A,B,XX,IPVT)
C
C PRINT OUT FINAL RESULTS
C
DO 6 I=1,4
6 WRITE(6,7)I,X(I)
7 FORMAT( 10X,3H I=,I3,5X,3H X=,D14.7)
STOP
END
C
C**************************** ABSTRACT ********************************
C
C THIS SUBROUTINE CALCULATES THE VALUES OF EACH NONLINEAR
C EQUATION GIVEN THE VALUE OF X(I) AND N. THESE VALUES ARE
C SUPPLIED TO THIS SUBROUTINE WHEN IT IS CALLED BY SUBROUTINE
C NNEWTN.
C
C************************************************************************
C
SUBROUTINE FUNC(N,X,FX)
IMPLICIT REAL*8(A-H,O-Z)
COMMON /ONE/K1,K2,K3,K4,VR,Q,CAO
DIMENSION X(4),FX(4)
REAL K1,K2,K3,K4
FX(1)=CAO -X(1)+VR*(-K1*X(1)+K3*X(3)*X(3)-K2*X(1)**1.5)/Q
FX(2)=-X(2)+VR*(2.*K1*X(1)-K4*X(2)*X(2))/Q
FX(3)=-X(3)+VR*(K2*X(1)**1.5-K3*X(3)*X(3)+K4*X(2)*X(2))/Q
FX(4)=-X(4)+VR*(K4*X(2)*X(2))/Q
WRITE(6,11)(X(I),FX(I),I=1,N)
11 FORMAT( 10X,' X=',E14.7,5X,' F=',D14.7)
WRITE(6,22)
22 FORMAT( /)
RETURN
END
C
C**************************** ABSTRACT *******************************
C
C THIS SUBROUTINE EMPLOYES NEWTON'S METHOD IN ORDER TO SOLVE A
C SET OF N NONLINEAR EQUATIONS CONTAINING N UNKNOWNS.
C THIS SUBROUTINE IS CALLED BY THE MAIN PROGRAM AND IS SUPPLIED
C THE VALUES OF THE INITIAL GUESS FOR X(I)'S AS WELL AS THE VALUE OF
C N. THIS SUBROUTINE USES THE VALUES OF THE FUNCTION FROM FUNC AND
C THE VALUES OF THE PARTIAL DERIVATIVES OF THE FUNCTION IN ORDER TO
C DETERMINE THE SOLUTION. THIS METHOD USES THE LIBRARY ROUTINE LINPAC
C TO SOLVE THE SYSTEM OF LINEAR EQUATION USED BY NEWTON'S METHOD.
C
C************************************************************************
C
C
SUBROUTINE NEWTND(FUNC,DER,N,X,FX,FX1,ERLIM,A,B,XX,IPVT)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION A(N,1),B(1),XX(1),IPVT(1),X(1),FX(1),FX1(1)
EXTERNAL FUNC,DER
1 CONTINUE
ITEST=0
C
C MAKE FUNCTION EVALUATIONS
C
CALL FUNC(N,X,FX)
DO 3 I=1,N
3 B(I)=-FX(I)
C
C EVALUATE JACOBIAN MATRIX
C
CALL DER(FUNC,N,X,A,FX,FX1)
C
C CALL LINEAR EQUATION SOLVER
C
CALL LINPAC(N,A,B,XX,IPVT)
C
C MAKE AN IMPROVED VALUE FOR X(I)
C
ITEST=0
DO 5 I=1,N
C ANTICIPATE ZERO ROOTS
TS=DABS(X(I))
IF(TS.LT.1.D-10)GO TO 5
RAT=XX(I)/X(I)
IF(DABS(RAT).GT.ERLIM)ITEST=ITEST+1
5 X(I)=X(I)+XX(I)
C
C CHECK FOR CONVERGENCE
C
IF(ITEST.NE.0)GO TO 1
RETURN
END
C
C************************* ABSTRACT **********************************
C
C THIS SUBROUTINE CALCULATES THE PARTIAL DERIVATIVES OF THE
C THE FUNCTIONS WITH RESPECT TO THE INDEPENDENT VARIABLES.
C A(I,J) REPRESENTS THE PARTIAL OF THE ITH FUNCTION WITH RESPECT
C TO THE JTH VARIABLE.
C
C************************************************************************
C
C
SUBROUTINE DER(FUNC,N,X,A,FXB,FXD)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION A(N,1),X(1),FXB(1),FXD(1)
REAL K1,K2,K3,K4
COMMON /ONE/K1,K2,K3,K4,VR,Q,CAO
EXTERNAL FUNC
DELTA=.01
C CALCULATE FUNCTION VALUE AT X(I)
CALL FUNC(N,X,FXB)
C
C CALCULATE NUMERICAL DERIVATIVES USING FINITE DIFFERENCE EQUATIONS
C
DO 1 I=1,N
C INCREMENT X(I) BY DELTA
X(I)=X(I)*(1.+DELTA)
C CONSIDER CASES FOR VERY SMALL VALUES OF X(I)
IF(DABS(X(I)).LT.1.D-10)XS=X(I)
IF(DABS(X(I)).LT.1.D-10)X(I)=1.D-3
C CALL FUNCTION VALUE AT INCREMENTED VALUE OF X(I)
CALL FUNC(N,X,FXD)
DEL=DELTA*X(I)/(1.+DELTA)
C SET DEL FOR CASE IN WHICH X(I) IS SMALL
IF(X(I).EQ.1.D-3)DEL=1.D-3
IF(X(I).EQ.1.D-3)X(I)=XS
C CORRECT X(I) BACK TO ORIGINAL VALUE
X(I)=X(I)/(1.+DELTA)
C CALCULATE DERIVATIVES WITH RESPECT TO X(I)
DO 2 J=1,N
2 A(J,I)=(FXD(J)-FXB(J))/DEL
1 CONTINUE
RETURN
END