SDOM Documentation
Welcome to the Storage Deployment Optimization Model (SDOM) documentation!
SDOM is an open-source, high-resolution grid capacity-expansion framework developed by the National Lab of the Rockies (NLR). It’s purpose-built to optimize the deployment and operation of energy storage technologies, leveraging hourly temporal resolution and granular spatial representation of Variable Renewable Energy (VRE) sources such as solar and wind.
Key Features
⚡ Accurate Storage Representation: Short, long, and seasonal storage technologies
📆 Hourly Resolution: Full 8760-hour annual simulation
🌍 Spatial Granularity: Fine-grained VRE resource representation
🔌 Copper Plate Modeling: Computationally efficient system optimization
💰 Cost Minimization: Optimizes total system cost (CAPEX + OPEX)
🐍 Open Source: Fully Python-based using Pyomo
Installation
System Setup and Prerequisites
a. You’ll need to install python
After the installation make sure the python enviroment variable is set.
b. Also, You’ll need an IDE (Integrated Development Environment), we recommend to install MS VS code
c. We also recommend to install extensions such as:
Python (required): Provides Python language support, debugging, environment selection, and IntelliSense in VS Code.
edit CSV: To edit and interact with input csv files for SDOM directly in vs code.
vscode-pdf: to read and see pdf files directly in vscode.
Installing SDOM python package
# Install uv if you haven't already
pip install uv
# Create virtual environment
uv venv .venv
# Activate (Windows PowerShell)
.venv\Scripts\Activate.ps1
# Activate (Unix/MacOS)
source .venv/bin/activate
# Install SDOM
uv pip install sdom
# Or install from source
uv pip install -e .
Windows only — verify that python and uv are on your PATH:
# Run in PowerShell (or cmd). Each command should print a full path.
where.exe python
where.exe uv
If either command prints INFO: Could not find files for the given pattern(s)., the executable is not on your PATH. Re-check the Python installer option Add python.exe to PATH, or reinstall uv and open a new terminal so PATH changes take effect.
Fix it manually (no admin required) — add the missing folders to your User PATH:
Locate the install folder(s). Common defaults are:
Python:
%LOCALAPPDATA%\Programs\Python\Python3xx\and%LOCALAPPDATA%\Programs\Python\Python3xx\Scripts\uv:%USERPROFILE%\.local\bin\(official installer) or theScriptsfolder of the Python you used withpip install uv
You can list installed Python versions with:
Get-ChildItem "$env:LOCALAPPDATA\Programs\Python" -Directory
Append the folder(s) to your User PATH (persists across sessions, no admin needed). Edit the
$newPathslist to match what you found in step 1, then run:$newPaths = @( "$env:LOCALAPPDATA\Programs\Python\Python312", "$env:LOCALAPPDATA\Programs\Python\Python312\Scripts", "$env:USERPROFILE\.local\bin" ) $userPath = [Environment]::GetEnvironmentVariable("Path", "User") $updated = (@($userPath.TrimEnd(';')) + $newPaths) -join ';' [Environment]::SetEnvironmentVariable("Path", $updated, "User")
Close and reopen your terminal (and VS Code) so the new PATH is picked up, then re-run
where.exe pythonandwhere.exe uvto confirm both now resolve.
Quick Start
from sdom import (
load_data,
initialize_model,
run_solver,
get_default_solver_config_dict,
export_results
)
# Load input data
data = load_data("./Data/your_scenario/")
# Initialize model (8760 hours = full year)
model = initialize_model(data, n_hours=8760)
# Configure solver
solver_config = get_default_solver_config_dict(
solver_name="cbc",
executable_path="./Solver/bin/cbc.exe"
)
# Solve optimization problem - returns OptimizationResults object
results = run_solver(model, solver_config)
# Access results
if results.is_optimal:
print(f"Total Cost: ${results.total_cost:,.2f}")
print(f"Wind Capacity: {results.total_cap_wind:.2f} MW")
print(f"Solar Capacity: {results.total_cap_pv:.2f} MW")
# Export results to CSV files
export_results(results, case="scenario_1", output_dir="./results/")
Documentation Contents
User Guide
Publications and Use Cases
SDOM has been used in various research studies to analyze storage deployment needs under different renewable energy scenarios. See the publications page for details.
Contributing
We welcome contributions! Please see our Contributing Guidelines for details on how to:
Lear how you can set-up your enviroment to contribute to SDOM source code
Report bugs
Suggest enhancements
Submit pull requests
Run tests locally
License
SDOM is released under the MIT License.