Skip to content

Commit be77466

Browse files
committed
Fix calculations with pump installation, pump casing install cost
1 parent dfefcd9 commit be77466

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

ssc/cmod_geothermal_costs.cpp

+14-5
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ static var_info _cm_vtab_geothermal_costs[] = {
9898
// need defaults?
9999
{ SSC_INPUT, SSC_NUMBER, "geotherm.cost.pump_fixed", "Fixed pump workover and casing cost", "$", "", "GeoHourly", "", "", "" },
100100
{ SSC_INPUT, SSC_NUMBER, "geotherm.cost.pump_per_foot", "Pump cost per foot", "$/ft", "", "GeoHourly", "", "", "" },
101+
{ SSC_INPUT, SSC_NUMBER, "geotherm.cost.pump_casing_cost", "Pump casing cost per foot", "$/ft", "", "GeoHourly", "", "", "" },
102+
101103
// name change to match assign statement
102104
// { SSC_INPUT, SSC_NUMBER, "geotherm.cost.pump_geotherm.cost.pump_depth", "Pump depth", "ft", "", "GeoHourly", "", "", "" },
103105
{ SSC_INPUT, SSC_NUMBER, "geotherm.cost.pump_depth", "Pump depth", "ft", "", "GeoHourly", "", "", "?=1123120" },
@@ -853,15 +855,22 @@ class cm_geothermal_costs : public compute_module
853855
}
854856

855857
//Pump costs
856-
double workover_casing_cost = as_double("geotherm.cost.pump_fixed");
858+
double workover_casing_cost = as_double("geotherm.cost.pump_casing_cost");
857859
//double casing_cost = as_double("casing_cost");
858860
double installation_cost_per_foot = as_double("geotherm.cost.pump_per_foot");
859861
double pump_set_depth = as_double("geotherm.cost.pump_depth");
860862
double num_prod_wells = as_double("geotherm.cost.prod_req");
861863
double num_inj_pumps = as_double("inj_num_pumps");
862864
double prod_pump_power = as_double("pump_size_hp");
865+
double prod_pump_cost = 1750 * pow(prod_pump_power, 0.7) * pump_ppi[ppi_base_year];
863866
double other_pump_install_cost = 5750 * pow(prod_pump_power, 0.2) * pump_ppi[ppi_base_year];
864-
double prod_pump_cost_per_well = workover_casing_cost + installation_cost_per_foot * pump_set_depth * pump_ppi[ppi_base_year] + other_pump_install_cost;
867+
double prod_casing_cost = pump_set_depth * workover_casing_cost * pipe_ppi[ppi_base_year];
868+
//double installation_cost_per_foot = 5.0 * drilling_ppi[ppi_base_year];
869+
//double workover_casing_cost = 44.74 * pipe_ppi[ppi_base_year];
870+
double pump_installation_cost = prod_casing_cost + (10000.0 * drilling_ppi[ppi_base_year]) + installation_cost_per_foot * drilling_ppi[ppi_base_year] * pump_set_depth;
871+
double install_cost_only = pump_installation_cost - prod_casing_cost;
872+
double prod_pump_cost_per_well = prod_pump_cost + pump_installation_cost + other_pump_install_cost;
873+
//double prod_pump_cost_per_well = prod_pump_cost + workover_casing_cost + installation_cost_per_foot * pump_set_depth * pump_ppi[ppi_base_year] + other_pump_install_cost;
865874
double production_pump_cost = prod_pump_cost_per_well * num_prod_wells;
866875
if ((conversion_type + 1) == FLASH) {
867876
production_pump_cost = 0;
@@ -876,8 +885,8 @@ class cm_geothermal_costs : public compute_module
876885
double injection_pump_cost = num_injection_pumps * inj_pump_cost_per_pump * pump_ppi[ppi_base_year];
877886

878887
double indirect_pump_cost = (production_pump_cost + injection_pump_cost) * (1.0 / (1.0 - 0.12) - 1.0);
879-
assign("pump_only_cost", prod_pump_cost_per_well);
880-
assign("pump_cost_install", prod_pump_cost_per_well - workover_casing_cost);
888+
assign("pump_only_cost", prod_pump_cost);
889+
assign("pump_cost_install", install_cost_only);
881890
double total_pump_cost = production_pump_cost + injection_pump_cost + indirect_pump_cost;
882891
assign("total_pump_cost", var_data(static_cast<ssc_number_t>(total_pump_cost)));
883892

@@ -896,7 +905,7 @@ class cm_geothermal_costs : public compute_module
896905
double prod_wells_drilled = as_double("num_wells_getem_prod_drilled");
897906
double inj_wells_drilled = as_double("num_wells_getem_inj_drilled");
898907
double prod_wells_failed = as_double("num_wells_getem_prod_failed");
899-
double gathering_cost_total = piping_cost_per_well * (prod_wells_drilled + inj_wells_drilled + prod_wells_failed);
908+
double gathering_cost_total = piping_cost_per_well * (num_prod_wells + inj_wells_drilled + prod_wells_failed);
900909
assign("total_gathering_cost", var_data(static_cast<ssc_number_t>(gathering_cost_total)));
901910

902911
double indirect_pump_gathering_cost = (total_pump_cost + gathering_cost_total) * (1.0 / (1 - 0.12) - 1);

0 commit comments

Comments
 (0)