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 par.fval_p("Cpi", par.fp("f_inst") * par.fp("Cpb") *
131 pow(par.fp("S") / par.fp("Sb"), par.fp("n")) *
132 I_cecpi(stoi(par.sp("base_year")), 2020));
133}
134
135void material_cost(object &par) {
136 par.fval_p("C_annual", par.fp("Q_annual") * par.fp("price"));
137}
138
139void equipment_list(vector<equipment> &list, object &par) {
140 equipment eq;
141 for (size_t n = 0; n < par.c.size(); n++) {
142 if (par.c[n].sys_type == "equipment") {
143 eq.def = par.sys_def + "-" + par.c[n].sys_def;
144 eq.Cpi = par.c[n].fp("Cpi");
145 eq.W_el = par.c[n].fp("W_el");
146 eq.C_maint = par.c[n].fp("Cpi") * par.c[n].fp("f_maint");
147 list.push_back(eq);
148 par.fval_p("output-electric_load_" + par.c[n].sys_def, par.c[n].fp("W_el"));
149 }
150 if (par.c[n].c.size() > 0) {
151 equipment_list(list, par.c[n]);
152 }
153 }
154}
155
156void material_list(string type, vector<material> &list, object &par) {
157 material m;
158 for (size_t n = 0; n < par.c.size(); n++) {
159 if (par.c[n].sys_type == type) {
160 m.def = par.sys_def + "-" + par.c[n].sys_def;
161 m.Q_annual = par.c[n].fp("Q_annual");
162 m.price = par.c[n].fp("price");
163 m.C_annual = par.c[n].fp("C_annual");
164 list.push_back(m);
165 }
166 if (par.c[n].c.size() > 0) {
167 material_list(type, list, par.c[n]);
168 }
169 }
170}
171
172void capex(object &par) {
173 vector<equipment> eq;
174 equipment_list(eq, par);
175
176 double C_eq = 0.0, W_el = 0.0, C_eq_maint = 0.0;
177 for (size_t n = 0; n < eq.size(); n++) {
178 // cout << eq[n].def << " " << eq[n].Cpi << endl;
179 C_eq = C_eq + eq[n].Cpi;
180 W_el = W_el + eq[n].W_el;
181 C_eq_maint = C_eq_maint + eq[n].C_maint;
182 }
183
184 par.fval_p("W_el(kW)", W_el);
185
186 par.fval_p("output-electric_load", W_el);
187 par.fval_p("output-C_eq", C_eq);
188 par.fval_p("output-C_piping", C_eq * par.fp("f_piping"));
189 par.fval_p("output-C_el", C_eq * par.fp("f_el"));
190 par.fval_p("output-C_I&C", C_eq * par.fp("f_I&C"));
191 par.fval_p("output-C_pi",
192 par.fp("C_eq") + par.fp("C_piping") + par.fp("C_el") + par.fp("C_I&C"));
193 par.fval_p("output-C_land", par.fp("C_pi") * par.fp("f_land"));
194 par.fval_p("output-C_site", par.fp("C_pi") * par.fp("f_site"));
195 par.fval_p("output-C_build", par.fp("C_pi") * par.fp("f_build"));
196 par.fval_p("output-C_com", par.fp("C_pi") * par.fp("f_com"));
197 par.fval_p("output-C_eng",
198 (par.fp("C_pi") + par.fp("C_site") + par.fp("C_build") + par.fp("C_com")) *
199 par.fp("f_eng"));
200 par.fval_p("output-C_dev", (par.fp("C_pi") + par.fp("C_land") + par.fp("C_site") +
201 par.fp("C_build") + par.fp("C_com") + par.fp("C_eng")) *
202 par.fp("f_dev"));
203 par.fval_p("output-C_cont",
204 (par.fp("C_pi") + par.fp("C_land") + par.fp("C_site") + par.fp("C_build") +
205 par.fp("C_com") + par.fp("C_eng") + par.fp("C_dev")) *
206 par.fp("f_cont"));
207 par.fval_p("output-C_inv", par.fp("C_pi") + par.fp("C_land") + par.fp("C_site") +
208 par.fp("C_build") + par.fp("C_com") + par.fp("C_eng") +
209 par.fp("C_dev") + par.fp("C_cont"));
210 par.fval_p("output-C_eq_maint", par.fp("C_eq") * 0.02);
211 par.fval_p("output-C_piping_maint", par.fp("C_piping") * 0.02);
212 par.fval_p("output-C_el_maint", par.fp("C_el") * 0.02);
213 par.fval_p("output-C_I&C_maint", par.fp("C_I&C") * 0.02);
214
215 cout << "-------------------------" << endl;
216 cout << " Capital costs (M$): " << par.fp("C_inv") * 1e-6 << endl;
217 cout << "------------------" << endl;
218 cout << "C_eq = " << C_eq * 1e-6 << endl;
219 cout << "C_piping = " << par.fp("C_piping") * 1e-6 << endl;
220 cout << "C_el = " << par.fp("C_el") * 1e-6 << endl;
221 cout << "C_I&C = " << par.fp("C_I&C") * 1e-6 << endl;
222 cout << "C_land = " << par.fp("C_land") * 1e-6 << endl;
223 cout << "C_site = " << par.fp("C_site") * 1e-6 << endl;
224 cout << "C_build = " << par.fp("C_build") * 1e-6 << endl;
225 cout << "C_com = " << par.fp("C_com") * 1e-6 << endl;
226 cout << "C_eng = " << par.fp("C_eng") * 1e-6 << endl;
227 cout << "C_dev = " << par.fp("C_dev") * 1e-6 << endl;
228 cout << "C_cont = " << par.fp("C_cont") * 1e-6 << endl;
229 cout << "------------------" << endl;
230}
231
232void opex(object &par) {
233 vector<material> m;
234 material_list("consumable", m, par);
235 material_list("solid_residue", m, par);
236
237 cout << "------------------" << endl;
238 cout << "Material list" << endl;
239 cout << "------------------" << endl;
240 double C_op_mat = 0.0;
241 for (size_t n = 0; n < m.size(); n++) {
242 cout << m[n].type << m[n].def << " Q_annual: " << m[n].Q_annual
243 << " price: " << m[n].price << " " << m[n].C_annual << endl;
244 C_op_mat = C_op_mat + m[n].C_annual;
245 }
246
247 par.fval_p("output-C_op_mat", C_op_mat);
248
249 par.fval_p("output-C_op_el", par.fp("W_el(kW)") * par.fp("price_electricity") * 8000);
250
251 par.fval_p("output-C_op_maint", par.fp("C_eq_maint") + par.fp("C_piping_maint") +
252 par.fp("C_el_maint") + par.fp("C_I&C_maint"));
253
254 par.fval_p("output-C_op_ins", par.fp("C_pi") * par.fp("f_ins"));
255
256 par.fval_p("output-C_op_adm", par.fp("C_pi") * par.fp("f_adm"));
257
258 par.fval_p("output-C_op", par.fp("C_op_mat") + par.fp("C_op_el") + par.fp("C_op_maint") +
259 par.fp("C_op_ins") + par.fp("C_op_adm"));
260
261 par.fval_p("output-C_op_var", par.fp("C_op_mat") + par.fp("C_op_el"));
262
263 cout << "-------------------------" << endl;
264 cout << " Operational costs (M$): " << endl;
265 cout << "-------------------------" << endl;
266 cout << "Materials = " << par.fp("C_op_mat") * 1e-6 << endl;
267 cout << "Electricity = " << par.fp("C_op_el") * 1e-6 << endl;
268 cout << "Equipment maintenance = " << par.fp("C_eq_maint") * 1e-6 << endl;
269 cout << "Piping maintenance = " << par.fp("C_piping_maint") * 1e-6 << endl;
270 cout << "Electric system maintenance = " << par.fp("C_el_maint") * 1e-6 << endl;
271 cout << "I&C_maintenance = " << par.fp("C_I&C_maint") * 1e-6 << endl;
272 cout << "Total maintenance = " << par.fp("C_op_maint") * 1e-6 << endl;
273 cout << "Insurance and taxes = " << par.fp("C_op_ins") * 1e-6 << endl;
274 cout << "Administration = " << par.fp("C_op_adm") * 1e-6 << endl;
275 cout << "------------------" << endl;
276}
277
278void cost(object &par) {
279 capex(par);
280 opex(par);
281}
Definition Cost.h:10
Definition Cost.h:16