13 double Cpi, W_el, C_maint;
19 double Q_annual, price, C_annual;
22double cecpi(
int year_input) {
24 if (year_input == 1994) {
27 if (year_input == 1995) {
30 if (year_input == 1996) {
33 if (year_input == 1997) {
36 if (year_input == 1998) {
39 if (year_input == 1999) {
42 if (year_input == 2000) {
45 if (year_input == 2001) {
48 if (year_input == 2002) {
51 if (year_input == 2003) {
54 if (year_input == 2004) {
57 if (year_input == 2005) {
60 if (year_input == 2006) {
63 if (year_input == 2007) {
66 if (year_input == 2008) {
69 if (year_input == 2009) {
72 if (year_input == 2010) {
75 if (year_input == 2011) {
78 if (year_input == 2012) {
81 if (year_input == 2013) {
84 if (year_input == 2014) {
87 if (year_input == 2015) {
90 if (year_input == 2016) {
93 if (year_input == 2017) {
96 if (year_input == 2018) {
99 if (year_input == 2019) {
102 if (year_input == 2020) {
108double I_cecpi(
int year_ref,
int year) {
109 double CECPI, CECPI_ref;
112 for (
int i = 0; i < 2; i++) {
114 year_input = year_ref;
120 CECPI = cecpi(year_input);
126 return CECPI / CECPI_ref;
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");
136 f_inst * Cpb * pow(S / Sb, n) * I_cecpi(stoi(par.sp(
"base_year")), 2020);
138 par.fval_p(
"Cpi", Cpi);
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);
148void equipment_list(vector<equipment> &list,
object &par) {
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");
157 par.fval_p(
"output-electric_load_" + par.c[n].sys_def,
158 par.c[n].fp(
"W_el"));
160 if (par.c[n].c.size() > 0) {
161 equipment_list(list, par.c[n]);
166void material_list(
string type, vector<material> &list,
object &par) {
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");
176 if (par.c[n].c.size() > 0) {
177 material_list(type, list, par.c[n]);
182void capex(
object &par) {
183 vector<equipment> eq;
184 equipment_list(eq, par);
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++) {
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;
194 par.fval_p(
"W_el(kW)", W_el);
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")) *
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")) *
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") +
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);
247void opex(
object &par) {
251 material_list(
"consumable", m, par);
252 material_list(
"solid_residue", m, par);
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;
259 par.fval_p(
"output-C_op_mat", C_op_mat);
261 par.fval_p(
"output-C_op_el",
262 par.fp(
"W_el(kW)") * par.fp(
"price_electricity") * 8000);
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"));
268 par.fval_p(
"output-C_op_ins", par.fp(
"C_pi") * par.fp(
"f_ins"));
270 par.fval_p(
"output-C_op_adm", par.fp(
"C_pi") * par.fp(
"f_adm"));
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") +
276 par.fval_p(
"output-C_op_var", par.fp(
"C_op_mat") + par.fp(
"C_op_el"));
298void cost(
object &par) {