Skip to content

Commit 80ad46d

Browse files
set nameplate capacity to max total generation (instead of net) and adjust degradation accordingly
1 parent f5258f5 commit 80ad46d

File tree

4 files changed

+71
-69
lines changed

4 files changed

+71
-69
lines changed

docs/SAM-Economic-Models.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ The following table describes how GEOPHIRES parameters are transformed into SAM
2525

2626
| GEOPHIRES Parameter(s) | SAM Category | SAM Input(s) | SAM Module(s) | SAM Parameter Name(s) | Comment |
2727
|-------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|-----------------------------------|--------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
28-
| `Max Net Electricity Production` | Generation Profile | `Nameplate capacity` | `Singleowner` | `system_capacity` | .. N/A |
28+
| `Maximum Total Electricity Generation` | Generation Profile | `Nameplate capacity` | `Singleowner` | `system_capacity` | .. N/A |
2929
| `Utilizaton Factor` | Generation Profile | `Nominal capacity factor` | `Singleowner` | `user_capacity_factor` | .. N/A |
30-
| `Net Electricity Production` | AC Degradation | `Annual AC degradation rate` schedule | `Utilityrate5` | `degradation` | Percentage difference of each year's `Net Electricity Production` from `Max Net Electricity Production` is input as SAM as the degradation rate schedule in order to match SAM's generation profile to GEOPHIRES |
30+
| `Net Electricity Generation` | AC Degradation | `Annual AC degradation rate` schedule | `Utilityrate5` | `degradation` | Percentage difference of each year's `Net Electricity Generation` from `Maximum Total Electricity Generation` is input as SAM as the degradation rate schedule in order to match SAM's generation profile to GEOPHIRES |
3131
| `Total Capital Cost` + `Investment Tax Credit Value` + (`Inflation Rate During Construction` × `Total Capital Cost`) | Installation Costs | `Total Installed Cost` | `Singleowner` | `total_installed_cost` | ITC, if present, is added to GEOPHIRES total capital cost since SAM handles ITC credits in cash flow analysis. Inflation during construction is treated as an indirect EPC capital cost percentage. |
3232
| `Total O&M Cost`, `Inflation Rate` | Operating Costs | `Fixed operating cost`, `Escalation rate` set to `Inflation Rate` × -1 | `Singleowner` | `om_fixed`, `om_fixed_escal` | .. N/A |
3333
| `Plant Lifetime` | Financial Parameters → Analysis Parameters | `Analysis period` | `CustomGeneration`, `Singleowner` | `CustomGeneration.analysis_period`, `Singleowner.term_tenor` | .. N/A |

src/geophires_x/EconomicsSam.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,18 +197,20 @@ def _get_custom_gen_parameters(model: Model) -> dict[str, Any]:
197197
return ret
198198

199199

200-
def _get_utility_rate_parameters(model: Model) -> dict[str, Any]:
201-
econ = model.economics
200+
def _get_utility_rate_parameters(m: Model) -> dict[str, Any]:
201+
econ = m.economics
202202

203203
ret: dict[str, Any] = {}
204204

205205
ret['inflation_rate'] = econ.RINFL.quantity().to(convertible_unit('%')).magnitude
206206

207-
max_net_kWh_produced = np.max(model.surfaceplant.NetkWhProduced.value)
208-
ret['degradation'] = [
209-
(max_net_kWh_produced - it) / max_net_kWh_produced * 100 for it in model.surfaceplant.NetkWhProduced.value
207+
max_total_kWh_produced = np.max(m.surfaceplant.TotalkWhProduced.value)
208+
degradation_total = [
209+
(max_total_kWh_produced - it) / max_total_kWh_produced * 100 for it in m.surfaceplant.NetkWhProduced.value
210210
]
211211

212+
ret['degradation'] = degradation_total
213+
212214
return ret
213215

214216

@@ -238,7 +240,7 @@ def _get_single_owner_parameters(model: Model) -> dict[str, Any]:
238240
# TODO construction years
239241

240242
# Note generation profile is generated relative to the max in _get_utility_rate_parameters
241-
ret['system_capacity'] = _get_max_net_generation_MW(model) * 1e3
243+
ret['system_capacity'] = _get_max_total_generation_MW(model) * 1e3
242244

243245
# geophires_ctr_tenths = Decimal(econ.CTR.value)
244246
# max_fed_rate_tenths = 0.21
@@ -317,8 +319,8 @@ def _ppa_pricing_model(
317319
)
318320

319321

320-
def _get_max_net_generation_MW(model: Model) -> float:
321-
return np.max(model.surfaceplant.NetElectricityProduced.value)
322+
def _get_max_total_generation_MW(model: Model) -> float:
323+
return np.max(model.surfaceplant.ElectricityProduced.quantity().to(convertible_unit('MW')).magnitude)
322324

323325

324326
def _get_average_net_generation_MW(model: Model) -> float:

0 commit comments

Comments
 (0)