Skip to content

Commit 8ca9d37

Browse files
authored
Merge pull request #1 from sandialabs/v1.0.0
V1.0.0
2 parents d9749f7 + 54fccbb commit 8ca9d37

File tree

13 files changed

+483
-74
lines changed

13 files changed

+483
-74
lines changed
485 KB
Loading
462 KB
Loading

Images/PHS_schedules.png

38.8 KB
Loading

README.md

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66

77
# **QuESt PCM**: A Production Cost Modeling Tool with High-Fidelity Models of Energy Storage Systems
88

9-
Current release version: 0.0.1
10-
11-
Release date: 12/25/2025
9+
Current release version: 1.0.0
1210

1311
## Table of Contents
1412
- [Introduction](#intro)
@@ -26,7 +24,6 @@ Production cost models (PCM) are computational tools that simulate power system
2624
<div style="text-align: center;">
2725
<img src = "Images/QuEST_PCM_IO.png" alt="overview" />
2826
</div>
29-
<!--QuESt Planning documentation is under development and will be available [here](https://github.com/sandialabs/snl-quest).-->
3027

3128
[Back to Top](#top)
3229
## Key Features of QuESt PCM
@@ -135,14 +132,18 @@ Two test cases are included with the initial release of QuESt PCM. One test case
135132

136133
**Figure 1:** IEEE RTS-GMLC Test Case nodal model
137134

138-
Some outputs of Quest PCM for a 5-day RTS-GMLC simulation (included in the [config](config/GMLC_config.yaml) file) are illustrated here. Figure 2 shows the system dispatch, generation costs, and interactive LMP plots obtained from the simulation.
135+
Some outputs of Quest PCM for a 5-day RTS-GMLC simulation (included in the [config](config/GMLC_config.yaml) file) are illustrated as follows:
136+
137+
### System Operation
138+
QuESt PCM provides detailed results for system operation, including chronological unit commitment and economic dispatch decisions, nodal power flows, and generator production levels. While the full set of detailed results is available to users through summary Excel files and structured .json outputs, QuESt PCM also offers system-level operational overview plots for visualization and analysis. For example, Figure 2 illustrates system dispatch, generation costs, and interactive locational marginal price (LMP) plots obtained from the RTS-GMLC simulation.
139139

140140
<img src = "Images/dispatch.png" width="386" alt="Results" /> <img src = "Images/cost.png" width="409" alt="Results" />
141141

142142
<img src = "Images/LMP_image.png" width="800" alt="Results" />
143143

144144
**Figure 2:** 5-day dispatch, costs, and LMPs of the IEEE RTS-GMLC test case.
145145

146+
### Ancillary Services
146147
QuESt PCM also emphasizes on modeling the system ancillary services. It enables users to analyze the revenues earned by generators and storage resources from ancillary service participation through summary Excel sheets and visual plots. Figure 3 presents example plots of real-time ancillary service market-clearing results produced by QuESt PCM for the RTS-GMLC system, with storage systems also contributing to operational reserves.
147148

148149
<img src = "Images/regup_plot.png" width="397" alt="Results" /> <img src = "Images/regdown_plot.png" width="397" alt="Results" />
@@ -151,7 +152,8 @@ QuESt PCM also emphasizes on modeling the system ancillary services. It enables
151152

152153
**Figure 3:** Ancillary service market clearing results for RTS-GMLC.
153154

154-
QuESt PCM provides extensive modeling and visualization capabilities for energy storage systems within production cost models. Currently, the tool supports three distinct storage models—generic, battery, and pumped hydro—each with its own set of operational constraints. Figure 4 illustrates the operation of a generic 50 MW, 150 MWh energy storage system over a five-day simulation of the RTS-GMLC system. Figure 5 presents a comparison of the dispatch characteristics of battery energy storage (BESS) and pumped hydro storage (PHS) units of equivalent capacity, replacing the generic storage model and participating in ancillary service markets.
155+
### Storage Participation in Energy and Ancillary Service Markets
156+
QuESt PCM provides extensive modeling and visualization capabilities for energy storage systems within production cost models. Currently, the tool supports three distinct storage models: generic, battery, and pumped hydro. Each storage system is equipped with its own set of operational constraints. Figure 4 illustrates the operation of a generic 50 MW, 150 MWh energy storage system with charging and discharging-only capability over a five-day simulation of the RTS-GMLC system. Figure 5 presents a comparison of the dispatch characteristics of battery energy storage (BESS) and pumped hydro storage (PHS) units of equivalent capacity, replacing the generic storage model and participating in ancillary service markets.
155157

156158
<table>
157159
<tr>
@@ -170,6 +172,18 @@ QuESt PCM provides extensive modeling and visualization capabilities for energy
170172

171173
**Figure 5:** Battery and pumped hydro storage dispatch in RTS-GMLC with ancillary service participation.
172174

175+
### Detailed Storage Tech-Specific Modeling
176+
177+
QuESt PCM also provides detailed modeling of technology-specific storage operation. In the current release, tech-specific models for two storage technologies are supported: batteries and pumped hydro. For batteries, QuESt PCM evaluates potential degradation arising from system operation. For example, Figure 6 presents two plots showing battery degradation when participating in energy markets only versus participation in both energy and reserve markets. The degradation models used for this evaluation are based on cyclic degradation data from the [batteryarchive](https://www.batteryarchive.org/index.html). Similarly, for pumped-hydro systems, unit-level control constraints are included, such as generator and pump operation limits, flow dynamics, and reservoir interactions. Figure 7 illustrates an example visualization of pumped-hydro unit operation status from the RTS-GMLC five-day simulation.
178+
179+
<img src = "Images/BESS_degradation_arbitrage.png" width="397" alt="Results" /> <img src = "Images/BESS_degradation_ancillaries.png" width="397" alt="Results" />
180+
181+
**Figure 6:** Potential degradation of BESS for different cathode chemistries with charging discharging only (first figure) vs ancillary service participation (second figure).
182+
183+
<img src = "Images/PHS_schedules.png" width="800" alt="Results" />
184+
185+
**Figure 7:** Generator/Pump unit operation schedule of pumped hydro storage in RTS-GMLC.
186+
173187
[Back to Top](#top)
174188
## Acknowledgment
175189
<a id="acknowledgement"></a>

Results/output_readme.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,30 @@ Overall, QuESt PCM presents simulation outputs through the following three forma
1010
A comprehensive Excel workbook that provides high-level summaries of system operation, including overall operational metrics, generation details, energy storage performance, line congestion, and line flow violations under contingency conditions.
1111

1212
2. Visualization Outputs (PNG and Interactive HTML):
13-
A collection of static Matplotlib PNG figures and interactive HTML visualizations illustrating system-wide dispatch, locational marginal prices (LMPs), ancillary service dispatch, and clearing prices. In addition, detailed, storage-specific plots are generated for each energy storage system, showing dispatch behavior, operational costs, revenues, and state-of-charge (SoC) trajectories.
13+
A collection of static Matplotlib PNG figures and interactive HTML visualizations illustrating system-wide dispatch, locational marginal prices (LMPs), ancillary service dispatch, and clearing prices. Day-ahead results are designated with the suffix `_DA`, while real-time market results are designated with `_RT` or no suffix. In addition to system operation plots, detailed storage-specific plots are generated for each energy storage system, showing dispatch behavior, operational costs, revenues, and state-of-charge (SoC) trajectories. Technology-specific detail plots of storage such as degradation of battery storage, generator and pump schedules for pumped hydro storage are also provided.
1414

1515
3. JSON Output Files:
16-
Machine-readable JSON files containing detailed results from the day-ahead unit commitment and real-time economic dispatch simulations. These files include granular information not available in the Excel summaries or plots, such as generator commitment status, startup and shutdown decisions, dispatch levels of thermal units at each timestep, load curtailment at each bus, and transmission line flows over time. For energy storage systems, technology-specific operational details such as generator and pump schedules for pumped hydro storage are also provided.
16+
Machine-readable JSON files containing detailed results from the day-ahead unit commitment and real-time economic dispatch simulations. These files include granular information not available in the Excel summaries or plots, such as generator commitment status, startup and shutdown decisions, dispatch levels of thermal units at each timestep, load curtailment at each bus, and transmission line flows over time. For energy storage systems, technology-specific operational details such as degradation of battery storage, generator and pump schedules for pumped hydro storage are also provided.
1717

1818
Example: For a weekly result export resolution, QuEST PCM outputs are arranged in the directory as follows:
1919

2020
- TimeStamp_Folder/
2121
- Week1-Week2/ (or Week2-Week3, etc.)
22-
- Plotly_Plots/
23-
- Dispatch.html, Costs.html, LMP.html, ...
24-
- Ancillary_Services/
25-
- Regulation_UP.html, Clearing_Prices.html, ...
22+
- plotly_plots/
23+
- Dispatch_DA.html, Dispatch_RT.html, Costs.html, LMP_DA.html, ...
24+
- Ancillary_Services_DA/
25+
- Regulation_UP_DA.html, Clearing_Prices_DA.html, ...
26+
- Ancillary_Services_RT/
27+
- Regulation_UP_RT.html, Clearing_Prices_RT.html, ...
2628
- Storage_1/
2729
- Storage_Dispatch.html, Costs.html, Revenue.html, SoC.html
2830
- Storage_2/...
29-
- PNG_Plots/
30-
- Dispatch.png, Costs.png, LMP.png, ...
31-
- Ancillary_Services/
32-
- Regulation_UP.png, Clearing_Prices.png, ...
31+
- png_plots/
32+
- Dispatch_DA.png, Dispatch_RT.png, Costs.png, LMP_DA.png, ...
33+
- Ancillary_Services_DA/
34+
- Regulation_UP_DA.png, Clearing_Prices_DA.png, ...
35+
- Ancillary_Services_RT/
36+
- Regulation_UP_RT.png, Clearing_Prices_RT.png, ...
3337
- Storage_1/
3438
- Dispatch.png, Costs.png, Revenue.png, SoC.png
3539
- Storage_2/...

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pytest==9.0.2
2525
python-dateutil==2.9.0.post0
2626
pytz==2025.2
2727
PyYAML==6.0.3
28+
rainflow==3.2.0
2829
scipy==1.16.3
2930
seaborn==0.13.2
3031
setuptools==80.9.0

src/market_manager/market_main.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,11 @@ def simulate_market(self):
111111
self.RT_result_dict[current_day], final_RT_sol = self._simulate_real_time(
112112
current_day, RT_timekeys, day, pyomo_DA_sol, md_DA_full, RT_timekeys_set, final_RT_sol, self.data_obj.config.get("run_RTSCED_as")
113113
)
114-
114+
115+
# Evaluate degradation for any BESS in the system
116+
self.utils.evaluate_degradation(self.RT_model, self.RT_result_dict)
117+
pass
118+
115119
def _simulate_day_ahead(self, current_day, DA_timekeys, day, initializer_model):
116120
"""
117121
Runs the Day-Ahead simulation for a single day.

0 commit comments

Comments
 (0)