Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ Classify the change according to the following categories:
##### Removed
### Patches

## add-outage-prod-option
### Minor Updates
#### Added
Comment on lines +29 to +31
- Inputs **PV.outage_production_fraction** and **Wind.outage_production_fraction** to optionally reduce production during modeled outages. Only applies with multiple outage modeling using inputs outage_start_time_steps and outage_durations.

## v3.23.0
### Minor Updates
##### Changed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.2.26 on 2026-10-01 21:31

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0125_chpoutputs_annual_thermal_curtailed_mmbtu_and_more'),
]

operations = [
migrations.AddField(
model_name='pvinputs',
name='outage_production_fraction',
field=models.FloatField(blank=True, default=1.0, help_text='Fraction of production available during outages. Only applies with multiple outage modeling using inputs outage_start_time_steps and outage_durations.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1.0)]),
),
migrations.AddField(
model_name='windinputs',
name='outage_production_fraction',
field=models.FloatField(blank=True, default=1.0, help_text='Fraction of production available during outages. Only applies with multiple outage modeling using inputs outage_start_time_steps and outage_durations.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1.0)]),
),
]
19 changes: 19 additions & 0 deletions reoptjl/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3284,6 +3284,16 @@ class PV_LOCATION_CHOICES(models.TextChoices):
"Required operating reserves applied to each timestep as a fraction of PV generation serving load in that timestep.")
)

outage_production_fraction = models.FloatField(
validators=[
MinValueValidator(0),
MaxValueValidator(1.0)
],
blank=True,
default=1.0,
help_text=("Fraction of production available during outages. Only applies with multiple outage modeling using inputs outage_start_time_steps and outage_durations.")
)


class PVOutputs(BaseModel, models.Model):
key = "PVOutputs"
Expand Down Expand Up @@ -3624,6 +3634,15 @@ class WIND_SIZE_CLASS_CHOICES(models.TextChoices):
blank=True,
help_text="Land area required per kW of wind capacity in acres/kW; only constrained by this for systems greater than 1500 kW"
)
outage_production_fraction = models.FloatField(
validators=[
MinValueValidator(0),
MaxValueValidator(1.0)
],
blank=True,
default=1.0,
help_text=("Fraction of production available during outages. Only applies with multiple outage modeling using inputs outage_start_time_steps and outage_durations.")
)

def clean(self):
if self.size_class != "" and self.installed_cost_per_kw is None:
Expand Down
6 changes: 4 additions & 2 deletions reoptjl/test/posts/all_inputs_test.json
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,8 @@
"can_wholesale": true,
"can_export_beyond_nem_limit": true,
"can_curtail": true,
"operating_reserve_required_fraction": 0.0
"operating_reserve_required_fraction": 0.0,
"outage_production_fraction": 1.0
},
"Meta": {
"description": "",
Expand Down Expand Up @@ -269,7 +270,8 @@
"can_export_beyond_nem_limit": true,
"can_curtail": true,
"operating_reserve_required_fraction": 0.0,
"acres_per_kw": 0.03
"acres_per_kw": 0.03,
"outage_production_fraction": 1.0
},
"ExistingBoiler": {
"production_type": "hot_water",
Expand Down
Loading