Version 0.8.15 — 2026-07-22
DC power flow, faster linear solves, Web UI overhaul
Breaking Changes
- Standalone DC power flow (
rundcpf!,power_flow.solver = :dc) with per-island handling, optional DC-seeded AC starts, and a calculation-model selector in the Web UI. - Factorization-reuse linear solvers for the rectangular Newton step (
power_flow.linear_solver:umfpack|klu|umfpack_reuse, default unchanged). Symbolic analysis runs once per sparsity pattern, only numeric refactorization per iteration. Oncase_SyntheticUSA,umfpack_reusecuts the linear-solve phase from 1.66s to 1.31s; KLU is honestly slower on power-flow Jacobians. New dependency: KLU.jl. - Diagnostic report instead of a flat key/value dump, plus a fixed-reference self-check — both available via a dedicated "Diagnose" action in the Web UI.
Improvements
- Cleaner PowerFlow form: collapsible option boxes, unified solver selection (AC / APSLF / DC), all texts in English, contextual help via docs-backed "?" links.
- Case selector is now a single editable combobox: type to filter, Enter downloads unknown cases, right-click deletes cached ones.
- Warm-up solve is deferred and the form render path pre-compiled — the first browser tab no longer stays blank.
Bugfixes
- MATPOWER parser accepts newline-separated matrix rows (RTS-GMLC style); validated against the MATPOWER 8.0 RTS-GMLC reference.
- New Monte-Carlo examples: probabilistic power flow (case14) and a WLS state-estimation error study (7-bus workshop net).
- Fixed two silent Web UI form bugs where disabled submit elements dropped their values (Diagnose button and DC selection ran normal AC solves).
- Test suite: 1444 fast-profile and 1835 Web UI extended tests green.
Version 0.8.14 — 2026-07-22
Comment
- intentionally the same as 0.8.13
Version 0.8.13 — 2026-07-22
Breaking News
- AnalyticLoadFlow.jl (APSLF) is now integrated as an optional extension.
- APSLF solver: can run standalone, as the framework solver, or as a start-value generator ahead of the rectangular NR solve. Doesn't yet cover OLTC/PST/Q(U)/P(U), only simple Q-limit switching — details in
docs/src/external_solvers.md, demo inexamples/apslf_demo.jl. - Merit-function line search in the rectangular solver: optional Armijo line search inside the autodamp backtracking loop, off by default. Requires
autodamp = true. Adds diagnostic fields and amerit_linesearch.log. Background indocs/src/solver.md. - Trust-region step control: alternative to
autodamp, caps the Newton step adaptively instead of relying on the mismatch criterion. Two modes (scaled/dogleg);dogleghelps when the Newton direction weakens as the radius shrinks, but it's not a fix for bad starting values. Mutually exclusive withautodamp. - Web UI: solver dropdown including APSLF, status view shows which solver actually produced the result.
Improvements
- Wrong-branch detection results are now visible everywhere (report, CSV, log, Web UI, API) instead of only showing up as console warnings. An automatic rescue-retry is deliberately out of scope — detection plus APSLF as a fallback are considered enough for the hard cases.
Bug fixes
- The classical Q-limit outer loop was losing data per round because the inner solver treats every call as a standalone solve: the Q-limit log got reset each round (undercounting PV/Slack→PQ switches, often showing
0even when switching actually happened), and diagnostic files from one round overwrote the previous round's. Fixed by keeping the log across rounds and giving each round its own file names. - Independently solved AC islands were overwriting each other's diagnostic files (merit, trust-region, iteration-start logs) since they all shared one output directory. Each island now gets its own prefix.
Version 0.8.12 — 2026-07-20
New Features
- Added an
AbstractTapChangerModelsupertype and an explicitPowerTransformerTaps.conventionfield (currently only:neutral_relative), documenting the ratio-tap correction convention on the struct itself instead of leaving it implicit. Seedocs/src/branchmodel.mdfor the tap-changer/PST modeling layering (Issue #261 Stage 2). - Added a CGMES-style
PhaseTapChangerModel <: AbstractTapChangerModel(:symmetrical/:asymmetrical,:tabularstaged for later) and three pure formula functions inequicircuit.jl:calcPhaseTapFraction,calcPhaseTapAngleRatio(effective ratio/shift/regulating vector per CGMES v2.4 ch. 4.2/6.2), andcalcPhaseTapReactance(CGMES ch. 3X(α)interpolation, standalone for now — not yet wired into branchx_puor the outer control loop).PowerTransformerWindinggained a parallelphase_tapsfield (Issue #261 Stage 3). - Added
kind = :tabularsupport toPhaseTapChangerModel, backed by a newTapTablePointstruct (step,ratio,angle_deg, optionalx_pu) and acalcPhaseTapTableexact lookup inequicircuit.jl. A table overrides formula-based reconstruction whenever present, integrated intocalcPhaseTapAngleRatio/calcPhaseTapFraction/calcPhaseTapReactance. No interpolation between table steps; no importer produces tabular data yet (Issue #261 Stage 4). - Added
phase_tap_side::Int/phase_taps::Union{Nothing,PhaseTapChangerModel}keywords tocreate3WTWindings!, letting one winding of a three-winding transformer (MVA-method, star/AUX-bus model) carry aPhaseTapChangerModel— i.e. a Schrägregler on a single 3WT winding, optionally combined with a ratio tap on the same winding. Validated:phase_tap_side ∈ 0:3, andphase_tap_side/phase_tapsmust be set together. Resolving the attached model into an effective branch ratio/shift, and addressing a single 3WT winding from the outer-loopPowerTransformerControlframework, are analysed but intentionally not implemented — seedocs/dev/3wt_phase_tap_controller_addressing.md(Issue #261).
Improvements
- Consolidated the ratio-tap correction and tap-range formulas into
equicircuit.jl(calcRatioTapCorrection,calcRatioTapRange), the single source of truth used by bothcalcTransformerRatio(transformer.jl) and theBranchtap-limit derivation (branch.jl). Removed the duplicated inline formulas from both call sites; no change in computed values. - The native DTF importer's skew-angle tap computation (
_dtf_effective_transformer_tap) now constructs aPhaseTapChangerModeland callscalcPhaseTapAngleRatioinstead of computingtap_fractionand callingcalcSkewAngleTapinline. Reproduces prior behavior exactly, including the pure-longitudinal case (Issue #261 Stage 3).
Bug Fixes
create3WTWindings!previously raised aMethodErrorfor every call, including its own docstring example: thePowerTransformerWinding(...)positional call had drifted out of sync with the struct's field order (aratiofield was inserted ahead ofshift_degreewithout updating this call site), so every argument fromshift_degreeonward landed one field too early. Fixed by inserting the missingratioslot; the pre-existingtap_sideside-selection logic itself (documented as 1-based[1,2,3],0= no tap) was left unchanged — seedocs/dev/3wt_phase_tap_controller_addressing.mdfor the remaining discrepancy between that documentation and the current implementation.
Version 0.8.11 — 2026-07-17
New Features
writeMatpowerCasefilenow has amatpower_export.write_solutionoption (defaulttrue). It writes the solved power flow back into the MATPOWER case — bus VM/VA get the solved values, branches gain result columns 14–17 (PF, QF, PT, QT), pulled from the existing report/loss path, no extra recomputation. Ampc.sparlectra.solution_written = 1marker flags that the case has a solution. Turned off, you get the old pure model file: 13 branch columns, VM = 1.0, VA = 0.0. Ask for a solution before solving, and it falls back to the 13-column output with a warning. Configurable via YAML, the config API, or the new Web UI option.
Improvements
- The tap-impedance correction factor from
calcTapCorrectedRX(MATPOWER and native DTF import) is now saved on the Branch/transformer metadata. Reimporting a Sparlectra-exported case with thetap_changer_model = 'impedance_correction'marker won't stack a second correction on top. Cases without the marker — including third-party ones — work as before. - Shortened the "Tolerance" and "Export Solution" labels so the help icon isn't crammed against the text. The tolerance exponent stepper now looks and behaves like a real number spinbox.
- Removed the inline explanation text next to "Export Solution" and "Tap-changer model" — it was overlapping the help icon. Full explanations are still one click away; docs were expanded to cover it.
- Fixed the "Autodamping minimum" spinner step: was 1.0 (way too coarse for a 0–1 range), now 0.01.
- Removed the remaining inline hints across the PowerFlow form (Tolerance, CSV format, benchmarks, etc.) — help text belongs in the docs, not hardcoded in the views. Docs updated accordingly.
- Combined one-off Web UI messages (errors, import results, settings-loaded notices) into a single popup dialog instead of scattering them inline. The configuration notice stays inline since it has a link you need to see. Error history page unchanged.
Bug Fixes
- Fixed wrong
Casename in run.log/result files for MATPOWER cases with bus_name metadata — a loop variable was overwriting the case name with the last bus's name. - Fixed misaligned PV→PQ header lines in the report (labels too long for the column).
- Fixed misaligned Solver time/Total time headers (3 characters too narrow).
Version 0.8.10 — 2026-07-17
New Features
- Added a configurable transformer tap-changer model (
transformer.tap_changer_model, allowed valuesideal/impedance_correction), applied centrally to all transformers of an imported case.ideal(default) preserves prior Sparlectra behavior where the tap changer only changes the complex winding ratio.impedance_correctionre-refers the transformer series impedance through the tapped winding, scaling R and X with the squared magnitude of the regulating vector,|1 + f·e^(jφ)|². The option is read by both the MATPOWER importer and the native DTF importer, but the correction math lives centrally incalcTapCorrectedRX/calcTapImpedanceCorrectionFactor(src/equicircuit.jl) so importers stay free of duplicated tap-impedance mathematics. Configurable via YAML, the GUI-editable configuration API, and a new Web UI expert option.
Version 0.8.9 — 2026-07-16
New Features
- Added multi-file import for MATPOWER
.mand DTF.DATcases in the Web UI. Imported runnable cases are added to the case selector.
Improvements
- Enabled MATPOWER DC-line handling through terminal P/Q injections by default.
- Enabled independent AC-island solving and continued per-island diagnostics by default.
- Improved Web UI file-import validation, filename handling, conflict reporting, and per-file status output.
Bug Fixes
- Improved test-run diagnostics, bounded failure output, and excluded generated files from repository-hygiene checks.
- Made DTF
.DATclassification content-aware so only runnable cases and valid FOR002 references appear in the corresponding selectors. - Improved the tolerance spinner behavior in the Web UI.
- Hidden unavailable commit information instead of displaying
commit unknown.
Version 0.8.8 — 2026-07-14
New Features
- Added native DTF import with support for transformer ratio conventions, Schrägregler/skew-angle controls, trailing branch records, and FOR001 contingency metadata.
- Added an experimental DTF input path for the PowerFlow API and Web UI, including optional MATPOWER export, outage selection, import diagnostics, and explicit handling of unsupported DC-line data.
- Extended MATPOWER import and export with Sparlectra metadata for bus and branch names, branch types, FOR001 contingencies, and transformer loss data.
- Added support for the existing
mpc.sparlectra.transformer_lossesextension so transformer no-load conductance can be preserved across Sparlectra–MATPOWER roundtrips. - Added optional MATPOWER DC-line handling through fixed terminal power injections while keeping rejection of active DC-line records as the default.
- Added user-facing documentation for the DTF format, transformer conventions, Schrägregler controls, trailing records, and FOR002 validation.
Improvements
- Improved AC-island diagnostics and failure reporting, including per-island status, reference-bus selection, solver settings, mismatch information, Q-limit state, and downloadable diagnostic artifacts.
- Improved API failure handling so non-converged runs retain their generated artifacts and remain available for ZIP download.
- Improved Linux Web UI browser startup by using Chromium app windows where available and falling back cleanly to standard desktop browser launchers.
- Added validation workflows for FOR002 cases A–E, including transformer ratios, branch identity, no-load losses, shunt sensitivity, outage handling, and MATPOWER roundtrip checks.
- Simplified the DTF/FOR002 validation examples so normal use prints a concise summary while detailed diagnostics remain available on demand.
Bug Fixes
- Preserved transformer conductance through the existing
PowerTransformerWinding.g→getTrafoRXBG/getTrafoRXBG_pu→Branch.g_pupath without creating synthetic terminal bus shunts. - Fixed MATPOWER reimport so
mpc.sparlectra.transformer_lossesrestores transformer conductance correctly and does not duplicate loss contributions. - Fixed transformer loss reporting so total branch losses can be separated into longitudinal copper losses and voltage-dependent no-load losses.
- Fixed the Web UI case selector so internal warm-up cases are no longer shown as selectable user cases.
Version 0.8.7 – 2026-06-23
New Features
- Added a guarded current-injection start pre-solve for large MATPOWER workflows, including YAML/API/Web UI configuration, sidecar persistence, and
current_iteration_start.logdiagnostics. - Added conservative MATPOWER auto-profile handling with safer default recommendations, explicit apply/skip logging, and no silent solver-start or Q-limit overrides.
- Added explicit fail-fast detection for unsupported active MATPOWER
mpc.dclinedata in API/Web UI runs. - Added classical Q-limit enforcement modes (
classic_simultaneous,classic_one_at_a_time) for diagnostic and large-case analysis. - Added Web UI case-sidecar settings and compact operation-log retention for local support workflows.
Improvements
- Improved power-flow diagnostics with DC-start quality metrics, compact/full mismatch summaries, clearer final-mismatch status, and Q-limit validation output with MVAr units and non-converged validity labels.
- Improved Web UI/API transparency by recording runtime case metadata, MATPOWER import decisions, Q-limit settings, output options, and partial artifact status in logs and effective configuration artifacts.
- Improved the PowerFlow Web UI layout, Advanced/Expert option grouping, dismissible validation errors, and collapsed Last Errors handling.
- Improved detailed CSV handling for large and non-converged runs, including partial exports, structured skip reasons, and artifact rediscovery.
- Restored compact default test-run output while keeping verbose diagnostics available as an explicit opt-in.
Experimental / Developer Tooling
- Moved the large-case Q-limit comparison utility to
examples/experimental/qlimit_large_case_comparison.jland removed it from the stable API and normal fast test profile.
Bugfixes
- Fixed MATPOWER import option propagation for Web UI/API runs, including auto-profile, transformer ratio, phase shift, shunt, and voltage-reference options.
- Fixed Web UI case-sidecar save/load handling with type-safe YAML values and case-local persistence.
- Fixed Q-limit diagnostics so stale/intermediate violations are not reported as final violations when the final PV/REF check is OK.
- Fixed effective configuration artifacts so they include the actual resolved runtime casefile and case name.
- Fixed CSV artifact handling for non-converged runs with available network state.
Version 0.8.6 – 2026-06-18
Improvements
- Added configurable detailed CSV artifact writing with
auto,buffered, andstreamingmodes so large output artifacts can stream directly to disk while normal cases keep buffered writes. - Improved direct detailed CSV export with lower-allocation cell writing and per-file timing metadata for large Web UI/API runs.
- Removed the remaining per-bus prosumer scan from direct detailed CSV bus control labels, added operation-log CSV progress events, and bounded Q-limit run-log details while preserving full Q-limit CSV artifacts.
Bugfixes
- Fixed Web UI Q-limit checkbox handling so an unchecked form submission explicitly disables
power_flow.qlimits.enabledin the effective configuration.
Version 0.8.5 – 2026-06-17
Improvements
- Cleaned up single PowerFlow Web UI/API timing output so unavailable solver time is omitted and the measured run duration is shown as wall time.
Bugfixes
- Fixed MATPOWER
.mimport for very large cases such ascase_ACTIVSg70k.mby replacing regex-based matrix block extraction with deterministic string scanning.
Version 0.8.4 – 2026-06-10
New features
- A loopback‑only PowerFlow Web UI was added with run history, artifact downloads, logs, MATPOWER case management, help, and writable runtime directories. Optional artifacts now include additional logs, configuration output, and detailed CSV exports for voltages and branch flows.
Improvements
- Added configurable detailed CSV formatting for technical, German Excel, and US Excel notation.
Bugfixes
- Fixed rectangular PV/slack voltage initialization so replacing a voltage magnitude preserves the existing phasor angle.
Version 0.8.3 – 2026-05-30
Breaking changes
- Replaced the former keyword-heavy high-level runner surface with the configuration-driven
run_sparlectraframework entry point. - Kept
run_acpflowonly as a thin alias forrun_sparlectra; it now accepts the same minimal framework arguments. - High-level import, solver, control, benchmark, and output behavior is now controlled through
SparlectraConfigor YAML configuration. - Framework runs now consistently return
SparlectraRunResultfor bothcasefileandnetworkflows.
New features
- Added config-driven multi-case MATPOWER execution via
matpower_import.casesand the dedicatedrun_sparlectra_caseshelper, while keepingrun_sparlectraas a single-case workflow.
Improvements
- Refactored the high-level ACP/MATPOWER workflow into a clearer framework path with separated import, execution, status, and output handling.
- Refined
SparlectraRunResultstatus semantics so numerical convergence, solution availability, control-loop status, limit validation, and final framework acceptance are reported separately. - Preserved detailed rectangular diagnostics in MATPOWER runner status rows, including Q-limit active-set information, final PV voltage residuals, and wrong-branch metrics.
Bugfixes
- Fixed file-based MATPOWER start handling so projected/imported voltage and angle starts are actually honored by the rectangular solver instead of being overwritten by an effective flat start.
- Fixed framework and MATPOWER status handling for rejected numerical solutions, including wrong-branch rejection, active-set rejection, controlled-run PF failures, disabled controls, and synthetic benchmark summaries.
- Fixed file-based MATPOWER Q-limit lock handling so
power_flow.qlimits.lock_pv_to_pq_busesis resolved from original MATPOWER bus IDs to internal Sparlectra bus indices. - Fixed the public
ensure_casefilebinding and updated runnable documentation snippets so fresh checkouts and package installations can load example MATPOWER cases correctly. - Fixed the tap-control demo classic-output toggle so the example no longer fails late with an undefined
show_classicbinding.
Related issues
- #228 Remove the old compatibility surface from the high-level runner
Version 0.8.2 – 2026-05-29
New Features
- Added configurable wrong-branch diagnostics for rectangular power-flow results, including voltage, angle-spread, and branch-angle plausibility checks.
Improvements
- Hardened
matpower_import.auto_profileinto a MATPOWER pre-run that logs recommendation evidence, preservesrecommendmode without changing the active configuration, applies safe import-convention, comparison-reference, start-mode, and Q-limit guard changes inapplymode, and prints final effective options without rewriting YAML files. - Refactored the rectangular complex-state power-flow implementation into focused modules under
src/powerflow_rectangular/, withrunpf_rectangular!as the network-integrated entry point andrun_complex_nr_rectangularas the standalone array-level solver.
Bugfixes
- Fixed
run_acpflow(casefile=...)configuration forwarding so MATPOWER/file-based rectangular solves honor configuredpower_flow.wrong_branch_*options instead of falling back to default diagnostics. - Aligned rectangular autodamping defaults so direct solver calls and configuration-driven runs use the same
autodamp_min = 0.05default.
Related Issues
- #193 Harden MATPOWER auto-profile recommendation and application
- #219 Detect wrong/false low-voltage branch convergence and retry safely
- #220 Mechanically split rectangular power-flow code into focused modules
Version 0.8.1 – 2026-05-26
Breaking Changes
- Removed the old
run_net_acpflowpublic wrapper. Userun_acpflow(net=...)for already constructed networks andrun_acpflow(casefile=..., path=...)for file-based workflows.
Highlights
- Added a generic outer-loop control framework above
runpf!. Transformer tap/phase control now uses this framework as the first concrete controller implementation.
Improvements
- Added structured
ControlRunResultoutput andlatest_control_result(net)for inspecting controller status, outer iterations, PF solve count, controller rows, and trace rows. - Added machine-readable control trace rows for transformer control.
- Added
run_acpflow(net=...)as the preferred high-level entry point for already constructed networks, and made it the single public in-memory entry path. - Simplified
examples/tap_control_demo_grid.jlinto a lightweight demo of the generic control framework. - Documented the
controlconfiguration section, including thatcontrol.controllersis reserved for future YAML-based controller instantiation.
Related
#179 Introduce a generic control framework above the existing power-flow solver.
Version 0.8.0 – 2026-05-25
Breaking Changes
- The public AC power-flow path now supports only the sparse rectangular Newton-Raphson solver. Legacy polar/classic methods, dense PF matrices, and finite-difference PF Jacobian options are no longer supported as user-facing runtime choices.
- Power-flow configuration has moved to structured YAML sections and typed configuration objects. The old flat keyword-style configuration path is deprecated/removed for the cleaned rectangular workflow.
- Obsolete sparse switches such as
power_flow.sparse,opt_sparse, andstate_estimation.sparseare no longer valid configuration keys. Sparse matrix handling is mandatory for the production PF core.
Highlights
- Added a central configuration workflow:
- default template:
src/configuration.yaml.example - optional user override:
examples/configuration.yaml - typed config objects for power flow, MATPOWER import, state estimation, diagnostics, output, benchmarking, runtime, and performance profiling
- early validation of unknown or obsolete keys
- default template:
- Simplified the production power-flow path to the sparse rectangular AC solver with sparse Y-bus assembly, sparse analytic rectangular Jacobian, and sparse linear solves.
- Improved MATPOWER import and runner workflows:
- central YAML-driven execution
- configurable MATPOWER import options
- cleaner compact summaries
- better separation of numerical convergence, Q-limit validation, and solution availability
- Added configurable performance and timing output for MATPOWER and rectangular PF runs:
- representative wall time
- solver time
- result-output time
- timing coverage
- optional allocation information
- rectangular workspace metadata
- Improved large-case output handling:
- configurable result-table row limits
- summary/compact/full result-output modes
- safer default behavior for large MATPOWER cases
- Added rectangular workspace reuse/preallocation controls:
power_flow.rectangular_workspace_reusepower_flow.rectangular_preallocate_workspacepower_flow.rectangular_workspace_min_buses
- Reworked example scripts under top-level
examples/:matpower_import.jlis now a thin YAML-driven entry scripttap_control_demo_grid.jluses central configuration helpersexport_solution.jlwrites deterministic export artifacts underexamples/_out/export_solution/<case>_<timestamp>/
- Added a clearer test profile structure:
- default
fastprofile for normal development extendedprofile for MATPOWER/output/documentation-heavy checksallcurrently aliasesextended
- default
Configuration Notes
The main configuration template is now:
src/configuration.yaml.exampleA local user/example override can be placed at:
examples/configuration.yamlMATPOWER benchmarking moved to the top-level benchmark section:
benchmark: enabled: trueThe old
matpower_import.benchmarkkey is rejected with a migration message.
Output and Examples
examples/export_solution.jlnow produces files instead of only printing to the console. Typical output files are:summary.txt internal_solution.csv external_solution.csv comparison.csv *_export.mexamples/matpower_import.jluses the central configuration and writes logs under:examples/_out/
Documentation
- Added/updated documentation for:
- central configuration
- power-flow configuration
- MATPOWER import configuration
- state-estimation configuration
- performance profiling
- test profiles
- examples overview
Related
- Issue #199: Central configuration, PF solver simplification, sparse-only PF core, and test-framework cleanup
- Issue #201: YAML redesign
Version 0.7.8 – 2026-05-16
Highlights
- Improved Q-limit handling for large MATPOWER imports, especially cases with many generators that have zero or very narrow reactive-power ranges.
- Added compact console reporting for large MATPOWER example runs while keeping the full diagnostics in the logfile.
Fixes
- Fixed rectangular power-flow status caching to use weak network keys so repeated benchmark/example solves can release imported
Netobjects after callers consume the status. - Fixed direct
run_acpflow(net=...)and rectangular solver defaults so the Q-limit guard remains opt-in unless a caller or config explicitly enables it. - Fixed direct
run_tap_controllers_outer!defaults so the Q-limit guard remains opt-in when the exported tap-control API callsrunpf!. - Fixed MATPOWER example config forwarding so Q-limit guard options from YAML are preserved in the effective config and passed through all
run_acpflowpaths. - Fixed MATPOWER example console row limiting so
console_max_rowsfrom YAML is forwarded to Q-limit event and final active-set row caps in therun_acpflowpaths. - Fixed rectangular NR status reporting: numerical convergence, Q-limit active-set consistency, final convergence, comparison status, and rejection reasons are now reported separately.
- Fixed Q-limit guard behavior so strongly violating active PV buses can be locked to PQ during eligible Q-limit checks, reducing final active-PV limit violations.
Improvements
- Reduced console noise for large Q-limit active-set cases by replacing long PV→PQ and violation tables with compact summaries.
- Improved MATPOWER import example logging: the console now shows the essential run status, while detailed auto-profile evidence, diagnostics, and solver traces remain available in the logfile.
Version 0.7.7 – 2026-05-13
Highlights
Improved MATPOWER import diagnostics for large and difficult cases:
- clearer YAML-backed logging and terminal summaries
- VM/VA reference checks
- branch-shift and transformer convention scans
- bus-shunt and fixed-reference residual diagnostics
Added configurable MATPOWER transformer and phase-shifter import conventions:
matpower_ratiomatpower_shift_signmatpower_shift_unit
Improved MATPOWER voltage reference handling:
- configurable
BUS.VMvs.GEN.VGhandling - hybrid comparison mode
- better diagnostics for PV/REF buses without online generators
- correct handling of buses switched from PV to PQ by Q-limits
- configurable
Improved rectangular NR robustness for large MATPOWER cases:
- preserved slack and PV setpoints during flat start
- added DC-angle and blended-voltage start support
- added wrong-branch diagnostics for suspicious low-voltage solutions
Improved PV→PQ Q-limit handling:
- clearer per-unit and MVAr diagnostics
- hysteresis/deadband support
- compact post-solve active-set consistency checks
- separate handling of PV and REF/slack Q-limit violations
Fixes
- Fixed MATPOWER slack/reference voltage import so VM/VA values are preserved unless explicitly overridden.
- Fixed nominal-tap transformer handling so explicit
TAP = 1branches remain transformer models. - Fixed repository-local MATPOWER
.jlcase loading and example regression-test handling. - Fixed several Julia 1.12 / Revise world-age issues in MATPOWER diagnostic and example paths.
- Fixed flat-start setpoint extraction for networks with isolated buses.
- Improved warning/error capture in
matpower_import.jlwith compact logfile summaries.
Diagnostics
- Added MATPOWER auto-profile pre-run mode (
matpower_import.auto_profile = recommend|apply) to summarize or apply robust import, flat-start, PV/REF voltage-source, and Q-limit settings while preserving explicit YAML overrides. - Added branch-neighborhood reports for selected high-residual buses.
- Added residual-cluster diagnostics for PEGASE-style mismatch regions.
- Added negative branch impedance scans while preserving signed MATPOWER
BR_R/BR_Xvalues. - Added MATPOWER reference-data consistency diagnostics, including documentation of the known
case300.mfixed-reference mismatch aroundBUS_I 196 / 2040.
Related
- Issue #186: Singular Jacobian / world-age issue in rectangular NR solver.## Version 0.7.6 – 2026-05-11
Bugfix
- Fixed rectangular MATPOWER runs so a singular Newton Jacobian is reported as non-convergence instead of aborting the example, and tightened Julia 1.12 / Revise entry-point calls to avoid world-age binding warnings.
Version 0.7.5 – 2026-05-10
New Features
- Added PV→PQ Q-limit switching start controls (
qlimit_start_iter,qlimit_start_mode,qlimit_auto_q_delta_pu) for rectangular power-flow runs. - Added configurable bus-shunt modeling with classic Y-bus admittance stamping and a rectangular-solver voltage-dependent injection mode for keeping shunt effects in nonlinear mismatch terms.
- Added automatic rectangular Newton damping (
autodamp) for difficult flat-start power-flow cases; the solver backtracks the Newton step fromdampdown toautodamp_minand accepts the first residual-reducing trial. - Added start projection (
start_projection) for difficult power-flow seeds, including optional DC-angle starts and raw/DC blend scans for both the internal rectangular solver and external-solverPFModelstarts.
Bugfix
- Replaced the singular sparse linear-solve fallback with a rank-revealing QR path before dense SVD fallback to avoid large
pinv/LAPACK failures in ill-conditioned rectangular Newton steps. - Wrapped MATPOWER voltage-angle comparison differences into the minimal ±180° range before applying angle tolerances.
- Synthetic tiled-grid benchmark example now falls back from
.yamlto.yaml.exampleand reports when built-in defaults are used.
Improvements
- Improved MATPOWER case parsing and network construction performance for large cases by reducing parser allocations, pre-sizing network containers, and avoiding repeated bus-name lookups while adding MATPOWER branches.
Version 0.7.4 – 2026-05-08
New Features
Bugfix
- Fixed YAML subset parser cleanup on parse errors so temporary config files are closed before
mktempcleanup on Windows.
Improvements
- Improved large-network MATPOWER and rectangular-solver performance by aggregating prosumer-derived bus types and specified power injections in linear time.
Version 0.7.3 – 2026-05-04
New Features
- Added transformer tap control in AC power flow with an outer-loop controller workflow.
- Added
addTapController!support for:- voltage control via tap ratio (
mode = :voltage) - branch active-power control via phase shift (
mode = :branch_active_power) - coupled ratio + phase control (
mode = :voltage_and_branch_active_power) - tap-control reporting in classic and structured ACP flow outputs
- voltage control via tap ratio (
Improvements
- Updated branch-model documentation with practical controller-direction probing guidance for phase-shift control.
Tests
- Added regression tests for transformer tap controller behavior.
Version 0.7.2 – 2026-04-15
Bug Fixes
- Fixed the increased loading time for large test cases
Version 0.7.1 – 2026-04-15
Improvements
- Refactored decision logic for
qlimit_mode = :adjust_vset:- consolidated Q-limit event handling via shared active-set flow
- extracted voltage-step handling into dedicated helper logic
- Added typed
VoltageAdjustConfigsupport for prosumers and integrated it into voltage-regulation detection. - Simplified rectangular mismatch API by removing unused derivative keyword arguments from
mismatch_rectangular(...).
Solver Robustness
- Rectangular solver now handles reduced Ybus matrices (caused by internal isolated buses) by expanding them back to full network dimension for mismatch/Jacobian processing.
- For rectangular runs with active-link merges and internal isolated buses, solver now uses a rectangular FD fallback path instead of switching to
:polar_full.
Version 0.7.0 – 2026-04-15
New Features
- Added support for P(U) and Q(U) controller models in power flow calculations
- Characteristic curves can be defined via discrete points, with selectable interpolation methods:
- linear
- piecewise constant
- cubic
- polynomial
- Added support for controllers on non-PV generators
- Added documentation and examples for the new controller features
Version 0.6.4 – 2026-04-12
New Features
- Marked legacy Jacobian solvers as deprecated:
runpf_full!/method = :polar_fullrunpf_classic!/method = :classic
- Set rectangular complex Jacobian (
method = :rectangular) as the default for:run_acpflowrun_acpflow(; net = net, ...)
- Updated examples and user documentation to use
:rectangularas the recommended/default solver method.
Bugfixes
- For backwards compatibility, if vm is set, the coresponding bus type is set to PV
Version 0.6.3 – 2026-04-11
New Features
- Added
:adjust_vsetcontroller-based Q-limit handling at PV buses (adaptive Vset steps before optional PV→PQ fallback). - Power-flow bus typing is now derived from attached prosumers (Slack > PV > PQ);
addBus!(busType=...)is legacy-only and no longer defines operational PF type.
Version 0.6.2 – 2026-04-02
New Features
- adding sign validation and optional autocorrection of Q-limits before running power flows.
- Provide an option to lock selected PV buses from being switched to PQ
- Added pre-run PV Q-limit preview logging in MVAr for easier diagnostics before the PF iteration loop.
Version 0.6.1 – 2026-03-24
New Features
- Bad Data Detection (BDD) and Statistical Diagnostics for State Estimation (SE)
Bug Fixes
- Fix Issue 139
Notes
- Bad-data detection and statistical diagnostics are available via
validate_measurements,runse_diagnostics,summarize_se_diagnostics, andprint_se_diagnostics.
Version 0.6.0 – 2026-03-17
New Features
- Added initial State Estimation (SE, WLS), documentation and examples.
- Added zero-injection-bus (ZIB) support in SE, documentation, and examples.
- Improved results reporting and logging.
- Refactor testsuite for clarity.
Notes
- State Estimation is currently marked as experimental.
- Passive buses / ZIB are currently represented through zero-injection pseudo measurements in the WLS workflow.
Version 0.5.0 – 2026-03-11
Highlights
- Create and use machine-readable
ACPFlowReportoutput - Introduced bus-links + documentation
- Consolidated recent documentation
Version 0.4.35 – 2026-02-02
Fixes
- Stabilized MATPOWER case import and bus indexing in the presence of isolated buses.
- Fixed bus classification and ordering to ensure consistent solver input for flatstart and non-flatstart runs.
- Improved internal consistency checks for network topology before solver execution.
Improvements
- Refined MATPOWER comparison tooling (Vm/Va diff diagnostics and angle alignment).
- Minor internal cleanups in MatpowerIO and network initialization to improve robustness.
Version 0.4.34 – 2026-06-02
Fixes
- Closed Issue 110:
- Corrected per‑unit conversion issues discovered during the refactoring of the MATPOWER import interface, including proper handling of line, transformer, and shunt parameters.
- Fixed PU conversion inconsistencies for shunts and aligned all shunt handling with the unified Y‑model.
- Harmonized Q‑limit checking across all solvers and ensured consistent PV/PQ switching behavior.
New Features
- Updated shunt modeling: addShunts now exclusively supports the Y‑model; voltage‑dependent shunt power must be represented via loads or generators.
- Unified solver logic for reactive power limits and PV/PQ switching
- added new testcase matpower vs manual network
Version 0.4.33 – 2026-02-02
New Features
- Added on-demand MATPOWER case handling via
FetchMatpowerCase.ensure_casefile(automatic download of.mcases and optional generation of.jlcases) - Added option to control flat start behaviour in AC power flow (
flatstart)
Internal Changes
- Refactored MATPOWER case import logic and removed redundant example-based loaders
Version 0.4.32 – 2026-30-01
New Features
- Added function to export calculated network
Version 0.4.31 – 2026-28-01
Title
- Change license from BSD-3-Clause to Apache License 2.0
Version 0.4.30 – 2026-28-01
Bug Fixes
- Importing Matpower files, wrong conversion to per unit system
New Features
- Option to choose flatstart
Version 0.4.29 – 2025-12-13
New Features
- Support native 3-winding transformers in Sparlectra without AUX bus generation and allow non-PU parameterization #90
- Support 2-winding transformers as well in non-PU parameterization #90
Version 0.4.28 – 2025-12-12
Bug Fixes
- Close Issue #85: test totalBusPower vs. TotalLosses failed for solver != rectangular
Version 0.4.27 – 2025-12-11
New Features
- Added 3Bus Testcase with PV Generator
- Added createTest5BusNet with multiple generators at one bus and zero injection generator
- Issue #81 Fix Calculatation of Generators with Zero Injektion
- Mark PV->PQ switching in printACPFlowResults Log
Bug Fixes
- fixes per unit calculation for line shunt admittance
- fixes calculation of losses
Version 0.4.26 – 2025-12-04
- Issue #74: Multiple Generators at One Bus Not Handled Correctly
- Documentation Updates
Version 0.4.25 – 2025-11-29
Added
- Rectangular (Complex-State) Newton–Raphson Solver
Version 0.4.24 – 2025-11-20
Added
- Q-limit handling with automatic PV→PQ switching when a generator hits its reactive power limits.
Version 0.4.23 (2025-11-11)
New Features
- Full-state Newton–Raphson solver
Version 0.4.22 (2025-08-27)
Bug Fixes
- small fixes
Version 0.4.21 (2025-03-14)
New Features
- adding functions to remove elements from a net
Version 0.4.20 (2025-03-11)
- internal reorganization and small bugfixes
Version 0.4.19 (2024-10-14)
Bug Fixes
- pu calculation for transformer impedance
Version 0.4.18 (2024-04-14)
Bug Fixes
- closes issue#48 "printout jacobian runs into error"
Version 0.4.17 (2024-04-14)
New Features
- added testcase for importing Matpower files
Bug Fixes
- bugfix wrong function call in
createnet_powermat
Version 0.4.16 (2024-04-13)
Bug Fixes
- bugfix shunt index for isolated buses, closes issue #38
Version 0.4.15 (2024-04-12)
New Features
- Implemented a function to detect isolated buses and incorporate them into the network calculation (Issue #38)
Version 0.4.14 (2024-04-12)
Bug Fixes
- bugfix addShuntPower, closes issue #36
Version 0.4.13 (2024-04-12)
New Features
- added attribute for Lineparameters based on length
- added update parameter function for network
- added workshop documentation
Bug Fixes
- taking line length not (always) into account for line parameters
- parsing emtpy lines of Matpowerfiles
- documentation rendering
Version 0.4.12 (2024-04-08)
New Features
- added functions to facilitate the modification of networks.
- documentation available at https://welthulk.github.io/Sparlectra.jl/.
Bug Fixes
- print prosumers
Version 0.4.11 (2024-04-05)
New Features
- make changes to imported Matpower networks after import.
- added functions to facilitate the creation of networks.
Enhancements
- added documentation make file
Bug Fixes
- import and parser for Matpower .m files
Version 0.4.10 (2024-03-30)
New Features
- removed numerous redundant functions, partially restructured classes
- removed support for CGMES due to the availability of numerous alternative libraries
- removed support for the legacy custom JSON data format (potentially subject to reintroduction at a later stage)
- added functions to facilitate the creation of networks
- better performance
Bug Fixes
- calculation of branch flow and losses
- branches out of service
Version 0.4.8 (2024-03-26)
- first package release registered in the Julia registry
Version 0.4.1 (2023-12-19)
- Initial release of Sparlectra
Version 0.4.0 (2023-11-30)
- Initial public commit of Sparlectra