Skip to main content

SCR-Screen

tests Python License: MIT DOI

Open-source short-circuit ratio (SCR) screening for solar, wind, and battery storage interconnection.

SCR-Screen helps interconnection, planning, and siting engineers find weak-grid locations early, before detailed studies are commissioned. It calculates short-circuit strength from a network model, screens single plants (SCR) and groups of nearby plants (WSCR), and produces a clear, self-contained HTML report.

Screening only. SCR-Screen provides screening-level indicators of system strength. Results do not replace interconnection studies, detailed positive-sequence or EMT analysis, or the requirements of the applicable transmission provider.


Why use it

The SCR formula is simple. Getting a trustworthy answer is not:

  • Short-circuit MVA must come from the network, calculated consistently. SCR-Screen computes it from a model, excludes inverter-based resource (IBR) contributions as NERC requires, and states the method used.
  • Nearby plants share grid strength. Two plants that each pass alone can be weak together. SCR-Screen screens groups with WSCR and shows the difference side by side.
  • Siting needs every location, not one. The bus scan ranks every bus in a model for a plant of a given size.
  • Method choice changes answers. SCR-Screen supports both the classical flat-start method (common U.S. planning practice) and IEC 60909, and records which one produced each result.
  • Transparent and reproducible. Open formulas, documented assumptions, automated tests, and a public verification record.

Features

Feature Details
SCR Single plant at its point of interconnection (POI)
WSCR Groups of plants assumed fully interacting (ERCOT/NERC formulation): in direct mode, and in network scans with --groups (live in the report as the plant size changes)
SCRIF SCR with interaction factors: each grouped plant's SCR allowing for how strongly the network couples it to its neighbors (NERC 2017; NREL 2025). Sits between SCR and WSCR
CSCR Composite SCR of a group, with the group's points of interconnection tied together
ESCR Effective SCR: short-circuit MVA minus capacitive shunt compensation at the bus, ÷ plant MW (shown when the network has capacitor banks)
Interaction factors scr-screen interactions lists how strongly buses affect each other and suggests groups for --groups
N-1 worst case scan --n1 removes each line circuit and transformer unit in turn and reports each bus's lowest SCR and the outage that causes it
Rating basis MW (default) or MVA
Short-circuit methods Classical flat-start (1.0 pu) and IEC 60909 (via pandapower)
Bus scan SCR at every bus of a network for a hypothetical plant size
Flags Very weak / weak / no flag, with user-configurable thresholds
Network map Grid drawn from bus coordinates (or an automatic layout), colored by SCR flag, with heat-map shading so weak areas stand out, and an N-1 view. The IEEE 39-bus example uses the standard one-line arrangement, shared with IBR-FaultScreen
Plant-size slider In scan reports, drag to any plant size; every SCR, flag, chart and the map update instantly in the browser
Max plant size Largest plant each location can host before a weak flag (SCMVA ÷ weak threshold)
Method comparison Classical vs IEC 60909 for every bus, highlighting where the flag changes
Cost screening Ranks candidate buses by screening-level cost: synchronous condenser to fix weak grid, gen-tie line, POI substation (all costs are your inputs)
Your own network Reads pandapower JSON, Excel (.xlsx), and MATPOWER (.m/.mat); check lists anything missing before you scan
Outputs Self-contained HTML report (works offline), CSV, JSON
Interfaces Command line (scr-screen) and Python API

Try it without installing

  • SCR-Screen Lite: browser calculator. Type each plant's short-circuit MVA and MW to get SCR, flags, WSCR, the largest plant before a weak flag, and condenser cost. Runs entirely in your browser.
  • Interactive demo report: a full IEEE 39-bus scan (assumed data, illustrative costs). Drag the plant-size slider and change the inputs; two groups of nearby buses show WSCR, CSCR and SCRIF, the heat map shows weak areas, and the N-1 view shows each bus's worst single outage.

Installation

Requires Python 3.10 or newer.

python -m venv venv
# Windows:  venv\Scripts\activate      macOS/Linux:  source venv/bin/activate
pip install scr-screen

From source (for contributors):

git clone https://github.com/ishaibu/scr-screen.git
cd scr-screen
pip install -e ".[dev]"

Quick start (command line)

Try it in one minute with the bundled IEEE 39-bus example:

scr-screen example                      # copies example files into ./scr-screen-example
cd scr-screen-example
scr-screen scan ieee39_assumed.json --plant-mw 1500 --report scan.html --open

Direct mode: you already have short-circuit MVA values (from any study tool).

scr-screen template plants.csv          # creates an input file with example rows
scr-screen run plants.csv --report report.html --out results.csv

Network mode: calculate short-circuit MVA from a pandapower network saved as JSON, and scan every bus.

scr-screen scan examples/ieee39_assumed.json --plant-mw 1500 --report scan.html --open
scr-screen scan examples/ieee39_assumed.json --plant-mw 1500 --method iec60909

--open opens the report in your browser as soon as it is ready.

What-if inputs: scan reports have an inputs panel. Change any of these and the whole report (map, charts, tables, cost ranking) recalculates instantly in the browser, with no re-run needed:

  • plant size (slider or typed value)
  • weak and very-weak SCR thresholds
  • with cost screening: target SCR, condenser X''d, transformer Xt, condenser $/MVA, gen-tie $/mile, and each candidate bus's gen-tie distance and POI cost (edited directly in the cost table)

Reset all returns to the values the report was created with. Invalid entries (e.g. 0 MW) are flagged and ignored.

Screen nearby buses together (WSCR): list buses that would host plants close together in a CSV with columns bus,group, and add --groups. Each bus in a group gets a plant of --plant-mw; the report shows each plant alone and the group's WSCR, and both update with the slider.

scr-screen scan ieee39_assumed.json --plant-mw 1500 --groups ieee39_groups_example.csv --report groups.html --open

WSCR assumes the plants in a group are fully interacting, so group only buses that are electrically close; for buses far apart it is conservative.

Which buses interact, and N-1: list candidate buses to see their interaction factors and get suggested groups, then scan with the groups and the worst single outage:

scr-screen interactions ieee39_assumed.json --buses 4,11,12,13,16,17,26,28,29 --out my_groups.csv
scr-screen scan ieee39_assumed.json --plant-mw 1500 --groups my_groups.csv --n1 --report full.html --open

Suggested groups contain only buses where every pair interacts at least --threshold (default 0.5, a judgment value, not an industry standard).

Run scr-screen --help or scr-screen scan --help for all options (--basis MVA, --weak, --very-weak, --title, --open, --no-compare, --groups, --n1, --no-heatmap).

Use your own network

SCR-Screen works on any network, not just the IEEE 39-bus example.

File type Extension Notes
pandapower JSON .json Native format
pandapower Excel .xlsx Edit in Excel: one sheet per element type (bus, line, trafo, gen, ext_grid, ...)
MATPOWER .m, .mat Converted on load; MATPOWER has no short-circuit data, so add it (below)

Short-circuit data needed:

  • Grid sources (ext_grid): s_sc_max_mva and rx_max.
  • Synchronous generators (gen): xdss_pu (X''d on machine base) and sn_mva. IEC 60909 also needs vn_kv, rdss_ohm, and cos_phi.

Workflow:

scr-screen check mynetwork.m                 # lists exactly what is missing
scr-screen convert mynetwork.m mynetwork.xlsx  # open in Excel, fill in the empty short-circuit columns
scr-screen check mynetwork.xlsx              # "Ready for Classical: yes"
scr-screen scan mynetwork.xlsx --plant-mw 300 --report scan.html --open

Buses with no path to any source are skipped and listed in the report. PSS/E .raw import is planned.

Interconnection cost screening

For a plant of a given size, SCR-Screen estimates a screening-level cost of connecting at each candidate bus:

  • Target check: buses below your target SCR are flagged, with the largest plant that meets the target (SCMVA ÷ target SCR) and the condenser alternative.
  • Weak-grid mitigation: synchronous condenser size to reach a target SCR (default: the weak threshold), condenser MVA = max(0, plant MW × target SCR − SCMVA) × (X''d + Xt), assuming the condenser is at the POI.
  • Gen-tie line: distance × your cost per mile.
  • POI substation or switching station: your cost per bus.
scr-screen sites-template mynetwork.xlsx sites.csv   # list of buses; fill in distance_mi, poi_cost_usd
scr-screen scan mynetwork.xlsx --plant-mw 1500 --report scan.html --site-costs sites.csv \
    --condenser-cost-per-mva 100000 --gen-tie-cost-per-mile 2000000 --cost-out costs.csv

The numbers above and in examples/ieee39_sites_example.csv are illustrative only. SCR-Screen ships no cost data; enter your own. In the report, every cost input is editable and the ranking updates instantly, so you can see the cheapest bus change as the plant grows or as costs change.

Cost screening excludes network upgrades (thermal, voltage, stability), which are often the largest interconnection cost and require power flow and interconnection-queue studies. Grid-forming inverters may mitigate weak-grid conditions at lower cost and are not costed.

Input format (direct mode)

One row per plant. Column order and capitalization do not matter; files saved from Excel as CSV UTF-8 work.

Column Required Description
plant_id Yes Unique label
scmva Yes Three-phase short-circuit MVA at the POI, without IBR contribution
rating_mw Yes Plant rating in MW
rating_mva No Plant rating in MVA (needed only for --basis MVA)
group No Plants sharing a group are also screened together with WSCR
poi_name No Display name of the POI

Numbers must use a dot for decimals and no thousands separators (e.g. 1000, 485.86). Values with commas are rejected rather than guessed.

Python API

from scr_screen.metrics import scr, wscr
from scr_screen.io import read_plants_csv
from scr_screen.screening import screen
from scr_screen.report import write_html_report

scr(500, 100)                          # 5.0
wscr([1000, 600], [200, 100])          # 2.889

plants, poi = read_plants_csv("plants.csv")
result = screen(plants, poi_names=poi)
write_html_report(result, "report.html")

Network mode:

import pandapower as pp
from scr_screen.network import scan_buses

net = pp.from_json("network.json")
for row in scan_buses(net, plant_mw=300, method="classical"):
    print(row.bus, row.name, round(row.scr, 2), row.flag)

See examples/walkthrough.ipynb for a step-by-step tour.

Methods

SCR = SCMVA ÷ plant rating WSCR = Σ(SCMVAᵢ × Pᵢ) ÷ (ΣPᵢ)², assuming the plants in a group fully interact (conservative) SCRIFᵢ = SCMVAᵢ ÷ (Pᵢ + Σⱼ IFᵢⱼ × Pⱼ), with interaction factor IFᵢⱼ = ΔVᵢ ÷ ΔVⱼ = |Zᵢⱼ ÷ Zⱼⱼ| from the network impedance matrix CSCR = short-circuit MVA with the group's POIs tied together ÷ ΣP (NERC ties the plants' medium-voltage buses; those are not in a transmission model) ESCR = (SCMVA − capacitive shunt Mvar at the bus) ÷ plant rating N-1: each line circuit and transformer unit is removed in turn; outages that would leave buses with no source are skipped and listed

SCRIF, CSCR and N-1 use the classical method's network impedance matrix.

Short-circuit method Pre-fault voltage Correction factors Typical use
Classical flat-start (default) 1.0 pu None Common U.S. planning practice
IEC 60909 (max case) c = 1.1 Generator and transformer impedance correction IEC practice

In both methods, inverter-based resources do not contribute to SCMVA.

Default flag bands (user-configurable): below 2 very weak; 2 to below 3 weak; 3 or above no flag. These follow HVDC planning practice (IEEE Std 1204-1997). There is no universal weak-grid threshold: NERC notes there is "no industry standard for what strong, weak, or very weak system strength means" (2017).

Thresholds used in practice (examples from public documents; check the current criteria of your transmission provider):

Source Value Use
NREL/TP-5D00-94961 (2025) SCR < 3 weak, > 5 strong General rule of thumb
SPP, ORNL EMT Workshop (Aug 2023) SCR, WSCR, CSCR below 6.0 Screening: further study (dynamic and/or EMT) generally required
ERCOT Panhandle studies (2016–2019) WSCR 1.5 Regional planning and operating threshold, backed by EMT studies

To screen with a single threshold such as SPP's, set --weak 6 (buses below 6 are then flagged).

Full details: design specification.

Limitations

  • SCR-based metrics assume grid-following inverters and do not replace the inverter manufacturer's minimum SCR.
  • WSCR assumes the plants in a group are fully interacting; SCRIF uses the network's interaction factors instead. Both are single-frequency, steady-state screens and do not capture control interactions; EMT studies with equipment-specific models remain essential below the screening thresholds (NERC, 2023).
  • The heat-map shading is a visual aid: strength is calculated only at buses, not between them.
  • The classical method ignores loads, shunts, and line charging, uses nominal transformer taps, and does not yet model three-winding transformers or closed bus-bus switches. Unsupported elements stop the calculation with a clear error rather than being ignored.
  • Real transmission models are often restricted (e.g. CEII in the U.S.). SCR-Screen ships only public test data; users run it on their own models.
  • Cost screening is screening-level only and excludes network upgrades; all costs are user inputs.

Verification

Every formula is covered by automated tests with hand-calculated expected values, run on each change. Independent engineering checks are recorded in docs/verification.md.

Roadmap

Released

  • v0.1.0 (October 2026): SCR and WSCR, classical and IEC 60909 short-circuit methods, bus scan, your own networks, cost screening with synchronous condenser sizing and target check, interactive report, SCR-Screen Lite.
  • v0.2.0 (October 2026): WSCR groups in network scans (--groups), live group results in the report.
  • v0.3.0 (October 2026): network-aware screening: interaction factors and SCRIF, CSCR, ESCR, suggested groups (interactions), N-1 worst case (--n1), heat-map shading and N-1 view on the network map.

Planned (priorities may change with user feedback; suggest yours in Issues)

  • v0.4: EMT triage: a point-of-interconnection system strength data sheet (SCR, ESCR, SCRIF, CSCR, X/R, Thévenin impedance) with a clear "EMT study recommended" flag based on cited criteria.
  • Later: PSS/E .raw import, generator retirement and interconnection-queue build-out scenarios, and SCRIF in SCR-Screen Lite.

Feedback and contributions

Found a bug, have a question, or use SCR-Screen in your work? Please open an issue. Feedback from utility, ISO/RTO, developer, and consulting engineers is especially welcome.

References

  1. NERC, Integrating Inverter-Based Resources into Low Short Circuit Strength Systems, Reliability Guideline, December 2017.
  2. NERC, Short-Circuit Modeling and System Strength, White Paper, February 2018.
  3. Y. Zhang et al., "Evaluating system strength for large-scale wind plant integration," IEEE PES General Meeting, 2014.
  4. IEEE Std 1204-1997, IEEE Guide for Planning DC Links Terminating at AC Locations Having Low Short-Circuit Capacities.
  5. IEC 60909-0, Short-circuit currents in three-phase a.c. systems.
  6. P. Sharma et al., Existing Methods for Grid Strength Assessment and Role of Hydropower in Future Grids, NREL/TP-5D00-94961, National Renewable Energy Laboratory, November 2025.
  7. NERC, Electromagnetic Transient Modeling for BPS-Connected Inverter-Based Resources: Recommended Model Requirements and Verification Practices, Reliability Guideline, March 2023.
  8. Southwest Power Pool, Planning Session, ORNL EMT Workshop, August 2023 (screening thresholds).
  9. T. Athay, R. Podmore, S. Virmani, "A Practical Method for the Direct Analysis of Transient Stability," IEEE Trans. PAS, vol. PAS-98, no. 2, 1979 (IEEE 39-bus system).

How to cite

If you use SCR-Screen in your work, please cite it:

Ibrahim, S. (2026). SCR-Screen: open-source short-circuit ratio screening for inverter-based resource interconnection [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.23130832

This DOI always points to the latest version. To cite a specific version, use its DOI from the Zenodo record (v0.2.0: 10.5281/zenodo.23441700; v0.1.0: 10.5281/zenodo.23130833). GitHub's Cite this repository button (right sidebar) also gives APA and BibTeX formats.

License and author

MIT License. Created and maintained by Shaibu Ibrahim, P.E.

Metadata

Release files for scr-screen 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scr-screen 0.3.0
File Size Uploaded Provenance Actions
scr_screen-0.3.0.tar.gz 95.7 kB Without provenance Details for scr_screen-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for scr-screen 0.3.0
File Interpreter ABI Platform Actions
scr_screen-0.3.0-py3-none-any.whl Python 3 none any Details for scr_screen-0.3.0-py3-none-any.whl

Total release size: 171.3 kB

Release files / scr_screen-0.3.0.tar.gz

Download URL scr_screen-0.3.0.tar.gz
Size 95.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1568ccc4afffa770536e7ed5a36f5fa3c9d24eb2509d0f643554d63b11b35177
BLAKE2b-256 checksum
How to use checksums
c0b601f553b61b9baca7441805e142dea7d2f0cd2885d2478875ee1a5921b7c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release files / scr_screen-0.3.0-py3-none-any.whl

Download URL scr_screen-0.3.0-py3-none-any.whl
Size 75.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f56d20a44d7d951b2ce651459f36dc2fddeb4c1c1cd473fd41090f780db072fd
BLAKE2b-256 checksum
How to use checksums
fb69da805b6f9b98d4aeab46f54e7912b98fe50a166c6ff05595f170f2783180
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Security for scr-screen 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page