Skip to content

Commit 12e22db

Browse files
Add Overnight Capital Cost (OCC) output parameter. Only display OCC/IDC if there are multiple construction years
1 parent fab5a17 commit 12e22db

12 files changed

+64
-27
lines changed

src/geophires_x/Economics.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
from geophires_x.EconomicsUtils import BuildPricingModel, wacc_output_parameter, nominal_discount_rate_parameter, \
1414
real_discount_rate_parameter, after_tax_irr_parameter, moic_parameter, project_vir_parameter, \
1515
project_payback_period_parameter, inflation_cost_during_construction_output_parameter, \
16-
interest_during_construction_output_parameter, total_capex_parameter_output_parameter
16+
interest_during_construction_output_parameter, total_capex_parameter_output_parameter, \
17+
overnight_capital_cost_output_parameter
1718
from geophires_x.GeoPHIRESUtils import quantity
1819
from geophires_x.OptionList import Configuration, WellDrillingCostCorrelation, EconomicModel, EndUseOptions, PlantType, \
1920
_WellDrillingCostCorrelationCitation
@@ -2216,6 +2217,10 @@ def __init__(self, model: Model):
22162217
PreferredUnits=PercentUnit.PERCENT,
22172218
CurrentUnits=PercentUnit.PERCENT
22182219
)
2220+
2221+
self.overnight_capital_cost = self.OutputParameterDict[
2222+
self.overnight_capital_cost.Name] = overnight_capital_cost_output_parameter()
2223+
22192224
self.accrued_financing_during_construction_percentage = self.OutputParameterDict[
22202225
self.accrued_financing_during_construction_percentage.Name] = OutputParameter(
22212226
Name='Accrued financing during construction',
@@ -3507,6 +3512,9 @@ def _calculate_sam_economics(self, model: Model) -> None:
35073512
self.CCap.value = (self.sam_economics_calculations.capex.quantity()
35083513
.to(self.CCap.CurrentUnits.value).magnitude)
35093514

3515+
self.overnight_capital_cost.value = (self.sam_economics_calculations.overnight_capital_cost.quantity()
3516+
.to(self.overnight_capital_cost.CurrentUnits.value).magnitude)
3517+
35103518
self.interest_during_construction.value = quantity(
35113519
self.sam_economics_calculations.pre_revenue_costs_and_cash_flow.interest_during_construction_usd,
35123520
'USD'

src/geophires_x/EconomicsSam.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
project_payback_period_parameter,
3939
total_capex_parameter_output_parameter,
4040
royalty_cost_output_parameter,
41+
overnight_capital_cost_output_parameter,
4142
)
4243
from geophires_x.EconomicsSamPreRevenue import (
4344
_TOTAL_AFTER_TAX_RETURNS_CASH_FLOW_ROW_NAME,
@@ -64,6 +65,8 @@ class SamEconomicsCalculations:
6465
)
6566
)
6667

68+
overnight_capital_cost: OutputParameter = field(default_factory=overnight_capital_cost_output_parameter)
69+
6770
capex: OutputParameter = field(default_factory=total_capex_parameter_output_parameter)
6871

6972
royalties_opex: OutputParameter = field(default_factory=royalty_cost_output_parameter)
@@ -284,6 +287,10 @@ def sf(_v: float, num_sig_figs: int = 5) -> float:
284287
pre_revenue_costs_and_cash_flow=calculate_pre_revenue_costs_and_cashflow(model),
285288
)
286289

290+
sam_economics.overnight_capital_cost.value = (
291+
model.economics.CCap.quantity().to(sam_economics.overnight_capital_cost.CurrentUnits.value).magnitude
292+
)
293+
287294
sam_economics.lcoe_nominal.value = sf(single_owner.Outputs.lcoe_nom)
288295
sam_economics.after_tax_irr.value = sf(_get_after_tax_irr_pct(single_owner, cash_flow, model))
289296

src/geophires_x/EconomicsUtils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,19 @@ def wacc_output_parameter() -> OutputParameter:
129129
)
130130

131131

132+
def overnight_capital_cost_output_parameter() -> OutputParameter:
133+
return OutputParameter(
134+
Name='Overnight Capital Cost',
135+
UnitType=Units.CURRENCY,
136+
PreferredUnits=CurrencyUnit.MDOLLARS,
137+
CurrentUnits=CurrencyUnit.MDOLLARS,
138+
ToolTipText='Overnight Capital Cost (OCC) represents the total capital cost required '
139+
'to construct the plant if it were built instantly ("overnight"). '
140+
'This value excludes time-dependent costs such as inflation and '
141+
'interest incurred during the construction period.',
142+
)
143+
144+
132145
def inflation_cost_during_construction_output_parameter() -> OutputParameter:
133146
return OutputParameter(
134147
Name='Inflation costs during construction',

src/geophires_x/Outputs.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -515,19 +515,26 @@ def PrintOutputs(self, model: Model):
515515
# expenditure.
516516
pass
517517

518-
display_inflation_and_interest_during_construction_in_capital_costs = is_sam_econ_model
519-
if display_inflation_and_interest_during_construction_in_capital_costs:
520-
icc_label = Outputs._field_label(econ.inflation_cost_during_construction.display_name, 47)
521-
f.write(f' {icc_label}{econ.inflation_cost_during_construction.value:10.2f} {econ.inflation_cost_during_construction.CurrentUnits.value}\n')
518+
display_occ_and_idc_in_capital_costs = is_sam_econ_model \
519+
and model.surfaceplant.construction_years.value > 1
520+
if display_occ_and_idc_in_capital_costs:
521+
occ_label = Outputs._field_label(econ.overnight_capital_cost.display_name, 47)
522+
f.write(
523+
f' {occ_label}{econ.overnight_capital_cost.value:10.2f} {econ.overnight_capital_cost.CurrentUnits.value}\n')
522524

523525
idc_label = Outputs._field_label(econ.interest_during_construction.display_name, 47)
524526
f.write(
525527
f' {idc_label}{econ.interest_during_construction.value:10.2f} {econ.interest_during_construction.CurrentUnits.value}\n')
526528

527-
if econ.DoAddOnCalculations.value:
528-
# Non-SAM econ models print this in Extended Economics profile
529-
aoc_label = Outputs._field_label(model.addeconomics.AddOnCAPEXTotal.display_name, 47)
530-
f.write(f' {aoc_label}{model.addeconomics.AddOnCAPEXTotal.value:10.2f} {model.addeconomics.AddOnCAPEXTotal.CurrentUnits.value}\n')
529+
display_inflation_during_construction_in_capital_costs = is_sam_econ_model
530+
if display_inflation_during_construction_in_capital_costs:
531+
icc_label = Outputs._field_label(econ.inflation_cost_during_construction.display_name, 47)
532+
f.write(f' {icc_label}{econ.inflation_cost_during_construction.value:10.2f} {econ.inflation_cost_during_construction.CurrentUnits.value}\n')
533+
534+
if is_sam_econ_model and econ.DoAddOnCalculations.value:
535+
# Non-SAM econ models print this in Extended Economics profile
536+
aoc_label = Outputs._field_label(model.addeconomics.AddOnCAPEXTotal.display_name, 47)
537+
f.write(f' {aoc_label}{model.addeconomics.AddOnCAPEXTotal.value:10.2f} {model.addeconomics.AddOnCAPEXTotal.CurrentUnits.value}\n')
531538

532539
capex_param = econ.CCap if not is_sam_econ_model else econ.capex_total
533540
capex_label = Outputs._field_label(capex_param.display_name, 50)

src/geophires_x_client/geophires_x_result.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ class GeophiresXResult:
266266
'Total surface equipment costs',
267267
'Exploration costs',
268268
'Investment Tax Credit',
269+
'Overnight Capital Cost',
269270
# Displayed for economic models that treat inflation costs as capital costs (SAM-EM)
270271
'Inflation costs during construction',
271272
'Interest during construction',

src/geophires_x_schema_generator/geophires-result.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,11 @@
442442
"description": "Investment Tax Credit Value",
443443
"units": "MUSD"
444444
},
445+
"Overnight Capital Cost": {
446+
"type": "number",
447+
"description": "Overnight Capital Cost (OCC) represents the total capital cost required to construct the plant if it were built instantly (\"overnight\"). This value excludes time-dependent costs such as inflation and interest incurred during the construction period.",
448+
"units": "MUSD"
449+
},
445450
"Inflation costs during construction": {
446451
"type": "number",
447452
"description": "The calculated amount of cost escalation due to inflation over the construction period.",

tests/examples/Fervo_Project_Cape-4.out

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Simulation Metadata
66
----------------------
77
GEOPHIRES Version: 3.10.10
88
Simulation Date: 2025-11-25
9-
Simulation Time: 09:34
10-
Calculation Time: 1.737 sec
9+
Simulation Time: 09:48
10+
Calculation Time: 1.719 sec
1111

1212
***SUMMARY OF RESULTS***
1313

@@ -104,7 +104,6 @@ Simulation Metadata
104104
Total surface equipment costs: 1560.49 MUSD
105105
Exploration costs: 30.00 MUSD
106106
Inflation costs during construction: 59.82 MUSD
107-
Interest during construction: 0.00 MUSD
108107
Total CAPEX: 2660.87 MUSD
109108

110109

tests/examples/example_SAM-single-owner-PPA-2.out

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Simulation Metadata
66
----------------------
77
GEOPHIRES Version: 3.10.10
88
Simulation Date: 2025-11-25
9-
Simulation Time: 09:34
10-
Calculation Time: 0.977 sec
9+
Simulation Time: 09:48
10+
Calculation Time: 0.976 sec
1111

1212
***SUMMARY OF RESULTS***
1313

@@ -105,7 +105,6 @@ Simulation Metadata
105105
Total surface equipment costs: 969.26 MUSD
106106
Exploration costs: 30.00 MUSD
107107
Inflation costs during construction: 76.64 MUSD
108-
Interest during construction: 0.00 MUSD
109108
Total CAPEX: 1609.42 MUSD
110109

111110

tests/examples/example_SAM-single-owner-PPA-3.out

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Simulation Metadata
66
----------------------
77
GEOPHIRES Version: 3.10.10
88
Simulation Date: 2025-11-25
9-
Simulation Time: 09:34
10-
Calculation Time: 1.174 sec
9+
Simulation Time: 09:48
10+
Calculation Time: 1.151 sec
1111

1212
***SUMMARY OF RESULTS***
1313

@@ -106,7 +106,6 @@ Simulation Metadata
106106
Total surface equipment costs: 150.23 MUSD
107107
Exploration costs: 3.89 MUSD
108108
Inflation costs during construction: 13.12 MUSD
109-
Interest during construction: 0.00 MUSD
110109
Total Add-on CAPEX: 50.00 MUSD
111110
Total CAPEX: 275.47 MUSD
112111

tests/examples/example_SAM-single-owner-PPA-4.out

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Simulation Metadata
66
----------------------
77
GEOPHIRES Version: 3.10.10
88
Simulation Date: 2025-11-25
9-
Simulation Time: 09:34
10-
Calculation Time: 1.178 sec
9+
Simulation Time: 09:48
10+
Calculation Time: 1.143 sec
1111

1212
***SUMMARY OF RESULTS***
1313

@@ -107,7 +107,6 @@ Simulation Metadata
107107
Total surface equipment costs: 152.93 MUSD
108108
Exploration costs: 3.89 MUSD
109109
Inflation costs during construction: 10.75 MUSD
110-
Interest during construction: 0.00 MUSD
111110
Total CAPEX: 225.81 MUSD
112111

113112

0 commit comments

Comments
 (0)