IEEE 8500
These example files are based on the IEEE 8500-node Feeder model, as adapted for the SGIP-3 use case and the NIST TE Challenge 2. This is a larger example and takes longer to run. More information is available at https://pages.nist.gov/TEChallenge/library/ and panel presentations from IEEE ISGT 2018. The backbone feeder model is documented at https://ieeexplore.ieee.org/document/5484381/
Running the base case
A current build of GridLAB-D from branch feature/1048 (or newer feature/1173) is required.
“runIEEE_8500.sh” run the base case. This example simulates one day but can take tens of minutes.
In order to plot results from the JSON files, Python 3 and the matplotlib package can be used:
“./runGLMDiction.sh” will create circuit metadata for plotting.
“plots IEEE_8500” will plot various metrics when the simulation finishes.
Alternatively, you can insert “recorders” into IEEE_8500.glm, which will create CSV files for plotting and post-processing. The simulation takes longer with CSV file output.
Notes on building or modifying the base case:
Weather CSV files were made from the adjust*.m files to create sunny and cloudy days from TMY data.
Feeder generator MATLAB scripts add houses, water heaters, air conditioners, solar panels and batteries to the 8500-node feeder base model in the backbone subdirectory. One produces IEEE_8500.glm for the base case, used by all teams. The other, found under PNNLteam subdirectory, produces inv8500.glm for PNNL simulations of smart inverters.
The house*.csv files contain equivalent thermal parameter (ETP) model parameters exported from GridLAB-D. These may be helpful if simulating houses on your own. See http://gridlab-d.shoutwiki.com/wiki/Residential_module_user%27s_guide for information about GridLAB-D’s house model, including equivalent thermal parameters (ETP).
Base File Directory
adjust_solar_direct.m: MATLAB helper function that ramps the direct solar insulation during a postulated cloud transient
adjust_temperature.m: MATLAB helper function that ramps the temperature during a postulated cloud transient
backbone: the IEEE 8500-node model as defined by the original authors for OpenDSS
CAISO_DAM_and_RTP_SG_LNODE13A_20170706-07_data.xlsx: optional day-ahead market and real-time locational marginal price (LMP) data
clean.bat: Windows batch file that removes output and temporary files
clean.sh: Linux/Mac script that removes output and temporary files
climate.csv: hourly temperature, humidity, solar_direct, solar_diffuse, pressure, wind_speed read by IEEE_8500.glm: copy either sunny.csv or cloudy.csv to this file, depending on which case you wish to run
Cloudy_Day.png: screen shot of process_gld.py plots for the cloudy day
Cloudy_Voltages.png: screen shot of process_voltages.py plots for the cloudy day
cloudy.csv: copy to climate.csv to simulate a day with afternoon cloud transient
Cloudy.fig: MATLAB plot of the correlated cloudy day temperature and solar irradiance
estimate_ac_size.m: MATLAB helper function that estimates the house HVAC load as determined by GridLAB-D’s autosizing feature. These values are embedded as comments in IEEE_8500.glm, which may be useful if modeling the HVAC load as a ZIP load.
gld_strict_name.m: MATLAB helper function to ensure GridLAB-D names don’t start with a number, as they can with OpenDSS files under backbone, but is not allowed in GridLAB-D
house_ca.csv: house ETP parameters from the base case: may be useful for your own house models.
house_cm.csv: house ETP parameters from the base case: may be useful for your own house models.
house_ua.csv: house ETP parameters from the base case: may be useful for your own house models.
house_um.csv: house ETP parameters from the base case: may be useful for your own house models.
IEEE_8500.glm: base case feeder, populated with houses, PV and batteries.
IEEE_8500gener_whouses.m: MATLAB script that produces IEEE_8500.glm from files under backbone
main_regulator.csv: total feeder current in the base case: may be useful in benchmarking your own power flow solver.
PNNLteam: subdirectory with PNNL’s participation files: see next section.
README.md: this file
schedules.glm: cooling, heating, lighting and other end-use appliance schedules referenced by IEEE_8500.glm
substation_load.csv: total feeder load and positive sequence voltage in the base case: may be useful in benchmarking your own power flow solver.
Sunny_Day.png: screen shot of process_gld.py plots for the sunny day
Sunny_Voltages.png: screen shot of process_voltages.py plots for the sunny day
sunny.csv: copy to climate.csv to simulate a clear, sunny day
sunny.fig: MATLAB plot of the correlated sunny day temperature and solar irradiance
TE_Challenge_Metrics.docx: documentation of the use case metrics of interest to the entire NIST TE Challenge 2 team
PNNL Team Files
The subdirectory PNNLteam contains files used only for the pre-cooling thermostat and smart inverter simulations, as presented by PNNL at IEEE ISGT 2018. See the report on NIST TE Challenge 2 for more details. To run these simulations, you will need to install TESP, which includes FNCS and the tesp_support Python package. These simulations require a recent build of GridLAB-D from the feature/1173 branch (newer than the version posted for the base case), which is included with TESP. Also, newer versions of TESP run on Linux only. For Windows or Mac OS X, you will have to run TESP in a virtual machine or Docker container.
inv30.glm is a small 30-house test case with smart inverters, and inv8500.glm is the larger feeder model with smart inverters.
invti30.glm is the 30-house test case with smart inverters, and the house thermal_integrity_level attribute specified instead of the individual R values and airchange_per_hour values. The log file precoolti30.log will contain the house equivalent thermal parameter (ETP) model as estimate from the thermal integrity level.
All three run over FNCS with the precooling agent in tesp_support.precool. Since ISGT 2018, some changes have been made to the precooling agent:
Only 25 houses are allowed to change setpoint at each time step: others wait until a subsequent step
The precooling temperature offset is randomized from 1.9 to 2.1 degrees
These simulations take up to 1 hour to run. Example steps are:
“python3 prepare_cases.py”
“./run8500.sh”
“python3 plots.py inv8500” after the simulation completes
“python3 bill.py inv8500”
“python3 plot_invs.py inv8500”
There are three GridLAB-D definitions near the top of inv30.glm, invti30.glm and inv8500.glm. These determine the solar inverter control modes, and (only) one of them should be enabled. The script files do this on the command line to GridLAB-D, e.g., -D INV_MODE=VOLT_VAR. Inside the GLM files, one and only one of the following lines must be left uncommented:
#define INVERTER_MODE=${INV_MODE}
//#define INVERTER_MODE=CONSTANT_PF
//#define INVERTER_MODE=VOLT_VAR
//#define INVERTER_MODE=VOLT_WATT
InvFeederGen.m was adapted from IEEE_8500gener_whouses.m in the parent directory, to populate inv8500.glm in a similar way, but with smart inverter functions added. See the TESP documentation for guidance on interpreting the other files in this directory.
bill.py: calculates and plots a summary of meter bills
clean.sh: script to clean out log files and output files
inv30.glm: a 30-house test case with smart inverters
inv8500.glm: the 8500-node test case with smart inverters
invti30.glm: a 30-house test case with smart inverters and simplified house thermal integrity inputs
invFeederGen.m: a MATLAB helper script that populates 8500-node with smart inverters, based on the ../backbone directory
kill5570.sh: helper script that stops processes listening on port 5570
parser.py: testing script for parsing FNCS values
plot_invs.py: tabulates and plots the meter with most overvoltage counts
plots.py: plots the GridLAB-D and agent outputs using tesp_support functions
prepare_cases.py: prepares the JSON dictionaries and FNCS configuration for both cases, using tesp_support functions
prices.player: time-of-day rates to publish over FNCS
run30.sh: script that runs the 30-house case, inverters in constant power factor mode
runti30.sh: script that runs the 30-house case with simplified thermal integrity input, and volt-var mode inverters
run8500.sh: script that runs the 8500-node case with no price, voltage or smart inverter response
run8500base.sh: script that runs the 8500-node case, responsive to time-of-use rates and overvoltages
run8500tou.sh: script that runs the 8500-node case, price response to time-of-use rates, no smart inverters
run8500volt.sh: script that runs the 8500-node case, precooling response to overvoltage, no smart inverters
run8500vvar.sh: script that runs the 8500-node case, non-transactive, smart inverter volt-var mode
run8500vwatt.sh: script that runs the 8500-node case, non-transactive, smart inverter volt-watt mode
Copyright (c) 2017-2023 Battelle Memorial Institute