- These scripts can be used to simulate HPWHs in residential buildings.
- These scripts were developed to generate a CTA-2045 Implementation Guide for residential HPWHs.
- OCHRE
-
C5_Control_Sweep.py
- This script can run as an uncontrolled baseline, where HPWHs are acting as they normally would.
- To do this, you set Tset = Tshed = Tloadup and each of their deadbands to your baseline deadband width.
- This script acts as an Energy grid service, using PGE's commercial ToU schedule, or using user input.
- You can generate a list of deadband sweeps and it will aggregate results into a parquet file.
- Users can set Tset, Tset_DB, Tshed, Tshed_DB, Loadup_DB, and mode durations.
- This script coordinates loads to avoid impulse-like cold-load-pickups.
- Coordination is currently randomized using weighted start-times/bins and time jitter.
- This script can run as an uncontrolled baseline, where HPWHs are acting as they normally would.
-
C6_LoadupSweep.py
- This script performs a very long LoadUp or Advanced LoadUp and sweeps through deadbands.
- You can generate a list of deadbands to iterate through and it will aggregate results by deadband and one with all data into a parquet file.
- This script requires updated WaterHeater.py and Water.py files to avoid crashing simulation and missing house data.
-
C7_longShed_Sweep.py
- This script sweeps Shed-type temperature deadbands in a loop and aggregates data into one parquet file.
- This is not analogous to an Energy grid service. It is an extended Shed period from 6am - midnight.
- This script was used to stress-test configurations to measure approximate cumulative energy shifted at hour t.
-
C8_Blackstart.py
- This script simulates a Blackstart Support grid service.
- WHs will have a very high cold-load-pickup and need to be carefully energized over a long period of time.
- This script assumes a very long Grid Service event, and energizes over many hours by staggering Normal modes.
- Staggered energization is randomized using weighted start-times/bins and time jitter.
-
C9_Efficiency_Sweep.py
- This script will sweep through Efficiency Levels 1-9.
- Users can set efficiency coefficients in the LVL library.
- Efficiency coefficients are used to change the HP-operating deadband of the HPWH
- HP deadband:
- Upper temperature threshold: Tset
- Lower temperature threshold: Tset - Tset_DB * efficiency_coefficient
- As the efficiency coefficient increases, the HP operating deadband widens, making the unit more efficient.
- Embedded is a sweep through Shed deadbands, as well.
- Each Efficiency Level run will iterate through all Shed deadbands and then aggregate deadband list into one master Efficiency Level parquet file.
- The current script iterates through all Efficiency Levels
-
C10_Reserve.py
- A Reserve service can be simulated by asking a small percentage of aggregated loads to anticipate...the unaticipated!
- Most loads will run as normal for the full simulation period.
- Some loads will consume (Load Up, ALU) during a midday, hypothetical, overgeneration scenario.
- This code needs work to better coordinate participating loads as specific call times...
-
CX_EfficiencyExperiment.py
- This script works similar to C9. It does not use sophisticated ramping--it only randomizes start times about the Shed region according to the jitter variable.
- This script allows for individualized efficiency settings for Baseline, Shed, Load Up regions.
- It sweeps from the LVL library. Variable L gets assigned by the user the efficiency coefficient that initializes a baseline for uncontrolled regions.
- This is kind of a one-and-done script, and I don't expect it to be very useful for future testing.
These scripts are used to run a Monte Carlo Simulation for any aggregated load CSV file (can be changed to parquet). - D0_Parse_Ochre_data.py - D1_Get_ADMD_data.py - D2_Plot_3D_ADMD.py or - D3_Plot_3D_ADMD_LtdTime.py or - D3_Plot_MCS_N.py or - D3_Plot_Time_N.py
- Upload original results CSV file to D0
- Upload results of D0 and run it in D1. This will take a while (10s of minutes) depending on Unit Runs (N-loads) and MCS Runs (currently set to 1000).
- The resultant file can be used in any of the D2/D3 files for plotting the results. Plotting files could use some work to make data input less hardcode-y.
These are some plotting jupyter notebooks I used to make figures for reports/thesis.
- X1_PlotAggregated
- X2_PlotViolin
- Violin plot to show % Difference density across a 95% confidence interval
- Separated results from morning, evening, and full day results
- X3_3DPlot_95CI
- 3D plot script for Joe's ADMD outputs.
- X4_analyzeDB
- Workhorse script used to disaggregate curves from aggregated results.
- Can plot individual day curves from non-aggregated results.
- Includes narrow bar-plot above the main subplot surface to show coordination intervals
- iterates through label names, widths, styles, etc.
- X5_singleHouse_withEfficiency
- This script runs a simulation for a single home, with efficiency capabilities.