GDM is a python package containing data models for power system assets and datasets. This package is actively being developed at National Renewable Energy Laboratory (NREL).
GDM models distribution networks and utility substations as complementary
systems. DistributionSystem represents feeder and network connectivity;
SubstationSystem represents station topology, primary equipment, protection,
metering, and automation. They can remain separate or be joined at explicit
feeder boundaries. See the system model guide and the
guide to connecting systems.
You can install the latest version of grid-data-models from PyPi.
pip install grid-data-modelsIn an effort to reduce code duplication and provide client packages a standard interface to interact with power system data, a group of research engineers at NREL is working on developing standard data models. Features:
- Built-in validation layer: Use of pydantic allows us to validate model fields.
- Time series data management: GDM uses infrasys package which enables efficient time series data management by sharing arrays across components and offloading system memory. For example, we can attach time series power consumption data to a load profile.
- Built-in unit conversion: GDM leverages pint for unit conversion for power system quantities. For example, power, voltage, time, etc.
- JSON serialization/deserialization: GDM uses infrasys to serialize and deserialize distribution system components to/from JSON.
- Track System Changes: Supports tracking changes within a distribution model (both temporal and scenario-based static updates), enabling powerful scenario management capabilities.
- Graph-Based Analysis: Exposes a connectivity graph using NetworkX, allowing advanced graph-based algorithms and visualizations.
- Interoperability: Easily integrates with existing tools.
- Model reduction: Built-in support for multiple model reduction algorithms.
Loads use PhaseLoadEquipment ZIP coefficients. Optional voltage bounds and a
ZIP cutoff describe operating behavior; paired active/reactive voltage exponents
represent exponential loads without storing simulator model numbers.
Aggregation requires matching voltage behavior.
Transformer equipment exposes magnetizing_current_pct.
SequenceImpedanceBranchEquipmentBase shares typed sequence quantities between
branch and switch equipment. SequenceImpedanceSwitch represents three-phase
switches; its equipment can produce an equivalent ABC matrix through
to_matrix_equipment() (negative sequence equals positive sequence).
Matrix-defined switches continue to use MatrixImpedanceSwitch.
Its optional conductor_phases maps each matrix row/conductor to a phase at
both terminals, preserving parallel conductors on the same phase. phases
remains unique; is_closed has one entry per conductor (num_conductors).
Models containing generic equipment need only GDM to deserialize. Simulator-specific translation belongs in external readers and writers, not GDM.
To get started, you can clone and pip install this library from here.
GDM includes an MCP server that enables AI assistants to interact with power system models through natural language. The MCP integration provides:
- System inspection and analysis - Query components, analyze topology, validate connectivity
- Validation and diagnostics - Diagnose errors, suggest fixes, and automatically apply corrections
- System operations - Merge, split, and extract subsystems
- Documentation and API access - Search documentation and get component API references
To install with MCP support:
pip install -e ".[mcp]"To run the MCP server:
gdm-mcp-serverFor more details, see the MCP documentation.
- Aadil Latif
- Daniel Thom
- Jeremy Keen
- Kapil Duwadi
- Tarek Elgindy
- Pedro Andres Sanchez Perez