-
Notifications
You must be signed in to change notification settings - Fork 8
/
Turbine_H-S.cpp
173 lines (139 loc) · 4.51 KB
/
Turbine_H-S.cpp
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
/*
H-S(Mollier) Diagram of Steam Turbine Expansion
using Gnuplot
seuif97's lib and header file
1 Windows: libseuif97.dll
2 Linux: libseuif97.so
3 seuif97.h
4 lines:
1 Isobar line:p inlet
2 Isobar line:p outlet
3 isentropic line: (p inlet ,t inlet h inlet,s inlet), (p outlet,s inlet)
4 Expansion line: inlet,outlet
Build using GCC:
Windows:
g++ -o turbine Turbine_H-S.cpp -LC:/Windows/system/ -lseuif97 -I./include
Linux:
g++ -o turbine Turbine_H-S.cpp -L/usr/lib -lseuif97 -lm -I./include
Run:
./turbine
Author: Cheng Maohua
Email: cmh@seu.edu.cn
*/
#include <iostream>
#include <iomanip>
#include "seuif97.h"
using namespace std;
struct wmstatus
{
double p, t, h, s;
};
class Turbine
{
private:
double his;
public:
wmstatus win, wex;
double ef;
Turbine(double pin, double tin, double pex, double tex);
void analysis(void);
void output(void);
void expansionline(void);
};
Turbine::Turbine(double pin, double tin, double pex, double tex)
{
win.p = pin;
win.t = tin;
wex.p = pex;
wex.t = tex;
}
void Turbine::analysis(void)
{
ef = ief(win.p, win.t, wex.p, wex.t);
his = ishd(win.p, win.t, wex.p);
win.h =pt(win.p, win.t, 4);
win.s =pt(win.p, win.t, 5);
wex.h =pt(wex.p, wex.t, 4);
wex.s =pt(wex.p, wex.t, 5);
};
void Turbine::output(void)
{
cout << "(Pin,Tin) = (" << win.p << "," << win.t << ")" << endl;
cout << "(Pex,Tex) = (" << wex.p << "," << wex.t << ")" << endl;
cout << "The isentropic efficiency = " << setiosflags(ios::fixed) << setprecision(2) << ef << "%" << endl;
};
void Turbine::expansionline(void)
{
double sdelta = 0.01;
// 1 Isobar pin
double s_isopin[2] = {win.s - sdelta, win.s + sdelta};
double h_isopin[2] = {ps(win.p, s_isopin[0], 4), ps(win.p, s_isopin[1], 4)};
// 2 Isobar pex
double s_isopex[2] = {s_isopin[0], wex.s + sdelta};
double h_isopex[2] = {ps(wex.p, s_isopex[0], 4), ps(wex.p, s_isopex[1], 4)};
// 3 isentropic lines
double h_isos[2] = {win.h, win.h - his};
double s_isos[2] = {win.s, win.s};
// 4 expansion Line
double h_expL[2] = {win.h, wex.h};
double s_expL[2] = {win.s, wex.s};
// plot lines with gnuplot
FILE *pipe = popen("gnuplot -persist", "w"); // Open a pipe to gnuplot
if (pipe) // If gnuplot is found
{
fprintf(pipe, "set term wx\n"); // set the terminal
fprintf(pipe, "set termoption enhanced\n"); // set enhanced text mode
fprintf(pipe, "set xlabel 's(kJ/(kg.K))'\n");
fprintf(pipe, "set ylabel 'h(kJ/kg)'\n");
fprintf(pipe, "set title 'H-S(Mollier) Diagram of Steam Turbine Expansion'\n");
fprintf(pipe, "set yrange [%lf:%lf]\n", h_isopex[0] - 20, h_isopin[1] + 20);
fprintf(pipe, "set xrange [%lf:%lf]\n", s_isopex[0] - 0.01, s_isopex[1] + 0.01);
fprintf(pipe, "set label 'The isentropic efficiency=(h_1-h_2)/(h_1-h_{2s})= %.2f%%' at %lf,%lf left\n", ef, s_isopin[1] + 0.01, h_isopin[1] - 50);
fprintf(pipe, "plot '-' title '' with line lc rgb 'blue', \
'-' title '' with line lc rgb 'blue',\
'-' title '' with linespoints lc rgb 'orange',\
'-' title 'Expansion Line' with linespoints lc rgb 'red'\n");
// 1 Isobar line : pin
for (int i = 0; i < 2; i++)
{
fprintf(pipe, "%lf %lf\n", s_isopin[i], h_isopin[i]);
}
fprintf(pipe, "e");
// 2 Isobar line : pex
fprintf(pipe, "\n"); // draw a new item!
for (int i = 0; i < 2; i++)
{
fprintf(pipe, "%lf %lf\n", s_isopex[i], h_isopex[i]);
}
fprintf(pipe, "e");
// 3 isentropic lines
fprintf(pipe, "\n");
for (int i = 0; i < 2; i++)
{
fprintf(pipe, "%lf %lf\n", s_isos[i], h_isos[i]);
}
fprintf(pipe, "e");
// 4 Expansion Line
fprintf(pipe, "\n");
for (int i = 0; i < 2; i++)
{
fprintf(pipe, "%lf %lf\n", s_expL[i], h_expL[i]);
}
fprintf(pipe, "e");
fflush(pipe);
fprintf(pipe, "exit\n"); // exit gnuplot
pclose(pipe); //close pipe
}; // end of if
};
int main(void)
{
double pin = 16.0;
double tin = 535.0;
double pex = 3.56;
double tex = 315.0;
Turbine tb1 = Turbine(pin, tin, pex, tex);
tb1.analysis();
tb1.output();
tb1.expansionline();
return 0;
}