CHP_modelling
Loading...
Searching...
No Matches
Cost.h
1#include <stdio.h>
2#include <string.h>
3
4#include <cmath>
5#include <fstream>
6#include <vector>
7
8using namespace std;
9
10struct equipment {
11 public:
12 string def;
13 double Cpi, W_el, C_maint;
14};
15
16struct material {
17 public:
18 string type, def;
19 double Q_annual, price, C_annual;
20};
21
22double cecpi(int year_input) {
23 double CECPI;
24 if (year_input == 1994) {
25 CECPI = 268.1;
26 }
27 if (year_input == 1995) {
28 CECPI = 381.1;
29 }
30 if (year_input == 1996) {
31 CECPI = 381.7;
32 }
33 if (year_input == 1997) {
34 CECPI = 386.5;
35 }
36 if (year_input == 1998) {
37 CECPI = 389.5;
38 }
39 if (year_input == 1999) {
40 CECPI = 390.6;
41 }
42 if (year_input == 2000) {
43 CECPI = 394.1;
44 }
45 if (year_input == 2001) {
46 CECPI = 394.3;
47 }
48 if (year_input == 2002) {
49 CECPI = 395.6;
50 }
51 if (year_input == 2003) {
52 CECPI = 402.0;
53 }
54 if (year_input == 2004) {
55 CECPI = 444.2;
56 }
57 if (year_input == 2005) {
58 CECPI = 468.2;
59 }
60 if (year_input == 2006) {
61 CECPI = 499.6;
62 }
63 if (year_input == 2007) {
64 CECPI = 525.4;
65 }
66 if (year_input == 2008) {
67 CECPI = 550.8;
68 }
69 if (year_input == 2009) {
70 CECPI = 521.9;
71 }
72 if (year_input == 2010) {
73 CECPI = 575.4;
74 }
75 if (year_input == 2011) {
76 CECPI = 525.4;
77 }
78 if (year_input == 2012) {
79 CECPI = 584.6;
80 }
81 if (year_input == 2013) {
82 CECPI = 587.3;
83 }
84 if (year_input == 2014) {
85 CECPI = 586.77;
86 }
87 if (year_input == 2015) {
88 CECPI = 592.0;
89 }
90 if (year_input == 2016) {
91 CECPI = 606.0;
92 }
93 if (year_input == 2017) {
94 CECPI = 623.5;
95 }
96 if (year_input == 2018) {
97 CECPI = 638.1;
98 }
99 if (year_input == 2019) {
100 CECPI = 652.9;
101 }
102 if (year_input == 2020) {
103 CECPI = 668.0;
104 }
105 return CECPI;
106}
107
108double I_cecpi(int year_ref, int year) {
109 double CECPI, CECPI_ref;
110 int year_input;
111
112 for (int i = 0; i < 2; i++) {
113 if (i == 0) {
114 year_input = year_ref;
115 }
116 if (i == 1) {
117 year_input = year;
118 }
119
120 CECPI = cecpi(year_input);
121
122 if (i == 0) {
123 CECPI_ref = CECPI;
124 }
125 }
126 return CECPI / CECPI_ref;
127}
128
129void equipment_cost(object &par) {
130 double f_inst = par.fp("f_inst");
131 double Cpb = par.fp("Cpb");
132 double S = par.fp("S");
133 double Sb = par.fp("Sb");
134 double n = par.fp("n");
135 double Cpi =
136 f_inst * Cpb * pow(S / Sb, n) * I_cecpi(stoi(par.sp("base_year")), 2020);
137
138 par.fval_p("Cpi", Cpi);
139}
140
141void material_cost(object &par) {
142 double Q_annual = par.fp("Q_annual");
143 double price = par.fp("price");
144 double C_annual = Q_annual * price;
145 par.fval_p("C_annual", C_annual);
146}
147
148void equipment_list(vector<equipment> &list, object &par) {
149 equipment eq;
150 for (size_t n = 0; n < par.c.size(); n++) {
151 if (par.c[n].sys_type == "equipment") {
152 eq.def = par.sys_def + "-" + par.c[n].sys_def;
153 eq.Cpi = par.c[n].fp("Cpi");
154 eq.W_el = par.c[n].fp("W_el");
155 eq.C_maint = par.c[n].fp("Cpi") * par.c[n].fp("f_maint");
156 list.push_back(eq);
157 par.fval_p("output-electric_load_" + par.c[n].sys_def,
158 par.c[n].fp("W_el"));
159 }
160 if (par.c[n].c.size() > 0) {
161 equipment_list(list, par.c[n]);
162 }
163 }
164}
165
166void material_list(string type, vector<material> &list, object &par) {
167 material m;
168 for (size_t n = 0; n < par.c.size(); n++) {
169 if (par.c[n].sys_type == type) {
170 m.def = par.sys_def + "-" + par.c[n].sys_def;
171 m.Q_annual = par.c[n].fp("Q_annual");
172 m.price = par.c[n].fp("price");
173 m.C_annual = par.c[n].fp("C_annual");
174 list.push_back(m);
175 }
176 if (par.c[n].c.size() > 0) {
177 material_list(type, list, par.c[n]);
178 }
179 }
180}
181
182void capex(object &par) {
183 vector<equipment> eq;
184 equipment_list(eq, par);
185
186 double C_eq = 0.0, W_el = 0.0, C_eq_maint = 0.0;
187 for (size_t n = 0; n < eq.size(); n++) {
188 // cout << eq[n].def << " " << eq[n].Cpi << endl;
189 C_eq = C_eq + eq[n].Cpi;
190 W_el = W_el + eq[n].W_el;
191 C_eq_maint = C_eq_maint + eq[n].C_maint;
192 }
193
194 par.fval_p("W_el(kW)", W_el);
195
196 par.fval_p("output-electric_load", W_el);
197 par.fval_p("output-C_eq", C_eq);
198 par.fval_p("output-C_piping", C_eq * par.fp("f_piping"));
199 par.fval_p("output-C_el", C_eq * par.fp("f_el"));
200 par.fval_p("output-C_I&C", C_eq * par.fp("f_I&C"));
201 par.fval_p("output-C_pi", par.fp("C_eq") + par.fp("C_piping") +
202 par.fp("C_el") + par.fp("C_I&C"));
203 par.fval_p("output-C_land", par.fp("C_pi") * par.fp("f_land"));
204 par.fval_p("output-C_site", par.fp("C_pi") * par.fp("f_site"));
205 par.fval_p("output-C_build", par.fp("C_pi") * par.fp("f_build"));
206 par.fval_p("output-C_com", par.fp("C_pi") * par.fp("f_com"));
207 par.fval_p("output-C_eng", (par.fp("C_pi") + par.fp("C_site") +
208 par.fp("C_build") + par.fp("C_com")) *
209 par.fp("f_eng"));
210 par.fval_p("output-C_dev",
211 (par.fp("C_pi") + par.fp("C_land") + par.fp("C_site") +
212 par.fp("C_build") + par.fp("C_com") + par.fp("C_eng")) *
213 par.fp("f_dev"));
214 par.fval_p("output-C_cont",
215 (par.fp("C_pi") + par.fp("C_land") + par.fp("C_site") +
216 par.fp("C_build") + par.fp("C_com") + par.fp("C_eng") +
217 par.fp("C_dev")) *
218 par.fp("f_cont"));
219 par.fval_p("output-C_inv", par.fp("C_pi") + par.fp("C_land") +
220 par.fp("C_site") + par.fp("C_build") +
221 par.fp("C_com") + par.fp("C_eng") +
222 par.fp("C_dev") + par.fp("C_cont"));
223 par.fval_p("output-C_eq_maint", par.fp("C_eq") * 0.02);
224 par.fval_p("output-C_piping_maint", par.fp("C_piping") * 0.02);
225 par.fval_p("output-C_el_maint", par.fp("C_el") * 0.02);
226 par.fval_p("output-C_I&C_maint", par.fp("C_I&C") * 0.02);
227
228 /*
229 cout << "-------------------------" << endl;
230 cout << " Capital costs (M$): " << par.fp("C_inv") * 1e-6 << endl;
231 cout << "------------------" << endl;
232 cout << "C_eq = " << C_eq * 1e-6 << endl;
233 cout << "C_piping = " << par.fp("C_piping") * 1e-6 << endl;
234 cout << "C_el = " << par.fp("C_el") * 1e-6 << endl;
235 cout << "C_I&C = " << par.fp("C_I&C") * 1e-6 << endl;
236 cout << "C_land = " << par.fp("C_land") * 1e-6 << endl;
237 cout << "C_site = " << par.fp("C_site") * 1e-6 << endl;
238 cout << "C_build = " << par.fp("C_build") * 1e-6 << endl;
239 cout << "C_com = " << par.fp("C_com") * 1e-6 << endl;
240 cout << "C_eng = " << par.fp("C_eng") * 1e-6 << endl;
241 cout << "C_dev = " << par.fp("C_dev") * 1e-6 << endl;
242 cout << "C_cont = " << par.fp("C_cont") * 1e-6 << endl;
243 cout << "------------------" << endl;
244 */
245}
246
247void opex(object &par) {
248 // Material list
249
250 vector<material> m;
251 material_list("consumable", m, par);
252 material_list("solid_residue", m, par);
253
254 double C_op_mat = 0.0;
255 for (size_t n = 0; n < m.size(); n++) {
256 C_op_mat = C_op_mat + m[n].C_annual;
257 }
258
259 par.fval_p("output-C_op_mat", C_op_mat);
260
261 par.fval_p("output-C_op_el",
262 par.fp("W_el(kW)") * par.fp("price_electricity") * 8000);
263
264 par.fval_p("output-C_op_maint",
265 par.fp("C_eq_maint") + par.fp("C_piping_maint") +
266 par.fp("C_el_maint") + par.fp("C_I&C_maint"));
267
268 par.fval_p("output-C_op_ins", par.fp("C_pi") * par.fp("f_ins"));
269
270 par.fval_p("output-C_op_adm", par.fp("C_pi") * par.fp("f_adm"));
271
272 par.fval_p("output-C_op", par.fp("C_op_mat") + par.fp("C_op_el") +
273 par.fp("C_op_maint") + par.fp("C_op_ins") +
274 par.fp("C_op_adm"));
275
276 par.fval_p("output-C_op_var", par.fp("C_op_mat") + par.fp("C_op_el"));
277
278 /*
279 cout << "-------------------------" << endl;
280 cout << " Operational costs (M$ / year): " << par.fp("C_op") << endl;
281 cout << "-------------------------" << endl;
282 cout << "Materials = " << par.fp("C_op_mat") * 1e-6 << endl;
283 for (size_t n = 0; n < m.size(); n++) {
284 cout << '\t' << m[n].def << ": " << m[n].C_annual * 1e-6 << endl;
285 }
286 cout << "Electricity = " << par.fp("C_op_el") * 1e-6 << endl;
287 cout << "Equipment maintenance = " << par.fp("C_eq_maint") * 1e-6 << endl;
288 cout << "Piping maintenance = " << par.fp("C_piping_maint") * 1e-6 << endl;
289 cout << "Electric system maintenance = " << par.fp("C_el_maint") * 1e-6 <<
290 endl; cout << "I&C_maintenance = " << par.fp("C_I&C_maint") * 1e-6 << endl;
291 cout << "Total maintenance = " << par.fp("C_op_maint") * 1e-6 << endl;
292 cout << "Insurance and taxes = " << par.fp("C_op_ins") * 1e-6 << endl;
293 cout << "Administration = " << par.fp("C_op_adm") * 1e-6 << endl;
294 cout << "------------------" << endl;
295 */
296}
297
298void cost(object &par) {
299 capex(par);
300 opex(par);
301}
Definition Cost.h:10
Definition Cost.h:16