Новичок
Джуниор
Регистрация: 12.01.2017
Сообщений: 1
|
Моделирование динамических режимов ректификационной установки
Кому не сложно, пожалуйста сделайте описание каждой строчки того что происходит в данном коде
Код:
Цитата:
program Project;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
const
Fr = 500;
xf = 0.6;
N = 50;
Nf = 20;
KPD = 0.45;
R = 10;
a = 1.35;
h = 665;
rsm = 76;
rp = 539;
b1 = 640;
x0z = 0.23;
xnp1z = 0.973;
S = 0.0009;
E = 0.0001;
Tmax = 3;
Hb = 8;
dh = 0.0025;
var
x, y, x1, y1: array [0..N+1] of double;
txt: text;
D, V, W, L, F_1, xf1, Mcp, G, b2, C, Cz, Lmin, Lmax, dL, T: double;
i: integer;
procedure STATB06;
var
Dmin, Dmax, xNp1, yim1ZV: double;
i: integer;
begin
x[0] := x0z;
y[0] := x0z;
Dmax := Fr;
Dmin := Fr * (xf - x[0]) / (1 - x[0]);
repeat
D := (Dmin + Dmax) / 2;
W := Fr - D;
L := R * D;
V := D + L;
xNp1 := (Fr * xf - W * x0z) / D;
x[1] := (V * y[0]+ W*x[0]) / (L + Fr);
for i := 2 to N+1 do
begin
yim1ZV := (a * x[i-1]) / (1 + (a - 1) * x[i-1]);
y[i-1] := y[i-2] + KPD * (yim1ZV - y[i-2]);
if i < Nf then
x[i] := x[i-1] - V *(y[i-2] - y[i-1]) / (L + Fr) { исчерпывающая часть }
else if i = Nf then
x[i] := ((L + Fr) * x[i-1] - V * (y[i-2] - y[i-1]) - Fr * xf) / L { питание }
else
x[i] := (V * (y[i-1] - y[i-2])) / L + x[i-1] { укрепляющая часть }
end;
if abs(x[N+1] - xNp1) <= E then break;
if x[N+1] > xNp1 then Dmax := D else Dmin := D;
until false;
end;
function f1(x1, x0, y0: double): double; { куб }
begin
Result := ((L + F_1) * x1 - V * y0 - W * x0) / Hb
end;
function f2(x1, x0, y1, y0: double): double; { исчерпывающая часть }
begin
Result := ((L + F_1) * (x1 - x0) + V * (y0 - y1)) / Hb
end;
function f3(x1, x0, y1, y0: double): double; { укрепляющая часть }
begin
Result := (L * (x1 - x0) + V * (y0 - y1)) / Hb
end;
function f4(x1, y0: double): double; { дефлегматор }
begin
Result := (V * y0 - (L + D) * x1) / Hb
end;
function f5(x1, x0, y1, y0: double): double; { тарелка питания }
begin
Result := (L * x1 + Fr * xf - (L + Fr) * x0 + V * (y0 - y1)) / Hb
end;
procedure EULER;
var
i, j: integer;
begin
for i := 1 to 50 do
begin
for j := 0 to N+1 do
begin { решение системы дифференциальных уравнений }
if j = 0 then x1[j] := x1[j] + dh * f1(x1[1], x1[0], y1[0])
else if j < Nf then x1[j] := x1[j] + dh * f2(x1[j+1], x1[j], y1[j], y1[j-1])
else if ((j > Nf) and (j < N+1)) then x1[j] := x1[j] + dh * f3(x1[j+1], x1[j], y1[j], y1[j-1])
else if j = (N+1) then x1[j] := x1[j] + dh * f4(x1[j], y1[j-1])
else x1[j] := x1[j] + dh * f5(x1[j+1], x1[j], y1[j], y1[j-1])
end;
y1[0] := x1[0];
for j := 1 to N+1 do y1[j] := y1[j-1] + KPD * (a * x1[j] / (1 + (a - 1) * x1[j]) - y1[j-1]);
end;
end;
begin
SetConsoleCP(1251);
SetConsoleOutPutCP(1251);
assign(txt, 'results.txt');
rewrite(txt);
STATB06;
Mcp := (xf * 72 + (1 - xf) * 86);
G := (Mcp * V * rsm) / rp;
b2 := G * h * S;
Cz := (b1 * Fr + b2) * (x[N+1] - x[0]) / (Fr * (xf - x[0]));
writeln(txt, 'Статика:');
writeln(txt, 'F = ', Fr, ' D = ', D:6:3, ' W = ', W:6:3, ' L = ', L:8:3, ' Cz = ', Cz:8:3);
for i := 0 to N do writeln(txt, 'x[',i,'] = ', x[i]:6:3, ' y[', i, '] = ', y[i]:6:3);
writeln(txt, 'x[', N+1,'] = ', x[N+1]:6:3);
Lmin := 0.5 * L;
Lmax := (0.5 + 1) * L;
dL := (Lmax - Lmin) * 0.01;
F_1 := Fr + 0.05 * Fr;
xf1 := xf + xf * 0.05;
Mcp := (xf1 * 72 + (1 - xf1) * 86);
T := 0;
writeln(txt, 'Динамика:');
repeat
L := Lmin;
repeat
D := L / R;
V := L + D;
W := F_1 - D;
for i := 0 to N+1 do
begin
x1[i] := x[i];
y1[i] := y[i];
end;
EULER;
G := (Mcp * V * rsm) / rp;
b2 := G * h * S;
C := (b1 * F_1 + b2) * (x1[N+1] - x1[0]) / (F_1 * (xf1 - x1[0]));
if (x1[0] <= x0z) and (x1[N+1] >= xNp1z) and (x1[N+1] <= 1) and (C <= Cz) then break;
L := L + dL;
until L > Lmax;
for i := 0 to N+1 do
begin
x[i] := x1[i];
y[i] := y1[i];
end;
writeln(txt, 'T = ', T:0:2, ' x[0] = ', x[0]:0:3, ' x[', N+1,'] = ', x[N+1]:0:3, ' C = ', C:0:3, ' L = ', L:0:3);
T := T + 0.25;
until T > Tmax;
writeln(txt, 'В конце:');
writeln(txt, 'F = ', Fr, ' D = ', D:6:3, ' W = ', W:6:3, ' L = ', L:8:3, ' C = ', C:8:3);
for i := 0 to N do writeln(txt, 'x[', i, '] = ', x[i]:6:3, ' y[', i, '] = ', y[i]:6:3);
writeln(txt, 'x[', N+1, '] = ', x[N+1]:6:3);
Close(txt);
writeln('Complete!');
readln;
end.
|
|