@@ -1633,18 +1633,29 @@ def __init__(self, model: Model):
16331633 f'Provide { self .ccexplfixed .Name } to override the default correlation and set your own cost.'
16341634 )
16351635
1636+ # noinspection SpellCheckingInspection
16361637 self .Cwell = self .OutputParameterDict [self .Cwell .Name ] = OutputParameter (
16371638 Name = "Wellfield cost" ,
16381639 display_name = 'Drilling and completion costs' ,
16391640 UnitType = Units .CURRENCY ,
16401641 PreferredUnits = CurrencyUnit .MDOLLARS ,
16411642 CurrentUnits = CurrencyUnit .MDOLLARS ,
16421643
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
16451645 ToolTipText = "Includes total drilling and completion cost of all injection and production wells and "
16461646 "laterals, plus 5% indirect costs."
16471647 )
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+ )
16481659 self .Coamwell = self .OutputParameterDict [self .Coamwell .Name ] = OutputParameter (
16491660 Name = "O&M Wellfield cost" ,
16501661 display_name = 'Wellfield maintenance costs' ,
@@ -2313,7 +2324,9 @@ def Calculate(self, model: Model) -> None:
23132324 else :
23142325 self .cost_lateral_section .value = 0.0
23152326 # 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
23172330 self .Cwell .value = 1.05 * ((self .cost_one_production_well .value * model .wellbores .nprod .value ) +
23182331 (self .cost_one_injection_well .value * model .wellbores .ninj .value ) +
23192332 self .cost_lateral_section .value )
@@ -2972,6 +2985,7 @@ def calculate_cashflow(self, model: Model) -> None:
29722985 for i in range (1 , model .surfaceplant .plant_lifetime .value + model .surfaceplant .construction_years .value , 1 ):
29732986 self .TotalCummRevenue .value [i ] = self .TotalCummRevenue .value [i - 1 ] + self .TotalRevenue .value [i ]
29742987
2988+ # noinspection SpellCheckingInspection
29752989 def _calculate_derived_outputs (self , model : Model ) -> None :
29762990 """
29772991 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:
29883002 self .real_discount_rate .value = self .discountrate .quantity ().to (convertible_unit (
29893003 self .real_discount_rate .CurrentUnits )).magnitude
29903004
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+
29913011 def __str__ (self ):
29923012 return "Economics"
0 commit comments