A deterministic engine you can actually audit
No black box. Every number traces to a documented physical or financial model, a versioned dataset, and a seeded random stream. Identical inputs always produce identical outputs.
Solar resource
Solar geometry → Hottel clear-sky envelope → seeded cloud modulation → Erbs diffuse split → isotropic POA transposition. Climate-differentiated, fully deterministic.
Load model
Archetype weekday/weekend/seasonal shapes scaled to peak, or your own 8760-hour CSV. Critical-load fractions for resilience framing.
Hourly dispatch
8,760-step chronological simulation: PV → battery → genset priority, SOC propagation, converter losses, linear fuel curve, two strategies.
Lifecycle economics
NPC with real discounting, component replacements & salvage, escalating fuel, plus an automatic diesel-only baseline for savings/payback/IRR.
Sizing optimizer
Exhaustive constraint-enforced sweep over PV × battery × genset. Returns the provably lowest-NPC feasible point in the grid.
Real solar geometry, not a lookup
Hourly irradiance is built from first principles: solar declination and hour angle give the zenith; a Hottel clear-sky model sets the beam/diffuse envelope; a seeded daily clearness index introduces realistic cloud cover; Erbs splits global into beam and diffuse; and an isotropic transposition projects onto the tilted array. PV power applies an NOCT cell-temperature model and a temperature coefficient.
cos θz = sinφ·sinδ + cosφ·cosδ·cosω
P = P_rated · (POA/1000) · [1 + γ(T_cell − 25)] · derateGenerator fuel & part-load
Each hour, PV serves load first, surplus charges the battery, the battery covers the remaining deficit, and the generator makes up the rest — never running below its minimum loading, and burning fuel for its actual operating setpoint (surplus it cannot use is dumped, not hidden). Fuel follows the standard linear curve, so part-load efficiency is modeled correctly. Minimum runtime, start costs, and generator fleets are roadmap items.
fuel [L/h] = a · P_rated + b · P_out
SOC limited by power, converter & usable depthValidation ladder
You shouldn’t trust a model you can’t check. Here’s how every release is held to account.
Acceptance suite
Shipping today. Frozen 20-project suite re-run every release: energy balance < 0.1%, SOC bounds, strict 0% capacity shortage on every optimum.
Invariant checks
Shipping today. Energy balance, SOC propagation, fuel curve, and COE/NPC formula checks on every benchmark.
Cross-engine · planned
Planned. Identical cases run through independent reference engines (REopt.jl, PySAM) with a reported delta.
External anchoring · planned
Planned. Specific-yield checks vs PVGIS/PVWatts at real coordinates and published REopt cases.
The roadmap
We ship the rigorous wedge first, then earn the right to the rest. We’re honest about what runs today.
Deterministic dispatch + grid-search sizing
Constraint-enforced, reproducible, audit-ready. Shipping today.
True MILP core
Replace the grid sweep with a mixed-integer program (HiGHS / commercial solvers) for continuous-variable global optimality on generator commitment and storage.
Physics-aware power flow
Unbalanced multiphase AC power flow validation so economic designs respect voltage and thermal limits on real feeders.
Spatial array layout
Satellite/LiDAR roof & parcel modeling so the optimal capacity is verified to physically fit.
Digital twin · IEEE 2030.7
Compile dispatch logic to standards-compliant controllers and run a live MPC twin against telemetry.
EV fleet & V2G co-optimization
Treat connected fleets as dispatchable storage with route-feasibility constraints.