Vertical SKUs
SolvLRDE ships as one native kernel (libsolvlrde + the solvlrde wheel). What
you buy is a vertical SKU — a licensed application namespace that matches how
your team integrates the solver, not a different binary or API surface.
Vertical SKUs exist because the same Talbot resolvent engine shows up in power-grid EMTP companions, quant pricing inner loops, LTI control analysis, climate tangent-linear blocks, thermal MOL discretizations, and reliability CTMCs. Procurement, compliance, and support boundaries are different in each industry; the license reflects that while the wheel stays identical.
Trial vs purchased seats
| Phase | features: on your .lic | What you can run |
|---|---|---|
| 30-day trial | grid,pricing,control,climate,thermal,specialty | All six SKU walkthroughs and integration paths |
| Purchased seat | One token (e.g. grid) | That vertical only — enforce in your app with license_has_sku() |
Core journeys 01–06 teach the kernel (solve, banded/DAE, time-independence).
They require only a valid license — no SKU token. Vertical walkthroughs 07–12
mirror production call patterns for each industry.
import solvlrde
if not solvlrde.license_has_sku("pricing"):
raise RuntimeError("This code path requires SolvLRDE-Pricing")See Licensing for activation and renewal.
SolvLRDE-Grid
License token: grid · Product name: SolvLRDE-Grid (resonix-grid)
Who buys it: Transmission operators, EMTP/EMT-type simulation vendors, protection and planning engineers embedding companion-form transients in digital twins.
The problem: After a breaker or tap change, the network is piecewise linear
for a while. Each interval is y' = A y on bus voltages and branch states. Classic
EMTP marches that interval with a timestep — cost grows with segment length and
stiffness bites on fast modes.
Why this SKU matters: SolvLRDE evaluates y(T) at the end of each segment directly. Segment duration does not inflate contour work. You stitch segment terminal states at switching times — the same orchestration pattern EMTP already uses, but the inner propagate step is resolvent-based instead of time-stepped.
Typical integration: Hold companion-form or Y-bus linearization A per topology;
call solve(A, y0, T=dt); pass result["y"] as y0 for the next segment. Large
sparse chains often use solve_banded when the operator is tridiagonal.
Walkthrough: Journey 07 — SolvLRDE-Grid
SolvLRDE-Pricing
License token: pricing · Product name: SolvLRDE-Pricing (resonix-pricing)
Who buys it: G-SIB quant infrastructure, xVA/FRTB IMA teams, ALM and risk engines that propagate mean-reverting rates or discretized pricing PDEs.
The problem: Pricing stacks spend most of their wall clock on repeated linear propagations — Hull-White OU steps, implicit PDE spatial operators held fixed per scenario, inner solves across a maturity ladder. Time-stepping each maturity scales with horizon; long-dated xVA makes that painful.
Why this SKU matters: When A is fixed for a scenario, each maturity Tᵢ is
one solve(A, y0, Tᵢ) with cost independent of Tᵢ. You keep nonlinear payoffs,
calibration, and scenario logic in your outer loop; LRDE replaces the inner linear
propagate step.
Typical integration: Discretize your OU or PDE spatial operator once per
scenario; loop maturities; assemble curves or cube faces from result["y"].
Walkthrough: Journey 08 — SolvLRDE-Pricing
SolvLRDE-Control
License token: control · Product name: SolvLRDE-Control (resonix-control)
Who buys it: Aerospace, automotive, and robotics teams working with LTI state-space plants, OEMs evaluating resolvent-based analysis before production licensing.
The problem: Step responses, frequency sweeps, and Gramian-style queries reduce
to evaluating the resolvent of a constant A at target times. Integrating the same
LTI forward in time is correct but wasteful when you only need y(T) at specific
horizons or many T values for a modal study.
Why this SKU matters: Paste A from your linearized plant (or second-order
companion form) and get step or impulse response at arbitrary T without
choosing a timestep or stiffness-tolerant integrator. This is the SKU most often
adopted through the 30-day trial — engineers verify against known transfer
functions before committing.
Typical integration: solve(A, x0, T) for step inputs encoded in x0 or
constant forcing b; loop T for frequency-domain style sweeps via the resolvent.
Walkthrough: Journey 09 — SolvLRDE-Control
SolvLRDE-Climate
License token: climate · Product name: SolvLRDE-Climate (resonix-climate)
Who buys it: National labs, CMIP-class modeling groups, energy-system teams with tangent-linear or linearized sub-blocks inside larger Earth-system workflows.
The problem: Fully nonlinear primitive-equation dynamics stay in the host model.
But radiative transfer, tracer transport linearizations, and tangent-linear mode
blocks are constant-coefficient linear systems over a sub-step. Century-scale
horizons (T ~ 100 years in model time units) make naive time-stepping expensive
for those blocks.
Why this SKU matters: Fast/slow TLM blocks can call solve(A, y0, T) at
century-scale T with the same contour cost as T = 1. Stiff separation between
slow climate modes and fast adjustments does not force smaller steps inside LRDE.
Typical integration: Host model supplies A for a linearized sub-step;
LRDE returns perturbation state at sub-step end; host continues nonlinear integration.
Walkthrough: Journey 10 — SolvLRDE-Climate
SolvLRDE-Thermal
License token: thermal · Product name: SolvLRDE-Thermal (resonix-thermal)
Who buys it: Thermal, heat-transfer, and process engineers using method-of-lines (MOL) discretizations of parabolic PDEs (heat equation, diffusion-dominated transients).
The problem: Semi-discretize u_t = Lu in space; the semidiscrete operator is
banded (tridiagonal for 1-D heat). You need u(T) at the far end of a rod,
fins, or reduced thermal network — not necessarily every intermediate time point.
Why this SKU matters: Use solve_banded on the MOL operator with bandwidth
from your stencil. Cost tracks contour nodes, not physical time. Stiff spatial
refinement (fine meshes) is handled like any other linear system — no CFL-driven
step count explosion for the direct u(T) query.
Typical integration: Build banded A from your FD/FV stencil; solve_banded
for u(T); pair with journey 05 banded/DAE patterns for production DAE reductions.
Walkthrough: Journey 11 — SolvLRDE-Thermal
SolvLRDE-Specialty
License token: specialty · Product name: SolvLRDE-Specialty (resonix-specialty)
Who buys it: Reliability engineering, queueing theory, and bespoke simulation teams with generator-matrix models that do not fit the other verticals.
The problem: Continuous-time Markov chains, reliability CTMCs, and custom
linear relaxation models share y' = Q y with constant generator Q. You need
state probabilities or occupancies at horizon T, not a dense time history.
Why this SKU matters: Pricing SKU targets term-structure and PDE-style kernels;
Grid targets EMTP companions. Specialty is the catch-all for everything else
linear where you already hold A or Q — two-state repair models, queue
relaxation, custom propagators — without forcing a grid or quant narrative.
Typical integration: solve(Q, p0, T) for probability vector p(T); validate
against closed-form exponentials for small systems before scaling dimension.
Walkthrough: Journey 12 — SolvLRDE-Specialty
Quick reference
| SKU | Token | Primary buyer | Core workload | API emphasis |
|---|---|---|---|---|
| Grid | grid | EMTP / TSO | Post-switch companion segments | solve, stitch at breakers |
| Pricing | pricing | Quant / ALM | OU / PDE inner propagate across maturities | solve, maturity loop |
| Control | control | Aerospace / auto LTI | Step / modal response at arbitrary T | solve, state-space A |
| Climate | climate | Earth-system / TLM | Linear sub-blocks at long T | solve, host-model coupling |
| Thermal | thermal | Heat / MOL | Banded spatial operators | solve_banded |
| Specialty | specialty | Reliability / CTMC | Generator-matrix propagate | solve on Q |
Menu (bundle): python examples/run_sku_examples.py
Order: Complete journeys 01–06, then your SKU script.
Not covered by any SKU
SolvLRDE is only for constant-coefficient linear systems. Route elsewhere:
- Nonlinear IVPs (
y' = f(t,y)) → SolvSRK - Parameter sweeps / study receipts → SolvJump
- Dense time trajectories → call
solveper targetT, or use a stepper if you need continuous output
See Journey 06 — Limits for the full routing table.