Getting Started
Welcome to 4PACE! This guide will help you set up the environment and run your first modern power system simulation.
Installation
Install 4PACE directly from PyPI using pip:
pip install 4pace
Grid Configuration (YAML)
4PACE utilizes a highly intuitive, declarative YAML format to define your power system topology. You can easily configure complex parameters like Sequence Impedances (\(X_d''\), \(X_0\)), IBR fault current limits, and Transformer grounding connections without writing a single line of Python code.
A standard 4PACE configuration file requires three main blocks: Sbase, buses, and branches.
# 🌍 System Base
Sbase: 100.0 # System Base Power (MVA)
# 🏢 Buses & Components
buses:
- name: "1"
Vbase: 11.0 # Base Voltage (kV)
components:
- type: "SynchronousMachine"
name: "G1"
P_max: 300.0
# ⚡ Sequence Impedances for Fault Analysis
Xd_sub: 0.15 # Positive/Negative Seq Subtransient Reactance (pu)
X0: 0.05 # Zero Seq Reactance (pu)
- name: "2"
Vbase: 22.0
components:
- type: "Inverter"
name: "Solar_Farm_A"
S_max: 50.0
# ☀️ IBR Fault Logic
I_fault_limit_pu: 1.2 # Limits reactive fault current to 1.2x of rated
- type: "Battery"
name: "BESS_1"
P_max: 20.0
capacity_mwh: 40.0
I_fault_limit_pu: 1.5 # BESS can inject up to 1.5x during faults
# 🌉 Branches (Lines & Transformers)
branches:
- type: "TransmissionLine"
from_from: "1"
to_bus: "2"
R: 0.019
X: 0.059
# 📏 Zero Sequence Line Data (Crucial for SLG, DLG, Open Conductor)
X0: 0.177
- type: "Transformer"
from_bus: "2"
to_bus: "3"
X: 0.08
# 🔄 Transformer Grounding Configuration (Controls Zero Sequence Path)
# Available options: "Yg-Yg", "Delta-Yg", "Yg-Delta", "Delta-Delta"
connection_type: "Delta-Yg"
tap_ratio: 1.0
Xd_sub and X0: Mandatory for
SynchronousMachineto establish Norton Equivalent Sources correctly.I_fault_limit_pu: Crucial for
InverterandBattery. If omitted, the system defaults to standard limit (usually 1.2).connection_type: Essential for
Transformer. It acts as a switch determining if Zero Sequence current can pass through the grounding path.
Quick Start: Microgrid Investment Planning & N-1 Security
Co-optimize Solar/BESS CapEx against 24-hour OpEx, then run a Multiverse Security-Constrained OPF to ensure the grid survives any single transmission line failure.
import pandas as pd
from fourpace.psys import Grid
from fourpace.pfa import CEP, SCOPF, Validate_N1
grid = Grid.load('config.yaml')
# Attach a 24-hour load and solar profile
load_profile = pd.read_csv('profile.csv')
grid.attach_profile(load_profile)
# 1. Capacity Expansion Planning (Find optimal BESS/Solar sizes)
CEP(grid, solver='CLARABEL')
# 2. Security-Constrained OPF (Generate rescue plans for N-1 contingencies)
rescue_plan = SCOPF(grid, solver='CLARABEL')
# 3. Non-Linear Physics Auditor (Validate AI-generated dispatch with AC Load Flow)
if rescue_plan:
Validate_N1(grid, rescue_plan)
Quick Start: The “One-Click” Ultimate Fault Analysis
Define your grid, sequence impedances (\(X_d''\), \(X_0\)), and IBR current limits directly in your config.yaml, then run the Iterative Fault Analyzer.
from fourpace.psys import Grid
from fourpace.fault import analyze_faults
# 1. Load system configurations (includes Sequence Network & IBR data)
grid = Grid.load('config.yaml')
# 2. Run Comprehensive Iterative Fault Analysis (Supports Solar & BESS limits!)
# Analyzes: 3PH, SLG, LL, DLG, 1OP, 2OP
master_report_df = analyze_faults(grid, path="Master_Fault_Report.csv", verbose=0)
Quick Start: Transient Stability & Critical Clearing Time (CCT)
Simulate multi-machine dynamics equipped with AVRs, Governors, and FACTS devices to find the exact millisecond a network loses synchronism.
from fourpace.psys import Grid
from fourpace.dynamics import find_cct
grid = Grid.load('config.yaml')
# Launch the Binary Search Engine to find the ultimate CCT for a fault at Bus 2
find_cct(grid, fault_bus="2", t_min=0.01, t_max=0.50, tol=0.002, path='rotor_angle.csv')