@@ -3093,6 +3093,8 @@ def calculate_field_gathering_costs(self, model: Model) -> None:
30933093 (model .wellbores .nprod .value + model .wellbores .ninj .value ) * 750 * 500. + self .Cpumps ) / 1E6
30943094
30953095 def calculate_plant_costs (self , model : Model ) -> None :
3096+ direct_use_heat_default_cost_musd_per_kwth = 250E-6 # TODO parameterize
3097+
30963098 # plant costs
30973099 if (model .surfaceplant .enduse_option .value == EndUseOptions .HEAT
30983100 and model .surfaceplant .plant_type .value not in [PlantType .ABSORPTION_CHILLER , PlantType .HEAT_PUMP , PlantType .DISTRICT_HEATING ]): # direct-use
@@ -3102,7 +3104,7 @@ def calculate_plant_costs(self, model: Model) -> None:
31023104 self .Cplant .value = (self ._indirect_cost_factor
31033105 * self ._contingency_factor
31043106 * self .ccplantadjfactor .value
3105- * 250E-6
3107+ * direct_use_heat_default_cost_musd_per_kwth
31063108 * np .max (model .surfaceplant .HeatExtracted .value )
31073109 * 1000. )
31083110
@@ -3115,7 +3117,7 @@ def calculate_plant_costs(self, model: Model) -> None:
31153117 self .Cplant .value = (self ._indirect_cost_factor
31163118 * self ._contingency_factor
31173119 * self .ccplantadjfactor .value
3118- * 250E-6
3120+ * direct_use_heat_default_cost_musd_per_kwth
31193121 * np .max (model .surfaceplant .HeatExtracted .value )
31203122 * 1000. )
31213123 if self .chillercapex .value == - 1 : # no value provided by user, use built-in correlation ($2500/ton)
@@ -3135,7 +3137,7 @@ def calculate_plant_costs(self, model: Model) -> None:
31353137 self .Cplant .value = self .ccplantfixed .value
31363138 else :
31373139 # this is for the direct-use part all the way up to the heat pump
3138- self .Cplant .value = self ._indirect_cost_factor * self ._contingency_factor * self .ccplantadjfactor .value * 250E-6 * np .max (
3140+ self .Cplant .value = self ._indirect_cost_factor * self ._contingency_factor * self .ccplantadjfactor .value * direct_use_heat_default_cost_musd_per_kwth * np .max (
31393141 model .surfaceplant .HeatExtracted .value ) * 1000.
31403142 if self .heatpumpcapex .value == - 1 : # no value provided by user, use built-in correlation ($150/kWth)
31413143 self .heatpumpcapex .value = self ._indirect_cost_factor * self ._contingency_factor * np .max (
@@ -3149,7 +3151,7 @@ def calculate_plant_costs(self, model: Model) -> None:
31493151 if self .ccplantfixed .Valid :
31503152 self .Cplant .value = self .ccplantfixed .value
31513153 else :
3152- self .Cplant .value = self ._indirect_cost_factor * self ._contingency_factor * self .ccplantadjfactor .value * 250E-6 * np .max (
3154+ self .Cplant .value = self ._indirect_cost_factor * self ._contingency_factor * self .ccplantadjfactor .value * direct_use_heat_default_cost_musd_per_kwth * np .max (
31533155 model .surfaceplant .HeatExtracted .value ) * 1000.
31543156
31553157 # add 65$/KW for peaking boiler
@@ -3344,7 +3346,7 @@ def calculate_plant_costs(self, model: Model) -> None:
33443346 self ._indirect_cost_factor
33453347 * self ._contingency_factor
33463348 * self .ccplantadjfactor .value
3347- * 250E-6
3349+ * direct_use_heat_default_cost_musd_per_kwth
33483350 * np .max (model .surfaceplant .HeatProduced .value / model .surfaceplant .enduse_efficiency_factor .value )
33493351 * 1000. ,
33503352 'MUSD'
@@ -3354,11 +3356,14 @@ def calculate_plant_costs(self, model: Model) -> None:
33543356 EndUseOptions .COGENERATION_BOTTOMING_EXTRA_HEAT ,
33553357 EndUseOptions .COGENERATION_BOTTOMING_EXTRA_ELECTRICITY
33563358 ]:
3357- self .CAPEX_cost_heat_plant .value = quantity (self ._indirect_cost_factor * self ._contingency_factor * self .ccplantadjfactor .value * 250E-6 * np .max (
3359+ self .CAPEX_cost_heat_plant .value = quantity (self ._indirect_cost_factor * self ._contingency_factor * self .ccplantadjfactor .value * direct_use_heat_default_cost_musd_per_kwth * np .max (
33583360 model .surfaceplant .HeatProduced .value / model .surfaceplant .enduse_efficiency_factor .value ) * 1000. , 'MUSD' ).to (self .CAPEX_cost_heat_plant .CurrentUnits ).magnitude
3359- elif model .surfaceplant .enduse_option .value in [EndUseOptions .COGENERATION_PARALLEL_EXTRA_ELECTRICITY ,
3360- EndUseOptions .COGENERATION_PARALLEL_EXTRA_HEAT ]: # cogen parallel cycle
3361- self .CAPEX_cost_heat_plant .value = quantity (self ._indirect_cost_factor * self ._contingency_factor * self .ccplantadjfactor .value * 250E-6 * np .max (
3361+ elif model .surfaceplant .enduse_option .value in [
3362+ # cogen parallel cycle
3363+ EndUseOptions .COGENERATION_PARALLEL_EXTRA_ELECTRICITY ,
3364+ EndUseOptions .COGENERATION_PARALLEL_EXTRA_HEAT
3365+ ]:
3366+ self .CAPEX_cost_heat_plant .value = quantity (self ._indirect_cost_factor * self ._contingency_factor * self .ccplantadjfactor .value * direct_use_heat_default_cost_musd_per_kwth * np .max (
33623367 model .surfaceplant .HeatProduced .value / model .surfaceplant .enduse_efficiency_factor .value ) * 1000. , 'MUSD' ).to (self .CAPEX_cost_heat_plant .CurrentUnits ).magnitude
33633368
33643369 self .Cplant .value = self .Cplant .value + quantity (self .CAPEX_cost_heat_plant_musd , 'MUSD' ).to (self .Cplant .CurrentUnits .value ).magnitude
0 commit comments