1 |
REQUIRE "thermodynamics.a4l"; |
2 |
|
3 |
IMPORT "johnpye/extpy/extpy"; |
4 |
IMPORT "zplot"; |
5 |
MODEL srk(P WILL_BE pressure; |
6 |
T WILL_BE temperature; |
7 |
V WILL_BE molar_volume; |
8 |
Z WILL_BE factor; |
9 |
data WILL_BE td_component_constants;); |
10 |
|
11 |
R IS_A gas_constant; |
12 |
Pc IS_A pressure; |
13 |
Tc IS_A temperature; |
14 |
T_degC IS_A factor; |
15 |
alpha, beta, q,Tr, Pr, omega IS_A factor; |
16 |
|
17 |
PSI, OMEGA, sigma, eps IS_A real_constant; |
18 |
|
19 |
PSI :== 0.42748; |
20 |
OMEGA :== 0.08664; |
21 |
sigma :== 1.0; |
22 |
eps :== 0.0; |
23 |
|
24 |
Pc = data.Pc; |
25 |
Tc = data.Tc; |
26 |
omega = data.omega; |
27 |
|
28 |
eq1: Tr = T/Tc; |
29 |
eq2: Pr = P/Pc; |
30 |
eq3: T_degC = T/1{K} - 273.15; |
31 |
|
32 |
eq4: alpha = (1.0 + (0.480+1.574*omega-0.176*omega^2)*(1.0-Tr^(0.5)))^2; |
33 |
eq5: q = PSI*alpha/(OMEGA*Tr); |
34 |
eq6: beta = OMEGA*Pr/Tr; |
35 |
eq7: Z = 1.0 + beta - q*beta*(Z - beta)/((Z + eps*beta)*(Z + sigma*beta)); |
36 |
eq8: P*V = Z*R*T; |
37 |
|
38 |
|
39 |
METHODS |
40 |
METHOD default_self; |
41 |
RUN ClearAll; |
42 |
RUN specify; |
43 |
RUN values; |
44 |
END default_self; |
45 |
|
46 |
METHOD specify; |
47 |
P.fixed := TRUE; |
48 |
T.fixed := TRUE; |
49 |
T_degC.fixed := FALSE; |
50 |
END specify; |
51 |
METHOD values; |
52 |
P := 12.0 {bar}; |
53 |
T := 298.15 {K}; |
54 |
Z.lower_bound := 0.0; |
55 |
Z.upper_bound := 10.0; |
56 |
Z.nominal := 1.0; |
57 |
END values; |
58 |
|
59 |
END srk; |
60 |
MODEL testsrk; |
61 |
|
62 |
c1 IS_A symbol_constant; |
63 |
c1 :== 'ethylene'; |
64 |
cd IS_A components_data([c1],c1); |
65 |
Tr, Pr IS_A factor; |
66 |
P IS_A pressure; |
67 |
T IS_A temperature; |
68 |
V IS_A molar_volume; |
69 |
Z IS_A factor; |
70 |
tsrk IS_A srk(P,T,V,Z,cd.data[c1]); |
71 |
|
72 |
eqTr: Tr = T/cd.data[c1].Tc; |
73 |
eqPr: Pr = P/cd.data[c1].Pc; |
74 |
|
75 |
METHODS |
76 |
METHOD default_self; |
77 |
RUN ClearAll; |
78 |
RUN specify; |
79 |
RUN values; |
80 |
END default_self; |
81 |
|
82 |
METHOD specify; |
83 |
P.fixed := TRUE; |
84 |
V.fixed := FALSE; |
85 |
Z.fixed := FALSE; |
86 |
T.fixed := TRUE; |
87 |
RUN tsrk.specify; |
88 |
END specify; |
89 |
METHOD values; |
90 |
P := 12.0 {bar}; |
91 |
T := 298.15 {K}; |
92 |
RUN tsrk.values; |
93 |
END values; |
94 |
|
95 |
METHOD on_load; |
96 |
RUN default_self; |
97 |
END on_load; |
98 |
|
99 |
METHOD fancyplot; |
100 |
EXTERNAL zplot(SELF); |
101 |
END fancyplot; |
102 |
|
103 |
END testsrk; |