Summary
We currently implement the PRM by scaling up the stress-period load:
|
* Stress-period load is scaled up by PRM |
|
load_exog(r,h,t)$h_stress(h) = load_exog(r,h,t) * (1 + prm(r,t)) ; |
That's ok if the stress periods have negligible weight (we currently give them a weight of 6 hours / 8766 hours per year, or 0.07% of the total):
|
## Stress period hours are scaled to sum to 6 hours, making 8766 hours (365.25 days) per year |
|
if periodtype.startswith('stress'): |
|
hours = hours / hours.sum() * 6 |
But if we increase their weight, we'd increase the overcounting of the PRM as actual load.
Reasons to consider increasing the stress period weight:
- Better capture frequency of peak- and near-peak conditions, which might allow us to get rid of the min-CF constraint
- Model energy constraints for LDES (H2) during stress periods, as on pb/7year
- Potentially help incorporate peaker operations into state policy considerations
Proposed Changes
It seems like most of the functionality we need for an hourly PRM is already handled by the existing OPRES constraints (which are turned off by default). A rough outline of repurposing these for the PRM would be:
Summary
We currently implement the PRM by scaling up the stress-period load:
ReEDS/reeds/core/solve/2_temporal_params.gms
Lines 774 to 775 in 915def1
That's ok if the stress periods have negligible weight (we currently give them a weight of 6 hours / 8766 hours per year, or 0.07% of the total):
ReEDS/reeds/input_processing/hourly_writetimeseries.py
Lines 623 to 625 in 915def1
But if we increase their weight, we'd increase the overcounting of the PRM as actual load.
Reasons to consider increasing the stress period weight:
Proposed Changes
It seems like most of the functionality we need for an hourly PRM is already handled by the existing
OPRESconstraints (which are turned off by default). A rough outline of repurposing these for the PRM would be:prmas a newortypeorpercparameterOPRES(ortype,i,v,r,h,t)overvori?PRM(r,h,t)variable?