@@ -1125,17 +1125,17 @@ def __init__(self, model: Model):
1125
1125
ErrMessage = "assume default peaking boiler efficiency (85%)" ,
1126
1126
ToolTipText = "Peaking boiler efficiency"
1127
1127
)
1128
- self ._default_peaking_boiler_cost_USD_per_kw = 65
1129
- self .peaking_boiler_cost_per_kw = self .ParameterDict [self .peaking_boiler_cost_per_kw .Name ] = floatParameter (
1130
- "Peaking Boiler Cost per KW " ,
1131
- DefaultValue = self ._default_peaking_boiler_cost_USD_per_kw ,
1128
+ self ._default_peaking_boiler_cost_USD_per_kW = 65
1129
+ self .peaking_boiler_cost_per_kW = self .ParameterDict [self .peaking_boiler_cost_per_kW .Name ] = floatParameter (
1130
+ "Peaking Boiler Cost per kW " ,
1131
+ DefaultValue = self ._default_peaking_boiler_cost_USD_per_kW ,
1132
1132
Min = 0 ,
1133
1133
Max = 1000 ,
1134
1134
UnitType = Units .ENERGYCOST ,
1135
1135
PreferredUnits = EnergyCostUnit .DOLLARSPERKW ,
1136
1136
CurrentUnits = EnergyCostUnit .DOLLARSPERKW ,
1137
1137
Required = False ,
1138
- ToolTipText = "Peaking boiler cost per KW of maximum peaking boiler demand"
1138
+ ToolTipText = "Peaking boiler cost per kW of maximum peaking boiler demand"
1139
1139
)
1140
1140
self .dhpipingcostrate = self .ParameterDict [self .dhpipingcostrate .Name ] = floatParameter (
1141
1141
"District Heating Piping Cost Rate" ,
@@ -1633,18 +1633,29 @@ def __init__(self, model: Model):
1633
1633
f'Provide { self .ccexplfixed .Name } to override the default correlation and set your own cost.'
1634
1634
)
1635
1635
1636
+ # noinspection SpellCheckingInspection
1636
1637
self .Cwell = self .OutputParameterDict [self .Cwell .Name ] = OutputParameter (
1637
1638
Name = "Wellfield cost" ,
1638
1639
display_name = 'Drilling and completion costs' ,
1639
1640
UnitType = Units .CURRENCY ,
1640
1641
PreferredUnits = CurrencyUnit .MDOLLARS ,
1641
1642
CurrentUnits = CurrencyUnit .MDOLLARS ,
1642
1643
1643
- # See TODO re:parameterizing indirect costs at src/geophires_x/Economics.py:652
1644
- # (https://github.com/NREL/GEOPHIRES-X/issues/383)
1644
+ # TODO https://github.com/NREL/GEOPHIRES-X/issues/383?title=Parameterize+indirect+cost+factor
1645
1645
ToolTipText = "Includes total drilling and completion cost of all injection and production wells and "
1646
1646
"laterals, plus 5% indirect costs."
1647
1647
)
1648
+ self .drilling_and_completion_costs_per_well = self .OutputParameterDict [
1649
+ self .drilling_and_completion_costs_per_well .Name ] = OutputParameter (
1650
+ Name = 'Drilling and completion costs per well' ,
1651
+ UnitType = Units .CURRENCY ,
1652
+ PreferredUnits = CurrencyUnit .MDOLLARS ,
1653
+ CurrentUnits = CurrencyUnit .MDOLLARS ,
1654
+
1655
+ # TODO https://github.com/NREL/GEOPHIRES-X/issues/383?title=Parameterize+indirect+cost+factor
1656
+ ToolTipText = 'Includes total drilling and completion cost per well, '
1657
+ 'including injection and production wells and laterals, plus 5% indirect costs.'
1658
+ )
1648
1659
self .Coamwell = self .OutputParameterDict [self .Coamwell .Name ] = OutputParameter (
1649
1660
Name = "O&M Wellfield cost" ,
1650
1661
display_name = 'Wellfield maintenance costs' ,
@@ -1722,9 +1733,9 @@ def __init__(self, model: Model):
1722
1733
UnitType = Units .CURRENCY ,
1723
1734
PreferredUnits = CurrencyUnit .MDOLLARS ,
1724
1735
CurrentUnits = CurrencyUnit .MDOLLARS ,
1725
- ToolTipText = f'Default cost: ${ self ._default_peaking_boiler_cost_USD_per_kw } /KW '
1736
+ ToolTipText = f'Default cost: ${ self ._default_peaking_boiler_cost_USD_per_kW } /KW '
1726
1737
f'of maximum peaking boiler demand. '
1727
- f'Provide { self .peaking_boiler_cost_per_kw .Name } override the default.'
1738
+ f'Provide { self .peaking_boiler_cost_per_kW .Name } override the default.'
1728
1739
)
1729
1740
1730
1741
self .dhdistrictcost = self .OutputParameterDict [self .dhdistrictcost .Name ] = OutputParameter (
@@ -2313,7 +2324,9 @@ def Calculate(self, model: Model) -> None:
2313
2324
else :
2314
2325
self .cost_lateral_section .value = 0.0
2315
2326
# cost of the well field
2316
- # 1.05 for 5% indirect costs - see TODO re:parameterizing at src/geophires_x/Economics.py:652
2327
+
2328
+ # 1.05 for 5% indirect costs
2329
+ # TODO https://github.com/NREL/GEOPHIRES-X/issues/383?title=Parameterize+indirect+cost+factor
2317
2330
self .Cwell .value = 1.05 * ((self .cost_one_production_well .value * model .wellbores .nprod .value ) +
2318
2331
(self .cost_one_injection_well .value * model .wellbores .ninj .value ) +
2319
2332
self .cost_lateral_section .value )
@@ -2685,7 +2698,7 @@ def calculate_plant_costs(self, model:Model) -> None:
2685
2698
model .surfaceplant .HeatExtracted .value ) * 1000.
2686
2699
2687
2700
# add 65$/KW for peaking boiler
2688
- self .peakingboilercost .value = (self .peaking_boiler_cost_per_kw .quantity ()
2701
+ self .peakingboilercost .value = (self .peaking_boiler_cost_per_kW .quantity ()
2689
2702
.to ('USD / kilowatt' ).magnitude
2690
2703
* model .surfaceplant .max_peaking_boiler_demand .value / 1000 )
2691
2704
@@ -2972,6 +2985,7 @@ def calculate_cashflow(self, model: Model) -> None:
2972
2985
for i in range (1 , model .surfaceplant .plant_lifetime .value + model .surfaceplant .construction_years .value , 1 ):
2973
2986
self .TotalCummRevenue .value [i ] = self .TotalCummRevenue .value [i - 1 ] + self .TotalRevenue .value [i ]
2974
2987
2988
+ # noinspection SpellCheckingInspection
2975
2989
def _calculate_derived_outputs (self , model : Model ) -> None :
2976
2990
"""
2977
2991
Subclasses should call _calculate_derived_outputs at the end of their Calculate methods to populate output
@@ -2988,5 +3002,11 @@ def _calculate_derived_outputs(self, model: Model) -> None:
2988
3002
self .real_discount_rate .value = self .discountrate .quantity ().to (convertible_unit (
2989
3003
self .real_discount_rate .CurrentUnits )).magnitude
2990
3004
3005
+ if hasattr (self , 'Cwell' ) and hasattr (model .wellbores , 'nprod' ) and hasattr (model .wellbores , 'ninj' ):
3006
+ self .drilling_and_completion_costs_per_well .value = (
3007
+ self .Cwell .value /
3008
+ (model .wellbores .nprod .value + model .wellbores .ninj .value )
3009
+ )
3010
+
2991
3011
def __str__ (self ):
2992
3012
return "Economics"
0 commit comments