Skip to content

Commit 2db64b8

Browse files
fix SAM-EM Other Incentives handling. WIP to adjust Other Incentives to be output after OCC
1 parent 4fc2b34 commit 2db64b8

5 files changed

Lines changed: 129 additions & 3 deletions

File tree

src/geophires_x/Economics.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3455,7 +3455,14 @@ def calculate_total_capital_costs(self, model: Model) -> None:
34553455
self.CCap.value = self.CCap.value - self.RITCValue.value
34563456

34573457
# Add in the FlatLicenseEtc, OtherIncentives, & TotalGrant
3458-
self.CCap.value = self.CCap.value + self.FlatLicenseEtc.value - self.OtherIncentives.value - self.TotalGrant.value
3458+
# Add in the FlatLicenseEtc, OtherIncentives, & TotalGrant
3459+
if self.econmodel.value != EconomicModel.SAM_SINGLE_OWNER_PPA:
3460+
self.CCap.value = (
3461+
self.CCap.value
3462+
+ self.FlatLicenseEtc.value
3463+
- self.OtherIncentives.value
3464+
- self.TotalGrant.value
3465+
)
34593466

34603467
def calculate_operating_and_maintenance_costs(self, model: Model) -> None:
34613468
# O&M costs

src/geophires_x/EconomicsSam.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,16 @@ def sf(_v: float, num_sig_figs: int = 5) -> float:
238238
sam_economics.after_tax_irr.value = sf(_get_after_tax_irr_pct(single_owner, cash_flow_operational_years, model))
239239

240240
sam_economics.project_npv.value = sf(_get_project_npv_musd(single_owner, cash_flow_operational_years, model))
241-
sam_economics.capex.value = single_owner.Outputs.adjusted_installed_cost * 1e-6
241+
# Add back ibi_oth_amount (OtherIncentives + TotalGrant) which SAM subtracts from
242+
# total_installed_cost to compute adjusted_installed_cost. Incentives are still applied
243+
# by SAM natively in the cash flow / tax basis calculations; we just don't want them to
244+
# also reduce the reported Total CAPEX (which would be inconsistent with Overnight Capital
245+
# Cost, since CCap is no longer reduced by incentives for SAM Economic Models -- see
246+
# Economics.calculate_capital_costs).
247+
_ibi_oth_usd = (
248+
(model.economics.OtherIncentives.quantity() + model.economics.TotalGrant.quantity()).to('USD').magnitude
249+
)
250+
sam_economics.capex.value = (single_owner.Outputs.adjusted_installed_cost + _ibi_oth_usd) * 1e-6
242251

243252
if model.economics.has_royalties:
244253
combined_royalties_usd = [

src/geophires_x/Outputs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ def PrintOutputs(self, model: Model):
531531

532532
additional_capex_modifiers: list[tuple[Parameter, int]] = [
533533
(econ.FlatLicenseEtc, 1),
534-
(econ.OtherIncentives, -1),
534+
(econ.OtherIncentives, -1), # FIXME WIP display after OCC instead of before
535535
(econ.TotalGrant, -1)
536536
]
537537
for additional_capex_modifier_entry in additional_capex_modifiers:
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# *** ECONOMIC/FINANCIAL PARAMETERS ***
2+
# *************************************
3+
4+
Economic Model, 5, -- SAM Single Owner PPA
5+
6+
Starting Electricity Sale Price, 0.12
7+
Electricity Escalation Rate Per Year, 0.00057
8+
Ending Electricity Sale Price, 0.16
9+
Electricity Escalation Start Year, 1
10+
11+
Discount Rate, 0.12
12+
Royalty Holder Discount Rate, 0.10
13+
14+
Fraction of Investment in Bonds, 0.85
15+
Inflated Bond Interest Rate, 0.07
16+
17+
Inflation Rate, 0.027
18+
19+
Construction Years, 2
20+
Construction CAPEX Schedule, 0.01,0.01,0.03,0.05,0.2,0.3,0.4
21+
Inflated Bond Interest Rate During Construction, 0.105
22+
23+
Investment Tax Credit Rate, 0.3
24+
Property Tax Rate, 0.0055
25+
Other Incentives, 5, -- Triggers the double-counting bug in combination with SAM-EM
26+
One-time Flat License Fees Etc, 1.5
27+
28+
Capital Cost for Power Plant for Electricity Generation, 2000
29+
Field Gathering System Capital Cost Adjustment Factor, 0.54
30+
31+
Reservoir Stimulation Capital Cost per Injection Well, 0
32+
# Production wells are not stimulated (parameter intentionally omitted)
33+
34+
# *** SURFACE & SUBSURFACE TECHNICAL PARAMETERS ***
35+
# *************************************************
36+
37+
End-Use Option, 1, -- Electricity
38+
Power Plant Type, 2, -- Supercritical ORC
39+
Plant Lifetime, 20
40+
41+
Injectivity Index, 12.8
42+
Productivity Index, 4.6
43+
44+
Reservoir Model, 4, -- ANNUAL_PERCENTAGE
45+
Drawdown Parameter Schedule, 0.003,0.001,0.0 * 10,0.001 * 3,0.002 * 3,0.003 * 3,0.004 * 3,0.005 * 4,0.006
46+
47+
Maximum Drawdown, 1
48+
49+
Reservoir Volume Option, 1, -- FRAC_NUM_SEP (geometry used to size HSA volume; no real fractures)
50+
Number of Fractures per Stimulated Well, 1
51+
Fracture Shape, 4, -- RECTANGULAR
52+
Fracture Width, 3300
53+
Fracture Height, 40
54+
Fracture Separation, 960
55+
56+
Production Flow Rate per Well, 107
57+
58+
Number of Injection Wells per Production Well, 0.75
59+
60+
Production Well Diameter, 8.535
61+
Injection Well Diameter, 8.535
62+
63+
Ramey Production Wellbore Model, True
64+
Injection Temperature, 50
65+
66+
Water Loss Fraction, 0.05
67+
68+
Utilization Factor, 0.913
69+
Plant Outlet Pressure, 9.65 bar
70+
Production Wellhead Pressure, 10.34 bar
71+
Circulation Pump Efficiency, 0.80
72+
73+
Well Geometry Configuration, 4, -- L: Vertical section plus lateral(s)
74+
75+
Number of Production Wells, 8
76+
Number of Multilateral Sections, 8
77+
Nonvertical Length per Multilateral Section, 1600
78+
All-in Nonvertical Drilling Costs, 2053.9081603055893
79+
Combined Income Tax Rate, 0.2448
80+
Well Drilling Cost Correlation, 16
81+
Royalty Rate Schedule, 0.08
82+
Bond Financing Start Year, -1
83+
84+
# *** SCENARIO-SPECIFIC RESERVOIR PARAMETERS ***
85+
# **********************************************
86+
Gradient 1, 43.4
87+
Reservoir Depth, 2.8
88+
Surface Temperature, 10.5
89+
Ambient Temperature, 3.0
90+
Reservoir Heat Capacity, 1200.0
91+
Reservoir Density, 2500.0
92+
Reservoir Thermal Conductivity, 3.0
93+
Reservoir Porosity, 0.17
94+
95+
# *** SIMULATION PARAMETERS ***
96+
# *****************************
97+
Time steps per year, 12
98+
Print Output to Console, 0

tests/geophires_x_tests/test_economics_sam.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,6 +1423,18 @@ def _itc_output_q(r: GeophiresXResult) -> dict[str, float]:
14231423
_itc_output_q(r_fed_itc_rate_and_state_itc_amount),
14241424
)
14251425

1426+
def test_other_incentives_and_one_time_flat_fees(self):
1427+
r: GeophiresXResult = GeophiresXClient().get_geophires_result(
1428+
ImmutableGeophiresInputParameters(
1429+
from_file_path=self._get_test_file_path('other-incentives-and-one-time-flat-fees.txt'),
1430+
)
1431+
)
1432+
1433+
self.assertGreater(
1434+
r.result['CAPITAL COSTS (M$)']['Total CAPEX']['value'],
1435+
r.result['CAPITAL COSTS (M$)']['Overnight Capital Cost']['value'],
1436+
)
1437+
14261438
@staticmethod
14271439
def _new_model(
14281440
input_file: Path,

0 commit comments

Comments
 (0)