MODEL REGISTRY / 1.0.0
One contract for each named study.
Browse all 59 current study IDs by workspace. Each card shows its model version, input names and declared bounds/units, equations, fixture digest, source, test file and limits.
How to read this registry
The application, catalogue, sample data and numerical model have separate identities. No semantic study-catalogue version or separate study-result schema_version is declared by this source; both are marked U where appropriate. The default result is generated example evidence, not an independent reference fixture.
Download machine-readable registry JSON · Read the model/evidence glossary · Compare delivery modes.
Hybrid systems lab hybrid
Local app route #hybrid · 6 registered study ID(s) · new study calculations use the separate local Python application.
hybrid-resonance— Coupled oscillation modes · modelroadmap-screen-v1hybrid-clipping— DC clipping recovery · modelroadmap-screen-v1hybrid-inertia— Synthetic inertia and RoCoF · modelroadmap-screen-v1hybrid-powerflow— Balanced AC nodal power flow · modelroadmap-screen-v1hybrid-switching— PWM inverter/filter transient · modelroadmap-screen-v1hybrid-controls— Averaged inverter control response · modelroadmap-screen-v1
Learning studio lessons
Local app route #lessons · 5 registered study ID(s) · new study calculations use the separate local Python application.
lessons-duck— Net load and ramps · modelroadmap-screen-v1lessons-blackstart— Black-start sequence exercise · modelroadmap-screen-v1lessons-hydrogen— Hydrogen energy pathway · modelroadmap-screen-v1lessons-energization— Timed LRC energization transient · modelroadmap-screen-v1lessons-hydrogenaux— Hydrogen auxiliary energy ledger · modelroadmap-screen-v1
Scenario compare compare
Local app route #compare · 5 registered study ID(s) · new study calculations use the separate local Python application.
compare-pareto— Comparable-run Pareto screen · modelroadmap-screen-v1compare-dunkelflaute— Fourteen-day storage dispatch · modelroadmap-screen-v1compare-thermal— Thermal and cycle-wear screen · modelroadmap-screen-v1compare-thermalphysics— Lumped thermal reaction screen · modelroadmap-screen-v1compare-reliability— Chronological reliability ensemble · modelroadmap-screen-v1
Command centre overview
Local app route #overview · 4 registered study ID(s) · new study calculations use the separate local Python application.
overview-weather— Correlated weather stress · modelroadmap-screen-v1overview-merit— Value versus variable cost · modelroadmap-screen-v1overview-carbon— Hourly versus static emissions · modelroadmap-screen-v1overview-risk— Portfolio evidence and threshold screen · modelroadmap-screen-v1
Storage & flexibility storage
Local app route #storage · 7 registered study ID(s) · new study calculations use the separate local Python application.
storage-degradation— Separate battery aging mechanisms · modelroadmap-screen-v1storage-stacking— Reserve and arbitrage headroom · modelroadmap-screen-v1storage-synergy— Flywheel and battery split-frequency dispatch · modelroadmap-screen-v1storage-annual— 8760-hour dispatch and tariff builder · modelroadmap-screen-v1storage-response— Sub-second frequency droop response · modelroadmap-screen-v1storage-agingfit— Capacity-fade coefficient fit · modelroadmap-screen-v1storage-annualopt— Full-year storage optimization · modelroadmap-screen-v1
PV economics pv
Local app route #pv · 7 registered study ID(s) · new study calculations use the separate local Python application.
pv-backtracking— Slope-aware tracker backtracking screen · modelroadmap-screen-v1pv-agrivoltaic— Agrivoltaic PAR and land geometry · modelroadmap-screen-v1pv-albedo— Monthly bifacial albedo response · modelroadmap-screen-v1pv-sensitivity— LCOE contour sensitivity · modelroadmap-screen-v1pv-reserve— Inverter repowering reserve · modelroadmap-screen-v1pv-raytrace— Panel-sample ray-triangle shading · modelroadmap-screen-v1pv-setbacks— Parcel setbacks and crop-light screen · modelroadmap-screen-v1
Research pillars research
Local app route #research · 5 registered study ID(s) · new study calculations use the separate local Python application.
research-vibration— Vibration spectrum and drift · modelroadmap-screen-v1research-epd— Supplier-stage emissions evidence ledger · modelroadmap-screen-v1research-scr— Short-circuit strength and voltage drop · modelroadmap-screen-v1research-bearing— Bearing spectrum envelope comparison · modelroadmap-screen-v1research-eigenmodes— Closed-loop inverter eigenmodes · modelroadmap-screen-v1
Market intelligence markets
Local app route #markets · 4 registered study ID(s) · new study calculations use the separate local Python application.
markets-capture— Generation-weighted capture price · modelroadmap-screen-v1markets-negative— Negative settlement intervals · modelroadmap-screen-v1markets-interconnection— Two-zone interconnection · modelroadmap-screen-v1markets-network— Six-zone DC optimal power flow · modelroadmap-screen-v1
Forecast studio forecast
Local app route #forecast · 5 registered study ID(s) · new study calculations use the separate local Python application.
forecast-regimes— Three-state price regimes · modelroadmap-screen-v1forecast-commodities— Correlated commodity shocks · modelroadmap-screen-v1forecast-tail— PPA settlement tail risk · modelroadmap-screen-v1forecast-cointegration— Rank-assumed energy-price VECM · modelroadmap-screen-v1forecast-backtest— Chronological price forecast backtest · modelroadmap-screen-v1
Investment desk investment
Local app route #investment · 4 registered study ID(s) · new study calculations use the separate local Python application.
investment-sculpt— DSCR-constrained sculpted debt · modelroadmap-screen-v1investment-tranches— Contracted and merchant tranches · modelroadmap-screen-v1investment-waterfall— Capital and promote waterfall · modelroadmap-screen-v1investment-contracts— Contract, tax, and reserve cash flows · modelroadmap-screen-v1
Construction & pilots pilots
Local app route #pilots · 4 registered study ID(s) · new study calculations use the separate local Python application.
pilots-photogrammetry— Paired as-built geometry check · modelroadmap-screen-v1pilots-dts— Distributed temperature profile · modelroadmap-screen-v1pilots-offgas— Hypothetical multisensor warning vote · modelroadmap-screen-v1pilots-registration— Unpaired point-cloud registration · modelroadmap-screen-v1
Agent council council
Local app route #council · 3 registered study ID(s) · new study calculations use the separate local Python application.
council-debate— Finance versus storage debate · modelroadmap-screen-v1council-evidence— Structured evidence manifest · modelroadmap-screen-v1council-consensus— Bayesian evidence toy model · modelroadmap-screen-v1
Per-study cards
Hybrid systems lab / hybrid
hybrid-resonance · Coupled oscillation modes
Inspect poles and a normalized response of two coupled damped modes.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (5 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| mode_1_hz | Hz | 1 | 80 | Default 12 |
| mode_2_hz | Hz | 1 | 100 | Default 24 |
| damping_1 | fraction | 0.01 | 0.45 | Default 0.04 |
| damping_2 | fraction | 0.01 | 0.45 | Default 0.07 |
| coupling_fraction | fraction | 0 | 0.9 | Default 0.15 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
q'' + C q' + K q = udet(s²I + sC + K) = 0H(jω) = (K − ω²I + jωC)⁻¹
Model limits
- Two-mode lumped oscillator proxy; parameters are illustrative, not measured inverter/network impedances.
- Pole screening is not EMT simulation, SSR diagnosis, protection coordination or stability certification.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 42938f1b89cacfef9b64a8aee1cf84dcae30fbdb8c03cea50ab621aae2596df7; result evidence digest 71b1d4b8286a9a41ad75590b7a75ba7a306ddd5e6f9ab7920970b499abc83095. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Hybrid systems lab / hybrid
hybrid-clipping · DC clipping recovery
Bound DC-coupled battery charging to PV inverter clipping, battery power and energy headroom.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| pv_dc_kw | kW | 0 | 100000 | Default 1400 |
| inverter_ac_kw | kW | 1 | 100000 | Default 1000 |
| inverter_efficiency | fraction | 0.01 | 1 | Default 0.98 |
| battery_capacity_kwh | kWh | 0 | 100000 | Default 500 |
| battery_initial_kwh | kWh | 0 | 100000 | Default 100 |
| battery_charge_limit_kw | kW | 0 | 100000 | Default 300 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
Pdc,inverter limit = Pac,rated / ηinvPclip = max(0, Ppv − Pdc,inverter limit)Pcharge = min(Pclip, Pcharge,max, (Emax − E0)/(ηcharge Δt))E1 = E0 + ηcharge Pcharge Δt
Model limits
- Single interval, DC-side energy balance; no battery discharge, thermal limits, voltage-window or detailed inverter topology.
- Recovered energy is a physical screening quantity, not a dispatch forecast or project value.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 2a6d7f71fc38b9a55d1cb9c9f8548eb89df74e9fc11242677bad3e16d49aa13a; result evidence digest 3c1d95ca4a34e544e67df0ca8a41951c27be80ad3c95c034caf19508a0d95375. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Hybrid systems lab / hybrid
hybrid-inertia · Synthetic inertia and RoCoF
Integrate an aggregate swing model after a generation trip with bounded droop and derivative response.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| trip_mw | MW | 1 | 20000 | Default 1000 |
| system_base_mw | MW | 1000 | 2000000 | Default 100000 |
| inertia_seconds | s | 0.1 | 30 | Default 4 |
| damping_mw_per_hz | MW/Hz | 0 | 500000 | Default 4000 |
| synthetic_inertia_mw_s_per_hz | MW·s/Hz | 0 | 200000 | Default 10000 |
| synthetic_inertia_limit_mw | MW | 0 | 100000 | Default 1000 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
df/dt = f0/(2 H Sbase) · (Pgov + Psyn − ΔPtrip − D Δf)Psyn = clip(−Msynthetic · df/dt, 0, Psynthetic,max)dPgov/dt = (clip(Kdroop · max(−Δf,0),0,Preserve) − Pgov)/τ
Model limits
- Reduced-order aggregate frequency response; fixed trip and simplified governor/derivative service.
- Not an EMT simulator, protection study, grid-code assessment or certified inertia requirement.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 316334f9753f6d095fcf9abada759d47c2e6e2142af2c4384eb2c53e2f60a9ce; result evidence digest a58003de3f6d9d0c968ebb446cf31e90df0360136da53ccfeb946c79f2fb0a11. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Storage & flexibility / storage
storage-degradation · Separate battery aging mechanisms
Compare uncalibrated calendar SEI, low-temperature plating and cycling-fatigue contributions.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (5 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| years | years | 0 | 30 | Default 8 |
| temperature_c | °C | -20 | 60 | Default 25 |
| charge_c_rate | C | 0 | 5 | Default 1 |
| equivalent_full_cycles | cycles | 0 | 100000 | Default 2400 |
| depth_of_discharge_fraction | fraction | 0 | 1 | Default 0.8 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
LSEI = kSEI √t · 2^((T−25°C)/10°C)Lplating = kplate · t · (C-rate/2)² · max(0,(15°C−T)/25°C)Lfatigue = kfatigue · EFC · (0.5 + 0.5 DOD)
Model limits
- Mechanism terms are independently parameterized, additive screening proxies and intentionally uncalibrated.
- No cell chemistry, SOC history, charge protocol, coupled electrochemistry, uncertainty or warranty prediction.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 0e327f6bfce98f41564a501979eafb300224c6c0e8e6216fdb2082de033c5543; result evidence digest 54ccb7e438d36c05ca7ba98dc9310bbc98f5492218d77ec6786b8f78d723cad8. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Storage & flexibility / storage
storage-stacking · Reserve and arbitrage headroom
Bound an illustrative reserve-plus-arbitrage dispatch against explicit price and service arrays.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 5 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| capacity_kwh | kWh | 1 | 1000000 | Default 10000 |
| power_kw | kW | 1 | 500000 | Default 5000 |
| round_trip_efficiency | fraction | 0.01 | 1 | Default 0.9 |
| initial_soc_fraction | fraction | 0 | 1 | Default 0.5 |
| interval_hours | h | 0.25 | 4 | Default 1 |
| reserve_duration_hours | h | 0 | 4 | Default 0.25 |
price_eur_mwh— Energy price (€/MWh); JSON array, units U; default SHA-256 844e24698dd65f798e3c355854d4a0e0802790af6ba7cc45aa9a94f1fe3a3460.reserve_up_price_eur_mw_h— Upward reserve price (€/MW·h); JSON array, units U; default SHA-256 981850663d5fa1a4e59e941a2e92323fce262e4ba73097c57588d91561cdcf61.reserve_down_price_eur_mw_h— Downward reserve price (€/MW·h); JSON array, units U; default SHA-256 73f80dcafae74579d16db7d839a2dd3405a6a179167c9b3d5a942b29bbcbcf5c.reserve_up_request_mw— Requested upward service (MW); JSON array, units U; default SHA-256 e357056133590e45824e1a5be336becb75f41c002eb1ab689819a92d97a311a0.reserve_down_request_mw— Requested downward service (MW); JSON array, units U; default SHA-256 e357056133590e45824e1a5be336becb75f41c002eb1ab689819a92d97a311a0.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
maximize Σ(price·(d−c)·Δt/1000 + reserve_price·reserve_MW·Δt)SOC[t+1] = SOC[t] + ηc c[t]Δt − d[t]Δt/ηdSOC[T] = SOC[0]c + d + r_up + r_down ≤ P; reserve energy margins use stated activation duration
Model limits
- Illustrative perfect-foresight MILP with conservative simultaneous headroom and one terminal-SOC constraint.
- Reserve quantities and prices are user assumptions; no market eligibility, bid acceptance, availability, penalties, taxes or annualization.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 5e6af3c975ecd3bba3181c766496fd3b1ca1b81f512783ace95083077614ecd4; result evidence digest 2b0df56ab0c4825b42a13cdc4a0c3361acc31dd394a42a4c40492b4ad910e5dd. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Storage & flexibility / storage
storage-synergy · Flywheel and battery split-frequency dispatch
Route high-frequency disturbance to a flywheel and the residual to a bounded battery, tracking both energy states.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| interval_seconds | s | 0.1 | 60 | Default 1 |
| filter_time_constant_s | s | 0 | 600 | Default 4 |
| flywheel_power_kw | kW | 0 | 100000 | Default 500 |
| flywheel_energy_kwh | kWh | 0.1 | 100000 | Default 20 |
| battery_power_kw | kW | 0 | 500000 | Default 1000 |
| battery_energy_kwh | kWh | 0.1 | 1000000 | Default 4000 |
disturbance_kw— Requested power trace (+ discharge / − charge; ±1 GW/sample); JSON array, units U; default SHA-256 b97931082cf8195d983b72773f12089418179ed8eada57d21149241538cbfa7b.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
ℓ[t] = ℓ[t−1] + α(P[t]−ℓ[t−1]); α = Δt/(τ+Δt)Pflywheel,request = P−ℓ; Pbattery,request = P−PflywheelE[t+1] = E[t] − PΔt/ηd for P≥0; E[t+1] = E[t] − PηcΔt for P<0
Model limits
- A first-order frequency split and sequential clipping are transparent dispatch proxies, not an optimized controller.
- No voltage, thermal, ramp, converter, degradation, coupled control or field response validation.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 226e32f06082e55b9b2039b8410779b59459e52f75544ff667cdab1203a72909; result evidence digest e99620988ffbb162eba471bdda39280bd7ae66b96e8759b6942946c94d362678. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
PV economics / pv
pv-backtracking · Slope-aware tracker backtracking screen
Compare ideal tracker angles with a planar row-shadow backtracking correction over supplied sun positions.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| row_pitch_m | m | 0.1 | 30 | Default 6 |
| module_width_m | m | 0.1 | 10 | Default 2.4 |
| tracker_axis_azimuth_deg | ° | 0 | 360 | Default 0 |
| terrain_slope_deg | ° | 0 | 30 | Default 5 |
| terrain_slope_azimuth_deg | ° | 0 | 360 | Default 90 |
| backtracking | 0/1 | 0 | 1 | Default 1 |
sun_elevation_deg— Solar elevation (°); JSON array, units U; default SHA-256 a96c29e5705e5226962245cb55357ad39c081f258bfb1ed54e3d2e71fa670cd0.sun_azimuth_deg— Solar azimuth (°); JSON array, units U; default SHA-256 618f795cffa2937872e0c30dd674912ccf280794edab53e1de71ea89dfba8c58.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
βcross = atan(tan(slope) · sin(azslope − azaxis))θideal = atan2(sun_cross · cosβ + sun_up · sinβ, −sun_cross · sinβ + sun_up · cosβ)θbt = θideal − sign(θideal) arccos(|cos θideal|/GCR) when |cos θideal| < GCR
Model limits
- A two-dimensional planar row geometry with a cross-slope projection; edge effects, tracker limits and terrain variation are omitted.
- NREL's slope-aware method includes full reference frames and shaded-fraction treatment; this screen is not its implementation or an energy-yield model.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 5a6f3cc3d5a62edbed36b0d14b18e55441730e10992058fb7c61aae07204abfe; result evidence digest ecd238293d7983a546f8804647ee91e60d4366c043aa59d7fe643ef90ad76eb7. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
PV economics / pv
pv-agrivoltaic · Agrivoltaic PAR and land geometry
Screen a simple crop-light tradeoff and polygon land area after a conservative perimeter setback deduction.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| ground_coverage_ratio | fraction | 0 | 0.9 | Default 0.35 |
| module_transmission_fraction | fraction | 0 | 0.8 | Default 0.08 |
| setback_m | m | 0 | 100 | Default 2 |
| baseline_par_mol_m2_day | mol/m²/day | 0.1 | 100 | Default 35 |
land_polygon_m— Local land-boundary polygon vertices (m); JSON array, units U; default SHA-256 f618a20d9df81308bd9d5218dd9137bbebc48aac1e5a6c6024ab197a02df3adc.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
A = ½ |Σ(xᵢyᵢ₊₁ − xᵢ₊₁yᵢ)|Ausable ≈ max(0, A − perimeter·setback)PARcrop ≈ PARopen · [1 − GCR · (1 − module transmission)]
Model limits
- Perimeter setback subtraction is a conservative area proxy, not an exact polygon offset or cadastral calculation.
- PAR proxy omits time-of-day geometry, crop response, spectral effects, diffuse light, row spacing, equipment access and yield validation.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 20baee265bd2bf692a6288b92e431cb8808a5e2d546093568a21b9d39cde87bf; result evidence digest 77d5281b58063da339964c6a71a3078c3d8c4d361f3d06d391afbc7831129cb3. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
PV economics / pv
pv-albedo · Monthly bifacial albedo response
Combine monthly front-plane and reflected rear irradiance with bifaciality, albedo, view factor and PR.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (5 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| system_capacity_kwp | kWp | 1 | 10000000 | Default 5000 |
| performance_ratio | fraction | 0.01 | 1 | Default 0.82 |
| bifaciality | fraction | 0 | 1 | Default 0.7 |
| albedo | fraction | 0 | 1 | Default 0.25 |
| rear_view_factor | fraction | 0 | 1 | Default 0.25 |
front_plane_irradiance_kwh_m2— Monthly front-plane irradiation; JSON array, units U; default SHA-256 d369ad29f2beaccfdec6fb8157fc5197e81513d90a0e49e04c93d3b08cf0919f.rear_ground_irradiance_kwh_m2— Monthly rear ground irradiation before albedo; JSON array, units U; default SHA-256 4f9a61aef4ceda4a0794201463d2e431bed74b58bcdb92dd1f372db6e2bf46e6.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
Grear = Gground · albedo · rear_view_factorEfront,m = Pdc · PR · Gfront,mEtotal,m = Pdc · PR · (Gfront,m + bifaciality · Grear,m)Eyear = Σₘ Etotal,m
Model limits
- Monthly scalar irradiance screen; rear view factor and PR are user assumptions, not ray tracing or site meteorology.
- No electrical mismatch, row shading, temperature, spectral, terrain or measured validation; annual energy is only as representative as the supplied 12 months.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 2f933af9a62a5e13d931885ce2394885b0977cd1c9c95cc78bbb27f19f512a8e; result evidence digest acad44d4dc0ad9af93f0f0824f70b174add5c949a99f4574e118d84a0f6bef61. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Research pillars / research
research-vibration · Vibration spectrum and drift
Estimate one-sided FFT amplitudes and compare early/late half-record spectral peaks.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| sample_rate_hz | Hz | 128 | 20000 | Default 256 |
| synthetic_frequency_hz | Hz | 1 | 10000 | Default 24 |
| synthetic_drift_hz | Hz | -5000 | 5000 | Default 3 |
| synthetic_amplitude | signal unit | 0 | 1000000 | Default 1 |
| noise_std | signal unit | 0 | 1000000 | Default 0.05 |
| sample_count | samples | 64 | 8192 | Default 1024 |
signal— Supplied evenly spaced signal (empty uses seeded synthetic signal); JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
X[k] = Σₙ x[n] exp(−j 2πkn/N)A[k] = 2|X[k]|/Σw[n] for interior one-sided binsSpectral drift = late-half dominant frequency − early-half dominant frequency
Model limits
- Single evenly spaced, finite record with a Hann window; half-window frequency resolution is limited.
- Peaks and drift are descriptive spectrum statistics, not a fault classifier, causal diagnosis or maintenance recommendation.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 85fcfc03ead35873f1e809474a228630a847b952cfd1d9bd61194141cdab1e30; result evidence digest 4a8f32f1cb2a5aa5c1a91c877c49d474e73f9114a3debcf8db32f48811af428c. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Research pillars / research
research-epd · Supplier-stage emissions evidence ledger
Sum supplied supplier-stage quantities and factors while surfacing duplicate IDs and missing evidence.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| include_materials | 0/1 | 0 | 1 | Default 1 |
| include_manufacturing | 0/1 | 0 | 1 | Default 1 |
| include_transport | 0/1 | 0 | 1 | Default 1 |
| include_use | 0/1 | 0 | 1 | Default 1 |
| include_end_of_life | 0/1 | 0 | 1 | Default 1 |
| include_other | 0/1 | 0 | 1 | Default 1 |
records— Supplier-stage records (quantity ≤1e12; factor ≤1e6 kgCO₂e/unit); JSON array, units U; default SHA-256 9537165dab30ba98d28a3bdbb869b4eb9be65bec4e9dc9fb2b7d0b27a6aa0fa8.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
Stage emissionsᵢ = quantityᵢ · supplier/activity factorᵢTotal included emissions = Σ unique, factor-complete stage records
Model limits
- Per-record quantities are bounded at 1e12 declared units and factors at 1e6 kgCO₂e per declared unit to keep the arithmetic finite; choose and document suitable units.
- A traceable arithmetic ledger only: it does not verify EPD validity, product-category rules, allocation, boundary, assurance or Scope 3 category.
- Duplicate IDs retain only their first row; missing factors are reported and excluded, not imputed. Example defaults are synthetic.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 041ebb0658b8fee3695682f8299af17abb79c0c868ef740b97248365edb181a9; result evidence digest 9c4ff05f57737f51cfcd7531220e7dc176b6d444728b830c545b0d2f0349e818. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Research pillars / research
research-scr · Short-circuit strength and voltage drop
Calculate a simple Ssc/P screening ratio and a balanced small-voltage-drop estimate from R, X, P and Q.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| short_circuit_mva | MVA | 0.1 | 2000000 | Default 600 |
| plant_mw | MW | 0.1 | 2000000 | Default 100 |
| active_power_mw | MW | 0 | 2000000 | Default 80 |
| reactive_power_mvar | Mvar | -2000000 | 2000000 | Default 20 |
| voltage_kv | kV | 0.1 | 1000 | Default 20 |
| line_r_ohm | Ω/phase | 0 | 100000 | Default 0.1 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
SCRscreen = Ssc / PplantΔVpu ≈ (R P + X Q)/VLL²|Zth| ≈ VLL²/Ssc
Model limits
- Classical single-infeed ratio and balanced first-order voltage-drop approximation only.
- SCR is not a stability guarantee; interactions, loads, X/R, controls, protection and operating points require detailed network and dynamic studies.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 44c8d00cc9704c69f52f926523d81d3507cc4dd87f778f8e3cfed9f66b7a2fe7; result evidence digest f67ff32f99c448935aa0c875ff3cea9d13322d9cc94a33000ce53fd4a30bd88e. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.
Command centre / overview
overview-weather · Correlated weather stress
Compare shared and asset-specific weather shocks across six fictional assets.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| horizon_years | years | 1 | 40 | Default 10 |
| common_shock_fraction | fraction | 0 | 1 | Default 0.75 |
| seed | integer | 0 | 4294967295 | Default 42 |
assets— Six synthetic assets; JSON array, units U; default SHA-256 359dce81eb5421ee8cb3ad76d2e33501516a62290e168ba7b55c37b35e688164.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
z_i,t = sqrt(common_share) z_common,t + sqrt(1−common_share) z_idiosyncratic,i,tstress_i,t = generation_i × sensitivity_i × max(0, −z_i,t), capped at 100%
Model limits
- Synthetic standardized shocks; no weather observations, technology calibration, spatial model or outage probability.
- The reported stress index is a bounded generation-weighted exposure proxy.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 0402e26d161c32c1c8f0807ad1813a69c9b2856c42973a5f61e7d4db73734382; result evidence digest 65958eed23736922bd1dfcdb02d5df2a4ea0ddabf40447affa588099bd8ee712. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Command centre / overview
overview-merit · Value versus variable cost
Compare asset variable costs with bilateral, spot and balancing value assumptions.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| bilateral_weight | fraction | 0 | 1 | Default 0.4 |
| spot_weight | fraction | 0 | 1 | Default 0.4 |
| balancing_weight | fraction | 0 | 1 | Default 0.2 |
assets— Asset value matrix; JSON array, units U; default SHA-256 7b5d1439bfedb08e4c3b369bffeea18ca85678b350d7f35c988223b168cf9b1e.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
net value_route,i = assumed value_route,i − variable cost_iweighted net value_i = Σ_route weight_route × net value_route,i
Model limits
- All matrix values and route weights are user assumptions; no dispatch, balancing eligibility, fees, shape or contract terms are inferred.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest d1e4ec58847b38d434cae98662c115ee1b24ff4a1218aa6420b7435f43efc2d4; result evidence digest e8e1666b778d48ca6c37e2dc6333f8d33f7006f6d5eec46226b9a8f5e53e0179. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Command centre / overview
overview-carbon · Hourly versus static emissions
Apply supplied hourly marginal factors and compare with one static factor on the same sampled generation.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| static_factor_kgco2e_mwh | kgCO2e/MWh | 0 | 5000 | Default 400 |
| sample_hours | hours | 1 | 8760 | Default 24 |
| generation_scale | multiplier | 0.01 | 100 | Default 1 |
generation_mwh— Hourly generation; JSON array, units U; default SHA-256 e7303136d19e9e340f26fcb75f64507459e1881c7cbff70c1524d4467d4c0022.marginal_factors_kgco2e_mwh— Hourly marginal factors; JSON array, units U; default SHA-256 71b39889da6d2331e852037ccc64c8765900e14989a46d58834e0d37e843b8ce.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
hourly emissions = Σ_h generation_h × marginal_factor_hstatic comparison = Σ_h generation_h × annual_static_factor
Model limits
- Supplied factors are not recalculated or calibrated; this does not estimate lifecycle emissions, avoided credits or annualize a sample day.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 580b5057ad05badedcad285a52632446d74ebb992fe47b6d8fb029f79418f96c; result evidence digest d274a32d97acfccb87cb4e976149159344c30aaa6670ae14d20835a268738a41. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Market intelligence / markets
markets-capture · Generation-weighted capture price
Apply a transparent penetration-linked price adjustment to user-supplied intervals.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| penetration_fraction | fraction | 0 | 1 | Default 0.4 |
| reference_penetration_fraction | fraction | 0 | 1 | Default 0.1 |
| cannibalization_slope_eur_mwh | EUR/MWh per fraction | 0 | 5000 | Default 100 |
intervals— Synthetic or user-provided intervals; JSON array, units U; default SHA-256 3adab35a365ae32950da8db0f4cabace97f76a8a0f79fcd07e62e0eb775ad9b9.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
adjusted_price_t = spot_price_t − slope × (penetration − reference) × exposure_tcapture price = Σ_t generation_t × adjusted_price_t / Σ_t generation_t
Model limits
- The linear slope is a user-defined sensitivity, not an estimated market response or price forecast. Capture price is null when supplied generation sums to zero.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 685f83ab37b3f6252b0ffe1460acabc7683c5157d5488daf7ae4681beddf3e9f; result evidence digest 034f015c15b795ee6f8126b00c13e4e2a0127eb2e59b4d644411efc11541caba. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Market intelligence / markets
markets-negative · Negative settlement intervals
Count negative 15-minute prices and identify runs reaching a user-configured suspension duration.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| interval_minutes | minutes | 15 | 15 | Default 15 |
| suspension_duration_minutes | minutes | 15 | 10080 | Default 60 |
| negative_threshold_eur_mwh | EUR/MWh | -10000 | 0 | Default 0 |
prices_eur_mwh— 15-minute prices; JSON array, units U; default SHA-256 b72f651d2e0c2a97a15e13c7b815d581a16de1675a39e263eba870ef8e7bf8ea.country_scenario— Hypothetical jurisdiction label; JSON object, units U; default SHA-256 67c482243f604951ac751908daddf1a2b1b3f3cf9923d9526c2e2b25e909176d.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
negative interval if price < 0 and price ≤ configured thresholdtriggering run if consecutive_negative_intervals × 15 min ≥ configured duration
Model limits
- Country label is metadata only. Any suspension setting is a hypothetical user scenario explicitly UNVERIFIED; no subsidy, settlement, legal or eligibility rule is asserted.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest eacf4af788e4b32d707f5939b6523b6cc83e40b5261a3a472c6c77660c2523e5; result evidence digest e9203607487263217ed62dc56ed9ac845566bc4b99d0ddf5fa043cf6db524037. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Market intelligence / markets
markets-interconnection · Two-zone interconnection
Choose the least-cost flow between two zones with quadratic supply curves and a bounded interconnector.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| capacity_mw | MW | 0 | 1000000 | Default 500 |
| supply_slope_a_eur_mwh_mw | EUR/MWh per MW | 0.000001 | 1000 | Default 0.02 |
| supply_slope_b_eur_mwh_mw | EUR/MWh per MW | 0.000001 | 1000 | Default 0.02 |
intervals— Zone demand and supply intercepts; JSON array, units U; default SHA-256 a639be6f6fb0821bd3f5d48e998a50dcaeaf04d758d62817dd6c7f69540b4742.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
min_f C_A(d_A+f)+C_B(d_B−f)C_i(q)=a_i q + 0.5 b_i q²; −min(capacity,d_A) ≤ f ≤ min(capacity,d_B)
Model limits
- Single-link two-zone convex dispatch proxy; ignores losses, network loop flows, ramping, reserves, bids, indivisibilities and actual market-coupling constraints.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest a342218f216fc5478e138046c13f739e7506300d5efa38efdf97d80d65bbbb9a; result evidence digest 14e0cd9162051d049bb4b83dff4872288bc3088003d4edf48ea67a2ce6b0bc8a. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Forecast studio / forecast
forecast-regimes · Three-state price regimes
Generate seeded annual scenario paths from normal, scarcity and oversupply Markov states.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 4 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| years | years | 1 | 40 | Default 20 |
| paths | paths | 20 | 10000 | Default 1000 |
| seed | integer | 0 | 4294967295 | Default 42 |
state_means_eur_mwh— State price means; JSON array, units U; default SHA-256 7503ddfc0ab4b0838ec2e1d94d8f9c721c58bdc78ee1a29a24422988b61f1090.state_volatilities_eur_mwh— State volatilities; JSON array, units U; default SHA-256 78773dea9fb438140498f712446cbe2c8c0d4d064aed05287a89d11cdb36a86f.transition_matrix— Transition probabilities; JSON array, units U; default SHA-256 420f835981c8cb3bf1c70dc11705a0cd5616a01d7367a8b1bc1472c845cbf041.initial_state_probabilities— Initial probabilities; JSON array, units U; default SHA-256 1df1fa431ecaacee744db67ebb1e05ecc0994dc725e3fecfb42831655c9e56f9.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
S_t ∼ categorical(P[S_{t−1},·])price_t | S_t=s ∼ Normal(state_mean_s, state_volatility_s²)
Model limits
- Seeded annual scenarios only; user-supplied transition probabilities and state parameters are not calibrated, backtested or market forecasts.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 6f9e112d753bf0d942dc3eefc5d5f58914154a89b279957377f7b9fd172a2cdf; result evidence digest 31defb04af903be902409a7a79214d90104ac62bf1fbdfd51d626cf80963a9d3. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Forecast studio / forecast
forecast-commodities · Correlated commodity shocks
Simulate correlated gas, carbon and power price paths using a bounded, PSD correlation matrix.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 4 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| years | years | 1 | 40 | Default 20 |
| paths | paths | 20 | 5000 | Default 1000 |
| seed | integer | 0 | 4294967295 | Default 42 |
starting_prices— Starting gas, carbon and power prices; JSON array, units U; default SHA-256 009cfc5a5d3f09a9404a35e659feca0c654006caba77253fa5e58a27178ae279.annual_volatilities— Annual volatilities; JSON array, units U; default SHA-256 5bc297ef73bd42e8f4b3f05a4be5df313d6937fac161637443835948eecd3905.annual_log_drifts— Annual log drifts; JSON array, units U; default SHA-256 eb52fd75fdccfeb5a497bdc83277ad64c8ff226314d5f323f5ad79c9ce3c4661.correlation_matrix— Correlation matrix; JSON array, units U; default SHA-256 6de851cd25e3cf9c650f712a3dacd3e6d20a0e0a865939c123680d074fb66789.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
Z_t = L ε_t, L Lᵀ = correlation matrixP_j,t = P_j,t−1 exp((μ_j−0.5σ_j²)+σ_j Z_j,t)
Model limits
- Synthetic geometric-random-walk shocks with constant user inputs; no forward curves, cointegration, structural fuel dispatch, calibration or forecast claim.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 9b982aecc8668d522e4bc837b4efcf02baade464bb8634048df0898cfb3a9980; result evidence digest 8a81664f0baac4cc18ceadd7dd2143391c565272ffc71295122d31460681d408. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Forecast studio / forecast
forecast-tail · PPA settlement tail risk
Estimate empirical 95% and 99% loss VaR/CVaR from seeded annual PPA settlement paths.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| strike_eur_mwh | EUR/MWh | 0.01 | 5000 | Default 80 |
| volume_mwh | MWh/year | 0 | 10000000 | Default 10000 |
| years | years | 1 | 40 | Default 10 |
| paths | paths | 100 | 10000 | Default 1500 |
| seed | integer | 0 | 4294967295 | Default 42 |
| annual_volatility | fraction | 0 | 2 | Default 0.25 |
histogram_year— Selected year and histogram bins; JSON object, units U; default SHA-256 7c3888e0f543e35c434e0fa049ad3ce20f5a3bf020de8eb57ab5884ddea0ab87.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
spot_t = strike + Σ_{k≤t} Normal(0, (volatility × strike)²)loss_t = (spot_t − strike) × volumeCVaR_α = mean of the largest ceil((1−α)N) empirical losses
Model limits
- Synthetic arithmetic price walk; signed buyer settlement losses versus strike, not project revenue, calibrated PPA basis, hedge effectiveness or a probability guarantee.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 9cd8d1581533cc8fb1868c81def6688e5786cde3644fda43fbf18ab031efa354; result evidence digest cc414c25643cc97ca8992cb08b679f6021b204f074a47f9ae8b18f60f0c8e98a. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Investment desk / investment
investment-sculpt · DSCR-constrained sculpted debt
Compare the existing finance screen and annuity sizing with a non-negative-amortization CFADS sculpting bound.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| target_dscr | ratio | 1 | 5 | Default 1.3 |
| requested_debt_eur | EUR | 0 | 1000000000 | Default 1760000 |
| discount_rate | fraction | 0 | 0.4 | Default 0.08 |
finance_request— Existing project-finance assumptions; JSON object, units U; default SHA-256 bdcb1f1f5bccc2f8c5f8109a2761dd40dbb09116c0886ea02da550c86215ea69.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
target service_t = max(0, CFADS_t) / target_DSCRdebt capacity = largest initial balance whose target-limited service amortizes within tenor without service below interestbalance_t = balance_{t−1} + interest_t − principal_t
Model limits
- Uses the existing pre-tax nominal project-finance engine and its rounded annual CFADS. No taxes, DSRA, fees, reserve facility or legal covenant is added; infeasible requests are disclosed.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest dd9ed5077bd5f46e5e0dc2f76fad6f593a4d88272dd0f7fdbc1f7b68c60194f7; result evidence digest 7f1eef49684d1cfbe7d4185e47301cd74fd1d168151f33c7c828ca61ffd57c19. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Investment desk / investment
investment-tranches · Contracted and merchant tranches
Size debt separately against PPA-floor CFADS and user-haircut merchant cash flows.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (5 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| target_dscr | ratio | 1 | 5 | Default 1.3 |
| merchant_haircut_fraction | fraction | 0 | 1 | Default 0.5 |
| interest_rate | fraction | 0 | 0.3 | Default 0.055 |
| tenor_years | years | 1 | 40 | Default 10 |
| contract_years | years | 0 | 40 | Default 10 |
annual_rows— Annual floor, merchant and operating assumptions; JSON array, units U; default SHA-256 abb4a03aea3e75f6ee819eddc9792b822e001fec8289d7478d4b52b287fd3fcf.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
contracted_CFADS_t = floor_price_t × contracted_MWh_t − OPEX_t (within floor term)merchant_CFADS_t = haircut × merchant_price_t × merchant_MWh_t − OPEX_tdebt-service ceiling_t = max(0, CFADS_t) / target_DSCR
Model limits
- User-supplied floor is a hypothetical exposure input, not an executed PPA or eligibility claim. No volume shape, basis, counterparty risk, taxes or post-expiry contracted-volume conversion is inferred.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 33c2d99f5f21fb454c314174d09b3a41406b840af739e85863308b1c1a4450f4; result evidence digest 143ec198d1a264f24eba3e6a4f50dbaec1a85108fbaacd53351ba46f0a8454e0. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Investment desk / investment
investment-waterfall · Capital and promote waterfall
Allocate one exit pool through return of LP capital, accrued preferred return, a 50/50 catch-up and an 80/20 promote.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| capital_eur | EUR | 0 | 1000000000000 | Default 5000000 |
| distribution_pool_eur | EUR | 0 | 1000000000000 | Default 12000000 |
| years | years | 1 | 50 | Default 10 |
| preferred_return_rate | fraction | 0 | 0.5 | Default 0.08 |
| catchup_share | fraction | 0.01 | 1 | Default 0.5 |
| sponsor_promote_share | fraction | 0 | 0.99 | Default 0.2 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
preferred return due = capital × ((1 + preferred_rate)^years − 1)catch-up total = promote_share × LP_pref_paid / (catch-up_share − promote_share)remaining pool split LP/sponsor = (1 − promote_share)/promote_share
Model limits
- Explicit single-LP, time-zero contribution and single-exit convention; no interim distributions, taxes, return-of-capital priority to sponsor, clawback, IRR hurdle or legal partnership terms.
- First-party algebraic convention; the source reference is not independent validation or a legal partnership agreement.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 80637a51f24f187bb37eb39ad714e957e643c018eed8891e8035977730423bc6; result evidence digest 4d69d195973aeeb02ab07f78dca12eb0d5f364e063444558a277ba214ca2f923. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.
Learning studio / lessons
lessons-duck · Net load and ramps
Work through renewable subtraction, hourly ramps, and energy closure.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 3 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| interval_hours | h | 0.25 | 4 | Default 1 |
| ramp_limit_kw_per_hour | kW/h | 0 | 10000 | Default 45 |
| ramp_percentile | % | 50 | 99.9 | Default 95 |
load_kw— Demand; JSON array, units U; default SHA-256 0c82ad30214dafaeec9938c4bd816d27356e7f9c63d6c18e9bf6f53d559456ec.solar_kw— Solar output; JSON array, units U; default SHA-256 10a94fc5f77b4920a95711906bdb20dd46c87663f47d2f68490a22aac7d999f3.wind_kw— Wind output; JSON array, units U; default SHA-256 27c38d492507eb28a7458427129f656f36b54db5ede86005781e26c5608fc171.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
net load[t] = load[t] - solar[t] - wind[t]ramp[t] = (net load[t] - net load[t-1]) / interval hoursnet-load energy = sum(net load[t] * interval hours)
Model limits
- Synthetic equal-duration series; no dispatch, forecast, or grid-constraint model.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest c40a02b1ab8a04cb0bd94ee0e23763b034fb77086c82be31fb9ec1591b6f844c; result evidence digest 859e80d471bf574c94d3edef215551d775d197ad16654ba70a05ce290ddc4ccb. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Learning studio / lessons
lessons-blackstart · Black-start sequence exercise
Check a finite-state energization sequence against active-power and inrush budgets.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| gfm_rated_kw | kW | 1 | 100000 | Default 500 |
| available_power_fraction | fraction | 0.01 | 1 | Default 0.8 |
| inrush_budget_kw | kW | 0 | 100000 | Default 250 |
| reserve_fraction | fraction | 0 | 0.99 | Default 0.15 |
steps— Ordered exercise steps; JSON array, units U; default SHA-256 cab7cc7fb867753a7600370a8af4f3a1b2f5c8a6bf4d4a115d83918d40f39055.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
available budget = rated power * available fractionstep passes if active power + inrush <= rated power * (available fraction - reserve fraction)states: dark -> grid-forming-ready -> bus-energized -> load-restored
Model limits
- Procedural finite-state exercise only; no transient, protection, motor-start, or energization validation.
- Budgets and sequence require system-specific operator review.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 9584284a0d8d5f8c4a17e1b03cbde839d3d5a46d385a105ce252bc771dffb4fa; result evidence digest a94bfaff59524438a7f2c816d99703b6c123d0e27160fd52d3cf0593edcf818f. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Learning studio / lessons
lessons-hydrogen · Hydrogen energy pathway
Close the electrolyzer, compression, LHV storage, and fuel-cell energy ledger.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| electrolyzer_kwh_per_kg | kWh/kg H2 | 33.3 | 200 | Default 52 |
| compression_kwh_per_kg | kWh/kg H2 | 0 | 100 | Default 2 |
| fuel_cell_electric_efficiency | fraction | 0 | 1 | Default 0.5 |
| hydrogen_lhv_kwh_per_kg | kWh/kg H2 | 33.3 | 33.3 | Default 33.3 |
batch— Hydrogen batch; JSON object, units U; default SHA-256 576500d0ef9c90dbfa6f097862e0186506043c8ab5fda9ccb5e460c69202e256.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
chemical energy = hydrogen mass * 33.3 kWh/kg (LHV basis)fuel-cell electricity = chemical energy * electric efficiencyelectricity input = useful output + electrolysis + compression + fuel-cell losses
Model limits
- Stage parameters are illustrative, not measured plant performance.
- Compression boundary, delivery pressure, leakage, and plant auxiliaries are not modeled.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 5c32abfe7e669a83892218dd80d1b40470274d16eb58c9d953df8ea4fe25145b; result evidence digest a8e3dd7e6715de6cc54143790fdf170cdb52594814ef8eca030ec596e5c8ca69. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Scenario compare / compare
compare-pareto · Comparable-run Pareto screen
Show cost, service, SOC endpoints, sampled expected loss-of-load hours, dominance, and a disclosed weighted preference.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| cost_weight | fraction | 0 | 1 | Default 0.4 |
| service_weight | fraction | 0 | 1 | Default 0.3 |
| loss_of_load_weight | fraction | 0 | 1 | Default 0.3 |
candidates— Scenario-tagged run results; JSON array, units U; default SHA-256 2a66d8ca20fa1409aed033e87b239e12c3cf564a838726febcc89ba3128683c0.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
a dominates b when it is no worse on all objectives and strictly better on onescore = weighted sum of within-group min-max normalized objectives
Model limits
- Comparison requires matching scenario, sample-set key, horizon, service basis, and sample count.
- Expected loss-of-load hours are supplied estimates; recommendation depends on user weights.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 4f296a339cebe21478c3d273ea0ae99ce1fe429331b902b55bdc7bdec85afcba; result evidence digest 22f332e760056403db191bc62dd3d0e3adce59679220837f6574b1ca6d374f64. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Scenario compare / compare
compare-dunkelflaute · Fourteen-day storage dispatch
Dispatch storage over a non-repeating synthetic 336-hour path with fixed initial and terminal SOC.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (5 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| energy_capacity_kwh | kWh | 0.001 | 10000000 | Default 500 |
| power_limit_kw | kW | 0.001 | 1000000 | Default 120 |
| charge_efficiency | fraction | 0.01 | 1 | Default 0.94 |
| discharge_efficiency | fraction | 0.01 | 1 | Default 0.94 |
| initial_soc_kwh | kWh | 0 | 10000000 | Default 250 |
load_kw— 336 hourly demand values; JSON array, units U; default SHA-256 82c7687716acf5867c8ed176f4a9485d2712cea2107738134e7f9aed1645488d.renewable_kw— 336 hourly renewable values; JSON array, units U; default SHA-256 7591e40d252a1168119fad73b30ece299aa1c38315c2805ca08277e25cd4f7c3.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
renewable + discharge + shortfall = load + charge + curtailmentSOC[t+1] = SOC[t] + charge efficiency*charge - discharge/discharge efficiencycharge <= power limit*mode; discharge <= power limit*(1-mode); mode is binaryminimize shortfall subject to SOC[0] = SOC[336] = initial SOC
Model limits
- One synthetic 336-hour weather path, not a repeated demo day or statistical LOLE estimate.
- Reduced mixed-integer dispatch enforces battery direction but omits degradation, reserves, network, and market constraints.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 8af60e8d4cf71a8d86659bb5e5c5ba2bf4d25d664bee3104b4f99dc22b87dec5; result evidence digest 89a51d19bb519a2ef7d5c85c8930429869efb1fb73aa710bb87f67fe052b5eef. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Scenario compare / compare
compare-thermal · Thermal and cycle-wear screen
Compare utilization, equivalent full cycles, an explicit temperature multiplier, and three-axis radar data.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| reference_temperature_c | °C | -40 | 100 | Default 25 |
| temperature_factor_per_c | 1/°C | 0 | 0.1 | Default 0.025 |
| screening_loss_fraction_per_1000_efc | fraction | 0 | 1 | Default 0.025 |
| years | year | 1 | 30 | Default 1 |
regimes— Operating regimes; JSON array, units U; default SHA-256 80f6accecf99eba2f0b9eaf452917f80440544b4706368f04a9f4ab6d21e3ea2.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
EFC = years * 365 * cycles/day * utilization * depth of dischargethermal multiplier = exp(user factor * (temperature - reference temperature))screening wear index = EFC * user loss fraction / 1000 * thermal multiplier
Model limits
- Temperature factor and cycle-loss rate are assumptions, not fitted cell-aging laws.
- Wear index may exceed 100%; it is not a capacity-fade forecast, warranty, or safety limit.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest def66335c4dbfa79561796b23366e2d2559bed9833b40065e22a3a4b73aa6720; result evidence digest 9e7ebf8fafac1e98389c3b5a9de3afa154ae2df791e6b0423168b8d57b085d0c. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Construction & pilots / pilots
pilots-photogrammetry · Paired as-built geometry check
Compute 3D paired-point residuals, RMSE, maximum, and a selected percentile.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| coordinate_scale_m | m/unit | 0.000001 | 100000 | Default 1 |
| reporting_limit_m | m | 0 | 100000 | Default 0.05 |
| percentile | % | 50 | 99.9 | Default 95 |
design_points_xyz— Design XYZ points, index-paired; JSON array, units U; default SHA-256 6e9106a2fce695bf8b464f17641c8dd54e531b9f38ec1e444421c41f5949a69e.asbuilt_points_xyz— As-built XYZ points, index-paired; JSON array, units U; default SHA-256 1d773ffb0ac6f68200d7106dfdcb01307dd29bc286e38cf9cad8a9dfd46cc887.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
error[i] = norm(as-built XYZ[i] - design XYZ[i]) * coordinate scale3D RMSE = sqrt(mean(error[i]^2))selected error = empirical percentile of paired errors
Model limits
- Pairs are matched by array index; no registration, nearest-neighbour search, camera model, or drone connector.
- The user reporting limit does not establish survey or construction acceptance.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 75676277e4f66bf40a75f8e2dc2ecca75e6f9474083c5731d07f175859086f29; result evidence digest 390ffec5d3cffcd21004820749913b489ff8a1ec3776ad06463e5ba48301f6b3. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Construction & pilots / pilots
pilots-dts · Distributed temperature profile
Report fresh hot spots, spatial gradients, missing samples, and stale observations.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| hot_spot_threshold_c | °C | -50 | 200 | Default 75 |
| gradient_threshold_c_per_m | °C/m | 0 | 100000 | Default 0.25 |
| maximum_age_hours | h | 0 | 100000 | Default 2 |
| current_time_hour | h | 0 | 1000000 | Default 10 |
samples— Spatial temperature samples with timestamps; JSON array, units U; default SHA-256 1bcf94d8bbd2a4c3b870a17302b07fbde25a88ce3e5a2918135dc0e15c29dd35.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
gradient = abs(adjacent temperature difference) / adjacent distancefresh when current time - observed time <= user maximum age
Model limits
- Sample temperatures and the user threshold are bounded to -50–200 °C; adjacent samples must be at least 0.1 m apart.
- Thresholds are user screening values; no cable rating or calibrated alarm is claimed. Missing and stale observations are excluded from current thermal summaries.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest f59e798220b3d7b1be3368ff8c1cc719e24f83737ef58e0746ddc750bd062640; result evidence digest 947c2de4f18bb9348d6a9f6a9b3e4add3b88a49b1f21724184b01b6692b18818. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Construction & pilots / pilots
pilots-offgas · Hypothetical multisensor warning vote
Apply temperature, CO, and VOC thresholds and a sensor-level voting rule.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| temperature_threshold_c | °C | -100 | 500 | Default 70 |
| co_threshold_ppm | ppm | 0.001 | 100000 | Default 35 |
| voc_threshold_ppm | ppm | 0.001 | 100000 | Default 5 |
| votes_required | sensors | 1 | 32 | Default 2 |
sensors— Temperature/CO/VOC readings; JSON array, units U; default SHA-256 02784d3a1195bfb3bf704df82bc03182c22d719079b271a971f4a9ad858e50bc.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
sensor vote = any present channel meets or exceeds its user thresholdwarning state = sensor votes >= required votes
Model limits
- Hypothetical logic only; thresholds are not calibrated alarms, exposure limits, or hazard controls.
- No gas analyser, sensor-health connector, cross-sensitivity model, or field alarm is implemented.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest b91d1186ba0f6ff26716ae33b92353cc69d9be8d89716e0b4f3bb0280ba49d4a; result evidence digest 3917f701da3cefd434c2eceb1548842944107e1e76ffea54389293e6a9b41456. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Agent council / council
council-debate · Finance versus storage debate
Create deterministic proposer/challenger rounds and leave unresolved evidence conflicts visible.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| capex_eur | EUR | 0 | 1000000000000 | Default 1200000 |
| annual_net_value_eur | EUR/year | -1000000000 | 1000000000 | Default 230000 |
| life_years | year | 1 | 60 | Default 15 |
| discount_rate_fraction | fraction | 0 | 0.5 | Default 0.08 |
finance_evidence— Proposer evidence; JSON array, units U; default SHA-256 1fe862a73f360a5e2fba728e50ed9174d7a59d859b73173157cb9f616bbb55dd.storage_evidence— Challenger evidence; JSON array, units U; default SHA-256 271546ffb361280af9676e04b76fcbc558b5b548c24ce6a3f8e9df2683de3437.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
NPV = -capex + sum(annual net value / (1 + discount rate)^year)matched claims converge only when units agree and values fit declared tolerance
Model limits
- Rounds are deterministic comparisons of supplied assertions; no LLM or external agent is called.
- Conflicts remain disputed; the NPV screen is not approval or a dispatch-finance bridge.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest b4d3ef0a82d47eb5426bbea1e0f487fc37b60f67eeafbacc7463f8e1c0a947a7; result evidence digest 773495176ce865887aa32a44db0c1d68524c8265fc152d980b8174c257354866. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Agent council / council
council-evidence · Structured evidence manifest
Check supplied tariff, warranty, and single-line JSON metadata for units, age, expiry, bounds, and provenance.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| maximum_manifest_age_days | days | 0 | 36500 | Default 3650 |
| maximum_tariff_eur_mwh | EUR/MWh | 0.001 | 100000 | Default 2000 |
| maximum_warranty_years | years | 0.001 | 100 | Default 50 |
| maximum_single_line_nodes | nodes | 1 | 1000000 | Default 10000 |
manifest— Structured document manifest; JSON object, units U; default SHA-256 13fab004e43f65a29ea4769e6cee62b6b8e59d59c87415ebda96bb5142ff2755.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
age = as-of date - issue dateexpiry finding when expiry date < as-of datefield check = expected field name and unit plus configured numeric bound
Model limits
- Structured JSON metadata only; no OCR, retrieval, signature validation, or authenticity verification.
- Provenance references are user-supplied text and are not independently checked.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest e181e55e9cb797e400b89ef29b9add70c3536e1bb1ad75327e280c26de8ae2b9; result evidence digest ca55f0d38e64683c1c029844bea50202dbfdd92d5548850ba884fa82cec7f598. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Agent council / council
council-consensus · Bayesian evidence toy model
Update a binary prior from explicit likelihood ratios and show normalized probability and Shannon entropy.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| prior_probability | probability | 0 | 1 | Default 0.35 |
| maximum_absolute_log_likelihood_ratio | log ratio | 0 | 20 | Default 4 |
| evidence_weight | fraction | 0 | 1 | Default 1 |
evidence— Likelihood ratios and dependency labels; JSON array, units U; default SHA-256 9d07bef887eaa2282ddf2d9637913f31e6032f6a06d5349dbc1841ee9c7c3bca.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
posterior odds = prior odds * product(likelihood ratios)posterior probability = odds / (1 + odds)binary Shannon entropy = -p log2(p) - (1-p) log2(1-p)
Model limits
- Likelihood ratios are hypothetical; raw product assumes conditional independence.
- Repeated dependency groups are flagged, not deduplicated; no unanimity or approval is inferred.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest d96dd3dcd89a139aefc25cc6f7c6ac371c8e5f2e1eecc9b95615e4b45e907ed9; result evidence digest 142ae1b303c71245e60acbc32b5e97e7dc674256c5b83fa4d0eaafb3db42a77a. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.
Storage & flexibility / storage
storage-annual · 8760-hour dispatch and tariff builder
A complete seasonal year or supplied hourly series, with a transparent tariff policy and monthly billing.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (9 numeric; 3 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| capacity_kwh | kWh | 1 | 1000000 | Default 10000 |
| power_kw | kW | 1 | 1000000 | Default 5000 |
| pv_kwp | kWp | 0 | 1000000 | Default 5900 |
| base_load_kw | kW | 0 | 1000000 | Default 3000 |
| efficiency | U | 0.5 | 1 | Default 0.9 |
| wear | EUR/kWh | 0 | 1 | Default 0.015 |
| monthly_peak | EUR/kW | 0 | 100 | Default 0 |
| export_price | EUR/kWh | 0 | 3 | Default 0.04 |
| seed | U | 0 | 4294967295 | Default 42 |
tariff— 24 hourly import tariffs (EUR/kWh); JSON array, units U; default SHA-256 e6f1e10aab1b4a79ab1c7096d8bbbb39a396e2e228db4141f7cd2b5ad4d0b7a1.hourly_load_kw— Optional full-year load (8760 kW values); JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.hourly_pv_kw— Optional full-year PV (8760 kW values); JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
SOC[t+1] = SOC[t] + sqrt(efficiency)*charge - discharge/sqrt(efficiency)Monthly demand cost = sum(monthly maximum import kW * monthly tariff)Both initial and terminal SOC = 50%; usable range = 10–90%.
Model limits
- Explicit non-leap 8760-hour calendar; no DST. Synthetic seasonal weather is not site-calibrated.
- Transparent tariff-threshold policy, NOT the short-horizon MILP or a globally optimal annual solution.
- Unconstrained grid connection; no reserve services, outages, demand ratchets, taxes or fixed fees.
- No daily result is multiplied by 365. Annual totals sum every generated or supplied hour.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 67dc3f746227f6ac9d591f65a760c0efc1cbf87e936f0b981ca74ee7e186fa93; result evidence digest 4828edd3b44c5d6c78b33b4797c2be206b17b9863bd306511e97b51ae0cdb53d. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: toolkit_studies.py. Tests: test_toolkit_studies.py · test_studies_api.py. Shared study result contract.
PV economics / pv
pv-sensitivity · LCOE contour sensitivity
A 9 × 9 CAPEX and yield surface evaluated by the existing discounted PV engine.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| capex_eur_kwp | EUR/kWp | 100 | 5000 | Default 650 |
| yield_kwh_kwp | kWh/kWp | 400 | 2200 | Default 1350 |
| discount | U | 0 | 0.4 | Default 0.07 |
| opex | EUR/kWp | 0 | 100 | Default 12 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
LCOE = discounted lifecycle costs / discounted lifetime MWh
Model limits
- Constant money; the parent PV engine retains its 30-year life and year-15 replacement assumptions.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 28d019d628356b52ba2e634b617fb4879f0531f42dd272f84373a245867026ed; result evidence digest 14c9b5706212e0666e3175aaaf1754f8543b9d6bc156f62f08531372b868d934. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: toolkit_studies.py. Tests: test_toolkit_studies.py · test_studies_api.py. Shared study result contract.
PV economics / pv
pv-reserve · Inverter repowering reserve
Inflation-linked future replacement cost and equal end-of-year reserve contributions.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| cost_eur | EUR | 0 | 10000000000 | Default 1750000 |
| inflation | U | 0 | 0.2 | Default 0.02 |
| fund_return | U | 0 | 0.2 | Default 0.03 |
| years | U | 1 | 50 | Default 15 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
Future cost = present cost * (1+inflation)^yearsAnnual deposit = future cost * return / ((1+return)^years - 1); zero return: cost/years
Model limits
- Constant annual assumptions; end-of-year contributions, no tax, fees or investment-return guarantee.
- First-party algebraic convention; the source reference is not independent validation or a forecast of investment returns.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest fe97427ec80a38468af22b4f978a179a982260dbbdc7d78c41364df9974ad5fc; result evidence digest f828d0f7794f7d0657ef2f7c5feda826c6991edd0f19c63f43e68b24172e8dd1. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: toolkit_studies.py. Tests: test_toolkit_studies.py · test_studies_api.py. Shared study result contract.
Hybrid systems lab / hybrid
hybrid-powerflow · Balanced AC nodal power flow
Solve a bounded balanced PQ/slack network and inspect actual voltage phasors, branch complex powers, losses and ratings.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (3 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| base_mva | MVA | 1 | 1000000 | Default 100 |
| tolerance_pu | p.u. | 1e-12 | 0.0001 | Default 1e-9 |
| max_iterations | iterations | 2 | 200 | Default 40 |
buses— Balanced slack and PQ buses; JSON array, units U; default SHA-256 a7a96238b8d127c619657a0d5d5369ccc06d7163a1cba24dcc27df2e9fd197de.branches— Series branches and MVA limits; JSON array, units U; default SHA-256 e8cfa4e15e2be03e4304365aff45787fdf3c00e9b6be91340725ac13894f584c.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
I = Ybus·V; Sbus = V·conj(I)PQ residuals are calculated P/Q plus specified positive loads; slack voltage magnitude and angle are fixed.Branch-end S = V·conj(Ibranch); real branch loss = Pfrom + Pto.
Model limits
- Balanced positive-sequence per-unit educational model; one slack bus and constant-power PQ loads only.
- No generator PV/Q limits, transformers, controls, protection, unbalanced phases or operational dispatch.
- Non-converged or non-finite solutions fail closed. Overloaded branch ratings are reported, not controlled.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 75bd8bd8e2d3b29dcaa90947f359e43f163b85b6d115537ab52c2eb828b88e3e; result evidence digest 1d9b3567ad8f35285ba73e25ef99164b960ef26f48e70b980a4018461aedc78c. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
Hybrid systems lab / hybrid
hybrid-switching · PWM inverter/filter transient
Compare single-phase bipolar PWM switching with its averaged voltage in a series RL grid filter.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (10 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| switching_enabled | U | 0 | 1 | Default 1 |
| dc_link_voltage_v | V | 100 | 2000 | Default 650 |
| modulation_index | U | 0 | 0.95 | Default 0.85 |
| fundamental_hz | Hz | 40 | 70 | Default 50 |
| switching_hz | Hz | 100 | 5000 | Default 2000 |
| filter_inductance_h | H | 0.0001 | 0.1 | Default 0.003 |
| filter_resistance_ohm | Ω | 0.05 | 20 | Default 0.5 |
| grid_voltage_rms_v | V RMS | 10 | 1000 | Default 230 |
| time_step_s | s | 0.000001 | 0.00005 | Default 0.00002 |
| simulation_cycles | U | 1 | 5 | Default 2 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
L·di/dt = vinverter(t) − vgrid(t) − R·iSwitched bridge: vinverter ∈ {−Vdc/2, +Vdc/2} from sinusoidal-reference/carrier comparison.Averaged bridge: vinverter = (m·Vdc/2) sin(2πf1t); RL step uses the exact constant-input exponential update.
Model limits
- Single-phase series-RL filter, ideal bipolar switches and stiff sinusoidal grid; no semiconductor losses, dead time, PLL or control loops.
- Switching mode is explicitly sampled; the averaged mode removes carrier ripple. This is not a validated EMT product study.
- A half-step current-RMS comparison is reported as a numerical resolution check.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 40cf32e2f140ef8600c12805d08b9416a762df6a45f75f88fe27bb5a2904546c; result evidence digest 4740e5cfe1865f4f13882295edf9045f9844f0a513079bdb93428478922860e4. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
Learning studio / lessons
lessons-energization · Timed LRC energization transient
Inspect an R-L-C series circuit current and stored/dissipated energy around a single timed breaker closing step.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (10 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| source_voltage_rms_v | V RMS | 1 | 1000 | Default 230 |
| frequency_hz | Hz | 40 | 70 | Default 50 |
| breaker_close_s | s | 0 | 0.1 | Default 0.005 |
| resistance_ohm | Ω | 0.1 | 100 | Default 5 |
| inductance_h | H | 0.001 | 2 | Default 0.05 |
| capacitance_f | F | 0.0001 | 0.5 | Default 0.001 |
| initial_capacitor_voltage_v | V | -1000 | 1000 | Default 0 |
| closing_phase_deg | degrees | -180 | 180 | Default 0 |
| time_step_s | s | 0.000001 | 0.00005 | Default 0.00002 |
| simulation_cycles | U | 1 | 5 | Default 2 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
L di/dt = vsource − R i − vC after breaker closeC dvC/dt = i; before the close event, i and vC remain constant.E = ½Li² + ½CvC²; dE/dt = vsource·i − Ri² while connected.
Model limits
- One ideal single-phase series-RLC branch with a source-side close event; no transformer saturation, relay logic, arc or multi-step restoration.
- This lesson is not a black-start study or a certified energization/inrush limit assessment.
- A half-step peak-current comparison and circuit energy residual are reported.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 94d879bbb2569af4d4553c6451bcc27f7cb7482de76c493d732be9dbac1b49fa; result evidence digest 4605f2da9463e436145e356516dc219608eb59c67e182996e2ea680db8294a69. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
Storage & flexibility / storage
storage-response · Sub-second frequency droop response
Apply frequency droop with a deadband, ramp, power cap, SOC limits and explicit interval energy integration.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (11 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| nominal_frequency_hz | Hz | 45 | 65 | Default 50 |
| deadband_hz | Hz | 0 | 1 | Default 0.02 |
| droop_kw_per_hz | kW/Hz | 0 | 1000000 | Default 2500 |
| power_limit_kw | kW | 0 | 1000000 | Default 1000 |
| ramp_kw_per_s | kW/s | 0 | 10000000 | Default 1000 |
| capacity_kwh | kWh | 1 | 1000000 | Default 2000 |
| initial_soc_fraction | U | 0.1 | 0.9 | Default 0.5 |
| minimum_soc_fraction | U | 0 | 0.89 | Default 0.1 |
| maximum_soc_fraction | U | 0.11 | 1 | Default 0.9 |
| round_trip_efficiency | U | 0.5 | 1 | Default 0.9 |
| interval_s | s | 0.001 | 0.5 | Default 0.1 |
frequency_hz— Observed frequency samples; JSON array, units U; default SHA-256 530dfac6fa6eebdee7b67fa75a0e2a8ca77118ebeab4bc55a3f7de855249222b.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
Pcommand = −droop·(f − fnominal) outside the selected deadbandPower is bounded by ramp, rated kW and SOC energy headroom.ΔSOC = −P·Δt/(3600·ηdischarge) for discharge; charge uses ηcharge; delivered kWh = ΣP·Δt/3600.
Model limits
- Deterministic response to supplied frequency samples; each interval holds its measured frequency and output power constant.
- No grid-code, telemetry, controls, inverter current, reserve procurement, metering or service-qualification model.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest f8e2972bdbefc8d10947470e43793990816dd4b9307e73ee665f86c2c089a120; result evidence digest 0e8d70eeafe5070307b4b577a921be50f1b8ef111ad217346152834515f60ff7. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
Storage & flexibility / storage
storage-agingfit · Capacity-fade coefficient fit
Fit a small empirical cycle-and-temperature response on supplied records and score a held-out validation split.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (0 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| No scalar numeric fields declared; inspect JSON fields and the linked input model. | ||||
observations— Cycle, temperature and capacity observations; JSON array, units U; default SHA-256 0f13d2b5bfa24dc5757e602d4ebbd5e5d5efd76a0fd8e6ed0cb4f9c867f6e841.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
retention = 1 − a·(cycles/1000)·exp(b·(temperature°C − 25))SciPy bounded least-squares fit uses records 0–3 of each fixed five-record group; every fifth record is held out.
Model limits
- The included records are a synthetic software fixture, not cell measurements or scientific validation.
- This two-coefficient empirical curve ignores chemistry, SOC, C-rate, calendar aging, path dependence, uncertainty and censoring.
- Held-out error describes only the supplied records and cannot qualify a warranty or predict field life.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 2b0cfcac393854bf1eea0621e4c05519a4f3a8dddd2f94fe50f0a0628b3bb29f; result evidence digest 0fd55e00d3ce367e06ebb8d259d95216eb1d0263f0166a5bddbbe1e8b6aa6ac1. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
Scenario compare / compare
compare-thermalphysics · Lumped thermal reaction screen
Compare lumped cooling with a bounded Arrhenius heat-release term and explicit stop thresholds.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (12 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| initial_temperature_c | °C | -20 | 120 | Default 25 |
| ambient_temperature_c | °C | -30 | 80 | Default 25 |
| thermal_mass_j_per_k | J/K | 1000 | 1000000 | Default 10000 |
| cooling_w_per_k | W/K | 0 | 100000 | Default 20 |
| activation_energy_kj_mol | kJ/mol | 0 | 80 | Default 35 |
| reaction_rate_ref_per_s | 1/s | 0 | 0.005 | Default 0.002 |
| reaction_energy_j | J | 0 | 10000000 | Default 25000 |
| reference_temperature_c | °C | -20 | 80 | Default 25 |
| duration_s | s | 0.01 | 120 | Default 60 |
| time_step_s | s | 0.001 | 0.1 | Default 0.05 |
| termination_temperature_c | °C | 30 | 150 | Default 100 |
| reaction_fraction_trip | U | 0.01 | 1 | Default 0.95 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
k(T) = kref·exp[−Ea/R·(1/T − 1/Tref)] with absolute temperature in kelvindα/dt = k(T)(1−α)Cth·dT/dt = Etotal·dα/dt − UA·(T − Tambient).
Model limits
- Single effective thermal mass, constant cooling and one depleted reaction; no spatial gradients or material-specific chemistry.
- Temperature/reaction thresholds only stop this illustrative calculation; this is not a validated safety alarm or hazard assessment.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 08523185b0074291bca13df53a5a252a29e86003a901b3c508fdd30483cec0ff; result evidence digest 8b86353c3d394d440a10445dd787055e4c3f3c9f3bc1ca3ffd6f5b63db0584f7. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
PV economics / pv
pv-raytrace · Panel-sample ray-triangle shading
Intersect directional sun rays with supplied terrain/obstacle triangles and integrate direct-beam energy at panel samples.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (0 numeric; 3 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| No scalar numeric fields declared; inspect JSON fields and the linked input model. | ||||
panel_samples— Panel positions, normals and sample areas; JSON array, units U; default SHA-256 5a6cc1da801faa796c817be8d7a663ab52e8613989eefa7ce38b46b7657ce929.sun_vectors— Sun directions, beam irradiance and duration; JSON array, units U; default SHA-256 cc98c685138dc56d58403c4cf5488fe95779a4d8d3c86c4bfa2b4478a7cfd693.occluder_triangles— Terrain and obstacle mesh triangles; JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
incidence = max(0, n̂·ŝ); direct energy = DNI·panel area·incidence·duration.A ray is shaded when a supplied triangle intersects the half-line from a panel sample toward the sun.
Model limits
- Directional direct-beam only; no diffuse sky, ground reflection, spectral response, horizon/weather series or panel electrical mismatch.
- Triangles and panel samples are user-supplied local Cartesian geometry; results depend on mesh completeness and coordinate quality.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 07fc8b63015690a8a79483c530d31959f076fd2ece8a5c5d19c1631f0b693ea8; result evidence digest 5f872d05000657728e1843edb375763a76550c22a0abe7c20475d446d21dbbf4. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
PV economics / pv
pv-setbacks · Parcel setbacks and crop-light screen
Apply planar polygon setbacks to multipolygons with holes, then expose a clearly uncalibrated PAR-to-light-response screen.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| setback_m | m | 0 | 100 | Default 2 |
| pv_cover_fraction | U | 0 | 0.9 | Default 0.3 |
| module_par_transmission_fraction | U | 0 | 0.8 | Default 0.1 |
| baseline_par_mol_m2_day | mol/m²/day | 0 | 100 | Default 35 |
| light_half_saturation_mol_m2_day | mol/m²/day | 0.1 | 100 | Default 12 |
| photosynthesis_max_g_m2_day | g/m²/day | 0 | 1000 | Default 20 |
parcels— Planar parcels with optional interior holes; JSON array, units U; default SHA-256 c5e58b43e49cc7f4a68662dfa3a2b06ef34304c34e0f692b76a522d421181d37.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
usable geometry = parcel geometry buffered inward by setback distancecrop DLI = baseline PAR·[1 − cover·(1 − module transmission)]illustrative response = Pmax·DLI/(DLI + half-saturation).
Model limits
- Planar Shapely geometry in user-supplied metres; no georeferencing, survey, legal boundary, easement or access-road interpretation.
- Crop-light response is a generic saturating curve, not species-, cultivar-, weather- or farm-calibrated agronomy.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 4215dcbec657d1eb390085f90fc33b89204a95eaae472437cce5b04d77933933; result evidence digest 46bcd9470a1a7c831ff8b78d5a8f44c0fd6e697fb9da7accb0438e0536e4cbf9. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
Research pillars / research
research-bearing · Bearing spectrum envelope comparison
Build a robust per-frequency spectrum envelope from training records and flag threshold exceedances in held-out vibration records.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (2 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| sample_rate_hz | Hz | 64 | 20000 | Default 256 |
| threshold_sigma | scaled MAD | 1 | 20 | Default 4 |
training_records— Baseline vibration records; JSON array, units U; default SHA-256 39afa40f4ed35aff229249f6337a8d0814a4c89452e1a4a07fe859dcd756d45f.heldout_records— Held-out vibration records; JSON array, units U; default SHA-256 987a1e9e3d737f65484c604c59ed4e2e69612e38681662f5dbcd7e43a9fbb8cc.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
one-sided amplitude spectrum = |rFFT((x−mean(x))·Hann)|·2/sum(Hann)per-bin envelope = median(training) + threshold·max(1.4826·MAD, 5% of median, floor)held-out record is flagged if any spectral bin exceeds its baseline envelope; maximum_envelope_exceedance_sigma is max((amplitude−envelope)/scale) over exceeded bins, or zero when no bin exceeds.
Model limits
- The fixture is synthetic; sampling, sensor mounting and training records determine the envelope.
- A spectral threshold exceedance is an anomaly screen only. It does not identify a bearing fault, root cause, severity or remaining life.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 64a8f7bd96a1bd58e64532c0787e609a38d8b244218fcf177790f11674789934; result evidence digest 42c23e10b2a4dc7898ba9b4ea4f7a349c880bbadf7d1fc1c74acb2140ab46cdd. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.
Storage & flexibility / storage
storage-annualopt · Full-year storage optimization
Optimize 8,760 hourly intervals with battery direction, SOC, grid limits, and twelve monthly demand peaks.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (5 numeric; 4 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| capacity_kwh | kWh | 0 | 10000000 | Default 600 |
| power_kw | kW | 0 | 100000 | Default 150 |
| round_trip_efficiency | fraction | 0.01 | 1 | Default 0.9 |
| monthly_demand_charge_eur_kw | EUR/kW-month | 0 | 100000 | Default 0 |
| solver_time_limit_seconds | s | 0.25 | 10 | Default 4 |
load_kw— Non-leap-year hourly load; JSON array, units U; default SHA-256 19c38482774cc0362389aefac1a09847a72bb67013fef9792d167dbc36da7bc6.pv_kw— Non-leap-year hourly PV; JSON array, units U; default SHA-256 eb2eb582f84e5a5027853645ded6a2608c4d50b5e25a46883cdaa366983b81e4.import_price_eur_kwh— Hourly import tariff (24 points or annual); JSON array, units U; default SHA-256 568a0ae914630d1131e4b90f41c350ef18d217f0789ad7583e31e3d9e2885834.export_price_eur_kwh— Hourly export tariff (24 points or annual); JSON array, units U; default SHA-256 e871ea33962c8f9b5c9d50afd403cdcfa448e8b061866e5fd54b0876e57b16af.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
SOC[t+1] = SOC[t] + ηcharge·charge[t] - discharge[t]/ηdischargegrid import + PV - curtailment + discharge = load + charge + grid exportannual objective = hourly energy/wear costs + Σmonth demand_charge × monthly peak importSOC[0] = SOC[8760] = supplied initial SOC
Model limits
- Non-leap year with equal one-hour intervals; 24-point tariffs repeat by hour of day.
- Import price must strictly exceed export price each hour; simultaneous grid import/export is then dominated.
- Synthetic defaults are not a meter record, billing tariff, reserve product, degradation model, or investment case.
- A time-limit, infeasible, or non-optimal HiGHS result is rejected; the returned schedule is only a proven optimum.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 6d4028334ec7520fad95532938f96b2cf422dfec43ea3b0a3b45be09d5b7300e; result evidence digest ce23df9c5d2081bc61c238a338aad8d570e8e317b3c25c6a9f2698db90205900. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Scenario compare / compare
compare-reliability · Chronological reliability ensemble
Seeded Monte Carlo samples weather variation and generator failures while preserving battery chronology.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (7 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| trials | trials | 20 | 5000 | Default 250 |
| weather_cv | fraction | 0 | 1 | Default 0.2 |
| battery_capacity_kwh | kWh | 0 | 10000000 | Default 80 |
| battery_power_kw | kW | 0 | 100000 | Default 40 |
| generator_failure_probability_per_hour | per hour | 0 | 1 | Default 0.002 |
| generator_repair_probability_per_hour | per hour | 0.001 | 1 | Default 0.08 |
| annualization_hours | hours | 8760 | 8784 | Default 8760 |
load_kw— Hourly demand; JSON array, units U; default SHA-256 6ae304a67cfff92d8d9bbffb9bb0b7a90b2870dd5356db19eeb06d8ebaaa45d4.renewable_kw— Hourly weather-dependent renewable output; JSON array, units U; default SHA-256 e7c980528c1c0b49e0e7f6679ecb9b60b12c21b65686ea19a4627e9e4713598f.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
LOLE[horizon] = mean over trials of hours with unserved loadEENS[horizon] = mean over trials of Σ unserved kWhannualized metric = horizon expectation × annualization_hours / horizon_hoursSOC evolves once across each sampled chronology; it is initialized once per trial
Model limits
- Weather is a mean-one lognormal AR(1) multiplier; a single thermal unit follows a geometric failure/repair process.
- Annualization assumes the supplied horizon represents a typical year; it does not stitch repeated horizons or certify a resource adequacy standard.
- Two-sided 95% Hoeffding intervals use independent bounded trial-level annualized outcomes and can be wide, especially with few or zero observed loss events; no weather-year sampling or network adequacy model is included.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest dcd927302399abfbfb70039b8f658f8065f372e8b8515ac572ef2720af755509; result evidence digest 3443d2200bea3e467b6da7795c279ad33f7023d268bf56990a1e6032b5be4881. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Forecast studio / forecast
forecast-cointegration · Rank-assumed energy-price VECM
Fit a gas/carbon/power long-run relation and short-run error-correction dynamics, then hold out later observations.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 3 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| training_fraction | fraction | 0.5 | 0.9 | Default 0.75 |
| rank_assumption | rank | 1 | 1 | Default 1 |
| lag_count | lags | 1 | 4 | Default 1 |
| forecast_steps | observations | 1 | 48 | Default 12 |
gas_price_eur_mwh— Observed gas prices; JSON array, units U; default SHA-256 e3896729257dbb65eddb30181de73230bf79f019447b61f462394504fd88ccdc.carbon_price_eur_t— Observed carbon prices; JSON array, units U; default SHA-256 038f5d0f8147f90b5846115343f0b19d955b7dcfdd6847ce489315cd733c75be.power_price_eur_mwh— Observed power prices; JSON array, units U; default SHA-256 95afc7d77563ec545a0b2bcc0c66472f45cd9c6c75826dde00b5253bf1ec0b44.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
ECT[t] = power[t] - α - βgas·gas[t] - βcarbon·carbon[t]Δy[t] = c + loading·ECT[t-1] + Σ Γj·Δy[t-j] + ε[t]long-run relation and short-run VECM coefficients are fit on the first chronological segment only
Model limits
- Rank one is an explicit assumption; no Johansen rank test, unit-root test, or seasonal adjustment is performed.
- This OLS error-correction screen is not a likelihood-based Johansen estimator or a calibrated commodity forecast.
- Synthetic examples do not substitute for timestamp-aligned, currency-consistent, real market observations.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 7d4537493146637d22ad2b6e70ea84513aaca87189d84c444180f31954ae3c5c; result evidence digest b41a38367b9f62b444b127367732935a075e99c6e3e1fec7feedfa8c4d721b76. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Forecast studio / forecast
forecast-backtest · Chronological price forecast backtest
Fit an ARX one-step model on early rows and score later rolling-origin forecasts with empirical interval coverage.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (2 numeric; 3 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| training_fraction | fraction | 0.5 | 0.9 | Default 0.75 |
| interval_z_score | z | 0.5 | 4 | Default 1.96 |
target_price_eur_mwh— Target price observations; JSON array, units U; default SHA-256 95afc7d77563ec545a0b2bcc0c66472f45cd9c6c75826dde00b5253bf1ec0b44.gas_price_eur_mwh— Gas observations; JSON array, units U; default SHA-256 e3896729257dbb65eddb30181de73230bf79f019447b61f462394504fd88ccdc.carbon_price_eur_t— Carbon observations; JSON array, units U; default SHA-256 038f5d0f8147f90b5846115343f0b19d955b7dcfdd6847ce489315cd733c75be.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
target[t] = β0 + β1·target[t-1] + β2·gas[t-1] + β3·carbon[t-1] + ε[t]MAE = mean(|actual - forecast|); RMSE = sqrt(mean((actual - forecast)^2))interval coverage = held-out actuals inside fitted training residual interval / holdout count
Model limits
- Uses rolling one-step actual target lags and the preceding observed gas/carbon values; multi-step future drivers are not forecast.
- Prediction intervals use a normal residual approximation and omit parameter uncertainty.
- A chronological holdout is an evaluation, not independent market calibration or a guarantee of future performance.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 6a6896f8518a7cf0bd9075158a7054d44fc678244e22ea80a4b494ede7a49363; result evidence digest b7514eef2960733e4d188dbe7fd36976cc31556470b4fb1ab72446411e088f4e. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Market intelligence / markets
markets-network · Six-zone DC optimal power flow
Dispatch six zonal generators through a connected linear DC network with branch limits and nodal prices.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (0 numeric; 5 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| No scalar numeric fields declared; inspect JSON fields and the linked input model. | ||||
zone_names— Six zone names; JSON array, units U; default SHA-256 8be8e041255567ca9d0281045dbd0dff33546df05cecf735906113d83c2dc1ca.demand_mw— Zonal demand; JSON array, units U; default SHA-256 ad466d9d56fc96afa7c8701ebe784ad0ce72fc36a05be4f1587bd599692b045f.generator_capacity_mw— One generator capacity per zone; JSON array, units U; default SHA-256 84d97a2e95b8a98952f06a60726c9f0fca44312651da05b787349638bdf2ba4c.generator_cost_eur_mwh— Marginal generation cost; JSON array, units U; default SHA-256 21702b464e9c841d1df98ebc0c4a85ef7af2b2e9030f7bd251e47a34f09bc138.lines— Branch susceptance and thermal limits; JSON array, units U; default SHA-256 1fcbaab72ca6fd1437cc970c11e8ce12620c06e8bd74c93e0b08a17947a8c3a4.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
flow[i,j] = susceptance[i,j]·(angle[i] - angle[j])generation[i] + net_import[i] = demand[i]min Σ generator_cost[i]·generation[i] subject to nodal balance, capacity, and branch limits
Model limits
- Linear DC active-power approximation with one aggregated generator per zone; no losses, reactive power, voltage, dynamics, or reserves.
- Network parameters and costs are user assumptions; no calibrated six-zone topology or real zonal market is supplied.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 352cb15ff3677bce24a97e8505369fbd449df5a7d0d5971b41540e9b0528e691; result evidence digest 00a574b4a7e187ab687dc394ee394d06d94591832e12d54ded14decb6908e9af. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Investment desk / investment
investment-contracts · Contract, tax, and reserve cash flows
Build separate project and equity cash flows with dated floor volumes, merchant sales, tax losses, DSRA, and working capital.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| capex_eur | EUR | 0 | 1000000000000 | Default 8000000 |
| debt_share | fraction | 0 | 0.9 | Default 0.55 |
| debt_interest_rate | fraction | 0 | 0.5 | Default 0.055 |
| tax_rate | fraction | 0 | 0.6 | Default 0.25 |
| dsra_months | months | 0 | 12 | Default 6 |
| working_capital_fraction_of_revenue | fraction | 0 | 0.5 | Default 0.08 |
operating_years— Dated annual operating observations; JSON array, units U; default SHA-256 c2e8a76d9cb343b1d52a6bef851945281f8b81e59c461ee1d12e16c16999c2f6.contracts— Calendar-year floor volume terms; JSON array, units U; default SHA-256 eef80e2b46e4e29489add81f401360da597f4d3fdf629ce7dd0977f94e84a3a2.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
contracted volume = min(generation, annual contract volume) while term is in forcecontracted settlement price = max(user floor price, supplied merchant price)taxable income = EBITDA - straight-line depreciation - interest (equity tax case); tax loss carries forward within this screenequity CF = EBITDA - cash tax - debt service - DSRA funding + DSRA release - Δworking capitalproject CF = -CAPEX - initial working capital; subsequent CF = EBITDA - project tax - Δworking capital
Model limits
- Annual calendar-year floor and merchant-price screen; no partial-year settlement, take-or-pay, VAT, tax jurisdiction rules, loss caps, depreciation conventions, fees, or default.
- Debt is level-payment; DSRA equals configured months of scheduled service and is funded from equity at close, then released after the final debt year.
- Rates and terms are user assumptions; no signed contract or tax/legal advice is represented. Nonconventional IRR is null.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 02bd4e8946ae89f9daabf4b18c33c2fe6187b105925a407048584382c2133798; result evidence digest b9e66691c614d34db10e4e0633e8383902b04439fde417870779fd93395abe33. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Learning studio / lessons
lessons-hydrogenaux · Hydrogen auxiliary energy ledger
Account for demineralized water, electrolysis, idealized compression to 350 bar, fuel-cell auxiliaries, useful output, and losses.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (6 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| hydrogen_kg | kg | 0 | 1000000 | Default 100 |
| electrolyzer_kwh_per_kg | kWh/kg | 33.3 | 200 | Default 52 |
| water_recovery_fraction | fraction | 0.01 | 1 | Default 0.8 |
| demineralization_kwh_per_m3 | kWh/m³ | 0 | 10000 | Default 3 |
| fuel_cell_gross_efficiency | fraction | 0 | 0.8 | Default 0.52 |
| fuel_cell_auxiliary_fraction | fraction | 0 | 0.4 | Default 0.06 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
water stoichiometry = 9 kg feedwater per kg H₂ / recovery fractionideal isothermal compression = m·R_H₂·T·ln(Pout/Pin) / compressor efficiencyelectricity input = useful electricity + useful recovered heat + explicit losses
Model limits
- Isothermal ideal-gas compressor proxy from supplied outlet pressure; no real-gas, multistage, storage, leakage, purity, or pressure-drop model.
- Hydrogen LHV and 9 kg/kg stoichiometry are fixed screening conventions; plant-specific stack and water data are required.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest ed71591eb49d25c6e5660897b7daa4ebe600b7488789383880669f3fe2b4b423; result evidence digest 5d6726350869d822150e02cf2bf9b88537347cdddb2789d46b8a4c86dde51128. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Command centre / overview
overview-risk · Portfolio evidence and threshold screen
Compare supplied asset prices, debt, emissions, yield, or other numeric evidence with user-supplied limits and provenance.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (0 numeric; 1 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| No scalar numeric fields declared; inspect JSON fields and the linked input model. | ||||
evidence— Asset metric values, limits, units, and source records; JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
status = missing_value if value is absent; otherwise compare to the supplied min/max thresholdprovenance is complete only when a source reference and observation date are both supplied
Model limits
- No asset values, thresholds, or sources are fabricated; an empty dataset returns an explicit no-evidence state.
- Threshold comparison does not authenticate records, normalize units, or imply risk approval.
- The NIST publication provides materials-data evaluation context; the source-plus-date completeness rule is this application’s own checklist, not a NIST validation standard.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 8f3f9c27d9b4cfc3cf603c15667240f02309ef53bc498bede4c4fb71c87a0267; result evidence digest 85828d40d7f64615125ed0ca21b2f5f7db6cf5c8fff132b56fee221bd34b422d. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Construction & pilots / pilots
pilots-registration · Unpaired point-cloud registration
Register unordered design and survey XYZ points with trimmed nearest-neighbor ICP and a rigid Kabsch transform.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (4 numeric; 2 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| maximum_correspondence_distance_m | m | 0.0001 | 1000000 | Default 1 |
| trim_fraction | fraction | 0.25 | 1 | Default 0.8 |
| maximum_iterations | iterations | 1 | 100 | Default 60 |
| convergence_tolerance_m | m | 1e-7 | 0.1 | Default 1e-7 |
design_points_xyz— Design points (XYZ m); JSON array, units U; default SHA-256 7aa7a0411b6b561b1526546a78cc46311da50c803b9d75840ccc3f193672c9ba.survey_points_xyz— Unordered surveyed points (XYZ m); JSON array, units U; default SHA-256 e463ddc6e523cc0e6475d39ab73dbb9f947c1ca8b4dab2eed062c84c014d539d.
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
nearest-neighbor correspondences are recomputed after every transformKabsch rigid fit minimizes Σ ||R·source[i] + t - target[i]||² with det(R)=+1trim high-residual correspondences; repeat until RMSE change ≤ tolerance or iteration cap
Model limits
- Requires supplied XYZ point clouds; no drone imagery ingestion or 3D reconstruction is performed.
- Unpaired ICP can converge to a local alignment; coordinate frames, units, point density, outliers, and registration quality require survey review.
- No scale, non-rigid deformation, georeferencing, or survey certification is modeled.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 367874488470d723caec10abe36fedca2e97198ff8fe0a753f2adb1d39fe018a; result evidence digest 2781e5d644a0041bcfb805e79f0fd5f55a991a37ddbfd89f999ba4d7207837fd. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.
Hybrid systems lab / hybrid
hybrid-controls · Averaged inverter control response
Simulate a balanced dq LCL inverter with cascaded voltage/current PI control, vector limits, back-calculation anti-windup, and a refined RK4 trace.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (21 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| duration_s | s | 0.001 | 0.12 | Default 0.04 |
| time_step_s | s | 0.00001 | 0.0005 | Default 0.00005 |
| load_step_time_s | s | 0 | 0.12 | Default 0.004 |
| load_step_a | A | 0 | 500 | Default 8 |
| filter_inductance_h | H | 0.0001 | 0.02 | Default 0.0015 |
| filter_resistance_ohm | Ω | 0.001 | 10 | Default 0.08 |
| filter_capacitance_f | F | 0.000001 | 0.001 | Default 0.00002 |
| grid_inductance_h | H | 0.0001 | 0.1 | Default 0.001 |
| grid_resistance_ohm | Ω | 0.001 | 10 | Default 0.05 |
| grid_angular_frequency_rad_s | rad/s | 250 | 400 | Default 314.1592653589793 |
| grid_voltage_peak_v | V peak | 50 | 800 | Default 325.27 |
| dc_bus_v | V | 100 | 1800 | Default 800 |
| modulation_index_max | ratio | 0.4 | 0.95 | Default 0.95 |
| current_limit_a | A | 0.1 | 1000 | Default 40 |
| current_kp_v_per_a | V/A | 0.001 | 100 | Default 1.5 |
| current_ki_v_per_as | V/(A·s) | 0.01 | 100000 | Default 1000 |
| voltage_kp_a_per_v | A/V | 0.001 | 100 | Default 0.2 |
| voltage_ki_a_per_vs | A/(V·s) | 0.01 | 100000 | Default 80 |
| current_antiwindup_per_s | s⁻¹ | 0 | 10000 | Default 100 |
| voltage_antiwindup_per_s | s⁻¹ | 0 | 10000 | Default 50 |
| trace_points | points | 50 | 500 | Default 240 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
L_f·d i_f/dt = u_inv − v_c − R_f i_f + ωL_f J i_f; C_f·d v_c/dt = i_f − i_g − i_load + ωC_f J v_c; L_g·d i_g/dt = v_c − v_grid − R_g i_g + ωL_g J i_g, with J=[[0,1],[-1,0]].i_ref = sat_I(i_g+i_load+K_pv(v_ref−v_c)+K_iv∫(v_ref−v_c)dt); u_inv = sat_V(v_c+K_pi(i_ref−i_f)+K_ii∫(i_ref−i_f)dt). Integrators use back-calculation from each vector-limit residual.The averaged two-level inverter voltage bound is Vdc·m_max/√3. State derivatives are integrated with fixed-step RK4 at dt and dt/2; aligned trajectories are compared as a numerical refinement check.
Model limits
- Balanced positive-sequence dq averaged plant; the grid angle is imposed at the nominal frequency. There is no PLL state or synchronization transient.
- No PWM switching ripple, dead time, sample/computation delay, sensor filters, DC-link dynamics, unbalance, harmonics, protection, or grid-code behavior is modeled.
- The fixed-step RK4 model and local linearization are software research screens, not a calibrated controller, hardware result, field validation, or service qualification.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 58d71dd8e911c20b1c3fc01dc2d8887a8917f80e75d256549465cb3af365d0e8; result evidence digest 5c4ef5f7b976c6be3dd76495c7f8b6574ef8747bcd1a3b773b7faffb41c7a736. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: control_studies.py. Tests: test_control_studies.py · test_studies_api.py. Shared study result contract.
Research pillars / research
research-eigenmodes · Closed-loop inverter eigenmodes
Linearize the unsaturated averaged LCL and cascaded PI model at its grid-voltage equilibrium, then report actual state-matrix eigenvalues and modal damping ratios.
Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.
Input schema, units and bounds (14 numeric; 0 JSON)
| Field | Unit | Minimum | Maximum | Default |
|---|---|---|---|---|
| filter_inductance_h | H | 0.0001 | 0.02 | Default 0.0015 |
| filter_resistance_ohm | Ω | 0.001 | 10 | Default 0.08 |
| filter_capacitance_f | F | 0.000001 | 0.001 | Default 0.00002 |
| grid_inductance_h | H | 0.0001 | 0.1 | Default 0.001 |
| grid_resistance_ohm | Ω | 0.001 | 10 | Default 0.05 |
| grid_angular_frequency_rad_s | rad/s | 250 | 400 | Default 314.1592653589793 |
| grid_voltage_peak_v | V peak | 50 | 800 | Default 325.27 |
| dc_bus_v | V | 100 | 1800 | Default 800 |
| modulation_index_max | ratio | 0.4 | 0.95 | Default 0.95 |
| current_limit_a | A | 0.1 | 1000 | Default 40 |
| current_kp_v_per_a | V/A | 0.001 | 100 | Default 1.5 |
| current_ki_v_per_as | V/(A·s) | 0.01 | 100000 | Default 1000 |
| voltage_kp_a_per_v | A/V | 0.001 | 100 | Default 0.2 |
| voltage_ki_a_per_vs | A/(V·s) | -100000 | 100000 | Default 80 |
Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.
Equations, references and limits
Declared equations
Compute the local matrix A by central-difference linearization of the same ten-state averaged plant/controller used by hybrid-controls at its unsaturated zero-load equilibrium; i_f,q=ωC_fV_grid,d supplies synchronous capacitor current, and PI integrators supply the balancing equilibrium outputs.λ_k are computed from A; local asymptotic stability requires max Re(λ_k)<0. The reported damping ratio is −Re(λ_k)/|λ_k|, and is a local linear modal quantity only.
Model limits
- Balanced positive-sequence dq averaged plant; the grid angle is imposed at the nominal frequency. There is no PLL state or synchronization transient.
- No PWM switching ripple, dead time, sample/computation delay, sensor filters, DC-link dynamics, unbalance, harmonics, protection, or grid-code behavior is modeled.
- The fixed-step RK4 model and local linearization are software research screens, not a calibrated controller, hardware result, field validation, or service qualification.
- This is the unsaturated local model at an equilibrium; current and modulation limit nonlinearities are inactive. It is not a large-disturbance stability guarantee.
- A negative outer voltage integral gain is accepted only to expose an intentionally wrong-sign unstable thought experiment; it is not a candidate tuning.
References
Fixture and per-study acceptance card
Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest c90990ac9fbccada9027b5165ae90ecb5c7cf0ce16c81225fd85d22475083464; result evidence digest 194c18e7acd8061111a4d872cd6c8d7525f1ec4b9aca2c1fd859c80652d2e2d0. Both identify content; neither establishes validity.
- Hand-checkable independent reference: NOT RUN.
- Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
- Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
- JSON, CSV and memorandum export path: NOT RUN in this documentation change.
Implementation: control_studies.py. Tests: test_control_studies.py · test_studies_api.py. Shared study result contract.
Source snapshot: human-readable registry · machine-readable registry · historical software verification record. Historical verification does not prove that this page’s app deployment is current.