{ "cells": [ { "cell_type": "markdown", "source": [ "# Serializing PowerSystem Data" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "**Originally Contributed by**: Clayton Barrows" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Introduction" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "PowerSystems.jl supports serializing/deserializing data with JSON. This notebook\n", "provides an example of how to write and read a `System` to/from disk." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Dependencies\n", "Let's use a dataset from the [tabular data parsing example](https://nbviewer.jupyter.org/github/NREL-SIIP/SIIPExamples.jl/blob/master/notebook/2_PowerSystems_examples/parse_matpower.ipynb)" ], "metadata": {} }, { "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ Info: Correcting vm in bus 1 to 1.07762 to match generator set-point\n", "[ Info: Correcting vm in bus 3 to 1.1 to match generator set-point\n", "[ Info: Correcting vm in bus 4 to 1.06414 to match generator set-point\n", "[ Info: Correcting vm in bus 10 to 1.06907 to match generator set-point\n", "[ Info: Correcting vm in bus 3 to 1.0 to match generator set-point\n", "┌ Error: Generator voltage set-points for bus 3 are inconsistent. This can lead to unexpected results\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/gGFFl/src/parsers/pm_io/matpower.jl:245\n", "[ Info: Correcting vm in bus 10 to 1.0 to match generator set-point\n", "┌ Error: Generator voltage set-points for bus 10 are inconsistent. This can lead to unexpected results\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/gGFFl/src/parsers/pm_io/matpower.jl:245\n", "[ Info: extending matpower format with data: areas 1x3\n", "[ Info: extending matpower format with data: gen_name 7x4\n", "[ Info: extending matpower format by appending matrix \"gen_name\" in to \"gen\"\n", "[ Info: reversing the orientation of branch 6 (4, 3) to be consistent with other parallel branches\n", "[ Info: the voltage setpoint on generator 6 does not match the value at bus 3\n", "[ Info: the voltage setpoint on generator 7 does not match the value at bus 10\n", "[ Info: removing 1 cost terms from generator 4: [4000.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 1: [1400.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 5: [1000.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 2: [1500.0, 0.0]\n", "[ Info: removing 3 cost terms from generator 6: Float64[]\n", "[ Info: removing 3 cost terms from generator 7: Float64[]\n", "[ Info: removing 1 cost terms from generator 3: [3000.0, 0.0]\n", "┌ Info: Constructing System from Power Models\n", "│ data[\"name\"] = \"nesta_case5_pjm\"\n", "└ data[\"source_type\"] = \"matpower\"\n", "[ Info: Reading bus data\n", "[ Info: Reading generator data\n", "[ Info: Reading branch data\n", "[ Info: Reading branch data\n", "[ Info: Reading DC Line data\n", "[ Info: Reading storage data\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "System\n┌───────────────────┬─────────────┐\n│ Property │ Value │\n├───────────────────┼─────────────┤\n│ System Units Base │ SYSTEM_BASE │\n│ Base Power │ 100.0 │\n│ Base Frequency │ 60.0 │\n│ Num Components │ 30 │\n└───────────────────┴─────────────┘\n\nStatic Components\n┌──────────────────────────┬───────┬────────────────────────┬───────────────┐\n│ Type │ Count │ Has Static Time Series │ Has Forecasts │\n├──────────────────────────┼───────┼────────────────────────┼───────────────┤\n│ Arc │ 6 │ false │ false │\n│ Area │ 1 │ false │ false │\n│ Bus │ 5 │ false │ false │\n│ Line │ 5 │ false │ false │\n│ LoadZone │ 1 │ false │ false │\n│ PhaseShiftingTransformer │ 2 │ false │ false │\n│ PowerLoad │ 3 │ false │ false │\n│ RenewableDispatch │ 2 │ false │ false │\n│ ThermalStandard │ 5 │ false │ false │\n└──────────────────────────┴───────┴────────────────────────┴───────────────┘\n\n", "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
System
PropertyValue
System Units BaseSYSTEM_BASE
Base Power100.0
Base Frequency60.0
Num Components30
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Static Components
TypeCountHas Static Time SeriesHas Forecasts
Arc6falsefalse
Area1falsefalse
Bus5falsefalse
Line5falsefalse
LoadZone1falsefalse
PhaseShiftingTransformer2falsefalse
PowerLoad3falsefalse
RenewableDispatch2falsefalse
ThermalStandard5falsefalse
\n", "\n", "\n", "\n" ] }, "metadata": {}, "execution_count": 1 } ], "cell_type": "code", "source": [ "using SIIPExamples\n", "\n", "pkgpath = dirname(dirname(pathof(SIIPExamples)))\n", "include(joinpath(pkgpath, \"test\", \"2_PowerSystems_examples\", \"02_parse_matpower.jl\"))" ], "metadata": {}, "execution_count": 1 }, { "cell_type": "markdown", "source": [ "### Write data to a temporary directory" ], "metadata": {} }, { "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Serializing to /tmp/jl_KRkz9W/system.json\n", "[ Info: Serialized System to /tmp/jl_KRkz9W/system.json\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "0.025002479553222656" }, "metadata": {}, "execution_count": 2 } ], "cell_type": "code", "source": [ "folder = mktempdir()\n", "path = joinpath(folder, \"system.json\")\n", "println(\"Serializing to $path\")\n", "to_json(sys, path)\n", "\n", "filesize(path) / (1024 * 1024) #MiB" ], "metadata": {}, "execution_count": 2 }, { "cell_type": "markdown", "source": [ "### Read the JSON file and create a new `System`" ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "System\n┌───────────────────┬─────────────┐\n│ Property │ Value │\n├───────────────────┼─────────────┤\n│ System Units Base │ SYSTEM_BASE │\n│ Base Power │ 100.0 │\n│ Base Frequency │ 60.0 │\n│ Num Components │ 30 │\n└───────────────────┴─────────────┘\n\nStatic Components\n┌──────────────────────────┬───────┬────────────────────────┬───────────────┐\n│ Type │ Count │ Has Static Time Series │ Has Forecasts │\n├──────────────────────────┼───────┼────────────────────────┼───────────────┤\n│ Arc │ 6 │ false │ false │\n│ Area │ 1 │ false │ false │\n│ Bus │ 5 │ false │ false │\n│ Line │ 5 │ false │ false │\n│ LoadZone │ 1 │ false │ false │\n│ PhaseShiftingTransformer │ 2 │ false │ false │\n│ PowerLoad │ 3 │ false │ false │\n│ RenewableDispatch │ 2 │ false │ false │\n│ ThermalStandard │ 5 │ false │ false │\n└──────────────────────────┴───────┴────────────────────────┴───────────────┘\n\n", "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
System
PropertyValue
System Units BaseSYSTEM_BASE
Base Power100.0
Base Frequency60.0
Num Components30
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Static Components
TypeCountHas Static Time SeriesHas Forecasts
Arc6falsefalse
Area1falsefalse
Bus5falsefalse
Line5falsefalse
LoadZone1falsefalse
PhaseShiftingTransformer2falsefalse
PowerLoad3falsefalse
RenewableDispatch2falsefalse
ThermalStandard5falsefalse
\n", "\n", "\n", "\n" ] }, "metadata": {}, "execution_count": 3 } ], "cell_type": "code", "source": [ "sys2 = System(path)" ], "metadata": {}, "execution_count": 3 }, { "cell_type": "markdown", "source": [ "---\n", "\n", "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" ], "metadata": {} } ], "nbformat_minor": 3, "metadata": { "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.7.2" }, "kernelspec": { "name": "julia-1.7", "display_name": "Julia 1.7.2", "language": "julia" } }, "nbformat": 4 }